diff --git a/.gitignore b/.gitignore index 86f8def..42e827c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ built brackets-typescript.zip tmp coverage +.grunt diff --git a/Gruntfile.js b/Gruntfile.js index a9fdda4..5ca8c87 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -93,28 +93,12 @@ module.exports = function (grunt) { 'built/main.js': ['tmp/main/index.js'] }, options : { - shim: { - typescriptServices: { - path: 'third_party/typescript/typescriptServices.js', - exports: 'TypeScript' - } - }, - noParse: ['third_party/typescript/typescriptServices.js'], standalone: 'bracketsTypescript' } }, worker: { files: { 'built/worker.js': ['tmp/ts-worker/index.js'] - }, - options: { - shim: { - typescriptServices: { - path: 'third_party/typescript/typescriptServices.js', - exports: 'TypeScript' - } - }, - noParse: ['third_party/typescript/typescriptServices.js'] } }, diff --git a/bin/main.js b/bin/main.js index 8a19979..03b2031 100644 --- a/bin/main.js +++ b/bin/main.js @@ -1,198 +1,297 @@ !function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.bracketsTypescript=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -var SomePromiseArray = _dereq_("./some_promise_array.js")(PromiseArray); -function Promise$_Any(promises, useBound) { - var ret = Promise$_CreatePromiseArray( - promises, - SomePromiseArray, - useBound === true && promises._isBound() - ? promises._boundTo - : void 0 - ); - var promise = ret.promise(); - if (promise.isRejected()) { - return promise; +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; } - ret.setHowMany(1); - ret.setUnwrap(); - ret.init(); - return promise; + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; } -Promise.any = function Promise$Any(promises) { - return Promise$_Any(promises, false); +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); }; -Promise.prototype.any = function Promise$any() { - return Promise$_Any(this, true); -}; +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; -}; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); -},{"./some_promise_array.js":33}],2:[function(_dereq_,module,exports){ -/** - * Copyright (c) 2014 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions:

- * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -var schedule = _dereq_("./schedule.js"); -var Queue = _dereq_("./queue.js"); -var errorObj = _dereq_("./util.js").errorObj; -var tryCatch1 = _dereq_("./util.js").tryCatch1; -var process = _dereq_("./global.js").process; + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } -function Async() { - this._isTickUsed = false; - this._length = 0; - this._lateBuffer = new Queue(); - this._functionBuffer = new Queue(25000 * 3); - var self = this; - this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { - self._consumeFunctionBuffer(); - }; -} + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } -Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { - return this._length > 0; -}; + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) -Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { - if (process !== void 0 && - process.domain != null && - !fn.domain) { - fn = process.domain.bind(fn); - } - this._lateBuffer.push(fn, receiver, arg); - this._queueTick(); -}; + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); -Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { - if (process !== void 0 && - process.domain != null && - !fn.domain) { - fn = process.domain.bind(fn); - } - var functionBuffer = this._functionBuffer; - functionBuffer.push(fn, receiver, arg); - this._length = functionBuffer.length(); - this._queueTick(); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; }; -Async.prototype._consumeFunctionBuffer = -function Async$_consumeFunctionBuffer() { - var functionBuffer = this._functionBuffer; - while(functionBuffer.length() > 0) { - var fn = functionBuffer.shift(); - var receiver = functionBuffer.shift(); - var arg = functionBuffer.shift(); - fn.call(receiver, arg); - } - this._reset(); - this._consumeLateBuffer(); +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; }; -Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { - var buffer = this._lateBuffer; - while(buffer.length() > 0) { - var fn = buffer.shift(); - var receiver = buffer.shift(); - var arg = buffer.shift(); - var res = tryCatch1(fn, receiver, arg); - if (res === errorObj) { - this._queueTick(); - if (fn.domain != null) { - fn.domain.emit("error", res.e); - } - else { - throw res.e; - } - } - } +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; }; -Async.prototype._queueTick = function Async$_queue() { - if (!this._isTickUsed) { - schedule(this.consumeFunctionBuffer); - this._isTickUsed = true; +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); } + return p; + }).join('/')); }; -Async.prototype._reset = function Async$_reset() { - this._isTickUsed = false; - this._length = 0; -}; -module.exports = new Async(); +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); -},{"./global.js":15,"./queue.js":26,"./schedule.js":29,"./util.js":37}],3:[function(_dereq_,module,exports){ -/** - * Copyright (c) 2014 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions:

- * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -var Promise = _dereq_("./promise.js")(); -module.exports = Promise; -},{"./promise.js":19}],4:[function(_dereq_,module,exports){ + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,_dereq_("tWU75n")) +},{"tWU75n":2}],2:[function(_dereq_,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; + +process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' + && window.setImmediate; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) }; + } + + if (canPost) { + var queue = []; + window.addEventListener('message', function (ev) { + var source = ev.source; + if ((source === window || source === null) && ev.data === 'process-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; + } + + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}],3:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -216,38 +315,38 @@ module.exports = Promise; * */ "use strict"; -module.exports = function(Promise) { -Promise.prototype.call = function Promise$call(propertyName) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} +module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { - return this._then(function(obj) { - return obj[propertyName].apply(obj, args); - }, - void 0, - void 0, - void 0, - void 0 +var SomePromiseArray = _dereq_("./some_promise_array.js")(PromiseArray); +function Promise$_Any(promises, useBound) { + var ret = Promise$_CreatePromiseArray( + promises, + SomePromiseArray, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 ); + var promise = ret.promise(); + if (promise.isRejected()) { + return promise; + } + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; +} + +Promise.any = function Promise$Any(promises) { + return Promise$_Any(promises, false); }; -function Promise$getter(obj) { - var prop = typeof this === "string" - ? this - : ("" + this); - return obj[prop]; -} -Promise.prototype.get = function Promise$get(propertyName) { - return this._then( - Promise$getter, - void 0, - void 0, - propertyName, - void 0 - ); +Promise.prototype.any = function Promise$any() { + return Promise$_Any(this, true); }; + }; -},{}],5:[function(_dereq_,module,exports){ +},{"./some_promise_array.js":35}],4:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -271,32 +370,226 @@ Promise.prototype.get = function Promise$get(propertyName) { * */ "use strict"; -module.exports = function(Promise, INTERNAL) { -var errors = _dereq_("./errors.js"); -var async = _dereq_("./async.js"); -var CancellationError = errors.CancellationError; +var schedule = _dereq_("./schedule.js"); +var Queue = _dereq_("./queue.js"); +var errorObj = _dereq_("./util.js").errorObj; +var tryCatch1 = _dereq_("./util.js").tryCatch1; +var process = _dereq_("./global.js").process; -Promise.prototype._cancel = function Promise$_cancel() { - if (!this.isCancellable()) return this; - var parent; - var promiseToReject = this; - while ((parent = promiseToReject._cancellationParent) !== void 0 && - parent.isCancellable()) { - promiseToReject = parent; - } - var err = new CancellationError(); - promiseToReject._attachExtraTrace(err); - promiseToReject._rejectUnchecked(err); -}; +function Async() { + this._isTickUsed = false; + this._length = 0; + this._lateBuffer = new Queue(); + this._functionBuffer = new Queue(25000 * 3); + var self = this; + this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { + self._consumeFunctionBuffer(); + }; +} -Promise.prototype.cancel = function Promise$cancel() { - if (!this.isCancellable()) return this; - async.invokeLater(this._cancel, this, void 0); - return this; +Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { + return this._length > 0; }; -Promise.prototype.cancellable = function Promise$cancellable() { - if (this._cancellable()) return this; +Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { + if (process !== void 0 && + process.domain != null && + !fn.domain) { + fn = process.domain.bind(fn); + } + this._lateBuffer.push(fn, receiver, arg); + this._queueTick(); +}; + +Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { + if (process !== void 0 && + process.domain != null && + !fn.domain) { + fn = process.domain.bind(fn); + } + var functionBuffer = this._functionBuffer; + functionBuffer.push(fn, receiver, arg); + this._length = functionBuffer.length(); + this._queueTick(); +}; + +Async.prototype._consumeFunctionBuffer = +function Async$_consumeFunctionBuffer() { + var functionBuffer = this._functionBuffer; + while(functionBuffer.length() > 0) { + var fn = functionBuffer.shift(); + var receiver = functionBuffer.shift(); + var arg = functionBuffer.shift(); + fn.call(receiver, arg); + } + this._reset(); + this._consumeLateBuffer(); +}; + +Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { + var buffer = this._lateBuffer; + while(buffer.length() > 0) { + var fn = buffer.shift(); + var receiver = buffer.shift(); + var arg = buffer.shift(); + var res = tryCatch1(fn, receiver, arg); + if (res === errorObj) { + this._queueTick(); + if (fn.domain != null) { + fn.domain.emit("error", res.e); + } + else { + throw res.e; + } + } + } +}; + +Async.prototype._queueTick = function Async$_queue() { + if (!this._isTickUsed) { + schedule(this.consumeFunctionBuffer); + this._isTickUsed = true; + } +}; + +Async.prototype._reset = function Async$_reset() { + this._isTickUsed = false; + this._length = 0; +}; + +module.exports = new Async(); + +},{"./global.js":17,"./queue.js":28,"./schedule.js":31,"./util.js":39}],5:[function(_dereq_,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

+ * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var Promise = _dereq_("./promise.js")(); +module.exports = Promise; +},{"./promise.js":21}],6:[function(_dereq_,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

+ * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { +Promise.prototype.call = function Promise$call(propertyName) { + var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} + + return this._then(function(obj) { + return obj[propertyName].apply(obj, args); + }, + void 0, + void 0, + void 0, + void 0 + ); +}; + +function Promise$getter(obj) { + var prop = typeof this === "string" + ? this + : ("" + this); + return obj[prop]; +} +Promise.prototype.get = function Promise$get(propertyName) { + return this._then( + Promise$getter, + void 0, + void 0, + propertyName, + void 0 + ); +}; +}; + +},{}],7:[function(_dereq_,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

+ * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var errors = _dereq_("./errors.js"); +var async = _dereq_("./async.js"); +var CancellationError = errors.CancellationError; + +Promise.prototype._cancel = function Promise$_cancel() { + if (!this.isCancellable()) return this; + var parent; + var promiseToReject = this; + while ((parent = promiseToReject._cancellationParent) !== void 0 && + parent.isCancellable()) { + promiseToReject = parent; + } + var err = new CancellationError(); + promiseToReject._attachExtraTrace(err); + promiseToReject._rejectUnchecked(err); +}; + +Promise.prototype.cancel = function Promise$cancel() { + if (!this.isCancellable()) return this; + async.invokeLater(this._cancel, this, void 0); + return this; +}; + +Promise.prototype.cancellable = function Promise$cancellable() { + if (this._cancellable()) return this; this._setCancellable(); this._cancellationParent = void 0; return this; @@ -322,7 +615,7 @@ function Promise$fork(didFulfill, didReject, didProgress) { }; }; -},{"./async.js":2,"./errors.js":9}],6:[function(_dereq_,module,exports){ +},{"./async.js":4,"./errors.js":11}],8:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -546,7 +839,7 @@ var captureStackTrace = (function stackDetection() { return CapturedTrace; }; -},{"./es5.js":11,"./util.js":37}],7:[function(_dereq_,module,exports){ +},{"./es5.js":13,"./util.js":39}],9:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -642,7 +935,7 @@ CatchFilter.prototype.doFilter = function CatchFilter$_doFilter(e) { return CatchFilter; }; -},{"./errors.js":9,"./es5.js":11,"./util.js":37}],8:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./es5.js":13,"./util.js":39}],10:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -723,7 +1016,7 @@ function Promise$thenThrow(reason) { }; }; -},{"./util.js":37}],9:[function(_dereq_,module,exports){ +},{"./util.js":39}],11:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -839,7 +1132,7 @@ module.exports = { canAttach: canAttach }; -},{"./es5.js":11,"./global.js":15,"./util.js":37}],10:[function(_dereq_,module,exports){ +},{"./es5.js":13,"./global.js":17,"./util.js":39}],12:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -879,7 +1172,7 @@ function apiRejection(msg) { return apiRejection; }; -},{"./errors.js":9}],11:[function(_dereq_,module,exports){ +},{"./errors.js":11}],13:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -923,7 +1216,7 @@ else { var str = {}.toString; var proto = {}.constructor.prototype; - function ObjectKeys(o) { + var ObjectKeys = function ObjectKeys(o) { var ret = []; for (var key in o) { if (has.call(o, key)) { @@ -933,16 +1226,16 @@ else { return ret; } - function ObjectDefineProperty(o, key, desc) { + var ObjectDefineProperty = function ObjectDefineProperty(o, key, desc) { o[key] = desc.value; return o; } - function ObjectFreeze(obj) { + var ObjectFreeze = function ObjectFreeze(obj) { return obj; } - function ObjectGetPrototypeOf(obj) { + var ObjectGetPrototypeOf = function ObjectGetPrototypeOf(obj) { try { return Object(obj).constructor.prototype; } @@ -951,7 +1244,7 @@ else { } } - function ArrayIsArray(obj) { + var ArrayIsArray = function ArrayIsArray(obj) { try { return str.call(obj) === "[object Array]"; } @@ -970,7 +1263,7 @@ else { }; } -},{}],12:[function(_dereq_,module,exports){ +},{}],14:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1023,7 +1316,7 @@ Promise.prototype.filter = function Promise$filter(fn) { }; }; -},{"./util.js":37}],13:[function(_dereq_,module,exports){ +},{"./util.js":39}],15:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1148,7 +1441,7 @@ Promise.prototype.tap = function Promise$tap(handler) { }; }; -},{"./util.js":37}],14:[function(_dereq_,module,exports){ +},{"./util.js":39}],16:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1206,8 +1499,9 @@ Promise.spawn = function Promise$Spawn(generatorFunction) { }; }; -},{"./errors.js":9,"./promise_spawn.js":22,"./util.js":37}],15:[function(_dereq_,module,exports){ -(function (global){/** +},{"./errors.js":11,"./promise_spawn.js":24,"./util.js":39}],17:[function(_dereq_,module,exports){ +(function (global){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1238,8 +1532,9 @@ module.exports = (function() { try {return self;} catch(e) {} })(); + }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],16:[function(_dereq_,module,exports){ +},{}],18:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1417,7 +1712,7 @@ Promise.map = function Promise$Map(promises, fn, ref) { }; }; -},{"./errors.js":9,"./util.js":37}],17:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./util.js":39}],19:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1483,7 +1778,7 @@ Promise.prototype.nodeify = function Promise$nodeify(nodeback) { }; }; -},{"./async.js":2,"./util.js":37}],18:[function(_dereq_,module,exports){ +},{"./async.js":4,"./util.js":39}],20:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1596,8 +1891,9 @@ function Promise$_progressUnchecked(progressValue) { }; }; -},{"./async.js":2,"./errors.js":9,"./util.js":37}],19:[function(_dereq_,module,exports){ -(function (process){/** +},{"./async.js":4,"./errors.js":11,"./util.js":39}],21:[function(_dereq_,module,exports){ +(function (process){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -2729,8 +3025,9 @@ Promise.prototype = Promise.prototype; return Promise; }; -}).call(this,_dereq_("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./any.js":1,"./async.js":2,"./call_get.js":4,"./cancel.js":5,"./captured_trace.js":6,"./catch_filter.js":7,"./direct_resolve.js":8,"./errors.js":9,"./errors_api_rejection":10,"./filter.js":12,"./finally.js":13,"./generators.js":14,"./global.js":15,"./map.js":16,"./nodeify.js":17,"./progress.js":18,"./promise_array.js":20,"./promise_resolver.js":21,"./promisify.js":23,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":32,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./util.js":37,"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],20:[function(_dereq_,module,exports){ + +}).call(this,_dereq_("tWU75n")) +},{"./any.js":3,"./async.js":4,"./call_get.js":6,"./cancel.js":7,"./captured_trace.js":8,"./catch_filter.js":9,"./direct_resolve.js":10,"./errors.js":11,"./errors_api_rejection":12,"./filter.js":14,"./finally.js":15,"./generators.js":16,"./global.js":17,"./map.js":18,"./nodeify.js":19,"./progress.js":20,"./promise_array.js":22,"./promise_resolver.js":23,"./promisify.js":25,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":34,"./synchronous_inspection.js":36,"./thenables.js":37,"./timers.js":38,"./util.js":39,"tWU75n":2}],22:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -2965,7 +3262,7 @@ function PromiseArray$_promiseRejected(reason, index) { return PromiseArray; }; -},{"./async.js":2,"./errors.js":9,"./util.js":37}],21:[function(_dereq_,module,exports){ +},{"./async.js":4,"./errors.js":11,"./util.js":39}],23:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3072,6 +3369,9 @@ PromiseResolver.prototype.toString = function PromiseResolver$toString() { PromiseResolver.prototype.resolve = PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { var promise = this.promise; + if ((promise === void 0) || (promise._tryFollow === void 0)) { + throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead."); + } if (promise._tryFollow(value)) { return; } @@ -3080,6 +3380,9 @@ PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { PromiseResolver.prototype.reject = function PromiseResolver$reject(reason) { var promise = this.promise; + if ((promise === void 0) || (promise._attachExtraTrace === void 0)) { + throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead."); + } errors.markAsOriginatingFromRejection(reason); var trace = errors.canAttach(reason) ? reason : new Error(reason + ""); promise._attachExtraTrace(trace); @@ -3119,7 +3422,7 @@ function PromiseResolver$_setCarriedStackTrace(trace) { module.exports = PromiseResolver; -},{"./async.js":2,"./errors.js":9,"./es5.js":11,"./util.js":37}],22:[function(_dereq_,module,exports){ +},{"./async.js":4,"./errors.js":11,"./es5.js":13,"./util.js":39}],24:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3251,7 +3554,7 @@ PromiseSpawn.addYieldHandler = function PromiseSpawn$AddYieldHandler(fn) { return PromiseSpawn; }; -},{"./errors.js":9,"./util.js":37}],23:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./util.js":39}],25:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3386,9 +3689,8 @@ function parameterCount(fn) { return 0; } +var rident = /^[a-z$_][a-z$_0-9]*$/i; function propertyAccess(id) { - var rident = /^[a-z$_][a-z$_0-9]*$/i; - if (rident.test(id)) { return "." + id; } @@ -3424,6 +3726,10 @@ function makeNodePromisifiedEval(callback, receiver, originalName, fn) { "break;"; } + if (!rident.test(callbackName)) { + callbackName = "promisified"; + } + function generateArgumentSwitchCase() { var ret = ""; for(var i = 0; i < argumentOrder.length; ++i) { @@ -3543,7 +3849,7 @@ Promise.promisifyAll = function Promise$PromisifyAll(target) { }; -},{"./errors":9,"./es5.js":11,"./promise_resolver.js":21,"./util.js":37}],24:[function(_dereq_,module,exports){ +},{"./errors":11,"./es5.js":13,"./promise_resolver.js":23,"./util.js":39}],26:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3622,7 +3928,7 @@ PromiseArray.PropertiesPromiseArray = PropertiesPromiseArray; return PropertiesPromiseArray; }; -},{"./es5.js":11,"./util.js":37}],25:[function(_dereq_,module,exports){ +},{"./es5.js":13,"./util.js":39}],27:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3688,7 +3994,7 @@ Promise.props = function Promise$Props(promises) { }; }; -},{"./errors_api_rejection":10,"./properties_promise_array.js":24,"./util.js":37}],26:[function(_dereq_,module,exports){ +},{"./errors_api_rejection":12,"./properties_promise_array.js":26,"./util.js":39}],28:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3825,7 +4131,7 @@ Queue.prototype._resizeTo = function Queue$_resizeTo(capacity) { module.exports = Queue; -},{}],27:[function(_dereq_,module,exports){ +},{}],29:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3911,7 +4217,7 @@ Promise.prototype.race = function Promise$race() { }; -},{"./errors_api_rejection.js":10,"./util.js":37}],28:[function(_dereq_,module,exports){ +},{"./errors_api_rejection.js":12,"./util.js":39}],30:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4074,8 +4380,9 @@ Promise.prototype.reduce = function Promise$reduce(fn, initialValue) { }; }; -},{}],29:[function(_dereq_,module,exports){ -(function (process){/** +},{}],31:[function(_dereq_,module,exports){ +(function (process){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -4196,8 +4503,9 @@ else { } module.exports = schedule; -}).call(this,_dereq_("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./global.js":15,"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],30:[function(_dereq_,module,exports){ + +}).call(this,_dereq_("tWU75n")) +},{"./global.js":17,"tWU75n":2}],32:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4246,7 +4554,7 @@ Promise.prototype.settle = function Promise$settle() { }; }; -},{"./settled_promise_array.js":31}],31:[function(_dereq_,module,exports){ +},{"./settled_promise_array.js":33}],33:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4308,7 +4616,7 @@ function SettledPromiseArray$_promiseRejected(reason, index) { return SettledPromiseArray; }; -},{"./util.js":37}],32:[function(_dereq_,module,exports){ +},{"./util.js":39}],34:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4366,7 +4674,7 @@ Promise.prototype.some = function Promise$some(count) { }; -},{"./some_promise_array.js":33}],33:[function(_dereq_,module,exports){ +},{"./some_promise_array.js":35}],35:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4499,7 +4807,7 @@ function SomePromiseArray$_canPossiblyFulfill() { return SomePromiseArray; }; -},{"./errors.js":9,"./util.js":37}],34:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./util.js":39}],36:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4580,7 +4888,7 @@ Promise.prototype.inspect = function Promise$inspect() { Promise.PromiseInspection = PromiseInspection; }; -},{}],35:[function(_dereq_,module,exports){ +},{}],37:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4717,7 +5025,7 @@ function Promise$_doThenable(x, then, originalPromise) { Promise._cast = Promise$_Cast; }; -},{"./errors.js":9,"./util.js":37}],36:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./util.js":39}],38:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4822,7 +5130,7 @@ Promise.prototype.timeout = function Promise$timeout(ms, message) { }; -},{"./errors.js":9,"./errors_api_rejection":10,"./global.js":15,"./util.js":37}],37:[function(_dereq_,module,exports){ +},{"./errors.js":11,"./errors_api_rejection":12,"./global.js":17,"./util.js":39}],39:[function(_dereq_,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -5017,72831 +5325,2881 @@ var ret = { module.exports = ret; -},{"./es5.js":11,"./global.js":15}],38:[function(_dereq_,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; +},{"./es5.js":13,"./global.js":17}],40:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// StringSet +// +//-------------------------------------------------------------------------- +/** +* Set that only accept string as value +*/ +var StringSet = (function () { + /** + * constructor + * @param array an array of string that will be added to the set + */ + function StringSet(array) { + this.map = Object.create(null); + if (array) { + for (var i = 0, l = array.length; i < l; i++) { + this.add(array[i]); + } + } + } + /** + * add a value to the set + * @param value + */ + StringSet.prototype.add = function (value) { + this.map[value] = true; + }; + + /** + * remove a value from the set + * @param value + */ + StringSet.prototype.remove = function (value) { + delete this.map[value]; + }; + + /** + * return true if the set contains the given value + * @param value + */ + StringSet.prototype.has = function (value) { + return !!this.map[value]; + }; + + Object.defineProperty(StringSet.prototype, "values", { + /** + * return an array containing the values of the set + */ + get: function () { + return Object.keys(this.map); + }, + enumerable: true, + configurable: true + }); + return StringSet; +})(); +exports.StringSet = StringSet; + +; + +/** +* Map that only accept string as key +*/ +var StringMap = (function () { + /** + * constructor + * @param obj initial values to set in the map each properties + * of the object will be treaded as a pair key/value + */ + function StringMap(obj) { + var _this = this; + this.map = Object.create(null); + this.mascot = {}; + if (obj) { + Object.keys(obj).forEach(function (key) { + return _this.map[key] = obj[key]; + }); + } + } + /** + * set a value in the map + * @param key the key + * @param value the value + */ + StringMap.prototype.set = function (key, value) { + this.map[key] = (typeof value === 'undefined' ? this.mascot : value); + }; + + /** + * retrive a value associated to the given key + * @param key the key to retrieve the value associated with + */ + StringMap.prototype.get = function (key) { + var value = this.map[key]; + return value === this.mascot ? undefined : value; + }; + + /** + * delete an entry corresponding to the given key + * @param key + */ + StringMap.prototype.delete = function (key) { + return delete this.map[key]; + }; + + /** + * return true if the map contains the given key + * @param key + */ + StringMap.prototype.has = function (key) { + return typeof this.map[key] !== 'undefined'; + }; + + /** + * clear the map + */ + StringMap.prototype.clear = function () { + this.map = Object.create(null); + }; + + Object.defineProperty(StringMap.prototype, "keys", { + /** + * return an array containing the keys of the map + */ + get: function () { + return Object.keys(this.map); + }, + enumerable: true, + configurable: true + }); + + Object.defineProperty(StringMap.prototype, "values", { + /** + * return an array containing the values of the map + */ + get: function () { + var _this = this; + return Object.keys(this.map).map(function (key) { + return _this.map[key]; + }); + }, + enumerable: true, + configurable: true + }); + + Object.defineProperty(StringMap.prototype, "entries", { + /** + * return an array containing the entries of the map + */ + get: function () { + var _this = this; + return Object.keys(this.map).map(function (key) { + return { + key: key, + value: _this.map[key] + }; + }); + }, + enumerable: true, + configurable: true + }); + + /** + * return an object representation + */ + StringMap.prototype.toObject = function () { + var _this = this; + return Object.keys(this.map).reduce(function (obj, key) { + obj[key] = _this.map[key]; + return obj; + }, {}); + }; + + /** + * return a clone of the map + */ + StringMap.prototype.clone = function () { + return new StringMap(this.toObject()); + }; + return StringMap; +})(); +exports.StringMap = StringMap; + +},{}],41:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/** +* An Enum representing the different kind of hint +*/ +(function (CompletionKind) { + /** + * the completion entry correspond to a class name + */ + CompletionKind[CompletionKind["CLASS"] = 0] = "CLASS"; + + /** + * the completion entry correspond to an interface name + */ + CompletionKind[CompletionKind["INTERFACE"] = 1] = "INTERFACE"; + + /** + * the completion entry correspond to an enum name + */ + CompletionKind[CompletionKind["ENUM"] = 2] = "ENUM"; + + /** + * the completion entry correspond to a module name + */ + CompletionKind[CompletionKind["MODULE"] = 3] = "MODULE"; + + /** + * the completion entry correspond to a variable name + */ + CompletionKind[CompletionKind["VARIABLE"] = 4] = "VARIABLE"; + + /** + * the completion entry correspond to a mehtod name + */ + CompletionKind[CompletionKind["METHOD"] = 5] = "METHOD"; + + /** + * the completion entry correspond to a function + */ + CompletionKind[CompletionKind["FUNCTION"] = 6] = "FUNCTION"; + + /** + * the completion entry correspond to a keyword + */ + CompletionKind[CompletionKind["KEYWORD"] = 7] = "KEYWORD"; + + /** + * Any other type + */ + CompletionKind[CompletionKind["DEFAULT"] = 8] = "DEFAULT"; +})(exports.CompletionKind || (exports.CompletionKind = {})); +var CompletionKind = exports.CompletionKind; + + + -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; +},{}],42:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//-------------------------------------------------------------------------- +// +// Change record +// +//-------------------------------------------------------------------------- +/** +* enum representing the kind change possible in the fileSysem +*/ +(function (FileChangeKind) { + /** + * a file has been added + */ + FileChangeKind[FileChangeKind["ADD"] = 0] = "ADD"; + + /** + * a file has been updated + */ + FileChangeKind[FileChangeKind["UPDATE"] = 1] = "UPDATE"; + + /** + * a file has been deleted + */ + FileChangeKind[FileChangeKind["DELETE"] = 2] = "DELETE"; + + /** + * the project files has been reset + */ + FileChangeKind[FileChangeKind["RESET"] = 3] = "RESET"; +})(exports.FileChangeKind || (exports.FileChangeKind = {})); +var FileChangeKind = exports.FileChangeKind; + - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; - } - - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } - - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); - -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; +},{}],43:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// Immediate +// +//-------------------------------------------------------------------------- +/** +* a setImmediate shim +*/ +var immediateImpl; + +if (typeof window.setImmediate !== 'undefined') { + immediateImpl = window; +} else { + var setImmediateQueue = [], canceledImmediate = {}, sentinel = 'immediate' + String(Math.random()), uidHelper = 0; + + window.addEventListener('message', function (event) { + if (event.data === sentinel) { + var queue = setImmediateQueue, canceled = canceledImmediate; + + setImmediateQueue = []; + canceledImmediate = {}; + queue.forEach(function (task) { + if (!canceled[task.handle]) { + task.callBack.apply(null, task.parameters); + } + }); + } + }); + + immediateImpl = { + setImmediate: function (expression) { + var args = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + args[_i] = arguments[_i + 1]; + } + uidHelper++; + setImmediateQueue.push({ + handle: uidHelper, + callBack: typeof expression === 'string' ? new Function(expression) : expression, + parameters: args + }); + window.postMessage(sentinel, '*'); + return uidHelper; + }, + clearImmediate: function (handle) { + canceledImmediate[handle] = true; + } + }; + + Object.freeze(immediateImpl); +} + +module.exports = immediateImpl; -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} +},{}],44:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// Logger +// +//-------------------------------------------------------------------------- +/** +* hold the configured log level +*/ +var currentLogLevel = 1 /* error */; + +/** +* return true if the logging level is superior or equal to information +*/ +function information() { + return currentLogLevel >= 4 /* information */; +} +exports.information = information; + +/** +* return true if the logging level is superior or equal to debug +*/ +function debug() { + return currentLogLevel >= 3 /* debug */; +} +exports.debug = debug; + +/** +* return true if the logging level is superior or equal to warning +*/ +function warning() { + return currentLogLevel >= 2 /* warning */; +} +exports.warning = warning; + +/** +* return true if the logging level is superior or equal to error +*/ +function error() { + return currentLogLevel >= 1 /* error */; +} +exports.error = error; + +/** +* return true if the logging level is superior or equal to fatal +*/ +function fatal() { + return currentLogLevel >= 0 /* fatal */; +} +exports.fatal = fatal; + +/** +* log the given string +*/ +function log(s) { + console.log(s); +} +exports.log = log; + +/** +* Logging level +*/ +(function (Level) { + Level[Level["fatal"] = 0] = "fatal"; + Level[Level["error"] = 1] = "error"; + Level[Level["warning"] = 2] = "warning"; + Level[Level["debug"] = 3] = "debug"; + Level[Level["information"] = 4] = "information"; +})(exports.Level || (exports.Level = {})); +var Level = exports.Level; + +/** +* set the current log level, accepted level are : +* 'information', +* 'debug', +* 'warning', +* 'error', +* 'fatal' +*/ +function setLogLevel(level) { + currentLogLevel = Level[level]; +} +exports.setLogLevel = setLogLevel; + +/** +* base class reusing the logger for typescript +*/ +var LogingClass = (function () { + function LogingClass() { + this.information = exports.information; + this.debug = exports.debug; + this.warning = exports.warning; + this.error = exports.error; + this.fatal = exports.fatal; + this.log = exports.log; + } + return LogingClass; +})(); +exports.LogingClass = LogingClass; -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; +},{}],45:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; + +var Signal = (function () { + function Signal() { + /** + * list of listeners that have been suscribed to this signal + */ + this.listeners = []; + /** + * Priorities corresponding to the listeners + */ + this.priorities = []; + } + /** + * Subscribes a listener for the signal. + * + * @params listener the callback to call when events are dispatched + * @params priority an optional priority for this signal + */ + Signal.prototype.add = function (listener, priority) { + if (typeof priority === "undefined") { priority = 0; } + var index = this.listeners.indexOf(listener); + if (index !== -1) { + this.priorities[index] = priority; + return; + } + for (var i = 0, l = this.priorities.length; i < l; i++) { + if (this.priorities[i] < priority) { + this.priorities.splice(i, 0, priority); + this.listeners.splice(i, 0, listener); + return; + } + } + this.priorities.push(priority); + this.listeners.push(listener); + }; + + /** + * unsubscribe a listener for the signal + * + * @params listener the previously subscribed listener + */ + Signal.prototype.remove = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) { + this.priorities.splice(index, 1); + this.listeners.splice(index, 1); + } + }; + + /** + * dispatch an event + * + * @params parameter the parameter attached to the event dispatching + */ + Signal.prototype.dispatch = function (parameter) { + var hasBeenCanceled = this.listeners.every(function (listener) { + var result = listener(parameter); + return result !== false; + }); + + return hasBeenCanceled; + }; + + /** + * Remove all listener from the signal + */ + Signal.prototype.clear = function () { + this.listeners = []; + this.priorities = []; + }; + + /** + * @return true if the listener has been subsribed to this signal + */ + Signal.prototype.hasListeners = function () { + return this.listeners.length > 0; + }; + return Signal; +})(); +exports.Signal = Signal; -},{}],39:[function(_dereq_,module,exports){ -(function (process){// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +},{}],46:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +/** +* helper function that valid a config file +* @param config the config object to validate +*/ +function validateTypeScriptProjectConfig(config) { + if (!config) { + return false; + } + if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { + return false; + } + if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { + return false; + } + if (config.sourceRoot && typeof config.sourceRoot !== 'string') { + return false; + } + if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { + return typeof pattern === 'string'; + })) { + return false; + } + + return true; +} +exports.validateTypeScriptProjectConfig = validateTypeScriptProjectConfig; + +/** +* Default configuration for typescript project +*/ +exports.typeScriptProjectConfigDefault = { + noLib: false, + target: 'es3', + module: 'none', + noImplicitAny: false +}; -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } +},{}],47:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var path = _dereq_('path'); + +/** +* assign all properties of a list of object to an object +* @param target the object that will receive properties +* @param items items which properties will be assigned to a target +*/ +function assign(target) { + var items = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + items[_i] = arguments[_i + 1]; + } + return items.reduce(function (target, source) { + return Object.keys(source).reduce(function (target, key) { + target[key] = source[key]; + return target; + }, target); + }, target); +} +exports.assign = assign; + +/** +* clone an object (shallow) +* @param target the object to clone +*/ +function clone(target) { + return exports.assign(Array.isArray(target) ? [] : {}, target); +} +exports.clone = clone; + +/** +* clone an object (deep) +* +* @param target the object to clone +*/ +function deepClone(target) { + return Object.keys(target).reduce(function (result, key) { + var value = target[key]; + if (typeof value === 'object') { + value = exports.deepClone(value); + } + result[key] = value; + return result; + }, Array.isArray(target) ? [] : {}); +} +exports.deepClone = deepClone; + +/** +* retrieve all enumerable properties of an object in the prototype chain +* +* @param target the object to which we will retrieve properties +*/ +function getEnumerablePropertyNames(target) { + var result = []; + for (var key in target) { + result.push(key); + } + return result; +} +exports.getEnumerablePropertyNames = getEnumerablePropertyNames; + +/** +* merge multiple array in one +* +* @param array an array of array to be flattened +*/ +function mergeAll(array) { + var results = []; + array.forEach(function (subArray) { + Array.prototype.push.apply(results, subArray); + }); + + return results; +} +exports.mergeAll = mergeAll; +; + +/** +* browserify path.resolve is buggy on windows +*/ +function pathResolve(from, to) { + var result = path.resolve(from, to); + var index = result.indexOf(from[0]); + return result.slice(index); +} +exports.pathResolve = pathResolve; + +},{"path":1}],48:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// WorkerBridge +// +//-------------------------------------------------------------------------- +var utils = _dereq_('./utils'); +var collections = _dereq_('./collections'); +var signal = _dereq_('./signal'); +var Promise = _dereq_('bluebird'); + +/** +* list of operations that can be requested +*/ +var Operation; +(function (Operation) { + Operation[Operation["REQUEST"] = 0] = "REQUEST"; + Operation[Operation["RESPONSE"] = 1] = "RESPONSE"; + Operation[Operation["ERROR"] = 2] = "ERROR"; + Operation[Operation["EXPOSE"] = 3] = "EXPOSE"; + Operation[Operation["SIGNAL"] = 4] = "SIGNAL"; +})(Operation || (Operation = {})); + +/** +* type of function exposed +*/ +var Type; +(function (Type) { + Type[Type["FUNCTION"] = 0] = "FUNCTION"; + Type[Type["SIGNAL"] = 1] = "SIGNAL"; +})(Type || (Type = {})); + +/** +* create a descriptor for a map of exposed services +* +* @param services +* @param observables +* @param baseKeys +*/ +function createProxyDescriptor(services, signals, baseKeys) { + if (typeof baseKeys === "undefined") { baseKeys = []; } + if (baseKeys.length > 5) { + return {}; + } + return utils.getEnumerablePropertyNames(services).reduce(function (descriptor, key) { + var value = services[key], keys = baseKeys.concat(key); + if (typeof value === 'function') { + descriptor[key] = 0 /* FUNCTION */; + } else if (typeof value === 'object') { + if (value instanceof signal.Signal) { + descriptor[key] = 1 /* SIGNAL */; + signals[keys.join('.')] = value; + } else if (!Array.isArray(value)) { + descriptor[key] = createProxyDescriptor(value, signals, keys); + } + } + return descriptor; + }, {}); +} + +var uidHelper = 0; + +/** +* create a query factory for a proxied service method +*/ +function newQuery(chain, sendMessage, resolverMap) { + return function () { + var args = []; + for (var _i = 0; _i < (arguments.length - 0); _i++) { + args[_i] = arguments[_i + 0]; + } + var uid = 'operation' + (uidHelper++); + sendMessage({ + operation: 0 /* REQUEST */, + chain: chain, + args: args, + uid: uid + }); + return new Promise(function (resolve, reject) { + resolverMap.set(uid, { + resolve: resolve, + reject: reject + }); + }); + }; +} + +/** +* create proxy from proxy descriptor +*/ +function createProxy(descriptor, sendMessage, resolverMap, baseKeys) { + if (typeof baseKeys === "undefined") { baseKeys = []; } + return Object.keys(descriptor).reduce(function (proxy, key) { + var value = descriptor[key], keys = baseKeys.concat(key); + if (value === 0 /* FUNCTION */) { + proxy[key] = newQuery(keys, sendMessage, resolverMap); + } else if (value === 1 /* SIGNAL */) { + proxy[key] = new signal.Signal(); + } else if (typeof value === 'object') { + proxy[key] = createProxy(descriptor[key], sendMessage, resolverMap, keys); + } + return proxy; + }, {}); +} + +/** +* a simple bridge that will expose services from the 2 sides of a web worker +*/ +var WorkerBridge = (function () { + function WorkerBridge(/** + * target + */ + target) { + var _this = this; + this.target = target; + /** + * stack of deferred bound to a requres + */ + this.resolverMap = new collections.StringMap(); + /** + * message handler + */ + this.messageHandler = function (message) { + var data = message.data; + switch (data.operation) { + case 3 /* EXPOSE */: + _this.proxy = createProxy(data.descriptor, function (args) { + return _this.target.postMessage(args); + }, _this.resolverMap); + + _this.initResolver.resolve(_this.proxy); + break; + + case 0 /* REQUEST */: + new Promise(function (resolve) { + var chain = data.chain.slice(), thisObject = null, method = _this.services; + while (chain.length) { + thisObject = method; + method = method[chain.shift()]; + } + resolve(method.apply(thisObject, data.args)); + }).then(function (result) { + _this.target.postMessage({ + operation: 1 /* RESPONSE */, + chain: data.chain, + result: result, + uid: data.uid + }); + }, function (error) { + _this.target.postMessage({ + operation: 2 /* ERROR */, + chain: data.chain, + errorMessage: error instanceof Error ? error.message : error, + uid: data.uid + }); + }); + + break; + + case 1 /* RESPONSE */: + var responseDeferred = _this.resolverMap.get(data.uid); + responseDeferred.resolve(data.result); + _this.resolverMap.delete(data.uid); + break; + + case 2 /* ERROR */: + var errorDeferred = _this.resolverMap.get(data.uid); + errorDeferred.reject(new Error(data.errorMessage)); + _this.resolverMap.delete(data.uid); + break; + + default: + var chain = data.chain.slice(), signal = _this.proxy; + while (chain.length) { + signal = signal[chain.shift()]; + } + signal.dispatch(data.value); + } + }; + } + /** + * initialize te bridge, return a promise that resolve to the created proxy + * @param services the exposed services + */ + WorkerBridge.prototype.init = function (services) { + var _this = this; + this.services = services; + return new Promise(function (resolve, reject) { + var target = _this.target; + target.onmessage = _this.messageHandler; + + var signals = {}; + target.postMessage({ + operation: 3 /* EXPOSE */, + descriptor: createProxyDescriptor(services, signals) + }); + + _this.signals = Object.keys(signals).map(function (key) { + var signal = signals[key]; + var handler = function (value) { + target.postMessage({ + operation: 4 /* SIGNAL */, + chain: key.split('.'), + value: value + }); + }; + signal.add(handler); + return { + signal: signal, + handler: handler + }; + }); + + _this.initResolver = { resolve: resolve, reject: reject }; + }); + }; + + /** + * dispose the bridge + */ + WorkerBridge.prototype.dispose = function () { + this.signals.forEach(function (signalDesc) { + return signalDesc.signal.remove(signalDesc.handler); + }); + this.target.onmessage = null; + }; + return WorkerBridge; +})(); + +module.exports = WorkerBridge; + +},{"./collections":40,"./signal":45,"./utils":47,"bluebird":5}],49:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; + + +/** +* enum listing the change kind that occur in a working set +*/ +(function (WorkingSetChangeKind) { + WorkingSetChangeKind[WorkingSetChangeKind["ADD"] = 0] = "ADD"; + WorkingSetChangeKind[WorkingSetChangeKind["REMOVE"] = 1] = "REMOVE"; +})(exports.WorkingSetChangeKind || (exports.WorkingSetChangeKind = {})); +var WorkingSetChangeKind = exports.WorkingSetChangeKind; + + + +},{}],50:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +var ServiceConsumer = _dereq_('./serviceConsumer'); +var completion = _dereq_('../commons/completion'); +var CompletionKind = completion.CompletionKind; + +var HINT_TEMPLATE = [ + '', + ' ', + ' {{match}}{{suffix}}', + ' ', + '' +].join('\n'); + +/** +* basic implementation +*/ +var CodeHintProvider = (function (_super) { + __extends(CodeHintProvider, _super); + function CodeHintProvider() { + _super.apply(this, arguments); + } + /** + * return true if hints can be calculated for te current editor + * + * @param editor the editor + * @param implicitChar determine whether the hinting request is explicit or implicit, + * null if implicit, contains the last character inserted + */ + CodeHintProvider.prototype.hasHints = function (editor, implicitChar) { + //TODO we should find a better test here that limits more the implicit request + if (!implicitChar || /[\w.\($_]/.test(implicitChar)) { + this.editor = editor; + return true; + } + return false; + }; + + CodeHintProvider.prototype.getHints = function (implicitChar) { + var currentFileName = this.editor.document.file.fullPath, position = this.editor.getCursorPos(), deferred = $.Deferred(); + if (!this.hasHints(this.editor, implicitChar)) { + deferred.resolve({ + hints: [], + selectInitial: false + }); + } else { + this.getService().then(function (service) { + service.getCompletionAtPosition(currentFileName, position).then(function (result) { + deferred.resolve({ + hints: result.entries.map(function (entry) { + var text = entry.name, match, suffix, classType = ''; + + switch (entry.kind) { + case 7 /* KEYWORD */: + switch (entry.name) { + case 'static': + case 'public': + case 'private': + case 'export': + case 'get': + case 'set': + classType = 'cm-qualifier'; + break; + case 'class': + case 'function': + case 'module': + case 'var': + classType = 'cm-def'; + break; + default: + classType = 'cm-keyword'; + break; + } + break; + case 5 /* METHOD */: + case 6 /* FUNCTION */: + text += entry.type ? entry.type : ''; + break; + default: + text += entry.type ? ' - ' + entry.type : ''; + break; + } + + // highlight the matched portion of each hint + if (result.match) { + match = text.slice(0, result.match.length); + suffix = text.slice(result.match.length); + } else { + match = ''; + suffix = text; + } + + var jqueryObj = $(Mustache.render(HINT_TEMPLATE, { + match: match, + suffix: suffix, + classType: classType + })); + jqueryObj.data('entry', entry); + jqueryObj.data('match', result.match); + return jqueryObj; + }), + selectInitial: !!implicitChar + }); + }).catch(function (error) { + return deferred.reject(error); + }); + }); + } + return deferred; + }; + + CodeHintProvider.prototype.insertHint = function ($hintObj) { + var entry = $hintObj.data('entry'), match = $hintObj.data('match'), position = this.editor.getCursorPos(), startPos = !match ? position : { + line: position.line, + ch: position.ch - match.length + }; + + this.editor.document.replaceRange(entry.name, startPos, position); + }; + return CodeHintProvider; +})(ServiceConsumer); + +module.exports = CodeHintProvider; + +},{"../commons/completion":41,"./serviceConsumer":61}],51:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +//-------------------------------------------------------------------------- +// +// TypeScriptProject +// +//-------------------------------------------------------------------------- +var BRACKETS_CONFIG_FILE_NAME = '.brackets.json'; + +function isBracketsPreferenceFile(path) { + return path && path.substr(path.lastIndexOf('/') + 1, path.length) === BRACKETS_CONFIG_FILE_NAME; +} + +/** +* brackets Error message type +*/ +var Type = { + /** Unambiguous error, such as a syntax error */ + ERROR: 'problem_type_error', + /** Maintainability issue, probable error / bad smell, etc. */ + WARNING: 'problem_type_warning', + /** Inspector unable to continue, code too complex for static analysis, etc. Not counted in error/warning tally. */ + META: 'problem_type_meta' +}; + +/** +* TypeScript Inspection Provider +*/ +var TypeScriptConfigErrorReporter = (function () { + function TypeScriptConfigErrorReporter() { + /** + * name of the error reporter + */ + this.name = 'TypeScript Configuration'; + } + /** + * scan file + */ + TypeScriptConfigErrorReporter.prototype.scanFile = function (content, path) { + if (!isBracketsPreferenceFile(path)) { + return null; + } + var data; + try { + data = JSON.parse(content); + } catch (e) { + return { + errors: [], + aborted: true + }; + } + + var typescript = data.typescript; + if (!data.typescript) { + return { + errors: [], + aborted: false + }; + } + + var errors = []; + if (typescript.projects && typescript.sources) { + errors.push('You cannot have sources and projects at the same level'); + } + + validateSection(null, typescript, !typescript.projects, errors); + + if (typescript.projects) { + if (typeof typescript.projects !== 'object') { + errors.push('invalid section projects, it must be an object'); + } + Object.keys(typescript.projects).forEach(function (key) { + validateSection(key + ': ', typescript.projects[key], true, errors); + }); + } + + return { + errors: errors.map(function (message) { + return ({ + message: message, + type: Type.ERROR, + pos: { line: -1, ch: -1 } + }); + }), + aborted: false + }; + }; + return TypeScriptConfigErrorReporter; +})(); + +function validateSection(sectionName, config, mustHaveSources, errors) { + var prefix = sectionName ? sectionName + ': ' : ''; + if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { + errors.push(prefix + 'the target section has invalid value authorized values are \'es3\' or \'es5\''); + } + if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { + errors.push(prefix + 'the module section has invalid value authorized values are \'none\', \'amd\' or \'commonjs\''); + } + if (config.sourceRoot && typeof config.sourceRoot !== 'string') { + errors.push(prefix + 'the sourceRoot section must be a string'); + } + if (mustHaveSources) { + if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { + return typeof pattern === 'string'; + })) { + errors.push(prefix + 'invalid sources section it must be an array of string'); + } + } +} + +module.exports = TypeScriptConfigErrorReporter; - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; -}).call(this,_dereq_("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],"typescriptServices":[function(_dereq_,module,exports){ -module.exports=_dereq_('rW6mcW'); -},{}],"rW6mcW":[function(_dereq_,module,exports){ -var global=self;(function browserifyShim(module, exports, define, browserify_shim__define__module__export__) { -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ - -/*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- - -The TypeScript software is based on or incorporates material and code from the projects listed below -(collectively "Third Party Code"). Microsoft is not the original author of the -Third Party Code. The original copyright notice and the license, under which -Microsoft received such Third Party Code, are set forth below. Such license and -notices are provided for informational purposes only. Microsoft licenses the Third -Party Code to you under the terms of the Apache 2.0 License. -All Third Party Code licensed by Microsoft under the Apache License, Version 2.0 (the "License"); you -may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR -CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. +},{}],52:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +var ServiceConsumer = _dereq_('./serviceConsumer'); +var immediate = _dereq_('../commons/immediate'); + +//-------------------------------------------------------------------------- +// +// TypeScriptProject +// +//-------------------------------------------------------------------------- +/** +* TypeScript Inspection Provider +*/ +var TypeScriptErrorReporter = (function (_super) { + __extends(TypeScriptErrorReporter, _super); + function TypeScriptErrorReporter() { + _super.apply(this, arguments); + /** + * name of the error reporter + */ + this.name = 'TypeScript'; + } + /** + * scan file + */ + TypeScriptErrorReporter.prototype.scanFileAsync = function (content, path) { + var _this = this; + return $.Deferred(function (deferred) { + immediate.setImmediate(function () { + _this.getService().then(function (service) { + service.getErrorsForFile(path).then(function (result) { + deferred.resolve(result); + }, function () { + deferred.resolve({ + errors: [], + aborted: false + }); + }); + }); + }); + }).promise(); + }; + return TypeScriptErrorReporter; +})(ServiceConsumer); + +module.exports = TypeScriptErrorReporter; + +},{"../commons/immediate":43,"./serviceConsumer":61}],53:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var collections = _dereq_('../commons/collections'); +var signal = _dereq_('../commons/signal'); +var Promise = _dereq_('bluebird'); +var fs = _dereq_('../commons/fileSystem'); + +/** +* IFileSystem implementations +*/ +var FileSystem = (function () { + //------------------------------- + // constructor + //------------------------------- + /** + * @param nativeFileSystem brackets FileSystem module + * @param projectManager brackets ProjectManager Module + */ + function FileSystem(nativeFileSystem, projectManager) { + var _this = this; + this.nativeFileSystem = nativeFileSystem; + this.projectManager = projectManager; + //------------------------------- + // Variables + //------------------------------- + /** + * map path to native files + */ + this.filesContent = new collections.StringMap(); + /** + * cache of the paths list + */ + this.filesPath = []; + /** + * boolean containing the initialization state of the wrapper + */ + this.initialized = false; + /** + * a stack containing all the call that have been performed before initiliazation + */ + this.initializationStack = []; + this._projectFilesChanged = new signal.Signal(); + //------------------------------- + // Events handler + //------------------------------- + /** + * handle project workspaces changes + */ + this.changesHandler = function (event, file) { + if (!file) { + // a refresh event + var oldPathsSet = new collections.StringSet(), oldFilesContent = _this.filesContent.clone(), oldPaths = _this.filesPath.map(function (path) { + oldPathsSet.add(path); + return path; + }); -See the Apache Version 2.0 License for specific language governing permissions and -limitations under the License. ---------------------------------------------- -Third Party Code Components --------------------------------------------- ----- Mozilla Developer Code--------- -The following Mozilla Developer Code is under Public Domain as updated after Aug. 20, 2012, see, https://developer.mozilla.org/en-US/docs/Project:Copyrights -1. Array filter Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter -Any copyright is dedicated to the Public Domain. + _this.initialized = false; + _this.filesContent.clear(); + _this.filesPath.length = 0; -2. Array forEach Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach -Any copyright is dedicated to the Public Domain. + _this.projectManager.getAllFiles().then(function (files) { + var fileAdded = [], fileDeleted = [], fileUpdated = [], newPathsSet = new collections.StringSet(), promises = []; -3. Array indexOf Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf -Any copyright is dedicated to the Public Domain. + _this.filesPath = (files || []).map(function (file) { + if (!oldPathsSet.has(file.fullPath)) { + fileAdded.push(file.fullPath); + } + if (oldFilesContent.has(file.fullPath)) { + promises.push(new Promise(function (resolve, reject) { + file.read({}, function (err, content) { + if (!err) { + _this.filesContent.set(file.fullPath, content); + } + if (err || content !== oldFilesContent.get(file.fullPath)) { + fileUpdated.push(file.fullPath); + } + resolve(true); + }); + })); + } + newPathsSet.add(file.fullPath); + return file.fullPath; + }); -4. Array map Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map -Any copyright is dedicated to the Public Domain. + oldPaths.forEach(function (path) { + if (!newPathsSet.has(path)) { + fileDeleted.push(path); + } + }); -5. Array Reduce Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce -Any copyright is dedicated to the Public Domain. + Promise.all(promises).then(function () { + var changes = []; -6. String Trim Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim -Any copyright is dedicated to the Public Domain. + fileDeleted.forEach(function (path) { + changes.push({ + kind: 2 /* DELETE */, + fileName: path + }); + }); -7. Date now Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now -Any copyright is dedicated to the Public Domain. + fileAdded.forEach(function (path) { + changes.push({ + kind: 0 /* ADD */, + fileName: path + }); + }); -------------JSON2 Script------------------------ -json2.js 2012-10-08 -Public Domain. -NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -See, http://www.JSON.org/js.html + fileUpdated.forEach(function (path) { + changes.push({ + kind: 1 /* UPDATE */, + fileName: path + }); + }); ---------------r.js---------------------- -Copyright (c) 2010-2011 Dojo Foundation. All Rights Reserved. -Originally License under MIT License -------------------------------------------------------------------------- -Provided for Informational Purposes Only -MIT License + if (changes.length > 0) { + _this._projectFilesChanged.dispatch(changes); + } + _this.initialized = true; + _this.resolveInitializationStack(); + }); + }, function () { + _this.reset(); + }); + } else if (file.isFile) { + //file have been updated simply dispatch an update event and update the cache if necessary + var dispatchUpdate = function () { + _this._projectFilesChanged.dispatch([{ + kind: 1 /* UPDATE */, + fileName: file.fullPath + }]); + }; + + if (_this.filesContent.has(file.fullPath)) { + // if the file content has been cached update the cache + _this.filesContent.delete(file.fullPath); + _this.readFile(file.fullPath).then(function (content) { + _this.filesContent.set(file.fullPath, content); + }).catch().then(dispatchUpdate); + } else { + dispatchUpdate(); + } + } else if (file.isDirectory) { + // a directory content has been changed need to make diff between cache an directory + var directory = file; + + directory.getContents(function (err, files) { + if (err) { + // an err occured reset + _this.reset(); + } + var oldFiles = {}, newFiles = {}; + + //collect all the paths in the cache + _this.filesPath.forEach(function (path) { + var index = path.indexOf(directory.fullPath); + if (index !== -1) { + var index2 = path.indexOf('/', index + directory.fullPath.length); + if (index2 === -1) { + oldFiles[path] = [path]; + } else { + //in case of subdir regroup the files by subdir + var dirPath = path.substring(0, index2 + 1); + if (!oldFiles[dirPath]) { + oldFiles[dirPath] = [path]; + } else { + oldFiles[dirPath].push(path); + } + } + } + }); -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: + files.forEach(function (file) { + newFiles[file.fullPath] = file; + }); -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. + var changes = [], path; + for (path in oldFiles) { + if (!newFiles.hasOwnProperty(path) && oldFiles.hasOwnProperty(path)) { + //for each files that has been deleted add a DELETE record + oldFiles[path].forEach(function (path) { + var index = _this.filesPath.indexOf(path); + if (index !== -1) { + _this.filesPath.splice(index, 1); + _this.filesContent.delete(path); + changes.push({ + kind: 2 /* DELETE */, + fileName: path + }); + } + }); + } + } -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------------- + var promises = []; + for (path in newFiles) { + if (newFiles.hasOwnProperty(path) && !oldFiles.hasOwnProperty(path)) { + //if a file has been added just add a ADD record + if (newFiles[path].isFile) { + _this.filesPath.push(path); + changes.push({ + kind: 0 /* ADD */, + fileName: path + }); + } else { + var newDir = newFiles[path]; + + //if a dir has been added collect each files in this directory then for each one add an 'ADD' record + promises.push(_this.getDirectoryFiles(newDir).then(function (files) { + files.forEach(function (file) { + _this.filesPath.push(file.fullPath); + changes.push({ + kind: 0 /* ADD */, + fileName: file.fullPath + }); + }); + })); + } + } + } + ; -------------- End of ThirdPartyNotices --------------------------------------------------- */ -var TypeScript; -(function (TypeScript) { - TypeScript.DiagnosticCode = { - error_TS_0_1: "error TS{0}: {1}", - warning_TS_0_1: "warning TS{0}: {1}", - Unrecognized_escape_sequence: "Unrecognized escape sequence.", - Unexpected_character_0: "Unexpected character {0}.", - Missing_close_quote_character: "Missing close quote character.", - Identifier_expected: "Identifier expected.", - _0_keyword_expected: "'{0}' keyword expected.", - _0_expected: "'{0}' expected.", - Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.", - Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.", - Unexpected_token_0_expected: "Unexpected token; '{0}' expected.", - Trailing_separator_not_allowed: "Trailing separator not allowed.", - AsteriskSlash_expected: "'*/' expected.", - public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.", - Unexpected_token: "Unexpected token.", - Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.", - Rest_parameter_must_be_last_in_list: "Rest parameter must be last in list.", - Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.", - Required_parameter_cannot_follow_optional_parameter: "Required parameter cannot follow optional parameter.", - Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.", - Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.", - Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.", - Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.", - Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.", - Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.", - Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.", - extends_clause_already_seen: "'extends' clause already seen.", - extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.", - Classes_can_only_extend_a_single_class: "Classes can only extend a single class.", - implements_clause_already_seen: "'implements' clause already seen.", - Accessibility_modifier_already_seen: "Accessibility modifier already seen.", - _0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.", - _0_modifier_already_seen: "'{0}' modifier already seen.", - _0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.", - Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.", - super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.", - Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.", - Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.", - Implementations_are_not_allowed_in_ambient_contexts: "Implementations are not allowed in ambient contexts.", - declare_modifier_not_allowed_for_code_already_in_an_ambient_context: "'declare' modifier not allowed for code already in an ambient context.", - Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.", - Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration: "Parameter property declarations can only be used in a non-ambient constructor declaration.", - Function_implementation_expected: "Function implementation expected.", - Constructor_implementation_expected: "Constructor implementation expected.", - Function_overload_name_must_be_0: "Function overload name must be '{0}'.", - _0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.", - declare_modifier_cannot_appear_on_an_interface_declaration: "'declare' modifier cannot appear on an interface declaration.", - declare_modifier_required_for_top_level_element: "'declare' modifier required for top level element.", - Rest_parameter_cannot_be_optional: "Rest parameter cannot be optional.", - Rest_parameter_cannot_have_an_initializer: "Rest parameter cannot have an initializer.", - set_accessor_must_have_one_and_only_one_parameter: "'set' accessor must have one and only one parameter.", - set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.", - set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.", - set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.", - get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.", - Modifiers_cannot_appear_here: "Modifiers cannot appear here.", - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.", - Class_name_cannot_be_0: "Class name cannot be '{0}'.", - Interface_name_cannot_be_0: "Interface name cannot be '{0}'.", - Enum_name_cannot_be_0: "Enum name cannot be '{0}'.", - Module_name_cannot_be_0: "Module name cannot be '{0}'.", - Enum_member_must_have_initializer: "Enum member must have initializer.", - Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.", - Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.", - Module_cannot_have_multiple_export_assignments: "Module cannot have multiple export assignments.", - Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.", - module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement", - constructor_function_accessor_or_variable: "constructor, function, accessor or variable", - statement: "statement", - case_or_default_clause: "case or default clause", - identifier: "identifier", - call_construct_index_property_or_function_signature: "call, construct, index, property or function signature", - expression: "expression", - type_name: "type name", - property_or_accessor: "property or accessor", - parameter: "parameter", - type: "type", - type_parameter: "type parameter", - declare_modifier_not_allowed_on_import_declaration: "'declare' modifier not allowed on import declaration.", - Function_overload_must_be_static: "Function overload must be static.", - Function_overload_must_not_be_static: "Function overload must not be static.", - Parameter_property_declarations_cannot_be_used_in_a_constructor_overload: "Parameter property declarations cannot be used in a constructor overload.", - Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.", - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.", - Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.", - _0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.", - _0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.", - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.", - Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.", - Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.", - Duplicate_identifier_0: "Duplicate identifier '{0}'.", - The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", - The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", - super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.", - The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.", - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?", - Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.", - Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.", - Value_of_type_0_is_not_indexable_by_type_1: "Value of type '{0}' is not indexable by type '{1}'.", - Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.", - Operator_0_cannot_be_applied_to_types_1_and_2_3: "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}", - Cannot_convert_0_to_1: "Cannot convert '{0}' to '{1}'.", - Cannot_convert_0_to_1_NL_2: "Cannot convert '{0}' to '{1}':{NL}{2}", - Expected_var_class_interface_or_module: "Expected var, class, interface, or module.", - Operator_0_cannot_be_applied_to_type_1: "Operator '{0}' cannot be applied to type '{1}'.", - Getter_0_already_declared: "Getter '{0}' already declared.", - Setter_0_already_declared: "Setter '{0}' already declared.", - Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.", - Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.", - Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.", - Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.", - Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.", - Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.", - Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.", - Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.", - Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.", - Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.", - Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.", - Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.", - Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.", - Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.", - Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.", - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.", - Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.", - Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.", - Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.", - Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.", - Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}", - Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.", - Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.", - Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.", - Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.", - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.", - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.", - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.", - Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.", - Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.", - Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.", - Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.", - Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.", - Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.", - Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.", - Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.", - Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.", - Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.", - Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.", - Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.", - Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.", - Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.", - Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.", - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", - A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.", - Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.", - Unable_to_resolve_external_module_0: "Unable to resolve external module '{0}'.", - Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.", - A_class_may_only_extend_another_class: "A class may only extend another class.", - A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.", - An_interface_may_only_extend_another_class_or_interface: "An interface may only extend another class or interface.", - Unable_to_resolve_type: "Unable to resolve type.", - Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.", - Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.", - Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.", - Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.", - Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}", - Invalid_new_expression: "Invalid 'new' expression.", - Call_signatures_used_in_a_new_expression_must_have_a_void_return_type: "Call signatures used in a 'new' expression must have a 'void' return type.", - Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.", - Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2: "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.", - Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.", - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.", - Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.", - Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).", - Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.", - Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.", - The_property_0_does_not_exist_on_value_of_type_1: "The property '{0}' does not exist on value of type '{1}'.", - Could_not_find_symbol_0: "Could not find symbol '{0}'.", - get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.", - this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.", - Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.", - Class_0_is_recursively_referenced_as_a_base_type_of_itself: "Class '{0}' is recursively referenced as a base type of itself.", - Interface_0_is_recursively_referenced_as_a_base_type_of_itself: "Interface '{0}' is recursively referenced as a base type of itself.", - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.", - super_cannot_be_referenced_in_non_derived_classes: "'super' cannot be referenced in non-derived classes.", - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.", - Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.", - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.", - _0_1_is_inaccessible: "'{0}.{1}' is inaccessible.", - this_cannot_be_referenced_within_module_bodies: "'this' cannot be referenced within module bodies.", - Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.", - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type: "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.", - Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.", - Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.", - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.", - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.", - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.", - Setters_cannot_return_a_value: "Setters cannot return a value.", - Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.", - Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.", - Type_0_does_not_have_type_parameters: "Type '{0}' does not have type parameters.", - Getters_must_return_a_value: "Getters must return a value.", - Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.", - Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.", - Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.", - Cannot_resolve_return_type_reference: "Cannot resolve return type reference.", - Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.", - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.", - All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.", - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.", - Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}", - Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}", - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.", - this_cannot_be_referenced_in_static_initializers_in_a_class_body: "'this' cannot be referenced in static initializers in a class body.", - Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}", - Duplicate_overload_signature_for_0: "Duplicate overload signature for '{0}'.", - Duplicate_constructor_overload_signature: "Duplicate constructor overload signature.", - Duplicate_overload_call_signature: "Duplicate overload call signature.", - Duplicate_overload_construct_signature: "Duplicate overload construct signature.", - Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.", - Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}", - Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.", - Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.", - Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.", - Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.", - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.", - this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.", - Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.", - Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.", - Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.", - A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.", - Rest_parameters_must_be_array_types: "Rest parameters must be array types.", - Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.", - Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.", - Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.", - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}", - All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.", - All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}", - Generic_type_references_must_include_all_type_arguments: "Generic type references must include all type arguments.", - Default_arguments_are_only_allowed_in_implementation: "Default arguments are only allowed in implementation.", - Overloads_cannot_differ_only_by_return_type: "Overloads cannot differ only by return type.", - Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.", - Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.", - Could_not_find_symbol_0_in_module_1: "Could not find symbol '{0}' in module '{1}'.", - Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.", - Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.", - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.", - Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.", - Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.", - Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}", - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.", - Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.", - All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.", - super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.", - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.", - Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.", - Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.", - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.", - Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions: "Could not find the best common type of types of all return statement expressions.", - Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.", - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.", - continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.", - break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.", - Jump_target_not_found: "Jump target not found.", - Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.", - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.", - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.", - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.", - TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.", - TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}", - TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.", - TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.", - TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.", - TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.", - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.", - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.", - Type_of_conditional_0_must_be_identical_to_1_or_2: "Type of conditional '{0}' must be identical to '{1}' or '{2}'.", - Type_of_conditional_0_must_be_identical_to_1_2_or_3: "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.", - Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.", - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.", - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.", - Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.", - Duplicate_string_index_signature: "Duplicate string index signature.", - Duplicate_number_index_signature: "Duplicate number index signature.", - All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.", - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.", - Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.", - Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.", - Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}", - Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.", - Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.", - Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.", - Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.", - Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.", - Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.", - Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.", - Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.", - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}", - Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.", - Type_reference_must_refer_to_type: "Type reference must refer to type.", - In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.", - _0_overload_s: " (+ {0} overload(s))", - Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.", - Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.", - Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}", - Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.", - Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.", - Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.", - Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}", - Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}", - Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}", - Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.", - Current_host_does_not_support_0_option: "Current host does not support '{0}' option.", - ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'", - Module_code_generation_0_not_supported: "Module code generation '{0}' not supported.", - Could_not_find_file_0: "Could not find file: '{0}'.", - A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.", - Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.", - Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.", - Emit_Error_0: "Emit Error: {0}.", - Cannot_read_file_0_1: "Cannot read file '{0}': {1}", - Unsupported_file_encoding: "Unsupported file encoding.", - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form or -. For example '{0}' or '{1}'.", - Unsupported_locale_0: "Unsupported locale: '{0}'.", - Execution_Failed_NL: "Execution Failed.{NL}", - Invalid_call_to_up: "Invalid call to 'up'", - Invalid_call_to_down: "Invalid call to 'down'", - Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.", - Unknown_option_0: "Unknown option '{0}'", - Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.", - Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}", - Could_not_delete_file_0: "Could not delete file '{0}'", - Could_not_create_directory_0: "Could not create directory '{0}'", - Error_while_executing_file_0: "Error while executing file '{0}': ", - Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.", - Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.", - Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.", - Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.", - Option_0_specified_without_1: "Option '{0}' specified without '{1}'", - codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.", - Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.", - Generates_corresponding_0_file: "Generates corresponding {0} file.", - Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.", - Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.", - Watch_input_files: "Watch input files.", - Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.", - Do_not_emit_comments_to_output: "Do not emit comments to output.", - Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.", - Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'", - Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'", - Print_this_message: "Print this message.", - Print_the_compiler_s_version_0: "Print the compiler's version: {0}", - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.", - Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'", - Syntax_0: "Syntax: {0}", - options: "options", - file1: "file", - Examples: "Examples:", - Options: "Options:", - Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.", - Version_0: "Version {0}", - Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.", - NL_Recompiling_0: "{NL}Recompiling ({0}):", - STRING: "STRING", - KIND: "KIND", - file2: "FILE", - VERSION: "VERSION", - LOCATION: "LOCATION", - DIRECTORY: "DIRECTORY", - NUMBER: "NUMBER", - Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.", - Additional_locations: "Additional locations:", - This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.", - Unknown_rule: "Unknown rule.", - Invalid_line_number_0: "Invalid line number ({0})", - Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.", - Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.", - Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.", - Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.", - Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.", - new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.", - _0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.", - Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.", - Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.", - Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.", - Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.", - Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.", - _0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.", - Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.", - Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening." - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ArrayUtilities = (function () { - function ArrayUtilities() { - } - ArrayUtilities.isArray = function (value) { - return Object.prototype.toString.apply(value, []) === '[object Array]'; + Promise.all(promises).then(function () { + if (changes.length > 0) { + _this._projectFilesChanged.dispatch(changes); + } + }, function () { + //in case of error reset + _this.reset(); + }); + }); + } }; - - ArrayUtilities.sequenceEquals = function (array1, array2, equals) { - if (array1 === array2) { - return true; + /** + * handle file renaming event + */ + this.renameHandler = function (event, oldPath, newPath) { + var isDirectory = oldPath[oldPath.length - 1] === '/'; + var changes; + if (isDirectory) { + changes = []; + _this.filesPath.concat().forEach(function (path) { + var index = path.indexOf(oldPath); + if (index === 0) { + changes = changes.concat(_this.fileRenamedHandler(path, path.replace(oldPath, newPath))); + } + }); + } else { + changes = _this.fileRenamedHandler(oldPath, newPath); } - - if (array1 === null || array2 === null) { - return false; + if (changes.length > 0) { + _this._projectFilesChanged.dispatch(changes); } + }; + nativeFileSystem.on('change', this.changesHandler); + nativeFileSystem.on('rename', this.renameHandler); + this.init(); + } + //------------------------------- + // IFileSystem implementation + //------------------------------- + /** + * return a promise resolving to the project root folder path + */ + FileSystem.prototype.getProjectRoot = function () { + return Promise.cast(this.projectManager.getProjectRoot().fullPath); + }; - if (array1.length !== array2.length) { - return false; - } + Object.defineProperty(FileSystem.prototype, "projectFilesChanged", { + /** + * a signal dispatching fine grained change reflecting the change that happens in the working set + */ + get: function () { + return this._projectFilesChanged; + }, + enumerable: true, + configurable: true + }); + + /** + * return a promise that resolve with an array of string containing all the files of the projects + */ + FileSystem.prototype.getProjectFiles = function () { + var _this = this; + return new Promise(function (resolve) { + _this.addToInitializatioStack(function () { + return resolve(_this.filesPath); + }); + }); + }; - for (var i = 0, n = array1.length; i < n; i++) { - if (!equals(array1[i], array2[i])) { - return false; + /** + * read a file, return a promise with that resolve to the file content + * + * @param path the file to read + */ + FileSystem.prototype.readFile = function (path) { + var _this = this; + return new Promise(function (resolve, reject) { + _this.addToInitializatioStack(function () { + if (_this.filesContent.has(path)) { + resolve(_this.filesContent.get(path)); + } else { + var file = _this.nativeFileSystem.getFileForPath(path); + if (file.isDirectory) { + reject('not found'); + return; + } + file.read({}, function (err, content) { + if (err) { + reject(err); + } else { + content = content && _this.normalizeText(content); + _this.filesContent.set(path, content); + resolve(content); + } + }); } - } - - return true; - }; + }); + }); + }; - ArrayUtilities.contains = function (array, value) { - for (var i = 0; i < array.length; i++) { - if (array[i] === value) { - return true; - } - } + /** + * reset the wrapper and dispatch a refresh event + */ + FileSystem.prototype.reset = function () { + this.initialized = false; + this.filesContent.clear(); + this.filesPath.length = 0; + this.init(); + this._projectFilesChanged.dispatch([{ + kind: 3 /* RESET */, + fileName: null + }]); + }; - return false; - }; + /** + * clean the wrapper for disposal + */ + FileSystem.prototype.dispose = function () { + this.nativeFileSystem.off('change', this.changesHandler); + this.nativeFileSystem.off('rename', this.renameHandler); + this._projectFilesChanged.clear(); + }; - ArrayUtilities.groupBy = function (array, func) { - var result = {}; + //------------------------------- + // privates methods + //------------------------------- + /** + * initialize the wrapper + */ + FileSystem.prototype.init = function () { + var _this = this; + this.projectManager.getAllFiles().then(function (files) { + _this.filesPath = files ? files.map(function (file) { + return file.fullPath; + }) : []; + _this.initialized = true; + _this.resolveInitializationStack(); + }); + }; - for (var i = 0, n = array.length; i < n; i++) { - var v = array[i]; - var k = func(v); + /** + * execute an operation if initialized, add to initialization stack if not + */ + FileSystem.prototype.addToInitializatioStack = function (callback) { + if (this.initialized) { + callback(); + } else { + this.initializationStack.push(callback); + } + }; - var list = result[k] || []; - list.push(v); - result[k] = list; - } + FileSystem.prototype.resolveInitializationStack = function () { + this.initializationStack.forEach(function (callback) { + return callback(); + }); + this.initializationStack.length = 0; + }; - return result; - }; + /** + * retrieves all files contained in a directory (and in subdirectory) + */ + FileSystem.prototype.getDirectoryFiles = function (directory) { + return new Promise(function (resolve, reject) { + var files = []; + directory.visit(function (entry) { + if (entry.isFile) { + files.push(entry); + } + return true; + }, {}, function (err) { + resolve(files); + }); + }); + }; - ArrayUtilities.distinct = function (array, equalsFn) { - var result = []; + /** + * normalize text to be conform to codemirro + * @param text + */ + FileSystem.prototype.normalizeText = function (text) { + return text.replace(/\r\n/g, '\n'); + }; - for (var i = 0, n = array.length; i < n; i++) { - var current = array[i]; - for (var j = 0; j < result.length; j++) { - if (equalsFn(result[j], current)) { - break; - } - } + /** + * dispatch events when a file has been renamed + */ + FileSystem.prototype.fileRenamedHandler = function (oldPath, newPath) { + var index = this.filesPath.indexOf(oldPath); + if (index !== -1) { + this.filesPath.splice(index, 1); + this.filesPath.push(newPath); + if (this.filesContent.has(oldPath)) { + var content = this.filesContent.get(oldPath); + this.filesContent.delete(oldPath); + this.filesContent.set(newPath, content); + } + return [ + { + kind: 2 /* DELETE */, + fileName: oldPath + }, { + kind: 0 /* ADD */, + fileName: newPath + }]; + } + return []; + }; + return FileSystem; +})(); - if (j === result.length) { - result.push(current); - } +module.exports = FileSystem; + +},{"../commons/collections":40,"../commons/fileSystem":42,"../commons/signal":45,"bluebird":5}],54:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ServiceConsumer = _dereq_('./serviceConsumer'); + +var EditorManager = brackets.getModule('editor/EditorManager'), Editor = brackets.getModule('editor/Editor').Editor; + +var FormattingManager = (function (_super) { + __extends(FormattingManager, _super); + function FormattingManager() { + _super.apply(this, arguments); + var _this = this; + this.format = function () { + var editor = EditorManager.getCurrentFullEditor(); + if (!editor) { + return; } + var useTabs = Editor.getUseTabChar(); - return result; - }; - - ArrayUtilities.min = function (array, func) { - var min = func(array[0]); + var options = { + IndentSize: Editor.getSpaceUnits(), + TabSize: Editor.getTabSize(), + NewLineCharacter: '\n', + ConvertTabsToSpaces: !useTabs, + InsertSpaceAfterSemicolonInForStatements: true, + InsertSpaceAfterCommaDelimiter: true, + InsertSpaceBeforeAndAfterBinaryOperators: true, + InsertSpaceAfterKeywordsInControlFlowStatements: true, + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: true, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, + PlaceOpenBraceOnNewLineForFunctions: false, + PlaceOpenBraceOnNewLineForControlBlocks: false + }; + var currentRange = editor.getSelection(true), startPos = currentRange ? currentRange.start : undefined, endPos = currentRange ? currentRange.end : undefined; - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next < min) { - min = next; - } + if (startPos && endPos && startPos.line === endPos.line && startPos.ch === endPos.ch) { + startPos = endPos = undefined; } - return min; + _this.getService().then(function (service) { + service.getFormatingForFile(editor.document.file.fullPath, options, startPos, endPos).then(function (textEdits) { + if (EditorManager.getCurrentFullEditor() !== editor) { + return; + } + editor.document.setText(textEdits.reduce(function (text, edit) { + return text.substr(0, edit.minChar) + edit.text + text.substr(edit.limChar); + }, editor.document.getText())); + }); + }); }; + } + FormattingManager.FORMAT_COMMAND_ID = 'fdecampred.brackets-typescript.format'; + + FormattingManager.FORMAT_LABEL = 'Format'; + return FormattingManager; +})(ServiceConsumer); + +module.exports = FormattingManager; + +},{"./serviceConsumer":61}],55:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var logger = _dereq_('../commons/logger'); +var FileSystem = _dereq_('./fileSystem'); +var WorkingSet = _dereq_('./workingSet'); +var TypeScriptPreferencesManager = _dereq_('./preferencesManager'); +var WorkerBridge = _dereq_('../commons/workerBridge'); +var TypeScriptErrorReporter = _dereq_('./errorReporter'); +var TypeScriptConfigErrorReporter = _dereq_('./configErrorReporter'); +var TypeScriptQuickEditProvider = _dereq_('./quickEdit'); +var TypeScriptQuickJumpProvider = _dereq_('./quickJump'); +var TypeScriptQuickFindDefitionProvider = _dereq_('./quickFindDefinition'); +var CodeHintProvider = _dereq_('./codeHintProvider'); +var FormattingManager = _dereq_('./formattingManager'); +var typeScriptModeFactory = _dereq_('./mode'); + +//-------------------------------------------------------------------------- +// +// Main entry point of the extension +// +//-------------------------------------------------------------------------- +// brackets dependency +var LanguageManager = brackets.getModule('language/LanguageManager'), BracketsFileSystem = brackets.getModule('filesystem/FileSystem'), DocumentManager = brackets.getModule('document/DocumentManager'), ProjectManager = brackets.getModule('project/ProjectManager'), CodeHintManager = brackets.getModule('editor/CodeHintManager'), CodeInspection = brackets.getModule('language/CodeInspection'), EditorManager = brackets.getModule('editor/EditorManager'), QuickOpen = brackets.getModule('search/QuickOpen'), PreferencesManager = brackets.getModule('preferences/PreferencesManager'), CommandManager = brackets.getModule('command/CommandManager'), CodeMirror = brackets.getModule('thirdparty/CodeMirror2/lib/codemirror'), Menus = brackets.getModule('command/Menus'); + +var tsErrorReporter, quickEditProvider, codeHintProvider, quickJumpProvider, quickFindDefinitionProvider, formattingManager; + +var fileSystem, workingSet, worker, preferencesManager, bridge; + +function init(config) { + logger.setLogLevel(config.logLevel); + CodeMirror.defineMode('typescript', typeScriptModeFactory); + + //Register the language extension + LanguageManager.defineLanguage('typescript', { + name: 'TypeScript', + mode: 'typescript', + fileExtensions: ['ts'], + blockComment: ['/*', '*/'], + lineComment: ['//'] + }); + + // Register code hint + codeHintProvider = new CodeHintProvider(); + CodeHintManager.registerHintProvider(codeHintProvider, ['typescript'], 0); + + // Register quickEdit + quickEditProvider = new TypeScriptQuickEditProvider(); + EditorManager.registerInlineEditProvider(quickEditProvider.typeScriptInlineEditorProvider); + + //Register quickJump + quickJumpProvider = new TypeScriptQuickJumpProvider(); + EditorManager.registerJumpToDefProvider(quickJumpProvider.handleJumpToDefinition); + + //Register error provider + tsErrorReporter = new TypeScriptErrorReporter(); + CodeInspection.register('typescript', tsErrorReporter); + CodeInspection.register('json', new TypeScriptConfigErrorReporter()); + + //Register quickFindDefinitionProvider + quickFindDefinitionProvider = new TypeScriptQuickFindDefitionProvider(); + QuickOpen.addQuickOpenPlugin(quickFindDefinitionProvider); + + //Register formatting command + formattingManager = new FormattingManager(); + CommandManager.register(FormattingManager.FORMAT_LABEL, FormattingManager.FORMAT_COMMAND_ID, formattingManager.format); + var contextMenu = Menus.getContextMenu(Menus.ContextMenuIds.EDITOR_MENU); + contextMenu.addMenuItem(FormattingManager.FORMAT_COMMAND_ID); + + initServices(config.workerLocation, config.typeScriptLocation, config.logLevel); + + $(ProjectManager).on('beforeProjectClose beforeAppClose', disposeServices); + $(ProjectManager).on('projectOpen', function () { + return initServices(config.workerLocation, config.typeScriptLocation, config.logLevel); + }); +} - ArrayUtilities.max = function (array, func) { - var max = func(array[0]); +function disposeServices() { + bridge.dispose(); + worker.terminate(); + fileSystem.dispose(); + workingSet.dispose(); + preferencesManager.dispose(); + + formattingManager.reset(); + tsErrorReporter.reset(); + codeHintProvider.reset(); + quickEditProvider.reset(); + quickJumpProvider.reset(); + quickFindDefinitionProvider.reset(); +} - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next > max) { - max = next; - } - } +function initServices(workerLocation, typeScriptLocation, logLevel) { + fileSystem = new FileSystem(BracketsFileSystem, ProjectManager); + workingSet = new WorkingSet(DocumentManager, EditorManager); + worker = new Worker(workerLocation); + bridge = new WorkerBridge(worker); + preferencesManager = new TypeScriptPreferencesManager(PreferencesManager); + + bridge.init({ + console: console, + workingSet: workingSet, + fileSystem: fileSystem, + preferencesManager: preferencesManager, + getTypeScriptLocation: function () { + return typeScriptLocation; + }, + getLogLevel: function () { + return logLevel; + } + }).then(function (proxy) { + tsErrorReporter.setService(proxy.errorService); + codeHintProvider.setService(proxy.completionService); + quickEditProvider.setService(proxy.definitionService); + quickJumpProvider.setService(proxy.definitionService); + quickFindDefinitionProvider.setService(proxy.lexicalStructureService); + formattingManager.setService(proxy.formattingService); + }); +} - return max; - }; +module.exports = init; + +},{"../commons/logger":44,"../commons/workerBridge":48,"./codeHintProvider":50,"./configErrorReporter":51,"./errorReporter":52,"./fileSystem":53,"./formattingManager":54,"./mode":56,"./preferencesManager":57,"./quickEdit":58,"./quickFindDefinition":59,"./quickJump":60,"./workingSet":62}],56:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var FormattingOptions = (function () { + function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { + this.useTabs = useTabs; + this.spacesPerTab = spacesPerTab; + this.indentSpaces = indentSpaces; + this.newLineCharacter = newLineCharacter; + } + FormattingOptions.defaultOptions = new FormattingOptions(false, /*spacesPerTab:*/ 4, /*indentSpaces:*/ 4, '\r\n'); + return FormattingOptions; +})(); - ArrayUtilities.last = function (array) { - if (array.length === 0) { - throw TypeScript.Errors.argumentOutOfRange('array'); - } +var logger = _dereq_('../commons/logger'); +var Formatting = TypeScript.Services.Formatting; - return array[array.length - 1]; - }; +var Token = (function () { + function Token() { + } + return Token; +})(); - ArrayUtilities.lastOrDefault = function (array, predicate) { - for (var i = array.length - 1; i >= 0; i--) { - var v = array[i]; - if (predicate(v, i)) { - return v; - } - } +var LineDescriptor = (function () { + function LineDescriptor() { + this.eolState = 0 /* Start */; + this.text = ''; + } + LineDescriptor.prototype.clone = function () { + var clone = new LineDescriptor(); + clone.tokenMap = this.tokenMap; + clone.eolState = this.eolState; + clone.text = this.text; + return clone; + }; + return LineDescriptor; +})(); - return null; - }; +var TypeScriptMode = (function () { + function TypeScriptMode(options) { + this.lineComment = '//'; + this.blockCommentStart = '/*'; + this.blockCommentEnd = '*/'; + this.electricChars = ':{}[]()'; + this.options = options; + } + TypeScriptMode.prototype.startState = function () { + return new LineDescriptor(); + }; - ArrayUtilities.firstOrDefault = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (func(value, i)) { - return value; - } - } + TypeScriptMode.prototype.copyState = function (lineDescriptor) { + return lineDescriptor.clone(); + }; - return null; - }; + TypeScriptMode.prototype.token = function (stream, lineDescriptor) { + if (stream.sol()) { + this.initializeLineDescriptor(lineDescriptor, stream.string); + } - ArrayUtilities.first = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (!func || func(value, i)) { - return value; - } + var token = lineDescriptor.tokenMap[stream.pos]; + if (token) { + var textBefore = stream.string.substr(0, stream.pos); + for (var i = 0; i < token.length; i++) { + stream.next(); } + return getStyleForToken(token, textBefore); + } else { + stream.skipToEnd(); + } - throw TypeScript.Errors.invalidOperation(); - }; + return null; + }; - ArrayUtilities.sum = function (array, func) { - var result = 0; + TypeScriptMode.prototype.indent = function (lineDescriptor, textAfter) { + if (lineDescriptor.eolState !== 0 /* Start */) { + //strange bug preven CodeMirror.Pass + return CodeMirror.Pass; + } + var text = lineDescriptor.text + '\n' + (textAfter || 'fakeIdent'), position = textAfter ? text.length : text.length - 9, syntaxTree = this.getSyntaxTree(text), options = new FormattingOptions(!this.options.indentWithTabs, this.options.tabSize, this.options.indentUnit, '\n'), textSnapshot = new Formatting.TextSnapshot(TypeScript.SimpleText.fromString(text)), indent = Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); - for (var i = 0, n = array.length; i < n; i++) { - result += func(array[i]); - } + if (indent === null) { + //strange bug preven CodeMirror.Pass + return CodeMirror.Pass; + } + return indent; + }; - return result; - }; + TypeScriptMode.prototype.initializeLineDescriptor = function (lineDescriptor, text) { + var classificationResult = getClassificationsForLine(text, lineDescriptor.eolState), tokens = classificationResult.tokens; - ArrayUtilities.select = function (values, func) { - var result = new Array(values.length); + if (lineDescriptor.text) { + lineDescriptor.text += '\n'; + } + lineDescriptor.text += text; + lineDescriptor.eolState = classificationResult.eolState; + lineDescriptor.tokenMap = {}; - for (var i = 0; i < values.length; i++) { - result[i] = func(values[i]); - } + for (var i = 0, l = tokens.length; i < l; i++) { + lineDescriptor.tokenMap[tokens[i].position] = tokens[i]; + } + }; - return result; - }; + TypeScriptMode.prototype.getSyntaxTree = function (text) { + return TypeScript.Parser.parse('script', TypeScript.SimpleText.fromString(text), 1 /* ES5 */, false); + }; + return TypeScriptMode; +})(); - ArrayUtilities.where = function (values, func) { - var result = new Array(); +var classifier = ts.createClassifier(new logger.LogingClass()); - for (var i = 0; i < values.length; i++) { - if (func(values[i])) { - result.push(values[i]); - } - } +function getClassificationsForLine(text, eolState) { + var classificationResult = classifier.getClassificationsForLine(text, eolState), currentPosition = 0, tokens = []; - return result; + for (var i = 0, l = classificationResult.entries.length; i < l; i++) { + var entry = classificationResult.entries[i]; + var token = { + string: text.substr(currentPosition, entry.length), + length: entry.length, + classification: entry.classification, + position: currentPosition }; + tokens.push(token); + currentPosition += entry.length; + } - ArrayUtilities.any = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (func(array[i])) { - return true; - } - } - - return false; - }; + return { + tokens: tokens, + eolState: classificationResult.finalLexState + }; +} - ArrayUtilities.all = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (!func(array[i])) { - return false; - } +function getStyleForToken(token, textBefore) { + var TokenClass = ts.TokenClass; + switch (token.classification) { + case 6 /* NumberLiteral */: + return 'number'; + case 7 /* StringLiteral */: + return 'string'; + case 8 /* RegExpLiteral */: + return 'string-2'; + case 2 /* Operator */: + return 'operator'; + case 3 /* Comment */: + return 'comment'; + case 1 /* Keyword */: + switch (token.string) { + case 'string': + case 'number': + case 'void': + case 'bool': + case 'boolean': + return 'variable-2'; + case 'static': + case 'public': + case 'private': + case 'export': + case 'get': + case 'set': + return 'qualifier'; + case 'class': + case 'function': + case 'module': + case 'var': + return 'def'; + default: + return 'keyword'; } - return true; - }; - - ArrayUtilities.binarySearch = function (array, value) { - var low = 0; - var high = array.length - 1; + case 5 /* Identifier */: + // Show types (indentifiers in PascalCase) as variable-2, other types (camelCase) as variable + if (token.string.charAt(0).toLowerCase() !== token.string.charAt(0)) { + return 'variable-2'; + } else { + return 'variable'; + } + case 0 /* Punctuation */: + return 'bracket'; + case 4 /* Whitespace */: + default: + return null; + } +} - while (low <= high) { - var middle = low + ((high - low) >> 1); - var midValue = array[middle]; +function typeScriptModeFactory(options, spec) { + return new TypeScriptMode(options); +} - if (midValue === value) { - return middle; - } else if (midValue > value) { - high = middle - 1; - } else { - low = middle + 1; - } - } +module.exports = typeScriptModeFactory; + +},{"../commons/logger":44}],57:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var Promise = _dereq_('bluebird'); + +var tsUtils = _dereq_('../commons/typeScriptUtils'); +var utils = _dereq_('../commons/utils'); +var logger = _dereq_('../commons/logger'); +var collections = _dereq_('../commons/collections'); +var signal = _dereq_('../commons/signal'); + +/** +* Implementation of the ITypescriptPreferenceManager +*/ +var TypescriptPreferenceManager = (function () { + /** + * @prama prefManager brackets PreferenceManager module + */ + function TypescriptPreferenceManager(prefManager) { + var _this = this; + this.prefManager = prefManager; + this.configChanged = new signal.Signal(); + /** + * handle change in preferences + */ + this.preferenceChangedHandler = function (e, data) { + if (data && Array.isArray(data.ids) && data.ids.indexOf('typescript') !== -1) { + _this.projectConfigs = null; + _this.configChanged.dispatch(); + } + }; + this.prefManager.on('change', this.preferenceChangedHandler); + } + /** + * @return a Promise resolving to and map projectId <=> project config + * corresponding to the typescript section in project preference + */ + TypescriptPreferenceManager.prototype.getProjectsConfig = function () { + if (!this.projectConfigs) { + this.projectConfigs = this.retriveProjectsConfig(); + } + return Promise.cast(this.projectConfigs.toObject()); + }; - return ~low; - }; + /** + * A signal notifying when preferences might have changed + */ + TypescriptPreferenceManager.prototype.dispose = function () { + this.configChanged.clear(); + }; - ArrayUtilities.createArray = function (length, defaultValue) { - var result = new Array(length); - for (var i = 0; i < length; i++) { - result[i] = defaultValue; - } + /** + * retrieve project configs from preferences + */ + TypescriptPreferenceManager.prototype.retriveProjectsConfig = function () { + var result = new collections.StringMap(); + var data = this.prefManager.get('typescript', this.prefManager.CURRENT_PROJECT); + if (!data) { return result; - }; + } - ArrayUtilities.grow = function (array, length, defaultValue) { - var count = length - array.length; - for (var i = 0; i < count; i++) { - array.push(defaultValue); - } - }; + var configs; - ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) { - for (var i = 0; i < length; i++) { - destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]; + if (data.hasOwnProperty('projects')) { + var projects = data.projects; + delete data.projects; + if (typeof projects !== 'object') { + return result; } - }; + configs = Object.keys(projects).reduce(function (configs, id) { + var project = projects[id]; + if (typeof project === 'object') { + configs[id] = utils.assign({}, data, project); + } + return configs; + }, {}); + } else { + configs = { + default: data + }; + } - ArrayUtilities.indexOf = function (array, predicate) { - for (var i = 0, n = array.length; i < n; i++) { - if (predicate(array[i])) { - return i; + Object.keys(configs).forEach(function (projectId) { + var config = utils.assign({}, tsUtils.typeScriptProjectConfigDefault, configs[projectId]); + if (!tsUtils.validateTypeScriptProjectConfig(config)) { + if (logger.warning()) { + logger.log('invalid config file for brackets-typescript config file'); } + } else { + result.set(projectId, config); } + }); - return -1; - }; - return ArrayUtilities; - })(); - TypeScript.ArrayUtilities = ArrayUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitVector) { - var pool = []; - var Constants; - (function (Constants) { - Constants[Constants["MaxBitsPerEncodedNumber"] = 30] = "MaxBitsPerEncodedNumber"; - Constants[Constants["BitsPerEncodedBiStateValue"] = 1] = "BitsPerEncodedBiStateValue"; - - Constants[Constants["BitsPerEncodedTriStateValue"] = 2] = "BitsPerEncodedTriStateValue"; - - Constants[Constants["BiStateEncodedTrue"] = 1] = "BiStateEncodedTrue"; - Constants[Constants["BiStateClearBitsMask"] = 1] = "BiStateClearBitsMask"; - - Constants[Constants["TriStateEncodedFalse"] = 1] = "TriStateEncodedFalse"; - Constants[Constants["TriStateEncodedTrue"] = 2] = "TriStateEncodedTrue"; - Constants[Constants["TriStateClearBitsMask"] = 3] = "TriStateClearBitsMask"; - })(Constants || (Constants = {})); + return result; + }; + return TypescriptPreferenceManager; +})(); - var BitVectorImpl = (function () { - function BitVectorImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.bits = []; +module.exports = TypescriptPreferenceManager; + +},{"../commons/collections":40,"../commons/logger":44,"../commons/signal":45,"../commons/typeScriptUtils":46,"../commons/utils":47,"bluebird":5}],58:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +var ServiceConsumer = _dereq_('./serviceConsumer'); + +var DocumentManager = brackets.getModule('document/DocumentManager'), MultiRangeInlineEditor = brackets.getModule('editor/MultiRangeInlineEditor').MultiRangeInlineEditor; + +var TypeScriptQuickEditProvider = (function (_super) { + __extends(TypeScriptQuickEditProvider, _super); + function TypeScriptQuickEditProvider() { + _super.apply(this, arguments); + var _this = this; + this.typeScriptInlineEditorProvider = function (hostEditor, pos) { + if (hostEditor.getModeForSelection() !== 'typescript') { + return null; } - BitVectorImpl.prototype.computeTriStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; - - return (index / encodedValuesPerNumber) >>> 0; - }; - - BitVectorImpl.prototype.computeBiStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; - return (index / encodedValuesPerNumber) >>> 0; - }; + var sel = hostEditor.getSelection(false); + if (sel.start.line !== sel.end.line) { + return null; + } + var deferred = $.Deferred(); + _this.getService().then(function (service) { + var fileName = hostEditor.document.file.fullPath; + service.getDefinitionForFile(fileName, pos).then(function (definitions) { + if (!definitions || definitions.length === 0) { + deferred.reject(); + } - BitVectorImpl.prototype.computeTriStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; + definitions.filter(function (definition) { + return definition.fileName !== fileName || definition.lineStart !== pos.line; + }); + if (definitions.length === 0) { + deferred.reject(); + } + + var promises = [], ranges = []; + + definitions.forEach(function (definition) { + promises.push(DocumentManager.getDocumentForPath(definition.fileName).then(function (doc) { + ranges.push({ + document: doc, + name: definition.name, + lineStart: definition.lineStart, + lineEnd: definition.lineEnd, + fileName: definition.fileName + }); + })); + }); - return (index % encodedValuesPerNumber) * 2 /* BitsPerEncodedTriStateValue */; - }; + return $.when.apply($, promises).then(function () { + var inlineEditor = new MultiRangeInlineEditor(ranges); + inlineEditor.load(hostEditor); + deferred.resolve(inlineEditor); + }); + }).catch(function (e) { + deferred.reject(); + }); + }); + return deferred.promise(); + }; + } + return TypeScriptQuickEditProvider; +})(ServiceConsumer); + +module.exports = TypeScriptQuickEditProvider; + +},{"./serviceConsumer":61}],59:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +var ServiceConsumer = _dereq_('./serviceConsumer'); - BitVectorImpl.prototype.computeBiStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; +var EditorManager = brackets.getModule('editor/EditorManager'), QuickOpen = brackets.getModule('search/QuickOpen'); - return (index % encodedValuesPerNumber) * 1 /* BitsPerEncodedBiStateValue */; - }; +var Session = (function () { + function Session(items) { + this.items = items; + } + return Session; +})(); - BitVectorImpl.prototype.valueAt = function (index) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return undefined; - } +var TypeScriptQuickFindDefitionProvider = (function (_super) { + __extends(TypeScriptQuickFindDefitionProvider, _super); + function TypeScriptQuickFindDefitionProvider() { + _super.apply(this, arguments); + var _this = this; + this.name = 'TypeScriptQuickFindDefitionProvider'; + this.languageIds = ['typescript']; + this.label = 'TypeScript'; + this.search = function (request, stringMatcher) { + request = request.slice(request.indexOf('@') + 1, request.length); + return _this.getSession().then(function (session) { + return session.items.filter(function (item) { + return !!stringMatcher.match(item.name, request); + }); + }); + }; + this.done = function () { + _this.session = null; + }; + this.itemSelect = function (item) { + _this.itemFocus(item); + }; + this.itemFocus = function (item) { + _this.setCurrentPosition(item.position); + }; + } + TypeScriptQuickFindDefitionProvider.prototype.match = function (query) { + return query.indexOf('@') === 0; + }; - var bitIndex = this.computeTriStateEncodedValueIndex(index); - if (encoded & (2 /* TriStateEncodedTrue */ << bitIndex)) { - return true; - } else if (encoded & (1 /* TriStateEncodedFalse */ << bitIndex)) { - return false; - } else { - return undefined; - } - } else { - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return false; - } + TypeScriptQuickFindDefitionProvider.prototype.resultsFormatter = function (item) { + var displayName = QuickOpen.highlightMatch(item.name); + displayName = item.containerName ? item.containerName + '.' + displayName : displayName; + return '
  • ' + displayName + '
  • '; + }; - var bitIndex = this.computeBiStateEncodedValueIndex(index); - if (encoded & (1 /* BiStateEncodedTrue */ << bitIndex)) { - return true; - } else { - return false; - } - } - }; + TypeScriptQuickFindDefitionProvider.prototype.getSession = function () { + var _this = this; + return $.Deferred(function (deferred) { + if (_this.session) { + deferred.resolve(_this.session); + } else { + _this.getService().then(function (lexicalStructureService) { + var editor = EditorManager.getActiveEditor(), currentFile = editor.document.file.fullPath; + lexicalStructureService.getLexicalStructureForFile(currentFile).then(function (items) { + _this.session = new Session(items); + deferred.resolve(_this.session); + }); + }); + } + }).promise(); + }; - BitVectorImpl.prototype.setValueAt = function (index, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - TypeScript.Debug.assert(value === true || value === false || value === undefined, "value must only be true, false or undefined."); + TypeScriptQuickFindDefitionProvider.prototype.setCurrentPosition = function (pos) { + EditorManager.getActiveEditor().setCursorPos(pos.line, pos.ch, true, true); + }; + return TypeScriptQuickFindDefitionProvider; +})(ServiceConsumer); + +module.exports = TypeScriptQuickFindDefitionProvider; + +},{"./serviceConsumer":61}],60:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +//TODO that part of the application is not well tested and just 'work' it needs to be refactored +var ServiceConsumer = _dereq_('./serviceConsumer'); - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === undefined) { - return; - } +var EditorManager = brackets.getModule('editor/EditorManager'), Commands = brackets.getModule('command/Commands'), CommandManager = brackets.getModule('command/CommandManager'); - encoded = 0; - } +var TypeScriptQuickJumpProvider = (function (_super) { + __extends(TypeScriptQuickJumpProvider, _super); + function TypeScriptQuickJumpProvider() { + _super.apply(this, arguments); + var _this = this; + this.handleJumpToDefinition = function () { + var editor = EditorManager.getFocusedEditor(); - var bitIndex = this.computeTriStateEncodedValueIndex(index); + if (!editor || editor.getModeForSelection() !== 'typescript') { + return null; + } - var clearMask = ~(3 /* TriStateClearBitsMask */ << bitIndex); - encoded = encoded & clearMask; + var pos = editor.getCursorPos(), fileName = editor.document.file.fullPath, deferred = $.Deferred(); - if (value === true) { - encoded = encoded | (2 /* TriStateEncodedTrue */ << bitIndex); - } else if (value === false) { - encoded = encoded | (1 /* TriStateEncodedFalse */ << bitIndex); + _this.getService().then(function (service) { + service.getDefinitionForFile(fileName, pos).then(function (definitions) { + if (!definitions || definitions.length === 0) { + deferred.reject(); } - this.bits[arrayIndex] = encoded; - } else { - TypeScript.Debug.assert(value === true || value === false, "value must only be true or false."); - - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === false) { + definitions.filter(function (definition) { + return definition.fileName !== fileName || definition.lineStart !== pos.line; + }); + if (definitions.length === 0) { + deferred.reject(); + } + if (editor === EditorManager.getFocusedEditor()) { + if (editor.getCursorPos().line === pos.line) { + var def = definitions[0]; + if (def.fileName === fileName) { + editor.setCursorPos(def.lineStart, def.charStart, true, true); + deferred.resolve(true); + } else { + CommandManager.execute(Commands.FILE_OPEN, { fullPath: def.fileName }).then(function () { + var editor = EditorManager.getFocusedEditor(); + editor.setCursorPos(def.lineStart, def.charStart, true, true); + deferred.resolve(true); + }, function () { + return deferred.reject(); + }); + } return; } - - encoded = 0; } + deferred.reject(); + }, function () { + return deferred.reject(); + }); + }); + return deferred.promise(); + }; + } + return TypeScriptQuickJumpProvider; +})(ServiceConsumer); + +module.exports = TypeScriptQuickJumpProvider; + +},{"./serviceConsumer":61}],61:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var Promise = _dereq_('bluebird'); + +/** +* a class implementing logic to stack operations until a service +* has been injected +*/ +var ServiceConsumer = (function () { + /** + * constructor + */ + function ServiceConsumer() { + this.reset(); + } + /** + * inject the service + * + * @param service the injected service + */ + ServiceConsumer.prototype.setService = function (service) { + this.serviceResolver(service); + }; - var bitIndex = this.computeBiStateEncodedValueIndex(index); - - encoded = encoded & ~(1 /* BiStateClearBitsMask */ << bitIndex); - - if (value) { - encoded = encoded | (1 /* BiStateEncodedTrue */ << bitIndex); - } + /** + * @return a promise that will be resolved when the service get injected + */ + ServiceConsumer.prototype.getService = function () { + return this.promise; + }; - this.bits[arrayIndex] = encoded; - } - }; + /** + * reset the injection + */ + ServiceConsumer.prototype.reset = function () { + var _this = this; + this.promise = new Promise(function (resolve) { + return _this.serviceResolver = resolve; + }); + }; + return ServiceConsumer; +})(); - BitVectorImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - this.bits.length = 0; - pool.push(this); - }; - return BitVectorImpl; - })(); +module.exports = ServiceConsumer; + +},{"bluebird":5}],62:[function(_dereq_,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var signal = _dereq_('../commons/signal'); +var collections = _dereq_('../commons/collections'); +var ws = _dereq_('../commons/workingSet'); +var Promise = _dereq_('bluebird'); + +/** +* implementation of the IWorkingSet +*/ +var WorkingSet = (function () { + //------------------------------- + // constructor + //------------------------------- + function WorkingSet(documentManager, editorManager) { + var _this = this; + this.documentManager = documentManager; + this.editorManager = editorManager; + //------------------------------- + // Variables + //------------------------------- + /** + * internal signal for workingSetChanged + */ + this._workingSetChanged = new signal.Signal(); + /** + * internal signal for documentEdited + */ + this._documentEdited = new signal.Signal(); + /** + * Set of file path in the working set + */ + this.filesSet = new collections.StringSet(); + //------------------------------- + // Events Handler + //------------------------------- + /** + * handle 'workingSetAdd' event + */ + this.workingSetAddHandler = function (event, file) { + _this.filesSet.add(file.fullPath); + _this.workingSetChanged.dispatch({ + kind: 0 /* ADD */, + paths: [file.fullPath] + }); + }; + /** + * handle 'workingSetAddList' event + */ + this.workingSetAddListHandler = function (event) { + var files = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + files[_i] = arguments[_i + 1]; + } + var paths = files.map(function (file) { + _this.filesSet.add(file.fullPath); + return file.fullPath; + }); + if (paths.length > 0) { + _this.workingSetChanged.dispatch({ + kind: 0 /* ADD */, + paths: paths + }); + } + }; + /** + * handle 'workingSetRemove' event + */ + this.workingSetRemoveHandler = function (event, file) { + _this.filesSet.remove(file.fullPath); + _this.workingSetChanged.dispatch({ + kind: 1 /* REMOVE */, + paths: [file.fullPath] + }); + }; + /** + * handle 'workingSetRemoveList' event + */ + this.workingSetRemoveListHandler = function (event) { + var files = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + files[_i] = arguments[_i + 1]; + } + var paths = files.map(function (file) { + _this.filesSet.remove(file.fullPath); + return file.fullPath; + }); + if (paths.length > 0) { + _this.workingSetChanged.dispatch({ + kind: 1 /* REMOVE */, + paths: paths + }); + } + }; + /** + * handle 'change' on document + */ + this.documentChangesHandler = function (event, document, changes) { + var changeList = changes.map(function (change) { + return ({ + from: change.from, + to: change.to, + text: change.text && change.text.join('\n'), + removed: change.removed ? change.removed.join('\n') : '' + }); + }); - function getBitVector(allowUndefinedValues) { - if (pool.length === 0) { - return new BitVectorImpl(allowUndefinedValues); + if (changeList.length > 0) { + _this.documentEdited.dispatch({ + path: document.file.fullPath, + changeList: changeList, + documentText: document.getText() + }); } + }; + /** + * handle active editor change + */ + this.activeEditorChangeHandler = function (event, current, previous) { + _this.setActiveEditor(current); + }; + $(documentManager).on('workingSetAdd', this.workingSetAddHandler); + $(documentManager).on('workingSetAddList', this.workingSetAddListHandler); + $(documentManager).on('workingSetRemove', this.workingSetRemoveHandler); + $(documentManager).on('workingSetRemoveList', this.workingSetRemoveListHandler); + + $(editorManager).on('activeEditorChange', this.activeEditorChangeHandler); + + this.setFiles(documentManager.getWorkingSet().map(function (file) { + return file.fullPath; + })); + this.setActiveEditor(editorManager.getActiveEditor()); + } + //------------------------------- + // IWorkingSet implementations + //------------------------------- + /** + * list of files in the working set + */ + WorkingSet.prototype.getFiles = function () { + return Promise.cast(this.filesSet.values); + }; - var vector = pool.pop(); - vector.isReleased = false; - vector.allowUndefinedValues = allowUndefinedValues; + Object.defineProperty(WorkingSet.prototype, "workingSetChanged", { + /** + * a signal dispatching events when change occured in the working set + */ + get: function () { + return this._workingSetChanged; + }, + enumerable: true, + configurable: true + }); + + Object.defineProperty(WorkingSet.prototype, "documentEdited", { + /** + * a signal that provide fine grained change over edited document + */ + get: function () { + return this._documentEdited; + }, + enumerable: true, + configurable: true + }); + + /** + * dispose the working set + */ + WorkingSet.prototype.dispose = function () { + $(this.documentManager).off('workingSetAdd', this.workingSetAddHandler); + $(this.documentManager).off('workingSetAddList', this.workingSetAddListHandler); + $(this.documentManager).off('workingSetRemove', this.workingSetRemoveHandler); + $(this.documentManager).off('workingSetRemoveList', this.workingSetRemoveListHandler); + $(this.editorManager).off('activeEditorChange', this.activeEditorChangeHandler); + this.setFiles(null); + this.setActiveEditor(null); + }; - return vector; + //------------------------------- + // Privates methods + //------------------------------- + /** + * set working set files + */ + WorkingSet.prototype.setFiles = function (files) { + var _this = this; + this.filesSet.values.forEach(function (path) { + return _this.filesSet.remove(path); + }); + if (files) { + files.forEach(function (path) { + return _this.filesSet.add(path); + }); } - BitVector.getBitVector = getBitVector; - })(TypeScript.BitVector || (TypeScript.BitVector = {})); - var BitVector = TypeScript.BitVector; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitMatrix) { - var pool = []; - - var BitMatrixImpl = (function () { - function BitMatrixImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.vectors = []; - } - BitMatrixImpl.prototype.valueAt = function (x, y) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - return this.allowUndefinedValues ? undefined : false; - } + }; - return vector.valueAt(y); - }; - - BitMatrixImpl.prototype.setValueAt = function (x, y, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - if (value === undefined) { - return; - } - - vector = TypeScript.BitVector.getBitVector(this.allowUndefinedValues); - this.vectors[x] = vector; - } - - vector.setValueAt(y, value); - }; - - BitMatrixImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - - for (var name in this.vectors) { - if (this.vectors.hasOwnProperty(name)) { - var vector = this.vectors[name]; - vector.release(); - } - } - - this.vectors.length = 0; - pool.push(this); - }; - return BitMatrixImpl; - })(); - - function getBitMatrix(allowUndefinedValues) { - if (pool.length === 0) { - return new BitMatrixImpl(allowUndefinedValues); - } - - var matrix = pool.pop(); - matrix.isReleased = false; - matrix.allowUndefinedValues = allowUndefinedValues; - - return matrix; - } - BitMatrix.getBitMatrix = getBitMatrix; - })(TypeScript.BitMatrix || (TypeScript.BitMatrix = {})); - var BitMatrix = TypeScript.BitMatrix; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Constants) { - Constants[Constants["Max31BitInteger"] = 1073741823] = "Max31BitInteger"; - Constants[Constants["Min31BitInteger"] = -1073741824] = "Min31BitInteger"; - })(TypeScript.Constants || (TypeScript.Constants = {})); - var Constants = TypeScript.Constants; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (AssertionLevel) { - AssertionLevel[AssertionLevel["None"] = 0] = "None"; - AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; - AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; - AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; - })(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {})); - var AssertionLevel = TypeScript.AssertionLevel; - - var Debug = (function () { - function Debug() { - } - Debug.shouldAssert = function (level) { - return this.currentAssertionLevel >= level; - }; - - Debug.assert = function (expression, message, verboseDebugInfo) { - if (typeof message === "undefined") { message = ""; } - if (typeof verboseDebugInfo === "undefined") { verboseDebugInfo = null; } - if (!expression) { - var verboseDebugString = ""; - if (verboseDebugInfo) { - verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo(); - } - - throw new Error("Debug Failure. False expression: " + message + verboseDebugString); - } - }; - - Debug.fail = function (message) { - Debug.assert(false, message); - }; - Debug.currentAssertionLevel = 0 /* None */; - return Debug; - })(); - TypeScript.Debug = Debug; -})(TypeScript || (TypeScript = {})); -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TypeScript; -(function (TypeScript) { - TypeScript.LocalizedDiagnosticMessages = null; - - var Location = (function () { - function Location(fileName, lineMap, start, length) { - this._fileName = fileName; - this._lineMap = lineMap; - this._start = start; - this._length = length; - } - Location.prototype.fileName = function () { - return this._fileName; - }; - - Location.prototype.lineMap = function () { - return this._lineMap; - }; - - Location.prototype.line = function () { - return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0; - }; - - Location.prototype.character = function () { - return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0; - }; - - Location.prototype.start = function () { - return this._start; - }; - - Location.prototype.length = function () { - return this._length; - }; - - Location.equals = function (location1, location2) { - return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length; - }; - return Location; - })(); - TypeScript.Location = Location; - - var Diagnostic = (function (_super) { - __extends(Diagnostic, _super); - function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - _super.call(this, fileName, lineMap, start, length); - this._diagnosticKey = diagnosticKey; - this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null; - this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null; - } - Diagnostic.prototype.toJSON = function (key) { - var result = {}; - result.start = this.start(); - result.length = this.length(); - - result.diagnosticCode = this._diagnosticKey; - - var _arguments = this.arguments(); - if (_arguments && _arguments.length > 0) { - result.arguments = _arguments; - } - - return result; - }; - - Diagnostic.prototype.diagnosticKey = function () { - return this._diagnosticKey; - }; - - Diagnostic.prototype.arguments = function () { - return this._arguments; - }; - - Diagnostic.prototype.text = function () { - return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.message = function () { - return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.additionalLocations = function () { - return this._additionalLocations || []; - }; - - Diagnostic.equals = function (diagnostic1, diagnostic2) { - return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { - return v1 === v2; - }); - }; - - Diagnostic.prototype.info = function () { - return getDiagnosticInfoFromKey(this.diagnosticKey()); - }; - return Diagnostic; - })(Location); - TypeScript.Diagnostic = Diagnostic; - - function newLine() { - return TypeScript.Environment ? TypeScript.Environment.newLine : "\r\n"; - } - TypeScript.newLine = newLine; - - function getLargestIndex(diagnostic) { - var largest = -1; - var regex = /\{(\d+)\}/g; - - var match; - while (match = regex.exec(diagnostic)) { - var val = parseInt(match[1]); - if (!isNaN(val) && val > largest) { - largest = val; - } - } - - return largest; - } - - function getDiagnosticInfoFromKey(diagnosticKey) { - var result = TypeScript.diagnosticInformationMap[diagnosticKey]; - TypeScript.Debug.assert(result); - return result; - } - - function getLocalizedText(diagnosticKey, args) { - if (TypeScript.LocalizedDiagnosticMessages) { - } - - var diagnosticMessageText = TypeScript.LocalizedDiagnosticMessages ? TypeScript.LocalizedDiagnosticMessages[diagnosticKey] : diagnosticKey; - TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null); - - var actualCount = args ? args.length : 0; - - var expectedCount = 1 + getLargestIndex(diagnosticKey); - - if (expectedCount !== actualCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount])); - } - - var valueCount = 1 + getLargestIndex(diagnosticMessageText); - if (valueCount !== expectedCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount])); - } - - diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) { - return typeof args[num] !== 'undefined' ? args[num] : match; - }); - - diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) { - return TypeScript.newLine(); - }); - - return diagnosticMessageText; - } - TypeScript.getLocalizedText = getLocalizedText; - - function getDiagnosticMessage(diagnosticKey, args) { - var diagnostic = getDiagnosticInfoFromKey(diagnosticKey); - var diagnosticMessageText = getLocalizedText(diagnosticKey, args); - - var message; - if (diagnostic.category === 1 /* Error */) { - message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else if (diagnostic.category === 0 /* Warning */) { - message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else { - message = diagnosticMessageText; - } - - return message; - } - TypeScript.getDiagnosticMessage = getDiagnosticMessage; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Errors = (function () { - function Errors() { - } - Errors.argument = function (argument, message) { - return new Error("Invalid argument: " + argument + ". " + message); - }; - - Errors.argumentOutOfRange = function (argument) { - return new Error("Argument out of range: " + argument); - }; - - Errors.argumentNull = function (argument) { - return new Error("Argument null: " + argument); - }; - - Errors.abstract = function () { - return new Error("Operation not implemented properly by subclass."); - }; - - Errors.notYetImplemented = function () { - return new Error("Not yet implemented."); - }; - - Errors.invalidOperation = function (message) { - return new Error("Invalid operation: " + message); - }; - return Errors; - })(); - TypeScript.Errors = Errors; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Hash = (function () { - function Hash() { - } - Hash.computeFnv1aCharArrayHashCode = function (text, start, len) { - var hashCode = Hash.FNV_BASE; - var end = start + len; - - for (var i = start; i < end; i++) { - hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); - } - - return hashCode; - }; - - Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) { - var hash = 0; - - for (var i = 0; i < len; i++) { - var ch = key[start + i]; - - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - return hash & 0x7FFFFFFF; - }; - - Hash.computeSimple31BitStringHashCode = function (key) { - var hash = 0; - - var start = 0; - var len = key.length; - - for (var i = 0; i < len; i++) { - var ch = key.charCodeAt(start + i); - - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - return hash & 0x7FFFFFFF; - }; - - Hash.computeMurmur2StringHashCode = function (key, seed) { - var m = 0x5bd1e995; - var r = 24; - - var numberOfCharsLeft = key.length; - var h = Math.abs(seed ^ numberOfCharsLeft); - - var index = 0; - while (numberOfCharsLeft >= 2) { - var c1 = key.charCodeAt(index); - var c2 = key.charCodeAt(index + 1); - - var k = Math.abs(c1 | (c2 << 16)); - - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); - k ^= k >> r; - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); - - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= k; - - index += 2; - numberOfCharsLeft -= 2; - } - - if (numberOfCharsLeft === 1) { - h ^= key.charCodeAt(index); - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - } - - h ^= h >> 13; - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= h >> 15; - - return h; - }; - - Hash.getPrime = function (min) { - for (var i = 0; i < Hash.primes.length; i++) { - var num = Hash.primes[i]; - if (num >= min) { - return num; - } - } - - throw TypeScript.Errors.notYetImplemented(); - }; - - Hash.expandPrime = function (oldSize) { - var num = oldSize << 1; - if (num > 2146435069 && 2146435069 > oldSize) { - return 2146435069; - } - return Hash.getPrime(num); - }; - - Hash.combine = function (value, currentHash) { - return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; - }; - Hash.FNV_BASE = 2166136261; - Hash.FNV_PRIME = 16777619; - - Hash.primes = [ - 3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, - 631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419, - 10103, 12143, 14591, 17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431, - 90523, 108631, 130363, 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, - 672827, 807403, 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, - 4166287, 4999559, 5999471, 7199369]; - return Hash; - })(); - TypeScript.Hash = Hash; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultHashTableCapacity = 1024; - - var HashTableEntry = (function () { - function HashTableEntry(Key, Value, HashCode, Next) { - this.Key = Key; - this.Value = Value; - this.HashCode = HashCode; - this.Next = Next; - } - return HashTableEntry; - })(); - - var HashTable = (function () { - function HashTable(capacity, hash) { - this.hash = hash; - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); - } - HashTable.prototype.set = function (key, value) { - this.addOrSet(key, value, false); - }; - - HashTable.prototype.add = function (key, value) { - this.addOrSet(key, value, true); - }; - - HashTable.prototype.containsKey = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - return entry !== null; - }; - - HashTable.prototype.get = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - - return entry === null ? null : entry.Value; - }; - - HashTable.prototype.computeHashCode = function (key) { - var hashCode = this.hash === null ? key.hashCode : this.hash(key); - - hashCode = hashCode & 0x7FFFFFFF; - TypeScript.Debug.assert(hashCode >= 0); - - return hashCode; - }; - - HashTable.prototype.addOrSet = function (key, value, throwOnExistingEntry) { - var hashCode = this.computeHashCode(key); - - var entry = this.findEntry(key, hashCode); - if (entry !== null) { - if (throwOnExistingEntry) { - throw TypeScript.Errors.argument('key', "Key was already in table."); - } - - entry.Key = key; - entry.Value = value; - return; - } - - return this.addEntry(key, value, hashCode); - }; - - HashTable.prototype.findEntry = function (key, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && key === e.Key) { - return e; - } - } - - return null; - }; - - HashTable.prototype.addEntry = function (key, value, hashCode) { - var index = hashCode % this.entries.length; - - var e = new HashTableEntry(key, value, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count >= (this.entries.length / 2)) { - this.grow(); - } - - this.count++; - return e.Key; - }; - - HashTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - return HashTable; - })(); - Collections.HashTable = HashTable; - - function createHashTable(capacity, hash) { - if (typeof capacity === "undefined") { capacity = Collections.DefaultHashTableCapacity; } - if (typeof hash === "undefined") { hash = null; } - return new HashTable(capacity, hash); - } - Collections.createHashTable = createHashTable; - - var currentHashCode = 1; - function identityHashCode(value) { - if (value.__hash === undefined) { - value.__hash = currentHashCode; - currentHashCode++; - } - - return value.__hash; + /** + * attach events to the activeEditor + */ + WorkingSet.prototype.setActiveEditor = function (editor) { + if (this.currentDocument) { + $(this.currentDocument).off('change', this.documentChangesHandler); } - Collections.identityHashCode = identityHashCode; - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - TypeScript.nodeMakeDirectoryTime = 0; - TypeScript.nodeCreateBufferTime = 0; - TypeScript.nodeWriteFileSyncTime = 0; - - (function (ByteOrderMark) { - ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; - ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; - ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; - ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; - })(TypeScript.ByteOrderMark || (TypeScript.ByteOrderMark = {})); - var ByteOrderMark = TypeScript.ByteOrderMark; - - var FileInformation = (function () { - function FileInformation(contents, byteOrderMark) { - this.contents = contents; - this.byteOrderMark = byteOrderMark; + this.currentDocument = editor && editor.document; + if (this.currentDocument) { + $(this.currentDocument).on('change', this.documentChangesHandler); } - return FileInformation; - })(); - TypeScript.FileInformation = FileInformation; - - TypeScript.Environment = (function () { - function getWindowsScriptHostEnvironment() { - try { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - } catch (e) { - return null; - } - - var streamObjectPool = []; - - function getStreamObject() { - if (streamObjectPool.length > 0) { - return streamObjectPool.pop(); - } else { - return new ActiveXObject("ADODB.Stream"); - } - } - - function releaseStreamObject(obj) { - streamObjectPool.push(obj); - } - - var args = []; - for (var i = 0; i < WScript.Arguments.length; i++) { - args[i] = WScript.Arguments.Item(i); - } - - return { - newLine: "\r\n", - currentDirectory: function () { - return WScript.CreateObject("WScript.Shell").CurrentDirectory; - }, - supportsCodePage: function () { - return WScript.ReadFile; - }, - readFile: function (path, codepage) { - try { - if (codepage !== null && this.supportsCodePage()) { - try { - var contents = WScript.ReadFile(path, codepage); - return new FileInformation(contents, 0 /* None */); - } catch (e) { - } - } - - var streamObj = getStreamObject(); - streamObj.Open(); - streamObj.Type = 2; - - streamObj.Charset = 'x-ansi'; - - streamObj.LoadFromFile(path); - var bomChar = streamObj.ReadText(2); - - streamObj.Position = 0; - - var byteOrderMark = 0 /* None */; - - if (bomChar.charCodeAt(0) === 0xFE && bomChar.charCodeAt(1) === 0xFF) { - streamObj.Charset = 'unicode'; - byteOrderMark = 2 /* Utf16BigEndian */; - } else if (bomChar.charCodeAt(0) === 0xFF && bomChar.charCodeAt(1) === 0xFE) { - streamObj.Charset = 'unicode'; - byteOrderMark = 3 /* Utf16LittleEndian */; - } else if (bomChar.charCodeAt(0) === 0xEF && bomChar.charCodeAt(1) === 0xBB) { - streamObj.Charset = 'utf-8'; - byteOrderMark = 1 /* Utf8 */; - } else { - streamObj.Charset = 'utf-8'; - } - - var contents = streamObj.ReadText(-1); - streamObj.Close(); - releaseStreamObject(streamObj); - return new FileInformation(contents, byteOrderMark); - } catch (err) { - var message; - if (err.number === -2147024809) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unsupported_file_encoding, null); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Cannot_read_file_0_1, [path, err.message]); - } - - throw new Error(message); - } - }, - writeFile: function (path, contents, writeByteOrderMark) { - var textStream = getStreamObject(); - textStream.Charset = 'utf-8'; - textStream.Open(); - textStream.WriteText(contents, 0); - - if (!writeByteOrderMark) { - textStream.Position = 3; - } else { - textStream.Position = 0; - } - - var fileStream = getStreamObject(); - fileStream.Type = 1; - fileStream.Open(); - - textStream.CopyTo(fileStream); - - fileStream.Flush(); - fileStream.SaveToFile(path, 2); - fileStream.Close(); - - textStream.Flush(); - textStream.Close(); - }, - fileExists: function (path) { - return fso.FileExists(path); - }, - deleteFile: function (path) { - if (fso.FileExists(path)) { - fso.DeleteFile(path, true); - } - }, - directoryExists: function (path) { - return fso.FolderExists(path); - }, - listFiles: function (path, spec, options) { - options = options || {}; - function filesInFolder(folder, root) { - var paths = []; - var fc; - - if (options.recursive) { - fc = new Enumerator(folder.subfolders); - - for (; !fc.atEnd(); fc.moveNext()) { - paths = paths.concat(filesInFolder(fc.item(), root + "\\" + fc.item().Name)); - } - } - - fc = new Enumerator(folder.files); + }; + return WorkingSet; +})(); - for (; !fc.atEnd(); fc.moveNext()) { - if (!spec || fc.item().Name.match(spec)) { - paths.push(root + "\\" + fc.item().Name); - } - } - - return paths; - } - - var folder = fso.GetFolder(path); - var paths = []; - - return filesInFolder(folder, path); - }, - arguments: args, - standardOut: WScript.StdOut - }; - } - ; - - function getNodeEnvironment() { - var _fs = _dereq_('fs'); - var _path = _dereq_('path'); - var _module = _dereq_('module'); - var _os = _dereq_('os'); - - return { - newLine: _os.EOL, - currentDirectory: function () { - return process.cwd(); - }, - supportsCodePage: function () { - return false; - }, - readFile: function (file, codepage) { - if (codepage !== null) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.codepage_option_not_supported_on_current_platform, null)); - } - - var buffer = _fs.readFileSync(file); - switch (buffer[0]) { - case 0xFE: - if (buffer[1] === 0xFF) { - var i = 0; - while ((i + 1) < buffer.length) { - var temp = buffer[i]; - buffer[i] = buffer[i + 1]; - buffer[i + 1] = temp; - i += 2; - } - return new FileInformation(buffer.toString("ucs2", 2), 2 /* Utf16BigEndian */); - } - break; - case 0xFF: - if (buffer[1] === 0xFE) { - return new FileInformation(buffer.toString("ucs2", 2), 3 /* Utf16LittleEndian */); - } - break; - case 0xEF: - if (buffer[1] === 0xBB) { - return new FileInformation(buffer.toString("utf8", 3), 1 /* Utf8 */); - } - } - - return new FileInformation(buffer.toString("utf8", 0), 0 /* None */); - }, - writeFile: function (path, contents, writeByteOrderMark) { - function mkdirRecursiveSync(path) { - var stats = _fs.statSync(path); - if (stats.isFile()) { - throw "\"" + path + "\" exists but isn't a directory."; - } else if (stats.isDirectory()) { - return; - } else { - mkdirRecursiveSync(_path.dirname(path)); - _fs.mkdirSync(path, 509); - } - } - var start = new Date().getTime(); - mkdirRecursiveSync(_path.dirname(path)); - TypeScript.nodeMakeDirectoryTime += new Date().getTime() - start; - - if (writeByteOrderMark) { - contents = '\uFEFF' + contents; - } - - var start = new Date().getTime(); - - var chunkLength = 4 * 1024; - var fileDescriptor = _fs.openSync(path, "w"); - try { - for (var index = 0; index < contents.length; index += chunkLength) { - var bufferStart = new Date().getTime(); - var buffer = new Buffer(contents.substr(index, chunkLength), "utf8"); - TypeScript.nodeCreateBufferTime += new Date().getTime() - bufferStart; - - _fs.writeSync(fileDescriptor, buffer, 0, buffer.length, null); - } - } finally { - _fs.closeSync(fileDescriptor); - } - - TypeScript.nodeWriteFileSyncTime += new Date().getTime() - start; - }, - fileExists: function (path) { - return _fs.existsSync(path); - }, - deleteFile: function (path) { - try { - _fs.unlinkSync(path); - } catch (e) { - } - }, - directoryExists: function (path) { - return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); - }, - listFiles: function dir(path, spec, options) { - options = options || {}; - - function filesInFolder(folder) { - var paths = []; - - var files = _fs.readdirSync(folder); - for (var i = 0; i < files.length; i++) { - var stat = _fs.statSync(folder + "\\" + files[i]); - if (options.recursive && stat.isDirectory()) { - paths = paths.concat(filesInFolder(folder + "\\" + files[i])); - } else if (stat.isFile() && (!spec || files[i].match(spec))) { - paths.push(folder + "\\" + files[i]); - } - } - - return paths; - } - - return filesInFolder(path); - }, - arguments: process.argv.slice(2), - standardOut: { - Write: function (str) { - process.stdout.write(str); - }, - WriteLine: function (str) { - process.stdout.write(str + '\n'); - }, - Close: function () { - } - } - }; - } - ; - - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { - return getWindowsScriptHostEnvironment(); - } else if (typeof module !== 'undefined' && module.exports) { - return getNodeEnvironment(); - } else { - return null; - } - })(); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (IntegerUtilities) { - function integerDivide(numerator, denominator) { - return (numerator / denominator) >> 0; - } - IntegerUtilities.integerDivide = integerDivide; - - function integerMultiplyLow32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0; - return resultLow32; - } - IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits; - - function integerMultiplyHigh32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultHigh32 = n1High16 * n2High16 + ((((n1Low16 * n2Low16) >>> 17) + n1Low16 * n2High16) >>> 15); - return resultHigh32; - } - IntegerUtilities.integerMultiplyHigh32Bits = integerMultiplyHigh32Bits; - - function isInteger(text) { - return /^[0-9]+$/.test(text); - } - IntegerUtilities.isInteger = isInteger; - - function isHexInteger(text) { - return /^0(x|X)[0-9a-fA-F]+$/.test(text); - } - IntegerUtilities.isHexInteger = isHexInteger; - })(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {})); - var IntegerUtilities = TypeScript.IntegerUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineMap = (function () { - function LineMap(_computeLineStarts, length) { - this._computeLineStarts = _computeLineStarts; - this.length = length; - this._lineStarts = null; - } - LineMap.prototype.toJSON = function (key) { - return { lineStarts: this.lineStarts(), length: this.length }; - }; - - LineMap.prototype.equals = function (other) { - return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { - return v1 === v2; - }); - }; - - LineMap.prototype.lineStarts = function () { - if (this._lineStarts === null) { - this._lineStarts = this._computeLineStarts(); - } - - return this._lineStarts; - }; - - LineMap.prototype.lineCount = function () { - return this.lineStarts().length; - }; - - LineMap.prototype.getPosition = function (line, character) { - return this.lineStarts()[line] + character; - }; - - LineMap.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - LineMap.prototype.getLineStartPosition = function (lineNumber) { - return this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - lineAndCharacter.line = lineNumber; - lineAndCharacter.character = position - this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.getLineAndCharacterFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]); - }; - LineMap.empty = new LineMap(function () { - return [0]; - }, 0); - return LineMap; - })(); - TypeScript.LineMap = LineMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineAndCharacter = (function () { - function LineAndCharacter(line, character) { - this._line = 0; - this._character = 0; - if (line < 0) { - throw TypeScript.Errors.argumentOutOfRange("line"); - } - - if (character < 0) { - throw TypeScript.Errors.argumentOutOfRange("character"); - } - - this._line = line; - this._character = character; - } - LineAndCharacter.prototype.line = function () { - return this._line; - }; - - LineAndCharacter.prototype.character = function () { - return this._character; - }; - return LineAndCharacter; - })(); - TypeScript.LineAndCharacter = LineAndCharacter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MathPrototype = (function () { - function MathPrototype() { - } - MathPrototype.max = function (a, b) { - return a >= b ? a : b; - }; - - MathPrototype.min = function (a, b) { - return a <= b ? a : b; - }; - return MathPrototype; - })(); - TypeScript.MathPrototype = MathPrototype; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultStringTableCapacity = 256; - - var StringTableEntry = (function () { - function StringTableEntry(Text, HashCode, Next) { - this.Text = Text; - this.HashCode = HashCode; - this.Next = Next; - } - return StringTableEntry; - })(); - - var StringTable = (function () { - function StringTable(capacity) { - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); - } - StringTable.prototype.addCharArray = function (key, start, len) { - var hashCode = TypeScript.Hash.computeSimple31BitCharArrayHashCode(key, start, len) & 0x7FFFFFFF; - - var entry = this.findCharArrayEntry(key, start, len, hashCode); - if (entry !== null) { - return entry.Text; - } - - var slice = key.slice(start, start + len); - return this.addEntry(TypeScript.StringUtilities.fromCharCodeArray(slice), hashCode); - }; - - StringTable.prototype.findCharArrayEntry = function (key, start, len, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && StringTable.textCharArrayEquals(e.Text, key, start, len)) { - return e; - } - } - - return null; - }; - - StringTable.prototype.addEntry = function (text, hashCode) { - var index = hashCode % this.entries.length; - - var e = new StringTableEntry(text, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count === this.entries.length) { - this.grow(); - } - - this.count++; - return e.Text; - }; - - StringTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - - StringTable.textCharArrayEquals = function (text, array, start, length) { - if (text.length !== length) { - return false; - } - - var s = start; - for (var i = 0; i < length; i++) { - if (text.charCodeAt(i) !== array[s]) { - return false; - } - - s++; - } - - return true; - }; - return StringTable; - })(); - Collections.StringTable = StringTable; - - Collections.DefaultStringTable = new StringTable(Collections.DefaultStringTableCapacity); - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var StringUtilities = (function () { - function StringUtilities() { - } - StringUtilities.isString = function (value) { - return Object.prototype.toString.apply(value, []) === '[object String]'; - }; - - StringUtilities.fromCharCodeArray = function (array) { - return String.fromCharCode.apply(null, array); - }; - - StringUtilities.endsWith = function (string, value) { - return string.substring(string.length - value.length, string.length) === value; - }; - - StringUtilities.startsWith = function (string, value) { - return string.substr(0, value.length) === value; - }; - - StringUtilities.copyTo = function (source, sourceIndex, destination, destinationIndex, count) { - for (var i = 0; i < count; i++) { - destination[destinationIndex + i] = source.charCodeAt(sourceIndex + i); - } - }; - - StringUtilities.repeat = function (value, count) { - return Array(count + 1).join(value); - }; - - StringUtilities.stringEquals = function (val1, val2) { - return val1 === val2; - }; - return StringUtilities; - })(); - TypeScript.StringUtilities = StringUtilities; -})(TypeScript || (TypeScript = {})); -var global = Function("return this").call(null); - -var TypeScript; -(function (TypeScript) { - var Clock; - (function (Clock) { - Clock.now; - Clock.resolution; - - if (typeof WScript !== "undefined" && typeof global['WScript'].InitializeProjection !== "undefined") { - global['WScript'].InitializeProjection(); - - Clock.now = function () { - return TestUtilities.QueryPerformanceCounter(); - }; - - Clock.resolution = TestUtilities.QueryPerformanceFrequency(); - } else { - Clock.now = function () { - return Date.now(); - }; - - Clock.resolution = 1000; - } - })(Clock || (Clock = {})); - - var Timer = (function () { - function Timer() { - this.time = 0; - } - Timer.prototype.start = function () { - this.time = 0; - this.startTime = Clock.now(); - }; - - Timer.prototype.end = function () { - this.time = (Clock.now() - this.startTime); - }; - return Timer; - })(); - TypeScript.Timer = Timer; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (DiagnosticCategory) { - DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; - DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; - DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; - })(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {})); - var DiagnosticCategory = TypeScript.DiagnosticCategory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.diagnosticInformationMap = { - "error TS{0}: {1}": { - "code": 0, - "category": 3 /* NoPrefix */ - }, - "warning TS{0}: {1}": { - "code": 1, - "category": 3 /* NoPrefix */ - }, - "Unrecognized escape sequence.": { - "code": 1000, - "category": 1 /* Error */ - }, - "Unexpected character {0}.": { - "code": 1001, - "category": 1 /* Error */ - }, - "Missing close quote character.": { - "code": 1002, - "category": 1 /* Error */ - }, - "Identifier expected.": { - "code": 1003, - "category": 1 /* Error */ - }, - "'{0}' keyword expected.": { - "code": 1004, - "category": 1 /* Error */ - }, - "'{0}' expected.": { - "code": 1005, - "category": 1 /* Error */ - }, - "Identifier expected; '{0}' is a keyword.": { - "code": 1006, - "category": 1 /* Error */ - }, - "Automatic semicolon insertion not allowed.": { - "code": 1007, - "category": 1 /* Error */ - }, - "Unexpected token; '{0}' expected.": { - "code": 1008, - "category": 1 /* Error */ - }, - "Trailing separator not allowed.": { - "code": 1009, - "category": 1 /* Error */ - }, - "'*/' expected.": { - "code": 1010, - "category": 1 /* Error */ - }, - "'public' or 'private' modifier must precede 'static'.": { - "code": 1011, - "category": 1 /* Error */ - }, - "Unexpected token.": { - "code": 1012, - "category": 1 /* Error */ - }, - "Catch clause parameter cannot have a type annotation.": { - "code": 1013, - "category": 1 /* Error */ - }, - "Rest parameter must be last in list.": { - "code": 1014, - "category": 1 /* Error */ - }, - "Parameter cannot have question mark and initializer.": { - "code": 1015, - "category": 1 /* Error */ - }, - "Required parameter cannot follow optional parameter.": { - "code": 1016, - "category": 1 /* Error */ - }, - "Index signatures cannot have rest parameters.": { - "code": 1017, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have accessibility modifiers.": { - "code": 1018, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have a question mark.": { - "code": 1019, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have an initializer.": { - "code": 1020, - "category": 1 /* Error */ - }, - "Index signature must have a type annotation.": { - "code": 1021, - "category": 1 /* Error */ - }, - "Index signature parameter must have a type annotation.": { - "code": 1022, - "category": 1 /* Error */ - }, - "Index signature parameter type must be 'string' or 'number'.": { - "code": 1023, - "category": 1 /* Error */ - }, - "'extends' clause already seen.": { - "code": 1024, - "category": 1 /* Error */ - }, - "'extends' clause must precede 'implements' clause.": { - "code": 1025, - "category": 1 /* Error */ - }, - "Classes can only extend a single class.": { - "code": 1026, - "category": 1 /* Error */ - }, - "'implements' clause already seen.": { - "code": 1027, - "category": 1 /* Error */ - }, - "Accessibility modifier already seen.": { - "code": 1028, - "category": 1 /* Error */ - }, - "'{0}' modifier must precede '{1}' modifier.": { - "code": 1029, - "category": 1 /* Error */ - }, - "'{0}' modifier already seen.": { - "code": 1030, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a class element.": { - "code": 1031, - "category": 1 /* Error */ - }, - "Interface declaration cannot have 'implements' clause.": { - "code": 1032, - "category": 1 /* Error */ - }, - "'super' invocation cannot have type arguments.": { - "code": 1034, - "category": 1 /* Error */ - }, - "Only ambient modules can use quoted names.": { - "code": 1035, - "category": 1 /* Error */ - }, - "Statements are not allowed in ambient contexts.": { - "code": 1036, - "category": 1 /* Error */ - }, - "Implementations are not allowed in ambient contexts.": { - "code": 1037, - "category": 1 /* Error */ - }, - "'declare' modifier not allowed for code already in an ambient context.": { - "code": 1038, - "category": 1 /* Error */ - }, - "Initializers are not allowed in ambient contexts.": { - "code": 1039, - "category": 1 /* Error */ - }, - "Parameter property declarations can only be used in a non-ambient constructor declaration.": { - "code": 1040, - "category": 1 /* Error */ - }, - "Function implementation expected.": { - "code": 1041, - "category": 1 /* Error */ - }, - "Constructor implementation expected.": { - "code": 1042, - "category": 1 /* Error */ - }, - "Function overload name must be '{0}'.": { - "code": 1043, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a module element.": { - "code": 1044, - "category": 1 /* Error */ - }, - "'declare' modifier cannot appear on an interface declaration.": { - "code": 1045, - "category": 1 /* Error */ - }, - "'declare' modifier required for top level element.": { - "code": 1046, - "category": 1 /* Error */ - }, - "Rest parameter cannot be optional.": { - "code": 1047, - "category": 1 /* Error */ - }, - "Rest parameter cannot have an initializer.": { - "code": 1048, - "category": 1 /* Error */ - }, - "'set' accessor must have one and only one parameter.": { - "code": 1049, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot be optional.": { - "code": 1051, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot have an initializer.": { - "code": 1052, - "category": 1 /* Error */ - }, - "'set' accessor cannot have rest parameter.": { - "code": 1053, - "category": 1 /* Error */ - }, - "'get' accessor cannot have parameters.": { - "code": 1054, - "category": 1 /* Error */ - }, - "Modifiers cannot appear here.": { - "code": 1055, - "category": 1 /* Error */ - }, - "Accessors are only available when targeting ECMAScript 5 and higher.": { - "code": 1056, - "category": 1 /* Error */ - }, - "Class name cannot be '{0}'.": { - "code": 1057, - "category": 1 /* Error */ - }, - "Interface name cannot be '{0}'.": { - "code": 1058, - "category": 1 /* Error */ - }, - "Enum name cannot be '{0}'.": { - "code": 1059, - "category": 1 /* Error */ - }, - "Module name cannot be '{0}'.": { - "code": 1060, - "category": 1 /* Error */ - }, - "Enum member must have initializer.": { - "code": 1061, - "category": 1 /* Error */ - }, - "Export assignment cannot be used in internal modules.": { - "code": 1063, - "category": 1 /* Error */ - }, - "Export assignment not allowed in module with exported element.": { - "code": 1064, - "category": 1 /* Error */ - }, - "Module cannot have multiple export assignments.": { - "code": 1065, - "category": 1 /* Error */ - }, - "Ambient enum elements can only have integer literal initializers.": { - "code": 1066, - "category": 1 /* Error */ - }, - "module, class, interface, enum, import or statement": { - "code": 1067, - "category": 3 /* NoPrefix */ - }, - "constructor, function, accessor or variable": { - "code": 1068, - "category": 3 /* NoPrefix */ - }, - "statement": { - "code": 1069, - "category": 3 /* NoPrefix */ - }, - "case or default clause": { - "code": 1070, - "category": 3 /* NoPrefix */ - }, - "identifier": { - "code": 1071, - "category": 3 /* NoPrefix */ - }, - "call, construct, index, property or function signature": { - "code": 1072, - "category": 3 /* NoPrefix */ - }, - "expression": { - "code": 1073, - "category": 3 /* NoPrefix */ - }, - "type name": { - "code": 1074, - "category": 3 /* NoPrefix */ - }, - "property or accessor": { - "code": 1075, - "category": 3 /* NoPrefix */ - }, - "parameter": { - "code": 1076, - "category": 3 /* NoPrefix */ - }, - "type": { - "code": 1077, - "category": 3 /* NoPrefix */ - }, - "type parameter": { - "code": 1078, - "category": 3 /* NoPrefix */ - }, - "'declare' modifier not allowed on import declaration.": { - "code": 1079, - "category": 1 /* Error */ - }, - "Function overload must be static.": { - "code": 1080, - "category": 1 /* Error */ - }, - "Function overload must not be static.": { - "code": 1081, - "category": 1 /* Error */ - }, - "Parameter property declarations cannot be used in a constructor overload.": { - "code": 1083, - "category": 1 /* Error */ - }, - "Invalid 'reference' directive syntax.": { - "code": 1084, - "category": 1 /* Error */ - }, - "Octal literals are not available when targeting ECMAScript 5 and higher.": { - "code": 1085, - "category": 1 /* Error */ - }, - "Accessors are not allowed in ambient contexts.": { - "code": 1086, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a constructor declaration.": { - "code": 1089, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a parameter.": { - "code": 1090, - "category": 1 /* Error */ - }, - "Only a single variable declaration is allowed in a 'for...in' statement.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type parameters cannot appear on a constructor declaration.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type annotation cannot appear on a constructor declaration.": { - "code": 1092, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'.": { - "code": 2000, - "category": 1 /* Error */ - }, - "The name '{0}' does not exist in the current scope.": { - "code": 2001, - "category": 1 /* Error */ - }, - "The name '{0}' does not refer to a value.": { - "code": 2002, - "category": 1 /* Error */ - }, - "'super' can only be used inside a class instance method.": { - "code": 2003, - "category": 1 /* Error */ - }, - "The left-hand side of an assignment expression must be a variable, property or indexer.": { - "code": 2004, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable. Did you mean to include 'new'?": { - "code": 2161, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable.": { - "code": 2006, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not newable.": { - "code": 2007, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not indexable by type '{1}'.": { - "code": 2008, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { - "code": 2009, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}": { - "code": 2010, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}'.": { - "code": 2011, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}':{NL}{2}": { - "code": 2012, - "category": 1 /* Error */ - }, - "Expected var, class, interface, or module.": { - "code": 2013, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to type '{1}'.": { - "code": 2014, - "category": 1 /* Error */ - }, - "Getter '{0}' already declared.": { - "code": 2015, - "category": 1 /* Error */ - }, - "Setter '{0}' already declared.": { - "code": 2016, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends private class '{1}'.": { - "code": 2018, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements private interface '{1}'.": { - "code": 2019, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends private interface '{1}'.": { - "code": 2020, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends class from inaccessible module {1}.": { - "code": 2021, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements interface from inaccessible module {1}.": { - "code": 2022, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends interface from inaccessible module {1}.": { - "code": 2023, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2024, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2025, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2026, - "category": 1 /* Error */ - }, - "Exported variable '{0}' has or is using private type '{1}'.": { - "code": 2027, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2028, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2029, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2030, - "category": 1 /* Error */ - }, - "Exported variable '{0}' is using inaccessible module {1}.": { - "code": 2031, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { - "code": 2032, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { - "code": 2033, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { - "code": 2034, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2035, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2036, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2037, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2038, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2039, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2040, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { - "code": 2041, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { - "code": 2042, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { - "code": 2043, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2044, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2045, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2046, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2047, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2048, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2049, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class has or is using private type '{0}'.": { - "code": 2050, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class has or is using private type '{0}'.": { - "code": 2051, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface has or is using private type '{0}'.": { - "code": 2052, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface has or is using private type '{0}'.": { - "code": 2053, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface has or is using private type '{0}'.": { - "code": 2054, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class has or is using private type '{0}'.": { - "code": 2055, - "category": 1 /* Error */ - }, - "Return type of public method from exported class has or is using private type '{0}'.": { - "code": 2056, - "category": 1 /* Error */ - }, - "Return type of method from exported interface has or is using private type '{0}'.": { - "code": 2057, - "category": 1 /* Error */ - }, - "Return type of exported function has or is using private type '{0}'.": { - "code": 2058, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class is using inaccessible module {0}.": { - "code": 2059, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class is using inaccessible module {0}.": { - "code": 2060, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface is using inaccessible module {0}.": { - "code": 2061, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface is using inaccessible module {0}.": { - "code": 2062, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface is using inaccessible module {0}.": { - "code": 2063, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class is using inaccessible module {0}.": { - "code": 2064, - "category": 1 /* Error */ - }, - "Return type of public method from exported class is using inaccessible module {0}.": { - "code": 2065, - "category": 1 /* Error */ - }, - "Return type of method from exported interface is using inaccessible module {0}.": { - "code": 2066, - "category": 1 /* Error */ - }, - "Return type of exported function is using inaccessible module {0}.": { - "code": 2067, - "category": 1 /* Error */ - }, - "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { - "code": 2068, - "category": 1 /* Error */ - }, - "A parameter list must follow a generic type argument list. '(' expected.": { - "code": 2069, - "category": 1 /* Error */ - }, - "Multiple constructor implementations are not allowed.": { - "code": 2070, - "category": 1 /* Error */ - }, - "Unable to resolve external module '{0}'.": { - "code": 2071, - "category": 1 /* Error */ - }, - "Module cannot be aliased to a non-module type.": { - "code": 2072, - "category": 1 /* Error */ - }, - "A class may only extend another class.": { - "code": 2073, - "category": 1 /* Error */ - }, - "A class may only implement another class or interface.": { - "code": 2074, - "category": 1 /* Error */ - }, - "An interface may only extend another class or interface.": { - "code": 2075, - "category": 1 /* Error */ - }, - "Unable to resolve type.": { - "code": 2077, - "category": 1 /* Error */ - }, - "Unable to resolve type of '{0}'.": { - "code": 2078, - "category": 1 /* Error */ - }, - "Unable to resolve type parameter constraint.": { - "code": 2079, - "category": 1 /* Error */ - }, - "Type parameter constraint cannot be a primitive type.": { - "code": 2080, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target.": { - "code": 2081, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target:{NL}{0}": { - "code": 2082, - "category": 1 /* Error */ - }, - "Invalid 'new' expression.": { - "code": 2083, - "category": 1 /* Error */ - }, - "Call signatures used in a 'new' expression must have a 'void' return type.": { - "code": 2084, - "category": 1 /* Error */ - }, - "Could not select overload for 'new' expression.": { - "code": 2085, - "category": 1 /* Error */ - }, - "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.": { - "code": 2086, - "category": 1 /* Error */ - }, - "Could not select overload for 'call' expression.": { - "code": 2087, - "category": 1 /* Error */ - }, - "Cannot invoke an expression whose type lacks a call signature.": { - "code": 2088, - "category": 1 /* Error */ - }, - "Calls to 'super' are only valid inside a class.": { - "code": 2089, - "category": 1 /* Error */ - }, - "Generic type '{0}' requires {1} type argument(s).": { - "code": 2090, - "category": 1 /* Error */ - }, - "Type of array literal cannot be determined. Best common type could not be found for array elements.": { - "code": 2092, - "category": 1 /* Error */ - }, - "Could not find enclosing symbol for dotted name '{0}'.": { - "code": 2093, - "category": 1 /* Error */ - }, - "The property '{0}' does not exist on value of type '{1}'.": { - "code": 2094, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}'.": { - "code": 2095, - "category": 1 /* Error */ - }, - "'get' and 'set' accessor must have the same type.": { - "code": 2096, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in current location.": { - "code": 2097, - "category": 1 /* Error */ - }, - "Static members cannot reference class type parameters.": { - "code": 2099, - "category": 1 /* Error */ - }, - "Class '{0}' is recursively referenced as a base type of itself.": { - "code": 2100, - "category": 1 /* Error */ - }, - "Interface '{0}' is recursively referenced as a base type of itself.": { - "code": 2101, - "category": 1 /* Error */ - }, - "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { - "code": 2102, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in non-derived classes.": { - "code": 2103, - "category": 1 /* Error */ - }, - "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { - "code": 2104, - "category": 1 /* Error */ - }, - "Constructors for derived classes must contain a 'super' call.": { - "code": 2105, - "category": 1 /* Error */ - }, - "Super calls are not permitted outside constructors or in nested functions inside constructors.": { - "code": 2106, - "category": 1 /* Error */ - }, - "'{0}.{1}' is inaccessible.": { - "code": 2107, - "category": 1 /* Error */ - }, - "'this' cannot be referenced within module bodies.": { - "code": 2108, - "category": 1 /* Error */ - }, - "Invalid '+' expression - types not known to support the addition operator.": { - "code": 2111, - "category": 1 /* Error */ - }, - "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2112, - "category": 1 /* Error */ - }, - "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2113, - "category": 1 /* Error */ - }, - "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.": { - "code": 2114, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement cannot use a type annotation.": { - "code": 2115, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { - "code": 2116, - "category": 1 /* Error */ - }, - "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { - "code": 2117, - "category": 1 /* Error */ - }, - "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { - "code": 2118, - "category": 1 /* Error */ - }, - "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { - "code": 2119, - "category": 1 /* Error */ - }, - "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { - "code": 2120, - "category": 1 /* Error */ - }, - "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { - "code": 2121, - "category": 1 /* Error */ - }, - "Setters cannot return a value.": { - "code": 2122, - "category": 1 /* Error */ - }, - "Tried to query type of uninitialized module '{0}'.": { - "code": 2123, - "category": 1 /* Error */ - }, - "Tried to set variable type to uninitialized module type '{0}'.": { - "code": 2124, - "category": 1 /* Error */ - }, - "Type '{0}' does not have type parameters.": { - "code": 2125, - "category": 1 /* Error */ - }, - "Getters must return a value.": { - "code": 2126, - "category": 1 /* Error */ - }, - "Getter and setter accessors do not agree in visibility.": { - "code": 2127, - "category": 1 /* Error */ - }, - "Invalid left-hand side of assignment expression.": { - "code": 2130, - "category": 1 /* Error */ - }, - "Function declared a non-void return type, but has no return expression.": { - "code": 2131, - "category": 1 /* Error */ - }, - "Cannot resolve return type reference.": { - "code": 2132, - "category": 1 /* Error */ - }, - "Constructors cannot have a return type of 'void'.": { - "code": 2133, - "category": 1 /* Error */ - }, - "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { - "code": 2134, - "category": 1 /* Error */ - }, - "All symbols within a with block will be resolved to 'any'.": { - "code": 2135, - "category": 1 /* Error */ - }, - "Import declarations in an internal module cannot reference an external module.": { - "code": 2136, - "category": 1 /* Error */ - }, - "Class {0} declares interface {1} but does not implement it:{NL}{2}": { - "code": 2137, - "category": 1 /* Error */ - }, - "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { - "code": 2138, - "category": 1 /* Error */ - }, - "The operand of an increment or decrement operator must be a variable, property or indexer.": { - "code": 2139, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in static initializers in a class body.": { - "code": 2140, - "category": 1 /* Error */ - }, - "Class '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2141, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2142, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend interface '{1}':{NL}{2}": { - "code": 2143, - "category": 1 /* Error */ - }, - "Duplicate overload signature for '{0}'.": { - "code": 2144, - "category": 1 /* Error */ - }, - "Duplicate constructor overload signature.": { - "code": 2145, - "category": 1 /* Error */ - }, - "Duplicate overload call signature.": { - "code": 2146, - "category": 1 /* Error */ - }, - "Duplicate overload construct signature.": { - "code": 2147, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition.": { - "code": 2148, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition:{NL}{0}": { - "code": 2149, - "category": 1 /* Error */ - }, - "Overload signatures must all be public or private.": { - "code": 2150, - "category": 1 /* Error */ - }, - "Overload signatures must all be exported or not exported.": { - "code": 2151, - "category": 1 /* Error */ - }, - "Overload signatures must all be ambient or non-ambient.": { - "code": 2152, - "category": 1 /* Error */ - }, - "Overload signatures must all be optional or required.": { - "code": 2153, - "category": 1 /* Error */ - }, - "Specialized overload signature is not assignable to any non-specialized signature.": { - "code": 2154, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in constructor arguments.": { - "code": 2155, - "category": 1 /* Error */ - }, - "Instance member cannot be accessed off a class.": { - "code": 2157, - "category": 1 /* Error */ - }, - "Untyped function calls may not accept type arguments.": { - "code": 2158, - "category": 1 /* Error */ - }, - "Non-generic functions may not accept type arguments.": { - "code": 2159, - "category": 1 /* Error */ - }, - "A generic type may not reference itself with a wrapped form of its own type parameters.": { - "code": 2160, - "category": 1 /* Error */ - }, - "Rest parameters must be array types.": { - "code": 2162, - "category": 1 /* Error */ - }, - "Overload signature implementation cannot use specialized type.": { - "code": 2163, - "category": 1 /* Error */ - }, - "Export assignments may only be used at the top-level of external modules.": { - "code": 2164, - "category": 1 /* Error */ - }, - "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2165, - "category": 1 /* Error */ - }, - "Only public methods of the base class are accessible via the 'super' keyword.": { - "code": 2166, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { - "code": 2167, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { - "code": 2168, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}'.": { - "code": 2169, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { - "code": 2170, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}'.": { - "code": 2171, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}':{NL}{1}": { - "code": 2172, - "category": 1 /* Error */ - }, - "Generic type references must include all type arguments.": { - "code": 2173, - "category": 1 /* Error */ - }, - "Default arguments are only allowed in implementation.": { - "code": 2174, - "category": 1 /* Error */ - }, - "Overloads cannot differ only by return type.": { - "code": 2175, - "category": 1 /* Error */ - }, - "Function expression declared a non-void return type, but has no return expression.": { - "code": 2176, - "category": 1 /* Error */ - }, - "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2177, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}' in module '{1}'.": { - "code": 2178, - "category": 1 /* Error */ - }, - "Unable to resolve module reference '{0}'.": { - "code": 2179, - "category": 1 /* Error */ - }, - "Could not find module '{0}' in module '{1}'.": { - "code": 2180, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { - "code": 2181, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { - "code": 2182, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { - "code": 2183, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { - "code": 2184, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { - "code": 2185, - "category": 1 /* Error */ - }, - "Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { - "code": 2186, - "category": 1 /* Error */ - }, - "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { - "code": 2187, - "category": 1 /* Error */ - }, - "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { - "code": 2188, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { - "code": 2189, - "category": 1 /* Error */ - }, - "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { - "code": 2190, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot be reopened.": { - "code": 2191, - "category": 1 /* Error */ - }, - "All declarations of merged declaration '{0}' must be exported or not exported.": { - "code": 2192, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in constructor arguments.": { - "code": 2193, - "category": 1 /* Error */ - }, - "Return type of constructor signature must be assignable to the instance type of the class.": { - "code": 2194, - "category": 1 /* Error */ - }, - "Ambient external module declaration must be defined in global context.": { - "code": 2195, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot specify relative module name.": { - "code": 2196, - "category": 1 /* Error */ - }, - "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { - "code": 2197, - "category": 1 /* Error */ - }, - "Could not find the best common type of types of all return statement expressions.": { - "code": 2198, - "category": 1 /* Error */ - }, - "Import declaration cannot refer to external module reference when --noResolve option is set.": { - "code": 2199, - "category": 1 /* Error */ - }, - "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { - "code": 2200, - "category": 1 /* Error */ - }, - "'continue' statement can only be used within an enclosing iteration statement.": { - "code": 2201, - "category": 1 /* Error */ - }, - "'break' statement can only be used within an enclosing iteration or switch statement.": { - "code": 2202, - "category": 1 /* Error */ - }, - "Jump target not found.": { - "code": 2203, - "category": 1 /* Error */ - }, - "Jump target cannot cross function boundary.": { - "code": 2204, - "category": 1 /* Error */ - }, - "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { - "code": 2205, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { - "code": 2206, - "category": 1 /* Error */ - }, - "Expression resolves to '_super' that compiler uses to capture base class reference.": { - "code": 2207, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2208, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2209, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2210, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2211, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2212, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2213, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2214, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2215, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2216, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2217, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2218, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2219, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class has or is using private type '{1}'.": { - "code": 2220, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2221, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class is using inaccessible module {1}.": { - "code": 2222, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2223, - "category": 1 /* Error */ - }, - "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { - "code": 2224, - "category": 1 /* Error */ - }, - "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { - "code": 2225, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}' or '{2}'.": { - "code": 2226, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.": { - "code": 2227, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { - "code": 2228, - "category": 1 /* Error */ - }, - "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { - "code": 2229, - "category": 1 /* Error */ - }, - "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { - "code": 2230, - "category": 1 /* Error */ - }, - "Parameter '{0}' cannot be referenced in its initializer.": { - "code": 2231, - "category": 1 /* Error */ - }, - "Duplicate string index signature.": { - "code": 2232, - "category": 1 /* Error */ - }, - "Duplicate number index signature.": { - "code": 2233, - "category": 1 /* Error */ - }, - "All declarations of an interface must have identical type parameters.": { - "code": 2234, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { - "code": 2235, - "category": 1 /* Error */ - }, - "Type '{0}' is missing property '{1}' from type '{2}'.": { - "code": 4000, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { - "code": 4001, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { - "code": 4002, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4003, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4004, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define property '{2}' as private.": { - "code": 4005, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4006, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4007, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a call signature, but type '{1}' lacks one.": { - "code": 4008, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4009, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4010, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a construct signature, but type '{1}' lacks one.": { - "code": 4011, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4012, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4013, - "category": 3 /* NoPrefix */ - }, - "Call signature expects {0} or fewer parameters.": { - "code": 4014, - "category": 3 /* NoPrefix */ - }, - "Could not apply type '{0}' to argument {1} which is of type '{2}'.": { - "code": 4015, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4016, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4017, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { - "code": 4018, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { - "code": 4019, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { - "code": 4020, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { - "code": 4021, - "category": 3 /* NoPrefix */ - }, - "Type reference cannot refer to container '{0}'.": { - "code": 4022, - "category": 1 /* Error */ - }, - "Type reference must refer to type.": { - "code": 4023, - "category": 1 /* Error */ - }, - "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { - "code": 4024, - "category": 1 /* Error */ - }, - " (+ {0} overload(s))": { - "code": 4025, - "category": 2 /* Message */ - }, - "Variable declaration cannot have the same name as an import declaration.": { - "code": 4026, - "category": 1 /* Error */ - }, - "Signature expected {0} type arguments, got {1} instead.": { - "code": 4027, - "category": 1 /* Error */ - }, - "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { - "code": 4028, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { - "code": 4029, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { - "code": 4030, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { - "code": 4031, - "category": 3 /* NoPrefix */ - }, - "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { - "code": 4032, - "category": 3 /* NoPrefix */ - }, - "Types of string indexer of types '{0}' and '{1}' are not identical.": { - "code": 4033, - "category": 3 /* NoPrefix */ - }, - "Types of number indexer of types '{0}' and '{1}' are not identical.": { - "code": 4034, - "category": 3 /* NoPrefix */ - }, - "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { - "code": 4035, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { - "code": 4036, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { - "code": 4037, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4038, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4039, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define static property '{2}' as private.": { - "code": 4040, - "category": 3 /* NoPrefix */ - }, - "Current host does not support '{0}' option.": { - "code": 5001, - "category": 1 /* Error */ - }, - "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { - "code": 5002, - "category": 1 /* Error */ - }, - "Module code generation '{0}' not supported.": { - "code": 5003, - "category": 1 /* Error */ - }, - "Could not find file: '{0}'.": { - "code": 5004, - "category": 1 /* Error */ - }, - "A file cannot have a reference to itself.": { - "code": 5006, - "category": 1 /* Error */ - }, - "Cannot resolve referenced file: '{0}'.": { - "code": 5007, - "category": 1 /* Error */ - }, - "Cannot find the common subdirectory path for the input files.": { - "code": 5009, - "category": 1 /* Error */ - }, - "Emit Error: {0}.": { - "code": 5011, - "category": 1 /* Error */ - }, - "Cannot read file '{0}': {1}": { - "code": 5012, - "category": 1 /* Error */ - }, - "Unsupported file encoding.": { - "code": 5013, - "category": 3 /* NoPrefix */ - }, - "Locale must be of the form or -. For example '{0}' or '{1}'.": { - "code": 5014, - "category": 1 /* Error */ - }, - "Unsupported locale: '{0}'.": { - "code": 5015, - "category": 1 /* Error */ - }, - "Execution Failed.{NL}": { - "code": 5016, - "category": 1 /* Error */ - }, - "Invalid call to 'up'": { - "code": 5019, - "category": 1 /* Error */ - }, - "Invalid call to 'down'": { - "code": 5020, - "category": 1 /* Error */ - }, - "Base64 value '{0}' finished with a continuation bit.": { - "code": 5021, - "category": 1 /* Error */ - }, - "Unknown option '{0}'": { - "code": 5023, - "category": 1 /* Error */ - }, - "Expected {0} arguments to message, got {1} instead.": { - "code": 5024, - "category": 1 /* Error */ - }, - "Expected the message '{0}' to have {1} arguments, but it had {2}": { - "code": 5025, - "category": 1 /* Error */ - }, - "Could not delete file '{0}'": { - "code": 5034, - "category": 1 /* Error */ - }, - "Could not create directory '{0}'": { - "code": 5035, - "category": 1 /* Error */ - }, - "Error while executing file '{0}': ": { - "code": 5036, - "category": 1 /* Error */ - }, - "Cannot compile external modules unless the '--module' flag is provided.": { - "code": 5037, - "category": 1 /* Error */ - }, - "Option mapRoot cannot be specified without specifying sourcemap option.": { - "code": 5038, - "category": 1 /* Error */ - }, - "Option sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5039, - "category": 1 /* Error */ - }, - "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5040, - "category": 1 /* Error */ - }, - "Option '{0}' specified without '{1}'": { - "code": 5041, - "category": 1 /* Error */ - }, - "'codepage' option not supported on current platform.": { - "code": 5042, - "category": 1 /* Error */ - }, - "Concatenate and emit output to single file.": { - "code": 6001, - "category": 2 /* Message */ - }, - "Generates corresponding {0} file.": { - "code": 6002, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate map files instead of generated locations.": { - "code": 6003, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate TypeScript files instead of source locations.": { - "code": 6004, - "category": 2 /* Message */ - }, - "Watch input files.": { - "code": 6005, - "category": 2 /* Message */ - }, - "Redirect output structure to the directory.": { - "code": 6006, - "category": 2 /* Message */ - }, - "Do not emit comments to output.": { - "code": 6009, - "category": 2 /* Message */ - }, - "Skip resolution and preprocessing.": { - "code": 6010, - "category": 2 /* Message */ - }, - "Specify ECMAScript target version: '{0}' (default), or '{1}'": { - "code": 6015, - "category": 2 /* Message */ - }, - "Specify module code generation: '{0}' or '{1}'": { - "code": 6016, - "category": 2 /* Message */ - }, - "Print this message.": { - "code": 6017, - "category": 2 /* Message */ - }, - "Print the compiler's version: {0}": { - "code": 6019, - "category": 2 /* Message */ - }, - "Allow use of deprecated '{0}' keyword when referencing an external module.": { - "code": 6021, - "category": 2 /* Message */ - }, - "Specify locale for errors and messages. For example '{0}' or '{1}'": { - "code": 6022, - "category": 2 /* Message */ - }, - "Syntax: {0}": { - "code": 6023, - "category": 2 /* Message */ - }, - "options": { - "code": 6024, - "category": 2 /* Message */ - }, - "file1": { - "code": 6025, - "category": 2 /* Message */ - }, - "Examples:": { - "code": 6026, - "category": 2 /* Message */ - }, - "Options:": { - "code": 6027, - "category": 2 /* Message */ - }, - "Insert command line options and files from a file.": { - "code": 6030, - "category": 2 /* Message */ - }, - "Version {0}": { - "code": 6029, - "category": 2 /* Message */ - }, - "Use the '{0}' flag to see options.": { - "code": 6031, - "category": 2 /* Message */ - }, - "{NL}Recompiling ({0}):": { - "code": 6032, - "category": 2 /* Message */ - }, - "STRING": { - "code": 6033, - "category": 2 /* Message */ - }, - "KIND": { - "code": 6034, - "category": 2 /* Message */ - }, - "file2": { - "code": 6035, - "category": 2 /* Message */ - }, - "VERSION": { - "code": 6036, - "category": 2 /* Message */ - }, - "LOCATION": { - "code": 6037, - "category": 2 /* Message */ - }, - "DIRECTORY": { - "code": 6038, - "category": 2 /* Message */ - }, - "NUMBER": { - "code": 6039, - "category": 2 /* Message */ - }, - "Specify the codepage to use when opening source files.": { - "code": 6040, - "category": 2 /* Message */ - }, - "Additional locations:": { - "code": 6041, - "category": 2 /* Message */ - }, - "This version of the Javascript runtime does not support the '{0}' function.": { - "code": 7000, - "category": 1 /* Error */ - }, - "Unknown rule.": { - "code": 7002, - "category": 1 /* Error */ - }, - "Invalid line number ({0})": { - "code": 7003, - "category": 1 /* Error */ - }, - "Warn on expressions and declarations with an implied 'any' type.": { - "code": 7004, - "category": 2 /* Message */ - }, - "Variable '{0}' implicitly has an 'any' type.": { - "code": 7005, - "category": 1 /* Error */ - }, - "Parameter '{0}' of '{1}' implicitly has an 'any' type.": { - "code": 7006, - "category": 1 /* Error */ - }, - "Parameter '{0}' of function type implicitly has an 'any' type.": { - "code": 7007, - "category": 1 /* Error */ - }, - "Member '{0}' of object type implicitly has an 'any' type.": { - "code": 7008, - "category": 1 /* Error */ - }, - "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { - "code": 7009, - "category": 1 /* Error */ - }, - "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7010, - "category": 1 /* Error */ - }, - "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7011, - "category": 1 /* Error */ - }, - "Parameter '{0}' of lambda function implicitly has an 'any' type.": { - "code": 7012, - "category": 1 /* Error */ - }, - "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7013, - "category": 1 /* Error */ - }, - "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7014, - "category": 1 /* Error */ - }, - "Array Literal implicitly has an 'any' type from widening.": { - "code": 7015, - "category": 1 /* Error */ - }, - "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { - "code": 7016, - "category": 1 /* Error */ - }, - "Index signature of object type implicitly has an 'any' type.": { - "code": 7017, - "category": 1 /* Error */ - }, - "Object literal's property '{0}' implicitly has an 'any' type from widening.": { - "code": 7018, - "category": 1 /* Error */ - } - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CharacterCodes) { - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; - - CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; - - CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; - - CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; - - CharacterCodes[CharacterCodes["_"] = 95] = "_"; - CharacterCodes[CharacterCodes["$"] = 36] = "$"; - - CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; - CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; - CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; - - CharacterCodes[CharacterCodes["a"] = 97] = "a"; - CharacterCodes[CharacterCodes["b"] = 98] = "b"; - CharacterCodes[CharacterCodes["c"] = 99] = "c"; - CharacterCodes[CharacterCodes["d"] = 100] = "d"; - CharacterCodes[CharacterCodes["e"] = 101] = "e"; - CharacterCodes[CharacterCodes["f"] = 102] = "f"; - CharacterCodes[CharacterCodes["g"] = 103] = "g"; - CharacterCodes[CharacterCodes["h"] = 104] = "h"; - CharacterCodes[CharacterCodes["i"] = 105] = "i"; - CharacterCodes[CharacterCodes["k"] = 107] = "k"; - CharacterCodes[CharacterCodes["l"] = 108] = "l"; - CharacterCodes[CharacterCodes["m"] = 109] = "m"; - CharacterCodes[CharacterCodes["n"] = 110] = "n"; - CharacterCodes[CharacterCodes["o"] = 111] = "o"; - CharacterCodes[CharacterCodes["p"] = 112] = "p"; - CharacterCodes[CharacterCodes["q"] = 113] = "q"; - CharacterCodes[CharacterCodes["r"] = 114] = "r"; - CharacterCodes[CharacterCodes["s"] = 115] = "s"; - CharacterCodes[CharacterCodes["t"] = 116] = "t"; - CharacterCodes[CharacterCodes["u"] = 117] = "u"; - CharacterCodes[CharacterCodes["v"] = 118] = "v"; - CharacterCodes[CharacterCodes["w"] = 119] = "w"; - CharacterCodes[CharacterCodes["x"] = 120] = "x"; - CharacterCodes[CharacterCodes["y"] = 121] = "y"; - CharacterCodes[CharacterCodes["z"] = 122] = "z"; - - CharacterCodes[CharacterCodes["A"] = 65] = "A"; - CharacterCodes[CharacterCodes["E"] = 69] = "E"; - CharacterCodes[CharacterCodes["F"] = 70] = "F"; - CharacterCodes[CharacterCodes["X"] = 88] = "X"; - CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; - - CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 64] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; - CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; - CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; - CharacterCodes[CharacterCodes["question"] = 63] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; - - CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; - })(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {})); - var CharacterCodes = TypeScript.CharacterCodes; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - (function (ScriptSnapshot) { - var StringScriptSnapshot = (function () { - function StringScriptSnapshot(text) { - this.text = text; - this._lineStartPositions = null; - } - StringScriptSnapshot.prototype.getText = function (start, end) { - return this.text.substring(start, end); - }; - - StringScriptSnapshot.prototype.getLength = function () { - return this.text.length; - }; - - StringScriptSnapshot.prototype.getLineStartPositions = function () { - if (!this._lineStartPositions) { - this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text); - } - - return this._lineStartPositions; - }; - - StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - throw TypeScript.Errors.notYetImplemented(); - }; - return StringScriptSnapshot; - })(); - - function fromString(text) { - return new StringScriptSnapshot(text); - } - ScriptSnapshot.fromString = fromString; - })(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {})); - var ScriptSnapshot = TypeScript.ScriptSnapshot; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LineMap1) { - function fromSimpleText(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return text.charCodeAt(index); - }, length: text.length() }); - }, text.length()); - } - LineMap1.fromSimpleText = fromSimpleText; - - function fromScriptSnapshot(scriptSnapshot) { - return new TypeScript.LineMap(function () { - return scriptSnapshot.getLineStartPositions(); - }, scriptSnapshot.getLength()); - } - LineMap1.fromScriptSnapshot = fromScriptSnapshot; - - function fromString(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts(text); - }, text.length); - } - LineMap1.fromString = fromString; - })(TypeScript.LineMap1 || (TypeScript.LineMap1 = {})); - var LineMap1 = TypeScript.LineMap1; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextFactory) { - function getStartAndLengthOfLineBreakEndingAt(text, index, info) { - var c = text.charCodeAt(index); - if (c === 10 /* lineFeed */) { - if (index > 0 && text.charCodeAt(index - 1) === 13 /* carriageReturn */) { - info.startPosition = index - 1; - info.length = 2; - } else { - info.startPosition = index; - info.length = 1; - } - } else if (TypeScript.TextUtilities.isAnyLineBreakCharacter(c)) { - info.startPosition = index; - info.length = 1; - } else { - info.startPosition = index + 1; - info.length = 0; - } - } - - var LinebreakInfo = (function () { - function LinebreakInfo(startPosition, length) { - this.startPosition = startPosition; - this.length = length; - } - return LinebreakInfo; - })(); - - var TextLine = (function () { - function TextLine(text, body, lineBreakLength, lineNumber) { - this._text = null; - this._textSpan = null; - if (text === null) { - throw TypeScript.Errors.argumentNull('text'); - } - TypeScript.Debug.assert(lineBreakLength >= 0); - TypeScript.Debug.assert(lineNumber >= 0); - this._text = text; - this._textSpan = body; - this._lineBreakLength = lineBreakLength; - this._lineNumber = lineNumber; - } - TextLine.prototype.start = function () { - return this._textSpan.start(); - }; - - TextLine.prototype.end = function () { - return this._textSpan.end(); - }; - - TextLine.prototype.endIncludingLineBreak = function () { - return this.end() + this._lineBreakLength; - }; - - TextLine.prototype.extent = function () { - return this._textSpan; - }; - - TextLine.prototype.extentIncludingLineBreak = function () { - return TypeScript.TextSpan.fromBounds(this.start(), this.endIncludingLineBreak()); - }; - - TextLine.prototype.toString = function () { - return this._text.toString(this._textSpan); - }; - - TextLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - return TextLine; - })(); - - var TextBase = (function () { - function TextBase() { - this.linebreakInfo = new LinebreakInfo(0, 0); - this.lastLineFoundForPosition = null; - } - TextBase.prototype.length = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.charCodeAt = function (position) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - TextBase.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this, span); - }; - - TextBase.prototype.substr = function (start, length, intern) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.lineCount = function () { - return this._lineStarts().length; - }; - - TextBase.prototype.lines = function () { - var lines = []; - - var length = this.lineCount(); - for (var i = 0; i < length; ++i) { - lines[i] = this.getLineFromLineNumber(i); - } - - return lines; - }; - - TextBase.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this._lineStarts(); - }, this.length()); - }; - - TextBase.prototype._lineStarts = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.getLineFromLineNumber = function (lineNumber) { - var lineStarts = this._lineStarts(); - - if (lineNumber < 0 || lineNumber >= lineStarts.length) { - throw TypeScript.Errors.argumentOutOfRange("lineNumber"); - } - - var first = lineStarts[lineNumber]; - if (lineNumber === lineStarts.length - 1) { - return new TextLine(this, new TypeScript.TextSpan(first, this.length() - first), 0, lineNumber); - } else { - getStartAndLengthOfLineBreakEndingAt(this, lineStarts[lineNumber + 1] - 1, this.linebreakInfo); - return new TextLine(this, new TypeScript.TextSpan(first, this.linebreakInfo.startPosition - first), this.linebreakInfo.length, lineNumber); - } - }; - - TextBase.prototype.getLineFromPosition = function (position) { - var lastFound = this.lastLineFoundForPosition; - if (lastFound !== null && lastFound.start() <= position && lastFound.endIncludingLineBreak() > position) { - return lastFound; - } - - var lineNumber = this.getLineNumberFromPosition(position); - - var result = this.getLineFromLineNumber(lineNumber); - this.lastLineFoundForPosition = result; - return result; - }; - - TextBase.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length()) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this._lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - TextBase.prototype.getLinePosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this._lineStarts()[lineNumber]); - }; - return TextBase; - })(); - - var SubText = (function (_super) { - __extends(SubText, _super); - function SubText(text, span) { - _super.call(this); - this._lazyLineStarts = null; - - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SubText.prototype.length = function () { - return this.span.length(); - }; - - SubText.prototype.charCodeAt = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.text.charCodeAt(this.span.start() + position); - }; - - SubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SubText.prototype.substr = function (start, length, intern) { - var startInOriginalText = this.span.start() + start; - return this.text.substr(startInOriginalText, length, intern); - }; - - SubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SubText.prototype._lineStarts = function () { - var _this = this; - if (!this._lazyLineStarts) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return _this.charCodeAt(index); - }, length: this.length() }); - } - - return this._lazyLineStarts; - }; - return SubText; - })(TextBase); - - var StringText = (function (_super) { - __extends(StringText, _super); - function StringText(data) { - _super.call(this); - this.source = null; - this._lazyLineStarts = null; - - if (data === null) { - throw TypeScript.Errors.argumentNull("data"); - } - - this.source = data; - } - StringText.prototype.length = function () { - return this.source.length; - }; - - StringText.prototype.charCodeAt = function (position) { - if (position < 0 || position >= this.source.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.source.charCodeAt(position); - }; - - StringText.prototype.substr = function (start, length, intern) { - return this.source.substr(start, length); - }; - - StringText.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - if (span === null) { - span = new TypeScript.TextSpan(0, this.length()); - } - - this.checkSubSpan(span); - - if (span.start() === 0 && span.length() === this.length()) { - return this.source; - } - - return this.source.substr(span.start(), span.length()); - }; - - StringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.source, sourceIndex, destination, destinationIndex, count); - }; - - StringText.prototype._lineStarts = function () { - if (this._lazyLineStarts === null) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts(this.source); - } - - return this._lazyLineStarts; - }; - return StringText; - })(TextBase); - - function createText(value) { - return new StringText(value); - } - TextFactory.createText = createText; - })(TypeScript.TextFactory || (TypeScript.TextFactory = {})); - var TextFactory = TypeScript.TextFactory; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (SimpleText) { - var SimpleSubText = (function () { - function SimpleSubText(text, span) { - this.text = null; - this.span = null; - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SimpleSubText.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - SimpleSubText.prototype.checkSubPosition = function (position) { - if (position < 0 || position >= this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - }; - - SimpleSubText.prototype.length = function () { - return this.span.length(); - }; - - SimpleSubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SimpleSubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SimpleSubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SimpleSubText.prototype.substr = function (start, length, intern) { - var span = this.getCompositeSpan(start, length); - return this.text.substr(span.start(), span.length(), intern); - }; - - SimpleSubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SimpleSubText.prototype.charCodeAt = function (index) { - this.checkSubPosition(index); - return this.text.charCodeAt(this.span.start() + index); - }; - - SimpleSubText.prototype.lineMap = function () { - return TypeScript.LineMap1.fromSimpleText(this); - }; - return SimpleSubText; - })(); - - var SimpleStringText = (function () { - function SimpleStringText(value) { - this.value = value; - this._lineMap = null; - } - SimpleStringText.prototype.length = function () { - return this.value.length; - }; - - SimpleStringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.value, sourceIndex, destination, destinationIndex, count); - }; - - SimpleStringText.prototype.substr = function (start, length, intern) { - if (intern) { - var array = length <= SimpleStringText.charArray.length ? SimpleStringText.charArray : TypeScript.ArrayUtilities.createArray(length, 0); - this.copyTo(start, array, 0, length); - return TypeScript.Collections.DefaultStringTable.addCharArray(array, 0, length); - } - - return this.value.substr(start, length); - }; - - SimpleStringText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleStringText.prototype.charCodeAt = function (index) { - return this.value.charCodeAt(index); - }; - - SimpleStringText.prototype.lineMap = function () { - if (!this._lineMap) { - this._lineMap = TypeScript.LineMap1.fromString(this.value); - } - - return this._lineMap; - }; - SimpleStringText.charArray = TypeScript.ArrayUtilities.createArray(1024, 0); - return SimpleStringText; - })(); - - var SimpleScriptSnapshotText = (function () { - function SimpleScriptSnapshotText(scriptSnapshot) { - this.scriptSnapshot = scriptSnapshot; - } - SimpleScriptSnapshotText.prototype.charCodeAt = function (index) { - return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0); - }; - - SimpleScriptSnapshotText.prototype.length = function () { - return this.scriptSnapshot.getLength(); - }; - - SimpleScriptSnapshotText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var text = this.scriptSnapshot.getText(sourceIndex, sourceIndex + count); - TypeScript.StringUtilities.copyTo(text, 0, destination, destinationIndex, count); - }; - - SimpleScriptSnapshotText.prototype.substr = function (start, length, intern) { - return this.scriptSnapshot.getText(start, start + length); - }; - - SimpleScriptSnapshotText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleScriptSnapshotText.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this.scriptSnapshot.getLineStartPositions(); - }, this.length()); - }; - return SimpleScriptSnapshotText; - })(); - - function fromString(value) { - return new SimpleStringText(value); - } - SimpleText.fromString = fromString; - - function fromScriptSnapshot(scriptSnapshot) { - return new SimpleScriptSnapshotText(scriptSnapshot); - } - SimpleText.fromScriptSnapshot = fromScriptSnapshot; - })(TypeScript.SimpleText || (TypeScript.SimpleText = {})); - var SimpleText = TypeScript.SimpleText; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextUtilities) { - function parseLineStarts(text) { - var length = text.length; - - if (0 === length) { - var result = new Array(); - result.push(0); - return result; - } - - var position = 0; - var index = 0; - var arrayBuilder = new Array(); - var lineNumber = 0; - - while (index < length) { - var c = text.charCodeAt(index); - var lineBreakLength; - - if (c > 13 /* carriageReturn */ && c <= 127) { - index++; - continue; - } else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) { - lineBreakLength = 2; - } else if (c === 10 /* lineFeed */) { - lineBreakLength = 1; - } else { - lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index); - } - - if (0 === lineBreakLength) { - index++; - } else { - arrayBuilder.push(position); - index += lineBreakLength; - position = index; - lineNumber++; - } - } - - arrayBuilder.push(position); - - return arrayBuilder; - } - TextUtilities.parseLineStarts = parseLineStarts; - - function getLengthOfLineBreakSlow(text, index, c) { - if (c === 13 /* carriageReturn */) { - var next = index + 1; - return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1; - } else if (isAnyLineBreakCharacter(c)) { - return 1; - } else { - return 0; - } - } - TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow; - - function getLengthOfLineBreak(text, index) { - var c = text.charCodeAt(index); - - if (c > 13 /* carriageReturn */ && c <= 127) { - return 0; - } - - return getLengthOfLineBreakSlow(text, index, c); - } - TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak; - - function isAnyLineBreakCharacter(c) { - return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */; - } - TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter; - })(TypeScript.TextUtilities || (TypeScript.TextUtilities = {})); - var TextUtilities = TypeScript.TextUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextSpan = (function () { - function TextSpan(start, length) { - if (start < 0) { - TypeScript.Errors.argument("start"); - } - - if (length < 0) { - TypeScript.Errors.argument("length"); - } - - this._start = start; - this._length = length; - } - TextSpan.prototype.start = function () { - return this._start; - }; - - TextSpan.prototype.length = function () { - return this._length; - }; - - TextSpan.prototype.end = function () { - return this._start + this._length; - }; - - TextSpan.prototype.isEmpty = function () { - return this._length === 0; - }; - - TextSpan.prototype.containsPosition = function (position) { - return position >= this._start && position < this.end(); - }; - - TextSpan.prototype.containsTextSpan = function (span) { - return span._start >= this._start && span.end() <= this.end(); - }; - - TextSpan.prototype.overlapsWith = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - return overlapStart < overlapEnd; - }; - - TextSpan.prototype.overlap = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (overlapStart < overlapEnd) { - return TextSpan.fromBounds(overlapStart, overlapEnd); - } - - return null; - }; - - TextSpan.prototype.intersectsWithTextSpan = function (span) { - return span._start <= this.end() && span.end() >= this._start; - }; - - TextSpan.prototype.intersectsWith = function (start, length) { - var end = start + length; - return start <= this.end() && end >= this._start; - }; - - TextSpan.prototype.intersectsWithPosition = function (position) { - return position <= this.end() && position >= this._start; - }; - - TextSpan.prototype.intersection = function (span) { - var intersectStart = TypeScript.MathPrototype.max(this._start, span._start); - var intersectEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (intersectStart <= intersectEnd) { - return TextSpan.fromBounds(intersectStart, intersectEnd); - } - - return null; - }; - - TextSpan.fromBounds = function (start, end) { - TypeScript.Debug.assert(start >= 0); - TypeScript.Debug.assert(end - start >= 0); - return new TextSpan(start, end - start); - }; - return TextSpan; - })(); - TypeScript.TextSpan = TextSpan; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextChangeRange = (function () { - function TextChangeRange(span, newLength) { - if (newLength < 0) { - throw TypeScript.Errors.argumentOutOfRange("newLength"); - } - - this._span = span; - this._newLength = newLength; - } - TextChangeRange.prototype.span = function () { - return this._span; - }; - - TextChangeRange.prototype.newLength = function () { - return this._newLength; - }; - - TextChangeRange.prototype.newSpan = function () { - return new TypeScript.TextSpan(this.span().start(), this.newLength()); - }; - - TextChangeRange.prototype.isUnchanged = function () { - return this.span().isEmpty() && this.newLength() === 0; - }; - - TextChangeRange.collapseChangesFromSingleVersion = function (changes) { - var diff = 0; - var start = 1073741823 /* Max31BitInteger */; - var end = 0; - - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - diff += change.newLength() - change.span().length(); - - if (change.span().start() < start) { - start = change.span().start(); - } - - if (change.span().end() > end) { - end = change.span().end(); - } - } - - if (start > end) { - return null; - } - - var combined = TypeScript.TextSpan.fromBounds(start, end); - var newLen = combined.length() + diff; - - return new TextChangeRange(combined, newLen); - }; - - TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) { - if (changes.length === 0) { - return TextChangeRange.unchanged; - } - - if (changes.length === 1) { - return changes[0]; - } - - var change0 = changes[0]; - - var oldStartN = change0.span().start(); - var oldEndN = change0.span().end(); - var newEndN = oldStartN + change0.newLength(); - - for (var i = 1; i < changes.length; i++) { - var nextChange = changes[i]; - - var oldStart1 = oldStartN; - var oldEnd1 = oldEndN; - var newEnd1 = newEndN; - - var oldStart2 = nextChange.span().start(); - var oldEnd2 = nextChange.span().end(); - var newEnd2 = oldStart2 + nextChange.newLength(); - - oldStartN = TypeScript.MathPrototype.min(oldStart1, oldStart2); - oldEndN = TypeScript.MathPrototype.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); - newEndN = TypeScript.MathPrototype.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); - } - - return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN); - }; - TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0); - return TextChangeRange; - })(); - TypeScript.TextChangeRange = TextChangeRange; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CharacterInfo = (function () { - function CharacterInfo() { - } - CharacterInfo.isDecimalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 57 /* _9 */; - }; - CharacterInfo.isOctalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 55 /* _7 */; - }; - - CharacterInfo.isHexDigit = function (c) { - return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */); - }; - - CharacterInfo.hexValue = function (c) { - return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10; - }; - - CharacterInfo.isWhitespace = function (ch) { - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - return true; - } - - return false; - }; - - CharacterInfo.isLineTerminator = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - } - - return false; - }; - return CharacterInfo; - })(); - TypeScript.CharacterInfo = CharacterInfo; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxConstants) { - SyntaxConstants[SyntaxConstants["TriviaNewLineMask"] = 0x00000001] = "TriviaNewLineMask"; - SyntaxConstants[SyntaxConstants["TriviaCommentMask"] = 0x00000002] = "TriviaCommentMask"; - SyntaxConstants[SyntaxConstants["TriviaFullWidthShift"] = 2] = "TriviaFullWidthShift"; - - SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed"; - SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask"; - SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask"; - SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift"; - - SyntaxConstants[SyntaxConstants["IsVariableWidthKeyword"] = 1 << 31] = "IsVariableWidthKeyword"; - })(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {})); - var SyntaxConstants = TypeScript.SyntaxConstants; -})(TypeScript || (TypeScript = {})); -var FormattingOptions = (function () { - function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { - this.useTabs = useTabs; - this.spacesPerTab = spacesPerTab; - this.indentSpaces = indentSpaces; - this.newLineCharacter = newLineCharacter; - } - FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n"); - return FormattingOptions; -})(); -var TypeScript; -(function (TypeScript) { - (function (Indentation) { - function columnForEndOfToken(token, syntaxInformationMap, options) { - return columnForStartOfToken(token, syntaxInformationMap, options) + token.width(); - } - Indentation.columnForEndOfToken = columnForEndOfToken; - - function columnForStartOfToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - var current = token; - while (current !== firstTokenInLine) { - current = syntaxInformationMap.previousToken(current); - - if (current === firstTokenInLine) { - leadingTextInReverse.push(current.trailingTrivia().fullText()); - leadingTextInReverse.push(current.text()); - } else { - leadingTextInReverse.push(current.fullText()); - } - } - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfToken = columnForStartOfToken; - - function columnForStartOfFirstTokenInLineContainingToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfFirstTokenInLineContainingToken = columnForStartOfFirstTokenInLineContainingToken; - - function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) { - var leadingTrivia = firstTokenInLine.leadingTrivia(); - - for (var i = leadingTrivia.count() - 1; i >= 0; i--) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.kind() === 5 /* NewLineTrivia */) { - break; - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments)); - - if (lineSegments.length > 0) { - break; - } - } - - leadingTextInReverse.push(trivia.fullText()); - } - } - - function columnForLeadingTextInReverse(leadingTextInReverse, options) { - var column = 0; - - for (var i = leadingTextInReverse.length - 1; i >= 0; i--) { - var text = leadingTextInReverse[i]; - column = columnForPositionInStringWorker(text, text.length, column, options); - } - - return column; - } - - function columnForPositionInString(input, position, options) { - return columnForPositionInStringWorker(input, position, 0, options); - } - Indentation.columnForPositionInString = columnForPositionInString; - - function columnForPositionInStringWorker(input, position, startColumn, options) { - var column = startColumn; - var spacesPerTab = options.spacesPerTab; - - for (var j = 0; j < position; j++) { - var ch = input.charCodeAt(j); - - if (ch === 9 /* tab */) { - column += spacesPerTab - column % spacesPerTab; - } else { - column++; - } - } - - return column; - } - - function indentationString(column, options) { - var numberOfTabs = 0; - var numberOfSpaces = TypeScript.MathPrototype.max(0, column); - - if (options.useTabs) { - numberOfTabs = Math.floor(column / options.spacesPerTab); - numberOfSpaces -= numberOfTabs * options.spacesPerTab; - } - - return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces); - } - Indentation.indentationString = indentationString; - - function indentationTrivia(column, options) { - return TypeScript.Syntax.whitespace(this.indentationString(column, options)); - } - Indentation.indentationTrivia = indentationTrivia; - - function firstNonWhitespacePosition(value) { - for (var i = 0; i < value.length; i++) { - var ch = value.charCodeAt(i); - if (!TypeScript.CharacterInfo.isWhitespace(ch)) { - return i; - } - } - - return value.length; - } - Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; - })(TypeScript.Indentation || (TypeScript.Indentation = {})); - var Indentation = TypeScript.Indentation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LanguageVersion) { - LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; - LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; - })(TypeScript.LanguageVersion || (TypeScript.LanguageVersion = {})); - var LanguageVersion = TypeScript.LanguageVersion; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ParseOptions = (function () { - function ParseOptions(languageVersion, allowAutomaticSemicolonInsertion) { - this._languageVersion = languageVersion; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - } - ParseOptions.prototype.toJSON = function (key) { - return { allowAutomaticSemicolonInsertion: this._allowAutomaticSemicolonInsertion }; - }; - - ParseOptions.prototype.languageVersion = function () { - return this._languageVersion; - }; - - ParseOptions.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - return ParseOptions; - })(); - TypeScript.ParseOptions = ParseOptions; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionedElement = (function () { - function PositionedElement(parent, element, fullStart) { - this._parent = parent; - this._element = element; - this._fullStart = fullStart; - } - PositionedElement.create = function (parent, element, fullStart) { - if (element === null) { - return null; - } - - if (element.isNode()) { - return new PositionedNode(parent, element, fullStart); - } else if (element.isToken()) { - return new PositionedToken(parent, element, fullStart); - } else if (element.isList()) { - return new PositionedList(parent, element, fullStart); - } else if (element.isSeparatedList()) { - return new PositionedSeparatedList(parent, element, fullStart); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - PositionedElement.prototype.parent = function () { - return this._parent; - }; - - PositionedElement.prototype.parentElement = function () { - return this._parent && this._parent._element; - }; - - PositionedElement.prototype.element = function () { - return this._element; - }; - - PositionedElement.prototype.kind = function () { - return this.element().kind(); - }; - - PositionedElement.prototype.childIndex = function (child) { - return TypeScript.Syntax.childIndex(this.element(), child); - }; - - PositionedElement.prototype.childCount = function () { - return this.element().childCount(); - }; - - PositionedElement.prototype.childAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - return PositionedElement.create(this, this.element().childAt(index), this.fullStart() + offset); - }; - - PositionedElement.prototype.childStart = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEnd = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.childStartAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEndAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.getPositionedChild = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return PositionedElement.create(this, child, this.fullStart() + offset); - }; - - PositionedElement.prototype.fullStart = function () { - return this._fullStart; - }; - - PositionedElement.prototype.fullEnd = function () { - return this.fullStart() + this.element().fullWidth(); - }; - - PositionedElement.prototype.fullWidth = function () { - return this.element().fullWidth(); - }; - - PositionedElement.prototype.start = function () { - return this.fullStart() + this.element().leadingTriviaWidth(); - }; - - PositionedElement.prototype.end = function () { - return this.fullStart() + this.element().leadingTriviaWidth() + this.element().width(); - }; - - PositionedElement.prototype.root = function () { - var current = this; - while (current.parent() !== null) { - current = current.parent(); - } - - return current; - }; - - PositionedElement.prototype.containingNode = function () { - var current = this.parent(); - - while (current !== null && !current.element().isNode()) { - current = current.parent(); - } - - return current; - }; - return PositionedElement; - })(); - TypeScript.PositionedElement = PositionedElement; - - var PositionedNodeOrToken = (function (_super) { - __extends(PositionedNodeOrToken, _super); - function PositionedNodeOrToken(parent, nodeOrToken, fullStart) { - _super.call(this, parent, nodeOrToken, fullStart); - } - PositionedNodeOrToken.prototype.nodeOrToken = function () { - return this.element(); - }; - return PositionedNodeOrToken; - })(PositionedElement); - TypeScript.PositionedNodeOrToken = PositionedNodeOrToken; - - var PositionedNode = (function (_super) { - __extends(PositionedNode, _super); - function PositionedNode(parent, node, fullStart) { - _super.call(this, parent, node, fullStart); - } - PositionedNode.prototype.node = function () { - return this.element(); - }; - return PositionedNode; - })(PositionedNodeOrToken); - TypeScript.PositionedNode = PositionedNode; - - var PositionedToken = (function (_super) { - __extends(PositionedToken, _super); - function PositionedToken(parent, token, fullStart) { - _super.call(this, parent, token, fullStart); - } - PositionedToken.prototype.token = function () { - return this.element(); - }; - - PositionedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var triviaList = this.token().leadingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var currentTriviaEndPosition = this.start(); - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), currentTriviaEndPosition - trivia.fullWidth()); - } - - currentTriviaEndPosition -= trivia.fullWidth(); - } - } - - var start = this.fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - var triviaList = this.token().trailingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var fullStart = this.end(); - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), fullStart); - } - - fullStart += trivia.fullWidth(); - } - } - - return this.root().node().findToken(this.fullEnd(), includeSkippedTokens); - }; - return PositionedToken; - })(PositionedNodeOrToken); - TypeScript.PositionedToken = PositionedToken; - - var PositionedList = (function (_super) { - __extends(PositionedList, _super); - function PositionedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedList.prototype.list = function () { - return this.element(); - }; - return PositionedList; - })(PositionedElement); - TypeScript.PositionedList = PositionedList; - - var PositionedSeparatedList = (function (_super) { - __extends(PositionedSeparatedList, _super); - function PositionedSeparatedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedSeparatedList.prototype.list = function () { - return this.element(); - }; - return PositionedSeparatedList; - })(PositionedElement); - TypeScript.PositionedSeparatedList = PositionedSeparatedList; - - var PositionedSkippedToken = (function (_super) { - __extends(PositionedSkippedToken, _super); - function PositionedSkippedToken(parentToken, token, fullStart) { - _super.call(this, parentToken.parent(), token, fullStart); - this._parentToken = parentToken; - } - PositionedSkippedToken.prototype.parentToken = function () { - return this._parentToken; - }; - - PositionedSkippedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var start = this.fullStart(); - - if (includeSkippedTokens) { - var previousToken; - - if (start >= this.parentToken().end()) { - previousToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - - return this.parentToken(); - } else { - previousToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - } - } - - var start = this.parentToken().fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedSkippedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - if (includeSkippedTokens) { - var end = this.end(); - var nextToken; - - if (end <= this.parentToken().start()) { - nextToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - - return this.parentToken(); - } else { - nextToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - } - } - - return this.root().node().findToken(this.parentToken().fullEnd(), includeSkippedTokens); - }; - return PositionedSkippedToken; - })(PositionedToken); - TypeScript.PositionedSkippedToken = PositionedSkippedToken; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxKind) { - SyntaxKind[SyntaxKind["None"] = 0] = "None"; - SyntaxKind[SyntaxKind["List"] = 1] = "List"; - SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList"; - SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList"; - - SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia"; - SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia"; - SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia"; - SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia"; - SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia"; - - SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken"; - SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken"; - - SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName"; - - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral"; - - SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword"; - - SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword"; - - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword"; - - SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword"; - - SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken"; - SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken"; - - SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit"; - - SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName"; - - SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType"; - SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType"; - SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType"; - SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery"; - - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment"; - - SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration"; - SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration"; - SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration"; - SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration"; - - SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor"; - - SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature"; - SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature"; - SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; - - SyntaxKind[SyntaxKind["Block"] = 146] = "Block"; - SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; - SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement"; - - SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression"; - SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression"; - SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression"; - SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression"; - SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression"; - SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression"; - SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression"; - SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression"; - SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression"; - SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression"; - SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression"; - SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression"; - SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression"; - SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression"; - SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression"; - SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression"; - SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression"; - SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression"; - SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression"; - SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression"; - SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression"; - SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression"; - SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression"; - SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression"; - SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression"; - SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression"; - SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression"; - SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression"; - SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression"; - SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression"; - SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression"; - SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression"; - SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression"; - SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression"; - SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression"; - SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression"; - SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression"; - SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression"; - SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression"; - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression"; - SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression"; - SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression"; - - SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator"; - - SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList"; - SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList"; - SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList"; - SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList"; - - SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause"; - SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause"; - SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause"; - SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause"; - SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause"; - SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause"; - SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause"; - - SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter"; - SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint"; - - SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment"; - - SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment"; - - SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter"; - SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement"; - SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation"; - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference"; - SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference"; - SyntaxKind[SyntaxKind["Last"] = SyntaxKind.ModuleNameModuleReference] = "Last"; - - SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; - SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword"; - - SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword"; - SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword"; - - SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword"; - - SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken"; - - SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; - SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation"; - - SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth"; - SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth"; - - SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia"; - SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia"; - })(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {})); - var SyntaxKind = TypeScript.SyntaxKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - var textToKeywordKind = { - "any": 60 /* AnyKeyword */, - "boolean": 61 /* BooleanKeyword */, - "break": 15 /* BreakKeyword */, - "case": 16 /* CaseKeyword */, - "catch": 17 /* CatchKeyword */, - "class": 44 /* ClassKeyword */, - "continue": 18 /* ContinueKeyword */, - "const": 45 /* ConstKeyword */, - "constructor": 62 /* ConstructorKeyword */, - "debugger": 19 /* DebuggerKeyword */, - "declare": 63 /* DeclareKeyword */, - "default": 20 /* DefaultKeyword */, - "delete": 21 /* DeleteKeyword */, - "do": 22 /* DoKeyword */, - "else": 23 /* ElseKeyword */, - "enum": 46 /* EnumKeyword */, - "export": 47 /* ExportKeyword */, - "extends": 48 /* ExtendsKeyword */, - "false": 24 /* FalseKeyword */, - "finally": 25 /* FinallyKeyword */, - "for": 26 /* ForKeyword */, - "function": 27 /* FunctionKeyword */, - "get": 64 /* GetKeyword */, - "if": 28 /* IfKeyword */, - "implements": 51 /* ImplementsKeyword */, - "import": 49 /* ImportKeyword */, - "in": 29 /* InKeyword */, - "instanceof": 30 /* InstanceOfKeyword */, - "interface": 52 /* InterfaceKeyword */, - "let": 53 /* LetKeyword */, - "module": 65 /* ModuleKeyword */, - "new": 31 /* NewKeyword */, - "null": 32 /* NullKeyword */, - "number": 67 /* NumberKeyword */, - "package": 54 /* PackageKeyword */, - "private": 55 /* PrivateKeyword */, - "protected": 56 /* ProtectedKeyword */, - "public": 57 /* PublicKeyword */, - "require": 66 /* RequireKeyword */, - "return": 33 /* ReturnKeyword */, - "set": 68 /* SetKeyword */, - "static": 58 /* StaticKeyword */, - "string": 69 /* StringKeyword */, - "super": 50 /* SuperKeyword */, - "switch": 34 /* SwitchKeyword */, - "this": 35 /* ThisKeyword */, - "throw": 36 /* ThrowKeyword */, - "true": 37 /* TrueKeyword */, - "try": 38 /* TryKeyword */, - "typeof": 39 /* TypeOfKeyword */, - "var": 40 /* VarKeyword */, - "void": 41 /* VoidKeyword */, - "while": 42 /* WhileKeyword */, - "with": 43 /* WithKeyword */, - "yield": 59 /* YieldKeyword */, - "{": 70 /* OpenBraceToken */, - "}": 71 /* CloseBraceToken */, - "(": 72 /* OpenParenToken */, - ")": 73 /* CloseParenToken */, - "[": 74 /* OpenBracketToken */, - "]": 75 /* CloseBracketToken */, - ".": 76 /* DotToken */, - "...": 77 /* DotDotDotToken */, - ";": 78 /* SemicolonToken */, - ",": 79 /* CommaToken */, - "<": 80 /* LessThanToken */, - ">": 81 /* GreaterThanToken */, - "<=": 82 /* LessThanEqualsToken */, - ">=": 83 /* GreaterThanEqualsToken */, - "==": 84 /* EqualsEqualsToken */, - "=>": 85 /* EqualsGreaterThanToken */, - "!=": 86 /* ExclamationEqualsToken */, - "===": 87 /* EqualsEqualsEqualsToken */, - "!==": 88 /* ExclamationEqualsEqualsToken */, - "+": 89 /* PlusToken */, - "-": 90 /* MinusToken */, - "*": 91 /* AsteriskToken */, - "%": 92 /* PercentToken */, - "++": 93 /* PlusPlusToken */, - "--": 94 /* MinusMinusToken */, - "<<": 95 /* LessThanLessThanToken */, - ">>": 96 /* GreaterThanGreaterThanToken */, - ">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 98 /* AmpersandToken */, - "|": 99 /* BarToken */, - "^": 100 /* CaretToken */, - "!": 101 /* ExclamationToken */, - "~": 102 /* TildeToken */, - "&&": 103 /* AmpersandAmpersandToken */, - "||": 104 /* BarBarToken */, - "?": 105 /* QuestionToken */, - ":": 106 /* ColonToken */, - "=": 107 /* EqualsToken */, - "+=": 108 /* PlusEqualsToken */, - "-=": 109 /* MinusEqualsToken */, - "*=": 110 /* AsteriskEqualsToken */, - "%=": 111 /* PercentEqualsToken */, - "<<=": 112 /* LessThanLessThanEqualsToken */, - ">>=": 113 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 115 /* AmpersandEqualsToken */, - "|=": 116 /* BarEqualsToken */, - "^=": 117 /* CaretEqualsToken */, - "/": 118 /* SlashToken */, - "/=": 119 /* SlashEqualsToken */ - }; - - var kindToText = new Array(); - - for (var name in textToKeywordKind) { - if (textToKeywordKind.hasOwnProperty(name)) { - kindToText[textToKeywordKind[name]] = name; - } - } - - kindToText[62 /* ConstructorKeyword */] = "constructor"; - - function getTokenKind(text) { - if (textToKeywordKind.hasOwnProperty(text)) { - return textToKeywordKind[text]; - } - - return 0 /* None */; - } - SyntaxFacts.getTokenKind = getTokenKind; - - function getText(kind) { - var result = kindToText[kind]; - return result !== undefined ? result : null; - } - SyntaxFacts.getText = getText; - - function isTokenKind(kind) { - return kind >= 9 /* FirstToken */ && kind <= 119 /* LastToken */; - } - SyntaxFacts.isTokenKind = isTokenKind; - - function isAnyKeyword(kind) { - return kind >= 15 /* FirstKeyword */ && kind <= 69 /* LastKeyword */; - } - SyntaxFacts.isAnyKeyword = isAnyKeyword; - - function isStandardKeyword(kind) { - return kind >= 15 /* FirstStandardKeyword */ && kind <= 43 /* LastStandardKeyword */; - } - SyntaxFacts.isStandardKeyword = isStandardKeyword; - - function isFutureReservedKeyword(kind) { - return kind >= 44 /* FirstFutureReservedKeyword */ && kind <= 50 /* LastFutureReservedKeyword */; - } - SyntaxFacts.isFutureReservedKeyword = isFutureReservedKeyword; - - function isFutureReservedStrictKeyword(kind) { - return kind >= 51 /* FirstFutureReservedStrictKeyword */ && kind <= 59 /* LastFutureReservedStrictKeyword */; - } - SyntaxFacts.isFutureReservedStrictKeyword = isFutureReservedStrictKeyword; - - function isAnyPunctuation(kind) { - return kind >= 70 /* FirstPunctuation */ && kind <= 119 /* LastPunctuation */; - } - SyntaxFacts.isAnyPunctuation = isAnyPunctuation; - - function isPrefixUnaryExpressionOperatorToken(tokenKind) { - return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken; - - function isBinaryExpressionOperatorToken(tokenKind) { - return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken; - - function getPrefixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 89 /* PlusToken */: - return 164 /* PlusExpression */; - case 90 /* MinusToken */: - return 165 /* NegateExpression */; - case 102 /* TildeToken */: - return 166 /* BitwiseNotExpression */; - case 101 /* ExclamationToken */: - return 167 /* LogicalNotExpression */; - case 93 /* PlusPlusToken */: - return 168 /* PreIncrementExpression */; - case 94 /* MinusMinusToken */: - return 169 /* PreDecrementExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken; - - function getPostfixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 93 /* PlusPlusToken */: - return 210 /* PostIncrementExpression */; - case 94 /* MinusMinusToken */: - return 211 /* PostDecrementExpression */; - default: - return 0 /* None */; - } - } - SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken; - - function getBinaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 91 /* AsteriskToken */: - return 205 /* MultiplyExpression */; - - case 118 /* SlashToken */: - return 206 /* DivideExpression */; - - case 92 /* PercentToken */: - return 207 /* ModuloExpression */; - - case 89 /* PlusToken */: - return 208 /* AddExpression */; - - case 90 /* MinusToken */: - return 209 /* SubtractExpression */; - - case 95 /* LessThanLessThanToken */: - return 202 /* LeftShiftExpression */; - - case 96 /* GreaterThanGreaterThanToken */: - return 203 /* SignedRightShiftExpression */; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - return 204 /* UnsignedRightShiftExpression */; - - case 80 /* LessThanToken */: - return 196 /* LessThanExpression */; - - case 81 /* GreaterThanToken */: - return 197 /* GreaterThanExpression */; - - case 82 /* LessThanEqualsToken */: - return 198 /* LessThanOrEqualExpression */; - - case 83 /* GreaterThanEqualsToken */: - return 199 /* GreaterThanOrEqualExpression */; - - case 30 /* InstanceOfKeyword */: - return 200 /* InstanceOfExpression */; - - case 29 /* InKeyword */: - return 201 /* InExpression */; - - case 84 /* EqualsEqualsToken */: - return 192 /* EqualsWithTypeConversionExpression */; - - case 86 /* ExclamationEqualsToken */: - return 193 /* NotEqualsWithTypeConversionExpression */; - - case 87 /* EqualsEqualsEqualsToken */: - return 194 /* EqualsExpression */; - - case 88 /* ExclamationEqualsEqualsToken */: - return 195 /* NotEqualsExpression */; - - case 98 /* AmpersandToken */: - return 191 /* BitwiseAndExpression */; - - case 100 /* CaretToken */: - return 190 /* BitwiseExclusiveOrExpression */; - - case 99 /* BarToken */: - return 189 /* BitwiseOrExpression */; - - case 103 /* AmpersandAmpersandToken */: - return 188 /* LogicalAndExpression */; - - case 104 /* BarBarToken */: - return 187 /* LogicalOrExpression */; - - case 116 /* BarEqualsToken */: - return 182 /* OrAssignmentExpression */; - - case 115 /* AmpersandEqualsToken */: - return 180 /* AndAssignmentExpression */; - - case 117 /* CaretEqualsToken */: - return 181 /* ExclusiveOrAssignmentExpression */; - - case 112 /* LessThanLessThanEqualsToken */: - return 183 /* LeftShiftAssignmentExpression */; - - case 113 /* GreaterThanGreaterThanEqualsToken */: - return 184 /* SignedRightShiftAssignmentExpression */; - - case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - return 185 /* UnsignedRightShiftAssignmentExpression */; - - case 108 /* PlusEqualsToken */: - return 175 /* AddAssignmentExpression */; - - case 109 /* MinusEqualsToken */: - return 176 /* SubtractAssignmentExpression */; - - case 110 /* AsteriskEqualsToken */: - return 177 /* MultiplyAssignmentExpression */; - - case 119 /* SlashEqualsToken */: - return 178 /* DivideAssignmentExpression */; - - case 111 /* PercentEqualsToken */: - return 179 /* ModuloAssignmentExpression */; - - case 107 /* EqualsToken */: - return 174 /* AssignmentExpression */; - - case 79 /* CommaToken */: - return 173 /* CommaExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken; - - function getOperatorTokenFromBinaryExpression(tokenKind) { - switch (tokenKind) { - case 205 /* MultiplyExpression */: - return 91 /* AsteriskToken */; - - case 206 /* DivideExpression */: - return 118 /* SlashToken */; - - case 207 /* ModuloExpression */: - return 92 /* PercentToken */; - - case 208 /* AddExpression */: - return 89 /* PlusToken */; - - case 209 /* SubtractExpression */: - return 90 /* MinusToken */; - - case 202 /* LeftShiftExpression */: - return 95 /* LessThanLessThanToken */; - - case 203 /* SignedRightShiftExpression */: - return 96 /* GreaterThanGreaterThanToken */; - - case 204 /* UnsignedRightShiftExpression */: - return 97 /* GreaterThanGreaterThanGreaterThanToken */; - - case 196 /* LessThanExpression */: - return 80 /* LessThanToken */; - - case 197 /* GreaterThanExpression */: - return 81 /* GreaterThanToken */; - - case 198 /* LessThanOrEqualExpression */: - return 82 /* LessThanEqualsToken */; - - case 199 /* GreaterThanOrEqualExpression */: - return 83 /* GreaterThanEqualsToken */; - - case 200 /* InstanceOfExpression */: - return 30 /* InstanceOfKeyword */; - - case 201 /* InExpression */: - return 29 /* InKeyword */; - - case 192 /* EqualsWithTypeConversionExpression */: - return 84 /* EqualsEqualsToken */; - - case 193 /* NotEqualsWithTypeConversionExpression */: - return 86 /* ExclamationEqualsToken */; - - case 194 /* EqualsExpression */: - return 87 /* EqualsEqualsEqualsToken */; - - case 195 /* NotEqualsExpression */: - return 88 /* ExclamationEqualsEqualsToken */; - - case 191 /* BitwiseAndExpression */: - return 98 /* AmpersandToken */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 100 /* CaretToken */; - - case 189 /* BitwiseOrExpression */: - return 99 /* BarToken */; - - case 188 /* LogicalAndExpression */: - return 103 /* AmpersandAmpersandToken */; - - case 187 /* LogicalOrExpression */: - return 104 /* BarBarToken */; - - case 182 /* OrAssignmentExpression */: - return 116 /* BarEqualsToken */; - - case 180 /* AndAssignmentExpression */: - return 115 /* AmpersandEqualsToken */; - - case 181 /* ExclusiveOrAssignmentExpression */: - return 117 /* CaretEqualsToken */; - - case 183 /* LeftShiftAssignmentExpression */: - return 112 /* LessThanLessThanEqualsToken */; - - case 184 /* SignedRightShiftAssignmentExpression */: - return 113 /* GreaterThanGreaterThanEqualsToken */; - - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; - - case 175 /* AddAssignmentExpression */: - return 108 /* PlusEqualsToken */; - - case 176 /* SubtractAssignmentExpression */: - return 109 /* MinusEqualsToken */; - - case 177 /* MultiplyAssignmentExpression */: - return 110 /* AsteriskEqualsToken */; - - case 178 /* DivideAssignmentExpression */: - return 119 /* SlashEqualsToken */; - - case 179 /* ModuloAssignmentExpression */: - return 111 /* PercentEqualsToken */; - - case 174 /* AssignmentExpression */: - return 107 /* EqualsToken */; - - case 173 /* CommaExpression */: - return 79 /* CommaToken */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression; - - function isAnyDivideToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideToken = isAnyDivideToken; - - function isAnyDivideOrRegularExpressionToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - case 12 /* RegularExpressionLiteral */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideOrRegularExpressionToken = isAnyDivideOrRegularExpressionToken; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isNumericLiteralStart = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - - for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) { - if (character >= 97 /* a */ && character <= 122 /* z */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if ((character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) { - isIdentifierPartCharacter[character] = true; - isNumericLiteralStart[character] = true; - } - } - - isNumericLiteralStart[46 /* dot */] = true; - - for (var keywordKind = 15 /* FirstKeyword */; keywordKind <= 69 /* LastKeyword */; keywordKind++) { - var keyword = TypeScript.SyntaxFacts.getText(keywordKind); - isKeywordStartCharacter[keyword.charCodeAt(0)] = true; - } - - var Scanner = (function () { - function Scanner(fileName, text, languageVersion, window) { - if (typeof window === "undefined") { window = TypeScript.ArrayUtilities.createArray(2048, 0); } - this.slidingWindow = new TypeScript.SlidingWindow(this, window, 0, text.length()); - this.fileName = fileName; - this.text = text; - this._languageVersion = languageVersion; - } - Scanner.prototype.languageVersion = function () { - return this._languageVersion; - }; - - Scanner.prototype.fetchMoreItems = function (argument, sourceIndex, window, destinationIndex, spaceAvailable) { - var charactersRemaining = this.text.length() - sourceIndex; - var amountToRead = TypeScript.MathPrototype.min(charactersRemaining, spaceAvailable); - this.text.copyTo(sourceIndex, window, destinationIndex, amountToRead); - return amountToRead; - }; - - Scanner.prototype.currentCharCode = function () { - return this.slidingWindow.currentItem(null); - }; - - Scanner.prototype.absoluteIndex = function () { - return this.slidingWindow.absoluteIndex(); - }; - - Scanner.prototype.setAbsoluteIndex = function (index) { - this.slidingWindow.setAbsoluteIndex(index); - }; - - Scanner.prototype.scan = function (diagnostics, allowRegularExpression) { - var diagnosticsLength = diagnostics.length; - var fullStart = this.slidingWindow.absoluteIndex(); - var leadingTriviaInfo = this.scanTriviaInfo(diagnostics, false); - - var start = this.slidingWindow.absoluteIndex(); - var kindAndFlags = this.scanSyntaxToken(diagnostics, allowRegularExpression); - var end = this.slidingWindow.absoluteIndex(); - - var trailingTriviaInfo = this.scanTriviaInfo(diagnostics, true); - var fullEnd = this.slidingWindow.absoluteIndex(); - - var isVariableWidthKeyword = (kindAndFlags & -2147483648 /* IsVariableWidthKeyword */) !== 0; - var kind = kindAndFlags & ~-2147483648 /* IsVariableWidthKeyword */; - - var token = this.createToken(fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword); - - return diagnosticsLength !== diagnostics.length ? TypeScript.Syntax.realizeToken(token) : token; - }; - - Scanner.prototype.createToken = function (fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword) { - if (!isVariableWidthKeyword && kind >= 15 /* FirstFixedWidth */) { - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.FixedWidthTokenWithNoTrivia(kind); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } else { - var width = end - start; - - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithNoTrivia(fullText, kind); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } - }; - - Scanner.scanTrivia = function (text, start, length, isTrailing) { - var scanner = new Scanner(null, text.subText(new TypeScript.TextSpan(start, length)), 1 /* EcmaScript5 */, Scanner.triviaWindow); - return scanner.scanTrivia(text, start, isTrailing); - }; - - Scanner.prototype.scanTrivia = function (underlyingText, underlyingTextStart, isTrailing) { - var trivia = new Array(); - - while (true) { - if (!this.slidingWindow.isAtEndOfSource()) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - trivia.push(this.scanWhitespaceTrivia(underlyingText, underlyingTextStart)); - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - trivia.push(this.scanSingleLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - if (ch2 === 42 /* asterisk */) { - trivia.push(this.scanMultiLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - throw TypeScript.Errors.invalidOperation(); - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - trivia.push(this.scanLineTerminatorSequenceTrivia(ch)); - - if (!isTrailing) { - continue; - } - - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - return TypeScript.Syntax.triviaList(trivia); - } - }; - - Scanner.prototype.scanTriviaInfo = function (diagnostics, isTrailing) { - var width = 0; - var hasCommentOrNewLine = 0; - - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanSingleLineCommentTriviaLength(); - continue; - } - - if (ch2 === 42 /* asterisk */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanMultiLineCommentTriviaLength(diagnostics); - continue; - } - - break; - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - hasCommentOrNewLine |= 1 /* TriviaNewLineMask */; - width += this.scanLineTerminatorSequenceLength(ch); - - if (!isTrailing) { - continue; - } - - break; - } - - return (width << 2 /* TriviaFullWidthShift */) | hasCommentOrNewLine; - } - }; - - Scanner.prototype.isNewLineCharacter = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - default: - return false; - } - }; - - Scanner.prototype.scanWhitespaceTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - - var width = 0; - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - } - - break; - } - - return TypeScript.Syntax.deferredTrivia(4 /* WhitespaceTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.slidingWindow.absoluteIndex(); - var width = this.scanSingleLineCommentTriviaLength(); - - return TypeScript.Syntax.deferredTrivia(7 /* SingleLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTriviaLength = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource() || this.isNewLineCharacter(this.currentCharCode())) { - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanMultiLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - var width = this.scanMultiLineCommentTriviaLength(null); - - return TypeScript.Syntax.deferredTrivia(6 /* MultiLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanMultiLineCommentTriviaLength = function (diagnostics) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource()) { - if (diagnostics !== null) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), this.slidingWindow.absoluteIndex(), 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null)); - } - - return width; - } - - var ch = this.currentCharCode(); - if (ch === 42 /* asterisk */ && this.slidingWindow.peekItemN(1) === 47 /* slash */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - width += 2; - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanLineTerminatorSequenceTrivia = function (ch) { - var absoluteStartIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - var width = this.scanLineTerminatorSequenceLength(ch); - - var text = this.substring(absoluteStartIndex, absoluteStartIndex + width, false); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(absoluteStartIndex); - - return TypeScript.Syntax.trivia(5 /* NewLineTrivia */, text); - }; - - Scanner.prototype.scanLineTerminatorSequenceLength = function (ch) { - this.slidingWindow.moveToNextItem(); - - if (ch === 13 /* carriageReturn */ && this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - return 2; - } else { - return 1; - } - }; - - Scanner.prototype.scanSyntaxToken = function (diagnostics, allowRegularExpression) { - if (this.slidingWindow.isAtEndOfSource()) { - return 10 /* EndOfFileToken */; - } - - var character = this.currentCharCode(); - - switch (character) { - case 34 /* doubleQuote */: - case 39 /* singleQuote */: - return this.scanStringLiteral(diagnostics); - - case 47 /* slash */: - return this.scanSlashToken(allowRegularExpression); - - case 46 /* dot */: - return this.scanDotToken(diagnostics); - - case 45 /* minus */: - return this.scanMinusToken(); - - case 33 /* exclamation */: - return this.scanExclamationToken(); - - case 61 /* equals */: - return this.scanEqualsToken(); - - case 124 /* bar */: - return this.scanBarToken(); - - case 42 /* asterisk */: - return this.scanAsteriskToken(); - - case 43 /* plus */: - return this.scanPlusToken(); - - case 37 /* percent */: - return this.scanPercentToken(); - - case 38 /* ampersand */: - return this.scanAmpersandToken(); - - case 94 /* caret */: - return this.scanCaretToken(); - - case 60 /* lessThan */: - return this.scanLessThanToken(); - - case 62 /* greaterThan */: - return this.advanceAndSetTokenKind(81 /* GreaterThanToken */); - - case 44 /* comma */: - return this.advanceAndSetTokenKind(79 /* CommaToken */); - - case 58 /* colon */: - return this.advanceAndSetTokenKind(106 /* ColonToken */); - - case 59 /* semicolon */: - return this.advanceAndSetTokenKind(78 /* SemicolonToken */); - - case 126 /* tilde */: - return this.advanceAndSetTokenKind(102 /* TildeToken */); - - case 40 /* openParen */: - return this.advanceAndSetTokenKind(72 /* OpenParenToken */); - - case 41 /* closeParen */: - return this.advanceAndSetTokenKind(73 /* CloseParenToken */); - - case 123 /* openBrace */: - return this.advanceAndSetTokenKind(70 /* OpenBraceToken */); - - case 125 /* closeBrace */: - return this.advanceAndSetTokenKind(71 /* CloseBraceToken */); - - case 91 /* openBracket */: - return this.advanceAndSetTokenKind(74 /* OpenBracketToken */); - - case 93 /* closeBracket */: - return this.advanceAndSetTokenKind(75 /* CloseBracketToken */); - - case 63 /* question */: - return this.advanceAndSetTokenKind(105 /* QuestionToken */); - } - - if (isNumericLiteralStart[character]) { - return this.scanNumericLiteral(diagnostics); - } - - if (isIdentifierStartCharacter[character]) { - var result = this.tryFastScanIdentifierOrKeyword(character); - if (result !== 0 /* None */) { - return result; - } - } - - if (this.isIdentifierStart(this.peekCharOrUnicodeEscape())) { - return this.slowScanIdentifierOrKeyword(diagnostics); - } - - return this.scanDefaultCharacter(character, diagnostics); - }; - - Scanner.prototype.isIdentifierStart = function (interpretedChar) { - if (isIdentifierStartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.isIdentifierPart = function (interpretedChar) { - if (isIdentifierPartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.tryFastScanIdentifierOrKeyword = function (firstCharacter) { - var slidingWindow = this.slidingWindow; - var window = slidingWindow.window; - - var startIndex = slidingWindow.currentRelativeItemIndex; - var endIndex = slidingWindow.windowCount; - var currentIndex = startIndex; - var character = 0; - - while (currentIndex < endIndex) { - character = window[currentIndex]; - if (!isIdentifierPartCharacter[character]) { - break; - } - - currentIndex++; - } - - if (currentIndex === endIndex) { - return 0 /* None */; - } else if (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */) { - return 0 /* None */; - } else { - var kind; - var identifierLength = currentIndex - startIndex; - if (isKeywordStartCharacter[firstCharacter]) { - kind = TypeScript.ScannerUtilities.identifierKind(window, startIndex, identifierLength); - } else { - kind = 11 /* IdentifierName */; - } - - slidingWindow.setAbsoluteIndex(slidingWindow.absoluteIndex() + identifierLength); - - return kind; - } - }; - - Scanner.prototype.slowScanIdentifierOrKeyword = function (diagnostics) { - var startIndex = this.slidingWindow.absoluteIndex(); - var sawUnicodeEscape = false; - - do { - var unicodeEscape = this.scanCharOrUnicodeEscape(diagnostics); - sawUnicodeEscape = sawUnicodeEscape || unicodeEscape; - } while(this.isIdentifierPart(this.peekCharOrUnicodeEscape())); - - var length = this.slidingWindow.absoluteIndex() - startIndex; - var text = this.text.substr(startIndex, length, false); - var valueText = TypeScript.Syntax.massageEscapes(text); - - var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText); - if (keywordKind >= 15 /* FirstKeyword */ && keywordKind <= 69 /* LastKeyword */) { - if (sawUnicodeEscape) { - return keywordKind | -2147483648 /* IsVariableWidthKeyword */; - } else { - return keywordKind; - } - } - - return 11 /* IdentifierName */; - }; - - Scanner.prototype.scanNumericLiteral = function (diagnostics) { - if (this.isHexNumericLiteral()) { - this.scanHexNumericLiteral(); - } else if (this.isOctalNumericLiteral()) { - this.scanOctalNumericLiteral(diagnostics); - } else { - this.scanDecimalNumericLiteral(); - } - - return 13 /* NumericLiteral */; - }; - - Scanner.prototype.isOctalNumericLiteral = function () { - return this.currentCharCode() === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(this.slidingWindow.peekItemN(1)); - }; - - Scanner.prototype.scanOctalNumericLiteral = function (diagnostics) { - var position = this.absoluteIndex(); - - while (TypeScript.CharacterInfo.isOctalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - - if (this.languageVersion() >= 1 /* EcmaScript5 */) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, this.absoluteIndex() - position, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null)); - } - }; - - Scanner.prototype.scanDecimalDigits = function () { - while (TypeScript.CharacterInfo.isDecimalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.scanDecimalNumericLiteral = function () { - this.scanDecimalDigits(); - - if (this.currentCharCode() === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - } - - this.scanDecimalDigits(); - - var ch = this.currentCharCode(); - if (ch === 101 /* e */ || ch === 69 /* E */) { - var nextChar1 = this.slidingWindow.peekItemN(1); - - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) { - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) { - var nextChar2 = this.slidingWindow.peekItemN(2); - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } - } - } - }; - - Scanner.prototype.scanHexNumericLiteral = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - while (TypeScript.CharacterInfo.isHexDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.isHexNumericLiteral = function () { - if (this.currentCharCode() === 48 /* _0 */) { - var ch = this.slidingWindow.peekItemN(1); - - if (ch === 120 /* x */ || ch === 88 /* X */) { - ch = this.slidingWindow.peekItemN(2); - - return TypeScript.CharacterInfo.isHexDigit(ch); - } - } - - return false; - }; - - Scanner.prototype.advanceAndSetTokenKind = function (kind) { - this.slidingWindow.moveToNextItem(); - return kind; - }; - - Scanner.prototype.scanLessThanToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 82 /* LessThanEqualsToken */; - } else if (this.currentCharCode() === 60 /* lessThan */) { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 112 /* LessThanLessThanEqualsToken */; - } else { - return 95 /* LessThanLessThanToken */; - } - } else { - return 80 /* LessThanToken */; - } - }; - - Scanner.prototype.scanBarToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 116 /* BarEqualsToken */; - } else if (this.currentCharCode() === 124 /* bar */) { - this.slidingWindow.moveToNextItem(); - return 104 /* BarBarToken */; - } else { - return 99 /* BarToken */; - } - }; - - Scanner.prototype.scanCaretToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 117 /* CaretEqualsToken */; - } else { - return 100 /* CaretToken */; - } - }; - - Scanner.prototype.scanAmpersandToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 115 /* AmpersandEqualsToken */; - } else if (this.currentCharCode() === 38 /* ampersand */) { - this.slidingWindow.moveToNextItem(); - return 103 /* AmpersandAmpersandToken */; - } else { - return 98 /* AmpersandToken */; - } - }; - - Scanner.prototype.scanPercentToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 111 /* PercentEqualsToken */; - } else { - return 92 /* PercentToken */; - } - }; - - Scanner.prototype.scanMinusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 109 /* MinusEqualsToken */; - } else if (character === 45 /* minus */) { - this.slidingWindow.moveToNextItem(); - return 94 /* MinusMinusToken */; - } else { - return 90 /* MinusToken */; - } - }; - - Scanner.prototype.scanPlusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 108 /* PlusEqualsToken */; - } else if (character === 43 /* plus */) { - this.slidingWindow.moveToNextItem(); - return 93 /* PlusPlusToken */; - } else { - return 89 /* PlusToken */; - } - }; - - Scanner.prototype.scanAsteriskToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 110 /* AsteriskEqualsToken */; - } else { - return 91 /* AsteriskToken */; - } - }; - - Scanner.prototype.scanEqualsToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 87 /* EqualsEqualsEqualsToken */; - } else { - return 84 /* EqualsEqualsToken */; - } - } else if (character === 62 /* greaterThan */) { - this.slidingWindow.moveToNextItem(); - return 85 /* EqualsGreaterThanToken */; - } else { - return 107 /* EqualsToken */; - } - }; - - Scanner.prototype.isDotPrefixedNumericLiteral = function () { - if (this.currentCharCode() === 46 /* dot */) { - var ch = this.slidingWindow.peekItemN(1); - return TypeScript.CharacterInfo.isDecimalDigit(ch); - } - - return false; - }; - - Scanner.prototype.scanDotToken = function (diagnostics) { - if (this.isDotPrefixedNumericLiteral()) { - return this.scanNumericLiteral(diagnostics); - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 46 /* dot */ && this.slidingWindow.peekItemN(1) === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - return 77 /* DotDotDotToken */; - } else { - return 76 /* DotToken */; - } - }; - - Scanner.prototype.scanSlashToken = function (allowRegularExpression) { - if (allowRegularExpression) { - var result = this.tryScanRegularExpressionToken(); - if (result !== 0 /* None */) { - return result; - } - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 119 /* SlashEqualsToken */; - } else { - return 118 /* SlashToken */; - } - }; - - Scanner.prototype.tryScanRegularExpressionToken = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var inEscape = false; - var inCharacterClass = false; - while (true) { - var ch = this.currentCharCode(); - - if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 0 /* None */; - } - - this.slidingWindow.moveToNextItem(); - if (inEscape) { - inEscape = false; - continue; - } - - switch (ch) { - case 92 /* backslash */: - inEscape = true; - continue; - - case 91 /* openBracket */: - inCharacterClass = true; - continue; - - case 93 /* closeBracket */: - inCharacterClass = false; - continue; - - case 47 /* slash */: - if (inCharacterClass) { - continue; - } - - break; - - default: - continue; - } - - break; - } - - while (isIdentifierPartCharacter[this.currentCharCode()]) { - this.slidingWindow.moveToNextItem(); - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 12 /* RegularExpressionLiteral */; - }; - - Scanner.prototype.scanExclamationToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 88 /* ExclamationEqualsEqualsToken */; - } else { - return 86 /* ExclamationEqualsToken */; - } - } else { - return 101 /* ExclamationToken */; - } - }; - - Scanner.prototype.scanDefaultCharacter = function (character, diagnostics) { - var position = this.slidingWindow.absoluteIndex(); - this.slidingWindow.moveToNextItem(); - - var text = String.fromCharCode(character); - var messageText = this.getErrorMessageText(text); - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText])); - - return 9 /* ErrorToken */; - }; - - Scanner.prototype.getErrorMessageText = function (text) { - if (text === "\\") { - return '"\\"'; - } - - return JSON.stringify(text); - }; - - Scanner.prototype.skipEscapeSequence = function (diagnostics) { - var rewindPoint = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var ch = this.currentCharCode(); - this.slidingWindow.moveToNextItem(); - switch (ch) { - case 120 /* x */: - case 117 /* u */: - this.slidingWindow.rewindToPinnedIndex(rewindPoint); - var value = this.scanUnicodeOrHexEscape(diagnostics); - break; - - case 13 /* carriageReturn */: - if (this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - } - break; - - default: - break; - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint); - }; - - Scanner.prototype.scanStringLiteral = function (diagnostics) { - var quoteCharacter = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - while (true) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - this.skipEscapeSequence(diagnostics); - } else if (ch === quoteCharacter) { - this.slidingWindow.moveToNextItem(); - break; - } else if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), TypeScript.MathPrototype.min(this.slidingWindow.absoluteIndex(), this.text.length()), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null)); - break; - } else { - this.slidingWindow.moveToNextItem(); - } - } - - return 14 /* StringLiteral */; - }; - - Scanner.prototype.isUnicodeEscape = function (character) { - if (character === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - return true; - } - } - - return false; - }; - - Scanner.prototype.peekCharOrUnicodeEscape = function () { - var character = this.currentCharCode(); - if (this.isUnicodeEscape(character)) { - return this.peekUnicodeOrHexEscape(); - } else { - return character; - } - }; - - Scanner.prototype.peekUnicodeOrHexEscape = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var ch = this.scanUnicodeOrHexEscape(null); - - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - - return ch; - }; - - Scanner.prototype.scanCharOrUnicodeEscape = function (errors) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - this.scanUnicodeOrHexEscape(errors); - return true; - } - } - - this.slidingWindow.moveToNextItem(); - return false; - }; - - Scanner.prototype.scanUnicodeOrHexEscape = function (errors) { - var start = this.slidingWindow.absoluteIndex(); - var character = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - character = this.currentCharCode(); - - var intChar = 0; - this.slidingWindow.moveToNextItem(); - - var count = character === 117 /* u */ ? 4 : 2; - - for (var i = 0; i < count; i++) { - var ch2 = this.currentCharCode(); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - if (errors !== null) { - var end = this.slidingWindow.absoluteIndex(); - var info = this.createIllegalEscapeDiagnostic(start, end); - errors.push(info); - } - - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - this.slidingWindow.moveToNextItem(); - } - - return intChar; - }; - - Scanner.prototype.substring = function (start, end, intern) { - var length = end - start; - var offset = start - this.slidingWindow.windowAbsoluteStartIndex; - - if (intern) { - return TypeScript.Collections.DefaultStringTable.addCharArray(this.slidingWindow.window, offset, length); - } else { - return TypeScript.StringUtilities.fromCharCodeArray(this.slidingWindow.window.slice(offset, offset + length)); - } - }; - - Scanner.prototype.createIllegalEscapeDiagnostic = function (start, end) { - return new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), start, end - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null); - }; - - Scanner.isValidIdentifier = function (text, languageVersion) { - var scanner = new Scanner(null, text, languageVersion, Scanner.triviaWindow); - var errors = new Array(); - var token = scanner.scan(errors, false); - - return errors.length === 0 && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && token.width() === text.length(); - }; - Scanner.triviaWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - return Scanner; - })(); - TypeScript.Scanner = Scanner; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ScannerUtilities = (function () { - function ScannerUtilities() { - } - ScannerUtilities.identifierKind = function (array, startIndex, length) { - switch (length) { - case 2: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - switch (array[startIndex + 1]) { - case 102 /* f */: - return 28 /* IfKeyword */; - case 110 /* n */: - return 29 /* InKeyword */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 3: - switch (array[startIndex]) { - case 102 /* f */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */; - case 118 /* v */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */; - case 97 /* a */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */; - case 103 /* g */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 4: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - switch (array[startIndex + 1]) { - case 108 /* l */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 1]) { - case 104 /* h */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 118 /* v */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 5: - switch (array[startIndex]) { - case 98 /* b */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 2] === 97 /* a */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */; - case 111 /* o */: - return (array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 114 /* r */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */; - case 121 /* y */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 6: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - switch (array[startIndex + 1]) { - case 119 /* w */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 99 /* c */ && array[startIndex + 5] === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 2]) { - case 97 /* a */: - return (array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 3] === 105 /* i */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 116 /* t */: - return (array[startIndex + 1] === 121 /* y */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 111 /* o */ && array[startIndex + 5] === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - return (array[startIndex + 1] === 109 /* m */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 100 /* d */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 109 /* m */ && array[startIndex + 3] === 98 /* b */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 7: - switch (array[startIndex]) { - case 100 /* d */: - switch (array[startIndex + 1]) { - case 101 /* e */: - switch (array[startIndex + 2]) { - case 102 /* f */: - return (array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 117 /* u */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - return (array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 100 /* d */ && array[startIndex + 6] === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 99 /* c */ && array[startIndex + 3] === 107 /* k */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 118 /* v */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 116 /* t */ && array[startIndex + 6] === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 98 /* b */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 97 /* a */ && array[startIndex + 6] === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 113 /* q */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 8: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */; - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 103 /* g */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */; - case 102 /* f */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 105 /* i */ && array[startIndex + 6] === 111 /* o */ && array[startIndex + 7] === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 9: - switch (array[startIndex]) { - case 105 /* i */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 102 /* f */ && array[startIndex + 6] === 97 /* a */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 99 /* c */ && array[startIndex + 6] === 116 /* t */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 10: - switch (array[startIndex]) { - case 105 /* i */: - switch (array[startIndex + 1]) { - case 110 /* n */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 99 /* c */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 111 /* o */ && array[startIndex + 9] === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 109 /* m */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 110 /* n */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 11: - return (array[startIndex] === 99 /* c */ && array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 111 /* o */ && array[startIndex + 10] === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - }; - return ScannerUtilities; - })(); - TypeScript.ScannerUtilities = ScannerUtilities; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySeparatedSyntaxList = (function () { - function EmptySeparatedSyntaxList() { - } - EmptySeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - EmptySeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isList = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - EmptySeparatedSyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySeparatedSyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySeparatedSyntaxList.prototype.width = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - - EmptySeparatedSyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - return EmptySeparatedSyntaxList; - })(); - - Syntax.emptySeparatedList = new EmptySeparatedSyntaxList(); - - var SingletonSeparatedSyntaxList = (function () { - function SingletonSeparatedSyntaxList(item) { - this.item = item; - } - SingletonSeparatedSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - SingletonSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - SingletonSeparatedSyntaxList.prototype.childCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - SingletonSeparatedSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - SingletonSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - SingletonSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSeparatedSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSeparatedSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSeparatedSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSeparatedSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedSeparatedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSeparatedSyntaxList; - })(); - - var NormalSeparatedSyntaxList = (function () { - function NormalSeparatedSyntaxList(elements) { - this._data = 0; - this.elements = elements; - } - NormalSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - NormalSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - NormalSeparatedSyntaxList.prototype.toJSON = function (key) { - return this.elements; - }; - - NormalSeparatedSyntaxList.prototype.childCount = function () { - return this.elements.length; - }; - NormalSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length + 1, 2); - }; - NormalSeparatedSyntaxList.prototype.separatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length, 2); - }; - - NormalSeparatedSyntaxList.prototype.toArray = function () { - return this.elements.slice(0); - }; - - NormalSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - var result = []; - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - result.push(this.nonSeparatorAt(i)); - } - - return result; - }; - - NormalSeparatedSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[index]; - }; - - NormalSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - var value = index * 2; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.separatorAt = function (index) { - var value = index * 2 + 1; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.firstToken = function () { - var token; - for (var i = 0, n = this.elements.length; i < n; i++) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.firstToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.lastToken = function () { - var token; - for (var i = this.elements.length - 1; i >= 0; i--) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.lastToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i).isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSeparatedSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSeparatedSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - fullWidth += childWidth; - - isIncrementallyUnusable = isIncrementallyUnusable || element.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSeparatedSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedSeparatedList(parent, this, fullStart); - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - element.collectTextElements(elements); - } - }; - - NormalSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.elements); - } else { - array.splice.apply(array, [index, 0].concat(this.elements)); - } - }; - return NormalSeparatedSyntaxList; - })(); - - function separatedList(nodes) { - return separatedListAndValidate(nodes, false); - } - Syntax.separatedList = separatedList; - - function separatedListAndValidate(nodes, validate) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptySeparatedList; - } - - if (validate) { - for (var i = 0; i < nodes.length; i++) { - var item = nodes[i]; - - if (i % 2 === 1) { - } - } - } - - if (nodes.length === 1) { - return new SingletonSeparatedSyntaxList(nodes[0]); - } - - return new NormalSeparatedSyntaxList(nodes); - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SlidingWindow = (function () { - function SlidingWindow(source, window, defaultValue, sourceLength) { - if (typeof sourceLength === "undefined") { sourceLength = -1; } - this.source = source; - this.window = window; - this.defaultValue = defaultValue; - this.sourceLength = sourceLength; - this.windowCount = 0; - this.windowAbsoluteStartIndex = 0; - this.currentRelativeItemIndex = 0; - this._pinCount = 0; - this.firstPinnedAbsoluteIndex = -1; - } - SlidingWindow.prototype.windowAbsoluteEndIndex = function () { - return this.windowAbsoluteStartIndex + this.windowCount; - }; - - SlidingWindow.prototype.addMoreItemsToWindow = function (argument) { - if (this.sourceLength >= 0 && this.absoluteIndex() >= this.sourceLength) { - return false; - } - - if (this.windowCount >= this.window.length) { - this.tryShiftOrGrowWindow(); - } - - var spaceAvailable = this.window.length - this.windowCount; - var amountFetched = this.source.fetchMoreItems(argument, this.windowAbsoluteEndIndex(), this.window, this.windowCount, spaceAvailable); - - this.windowCount += amountFetched; - return amountFetched > 0; - }; - - SlidingWindow.prototype.tryShiftOrGrowWindow = function () { - var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1); - - var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex; - - if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) { - var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex; - - var shiftCount = this.windowCount - shiftStartIndex; - - if (shiftCount > 0) { - TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount); - } - - this.windowAbsoluteStartIndex += shiftStartIndex; - - this.windowCount -= shiftStartIndex; - - this.currentRelativeItemIndex -= shiftStartIndex; - } else { - TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue); - } - }; - - SlidingWindow.prototype.absoluteIndex = function () { - return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.isAtEndOfSource = function () { - return this.absoluteIndex() >= this.sourceLength; - }; - - SlidingWindow.prototype.getAndPinAbsoluteIndex = function () { - var absoluteIndex = this.absoluteIndex(); - var pinCount = this._pinCount++; - if (pinCount === 0) { - this.firstPinnedAbsoluteIndex = absoluteIndex; - } - - return absoluteIndex; - }; - - SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) { - this._pinCount--; - if (this._pinCount === 0) { - this.firstPinnedAbsoluteIndex = -1; - } - }; - - SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) { - var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex; - - this.currentRelativeItemIndex = relativeIndex; - }; - - SlidingWindow.prototype.currentItem = function (argument) { - if (this.currentRelativeItemIndex >= this.windowCount) { - if (!this.addMoreItemsToWindow(argument)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex]; - }; - - SlidingWindow.prototype.peekItemN = function (n) { - while (this.currentRelativeItemIndex + n >= this.windowCount) { - if (!this.addMoreItemsToWindow(null)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex + n]; - }; - - SlidingWindow.prototype.moveToNextItem = function () { - this.currentRelativeItemIndex++; - }; - - SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () { - this.windowCount = this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.setAbsoluteIndex = function (absoluteIndex) { - if (this.absoluteIndex() === absoluteIndex) { - return; - } - - if (this._pinCount > 0) { - } - - if (absoluteIndex >= this.windowAbsoluteStartIndex && absoluteIndex < this.windowAbsoluteEndIndex()) { - this.currentRelativeItemIndex = (absoluteIndex - this.windowAbsoluteStartIndex); - } else { - this.windowAbsoluteStartIndex = absoluteIndex; - - this.windowCount = 0; - - this.currentRelativeItemIndex = 0; - } - }; - - SlidingWindow.prototype.pinCount = function () { - return this._pinCount; - }; - return SlidingWindow; - })(); - TypeScript.SlidingWindow = SlidingWindow; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function emptySourceUnit() { - return Syntax.normalModeFactory.sourceUnit(Syntax.emptyList, Syntax.token(10 /* EndOfFileToken */, { text: "" })); - } - Syntax.emptySourceUnit = emptySourceUnit; - - function getStandaloneExpression(positionedToken) { - var token = positionedToken.token(); - if (positionedToken !== null && positionedToken.kind() === 11 /* IdentifierName */) { - var parentPositionedNode = positionedToken.containingNode(); - var parentNode = parentPositionedNode.node(); - - if (parentNode.kind() === 121 /* QualifiedName */ && parentNode.right === token) { - return parentPositionedNode; - } else if (parentNode.kind() === 212 /* MemberAccessExpression */ && parentNode.name === token) { - return parentPositionedNode; - } - } - - return positionedToken; - } - Syntax.getStandaloneExpression = getStandaloneExpression; - - function isInModuleOrTypeContext(positionedToken) { - if (positionedToken !== null) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var parent = positionedNodeOrToken.containingNode(); - - if (parent !== null) { - switch (parent.kind()) { - case 246 /* ModuleNameModuleReference */: - return true; - case 121 /* QualifiedName */: - return true; - default: - return isInTypeOnlyContext(positionedToken); - } - } - } - - return false; - } - Syntax.isInModuleOrTypeContext = isInModuleOrTypeContext; - - function isInTypeOnlyContext(positionedToken) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var positionedParent = positionedNodeOrToken.containingNode(); - - var parent = positionedParent.node(); - var nodeOrToken = positionedNodeOrToken.nodeOrToken(); - - if (parent !== null) { - switch (parent.kind()) { - case 124 /* ArrayType */: - return parent.type === nodeOrToken; - case 220 /* CastExpression */: - return parent.type === nodeOrToken; - case 244 /* TypeAnnotation */: - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - case 228 /* TypeArgumentList */: - return true; - } - } - - return false; - } - Syntax.isInTypeOnlyContext = isInTypeOnlyContext; - - function childOffset(parent, child) { - var offset = 0; - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return offset; - } - - if (current !== null) { - offset += current.fullWidth(); - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childOffset = childOffset; - - function childOffsetAt(parent, index) { - var offset = 0; - for (var i = 0; i < index; i++) { - var current = parent.childAt(i); - if (current !== null) { - offset += current.fullWidth(); - } - } - - return offset; - } - Syntax.childOffsetAt = childOffsetAt; - - function childIndex(parent, child) { - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return i; - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childIndex = childIndex; - - function nodeStructuralEquals(node1, node2) { - if (node1 === null) { - return node2 === null; - } - - return node1.structuralEquals(node2); - } - Syntax.nodeStructuralEquals = nodeStructuralEquals; - - function nodeOrTokenStructuralEquals(node1, node2) { - if (node1 === node2) { - return true; - } - - if (node1 === null || node2 === null) { - return false; - } - - if (node1.isToken()) { - return node2.isToken() ? tokenStructuralEquals(node1, node2) : false; - } - - return node2.isNode() ? nodeStructuralEquals(node1, node2) : false; - } - Syntax.nodeOrTokenStructuralEquals = nodeOrTokenStructuralEquals; - - function tokenStructuralEquals(token1, token2) { - if (token1 === token2) { - return true; - } - - if (token1 === null || token2 === null) { - return false; - } - - return token1.kind() === token2.kind() && token1.width() === token2.width() && token1.fullWidth() === token2.fullWidth() && token1.text() === token2.text() && Syntax.triviaListStructuralEquals(token1.leadingTrivia(), token2.leadingTrivia()) && Syntax.triviaListStructuralEquals(token1.trailingTrivia(), token2.trailingTrivia()); - } - Syntax.tokenStructuralEquals = tokenStructuralEquals; - - function triviaListStructuralEquals(triviaList1, triviaList2) { - if (triviaList1.count() !== triviaList2.count()) { - return false; - } - - for (var i = 0, n = triviaList1.count(); i < n; i++) { - if (!Syntax.triviaStructuralEquals(triviaList1.syntaxTriviaAt(i), triviaList2.syntaxTriviaAt(i))) { - return false; - } - } - - return true; - } - Syntax.triviaListStructuralEquals = triviaListStructuralEquals; - - function triviaStructuralEquals(trivia1, trivia2) { - return trivia1.kind() === trivia2.kind() && trivia1.fullWidth() === trivia2.fullWidth() && trivia1.fullText() === trivia2.fullText(); - } - Syntax.triviaStructuralEquals = triviaStructuralEquals; - - function listStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var child1 = list1.childAt(i); - var child2 = list2.childAt(i); - - if (!Syntax.nodeOrTokenStructuralEquals(child1, child2)) { - return false; - } - } - - return true; - } - Syntax.listStructuralEquals = listStructuralEquals; - - function separatedListStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var element1 = list1.childAt(i); - var element2 = list2.childAt(i); - if (!Syntax.nodeOrTokenStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - } - Syntax.separatedListStructuralEquals = separatedListStructuralEquals; - - function elementStructuralEquals(element1, element2) { - if (element1 === element2) { - return true; - } - - if (element1 === null || element2 === null) { - return false; - } - - if (element2.kind() !== element2.kind()) { - return false; - } - - if (element1.isToken()) { - return tokenStructuralEquals(element1, element2); - } else if (element1.isNode()) { - return nodeStructuralEquals(element1, element2); - } else if (element1.isList()) { - return listStructuralEquals(element1, element2); - } else if (element1.isSeparatedList()) { - return separatedListStructuralEquals(element1, element2); - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.elementStructuralEquals = elementStructuralEquals; - - function identifierName(text, info) { - if (typeof info === "undefined") { info = null; } - return Syntax.identifier(text); - } - Syntax.identifierName = identifierName; - - function trueExpression() { - return Syntax.token(37 /* TrueKeyword */); - } - Syntax.trueExpression = trueExpression; - - function falseExpression() { - return Syntax.token(24 /* FalseKeyword */); - } - Syntax.falseExpression = falseExpression; - - function numericLiteralExpression(text) { - return Syntax.token(13 /* NumericLiteral */, { text: text }); - } - Syntax.numericLiteralExpression = numericLiteralExpression; - - function stringLiteralExpression(text) { - return Syntax.token(14 /* StringLiteral */, { text: text }); - } - Syntax.stringLiteralExpression = stringLiteralExpression; - - function isSuperInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperInvocationExpression = isSuperInvocationExpression; - - function isSuperInvocationExpressionStatement(node) { - return node.kind() === 149 /* ExpressionStatement */ && isSuperInvocationExpression(node.expression); - } - Syntax.isSuperInvocationExpressionStatement = isSuperInvocationExpressionStatement; - - function isSuperMemberAccessExpression(node) { - return node.kind() === 212 /* MemberAccessExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperMemberAccessExpression = isSuperMemberAccessExpression; - - function isSuperMemberAccessInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && isSuperMemberAccessExpression(node.expression); - } - Syntax.isSuperMemberAccessInvocationExpression = isSuperMemberAccessInvocationExpression; - - function assignmentExpression(left, token, right) { - return Syntax.normalModeFactory.binaryExpression(174 /* AssignmentExpression */, left, token, right); - } - Syntax.assignmentExpression = assignmentExpression; - - function nodeHasSkippedOrMissingTokens(node) { - for (var i = 0; i < node.childCount(); i++) { - var child = node.childAt(i); - if (child !== null && child.isToken()) { - var token = child; - - if (token.hasSkippedToken() || (token.width() === 0 && token.kind() !== 10 /* EndOfFileToken */)) { - return true; - } - } - } - return false; - } - Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens; - - function isUnterminatedStringLiteral(token) { - if (token && token.kind() === 14 /* StringLiteral */) { - var text = token.text(); - return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0); - } - - return false; - } - Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral; - - function isUnterminatedMultilineCommentTrivia(trivia) { - if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var text = trivia.fullText(); - return text.length < 4 || text.substring(text.length - 2) !== "*/"; - } - return false; - } - Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia; - - function isEntirelyInsideCommentTrivia(trivia, fullStart, position) { - if (trivia && trivia.isComment() && position > fullStart) { - var end = fullStart + trivia.fullWidth(); - if (position < end) { - return true; - } else if (position === end) { - return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia); - } - } - - return false; - } - Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia; - - function isEntirelyInsideComment(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - var fullStart = positionedToken.fullStart(); - var triviaList = null; - var lastTriviaBeforeToken = null; - - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - if (positionedToken.token().hasLeadingTrivia()) { - triviaList = positionedToken.token().leadingTrivia(); - } else { - positionedToken = positionedToken.previousToken(); - if (positionedToken) { - if (positionedToken && positionedToken.token().hasTrailingTrivia()) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - } - } else { - if (position <= (fullStart + positionedToken.token().leadingTriviaWidth())) { - triviaList = positionedToken.token().leadingTrivia(); - } else if (position >= (fullStart + positionedToken.token().width())) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - - if (triviaList) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (position <= fullStart) { - break; - } else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) { - lastTriviaBeforeToken = trivia; - break; - } - - fullStart += trivia.fullWidth(); - } - } - - return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position); - } - Syntax.isEntirelyInsideComment = isEntirelyInsideComment; - - function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - - if (positionedToken) { - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(); - return positionedToken && positionedToken.token().trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken.token()); - } else if (position > positionedToken.start()) { - return (position < positionedToken.end() && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= positionedToken.end() && isUnterminatedStringLiteral(positionedToken.token())); - } - } - - return false; - } - Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral; - - function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullStart; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullStart = positionedToken.fullStart(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullStart); - } - - fullStart += triviaWidth; - } - } - - return null; - } - - function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullEnd; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullEnd = positionedToken.fullStart() + triviaList.fullWidth(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullEnd = positionedToken.fullEnd(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullEnd) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullEnd - triviaWidth); - } - - fullEnd -= triviaWidth; - } - } - - return null; - } - - function findSkippedTokenInLeadingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, true); - } - Syntax.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList; - - function findSkippedTokenInTrailingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, false); - } - Syntax.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList; - - function findSkippedTokenInPositionedToken(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken; - - function findSkippedTokenOnLeft(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft; - - function getAncestorOfKind(positionedToken, kind) { - while (positionedToken && positionedToken.parent()) { - if (positionedToken.parent().kind() === kind) { - return positionedToken.parent(); - } - - positionedToken = positionedToken.parent(); - } - - return null; - } - Syntax.getAncestorOfKind = getAncestorOfKind; - - function hasAncestorOfKind(positionedToken, kind) { - return Syntax.getAncestorOfKind(positionedToken, kind) !== null; - } - Syntax.hasAncestorOfKind = hasAncestorOfKind; - - function isIntegerLiteral(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.isToken() && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - Syntax.isIntegerLiteral = isIntegerLiteral; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var NormalModeFactory = (function () { - function NormalModeFactory() { - } - NormalModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, false); - }; - NormalModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, false); - }; - NormalModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, false); - }; - NormalModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - NormalModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, false); - }; - NormalModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, false); - }; - NormalModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, false); - }; - NormalModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, false); - }; - NormalModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, false); - }; - NormalModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, false); - }; - NormalModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, false); - }; - NormalModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(false); - }; - NormalModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, false); - }; - NormalModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, false); - }; - NormalModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, false); - }; - NormalModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, false); - }; - NormalModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, false); - }; - NormalModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, false); - }; - NormalModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, false); - }; - NormalModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, false); - }; - NormalModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, false); - }; - NormalModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, false); - }; - NormalModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, false); - }; - NormalModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, false); - }; - NormalModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, false); - }; - NormalModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, false); - }; - NormalModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, false); - }; - NormalModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, false); - }; - NormalModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, false); - }; - NormalModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, false); - }; - NormalModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, false); - }; - NormalModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, false); - }; - NormalModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, false); - }; - NormalModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, false); - }; - NormalModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, false); - }; - NormalModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, false); - }; - NormalModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, false); - }; - NormalModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, false); - }; - NormalModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, false); - }; - NormalModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, false); - }; - NormalModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, false); - }; - NormalModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, false); - }; - NormalModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, false); - }; - NormalModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, false); - }; - NormalModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, false); - }; - NormalModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, false); - }; - NormalModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, false); - }; - NormalModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, false); - }; - NormalModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, false); - }; - NormalModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, false); - }; - NormalModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, false); - }; - NormalModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, false); - }; - NormalModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, false); - }; - NormalModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, false); - }; - NormalModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, false); - }; - NormalModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, false); - }; - NormalModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, false); - }; - NormalModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, false); - }; - NormalModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, false); - }; - NormalModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, false); - }; - NormalModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, false); - }; - NormalModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, false); - }; - return NormalModeFactory; - })(); - Syntax.NormalModeFactory = NormalModeFactory; - - var StrictModeFactory = (function () { - function StrictModeFactory() { - } - StrictModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, true); - }; - StrictModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, true); - }; - StrictModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, true); - }; - StrictModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, true); - }; - StrictModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, true); - }; - StrictModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, true); - }; - StrictModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, true); - }; - StrictModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, true); - }; - StrictModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, true); - }; - StrictModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, true); - }; - StrictModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, true); - }; - StrictModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(true); - }; - StrictModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, true); - }; - StrictModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, true); - }; - StrictModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, true); - }; - StrictModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, true); - }; - StrictModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, true); - }; - StrictModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, true); - }; - StrictModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, true); - }; - StrictModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, true); - }; - StrictModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, true); - }; - StrictModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, true); - }; - StrictModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, true); - }; - StrictModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, true); - }; - StrictModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, true); - }; - StrictModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, true); - }; - StrictModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, true); - }; - StrictModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, true); - }; - StrictModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, true); - }; - StrictModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, true); - }; - StrictModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, true); - }; - StrictModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, true); - }; - StrictModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, true); - }; - StrictModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, true); - }; - StrictModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, true); - }; - StrictModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, true); - }; - StrictModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, true); - }; - StrictModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, true); - }; - StrictModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, true); - }; - StrictModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, true); - }; - StrictModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, true); - }; - StrictModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, true); - }; - StrictModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, true); - }; - StrictModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, true); - }; - StrictModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, true); - }; - StrictModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, true); - }; - StrictModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, true); - }; - StrictModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, true); - }; - StrictModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, true); - }; - StrictModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, true); - }; - StrictModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, true); - }; - StrictModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, true); - }; - StrictModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, true); - }; - StrictModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, true); - }; - StrictModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, true); - }; - StrictModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, true); - }; - StrictModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, true); - }; - StrictModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, true); - }; - StrictModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, true); - }; - StrictModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, true); - }; - StrictModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, true); - }; - StrictModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, true); - }; - return StrictModeFactory; - })(); - Syntax.StrictModeFactory = StrictModeFactory; - - Syntax.normalModeFactory = new NormalModeFactory(); - Syntax.strictModeFactory = new StrictModeFactory(); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - function isDirectivePrologueElement(node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - var expression = expressionStatement.expression; - - if (expression.kind() === 14 /* StringLiteral */) { - return true; - } - } - - return false; - } - SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement; - - function isUseStrictDirective(node) { - var expressionStatement = node; - var stringLiteral = expressionStatement.expression; - - var text = stringLiteral.text(); - return text === '"use strict"' || text === "'use strict'"; - } - SyntaxFacts.isUseStrictDirective = isUseStrictDirective; - - function isIdentifierNameOrAnyKeyword(token) { - var tokenKind = token.tokenKind; - return tokenKind === 11 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind); - } - SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySyntaxList = (function () { - function EmptySyntaxList() { - } - EmptySyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - EmptySyntaxList.prototype.isNode = function () { - return false; - }; - EmptySyntaxList.prototype.isToken = function () { - return false; - }; - EmptySyntaxList.prototype.isList = function () { - return true; - }; - EmptySyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - EmptySyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.width = function () { - return 0; - }; - - EmptySyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - return EmptySyntaxList; - })(); - Syntax.EmptySyntaxList = EmptySyntaxList; - - Syntax.emptyList = new EmptySyntaxList(); - - var SingletonSyntaxList = (function () { - function SingletonSyntaxList(item) { - this.item = item; - } - SingletonSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - SingletonSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSyntaxList.prototype.isList = function () { - return true; - }; - SingletonSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - SingletonSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxList.prototype.childCount = function () { - return 1; - }; - - SingletonSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSyntaxList; - })(); - - var NormalSyntaxList = (function () { - function NormalSyntaxList(nodeOrTokens) { - this._data = 0; - this.nodeOrTokens = nodeOrTokens; - } - NormalSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - NormalSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSyntaxList.prototype.isList = function () { - return true; - }; - NormalSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - NormalSyntaxList.prototype.toJSON = function (key) { - return this.nodeOrTokens; - }; - - NormalSyntaxList.prototype.childCount = function () { - return this.nodeOrTokens.length; - }; - - NormalSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.nodeOrTokens.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.nodeOrTokens[index]; - }; - - NormalSyntaxList.prototype.toArray = function () { - return this.nodeOrTokens.slice(0); - }; - - NormalSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var element = this.nodeOrTokens[i]; - element.collectTextElements(elements); - } - }; - - NormalSyntaxList.prototype.firstToken = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var token = this.nodeOrTokens[i].firstToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.lastToken = function () { - for (var i = this.nodeOrTokens.length - 1; i >= 0; i--) { - var token = this.nodeOrTokens[i].lastToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.fullText = function () { - var elements = new Array(); - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - if (this.nodeOrTokens[i].isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var node = this.nodeOrTokens[i]; - fullWidth += node.fullWidth(); - isIncrementallyUnusable = isIncrementallyUnusable || node.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedList(parent, this, fullStart); - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var nodeOrToken = this.nodeOrTokens[i]; - - var childWidth = nodeOrToken.fullWidth(); - if (position < childWidth) { - return nodeOrToken.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.nodeOrTokens); - } else { - array.splice.apply(array, [index, 0].concat(this.nodeOrTokens)); - } - }; - return NormalSyntaxList; - })(); - - function list(nodes) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptyList; - } - - if (nodes.length === 1) { - var item = nodes[0]; - return new SingletonSyntaxList(item); - } - - return new NormalSyntaxList(nodes); - } - Syntax.list = list; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNode = (function () { - function SyntaxNode(parsedInStrictMode) { - this._data = parsedInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0; - } - SyntaxNode.prototype.isNode = function () { - return true; - }; - SyntaxNode.prototype.isToken = function () { - return false; - }; - SyntaxNode.prototype.isList = function () { - return false; - }; - SyntaxNode.prototype.isSeparatedList = function () { - return false; - }; - - SyntaxNode.prototype.kind = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childCount = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childAt = function (slot) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.firstToken = function () { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.firstToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.lastToken = function () { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.lastToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.insertChildrenInto = function (array, index) { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.isNode() || element.isToken()) { - array.splice(index, 0, element); - } else if (element.isList()) { - element.insertChildrenInto(array, index); - } else if (element.isSeparatedList()) { - element.insertChildrenInto(array, index); - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - } - }; - - SyntaxNode.prototype.leadingTrivia = function () { - var firstToken = this.firstToken(); - return firstToken ? firstToken.leadingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.trailingTrivia = function () { - var lastToken = this.lastToken(); - return lastToken ? lastToken.trailingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.toJSON = function (key) { - var result = { - kind: TypeScript.SyntaxKind[this.kind()], - fullWidth: this.fullWidth() - }; - - if (this.isIncrementallyUnusable()) { - result.isIncrementallyUnusable = true; - } - - if (this.parsedInStrictMode()) { - result.parsedInStrictMode = true; - } - - var thisAsIndexable = this; - for (var i = 0, n = this.childCount(); i < n; i++) { - var value = this.childAt(i); - - if (value) { - for (var name in this) { - if (value === thisAsIndexable[name]) { - result[name] = value; - break; - } - } - } - } - - return result; - }; - - SyntaxNode.prototype.accept = function (visitor) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - SyntaxNode.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - element.collectTextElements(elements); - } - } - }; - - SyntaxNode.prototype.replaceToken = function (token1, token2) { - if (token1 === token2) { - return this; - } - - return this.accept(new TypeScript.SyntaxTokenReplacer(token1, token2)); - }; - - SyntaxNode.prototype.withLeadingTrivia = function (trivia) { - return this.replaceToken(this.firstToken(), this.firstToken().withLeadingTrivia(trivia)); - }; - - SyntaxNode.prototype.withTrailingTrivia = function (trivia) { - return this.replaceToken(this.lastToken(), this.lastToken().withTrailingTrivia(trivia)); - }; - - SyntaxNode.prototype.hasLeadingTrivia = function () { - return this.lastToken().hasLeadingTrivia(); - }; - - SyntaxNode.prototype.hasTrailingTrivia = function () { - return this.lastToken().hasTrailingTrivia(); - }; - - SyntaxNode.prototype.isTypeScriptSpecific = function () { - return false; - }; - - SyntaxNode.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - SyntaxNode.prototype.parsedInStrictMode = function () { - return (this.data() & 4 /* NodeParsedInStrictModeMask */) !== 0; - }; - - SyntaxNode.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - SyntaxNode.prototype.computeData = function () { - var slotCount = this.childCount(); - - var fullWidth = 0; - var childWidth = 0; - - var isIncrementallyUnusable = ((this._data & 2 /* NodeIncrementallyUnusableMask */) !== 0) || slotCount === 0; - - for (var i = 0, n = slotCount; i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - childWidth = element.fullWidth(); - fullWidth += childWidth; - - if (!isIncrementallyUnusable) { - isIncrementallyUnusable = element.isIncrementallyUnusable(); - } - } - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - SyntaxNode.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data |= this.computeData(); - } - - return this._data; - }; - - SyntaxNode.prototype.findToken = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var endOfFileToken = this.tryGetEndOfFileAt(position); - if (endOfFileToken !== null) { - return endOfFileToken; - } - - if (position < 0 || position >= this.fullWidth()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var positionedToken = this.findTokenInternal(null, position, 0); - - if (includeSkippedTokens) { - return TypeScript.Syntax.findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken; - } - - return positionedToken; - }; - - SyntaxNode.prototype.tryGetEndOfFileAt = function (position) { - if (this.kind() === 120 /* SourceUnit */ && position === this.fullWidth()) { - var sourceUnit = this; - return new TypeScript.PositionedToken(new TypeScript.PositionedNode(null, sourceUnit, 0), sourceUnit.endOfFileToken, sourceUnit.moduleElements.fullWidth()); - } - - return null; - }; - - SyntaxNode.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedNode(parent, this, fullStart); - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - var childWidth = element.fullWidth(); - - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - - SyntaxNode.prototype.findTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - var start = positionedToken.start(); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (position > start) { - return positionedToken; - } - - if (positionedToken.fullStart() === 0) { - return null; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.findCompleteTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (positionedToken.token().width() > 0 && position >= positionedToken.end()) { - return positionedToken; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.isModuleElement = function () { - return false; - }; - - SyntaxNode.prototype.isClassElement = function () { - return false; - }; - - SyntaxNode.prototype.isTypeMember = function () { - return false; - }; - - SyntaxNode.prototype.isStatement = function () { - return false; - }; - - SyntaxNode.prototype.isExpression = function () { - return false; - }; - - SyntaxNode.prototype.isSwitchClause = function () { - return false; - }; - - SyntaxNode.prototype.structuralEquals = function (node) { - if (this === node) { - return true; - } - if (node === null) { - return false; - } - if (this.kind() !== node.kind()) { - return false; - } - - for (var i = 0, n = this.childCount(); i < n; i++) { - var element1 = this.childAt(i); - var element2 = node.childAt(i); - - if (!TypeScript.Syntax.elementStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - }; - - SyntaxNode.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - SyntaxNode.prototype.leadingTriviaWidth = function () { - var firstToken = this.firstToken(); - return firstToken === null ? 0 : firstToken.leadingTriviaWidth(); - }; - - SyntaxNode.prototype.trailingTriviaWidth = function () { - var lastToken = this.lastToken(); - return lastToken === null ? 0 : lastToken.trailingTriviaWidth(); - }; - return SyntaxNode; - })(); - TypeScript.SyntaxNode = SyntaxNode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceUnitSyntax = (function (_super) { - __extends(SourceUnitSyntax, _super); - function SourceUnitSyntax(moduleElements, endOfFileToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleElements = moduleElements; - this.endOfFileToken = endOfFileToken; - } - SourceUnitSyntax.prototype.accept = function (visitor) { - return visitor.visitSourceUnit(this); - }; - - SourceUnitSyntax.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnitSyntax.prototype.childCount = function () { - return 2; - }; - - SourceUnitSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleElements; - case 1: - return this.endOfFileToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SourceUnitSyntax.prototype.update = function (moduleElements, endOfFileToken) { - if (this.moduleElements === moduleElements && this.endOfFileToken === endOfFileToken) { - return this; - } - - return new SourceUnitSyntax(moduleElements, endOfFileToken, this.parsedInStrictMode()); - }; - - SourceUnitSyntax.create = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.create1 = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(moduleElements, this.endOfFileToken); - }; - - SourceUnitSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - SourceUnitSyntax.prototype.withEndOfFileToken = function (endOfFileToken) { - return this.update(this.moduleElements, endOfFileToken); - }; - - SourceUnitSyntax.prototype.isTypeScriptSpecific = function () { - if (this.moduleElements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SourceUnitSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SourceUnitSyntax = SourceUnitSyntax; - - var ExternalModuleReferenceSyntax = (function (_super) { - __extends(ExternalModuleReferenceSyntax, _super); - function ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.requireKeyword = requireKeyword; - this.openParenToken = openParenToken; - this.stringLiteral = stringLiteral; - this.closeParenToken = closeParenToken; - } - ExternalModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitExternalModuleReference(this); - }; - - ExternalModuleReferenceSyntax.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - - ExternalModuleReferenceSyntax.prototype.childCount = function () { - return 4; - }; - - ExternalModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.requireKeyword; - case 1: - return this.openParenToken; - case 2: - return this.stringLiteral; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExternalModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ExternalModuleReferenceSyntax.prototype.update = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - if (this.requireKeyword === requireKeyword && this.openParenToken === openParenToken && this.stringLiteral === stringLiteral && this.closeParenToken === closeParenToken) { - return this; - } - - return new ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, this.parsedInStrictMode()); - }; - - ExternalModuleReferenceSyntax.create1 = function (stringLiteral) { - return new ExternalModuleReferenceSyntax(TypeScript.Syntax.token(66 /* RequireKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), stringLiteral, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ExternalModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withRequireKeyword = function (requireKeyword) { - return this.update(requireKeyword, this.openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.requireKeyword, openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.requireKeyword, this.openParenToken, stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.requireKeyword, this.openParenToken, this.stringLiteral, closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExternalModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax; - - var ModuleNameModuleReferenceSyntax = (function (_super) { - __extends(ModuleNameModuleReferenceSyntax, _super); - function ModuleNameModuleReferenceSyntax(moduleName, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleName = moduleName; - } - ModuleNameModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleNameModuleReference(this); - }; - - ModuleNameModuleReferenceSyntax.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - - ModuleNameModuleReferenceSyntax.prototype.childCount = function () { - return 1; - }; - - ModuleNameModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleName; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleNameModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ModuleNameModuleReferenceSyntax.prototype.update = function (moduleName) { - if (this.moduleName === moduleName) { - return this; - } - - return new ModuleNameModuleReferenceSyntax(moduleName, this.parsedInStrictMode()); - }; - - ModuleNameModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withModuleName = function (moduleName) { - return this.update(moduleName); - }; - - ModuleNameModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleNameModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax; - - var ImportDeclarationSyntax = (function (_super) { - __extends(ImportDeclarationSyntax, _super); - function ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.importKeyword = importKeyword; - this.identifier = identifier; - this.equalsToken = equalsToken; - this.moduleReference = moduleReference; - this.semicolonToken = semicolonToken; - } - ImportDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitImportDeclaration(this); - }; - - ImportDeclarationSyntax.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - ImportDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.importKeyword; - case 2: - return this.identifier; - case 3: - return this.equalsToken; - case 4: - return this.moduleReference; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ImportDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ImportDeclarationSyntax.prototype.update = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - if (this.modifiers === modifiers && this.importKeyword === importKeyword && this.identifier === identifier && this.equalsToken === equalsToken && this.moduleReference === moduleReference && this.semicolonToken === semicolonToken) { - return this; - } - - return new ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, this.parsedInStrictMode()); - }; - - ImportDeclarationSyntax.create = function (importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - - ImportDeclarationSyntax.create1 = function (identifier, moduleReference) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(49 /* ImportKeyword */), identifier, TypeScript.Syntax.token(107 /* EqualsToken */), moduleReference, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ImportDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ImportDeclarationSyntax.prototype.withImportKeyword = function (importKeyword) { - return this.update(this.modifiers, importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.importKeyword, identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModuleReference = function (moduleReference) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, semicolonToken); - }; - - ImportDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ImportDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ImportDeclarationSyntax = ImportDeclarationSyntax; - - var ExportAssignmentSyntax = (function (_super) { - __extends(ExportAssignmentSyntax, _super); - function ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.exportKeyword = exportKeyword; - this.equalsToken = equalsToken; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ExportAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitExportAssignment(this); - }; - - ExportAssignmentSyntax.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignmentSyntax.prototype.childCount = function () { - return 4; - }; - - ExportAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.exportKeyword; - case 1: - return this.equalsToken; - case 2: - return this.identifier; - case 3: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExportAssignmentSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExportAssignmentSyntax.prototype.update = function (exportKeyword, equalsToken, identifier, semicolonToken) { - if (this.exportKeyword === exportKeyword && this.equalsToken === equalsToken && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ExportAssignmentSyntax.create1 = function (identifier) { - return new ExportAssignmentSyntax(TypeScript.Syntax.token(47 /* ExportKeyword */), TypeScript.Syntax.token(107 /* EqualsToken */), identifier, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExportAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withExportKeyword = function (exportKeyword) { - return this.update(exportKeyword, this.equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.exportKeyword, equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.exportKeyword, this.equalsToken, identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.exportKeyword, this.equalsToken, this.identifier, semicolonToken); - }; - - ExportAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExportAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExportAssignmentSyntax = ExportAssignmentSyntax; - - var ClassDeclarationSyntax = (function (_super) { - __extends(ClassDeclarationSyntax, _super); - function ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.classKeyword = classKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.openBraceToken = openBraceToken; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - } - ClassDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitClassDeclaration(this); - }; - - ClassDeclarationSyntax.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclarationSyntax.prototype.childCount = function () { - return 8; - }; - - ClassDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.classKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.openBraceToken; - case 6: - return this.classElements; - case 7: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ClassDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ClassDeclarationSyntax.prototype.update = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - if (this.modifiers === modifiers && this.classKeyword === classKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.openBraceToken === openBraceToken && this.classElements === classElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ClassDeclarationSyntax.create = function (classKeyword, identifier, openBraceToken, closeBraceToken) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, classKeyword, identifier, null, TypeScript.Syntax.emptyList, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ClassDeclarationSyntax.create1 = function (identifier) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(44 /* ClassKeyword */), identifier, null, TypeScript.Syntax.emptyList, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ClassDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ClassDeclarationSyntax.prototype.withClassKeyword = function (classKeyword) { - return this.update(this.modifiers, classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.classKeyword, identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.classKeyword, this.identifier, typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - ClassDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElements = function (classElements) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElement = function (classElement) { - return this.withClassElements(TypeScript.Syntax.list([classElement])); - }; - - ClassDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ClassDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ClassDeclarationSyntax = ClassDeclarationSyntax; - - var InterfaceDeclarationSyntax = (function (_super) { - __extends(InterfaceDeclarationSyntax, _super); - function InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.interfaceKeyword = interfaceKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - } - InterfaceDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitInterfaceDeclaration(this); - }; - - InterfaceDeclarationSyntax.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - InterfaceDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.interfaceKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.body; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InterfaceDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - InterfaceDeclarationSyntax.prototype.update = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - if (this.modifiers === modifiers && this.interfaceKeyword === interfaceKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.body === body) { - return this; - } - - return new InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, this.parsedInStrictMode()); - }; - - InterfaceDeclarationSyntax.create = function (interfaceKeyword, identifier, body) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, interfaceKeyword, identifier, null, TypeScript.Syntax.emptyList, body, false); - }; - - InterfaceDeclarationSyntax.create1 = function (identifier) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(52 /* InterfaceKeyword */), identifier, null, TypeScript.Syntax.emptyList, ObjectTypeSyntax.create1(), false); - }; - - InterfaceDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - InterfaceDeclarationSyntax.prototype.withInterfaceKeyword = function (interfaceKeyword) { - return this.update(this.modifiers, interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.interfaceKeyword, identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - InterfaceDeclarationSyntax.prototype.withBody = function (body) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, body); - }; - - InterfaceDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return InterfaceDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax; - - var HeritageClauseSyntax = (function (_super) { - __extends(HeritageClauseSyntax, _super); - function HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsOrImplementsKeyword = extendsOrImplementsKeyword; - this.typeNames = typeNames; - - this._kind = kind; - } - HeritageClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitHeritageClause(this); - }; - - HeritageClauseSyntax.prototype.childCount = function () { - return 2; - }; - - HeritageClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsOrImplementsKeyword; - case 1: - return this.typeNames; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - HeritageClauseSyntax.prototype.kind = function () { - return this._kind; - }; - - HeritageClauseSyntax.prototype.update = function (kind, extendsOrImplementsKeyword, typeNames) { - if (this._kind === kind && this.extendsOrImplementsKeyword === extendsOrImplementsKeyword && this.typeNames === typeNames) { - return this; - } - - return new HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, this.parsedInStrictMode()); - }; - - HeritageClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withExtendsOrImplementsKeyword = function (extendsOrImplementsKeyword) { - return this.update(this._kind, extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeNames = function (typeNames) { - return this.update(this._kind, this.extendsOrImplementsKeyword, typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeName = function (typeName) { - return this.withTypeNames(TypeScript.Syntax.separatedList([typeName])); - }; - - HeritageClauseSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return HeritageClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.HeritageClauseSyntax = HeritageClauseSyntax; - - var ModuleDeclarationSyntax = (function (_super) { - __extends(ModuleDeclarationSyntax, _super); - function ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.moduleKeyword = moduleKeyword; - this.name = name; - this.stringLiteral = stringLiteral; - this.openBraceToken = openBraceToken; - this.moduleElements = moduleElements; - this.closeBraceToken = closeBraceToken; - } - ModuleDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleDeclaration(this); - }; - - ModuleDeclarationSyntax.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclarationSyntax.prototype.childCount = function () { - return 7; - }; - - ModuleDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.moduleKeyword; - case 2: - return this.name; - case 3: - return this.stringLiteral; - case 4: - return this.openBraceToken; - case 5: - return this.moduleElements; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ModuleDeclarationSyntax.prototype.update = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - if (this.modifiers === modifiers && this.moduleKeyword === moduleKeyword && this.name === name && this.stringLiteral === stringLiteral && this.openBraceToken === openBraceToken && this.moduleElements === moduleElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ModuleDeclarationSyntax.create = function (moduleKeyword, openBraceToken, closeBraceToken) { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, moduleKeyword, null, null, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ModuleDeclarationSyntax.create1 = function () { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(65 /* ModuleKeyword */), null, null, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ModuleDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ModuleDeclarationSyntax.prototype.withModuleKeyword = function (moduleKeyword) { - return this.update(this.modifiers, moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withName = function (name) { - return this.update(this.modifiers, this.moduleKeyword, name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.modifiers, this.moduleKeyword, this.name, stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - ModuleDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleDeclarationSyntax = ModuleDeclarationSyntax; - - var FunctionDeclarationSyntax = (function (_super) { - __extends(FunctionDeclarationSyntax, _super); - function FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - FunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionDeclaration(this); - }; - - FunctionDeclarationSyntax.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - FunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.functionKeyword; - case 2: - return this.identifier; - case 3: - return this.callSignature; - case 4: - return this.block; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionDeclarationSyntax.prototype.isStatement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.update = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - FunctionDeclarationSyntax.create = function (functionKeyword, identifier, callSignature) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, functionKeyword, identifier, callSignature, null, null, false); - }; - - FunctionDeclarationSyntax.create1 = function (identifier) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(27 /* FunctionKeyword */), identifier, CallSignatureSyntax.create1(), null, null, false); - }; - - FunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - FunctionDeclarationSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(this.modifiers, functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.functionKeyword, identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block !== null && this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionDeclarationSyntax = FunctionDeclarationSyntax; - - var VariableStatementSyntax = (function (_super) { - __extends(VariableStatementSyntax, _super); - function VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclaration = variableDeclaration; - this.semicolonToken = semicolonToken; - } - VariableStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableStatement(this); - }; - - VariableStatementSyntax.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatementSyntax.prototype.childCount = function () { - return 3; - }; - - VariableStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclaration; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableStatementSyntax.prototype.isStatement = function () { - return true; - }; - - VariableStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - VariableStatementSyntax.prototype.update = function (modifiers, variableDeclaration, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclaration === variableDeclaration && this.semicolonToken === semicolonToken) { - return this; - } - - return new VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, this.parsedInStrictMode()); - }; - - VariableStatementSyntax.create = function (variableDeclaration, semicolonToken) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, semicolonToken, false); - }; - - VariableStatementSyntax.create1 = function (variableDeclaration) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - VariableStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - VariableStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.modifiers, variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclaration, semicolonToken); - }; - - VariableStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableStatementSyntax = VariableStatementSyntax; - - var VariableDeclarationSyntax = (function (_super) { - __extends(VariableDeclarationSyntax, _super); - function VariableDeclarationSyntax(varKeyword, variableDeclarators, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.varKeyword = varKeyword; - this.variableDeclarators = variableDeclarators; - } - VariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclaration(this); - }; - - VariableDeclarationSyntax.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclarationSyntax.prototype.childCount = function () { - return 2; - }; - - VariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.varKeyword; - case 1: - return this.variableDeclarators; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclarationSyntax.prototype.update = function (varKeyword, variableDeclarators) { - if (this.varKeyword === varKeyword && this.variableDeclarators === variableDeclarators) { - return this; - } - - return new VariableDeclarationSyntax(varKeyword, variableDeclarators, this.parsedInStrictMode()); - }; - - VariableDeclarationSyntax.create1 = function (variableDeclarators) { - return new VariableDeclarationSyntax(TypeScript.Syntax.token(40 /* VarKeyword */), variableDeclarators, false); - }; - - VariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withVarKeyword = function (varKeyword) { - return this.update(varKeyword, this.variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarators = function (variableDeclarators) { - return this.update(this.varKeyword, variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.withVariableDeclarators(TypeScript.Syntax.separatedList([variableDeclarator])); - }; - - VariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclarators.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclarationSyntax = VariableDeclarationSyntax; - - var VariableDeclaratorSyntax = (function (_super) { - __extends(VariableDeclaratorSyntax, _super); - function VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - VariableDeclaratorSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclarator(this); - }; - - VariableDeclaratorSyntax.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - - VariableDeclaratorSyntax.prototype.childCount = function () { - return 3; - }; - - VariableDeclaratorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.typeAnnotation; - case 2: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclaratorSyntax.prototype.update = function (propertyName, typeAnnotation, equalsValueClause) { - if (this.propertyName === propertyName && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - VariableDeclaratorSyntax.create = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.create1 = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, this.typeAnnotation, equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclaratorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclaratorSyntax = VariableDeclaratorSyntax; - - var EqualsValueClauseSyntax = (function (_super) { - __extends(EqualsValueClauseSyntax, _super); - function EqualsValueClauseSyntax(equalsToken, value, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.equalsToken = equalsToken; - this.value = value; - } - EqualsValueClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitEqualsValueClause(this); - }; - - EqualsValueClauseSyntax.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - - EqualsValueClauseSyntax.prototype.childCount = function () { - return 2; - }; - - EqualsValueClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.equalsToken; - case 1: - return this.value; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EqualsValueClauseSyntax.prototype.update = function (equalsToken, value) { - if (this.equalsToken === equalsToken && this.value === value) { - return this; - } - - return new EqualsValueClauseSyntax(equalsToken, value, this.parsedInStrictMode()); - }; - - EqualsValueClauseSyntax.create1 = function (value) { - return new EqualsValueClauseSyntax(TypeScript.Syntax.token(107 /* EqualsToken */), value, false); - }; - - EqualsValueClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(equalsToken, this.value); - }; - - EqualsValueClauseSyntax.prototype.withValue = function (value) { - return this.update(this.equalsToken, value); - }; - - EqualsValueClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.value.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EqualsValueClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EqualsValueClauseSyntax = EqualsValueClauseSyntax; - - var PrefixUnaryExpressionSyntax = (function (_super) { - __extends(PrefixUnaryExpressionSyntax, _super); - function PrefixUnaryExpressionSyntax(kind, operatorToken, operand, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operatorToken = operatorToken; - this.operand = operand; - - this._kind = kind; - } - PrefixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPrefixUnaryExpression(this); - }; - - PrefixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PrefixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operatorToken; - case 1: - return this.operand; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PrefixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PrefixUnaryExpressionSyntax.prototype.update = function (kind, operatorToken, operand) { - if (this._kind === kind && this.operatorToken === operatorToken && this.operand === operand) { - return this; - } - - return new PrefixUnaryExpressionSyntax(kind, operatorToken, operand, this.parsedInStrictMode()); - }; - - PrefixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, this.operatorToken, operand); - }; - - PrefixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PrefixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax; - - var ArrayLiteralExpressionSyntax = (function (_super) { - __extends(ArrayLiteralExpressionSyntax, _super); - function ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.expressions = expressions; - this.closeBracketToken = closeBracketToken; - } - ArrayLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayLiteralExpression(this); - }; - - ArrayLiteralExpressionSyntax.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.expressions; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.update = function (openBracketToken, expressions, closeBracketToken) { - if (this.openBracketToken === openBracketToken && this.expressions === expressions && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayLiteralExpressionSyntax.create = function (openBracketToken, closeBracketToken) { - return new ArrayLiteralExpressionSyntax(openBracketToken, TypeScript.Syntax.emptySeparatedList, closeBracketToken, false); - }; - - ArrayLiteralExpressionSyntax.create1 = function () { - return new ArrayLiteralExpressionSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpressions = function (expressions) { - return this.update(this.openBracketToken, expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpression = function (expression) { - return this.withExpressions(TypeScript.Syntax.separatedList([expression])); - }; - - ArrayLiteralExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.expressions, closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expressions.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArrayLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax; - - var OmittedExpressionSyntax = (function (_super) { - __extends(OmittedExpressionSyntax, _super); - function OmittedExpressionSyntax(parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - } - OmittedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitOmittedExpression(this); - }; - - OmittedExpressionSyntax.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpressionSyntax.prototype.childCount = function () { - return 0; - }; - - OmittedExpressionSyntax.prototype.childAt = function (slot) { - throw TypeScript.Errors.invalidOperation(); - }; - - OmittedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - OmittedExpressionSyntax.prototype.update = function () { - return this; - }; - - OmittedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return OmittedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.OmittedExpressionSyntax = OmittedExpressionSyntax; - - var ParenthesizedExpressionSyntax = (function (_super) { - __extends(ParenthesizedExpressionSyntax, _super); - function ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - } - ParenthesizedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedExpression(this); - }; - - ParenthesizedExpressionSyntax.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ParenthesizedExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.expression; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.update = function (openParenToken, expression, closeParenToken) { - if (this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, this.parsedInStrictMode()); - }; - - ParenthesizedExpressionSyntax.create1 = function (expression) { - return new ParenthesizedExpressionSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParenthesizedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.openParenToken, expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.expression, closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParenthesizedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax; - - var SimpleArrowFunctionExpressionSyntax = (function (_super) { - __extends(SimpleArrowFunctionExpressionSyntax, _super); - function SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - SimpleArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitSimpleArrowFunctionExpression(this); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.update = function (identifier, equalsGreaterThanToken, block, expression) { - if (this.identifier === identifier && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - SimpleArrowFunctionExpressionSyntax.create = function (identifier, equalsGreaterThanToken) { - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.create1 = function (identifier) { - return new SimpleArrowFunctionExpressionSyntax(identifier, TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.identifier, equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.identifier, this.equalsGreaterThanToken, block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.identifier, this.equalsGreaterThanToken, this.block, expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SimpleArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax; - - var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) { - __extends(ParenthesizedArrowFunctionExpressionSyntax, _super); - function ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.callSignature = callSignature; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - ParenthesizedArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedArrowFunctionExpression(this); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.callSignature; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.update = function (callSignature, equalsGreaterThanToken, block, expression) { - if (this.callSignature === callSignature && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create = function (callSignature, equalsGreaterThanToken) { - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create1 = function () { - return new ParenthesizedArrowFunctionExpressionSyntax(CallSignatureSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(callSignature, this.equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.callSignature, equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.callSignature, this.equalsGreaterThanToken, block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.callSignature, this.equalsGreaterThanToken, this.block, expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ParenthesizedArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax; - - var QualifiedNameSyntax = (function (_super) { - __extends(QualifiedNameSyntax, _super); - function QualifiedNameSyntax(left, dotToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.dotToken = dotToken; - this.right = right; - } - QualifiedNameSyntax.prototype.accept = function (visitor) { - return visitor.visitQualifiedName(this); - }; - - QualifiedNameSyntax.prototype.kind = function () { - return 121 /* QualifiedName */; - }; - - QualifiedNameSyntax.prototype.childCount = function () { - return 3; - }; - - QualifiedNameSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.dotToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - QualifiedNameSyntax.prototype.isName = function () { - return true; - }; - - QualifiedNameSyntax.prototype.isType = function () { - return true; - }; - - QualifiedNameSyntax.prototype.update = function (left, dotToken, right) { - if (this.left === left && this.dotToken === dotToken && this.right === right) { - return this; - } - - return new QualifiedNameSyntax(left, dotToken, right, this.parsedInStrictMode()); - }; - - QualifiedNameSyntax.create1 = function (left, right) { - return new QualifiedNameSyntax(left, TypeScript.Syntax.token(76 /* DotToken */), right, false); - }; - - QualifiedNameSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withLeft = function (left) { - return this.update(left, this.dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.left, dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withRight = function (right) { - return this.update(this.left, this.dotToken, right); - }; - - QualifiedNameSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return QualifiedNameSyntax; - })(TypeScript.SyntaxNode); - TypeScript.QualifiedNameSyntax = QualifiedNameSyntax; - - var TypeArgumentListSyntax = (function (_super) { - __extends(TypeArgumentListSyntax, _super); - function TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeArguments = typeArguments; - this.greaterThanToken = greaterThanToken; - } - TypeArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeArgumentList(this); - }; - - TypeArgumentListSyntax.prototype.kind = function () { - return 228 /* TypeArgumentList */; - }; - - TypeArgumentListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeArguments; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeArgumentListSyntax.prototype.update = function (lessThanToken, typeArguments, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeArguments === typeArguments && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeArgumentListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeArgumentListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeArgumentListSyntax.create1 = function () { - return new TypeArgumentListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArguments = function (typeArguments) { - return this.update(this.lessThanToken, typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArgument = function (typeArgument) { - return this.withTypeArguments(TypeScript.Syntax.separatedList([typeArgument])); - }; - - TypeArgumentListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeArguments, greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeArgumentListSyntax = TypeArgumentListSyntax; - - var ConstructorTypeSyntax = (function (_super) { - __extends(ConstructorTypeSyntax, _super); - function ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - ConstructorTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorType(this); - }; - - ConstructorTypeSyntax.prototype.kind = function () { - return 125 /* ConstructorType */; - }; - - ConstructorTypeSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.typeParameterList; - case 2: - return this.parameterList; - case 3: - return this.equalsGreaterThanToken; - case 4: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorTypeSyntax.prototype.isType = function () { - return true; - }; - - ConstructorTypeSyntax.prototype.update = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.newKeyword === newKeyword && this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - ConstructorTypeSyntax.create = function (newKeyword, parameterList, equalsGreaterThanToken, type) { - return new ConstructorTypeSyntax(newKeyword, null, parameterList, equalsGreaterThanToken, type, false); - }; - - ConstructorTypeSyntax.create1 = function (type) { - return new ConstructorTypeSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - ConstructorTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.newKeyword, typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.newKeyword, this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withType = function (type) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - ConstructorTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorTypeSyntax = ConstructorTypeSyntax; - - var FunctionTypeSyntax = (function (_super) { - __extends(FunctionTypeSyntax, _super); - function FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - FunctionTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionType(this); - }; - - FunctionTypeSyntax.prototype.kind = function () { - return 123 /* FunctionType */; - }; - - FunctionTypeSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.equalsGreaterThanToken; - case 3: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionTypeSyntax.prototype.isType = function () { - return true; - }; - - FunctionTypeSyntax.prototype.update = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - FunctionTypeSyntax.create = function (parameterList, equalsGreaterThanToken, type) { - return new FunctionTypeSyntax(null, parameterList, equalsGreaterThanToken, type, false); - }; - - FunctionTypeSyntax.create1 = function (type) { - return new FunctionTypeSyntax(null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - FunctionTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withType = function (type) { - return this.update(this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - FunctionTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return FunctionTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionTypeSyntax = FunctionTypeSyntax; - - var ObjectTypeSyntax = (function (_super) { - __extends(ObjectTypeSyntax, _super); - function ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.typeMembers = typeMembers; - this.closeBraceToken = closeBraceToken; - } - ObjectTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectType(this); - }; - - ObjectTypeSyntax.prototype.kind = function () { - return 122 /* ObjectType */; - }; - - ObjectTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.typeMembers; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectTypeSyntax.prototype.isType = function () { - return true; - }; - - ObjectTypeSyntax.prototype.update = function (openBraceToken, typeMembers, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.typeMembers === typeMembers && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectTypeSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectTypeSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectTypeSyntax.create1 = function () { - return new ObjectTypeSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMembers = function (typeMembers) { - return this.update(this.openBraceToken, typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMember = function (typeMember) { - return this.withTypeMembers(TypeScript.Syntax.separatedList([typeMember])); - }; - - ObjectTypeSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.typeMembers, closeBraceToken); - }; - - ObjectTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ObjectTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectTypeSyntax = ObjectTypeSyntax; - - var ArrayTypeSyntax = (function (_super) { - __extends(ArrayTypeSyntax, _super); - function ArrayTypeSyntax(type, openBracketToken, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.type = type; - this.openBracketToken = openBracketToken; - this.closeBracketToken = closeBracketToken; - } - ArrayTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayType(this); - }; - - ArrayTypeSyntax.prototype.kind = function () { - return 124 /* ArrayType */; - }; - - ArrayTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.type; - case 1: - return this.openBracketToken; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayTypeSyntax.prototype.isType = function () { - return true; - }; - - ArrayTypeSyntax.prototype.update = function (type, openBracketToken, closeBracketToken) { - if (this.type === type && this.openBracketToken === openBracketToken && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayTypeSyntax(type, openBracketToken, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayTypeSyntax.create1 = function (type) { - return new ArrayTypeSyntax(type, TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withType = function (type) { - return this.update(type, this.openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.type, openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.type, this.openBracketToken, closeBracketToken); - }; - - ArrayTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ArrayTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayTypeSyntax = ArrayTypeSyntax; - - var GenericTypeSyntax = (function (_super) { - __extends(GenericTypeSyntax, _super); - function GenericTypeSyntax(name, typeArgumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.name = name; - this.typeArgumentList = typeArgumentList; - } - GenericTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitGenericType(this); - }; - - GenericTypeSyntax.prototype.kind = function () { - return 126 /* GenericType */; - }; - - GenericTypeSyntax.prototype.childCount = function () { - return 2; - }; - - GenericTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.name; - case 1: - return this.typeArgumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GenericTypeSyntax.prototype.isType = function () { - return true; - }; - - GenericTypeSyntax.prototype.update = function (name, typeArgumentList) { - if (this.name === name && this.typeArgumentList === typeArgumentList) { - return this; - } - - return new GenericTypeSyntax(name, typeArgumentList, this.parsedInStrictMode()); - }; - - GenericTypeSyntax.create1 = function (name) { - return new GenericTypeSyntax(name, TypeArgumentListSyntax.create1(), false); - }; - - GenericTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withName = function (name) { - return this.update(name, this.typeArgumentList); - }; - - GenericTypeSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(this.name, typeArgumentList); - }; - - GenericTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return GenericTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GenericTypeSyntax = GenericTypeSyntax; - - var TypeQuerySyntax = (function (_super) { - __extends(TypeQuerySyntax, _super); - function TypeQuerySyntax(typeOfKeyword, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.name = name; - } - TypeQuerySyntax.prototype.accept = function (visitor) { - return visitor.visitTypeQuery(this); - }; - - TypeQuerySyntax.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuerySyntax.prototype.childCount = function () { - return 2; - }; - - TypeQuerySyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeQuerySyntax.prototype.isType = function () { - return true; - }; - - TypeQuerySyntax.prototype.update = function (typeOfKeyword, name) { - if (this.typeOfKeyword === typeOfKeyword && this.name === name) { - return this; - } - - return new TypeQuerySyntax(typeOfKeyword, name, this.parsedInStrictMode()); - }; - - TypeQuerySyntax.create1 = function (name) { - return new TypeQuerySyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), name, false); - }; - - TypeQuerySyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.name); - }; - - TypeQuerySyntax.prototype.withName = function (name) { - return this.update(this.typeOfKeyword, name); - }; - - TypeQuerySyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeQuerySyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeQuerySyntax = TypeQuerySyntax; - - var TypeAnnotationSyntax = (function (_super) { - __extends(TypeAnnotationSyntax, _super); - function TypeAnnotationSyntax(colonToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.colonToken = colonToken; - this.type = type; - } - TypeAnnotationSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeAnnotation(this); - }; - - TypeAnnotationSyntax.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - - TypeAnnotationSyntax.prototype.childCount = function () { - return 2; - }; - - TypeAnnotationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.colonToken; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeAnnotationSyntax.prototype.update = function (colonToken, type) { - if (this.colonToken === colonToken && this.type === type) { - return this; - } - - return new TypeAnnotationSyntax(colonToken, type, this.parsedInStrictMode()); - }; - - TypeAnnotationSyntax.create1 = function (type) { - return new TypeAnnotationSyntax(TypeScript.Syntax.token(106 /* ColonToken */), type, false); - }; - - TypeAnnotationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withColonToken = function (colonToken) { - return this.update(colonToken, this.type); - }; - - TypeAnnotationSyntax.prototype.withType = function (type) { - return this.update(this.colonToken, type); - }; - - TypeAnnotationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeAnnotationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeAnnotationSyntax = TypeAnnotationSyntax; - - var BlockSyntax = (function (_super) { - __extends(BlockSyntax, _super); - function BlockSyntax(openBraceToken, statements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.statements = statements; - this.closeBraceToken = closeBraceToken; - } - BlockSyntax.prototype.accept = function (visitor) { - return visitor.visitBlock(this); - }; - - BlockSyntax.prototype.kind = function () { - return 146 /* Block */; - }; - - BlockSyntax.prototype.childCount = function () { - return 3; - }; - - BlockSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.statements; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BlockSyntax.prototype.isStatement = function () { - return true; - }; - - BlockSyntax.prototype.isModuleElement = function () { - return true; - }; - - BlockSyntax.prototype.update = function (openBraceToken, statements, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.statements === statements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new BlockSyntax(openBraceToken, statements, closeBraceToken, this.parsedInStrictMode()); - }; - - BlockSyntax.create = function (openBraceToken, closeBraceToken) { - return new BlockSyntax(openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - BlockSyntax.create1 = function () { - return new BlockSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - BlockSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatements = function (statements) { - return this.update(this.openBraceToken, statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - BlockSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.statements, closeBraceToken); - }; - - BlockSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BlockSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BlockSyntax = BlockSyntax; - - var ParameterSyntax = (function (_super) { - __extends(ParameterSyntax, _super); - function ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - ParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitParameter(this); - }; - - ParameterSyntax.prototype.kind = function () { - return 242 /* Parameter */; - }; - - ParameterSyntax.prototype.childCount = function () { - return 6; - }; - - ParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.dotDotDotToken; - case 1: - return this.modifiers; - case 2: - return this.identifier; - case 3: - return this.questionToken; - case 4: - return this.typeAnnotation; - case 5: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterSyntax.prototype.update = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - if (this.dotDotDotToken === dotDotDotToken && this.modifiers === modifiers && this.identifier === identifier && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - ParameterSyntax.create = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.create1 = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withDotDotDotToken = function (dotDotDotToken) { - return this.update(dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifiers = function (modifiers) { - return this.update(this.dotDotDotToken, modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.dotDotDotToken, this.modifiers, identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, equalsValueClause); - }; - - ParameterSyntax.prototype.isTypeScriptSpecific = function () { - if (this.dotDotDotToken !== null) { - return true; - } - if (this.modifiers.isTypeScriptSpecific()) { - return true; - } - if (this.questionToken !== null) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null) { - return true; - } - return false; - }; - return ParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterSyntax = ParameterSyntax; - - var MemberAccessExpressionSyntax = (function (_super) { - __extends(MemberAccessExpressionSyntax, _super); - function MemberAccessExpressionSyntax(expression, dotToken, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.dotToken = dotToken; - this.name = name; - } - MemberAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberAccessExpression(this); - }; - - MemberAccessExpressionSyntax.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - MemberAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.dotToken; - case 2: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.update = function (expression, dotToken, name) { - if (this.expression === expression && this.dotToken === dotToken && this.name === name) { - return this; - } - - return new MemberAccessExpressionSyntax(expression, dotToken, name, this.parsedInStrictMode()); - }; - - MemberAccessExpressionSyntax.create1 = function (expression, name) { - return new MemberAccessExpressionSyntax(expression, TypeScript.Syntax.token(76 /* DotToken */), name, false); - }; - - MemberAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.expression, dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withName = function (name) { - return this.update(this.expression, this.dotToken, name); - }; - - MemberAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MemberAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax; - - var PostfixUnaryExpressionSyntax = (function (_super) { - __extends(PostfixUnaryExpressionSyntax, _super); - function PostfixUnaryExpressionSyntax(kind, operand, operatorToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operand = operand; - this.operatorToken = operatorToken; - - this._kind = kind; - } - PostfixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPostfixUnaryExpression(this); - }; - - PostfixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PostfixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operand; - case 1: - return this.operatorToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PostfixUnaryExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PostfixUnaryExpressionSyntax.prototype.update = function (kind, operand, operatorToken) { - if (this._kind === kind && this.operand === operand && this.operatorToken === operatorToken) { - return this; - } - - return new PostfixUnaryExpressionSyntax(kind, operand, operatorToken, this.parsedInStrictMode()); - }; - - PostfixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.operand, operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PostfixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax; - - var ElementAccessExpressionSyntax = (function (_super) { - __extends(ElementAccessExpressionSyntax, _super); - function ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.openBracketToken = openBracketToken; - this.argumentExpression = argumentExpression; - this.closeBracketToken = closeBracketToken; - } - ElementAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitElementAccessExpression(this); - }; - - ElementAccessExpressionSyntax.prototype.kind = function () { - return 221 /* ElementAccessExpression */; - }; - - ElementAccessExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ElementAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.openBracketToken; - case 2: - return this.argumentExpression; - case 3: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElementAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.update = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - if (this.expression === expression && this.openBracketToken === openBracketToken && this.argumentExpression === argumentExpression && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, this.parsedInStrictMode()); - }; - - ElementAccessExpressionSyntax.create1 = function (expression, argumentExpression) { - return new ElementAccessExpressionSyntax(expression, TypeScript.Syntax.token(74 /* OpenBracketToken */), argumentExpression, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ElementAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.expression, openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withArgumentExpression = function (argumentExpression) { - return this.update(this.expression, this.openBracketToken, argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.expression, this.openBracketToken, this.argumentExpression, closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentExpression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElementAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax; - - var InvocationExpressionSyntax = (function (_super) { - __extends(InvocationExpressionSyntax, _super); - function InvocationExpressionSyntax(expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.argumentList = argumentList; - } - InvocationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitInvocationExpression(this); - }; - - InvocationExpressionSyntax.prototype.kind = function () { - return 213 /* InvocationExpression */; - }; - - InvocationExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - InvocationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InvocationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.update = function (expression, argumentList) { - if (this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new InvocationExpressionSyntax(expression, argumentList, this.parsedInStrictMode()); - }; - - InvocationExpressionSyntax.create1 = function (expression) { - return new InvocationExpressionSyntax(expression, ArgumentListSyntax.create1(), false); - }; - - InvocationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.argumentList); - }; - - InvocationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.expression, argumentList); - }; - - InvocationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return InvocationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InvocationExpressionSyntax = InvocationExpressionSyntax; - - var ArgumentListSyntax = (function (_super) { - __extends(ArgumentListSyntax, _super); - function ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeArgumentList = typeArgumentList; - this.openParenToken = openParenToken; - this.closeParenToken = closeParenToken; - - this.arguments = _arguments; - } - ArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitArgumentList(this); - }; - - ArgumentListSyntax.prototype.kind = function () { - return 226 /* ArgumentList */; - }; - - ArgumentListSyntax.prototype.childCount = function () { - return 4; - }; - - ArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeArgumentList; - case 1: - return this.openParenToken; - case 2: - return this.arguments; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArgumentListSyntax.prototype.update = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - if (this.typeArgumentList === typeArgumentList && this.openParenToken === openParenToken && this.arguments === _arguments && this.closeParenToken === closeParenToken) { - return this; - } - - return new ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, this.parsedInStrictMode()); - }; - - ArgumentListSyntax.create = function (openParenToken, closeParenToken) { - return new ArgumentListSyntax(null, openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ArgumentListSyntax.create1 = function () { - return new ArgumentListSyntax(null, TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(typeArgumentList, this.openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.typeArgumentList, openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArguments = function (_arguments) { - return this.update(this.typeArgumentList, this.openParenToken, _arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArgument = function (_argument) { - return this.withArguments(TypeScript.Syntax.separatedList([_argument])); - }; - - ArgumentListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.typeArgumentList, this.openParenToken, this.arguments, closeParenToken); - }; - - ArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeArgumentList !== null && this.typeArgumentList.isTypeScriptSpecific()) { - return true; - } - if (this.arguments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArgumentListSyntax = ArgumentListSyntax; - - var BinaryExpressionSyntax = (function (_super) { - __extends(BinaryExpressionSyntax, _super); - function BinaryExpressionSyntax(kind, left, operatorToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.operatorToken = operatorToken; - this.right = right; - - this._kind = kind; - } - BinaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitBinaryExpression(this); - }; - - BinaryExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - BinaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.operatorToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BinaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - BinaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - BinaryExpressionSyntax.prototype.update = function (kind, left, operatorToken, right) { - if (this._kind === kind && this.left === left && this.operatorToken === operatorToken && this.right === right) { - return this; - } - - return new BinaryExpressionSyntax(kind, left, operatorToken, right, this.parsedInStrictMode()); - }; - - BinaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withLeft = function (left) { - return this.update(this._kind, left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.left, operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withRight = function (right) { - return this.update(this._kind, this.left, this.operatorToken, right); - }; - - BinaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.left.isTypeScriptSpecific()) { - return true; - } - if (this.right.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BinaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BinaryExpressionSyntax = BinaryExpressionSyntax; - - var ConditionalExpressionSyntax = (function (_super) { - __extends(ConditionalExpressionSyntax, _super); - function ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.condition = condition; - this.questionToken = questionToken; - this.whenTrue = whenTrue; - this.colonToken = colonToken; - this.whenFalse = whenFalse; - } - ConditionalExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitConditionalExpression(this); - }; - - ConditionalExpressionSyntax.prototype.kind = function () { - return 186 /* ConditionalExpression */; - }; - - ConditionalExpressionSyntax.prototype.childCount = function () { - return 5; - }; - - ConditionalExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.condition; - case 1: - return this.questionToken; - case 2: - return this.whenTrue; - case 3: - return this.colonToken; - case 4: - return this.whenFalse; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConditionalExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ConditionalExpressionSyntax.prototype.update = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - if (this.condition === condition && this.questionToken === questionToken && this.whenTrue === whenTrue && this.colonToken === colonToken && this.whenFalse === whenFalse) { - return this; - } - - return new ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, this.parsedInStrictMode()); - }; - - ConditionalExpressionSyntax.create1 = function (condition, whenTrue, whenFalse) { - return new ConditionalExpressionSyntax(condition, TypeScript.Syntax.token(105 /* QuestionToken */), whenTrue, TypeScript.Syntax.token(106 /* ColonToken */), whenFalse, false); - }; - - ConditionalExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withCondition = function (condition) { - return this.update(condition, this.questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.condition, questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenTrue = function (whenTrue) { - return this.update(this.condition, this.questionToken, whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.condition, this.questionToken, this.whenTrue, colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenFalse = function (whenFalse) { - return this.update(this.condition, this.questionToken, this.whenTrue, this.colonToken, whenFalse); - }; - - ConditionalExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.whenTrue.isTypeScriptSpecific()) { - return true; - } - if (this.whenFalse.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ConditionalExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConditionalExpressionSyntax = ConditionalExpressionSyntax; - - var ConstructSignatureSyntax = (function (_super) { - __extends(ConstructSignatureSyntax, _super); - function ConstructSignatureSyntax(newKeyword, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.callSignature = callSignature; - } - ConstructSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructSignature(this); - }; - - ConstructSignatureSyntax.prototype.kind = function () { - return 143 /* ConstructSignature */; - }; - - ConstructSignatureSyntax.prototype.childCount = function () { - return 2; - }; - - ConstructSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - ConstructSignatureSyntax.prototype.update = function (newKeyword, callSignature) { - if (this.newKeyword === newKeyword && this.callSignature === callSignature) { - return this; - } - - return new ConstructSignatureSyntax(newKeyword, callSignature, this.parsedInStrictMode()); - }; - - ConstructSignatureSyntax.create1 = function () { - return new ConstructSignatureSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), CallSignatureSyntax.create1(), false); - }; - - ConstructSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.callSignature); - }; - - ConstructSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.newKeyword, callSignature); - }; - - ConstructSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructSignatureSyntax = ConstructSignatureSyntax; - - var MethodSignatureSyntax = (function (_super) { - __extends(MethodSignatureSyntax, _super); - function MethodSignatureSyntax(propertyName, questionToken, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - } - MethodSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitMethodSignature(this); - }; - - MethodSignatureSyntax.prototype.kind = function () { - return 145 /* MethodSignature */; - }; - - MethodSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - MethodSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MethodSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - MethodSignatureSyntax.prototype.update = function (propertyName, questionToken, callSignature) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.callSignature === callSignature) { - return this; - } - - return new MethodSignatureSyntax(propertyName, questionToken, callSignature, this.parsedInStrictMode()); - }; - - MethodSignatureSyntax.create = function (propertyName, callSignature) { - return new MethodSignatureSyntax(propertyName, null, callSignature, false); - }; - - MethodSignatureSyntax.create1 = function (propertyName) { - return new MethodSignatureSyntax(propertyName, null, CallSignatureSyntax.create1(), false); - }; - - MethodSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, this.questionToken, callSignature); - }; - - MethodSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MethodSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MethodSignatureSyntax = MethodSignatureSyntax; - - var IndexSignatureSyntax = (function (_super) { - __extends(IndexSignatureSyntax, _super); - function IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.parameter = parameter; - this.closeBracketToken = closeBracketToken; - this.typeAnnotation = typeAnnotation; - } - IndexSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexSignature(this); - }; - - IndexSignatureSyntax.prototype.kind = function () { - return 144 /* IndexSignature */; - }; - - IndexSignatureSyntax.prototype.childCount = function () { - return 4; - }; - - IndexSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.parameter; - case 2: - return this.closeBracketToken; - case 3: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - IndexSignatureSyntax.prototype.update = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - if (this.openBracketToken === openBracketToken && this.parameter === parameter && this.closeBracketToken === closeBracketToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, this.parsedInStrictMode()); - }; - - IndexSignatureSyntax.create = function (openBracketToken, parameter, closeBracketToken) { - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, null, false); - }; - - IndexSignatureSyntax.create1 = function (parameter) { - return new IndexSignatureSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), parameter, TypeScript.Syntax.token(75 /* CloseBracketToken */), null, false); - }; - - IndexSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withParameter = function (parameter) { - return this.update(this.openBracketToken, parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.parameter, closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.openBracketToken, this.parameter, this.closeBracketToken, typeAnnotation); - }; - - IndexSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexSignatureSyntax = IndexSignatureSyntax; - - var PropertySignatureSyntax = (function (_super) { - __extends(PropertySignatureSyntax, _super); - function PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - } - PropertySignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitPropertySignature(this); - }; - - PropertySignatureSyntax.prototype.kind = function () { - return 141 /* PropertySignature */; - }; - - PropertySignatureSyntax.prototype.childCount = function () { - return 3; - }; - - PropertySignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PropertySignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - PropertySignatureSyntax.prototype.update = function (propertyName, questionToken, typeAnnotation) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, this.parsedInStrictMode()); - }; - - PropertySignatureSyntax.create = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.create1 = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, this.questionToken, typeAnnotation); - }; - - PropertySignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return PropertySignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PropertySignatureSyntax = PropertySignatureSyntax; - - var CallSignatureSyntax = (function (_super) { - __extends(CallSignatureSyntax, _super); - function CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - } - CallSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitCallSignature(this); - }; - - CallSignatureSyntax.prototype.kind = function () { - return 142 /* CallSignature */; - }; - - CallSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - CallSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CallSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - CallSignatureSyntax.prototype.update = function (typeParameterList, parameterList, typeAnnotation) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, this.parsedInStrictMode()); - }; - - CallSignatureSyntax.create = function (parameterList) { - return new CallSignatureSyntax(null, parameterList, null, false); - }; - - CallSignatureSyntax.create1 = function () { - return new CallSignatureSyntax(null, ParameterListSyntax.create1(), null, false); - }; - - CallSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.typeParameterList, this.parameterList, typeAnnotation); - }; - - CallSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeParameterList !== null) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - return false; - }; - return CallSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CallSignatureSyntax = CallSignatureSyntax; - - var ParameterListSyntax = (function (_super) { - __extends(ParameterListSyntax, _super); - function ParameterListSyntax(openParenToken, parameters, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.parameters = parameters; - this.closeParenToken = closeParenToken; - } - ParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitParameterList(this); - }; - - ParameterListSyntax.prototype.kind = function () { - return 227 /* ParameterList */; - }; - - ParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - ParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.parameters; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterListSyntax.prototype.update = function (openParenToken, parameters, closeParenToken) { - if (this.openParenToken === openParenToken && this.parameters === parameters && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParameterListSyntax(openParenToken, parameters, closeParenToken, this.parsedInStrictMode()); - }; - - ParameterListSyntax.create = function (openParenToken, closeParenToken) { - return new ParameterListSyntax(openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ParameterListSyntax.create1 = function () { - return new ParameterListSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameters = function (parameters) { - return this.update(this.openParenToken, parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameter = function (parameter) { - return this.withParameters(TypeScript.Syntax.separatedList([parameter])); - }; - - ParameterListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.parameters, closeParenToken); - }; - - ParameterListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.parameters.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterListSyntax = ParameterListSyntax; - - var TypeParameterListSyntax = (function (_super) { - __extends(TypeParameterListSyntax, _super); - function TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeParameters = typeParameters; - this.greaterThanToken = greaterThanToken; - } - TypeParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameterList(this); - }; - - TypeParameterListSyntax.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - - TypeParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeParameters; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterListSyntax.prototype.update = function (lessThanToken, typeParameters, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeParameters === typeParameters && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeParameterListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeParameterListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeParameterListSyntax.create1 = function () { - return new TypeParameterListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameters = function (typeParameters) { - return this.update(this.lessThanToken, typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameter = function (typeParameter) { - return this.withTypeParameters(TypeScript.Syntax.separatedList([typeParameter])); - }; - - TypeParameterListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeParameters, greaterThanToken); - }; - - TypeParameterListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterListSyntax = TypeParameterListSyntax; - - var TypeParameterSyntax = (function (_super) { - __extends(TypeParameterSyntax, _super); - function TypeParameterSyntax(identifier, constraint, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.constraint = constraint; - } - TypeParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameter(this); - }; - - TypeParameterSyntax.prototype.kind = function () { - return 238 /* TypeParameter */; - }; - - TypeParameterSyntax.prototype.childCount = function () { - return 2; - }; - - TypeParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.constraint; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterSyntax.prototype.update = function (identifier, constraint) { - if (this.identifier === identifier && this.constraint === constraint) { - return this; - } - - return new TypeParameterSyntax(identifier, constraint, this.parsedInStrictMode()); - }; - - TypeParameterSyntax.create = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.create1 = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.constraint); - }; - - TypeParameterSyntax.prototype.withConstraint = function (constraint) { - return this.update(this.identifier, constraint); - }; - - TypeParameterSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterSyntax = TypeParameterSyntax; - - var ConstraintSyntax = (function (_super) { - __extends(ConstraintSyntax, _super); - function ConstraintSyntax(extendsKeyword, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsKeyword = extendsKeyword; - this.type = type; - } - ConstraintSyntax.prototype.accept = function (visitor) { - return visitor.visitConstraint(this); - }; - - ConstraintSyntax.prototype.kind = function () { - return 239 /* Constraint */; - }; - - ConstraintSyntax.prototype.childCount = function () { - return 2; - }; - - ConstraintSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsKeyword; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstraintSyntax.prototype.update = function (extendsKeyword, type) { - if (this.extendsKeyword === extendsKeyword && this.type === type) { - return this; - } - - return new ConstraintSyntax(extendsKeyword, type, this.parsedInStrictMode()); - }; - - ConstraintSyntax.create1 = function (type) { - return new ConstraintSyntax(TypeScript.Syntax.token(48 /* ExtendsKeyword */), type, false); - }; - - ConstraintSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withExtendsKeyword = function (extendsKeyword) { - return this.update(extendsKeyword, this.type); - }; - - ConstraintSyntax.prototype.withType = function (type) { - return this.update(this.extendsKeyword, type); - }; - - ConstraintSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstraintSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstraintSyntax = ConstraintSyntax; - - var ElseClauseSyntax = (function (_super) { - __extends(ElseClauseSyntax, _super); - function ElseClauseSyntax(elseKeyword, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.elseKeyword = elseKeyword; - this.statement = statement; - } - ElseClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitElseClause(this); - }; - - ElseClauseSyntax.prototype.kind = function () { - return 235 /* ElseClause */; - }; - - ElseClauseSyntax.prototype.childCount = function () { - return 2; - }; - - ElseClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.elseKeyword; - case 1: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElseClauseSyntax.prototype.update = function (elseKeyword, statement) { - if (this.elseKeyword === elseKeyword && this.statement === statement) { - return this; - } - - return new ElseClauseSyntax(elseKeyword, statement, this.parsedInStrictMode()); - }; - - ElseClauseSyntax.create1 = function (statement) { - return new ElseClauseSyntax(TypeScript.Syntax.token(23 /* ElseKeyword */), statement, false); - }; - - ElseClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withElseKeyword = function (elseKeyword) { - return this.update(elseKeyword, this.statement); - }; - - ElseClauseSyntax.prototype.withStatement = function (statement) { - return this.update(this.elseKeyword, statement); - }; - - ElseClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElseClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElseClauseSyntax = ElseClauseSyntax; - - var IfStatementSyntax = (function (_super) { - __extends(IfStatementSyntax, _super); - function IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.ifKeyword = ifKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - this.elseClause = elseClause; - } - IfStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitIfStatement(this); - }; - - IfStatementSyntax.prototype.kind = function () { - return 147 /* IfStatement */; - }; - - IfStatementSyntax.prototype.childCount = function () { - return 6; - }; - - IfStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.ifKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - case 5: - return this.elseClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IfStatementSyntax.prototype.isStatement = function () { - return true; - }; - - IfStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - IfStatementSyntax.prototype.update = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - if (this.ifKeyword === ifKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement && this.elseClause === elseClause) { - return this; - } - - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, this.parsedInStrictMode()); - }; - - IfStatementSyntax.create = function (ifKeyword, openParenToken, condition, closeParenToken, statement) { - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, null, false); - }; - - IfStatementSyntax.create1 = function (condition, statement) { - return new IfStatementSyntax(TypeScript.Syntax.token(28 /* IfKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, null, false); - }; - - IfStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withIfKeyword = function (ifKeyword) { - return this.update(ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.ifKeyword, openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.ifKeyword, this.openParenToken, condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withElseClause = function (elseClause) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, elseClause); - }; - - IfStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.elseClause !== null && this.elseClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return IfStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IfStatementSyntax = IfStatementSyntax; - - var ExpressionStatementSyntax = (function (_super) { - __extends(ExpressionStatementSyntax, _super); - function ExpressionStatementSyntax(expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ExpressionStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitExpressionStatement(this); - }; - - ExpressionStatementSyntax.prototype.kind = function () { - return 149 /* ExpressionStatement */; - }; - - ExpressionStatementSyntax.prototype.childCount = function () { - return 2; - }; - - ExpressionStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExpressionStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.update = function (expression, semicolonToken) { - if (this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExpressionStatementSyntax(expression, semicolonToken, this.parsedInStrictMode()); - }; - - ExpressionStatementSyntax.create1 = function (expression) { - return new ExpressionStatementSyntax(expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExpressionStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.semicolonToken); - }; - - ExpressionStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.expression, semicolonToken); - }; - - ExpressionStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ExpressionStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExpressionStatementSyntax = ExpressionStatementSyntax; - - var ConstructorDeclarationSyntax = (function (_super) { - __extends(ConstructorDeclarationSyntax, _super); - function ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.constructorKeyword = constructorKeyword; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - ConstructorDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorDeclaration(this); - }; - - ConstructorDeclarationSyntax.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; - }; - - ConstructorDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.constructorKeyword; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - ConstructorDeclarationSyntax.prototype.update = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.constructorKeyword === constructorKeyword && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - ConstructorDeclarationSyntax.create = function (constructorKeyword, callSignature) { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, constructorKeyword, callSignature, null, null, false); - }; - - ConstructorDeclarationSyntax.create1 = function () { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(62 /* ConstructorKeyword */), CallSignatureSyntax.create1(), null, null, false); - }; - - ConstructorDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ConstructorDeclarationSyntax.prototype.withConstructorKeyword = function (constructorKeyword) { - return this.update(this.modifiers, constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.constructorKeyword, callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, this.block, semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax; - - var MemberFunctionDeclarationSyntax = (function (_super) { - __extends(MemberFunctionDeclarationSyntax, _super); - function MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - MemberFunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberFunctionDeclaration(this); - }; - - MemberFunctionDeclarationSyntax.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; - }; - - MemberFunctionDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - MemberFunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.propertyName; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberFunctionDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.update = function (modifiers, propertyName, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.propertyName === propertyName && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - MemberFunctionDeclarationSyntax.create = function (propertyName, callSignature) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, callSignature, null, null, false); - }; - - MemberFunctionDeclarationSyntax.create1 = function (propertyName) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, CallSignatureSyntax.create1(), null, null, false); - }; - - MemberFunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberFunctionDeclarationSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.propertyName, callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.propertyName, this.callSignature, block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.propertyName, this.callSignature, this.block, semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberFunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax; - - var GetAccessorSyntax = (function (_super) { - __extends(GetAccessorSyntax, _super); - function GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.getKeyword = getKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - } - GetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitGetAccessor(this); - }; - - GetAccessorSyntax.prototype.kind = function () { - return 139 /* GetAccessor */; - }; - - GetAccessorSyntax.prototype.childCount = function () { - return 6; - }; - - GetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.getKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.typeAnnotation; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - GetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - GetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - GetAccessorSyntax.prototype.update = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - if (this.modifiers === modifiers && this.getKeyword === getKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation && this.block === block) { - return this; - } - - return new GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, this.parsedInStrictMode()); - }; - - GetAccessorSyntax.create = function (getKeyword, propertyName, parameterList, block) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, getKeyword, propertyName, parameterList, null, block, false); - }; - - GetAccessorSyntax.create1 = function (propertyName) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(64 /* GetKeyword */), propertyName, ParameterListSyntax.create1(), null, BlockSyntax.create1(), false); - }; - - GetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - GetAccessorSyntax.prototype.withGetKeyword = function (getKeyword) { - return this.update(this.modifiers, getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.getKeyword, propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, block); - }; - - GetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return GetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GetAccessorSyntax = GetAccessorSyntax; - - var SetAccessorSyntax = (function (_super) { - __extends(SetAccessorSyntax, _super); - function SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.setKeyword = setKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - } - SetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitSetAccessor(this); - }; - - SetAccessorSyntax.prototype.kind = function () { - return 140 /* SetAccessor */; - }; - - SetAccessorSyntax.prototype.childCount = function () { - return 5; - }; - - SetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.setKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - SetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - SetAccessorSyntax.prototype.update = function (modifiers, setKeyword, propertyName, parameterList, block) { - if (this.modifiers === modifiers && this.setKeyword === setKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.block === block) { - return this; - } - - return new SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, this.parsedInStrictMode()); - }; - - SetAccessorSyntax.create = function (setKeyword, propertyName, parameterList, block) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, setKeyword, propertyName, parameterList, block, false); - }; - - SetAccessorSyntax.create1 = function (propertyName) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(68 /* SetKeyword */), propertyName, ParameterListSyntax.create1(), BlockSyntax.create1(), false); - }; - - SetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - SetAccessorSyntax.prototype.withSetKeyword = function (setKeyword) { - return this.update(this.modifiers, setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.setKeyword, propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, this.parameterList, block); - }; - - SetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SetAccessorSyntax = SetAccessorSyntax; - - var MemberVariableDeclarationSyntax = (function (_super) { - __extends(MemberVariableDeclarationSyntax, _super); - function MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - this.semicolonToken = semicolonToken; - } - MemberVariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberVariableDeclaration(this); - }; - - MemberVariableDeclarationSyntax.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; - }; - - MemberVariableDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - MemberVariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclarator; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberVariableDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.update = function (modifiers, variableDeclarator, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclarator === variableDeclarator && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, this.parsedInStrictMode()); - }; - - MemberVariableDeclarationSyntax.create = function (variableDeclarator, semicolonToken) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, semicolonToken, false); - }; - - MemberVariableDeclarationSyntax.create1 = function (variableDeclarator) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - MemberVariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberVariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.update(this.modifiers, variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclarator, semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberVariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax; - - var IndexMemberDeclarationSyntax = (function (_super) { - __extends(IndexMemberDeclarationSyntax, _super); - function IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.indexSignature = indexSignature; - this.semicolonToken = semicolonToken; - } - IndexMemberDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexMemberDeclaration(this); - }; - - IndexMemberDeclarationSyntax.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; - }; - - IndexMemberDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - IndexMemberDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.indexSignature; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexMemberDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - IndexMemberDeclarationSyntax.prototype.update = function (modifiers, indexSignature, semicolonToken) { - if (this.modifiers === modifiers && this.indexSignature === indexSignature && this.semicolonToken === semicolonToken) { - return this; - } - - return new IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, this.parsedInStrictMode()); - }; - - IndexMemberDeclarationSyntax.create = function (indexSignature, semicolonToken) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, semicolonToken, false); - }; - - IndexMemberDeclarationSyntax.create1 = function (indexSignature) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - IndexMemberDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - IndexMemberDeclarationSyntax.prototype.withIndexSignature = function (indexSignature) { - return this.update(this.modifiers, indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.indexSignature, semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexMemberDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax; - - var ThrowStatementSyntax = (function (_super) { - __extends(ThrowStatementSyntax, _super); - function ThrowStatementSyntax(throwKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.throwKeyword = throwKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ThrowStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitThrowStatement(this); - }; - - ThrowStatementSyntax.prototype.kind = function () { - return 157 /* ThrowStatement */; - }; - - ThrowStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ThrowStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.throwKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ThrowStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.update = function (throwKeyword, expression, semicolonToken) { - if (this.throwKeyword === throwKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ThrowStatementSyntax(throwKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ThrowStatementSyntax.create1 = function (expression) { - return new ThrowStatementSyntax(TypeScript.Syntax.token(36 /* ThrowKeyword */), expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ThrowStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withThrowKeyword = function (throwKeyword) { - return this.update(throwKeyword, this.expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.throwKeyword, expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.throwKeyword, this.expression, semicolonToken); - }; - - ThrowStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ThrowStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ThrowStatementSyntax = ThrowStatementSyntax; - - var ReturnStatementSyntax = (function (_super) { - __extends(ReturnStatementSyntax, _super); - function ReturnStatementSyntax(returnKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.returnKeyword = returnKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ReturnStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitReturnStatement(this); - }; - - ReturnStatementSyntax.prototype.kind = function () { - return 150 /* ReturnStatement */; - }; - - ReturnStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ReturnStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.returnKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ReturnStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.update = function (returnKeyword, expression, semicolonToken) { - if (this.returnKeyword === returnKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ReturnStatementSyntax(returnKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ReturnStatementSyntax.create = function (returnKeyword, semicolonToken) { - return new ReturnStatementSyntax(returnKeyword, null, semicolonToken, false); - }; - - ReturnStatementSyntax.create1 = function () { - return new ReturnStatementSyntax(TypeScript.Syntax.token(33 /* ReturnKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ReturnStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withReturnKeyword = function (returnKeyword) { - return this.update(returnKeyword, this.expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.returnKeyword, expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.returnKeyword, this.expression, semicolonToken); - }; - - ReturnStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression !== null && this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ReturnStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ReturnStatementSyntax = ReturnStatementSyntax; - - var ObjectCreationExpressionSyntax = (function (_super) { - __extends(ObjectCreationExpressionSyntax, _super); - function ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.expression = expression; - this.argumentList = argumentList; - } - ObjectCreationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectCreationExpression(this); - }; - - ObjectCreationExpressionSyntax.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; - }; - - ObjectCreationExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectCreationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.expression; - case 2: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectCreationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.update = function (newKeyword, expression, argumentList) { - if (this.newKeyword === newKeyword && this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, this.parsedInStrictMode()); - }; - - ObjectCreationExpressionSyntax.create = function (newKeyword, expression) { - return new ObjectCreationExpressionSyntax(newKeyword, expression, null, false); - }; - - ObjectCreationExpressionSyntax.create1 = function (expression) { - return new ObjectCreationExpressionSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), expression, null, false); - }; - - ObjectCreationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.newKeyword, expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.newKeyword, this.expression, argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList !== null && this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectCreationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax; - - var SwitchStatementSyntax = (function (_super) { - __extends(SwitchStatementSyntax, _super); - function SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.switchKeyword = switchKeyword; - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.openBraceToken = openBraceToken; - this.switchClauses = switchClauses; - this.closeBraceToken = closeBraceToken; - } - SwitchStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitSwitchStatement(this); - }; - - SwitchStatementSyntax.prototype.kind = function () { - return 151 /* SwitchStatement */; - }; - - SwitchStatementSyntax.prototype.childCount = function () { - return 7; - }; - - SwitchStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.switchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.expression; - case 3: - return this.closeParenToken; - case 4: - return this.openBraceToken; - case 5: - return this.switchClauses; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SwitchStatementSyntax.prototype.isStatement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.update = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - if (this.switchKeyword === switchKeyword && this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken && this.openBraceToken === openBraceToken && this.switchClauses === switchClauses && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, this.parsedInStrictMode()); - }; - - SwitchStatementSyntax.create = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, closeBraceToken) { - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - SwitchStatementSyntax.create1 = function (expression) { - return new SwitchStatementSyntax(TypeScript.Syntax.token(34 /* SwitchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - SwitchStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withSwitchKeyword = function (switchKeyword) { - return this.update(switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.switchKeyword, openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.switchKeyword, this.openParenToken, expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClauses = function (switchClauses) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClause = function (switchClause) { - return this.withSwitchClauses(TypeScript.Syntax.list([switchClause])); - }; - - SwitchStatementSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, closeBraceToken); - }; - - SwitchStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.switchClauses.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SwitchStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SwitchStatementSyntax = SwitchStatementSyntax; - - var CaseSwitchClauseSyntax = (function (_super) { - __extends(CaseSwitchClauseSyntax, _super); - function CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.caseKeyword = caseKeyword; - this.expression = expression; - this.colonToken = colonToken; - this.statements = statements; - } - CaseSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCaseSwitchClause(this); - }; - - CaseSwitchClauseSyntax.prototype.kind = function () { - return 233 /* CaseSwitchClause */; - }; - - CaseSwitchClauseSyntax.prototype.childCount = function () { - return 4; - }; - - CaseSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.caseKeyword; - case 1: - return this.expression; - case 2: - return this.colonToken; - case 3: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CaseSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - CaseSwitchClauseSyntax.prototype.update = function (caseKeyword, expression, colonToken, statements) { - if (this.caseKeyword === caseKeyword && this.expression === expression && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, this.parsedInStrictMode()); - }; - - CaseSwitchClauseSyntax.create = function (caseKeyword, expression, colonToken) { - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.create1 = function (expression) { - return new CaseSwitchClauseSyntax(TypeScript.Syntax.token(16 /* CaseKeyword */), expression, TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withCaseKeyword = function (caseKeyword) { - return this.update(caseKeyword, this.expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withExpression = function (expression) { - return this.update(this.caseKeyword, expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.caseKeyword, this.expression, colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.caseKeyword, this.expression, this.colonToken, statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - CaseSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CaseSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax; - - var DefaultSwitchClauseSyntax = (function (_super) { - __extends(DefaultSwitchClauseSyntax, _super); - function DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.defaultKeyword = defaultKeyword; - this.colonToken = colonToken; - this.statements = statements; - } - DefaultSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitDefaultSwitchClause(this); - }; - - DefaultSwitchClauseSyntax.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; - }; - - DefaultSwitchClauseSyntax.prototype.childCount = function () { - return 3; - }; - - DefaultSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.defaultKeyword; - case 1: - return this.colonToken; - case 2: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DefaultSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - DefaultSwitchClauseSyntax.prototype.update = function (defaultKeyword, colonToken, statements) { - if (this.defaultKeyword === defaultKeyword && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, this.parsedInStrictMode()); - }; - - DefaultSwitchClauseSyntax.create = function (defaultKeyword, colonToken) { - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.create1 = function () { - return new DefaultSwitchClauseSyntax(TypeScript.Syntax.token(20 /* DefaultKeyword */), TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withDefaultKeyword = function (defaultKeyword) { - return this.update(defaultKeyword, this.colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.defaultKeyword, colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.defaultKeyword, this.colonToken, statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - DefaultSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DefaultSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax; - - var BreakStatementSyntax = (function (_super) { - __extends(BreakStatementSyntax, _super); - function BreakStatementSyntax(breakKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.breakKeyword = breakKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - BreakStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitBreakStatement(this); - }; - - BreakStatementSyntax.prototype.kind = function () { - return 152 /* BreakStatement */; - }; - - BreakStatementSyntax.prototype.childCount = function () { - return 3; - }; - - BreakStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.breakKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BreakStatementSyntax.prototype.isStatement = function () { - return true; - }; - - BreakStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - BreakStatementSyntax.prototype.update = function (breakKeyword, identifier, semicolonToken) { - if (this.breakKeyword === breakKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new BreakStatementSyntax(breakKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - BreakStatementSyntax.create = function (breakKeyword, semicolonToken) { - return new BreakStatementSyntax(breakKeyword, null, semicolonToken, false); - }; - - BreakStatementSyntax.create1 = function () { - return new BreakStatementSyntax(TypeScript.Syntax.token(15 /* BreakKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - BreakStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withBreakKeyword = function (breakKeyword) { - return this.update(breakKeyword, this.identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.breakKeyword, identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.breakKeyword, this.identifier, semicolonToken); - }; - - BreakStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return BreakStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BreakStatementSyntax = BreakStatementSyntax; - - var ContinueStatementSyntax = (function (_super) { - __extends(ContinueStatementSyntax, _super); - function ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.continueKeyword = continueKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ContinueStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitContinueStatement(this); - }; - - ContinueStatementSyntax.prototype.kind = function () { - return 153 /* ContinueStatement */; - }; - - ContinueStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ContinueStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.continueKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ContinueStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.update = function (continueKeyword, identifier, semicolonToken) { - if (this.continueKeyword === continueKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ContinueStatementSyntax.create = function (continueKeyword, semicolonToken) { - return new ContinueStatementSyntax(continueKeyword, null, semicolonToken, false); - }; - - ContinueStatementSyntax.create1 = function () { - return new ContinueStatementSyntax(TypeScript.Syntax.token(18 /* ContinueKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ContinueStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withContinueKeyword = function (continueKeyword) { - return this.update(continueKeyword, this.identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.continueKeyword, identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.continueKeyword, this.identifier, semicolonToken); - }; - - ContinueStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return ContinueStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ContinueStatementSyntax = ContinueStatementSyntax; - - var ForStatementSyntax = (function (_super) { - __extends(ForStatementSyntax, _super); - function ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.firstSemicolonToken = firstSemicolonToken; - this.condition = condition; - this.secondSemicolonToken = secondSemicolonToken; - this.incrementor = incrementor; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForStatement(this); - }; - - ForStatementSyntax.prototype.kind = function () { - return 154 /* ForStatement */; - }; - - ForStatementSyntax.prototype.childCount = function () { - return 10; - }; - - ForStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.initializer; - case 4: - return this.firstSemicolonToken; - case 5: - return this.condition; - case 6: - return this.secondSemicolonToken; - case 7: - return this.incrementor; - case 8: - return this.closeParenToken; - case 9: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.initializer === initializer && this.firstSemicolonToken === firstSemicolonToken && this.condition === condition && this.secondSemicolonToken === secondSemicolonToken && this.incrementor === incrementor && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForStatementSyntax.create = function (forKeyword, openParenToken, firstSemicolonToken, secondSemicolonToken, closeParenToken, statement) { - return new ForStatementSyntax(forKeyword, openParenToken, null, null, firstSemicolonToken, null, secondSemicolonToken, null, closeParenToken, statement, false); - }; - - ForStatementSyntax.create1 = function (statement) { - return new ForStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withInitializer = function (initializer) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withFirstSemicolonToken = function (firstSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withSecondSemicolonToken = function (secondSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withIncrementor = function (incrementor) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, statement); - }; - - ForStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.initializer !== null && this.initializer.isTypeScriptSpecific()) { - return true; - } - if (this.condition !== null && this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.incrementor !== null && this.incrementor.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForStatementSyntax = ForStatementSyntax; - - var ForInStatementSyntax = (function (_super) { - __extends(ForInStatementSyntax, _super); - function ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.left = left; - this.inKeyword = inKeyword; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForInStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForInStatement(this); - }; - - ForInStatementSyntax.prototype.kind = function () { - return 155 /* ForInStatement */; - }; - - ForInStatementSyntax.prototype.childCount = function () { - return 8; - }; - - ForInStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.left; - case 4: - return this.inKeyword; - case 5: - return this.expression; - case 6: - return this.closeParenToken; - case 7: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForInStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForInStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.left === left && this.inKeyword === inKeyword && this.expression === expression && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForInStatementSyntax.create = function (forKeyword, openParenToken, inKeyword, expression, closeParenToken, statement) { - return new ForInStatementSyntax(forKeyword, openParenToken, null, null, inKeyword, expression, closeParenToken, statement, false); - }; - - ForInStatementSyntax.create1 = function (expression, statement) { - return new ForInStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(29 /* InKeyword */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForInStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withLeft = function (left) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withInKeyword = function (inKeyword) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, statement); - }; - - ForInStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.left !== null && this.left.isTypeScriptSpecific()) { - return true; - } - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForInStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForInStatementSyntax = ForInStatementSyntax; - - var WhileStatementSyntax = (function (_super) { - __extends(WhileStatementSyntax, _super); - function WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WhileStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWhileStatement(this); - }; - - WhileStatementSyntax.prototype.kind = function () { - return 158 /* WhileStatement */; - }; - - WhileStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WhileStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.whileKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WhileStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WhileStatementSyntax.prototype.update = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WhileStatementSyntax.create1 = function (condition, statement) { - return new WhileStatementSyntax(TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WhileStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WhileStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WhileStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WhileStatementSyntax = WhileStatementSyntax; - - var WithStatementSyntax = (function (_super) { - __extends(WithStatementSyntax, _super); - function WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.withKeyword = withKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WithStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWithStatement(this); - }; - - WithStatementSyntax.prototype.kind = function () { - return 163 /* WithStatement */; - }; - - WithStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WithStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.withKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WithStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WithStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WithStatementSyntax.prototype.update = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.withKeyword === withKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WithStatementSyntax.create1 = function (condition, statement) { - return new WithStatementSyntax(TypeScript.Syntax.token(43 /* WithKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WithStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withWithKeyword = function (withKeyword) { - return this.update(withKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.withKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.withKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.withKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.withKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WithStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WithStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WithStatementSyntax = WithStatementSyntax; - - var EnumDeclarationSyntax = (function (_super) { - __extends(EnumDeclarationSyntax, _super); - function EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.enumKeyword = enumKeyword; - this.identifier = identifier; - this.openBraceToken = openBraceToken; - this.enumElements = enumElements; - this.closeBraceToken = closeBraceToken; - } - EnumDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumDeclaration(this); - }; - - EnumDeclarationSyntax.prototype.kind = function () { - return 132 /* EnumDeclaration */; - }; - - EnumDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - EnumDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.enumKeyword; - case 2: - return this.identifier; - case 3: - return this.openBraceToken; - case 4: - return this.enumElements; - case 5: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - EnumDeclarationSyntax.prototype.update = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - if (this.modifiers === modifiers && this.enumKeyword === enumKeyword && this.identifier === identifier && this.openBraceToken === openBraceToken && this.enumElements === enumElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, this.parsedInStrictMode()); - }; - - EnumDeclarationSyntax.create = function (enumKeyword, identifier, openBraceToken, closeBraceToken) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, enumKeyword, identifier, openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - EnumDeclarationSyntax.create1 = function (identifier) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(46 /* EnumKeyword */), identifier, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - EnumDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - EnumDeclarationSyntax.prototype.withEnumKeyword = function (enumKeyword) { - return this.update(this.modifiers, enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.enumKeyword, identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElements = function (enumElements) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElement = function (enumElement) { - return this.withEnumElements(TypeScript.Syntax.separatedList([enumElement])); - }; - - EnumDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return EnumDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumDeclarationSyntax = EnumDeclarationSyntax; - - var EnumElementSyntax = (function (_super) { - __extends(EnumElementSyntax, _super); - function EnumElementSyntax(propertyName, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - } - EnumElementSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumElement(this); - }; - - EnumElementSyntax.prototype.kind = function () { - return 243 /* EnumElement */; - }; - - EnumElementSyntax.prototype.childCount = function () { - return 2; - }; - - EnumElementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumElementSyntax.prototype.update = function (propertyName, equalsValueClause) { - if (this.propertyName === propertyName && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new EnumElementSyntax(propertyName, equalsValueClause, this.parsedInStrictMode()); - }; - - EnumElementSyntax.create = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.create1 = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.equalsValueClause); - }; - - EnumElementSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, equalsValueClause); - }; - - EnumElementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EnumElementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumElementSyntax = EnumElementSyntax; - - var CastExpressionSyntax = (function (_super) { - __extends(CastExpressionSyntax, _super); - function CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.type = type; - this.greaterThanToken = greaterThanToken; - this.expression = expression; - } - CastExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitCastExpression(this); - }; - - CastExpressionSyntax.prototype.kind = function () { - return 220 /* CastExpression */; - }; - - CastExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - CastExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.type; - case 2: - return this.greaterThanToken; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CastExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.update = function (lessThanToken, type, greaterThanToken, expression) { - if (this.lessThanToken === lessThanToken && this.type === type && this.greaterThanToken === greaterThanToken && this.expression === expression) { - return this; - } - - return new CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, this.parsedInStrictMode()); - }; - - CastExpressionSyntax.create1 = function (type, expression) { - return new CastExpressionSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), type, TypeScript.Syntax.token(81 /* GreaterThanToken */), expression, false); - }; - - CastExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withType = function (type) { - return this.update(this.lessThanToken, type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.type, greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.lessThanToken, this.type, this.greaterThanToken, expression); - }; - - CastExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return CastExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CastExpressionSyntax = CastExpressionSyntax; - - var ObjectLiteralExpressionSyntax = (function (_super) { - __extends(ObjectLiteralExpressionSyntax, _super); - function ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.propertyAssignments = propertyAssignments; - this.closeBraceToken = closeBraceToken; - } - ObjectLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectLiteralExpression(this); - }; - - ObjectLiteralExpressionSyntax.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; - }; - - ObjectLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.propertyAssignments; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.update = function (openBraceToken, propertyAssignments, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.propertyAssignments === propertyAssignments && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectLiteralExpressionSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectLiteralExpressionSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectLiteralExpressionSyntax.create1 = function () { - return new ObjectLiteralExpressionSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignments = function (propertyAssignments) { - return this.update(this.openBraceToken, propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignment = function (propertyAssignment) { - return this.withPropertyAssignments(TypeScript.Syntax.separatedList([propertyAssignment])); - }; - - ObjectLiteralExpressionSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.propertyAssignments, closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.propertyAssignments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax; - - var SimplePropertyAssignmentSyntax = (function (_super) { - __extends(SimplePropertyAssignmentSyntax, _super); - function SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.colonToken = colonToken; - this.expression = expression; - } - SimplePropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitSimplePropertyAssignment(this); - }; - - SimplePropertyAssignmentSyntax.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; - }; - - SimplePropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - SimplePropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.colonToken; - case 2: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimplePropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SimplePropertyAssignmentSyntax.prototype.update = function (propertyName, colonToken, expression) { - if (this.propertyName === propertyName && this.colonToken === colonToken && this.expression === expression) { - return this; - } - - return new SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, this.parsedInStrictMode()); - }; - - SimplePropertyAssignmentSyntax.create1 = function (propertyName, expression) { - return new SimplePropertyAssignmentSyntax(propertyName, TypeScript.Syntax.token(106 /* ColonToken */), expression, false); - }; - - SimplePropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.propertyName, colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withExpression = function (expression) { - return this.update(this.propertyName, this.colonToken, expression); - }; - - SimplePropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SimplePropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax; - - var FunctionPropertyAssignmentSyntax = (function (_super) { - __extends(FunctionPropertyAssignmentSyntax, _super); - function FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - } - FunctionPropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionPropertyAssignment(this); - }; - - FunctionPropertyAssignmentSyntax.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; - }; - - FunctionPropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - FunctionPropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.callSignature; - case 2: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionPropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - FunctionPropertyAssignmentSyntax.prototype.update = function (propertyName, callSignature, block) { - if (this.propertyName === propertyName && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionPropertyAssignmentSyntax.create1 = function (propertyName) { - return new FunctionPropertyAssignmentSyntax(propertyName, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionPropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withBlock = function (block) { - return this.update(this.propertyName, this.callSignature, block); - }; - - FunctionPropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionPropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax; - - var FunctionExpressionSyntax = (function (_super) { - __extends(FunctionExpressionSyntax, _super); - function FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - } - FunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionExpression(this); - }; - - FunctionExpressionSyntax.prototype.kind = function () { - return 222 /* FunctionExpression */; - }; - - FunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.functionKeyword; - case 1: - return this.identifier; - case 2: - return this.callSignature; - case 3: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.update = function (functionKeyword, identifier, callSignature, block) { - if (this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionExpressionSyntax.create = function (functionKeyword, callSignature, block) { - return new FunctionExpressionSyntax(functionKeyword, null, callSignature, block, false); - }; - - FunctionExpressionSyntax.create1 = function () { - return new FunctionExpressionSyntax(TypeScript.Syntax.token(27 /* FunctionKeyword */), null, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(functionKeyword, this.identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.functionKeyword, identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.functionKeyword, this.identifier, callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.functionKeyword, this.identifier, this.callSignature, block); - }; - - FunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionExpressionSyntax = FunctionExpressionSyntax; - - var EmptyStatementSyntax = (function (_super) { - __extends(EmptyStatementSyntax, _super); - function EmptyStatementSyntax(semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.semicolonToken = semicolonToken; - } - EmptyStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitEmptyStatement(this); - }; - - EmptyStatementSyntax.prototype.kind = function () { - return 156 /* EmptyStatement */; - }; - - EmptyStatementSyntax.prototype.childCount = function () { - return 1; - }; - - EmptyStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EmptyStatementSyntax.prototype.isStatement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.update = function (semicolonToken) { - if (this.semicolonToken === semicolonToken) { - return this; - } - - return new EmptyStatementSyntax(semicolonToken, this.parsedInStrictMode()); - }; - - EmptyStatementSyntax.create1 = function () { - return new EmptyStatementSyntax(TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - EmptyStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(semicolonToken); - }; - - EmptyStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return EmptyStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EmptyStatementSyntax = EmptyStatementSyntax; - - var TryStatementSyntax = (function (_super) { - __extends(TryStatementSyntax, _super); - function TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.tryKeyword = tryKeyword; - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - } - TryStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitTryStatement(this); - }; - - TryStatementSyntax.prototype.kind = function () { - return 159 /* TryStatement */; - }; - - TryStatementSyntax.prototype.childCount = function () { - return 4; - }; - - TryStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.tryKeyword; - case 1: - return this.block; - case 2: - return this.catchClause; - case 3: - return this.finallyClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TryStatementSyntax.prototype.isStatement = function () { - return true; - }; - - TryStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - TryStatementSyntax.prototype.update = function (tryKeyword, block, catchClause, finallyClause) { - if (this.tryKeyword === tryKeyword && this.block === block && this.catchClause === catchClause && this.finallyClause === finallyClause) { - return this; - } - - return new TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, this.parsedInStrictMode()); - }; - - TryStatementSyntax.create = function (tryKeyword, block) { - return new TryStatementSyntax(tryKeyword, block, null, null, false); - }; - - TryStatementSyntax.create1 = function () { - return new TryStatementSyntax(TypeScript.Syntax.token(38 /* TryKeyword */), BlockSyntax.create1(), null, null, false); - }; - - TryStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTryKeyword = function (tryKeyword) { - return this.update(tryKeyword, this.block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withBlock = function (block) { - return this.update(this.tryKeyword, block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withCatchClause = function (catchClause) { - return this.update(this.tryKeyword, this.block, catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withFinallyClause = function (finallyClause) { - return this.update(this.tryKeyword, this.block, this.catchClause, finallyClause); - }; - - TryStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - if (this.catchClause !== null && this.catchClause.isTypeScriptSpecific()) { - return true; - } - if (this.finallyClause !== null && this.finallyClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TryStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TryStatementSyntax = TryStatementSyntax; - - var CatchClauseSyntax = (function (_super) { - __extends(CatchClauseSyntax, _super); - function CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.catchKeyword = catchKeyword; - this.openParenToken = openParenToken; - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.closeParenToken = closeParenToken; - this.block = block; - } - CatchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCatchClause(this); - }; - - CatchClauseSyntax.prototype.kind = function () { - return 236 /* CatchClause */; - }; - - CatchClauseSyntax.prototype.childCount = function () { - return 6; - }; - - CatchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.catchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.identifier; - case 3: - return this.typeAnnotation; - case 4: - return this.closeParenToken; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CatchClauseSyntax.prototype.update = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - if (this.catchKeyword === catchKeyword && this.openParenToken === openParenToken && this.identifier === identifier && this.typeAnnotation === typeAnnotation && this.closeParenToken === closeParenToken && this.block === block) { - return this; - } - - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, this.parsedInStrictMode()); - }; - - CatchClauseSyntax.create = function (catchKeyword, openParenToken, identifier, closeParenToken, block) { - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, null, closeParenToken, block, false); - }; - - CatchClauseSyntax.create1 = function (identifier) { - return new CatchClauseSyntax(TypeScript.Syntax.token(17 /* CatchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), identifier, null, TypeScript.Syntax.token(73 /* CloseParenToken */), BlockSyntax.create1(), false); - }; - - CatchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withCatchKeyword = function (catchKeyword) { - return this.update(catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.catchKeyword, openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.catchKeyword, this.openParenToken, identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, block); - }; - - CatchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null && this.typeAnnotation.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CatchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CatchClauseSyntax = CatchClauseSyntax; - - var FinallyClauseSyntax = (function (_super) { - __extends(FinallyClauseSyntax, _super); - function FinallyClauseSyntax(finallyKeyword, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.finallyKeyword = finallyKeyword; - this.block = block; - } - FinallyClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitFinallyClause(this); - }; - - FinallyClauseSyntax.prototype.kind = function () { - return 237 /* FinallyClause */; - }; - - FinallyClauseSyntax.prototype.childCount = function () { - return 2; - }; - - FinallyClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.finallyKeyword; - case 1: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FinallyClauseSyntax.prototype.update = function (finallyKeyword, block) { - if (this.finallyKeyword === finallyKeyword && this.block === block) { - return this; - } - - return new FinallyClauseSyntax(finallyKeyword, block, this.parsedInStrictMode()); - }; - - FinallyClauseSyntax.create1 = function () { - return new FinallyClauseSyntax(TypeScript.Syntax.token(25 /* FinallyKeyword */), BlockSyntax.create1(), false); - }; - - FinallyClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withFinallyKeyword = function (finallyKeyword) { - return this.update(finallyKeyword, this.block); - }; - - FinallyClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.finallyKeyword, block); - }; - - FinallyClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FinallyClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FinallyClauseSyntax = FinallyClauseSyntax; - - var LabeledStatementSyntax = (function (_super) { - __extends(LabeledStatementSyntax, _super); - function LabeledStatementSyntax(identifier, colonToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.colonToken = colonToken; - this.statement = statement; - } - LabeledStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitLabeledStatement(this); - }; - - LabeledStatementSyntax.prototype.kind = function () { - return 160 /* LabeledStatement */; - }; - - LabeledStatementSyntax.prototype.childCount = function () { - return 3; - }; - - LabeledStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.colonToken; - case 2: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - LabeledStatementSyntax.prototype.isStatement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.update = function (identifier, colonToken, statement) { - if (this.identifier === identifier && this.colonToken === colonToken && this.statement === statement) { - return this; - } - - return new LabeledStatementSyntax(identifier, colonToken, statement, this.parsedInStrictMode()); - }; - - LabeledStatementSyntax.create1 = function (identifier, statement) { - return new LabeledStatementSyntax(identifier, TypeScript.Syntax.token(106 /* ColonToken */), statement, false); - }; - - LabeledStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.identifier, colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.identifier, this.colonToken, statement); - }; - - LabeledStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return LabeledStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.LabeledStatementSyntax = LabeledStatementSyntax; - - var DoStatementSyntax = (function (_super) { - __extends(DoStatementSyntax, _super); - function DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.doKeyword = doKeyword; - this.statement = statement; - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.semicolonToken = semicolonToken; - } - DoStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDoStatement(this); - }; - - DoStatementSyntax.prototype.kind = function () { - return 161 /* DoStatement */; - }; - - DoStatementSyntax.prototype.childCount = function () { - return 7; - }; - - DoStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.doKeyword; - case 1: - return this.statement; - case 2: - return this.whileKeyword; - case 3: - return this.openParenToken; - case 4: - return this.condition; - case 5: - return this.closeParenToken; - case 6: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DoStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DoStatementSyntax.prototype.update = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - if (this.doKeyword === doKeyword && this.statement === statement && this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.semicolonToken === semicolonToken) { - return this; - } - - return new DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, this.parsedInStrictMode()); - }; - - DoStatementSyntax.create1 = function (statement, condition) { - return new DoStatementSyntax(TypeScript.Syntax.token(22 /* DoKeyword */), statement, TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DoStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withDoKeyword = function (doKeyword) { - return this.update(doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.doKeyword, statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(this.doKeyword, this.statement, whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, semicolonToken); - }; - - DoStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.condition.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DoStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DoStatementSyntax = DoStatementSyntax; - - var TypeOfExpressionSyntax = (function (_super) { - __extends(TypeOfExpressionSyntax, _super); - function TypeOfExpressionSyntax(typeOfKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.expression = expression; - } - TypeOfExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeOfExpression(this); - }; - - TypeOfExpressionSyntax.prototype.kind = function () { - return 171 /* TypeOfExpression */; - }; - - TypeOfExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - TypeOfExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeOfExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.update = function (typeOfKeyword, expression) { - if (this.typeOfKeyword === typeOfKeyword && this.expression === expression) { - return this; - } - - return new TypeOfExpressionSyntax(typeOfKeyword, expression, this.parsedInStrictMode()); - }; - - TypeOfExpressionSyntax.create1 = function (expression) { - return new TypeOfExpressionSyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), expression, false); - }; - - TypeOfExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.expression); - }; - - TypeOfExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.typeOfKeyword, expression); - }; - - TypeOfExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TypeOfExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeOfExpressionSyntax = TypeOfExpressionSyntax; - - var DeleteExpressionSyntax = (function (_super) { - __extends(DeleteExpressionSyntax, _super); - function DeleteExpressionSyntax(deleteKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.deleteKeyword = deleteKeyword; - this.expression = expression; - } - DeleteExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitDeleteExpression(this); - }; - - DeleteExpressionSyntax.prototype.kind = function () { - return 170 /* DeleteExpression */; - }; - - DeleteExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - DeleteExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.deleteKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DeleteExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.update = function (deleteKeyword, expression) { - if (this.deleteKeyword === deleteKeyword && this.expression === expression) { - return this; - } - - return new DeleteExpressionSyntax(deleteKeyword, expression, this.parsedInStrictMode()); - }; - - DeleteExpressionSyntax.create1 = function (expression) { - return new DeleteExpressionSyntax(TypeScript.Syntax.token(21 /* DeleteKeyword */), expression, false); - }; - - DeleteExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withDeleteKeyword = function (deleteKeyword) { - return this.update(deleteKeyword, this.expression); - }; - - DeleteExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.deleteKeyword, expression); - }; - - DeleteExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DeleteExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DeleteExpressionSyntax = DeleteExpressionSyntax; - - var VoidExpressionSyntax = (function (_super) { - __extends(VoidExpressionSyntax, _super); - function VoidExpressionSyntax(voidKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.voidKeyword = voidKeyword; - this.expression = expression; - } - VoidExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitVoidExpression(this); - }; - - VoidExpressionSyntax.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - VoidExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.voidKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VoidExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.update = function (voidKeyword, expression) { - if (this.voidKeyword === voidKeyword && this.expression === expression) { - return this; - } - - return new VoidExpressionSyntax(voidKeyword, expression, this.parsedInStrictMode()); - }; - - VoidExpressionSyntax.create1 = function (expression) { - return new VoidExpressionSyntax(TypeScript.Syntax.token(41 /* VoidKeyword */), expression, false); - }; - - VoidExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withVoidKeyword = function (voidKeyword) { - return this.update(voidKeyword, this.expression); - }; - - VoidExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.voidKeyword, expression); - }; - - VoidExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VoidExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VoidExpressionSyntax = VoidExpressionSyntax; - - var DebuggerStatementSyntax = (function (_super) { - __extends(DebuggerStatementSyntax, _super); - function DebuggerStatementSyntax(debuggerKeyword, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.debuggerKeyword = debuggerKeyword; - this.semicolonToken = semicolonToken; - } - DebuggerStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDebuggerStatement(this); - }; - - DebuggerStatementSyntax.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - - DebuggerStatementSyntax.prototype.childCount = function () { - return 2; - }; - - DebuggerStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.debuggerKeyword; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DebuggerStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.update = function (debuggerKeyword, semicolonToken) { - if (this.debuggerKeyword === debuggerKeyword && this.semicolonToken === semicolonToken) { - return this; - } - - return new DebuggerStatementSyntax(debuggerKeyword, semicolonToken, this.parsedInStrictMode()); - }; - - DebuggerStatementSyntax.create1 = function () { - return new DebuggerStatementSyntax(TypeScript.Syntax.token(19 /* DebuggerKeyword */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DebuggerStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withDebuggerKeyword = function (debuggerKeyword) { - return this.update(debuggerKeyword, this.semicolonToken); - }; - - DebuggerStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.debuggerKeyword, semicolonToken); - }; - - DebuggerStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return DebuggerStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DebuggerStatementSyntax = DebuggerStatementSyntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxRewriter = (function () { - function SyntaxRewriter() { - } - SyntaxRewriter.prototype.visitToken = function (token) { - return token; - }; - - SyntaxRewriter.prototype.visitNode = function (node) { - return node.accept(this); - }; - - SyntaxRewriter.prototype.visitNodeOrToken = function (node) { - return node.isToken() ? this.visitToken(node) : this.visitNode(node); - }; - - SyntaxRewriter.prototype.visitList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = this.visitNodeOrToken(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.list(newItems); - }; - - SyntaxRewriter.prototype.visitSeparatedList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = item.isToken() ? this.visitToken(item) : this.visitNode(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.separatedList(newItems); - }; - - SyntaxRewriter.prototype.visitSourceUnit = function (node) { - return node.update(this.visitList(node.moduleElements), this.visitToken(node.endOfFileToken)); - }; - - SyntaxRewriter.prototype.visitExternalModuleReference = function (node) { - return node.update(this.visitToken(node.requireKeyword), this.visitToken(node.openParenToken), this.visitToken(node.stringLiteral), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitModuleNameModuleReference = function (node) { - return node.update(this.visitNodeOrToken(node.moduleName)); - }; - - SyntaxRewriter.prototype.visitImportDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.importKeyword), this.visitToken(node.identifier), this.visitToken(node.equalsToken), this.visitNodeOrToken(node.moduleReference), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitExportAssignment = function (node) { - return node.update(this.visitToken(node.exportKeyword), this.visitToken(node.equalsToken), this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitClassDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.classKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitToken(node.openBraceToken), this.visitList(node.classElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitInterfaceDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.interfaceKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitNode(node.body)); - }; - - SyntaxRewriter.prototype.visitHeritageClause = function (node) { - return node.update(node.kind(), this.visitToken(node.extendsOrImplementsKeyword), this.visitSeparatedList(node.typeNames)); - }; - - SyntaxRewriter.prototype.visitModuleDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.moduleKeyword), node.name === null ? null : this.visitNodeOrToken(node.name), node.stringLiteral === null ? null : this.visitToken(node.stringLiteral), this.visitToken(node.openBraceToken), this.visitList(node.moduleElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.functionKeyword), this.visitToken(node.identifier), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableStatement = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclaration), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableDeclaration = function (node) { - return node.update(this.visitToken(node.varKeyword), this.visitSeparatedList(node.variableDeclarators)); - }; - - SyntaxRewriter.prototype.visitVariableDeclarator = function (node) { - return node.update(this.visitToken(node.propertyName), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitEqualsValueClause = function (node) { - return node.update(this.visitToken(node.equalsToken), this.visitNodeOrToken(node.value)); - }; - - SyntaxRewriter.prototype.visitPrefixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.operand)); - }; - - SyntaxRewriter.prototype.visitArrayLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitSeparatedList(node.expressions), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitOmittedExpression = function (node) { - return node; - }; - - SyntaxRewriter.prototype.visitParenthesizedExpression = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitSimpleArrowFunctionExpression = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return node.update(this.visitNode(node.callSignature), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitQualifiedName = function (node) { - return node.update(this.visitNodeOrToken(node.left), this.visitToken(node.dotToken), this.visitToken(node.right)); - }; - - SyntaxRewriter.prototype.visitTypeArgumentList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeArguments), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitConstructorType = function (node) { - return node.update(this.visitToken(node.newKeyword), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitFunctionType = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitObjectType = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.typeMembers), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitArrayType = function (node) { - return node.update(this.visitNodeOrToken(node.type), this.visitToken(node.openBracketToken), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitGenericType = function (node) { - return node.update(this.visitNodeOrToken(node.name), this.visitNode(node.typeArgumentList)); - }; - - SyntaxRewriter.prototype.visitTypeQuery = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.name)); - }; - - SyntaxRewriter.prototype.visitTypeAnnotation = function (node) { - return node.update(this.visitToken(node.colonToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitBlock = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitList(node.statements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitParameter = function (node) { - return node.update(node.dotDotDotToken === null ? null : this.visitToken(node.dotDotDotToken), this.visitList(node.modifiers), this.visitToken(node.identifier), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitMemberAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.dotToken), this.visitToken(node.name)); - }; - - SyntaxRewriter.prototype.visitPostfixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.operand), this.visitToken(node.operatorToken)); - }; - - SyntaxRewriter.prototype.visitElementAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.openBracketToken), this.visitNodeOrToken(node.argumentExpression), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitInvocationExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitArgumentList = function (node) { - return node.update(node.typeArgumentList === null ? null : this.visitNode(node.typeArgumentList), this.visitToken(node.openParenToken), this.visitSeparatedList(node.arguments), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitBinaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.left), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.right)); - }; - - SyntaxRewriter.prototype.visitConditionalExpression = function (node) { - return node.update(this.visitNodeOrToken(node.condition), this.visitToken(node.questionToken), this.visitNodeOrToken(node.whenTrue), this.visitToken(node.colonToken), this.visitNodeOrToken(node.whenFalse)); - }; - - SyntaxRewriter.prototype.visitConstructSignature = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitMethodSignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitIndexSignature = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitNode(node.parameter), this.visitToken(node.closeBracketToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitPropertySignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitCallSignature = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitParameterList = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitSeparatedList(node.parameters), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameterList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeParameters), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameter = function (node) { - return node.update(this.visitToken(node.identifier), node.constraint === null ? null : this.visitNode(node.constraint)); - }; - - SyntaxRewriter.prototype.visitConstraint = function (node) { - return node.update(this.visitToken(node.extendsKeyword), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitElseClause = function (node) { - return node.update(this.visitToken(node.elseKeyword), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitIfStatement = function (node) { - return node.update(this.visitToken(node.ifKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement), node.elseClause === null ? null : this.visitNode(node.elseClause)); - }; - - SyntaxRewriter.prototype.visitExpressionStatement = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitConstructorDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.constructorKeyword), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitMemberFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.propertyName), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitGetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.getKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitSetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.setKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitMemberVariableDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclarator), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitIndexMemberDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.indexSignature), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitThrowStatement = function (node) { - return node.update(this.visitToken(node.throwKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitReturnStatement = function (node) { - return node.update(this.visitToken(node.returnKeyword), node.expression === null ? null : this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitObjectCreationExpression = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNodeOrToken(node.expression), node.argumentList === null ? null : this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitSwitchStatement = function (node) { - return node.update(this.visitToken(node.switchKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitToken(node.openBraceToken), this.visitList(node.switchClauses), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitCaseSwitchClause = function (node) { - return node.update(this.visitToken(node.caseKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitDefaultSwitchClause = function (node) { - return node.update(this.visitToken(node.defaultKeyword), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitBreakStatement = function (node) { - return node.update(this.visitToken(node.breakKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitContinueStatement = function (node) { - return node.update(this.visitToken(node.continueKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitForStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.initializer === null ? null : this.visitNodeOrToken(node.initializer), this.visitToken(node.firstSemicolonToken), node.condition === null ? null : this.visitNodeOrToken(node.condition), this.visitToken(node.secondSemicolonToken), node.incrementor === null ? null : this.visitNodeOrToken(node.incrementor), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitForInStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.left === null ? null : this.visitNodeOrToken(node.left), this.visitToken(node.inKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWhileStatement = function (node) { - return node.update(this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWithStatement = function (node) { - return node.update(this.visitToken(node.withKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitEnumDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.enumKeyword), this.visitToken(node.identifier), this.visitToken(node.openBraceToken), this.visitSeparatedList(node.enumElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitEnumElement = function (node) { - return node.update(this.visitToken(node.propertyName), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitCastExpression = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitNodeOrToken(node.type), this.visitToken(node.greaterThanToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitObjectLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.propertyAssignments), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitSimplePropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitToken(node.colonToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitFunctionPropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFunctionExpression = function (node) { - return node.update(this.visitToken(node.functionKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitEmptyStatement = function (node) { - return node.update(this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTryStatement = function (node) { - return node.update(this.visitToken(node.tryKeyword), this.visitNode(node.block), node.catchClause === null ? null : this.visitNode(node.catchClause), node.finallyClause === null ? null : this.visitNode(node.finallyClause)); - }; - - SyntaxRewriter.prototype.visitCatchClause = function (node) { - return node.update(this.visitToken(node.catchKeyword), this.visitToken(node.openParenToken), this.visitToken(node.identifier), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitToken(node.closeParenToken), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFinallyClause = function (node) { - return node.update(this.visitToken(node.finallyKeyword), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitLabeledStatement = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.colonToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitDoStatement = function (node) { - return node.update(this.visitToken(node.doKeyword), this.visitNodeOrToken(node.statement), this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTypeOfExpression = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDeleteExpression = function (node) { - return node.update(this.visitToken(node.deleteKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitVoidExpression = function (node) { - return node.update(this.visitToken(node.voidKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDebuggerStatement = function (node) { - return node.update(this.visitToken(node.debuggerKeyword), this.visitToken(node.semicolonToken)); - }; - return SyntaxRewriter; - })(); - TypeScript.SyntaxRewriter = SyntaxRewriter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxDedenter = (function (_super) { - __extends(SyntaxDedenter, _super); - function SyntaxDedenter(dedentFirstToken, dedentationAmount, minimumIndent, options) { - _super.call(this); - this.dedentationAmount = dedentationAmount; - this.minimumIndent = minimumIndent; - this.options = options; - this.lastTriviaWasNewLine = dedentFirstToken; - } - SyntaxDedenter.prototype.abort = function () { - this.lastTriviaWasNewLine = false; - this.dedentationAmount = 0; - }; - - SyntaxDedenter.prototype.isAborted = function () { - return this.dedentationAmount === 0; - }; - - SyntaxDedenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.dedentTriviaList(token.leadingTrivia())); - } - - if (this.isAborted()) { - return token; - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxDedenter.prototype.dedentTriviaList = function (triviaList) { - var result = []; - var dedentNextWhitespace = true; - - for (var i = 0, n = triviaList.count(); i < n && !this.isAborted(); i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var dedentThisTrivia = dedentNextWhitespace; - dedentNextWhitespace = false; - - if (dedentThisTrivia) { - if (trivia.kind() === 4 /* WhitespaceTrivia */) { - var hasFollowingNewLine = (i < triviaList.count() - 1) && triviaList.syntaxTriviaAt(i + 1).kind() === 5 /* NewLineTrivia */; - result.push(this.dedentWhitespace(trivia, hasFollowingNewLine)); - continue; - } else if (trivia.kind() !== 5 /* NewLineTrivia */) { - this.abort(); - break; - } - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - result.push(this.dedentMultiLineComment(trivia)); - continue; - } - - result.push(trivia); - if (trivia.kind() === 5 /* NewLineTrivia */) { - dedentNextWhitespace = true; - } - } - - if (dedentNextWhitespace) { - this.abort(); - } - - if (this.isAborted()) { - return triviaList; - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxDedenter.prototype.dedentSegment = function (segment, hasFollowingNewLineTrivia) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition === segment.length) { - if (hasFollowingNewLineTrivia) { - return ""; - } - } else if (TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment.substring(firstNonWhitespacePosition); - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = TypeScript.MathPrototype.min(firstNonWhitespaceColumn, TypeScript.MathPrototype.max(firstNonWhitespaceColumn - this.dedentationAmount, this.minimumIndent)); - - if (newFirstNonWhitespaceColumn === firstNonWhitespaceColumn) { - this.abort(); - return segment; - } - - this.dedentationAmount = firstNonWhitespaceColumn - newFirstNonWhitespaceColumn; - TypeScript.Debug.assert(this.dedentationAmount >= 0); - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxDedenter.prototype.dedentWhitespace = function (trivia, hasFollowingNewLineTrivia) { - var newIndentation = this.dedentSegment(trivia.fullText(), hasFollowingNewLineTrivia); - return TypeScript.Syntax.whitespace(newIndentation); - }; - - SyntaxDedenter.prototype.dedentMultiLineComment = function (trivia) { - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - if (segments.length === 1) { - return trivia; - } - - for (var i = 1; i < segments.length; i++) { - var segment = segments[i]; - segments[i] = this.dedentSegment(segment, false); - } - - var result = segments.join(""); - - return TypeScript.Syntax.multiLineComment(result); - }; - - SyntaxDedenter.dedentNode = function (node, dedentFirstToken, dedentAmount, minimumIndent, options) { - var dedenter = new SyntaxDedenter(dedentFirstToken, dedentAmount, minimumIndent, options); - var result = node.accept(dedenter); - - if (dedenter.isAborted()) { - return node; - } - - return result; - }; - return SyntaxDedenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxDedenter = SyntaxDedenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxIndenter = (function (_super) { - __extends(SyntaxIndenter, _super); - function SyntaxIndenter(indentFirstToken, indentationAmount, options) { - _super.call(this); - this.indentationAmount = indentationAmount; - this.options = options; - this.lastTriviaWasNewLine = indentFirstToken; - this.indentationTrivia = TypeScript.Indentation.indentationTrivia(this.indentationAmount, this.options); - } - SyntaxIndenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.indentTriviaList(token.leadingTrivia())); - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxIndenter.prototype.indentTriviaList = function (triviaList) { - var result = []; - - var indentNextTrivia = true; - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var indentThisTrivia = indentNextTrivia; - indentNextTrivia = false; - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.indentMultiLineComment(trivia, indentThisTrivia, result); - continue; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - this.indentSingleLineOrSkippedText(trivia, indentThisTrivia, result); - continue; - - case 4 /* WhitespaceTrivia */: - this.indentWhitespace(trivia, indentThisTrivia, result); - continue; - - case 5 /* NewLineTrivia */: - result.push(trivia); - indentNextTrivia = true; - continue; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - if (indentNextTrivia) { - result.push(this.indentationTrivia); - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxIndenter.prototype.indentSegment = function (segment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment; - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = firstNonWhitespaceColumn + this.indentationAmount; - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxIndenter.prototype.indentWhitespace = function (trivia, indentThisTrivia, result) { - if (!indentThisTrivia) { - result.push(trivia); - return; - } - - var newIndentation = this.indentSegment(trivia.fullText()); - result.push(TypeScript.Syntax.whitespace(newIndentation)); - }; - - SyntaxIndenter.prototype.indentSingleLineOrSkippedText = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - result.push(trivia); - }; - - SyntaxIndenter.prototype.indentMultiLineComment = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - for (var i = 1; i < segments.length; i++) { - segments[i] = this.indentSegment(segments[i]); - } - - var newText = segments.join(""); - result.push(TypeScript.Syntax.multiLineComment(newText)); - }; - - SyntaxIndenter.indentNode = function (node, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - return node.accept(indenter); - }; - - SyntaxIndenter.indentNodes = function (nodes, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - var result = TypeScript.ArrayUtilities.select(nodes, function (n) { - return n.accept(indenter); - }); - - return result; - }; - return SyntaxIndenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxIndenter = SyntaxIndenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var VariableWidthTokenWithNoTrivia = (function () { - function VariableWidthTokenWithNoTrivia(fullText, kind) { - this._fullText = fullText; - this.tokenKind = kind; - } - VariableWidthTokenWithNoTrivia.prototype.clone = function () { - return new VariableWidthTokenWithNoTrivia(this._fullText, this.tokenKind); - }; - - VariableWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithNoTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithNoTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithNoTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithNoTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithNoTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithNoTrivia; - })(); - Syntax.VariableWidthTokenWithNoTrivia = VariableWidthTokenWithNoTrivia; - - var VariableWidthTokenWithLeadingTrivia = (function () { - function VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - VariableWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingTrivia = VariableWidthTokenWithLeadingTrivia; - - var VariableWidthTokenWithTrailingTrivia = (function () { - function VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithTrailingTrivia = VariableWidthTokenWithTrailingTrivia; - - var VariableWidthTokenWithLeadingAndTrailingTrivia = (function () { - function VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia = VariableWidthTokenWithLeadingAndTrailingTrivia; - - var FixedWidthTokenWithNoTrivia = (function () { - function FixedWidthTokenWithNoTrivia(kind) { - this.tokenKind = kind; - } - FixedWidthTokenWithNoTrivia.prototype.clone = function () { - return new FixedWidthTokenWithNoTrivia(this.tokenKind); - }; - - FixedWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithNoTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithNoTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.fullText = function () { - return this.text(); - }; - - FixedWidthTokenWithNoTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithNoTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithNoTrivia; - })(); - Syntax.FixedWidthTokenWithNoTrivia = FixedWidthTokenWithNoTrivia; - - var FixedWidthTokenWithLeadingTrivia = (function () { - function FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - FixedWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingTrivia = FixedWidthTokenWithLeadingTrivia; - - var FixedWidthTokenWithTrailingTrivia = (function () { - function FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithTrailingTrivia = FixedWidthTokenWithTrailingTrivia; - - var FixedWidthTokenWithLeadingAndTrailingTrivia = (function () { - function FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia = FixedWidthTokenWithLeadingAndTrailingTrivia; - - function collectTokenTextElements(token, elements) { - token.leadingTrivia().collectTextElements(elements); - elements.push(token.text()); - token.trailingTrivia().collectTextElements(elements); - } - - function getTriviaWidth(value) { - return value >>> 2 /* TriviaFullWidthShift */; - } - - function hasTriviaComment(value) { - return (value & 2 /* TriviaCommentMask */) !== 0; - } - - function hasTriviaNewLine(value) { - return (value & 1 /* TriviaNewLineMask */) !== 0; - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function isExpression(token) { - switch (token.tokenKind) { - case 11 /* IdentifierName */: - case 12 /* RegularExpressionLiteral */: - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 50 /* SuperKeyword */: - return true; - } - - return false; - } - Syntax.isExpression = isExpression; - - function realizeToken(token) { - return new RealizedToken(token.tokenKind, token.leadingTrivia(), token.text(), token.value(), token.valueText(), token.trailingTrivia()); - } - Syntax.realizeToken = realizeToken; - - function convertToIdentifierName(token) { - TypeScript.Debug.assert(TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)); - return new RealizedToken(11 /* IdentifierName */, token.leadingTrivia(), token.text(), token.text(), token.text(), token.trailingTrivia()); - } - Syntax.convertToIdentifierName = convertToIdentifierName; - - function tokenToJSON(token) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === token.kind()) { - result.kind = name; - break; - } - } - - result.width = token.width(); - if (token.fullWidth() !== token.width()) { - result.fullWidth = token.fullWidth(); - } - - result.text = token.text(); - - var value = token.value(); - if (value !== null) { - result.value = value; - result.valueText = token.valueText(); - } - - if (token.hasLeadingTrivia()) { - result.hasLeadingTrivia = true; - } - - if (token.hasLeadingComment()) { - result.hasLeadingComment = true; - } - - if (token.hasLeadingNewLine()) { - result.hasLeadingNewLine = true; - } - - if (token.hasLeadingSkippedText()) { - result.hasLeadingSkippedText = true; - } - - if (token.hasTrailingTrivia()) { - result.hasTrailingTrivia = true; - } - - if (token.hasTrailingComment()) { - result.hasTrailingComment = true; - } - - if (token.hasTrailingNewLine()) { - result.hasTrailingNewLine = true; - } - - if (token.hasTrailingSkippedText()) { - result.hasTrailingSkippedText = true; - } - - var trivia = token.leadingTrivia(); - if (trivia.count() > 0) { - result.leadingTrivia = trivia; - } - - trivia = token.trailingTrivia(); - if (trivia.count() > 0) { - result.trailingTrivia = trivia; - } - - return result; - } - Syntax.tokenToJSON = tokenToJSON; - - function value(token) { - return value1(token.tokenKind, token.text()); - } - Syntax.value = value; - - function hexValue(text, start, length) { - var intChar = 0; - for (var i = 0; i < length; i++) { - var ch2 = text.charCodeAt(start + i); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - } - - return intChar; - } - - var characterArray = []; - - function convertEscapes(text) { - characterArray.length = 0; - var result = ""; - - for (var i = 0, n = text.length; i < n; i++) { - var ch = text.charCodeAt(i); - - if (ch === 92 /* backslash */) { - i++; - if (i < n) { - ch = text.charCodeAt(i); - switch (ch) { - case 48 /* _0 */: - characterArray.push(0 /* nullCharacter */); - continue; - - case 98 /* b */: - characterArray.push(8 /* backspace */); - continue; - - case 102 /* f */: - characterArray.push(12 /* formFeed */); - continue; - - case 110 /* n */: - characterArray.push(10 /* lineFeed */); - continue; - - case 114 /* r */: - characterArray.push(13 /* carriageReturn */); - continue; - - case 116 /* t */: - characterArray.push(9 /* tab */); - continue; - - case 118 /* v */: - characterArray.push(11 /* verticalTab */); - continue; - - case 120 /* x */: - characterArray.push(hexValue(text, i + 1, 2)); - i += 2; - continue; - - case 117 /* u */: - characterArray.push(hexValue(text, i + 1, 4)); - i += 4; - continue; - - case 13 /* carriageReturn */: - var nextIndex = i + 1; - if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) { - i++; - } - continue; - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - continue; - - default: - } - } - } - - characterArray.push(ch); - - if (i && !(i % 1024)) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - characterArray.length = 0; - } - } - - if (characterArray.length) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - } - - return result; - } - - function massageEscapes(text) { - return text.indexOf("\\") >= 0 ? convertEscapes(text) : text; - } - Syntax.massageEscapes = massageEscapes; - - function value1(kind, text) { - if (kind === 11 /* IdentifierName */) { - return massageEscapes(text); - } - - switch (kind) { - case 37 /* TrueKeyword */: - return true; - case 24 /* FalseKeyword */: - return false; - case 32 /* NullKeyword */: - return null; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return TypeScript.SyntaxFacts.getText(kind); - } - - if (kind === 13 /* NumericLiteral */) { - return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text); - } else if (kind === 14 /* StringLiteral */) { - if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) { - return massageEscapes(text.substr(1, text.length - 2)); - } else { - return massageEscapes(text.substr(1)); - } - } else if (kind === 12 /* RegularExpressionLiteral */) { - return regularExpressionValue(text); - } else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) { - return null; - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - - function regularExpressionValue(text) { - try { - var lastSlash = text.lastIndexOf("/"); - var body = text.substring(1, lastSlash); - var flags = text.substring(lastSlash + 1); - return new RegExp(body, flags); - } catch (e) { - return null; - } - } - - function valueText1(kind, text) { - var value = value1(kind, text); - return value === null ? "" : value.toString(); - } - - function valueText(token) { - var value = token.value(); - return value === null ? "" : value.toString(); - } - Syntax.valueText = valueText; - - var EmptyToken = (function () { - function EmptyToken(kind) { - this.tokenKind = kind; - } - EmptyToken.prototype.clone = function () { - return new EmptyToken(this.tokenKind); - }; - - EmptyToken.prototype.kind = function () { - return this.tokenKind; - }; - - EmptyToken.prototype.isToken = function () { - return true; - }; - EmptyToken.prototype.isNode = function () { - return false; - }; - EmptyToken.prototype.isList = function () { - return false; - }; - EmptyToken.prototype.isSeparatedList = function () { - return false; - }; - - EmptyToken.prototype.childCount = function () { - return 0; - }; - - EmptyToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptyToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - EmptyToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - EmptyToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - EmptyToken.prototype.firstToken = function () { - return this; - }; - EmptyToken.prototype.lastToken = function () { - return this; - }; - EmptyToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptyToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - EmptyToken.prototype.fullWidth = function () { - return 0; - }; - EmptyToken.prototype.width = function () { - return 0; - }; - EmptyToken.prototype.text = function () { - return ""; - }; - EmptyToken.prototype.fullText = function () { - return ""; - }; - EmptyToken.prototype.value = function () { - return null; - }; - EmptyToken.prototype.valueText = function () { - return ""; - }; - - EmptyToken.prototype.hasLeadingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasLeadingComment = function () { - return false; - }; - EmptyToken.prototype.hasLeadingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasLeadingSkippedText = function () { - return false; - }; - EmptyToken.prototype.leadingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.hasTrailingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasTrailingComment = function () { - return false; - }; - EmptyToken.prototype.hasTrailingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasTrailingSkippedText = function () { - return false; - }; - EmptyToken.prototype.hasSkippedToken = function () { - return false; - }; - - EmptyToken.prototype.trailingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.realize = function () { - return realizeToken(this); - }; - EmptyToken.prototype.collectTextElements = function (elements) { - }; - - EmptyToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - EmptyToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - EmptyToken.prototype.isExpression = function () { - return isExpression(this); - }; - - EmptyToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return EmptyToken; - })(); - - function emptyToken(kind) { - return new EmptyToken(kind); - } - Syntax.emptyToken = emptyToken; - - var RealizedToken = (function () { - function RealizedToken(tokenKind, leadingTrivia, text, value, valueText, trailingTrivia) { - this.tokenKind = tokenKind; - this._leadingTrivia = leadingTrivia; - this._text = text; - this._value = value; - this._valueText = valueText; - this._trailingTrivia = trailingTrivia; - } - RealizedToken.prototype.clone = function () { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.kind = function () { - return this.tokenKind; - }; - RealizedToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - RealizedToken.prototype.firstToken = function () { - return this; - }; - RealizedToken.prototype.lastToken = function () { - return this; - }; - RealizedToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - RealizedToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - RealizedToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - RealizedToken.prototype.childCount = function () { - return 0; - }; - - RealizedToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - RealizedToken.prototype.isToken = function () { - return true; - }; - RealizedToken.prototype.isNode = function () { - return false; - }; - RealizedToken.prototype.isList = function () { - return false; - }; - RealizedToken.prototype.isSeparatedList = function () { - return false; - }; - RealizedToken.prototype.isTrivia = function () { - return false; - }; - RealizedToken.prototype.isTriviaList = function () { - return false; - }; - - RealizedToken.prototype.fullWidth = function () { - return this._leadingTrivia.fullWidth() + this.width() + this._trailingTrivia.fullWidth(); - }; - RealizedToken.prototype.width = function () { - return this.text().length; - }; - - RealizedToken.prototype.text = function () { - return this._text; - }; - RealizedToken.prototype.fullText = function () { - return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText(); - }; - - RealizedToken.prototype.value = function () { - return this._value; - }; - RealizedToken.prototype.valueText = function () { - return this._valueText; - }; - - RealizedToken.prototype.hasLeadingTrivia = function () { - return this._leadingTrivia.count() > 0; - }; - RealizedToken.prototype.hasLeadingComment = function () { - return this._leadingTrivia.hasComment(); - }; - RealizedToken.prototype.hasLeadingNewLine = function () { - return this._leadingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasLeadingSkippedText = function () { - return this._leadingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.leadingTriviaWidth = function () { - return this._leadingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasTrailingTrivia = function () { - return this._trailingTrivia.count() > 0; - }; - RealizedToken.prototype.hasTrailingComment = function () { - return this._trailingTrivia.hasComment(); - }; - RealizedToken.prototype.hasTrailingNewLine = function () { - return this._trailingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasTrailingSkippedText = function () { - return this._trailingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.trailingTriviaWidth = function () { - return this._trailingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasSkippedToken = function () { - return this.hasLeadingSkippedText() || this.hasTrailingSkippedText(); - }; - - RealizedToken.prototype.leadingTrivia = function () { - return this._leadingTrivia; - }; - RealizedToken.prototype.trailingTrivia = function () { - return this._trailingTrivia; - }; - - RealizedToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - RealizedToken.prototype.collectTextElements = function (elements) { - this.leadingTrivia().collectTextElements(elements); - elements.push(this.text()); - this.trailingTrivia().collectTextElements(elements); - }; - - RealizedToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return new RealizedToken(this.tokenKind, leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, trailingTrivia); - }; - - RealizedToken.prototype.isExpression = function () { - return isExpression(this); - }; - - RealizedToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return RealizedToken; - })(); - - function token(kind, info) { - if (typeof info === "undefined") { info = null; } - var text = (info !== null && info.text !== undefined) ? info.text : TypeScript.SyntaxFacts.getText(kind); - - return new RealizedToken(kind, Syntax.triviaList(info === null ? null : info.leadingTrivia), text, value1(kind, text), valueText1(kind, text), Syntax.triviaList(info === null ? null : info.trailingTrivia)); - } - Syntax.token = token; - - function identifier(text, info) { - if (typeof info === "undefined") { info = null; } - info = info || {}; - info.text = text; - return token(11 /* IdentifierName */, info); - } - Syntax.identifier = identifier; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTokenReplacer = (function (_super) { - __extends(SyntaxTokenReplacer, _super); - function SyntaxTokenReplacer(token1, token2) { - _super.call(this); - this.token1 = token1; - this.token2 = token2; - } - SyntaxTokenReplacer.prototype.visitToken = function (token) { - if (token === this.token1) { - var result = this.token2; - this.token1 = null; - this.token2 = null; - - return result; - } - - return token; - }; - - SyntaxTokenReplacer.prototype.visitNode = function (node) { - if (this.token1 === null) { - return node; - } - - return _super.prototype.visitNode.call(this, node); - }; - - SyntaxTokenReplacer.prototype.visitList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitList.call(this, list); - }; - - SyntaxTokenReplacer.prototype.visitSeparatedList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitSeparatedList.call(this, list); - }; - return SyntaxTokenReplacer; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxTokenReplacer = SyntaxTokenReplacer; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var AbstractTrivia = (function () { - function AbstractTrivia(_kind) { - this._kind = _kind; - } - AbstractTrivia.prototype.fullWidth = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.fullText = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.toJSON = function (key) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === this._kind) { - result.kind = name; - break; - } - } - - if (this.isSkippedToken()) { - result.skippedToken = this.skippedToken(); - } else { - result.text = this.fullText(); - } - return result; - }; - - AbstractTrivia.prototype.kind = function () { - return this._kind; - }; - - AbstractTrivia.prototype.isWhitespace = function () { - return this.kind() === 4 /* WhitespaceTrivia */; - }; - - AbstractTrivia.prototype.isComment = function () { - return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */; - }; - - AbstractTrivia.prototype.isNewLine = function () { - return this.kind() === 5 /* NewLineTrivia */; - }; - - AbstractTrivia.prototype.isSkippedToken = function () { - return this.kind() === 8 /* SkippedTokenTrivia */; - }; - - AbstractTrivia.prototype.collectTextElements = function (elements) { - elements.push(this.fullText()); - }; - return AbstractTrivia; - })(); - - var NormalTrivia = (function (_super) { - __extends(NormalTrivia, _super); - function NormalTrivia(kind, _text) { - _super.call(this, kind); - this._text = _text; - } - NormalTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - NormalTrivia.prototype.fullText = function () { - return this._text; - }; - - NormalTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return NormalTrivia; - })(AbstractTrivia); - - var SkippedTokenTrivia = (function (_super) { - __extends(SkippedTokenTrivia, _super); - function SkippedTokenTrivia(_skippedToken) { - _super.call(this, 8 /* SkippedTokenTrivia */); - this._skippedToken = _skippedToken; - } - SkippedTokenTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - SkippedTokenTrivia.prototype.fullText = function () { - return this.skippedToken().fullText(); - }; - - SkippedTokenTrivia.prototype.skippedToken = function () { - return this._skippedToken; - }; - return SkippedTokenTrivia; - })(AbstractTrivia); - - var DeferredTrivia = (function (_super) { - __extends(DeferredTrivia, _super); - function DeferredTrivia(kind, _text, _fullStart, _fullWidth) { - _super.call(this, kind); - this._text = _text; - this._fullStart = _fullStart; - this._fullWidth = _fullWidth; - this._fullText = null; - } - DeferredTrivia.prototype.fullWidth = function () { - return this._fullWidth; - }; - - DeferredTrivia.prototype.fullText = function () { - if (!this._fullText) { - this._fullText = this._text.substr(this._fullStart, this._fullWidth, false); - this._text = null; - } - - return this._fullText; - }; - - DeferredTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return DeferredTrivia; - })(AbstractTrivia); - - function deferredTrivia(kind, text, fullStart, fullWidth) { - return new DeferredTrivia(kind, text, fullStart, fullWidth); - } - Syntax.deferredTrivia = deferredTrivia; - - function trivia(kind, text) { - return new NormalTrivia(kind, text); - } - Syntax.trivia = trivia; - - function skippedTokenTrivia(token) { - TypeScript.Debug.assert(!token.hasLeadingTrivia()); - TypeScript.Debug.assert(!token.hasTrailingTrivia()); - TypeScript.Debug.assert(token.fullWidth() > 0); - return new SkippedTokenTrivia(token); - } - Syntax.skippedTokenTrivia = skippedTokenTrivia; - - function spaces(count) { - return trivia(4 /* WhitespaceTrivia */, TypeScript.StringUtilities.repeat(" ", count)); - } - Syntax.spaces = spaces; - - function whitespace(text) { - return trivia(4 /* WhitespaceTrivia */, text); - } - Syntax.whitespace = whitespace; - - function multiLineComment(text) { - return trivia(6 /* MultiLineCommentTrivia */, text); - } - Syntax.multiLineComment = multiLineComment; - - function singleLineComment(text) { - return trivia(7 /* SingleLineCommentTrivia */, text); - } - Syntax.singleLineComment = singleLineComment; - - Syntax.spaceTrivia = spaces(1); - Syntax.lineFeedTrivia = trivia(5 /* NewLineTrivia */, "\n"); - Syntax.carriageReturnTrivia = trivia(5 /* NewLineTrivia */, "\r"); - Syntax.carriageReturnLineFeedTrivia = trivia(5 /* NewLineTrivia */, "\r\n"); - - function splitMultiLineCommentTriviaIntoMultipleLines(trivia) { - var result = []; - - var triviaText = trivia.fullText(); - var currentIndex = 0; - - for (var i = 0; i < triviaText.length; i++) { - var ch = triviaText.charCodeAt(i); - - var isCarriageReturnLineFeed = false; - switch (ch) { - case 13 /* carriageReturn */: - if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) { - i++; - } - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - result.push(triviaText.substring(currentIndex, i + 1)); - - currentIndex = i + 1; - continue; - } - } - - result.push(triviaText.substring(currentIndex)); - return result; - } - Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - Syntax.emptyTriviaList = { - kind: function () { - return 3 /* TriviaList */; - }, - count: function () { - return 0; - }, - syntaxTriviaAt: function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - last: function () { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - fullWidth: function () { - return 0; - }, - fullText: function () { - return ""; - }, - hasComment: function () { - return false; - }, - hasNewLine: function () { - return false; - }, - hasSkippedToken: function () { - return false; - }, - toJSON: function (key) { - return []; - }, - collectTextElements: function (elements) { - }, - toArray: function () { - return []; - }, - concat: function (trivia) { - return trivia; - } - }; - - function concatTrivia(list1, list2) { - if (list1.count() === 0) { - return list2; - } - - if (list2.count() === 0) { - return list1; - } - - var trivia = list1.toArray(); - trivia.push.apply(trivia, list2.toArray()); - - return triviaList(trivia); - } - - function isComment(trivia) { - return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */; - } - - var SingletonSyntaxTriviaList = (function () { - function SingletonSyntaxTriviaList(item) { - this.item = item; - } - SingletonSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - SingletonSyntaxTriviaList.prototype.count = function () { - return 1; - }; - - SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.last = function () { - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxTriviaList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxTriviaList.prototype.hasComment = function () { - return isComment(this.item); - }; - - SingletonSyntaxTriviaList.prototype.hasNewLine = function () { - return this.item.kind() === 5 /* NewLineTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () { - return this.item.kind() === 8 /* SkippedTokenTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxTriviaList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return SingletonSyntaxTriviaList; - })(); - - var NormalSyntaxTriviaList = (function () { - function NormalSyntaxTriviaList(trivia) { - this.trivia = trivia; - } - NormalSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - NormalSyntaxTriviaList.prototype.count = function () { - return this.trivia.length; - }; - - NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index < 0 || index >= this.trivia.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.trivia[index]; - }; - - NormalSyntaxTriviaList.prototype.last = function () { - return this.trivia[this.trivia.length - 1]; - }; - - NormalSyntaxTriviaList.prototype.fullWidth = function () { - return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { - return t.fullWidth(); - }); - }; - - NormalSyntaxTriviaList.prototype.fullText = function () { - var result = ""; - - for (var i = 0, n = this.trivia.length; i < n; i++) { - result += this.trivia[i].fullText(); - } - - return result; - }; - - NormalSyntaxTriviaList.prototype.hasComment = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (isComment(this.trivia[i])) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasNewLine = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 5 /* NewLineTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasSkippedToken = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.toJSON = function (key) { - return this.trivia; - }; - - NormalSyntaxTriviaList.prototype.collectTextElements = function (elements) { - for (var i = 0; i < this.trivia.length; i++) { - this.trivia[i].collectTextElements(elements); - } - }; - - NormalSyntaxTriviaList.prototype.toArray = function () { - return this.trivia.slice(0); - }; - - NormalSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return NormalSyntaxTriviaList; - })(); - - function triviaList(trivia) { - if (trivia === undefined || trivia === null || trivia.length === 0) { - return Syntax.emptyTriviaList; - } - - if (trivia.length === 1) { - return new SingletonSyntaxTriviaList(trivia[0]); - } - - return new NormalSyntaxTriviaList(trivia); - } - Syntax.triviaList = triviaList; - - Syntax.spaceTriviaList = triviaList([Syntax.spaceTrivia]); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxUtilities = (function () { - function SyntaxUtilities() { - } - SyntaxUtilities.isAngleBracket = function (positionedElement) { - var element = positionedElement.element(); - var parent = positionedElement.parentElement(); - if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) { - switch (parent.kind()) { - case 228 /* TypeArgumentList */: - case 229 /* TypeParameterList */: - case 220 /* CastExpression */: - return true; - } - } - - return false; - }; - - SyntaxUtilities.getToken = function (list, kind) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var token = list.childAt(i); - if (token.tokenKind === kind) { - return token; - } - } - - return null; - }; - - SyntaxUtilities.containsToken = function (list, kind) { - return SyntaxUtilities.getToken(list, kind) !== null; - }; - - SyntaxUtilities.hasExportKeyword = function (moduleElement) { - return SyntaxUtilities.getExportKeyword(moduleElement) !== null; - }; - - SyntaxUtilities.getExportKeyword = function (moduleElement) { - switch (moduleElement.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - case 128 /* InterfaceDeclaration */: - case 133 /* ImportDeclaration */: - return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */); - default: - return null; - } - }; - - SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) { - if (!positionNode) { - return false; - } - - var node = positionNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - return true; - } - - case 133 /* ImportDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - if (node.isClassElement() || node.isModuleElement()) { - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - - case 243 /* EnumElement */: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode().containingNode()); - - default: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - }; - return SyntaxUtilities; - })(); - TypeScript.SyntaxUtilities = SyntaxUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxVisitor = (function () { - function SyntaxVisitor() { - } - SyntaxVisitor.prototype.defaultVisit = function (node) { - return null; - }; - - SyntaxVisitor.prototype.visitToken = function (token) { - return this.defaultVisit(token); - }; - - SyntaxVisitor.prototype.visitSourceUnit = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExternalModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleNameModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitImportDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExportAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitClassDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInterfaceDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitHeritageClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclarator = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEqualsValueClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPrefixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitOmittedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitQualifiedName = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGenericType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeQuery = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeAnnotation = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBlock = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPostfixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElementAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInvocationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBinaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConditionalExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMethodSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPropertySignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCallSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstraint = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElseClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIfStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExpressionStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexMemberDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitThrowStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitReturnStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectCreationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSwitchStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCaseSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDefaultSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBreakStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitContinueStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForInStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWhileStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWithStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumElement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCastExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimplePropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEmptyStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTryStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCatchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFinallyClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitLabeledStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDoStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeOfExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDeleteExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVoidExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDebuggerStatement = function (node) { - return this.defaultVisit(node); - }; - return SyntaxVisitor; - })(); - TypeScript.SyntaxVisitor = SyntaxVisitor; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxWalker = (function () { - function SyntaxWalker() { - } - SyntaxWalker.prototype.visitToken = function (token) { - }; - - SyntaxWalker.prototype.visitNode = function (node) { - node.accept(this); - }; - - SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) { - if (nodeOrToken.isToken()) { - this.visitToken(nodeOrToken); - } else { - this.visitNode(nodeOrToken); - } - }; - - SyntaxWalker.prototype.visitOptionalToken = function (token) { - if (token === null) { - return; - } - - this.visitToken(token); - }; - - SyntaxWalker.prototype.visitOptionalNode = function (node) { - if (node === null) { - return; - } - - this.visitNode(node); - }; - - SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) { - if (nodeOrToken === null) { - return; - } - - this.visitNodeOrToken(nodeOrToken); - }; - - SyntaxWalker.prototype.visitList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.visitNodeOrToken(list.childAt(i)); - } - }; - - SyntaxWalker.prototype.visitSeparatedList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - this.visitNodeOrToken(item); - } - }; - - SyntaxWalker.prototype.visitSourceUnit = function (node) { - this.visitList(node.moduleElements); - this.visitToken(node.endOfFileToken); - }; - - SyntaxWalker.prototype.visitExternalModuleReference = function (node) { - this.visitToken(node.requireKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.stringLiteral); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) { - this.visitNodeOrToken(node.moduleName); - }; - - SyntaxWalker.prototype.visitImportDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.importKeyword); - this.visitToken(node.identifier); - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.moduleReference); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitExportAssignment = function (node) { - this.visitToken(node.exportKeyword); - this.visitToken(node.equalsToken); - this.visitToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitClassDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.classKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitToken(node.openBraceToken); - this.visitList(node.classElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.interfaceKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitNode(node.body); - }; - - SyntaxWalker.prototype.visitHeritageClause = function (node) { - this.visitToken(node.extendsOrImplementsKeyword); - this.visitSeparatedList(node.typeNames); - }; - - SyntaxWalker.prototype.visitModuleDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.moduleKeyword); - this.visitOptionalNodeOrToken(node.name); - this.visitOptionalToken(node.stringLiteral); - this.visitToken(node.openBraceToken); - this.visitList(node.moduleElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.functionKeyword); - this.visitToken(node.identifier); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableStatement = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclaration); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableDeclaration = function (node) { - this.visitToken(node.varKeyword); - this.visitSeparatedList(node.variableDeclarators); - }; - - SyntaxWalker.prototype.visitVariableDeclarator = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitEqualsValueClause = function (node) { - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.value); - }; - - SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) { - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.operand); - }; - - SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) { - this.visitToken(node.openBracketToken); - this.visitSeparatedList(node.expressions); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitOmittedExpression = function (node) { - }; - - SyntaxWalker.prototype.visitParenthesizedExpression = function (node) { - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - this.visitNode(node.callSignature); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitQualifiedName = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.dotToken); - this.visitToken(node.right); - }; - - SyntaxWalker.prototype.visitTypeArgumentList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeArguments); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitConstructorType = function (node) { - this.visitToken(node.newKeyword); - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitFunctionType = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitObjectType = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.typeMembers); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitArrayType = function (node) { - this.visitNodeOrToken(node.type); - this.visitToken(node.openBracketToken); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitGenericType = function (node) { - this.visitNodeOrToken(node.name); - this.visitNode(node.typeArgumentList); - }; - - SyntaxWalker.prototype.visitTypeQuery = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.name); - }; - - SyntaxWalker.prototype.visitTypeAnnotation = function (node) { - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitBlock = function (node) { - this.visitToken(node.openBraceToken); - this.visitList(node.statements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitParameter = function (node) { - this.visitOptionalToken(node.dotDotDotToken); - this.visitList(node.modifiers); - this.visitToken(node.identifier); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitMemberAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.dotToken); - this.visitToken(node.name); - }; - - SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) { - this.visitNodeOrToken(node.operand); - this.visitToken(node.operatorToken); - }; - - SyntaxWalker.prototype.visitElementAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.openBracketToken); - this.visitNodeOrToken(node.argumentExpression); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitInvocationExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitArgumentList = function (node) { - this.visitOptionalNode(node.typeArgumentList); - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.arguments); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitBinaryExpression = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.right); - }; - - SyntaxWalker.prototype.visitConditionalExpression = function (node) { - this.visitNodeOrToken(node.condition); - this.visitToken(node.questionToken); - this.visitNodeOrToken(node.whenTrue); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.whenFalse); - }; - - SyntaxWalker.prototype.visitConstructSignature = function (node) { - this.visitToken(node.newKeyword); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitMethodSignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitIndexSignature = function (node) { - this.visitToken(node.openBracketToken); - this.visitNode(node.parameter); - this.visitToken(node.closeBracketToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitPropertySignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitCallSignature = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitParameterList = function (node) { - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.parameters); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitTypeParameterList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeParameters); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitTypeParameter = function (node) { - this.visitToken(node.identifier); - this.visitOptionalNode(node.constraint); - }; - - SyntaxWalker.prototype.visitConstraint = function (node) { - this.visitToken(node.extendsKeyword); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitElseClause = function (node) { - this.visitToken(node.elseKeyword); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitIfStatement = function (node) { - this.visitToken(node.ifKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - this.visitOptionalNode(node.elseClause); - }; - - SyntaxWalker.prototype.visitExpressionStatement = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitConstructorDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.constructorKeyword); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitGetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.getKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitSetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.setKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclarator); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.indexSignature); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitThrowStatement = function (node) { - this.visitToken(node.throwKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitReturnStatement = function (node) { - this.visitToken(node.returnKeyword); - this.visitOptionalNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitObjectCreationExpression = function (node) { - this.visitToken(node.newKeyword); - this.visitNodeOrToken(node.expression); - this.visitOptionalNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitSwitchStatement = function (node) { - this.visitToken(node.switchKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitToken(node.openBraceToken); - this.visitList(node.switchClauses); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitCaseSwitchClause = function (node) { - this.visitToken(node.caseKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) { - this.visitToken(node.defaultKeyword); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitBreakStatement = function (node) { - this.visitToken(node.breakKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitContinueStatement = function (node) { - this.visitToken(node.continueKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitForStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.initializer); - this.visitToken(node.firstSemicolonToken); - this.visitOptionalNodeOrToken(node.condition); - this.visitToken(node.secondSemicolonToken); - this.visitOptionalNodeOrToken(node.incrementor); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitForInStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.left); - this.visitToken(node.inKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWhileStatement = function (node) { - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWithStatement = function (node) { - this.visitToken(node.withKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitEnumDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.enumKeyword); - this.visitToken(node.identifier); - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.enumElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitEnumElement = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitCastExpression = function (node) { - this.visitToken(node.lessThanToken); - this.visitNodeOrToken(node.type); - this.visitToken(node.greaterThanToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.propertyAssignments); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFunctionExpression = function (node) { - this.visitToken(node.functionKeyword); - this.visitOptionalToken(node.identifier); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitEmptyStatement = function (node) { - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTryStatement = function (node) { - this.visitToken(node.tryKeyword); - this.visitNode(node.block); - this.visitOptionalNode(node.catchClause); - this.visitOptionalNode(node.finallyClause); - }; - - SyntaxWalker.prototype.visitCatchClause = function (node) { - this.visitToken(node.catchKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeAnnotation); - this.visitToken(node.closeParenToken); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFinallyClause = function (node) { - this.visitToken(node.finallyKeyword); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitLabeledStatement = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitDoStatement = function (node) { - this.visitToken(node.doKeyword); - this.visitNodeOrToken(node.statement); - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTypeOfExpression = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDeleteExpression = function (node) { - this.visitToken(node.deleteKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitVoidExpression = function (node) { - this.visitToken(node.voidKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDebuggerStatement = function (node) { - this.visitToken(node.debuggerKeyword); - this.visitToken(node.semicolonToken); - }; - return SyntaxWalker; - })(); - TypeScript.SyntaxWalker = SyntaxWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionTrackingWalker = (function (_super) { - __extends(PositionTrackingWalker, _super); - function PositionTrackingWalker() { - _super.apply(this, arguments); - this._position = 0; - } - PositionTrackingWalker.prototype.visitToken = function (token) { - this._position += token.fullWidth(); - }; - - PositionTrackingWalker.prototype.position = function () { - return this._position; - }; - - PositionTrackingWalker.prototype.skip = function (element) { - this._position += element.fullWidth(); - }; - return PositionTrackingWalker; - })(TypeScript.SyntaxWalker); - TypeScript.PositionTrackingWalker = PositionTrackingWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxInformationMap = (function (_super) { - __extends(SyntaxInformationMap, _super); - function SyntaxInformationMap(trackParents, trackPreviousToken) { - _super.call(this); - this.trackParents = trackParents; - this.trackPreviousToken = trackPreviousToken; - this.tokenToInformation = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this.elementToPosition = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._previousToken = null; - this._previousTokenInformation = null; - this._currentPosition = 0; - this._elementToParent = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._parentStack = []; - this._parentStack.push(null); - } - SyntaxInformationMap.create = function (node, trackParents, trackPreviousToken) { - var map = new SyntaxInformationMap(trackParents, trackPreviousToken); - map.visitNode(node); - return map; - }; - - SyntaxInformationMap.prototype.visitNode = function (node) { - this.trackParents && this._elementToParent.add(node, TypeScript.ArrayUtilities.last(this._parentStack)); - this.elementToPosition.add(node, this._currentPosition); - - this.trackParents && this._parentStack.push(node); - _super.prototype.visitNode.call(this, node); - this.trackParents && this._parentStack.pop(); - }; - - SyntaxInformationMap.prototype.visitToken = function (token) { - this.trackParents && this._elementToParent.add(token, TypeScript.ArrayUtilities.last(this._parentStack)); - - if (this.trackPreviousToken) { - var tokenInformation = { - previousToken: this._previousToken, - nextToken: null - }; - - if (this._previousTokenInformation !== null) { - this._previousTokenInformation.nextToken = token; - } - - this._previousToken = token; - this._previousTokenInformation = tokenInformation; - - this.tokenToInformation.add(token, tokenInformation); - } - - this.elementToPosition.add(token, this._currentPosition); - this._currentPosition += token.fullWidth(); - }; - - SyntaxInformationMap.prototype.parent = function (element) { - return this._elementToParent.get(element); - }; - - SyntaxInformationMap.prototype.fullStart = function (element) { - return this.elementToPosition.get(element); - }; - - SyntaxInformationMap.prototype.start = function (element) { - return this.fullStart(element) + element.leadingTriviaWidth(); - }; - - SyntaxInformationMap.prototype.end = function (element) { - return this.start(element) + element.width(); - }; - - SyntaxInformationMap.prototype.previousToken = function (token) { - return this.tokenInformation(token).previousToken; - }; - - SyntaxInformationMap.prototype.tokenInformation = function (token) { - return this.tokenToInformation.get(token); - }; - - SyntaxInformationMap.prototype.firstTokenInLineContainingToken = function (token) { - var current = token; - while (true) { - var information = this.tokenInformation(current); - if (this.isFirstTokenInLineWorker(information)) { - break; - } - - current = information.previousToken; - } - - return current; - }; - - SyntaxInformationMap.prototype.isFirstTokenInLine = function (token) { - var information = this.tokenInformation(token); - return this.isFirstTokenInLineWorker(information); - }; - - SyntaxInformationMap.prototype.isFirstTokenInLineWorker = function (information) { - return information.previousToken === null || information.previousToken.hasTrailingNewLine(); - }; - return SyntaxInformationMap; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxInformationMap = SyntaxInformationMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNodeInvariantsChecker = (function (_super) { - __extends(SyntaxNodeInvariantsChecker, _super); - function SyntaxNodeInvariantsChecker() { - _super.apply(this, arguments); - this.tokenTable = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - } - SyntaxNodeInvariantsChecker.checkInvariants = function (node) { - node.accept(new SyntaxNodeInvariantsChecker()); - }; - - SyntaxNodeInvariantsChecker.prototype.visitToken = function (token) { - this.tokenTable.add(token, token); - }; - return SyntaxNodeInvariantsChecker; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxNodeInvariantsChecker = SyntaxNodeInvariantsChecker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DepthLimitedWalker = (function (_super) { - __extends(DepthLimitedWalker, _super); - function DepthLimitedWalker(maximumDepth) { - _super.call(this); - this._depth = 0; - this._maximumDepth = 0; - this._maximumDepth = maximumDepth; - } - DepthLimitedWalker.prototype.visitNode = function (node) { - if (this._depth < this._maximumDepth) { - this._depth++; - _super.prototype.visitNode.call(this, node); - this._depth--; - } else { - this.skip(node); - } - }; - return DepthLimitedWalker; - })(TypeScript.PositionTrackingWalker); - TypeScript.DepthLimitedWalker = DepthLimitedWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Parser) { - - - var ExpressionPrecedence; - (function (ExpressionPrecedence) { - ExpressionPrecedence[ExpressionPrecedence["CommaExpressionPrecedence"] = 1] = "CommaExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["AssignmentExpressionPrecedence"] = 2] = "AssignmentExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ConditionalExpressionPrecedence"] = 3] = "ConditionalExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ArrowFunctionPrecedence"] = 4] = "ArrowFunctionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["LogicalOrExpressionPrecedence"] = 5] = "LogicalOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["LogicalAndExpressionPrecedence"] = 6] = "LogicalAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 7] = "BitwiseOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 8] = "BitwiseExclusiveOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 9] = "BitwiseAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["EqualityExpressionPrecedence"] = 10] = "EqualityExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["RelationalExpressionPrecedence"] = 11] = "RelationalExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["ShiftExpressionPrecdence"] = 12] = "ShiftExpressionPrecdence"; - ExpressionPrecedence[ExpressionPrecedence["AdditiveExpressionPrecedence"] = 13] = "AdditiveExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 14] = "MultiplicativeExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["UnaryExpressionPrecedence"] = 15] = "UnaryExpressionPrecedence"; - })(ExpressionPrecedence || (ExpressionPrecedence = {})); - - var ListParsingState; - (function (ListParsingState) { - ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 1 << 0] = "SourceUnit_ModuleElements"; - ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1 << 1] = "ClassDeclaration_ClassElements"; - ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 1 << 2] = "ModuleDeclaration_ModuleElements"; - ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 1 << 3] = "SwitchStatement_SwitchClauses"; - ListParsingState[ListParsingState["SwitchClause_Statements"] = 1 << 4] = "SwitchClause_Statements"; - ListParsingState[ListParsingState["Block_Statements"] = 1 << 5] = "Block_Statements"; - ListParsingState[ListParsingState["TryBlock_Statements"] = 1 << 6] = "TryBlock_Statements"; - ListParsingState[ListParsingState["CatchBlock_Statements"] = 1 << 7] = "CatchBlock_Statements"; - ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 1 << 8] = "EnumDeclaration_EnumElements"; - ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 1 << 9] = "ObjectType_TypeMembers"; - ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 1 << 10] = "ClassOrInterfaceDeclaration_HeritageClauses"; - ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 1 << 11] = "HeritageClause_TypeNameList"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 1 << 12] = "VariableDeclaration_VariableDeclarators_AllowIn"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 1 << 13] = "VariableDeclaration_VariableDeclarators_DisallowIn"; - ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 1 << 14] = "ArgumentList_AssignmentExpressions"; - ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 1 << 15] = "ObjectLiteralExpression_PropertyAssignments"; - ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 1 << 16] = "ArrayLiteralExpression_AssignmentExpressions"; - ListParsingState[ListParsingState["ParameterList_Parameters"] = 1 << 17] = "ParameterList_Parameters"; - ListParsingState[ListParsingState["TypeArgumentList_Types"] = 1 << 18] = "TypeArgumentList_Types"; - ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 1 << 19] = "TypeParameterList_TypeParameters"; - - ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState"; - ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState"; - })(ListParsingState || (ListParsingState = {})); - - var SyntaxCursor = (function () { - function SyntaxCursor(sourceUnit) { - this._elements = []; - this._index = 0; - this._pinCount = 0; - sourceUnit.insertChildrenInto(this._elements, 0); - } - SyntaxCursor.prototype.isFinished = function () { - return this._index === this._elements.length; - }; - - SyntaxCursor.prototype.currentElement = function () { - if (this.isFinished()) { - return null; - } - - return this._elements[this._index]; - }; - - SyntaxCursor.prototype.currentNode = function () { - var element = this.currentElement(); - return element !== null && element.isNode() ? element : null; - }; - - SyntaxCursor.prototype.moveToFirstChild = function () { - if (this.isFinished()) { - return; - } - - var element = this._elements[this._index]; - if (element.isToken()) { - return; - } - - var node = element; - - this._elements.splice(this._index, 1); - - node.insertChildrenInto(this._elements, this._index); - }; - - SyntaxCursor.prototype.moveToNextSibling = function () { - if (this.isFinished()) { - return; - } - - if (this._pinCount > 0) { - this._index++; - return; - } - - this._elements.shift(); - }; - - SyntaxCursor.prototype.getAndPinCursorIndex = function () { - this._pinCount++; - return this._index; - }; - - SyntaxCursor.prototype.releaseAndUnpinCursorIndex = function (index) { - this._pinCount--; - if (this._pinCount === 0) { - } - }; - - SyntaxCursor.prototype.rewindToPinnedCursorIndex = function (index) { - this._index = index; - }; - - SyntaxCursor.prototype.pinCount = function () { - return this._pinCount; - }; - - SyntaxCursor.prototype.moveToFirstToken = function () { - var element; - - while (!this.isFinished()) { - element = this.currentElement(); - if (element.isNode()) { - this.moveToFirstChild(); - continue; - } - - return; - } - }; - - SyntaxCursor.prototype.currentToken = function () { - this.moveToFirstToken(); - if (this.isFinished()) { - return null; - } - - var element = this.currentElement(); - - return element; - }; - - SyntaxCursor.prototype.peekToken = function (n) { - this.moveToFirstToken(); - var pin = this.getAndPinCursorIndex(); - - for (var i = 0; i < n; i++) { - this.moveToNextSibling(); - this.moveToFirstToken(); - } - - var result = this.currentToken(); - this.rewindToPinnedCursorIndex(pin); - this.releaseAndUnpinCursorIndex(pin); - - return result; - }; - return SyntaxCursor; - })(); - - - - var NormalParserSource = (function () { - function NormalParserSource(fileName, text, languageVersion) { - this._previousToken = null; - this._absolutePosition = 0; - this._tokenDiagnostics = []; - this.rewindPointPool = []; - this.rewindPointPoolCount = 0; - this.slidingWindow = new TypeScript.SlidingWindow(this, TypeScript.ArrayUtilities.createArray(32, null), null); - this.scanner = new TypeScript.Scanner(fileName, text, languageVersion); - } - NormalParserSource.prototype.currentNode = function () { - return null; - }; - - NormalParserSource.prototype.moveToNextNode = function () { - throw TypeScript.Errors.invalidOperation(); - }; - - NormalParserSource.prototype.absolutePosition = function () { - return this._absolutePosition; - }; - - NormalParserSource.prototype.previousToken = function () { - return this._previousToken; - }; - - NormalParserSource.prototype.tokenDiagnostics = function () { - return this._tokenDiagnostics; - }; - - NormalParserSource.prototype.getOrCreateRewindPoint = function () { - if (this.rewindPointPoolCount === 0) { - return {}; - } - - this.rewindPointPoolCount--; - var result = this.rewindPointPool[this.rewindPointPoolCount]; - this.rewindPointPool[this.rewindPointPoolCount] = null; - return result; - }; - - NormalParserSource.prototype.getRewindPoint = function () { - var slidingWindowIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var rewindPoint = this.getOrCreateRewindPoint(); - - rewindPoint.slidingWindowIndex = slidingWindowIndex; - rewindPoint.previousToken = this._previousToken; - rewindPoint.absolutePosition = this._absolutePosition; - - rewindPoint.pinCount = this.slidingWindow.pinCount(); - - return rewindPoint; - }; - - NormalParserSource.prototype.isPinned = function () { - return this.slidingWindow.pinCount() > 0; - }; - - NormalParserSource.prototype.rewind = function (rewindPoint) { - this.slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); - - this._previousToken = rewindPoint.previousToken; - this._absolutePosition = rewindPoint.absolutePosition; - }; - - NormalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex); - - this.rewindPointPool[this.rewindPointPoolCount] = rewindPoint; - this.rewindPointPoolCount++; - }; - - NormalParserSource.prototype.fetchMoreItems = function (allowRegularExpression, sourceIndex, window, destinationIndex, spaceAvailable) { - window[destinationIndex] = this.scanner.scan(this._tokenDiagnostics, allowRegularExpression); - return 1; - }; - - NormalParserSource.prototype.peekToken = function (n) { - return this.slidingWindow.peekItemN(n); - }; - - NormalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - this._absolutePosition += currentToken.fullWidth(); - this._previousToken = currentToken; - - this.slidingWindow.moveToNextItem(); - }; - - NormalParserSource.prototype.currentToken = function () { - return this.slidingWindow.currentItem(false); - }; - - NormalParserSource.prototype.removeDiagnosticsOnOrAfterPosition = function (position) { - var tokenDiagnosticsLength = this._tokenDiagnostics.length; - while (tokenDiagnosticsLength > 0) { - var diagnostic = this._tokenDiagnostics[tokenDiagnosticsLength - 1]; - if (diagnostic.start() >= position) { - tokenDiagnosticsLength--; - } else { - break; - } - } - - this._tokenDiagnostics.length = tokenDiagnosticsLength; - }; - - NormalParserSource.prototype.resetToPosition = function (absolutePosition, previousToken) { - this._absolutePosition = absolutePosition; - this._previousToken = previousToken; - - this.removeDiagnosticsOnOrAfterPosition(absolutePosition); - - this.slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); - - this.scanner.setAbsoluteIndex(absolutePosition); - }; - - NormalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - this.resetToPosition(this._absolutePosition, this._previousToken); - - var token = this.slidingWindow.currentItem(true); - - return token; - }; - return NormalParserSource; - })(); - - var IncrementalParserSource = (function () { - function IncrementalParserSource(oldSyntaxTree, textChangeRange, newText) { - this._changeDelta = 0; - var oldSourceUnit = oldSyntaxTree.sourceUnit(); - this._oldSourceUnitCursor = new SyntaxCursor(oldSourceUnit); - - this._changeRange = IncrementalParserSource.extendToAffectedRange(textChangeRange, oldSourceUnit); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert((oldSourceUnit.fullWidth() - this._changeRange.span().length() + this._changeRange.newLength()) === newText.length()); - } - - this._normalParserSource = new NormalParserSource(oldSyntaxTree.fileName(), newText, oldSyntaxTree.parseOptions().languageVersion()); - } - IncrementalParserSource.extendToAffectedRange = function (changeRange, sourceUnit) { - var maxLookahead = 1; - - var start = changeRange.span().start(); - - for (var i = 0; start > 0 && i <= maxLookahead; i++) { - var token = sourceUnit.findToken(start); - - var position = token.fullStart(); - - start = TypeScript.MathPrototype.max(0, position - 1); - } - - var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end()); - var finalLength = changeRange.newLength() + (changeRange.span().start() - start); - - return new TypeScript.TextChangeRange(finalSpan, finalLength); - }; - - IncrementalParserSource.prototype.absolutePosition = function () { - return this._normalParserSource.absolutePosition(); - }; - - IncrementalParserSource.prototype.previousToken = function () { - return this._normalParserSource.previousToken(); - }; - - IncrementalParserSource.prototype.tokenDiagnostics = function () { - return this._normalParserSource.tokenDiagnostics(); - }; - - IncrementalParserSource.prototype.getRewindPoint = function () { - var rewindPoint = this._normalParserSource.getRewindPoint(); - var oldSourceUnitCursorIndex = this._oldSourceUnitCursor.getAndPinCursorIndex(); - - rewindPoint.changeDelta = this._changeDelta; - rewindPoint.changeRange = this._changeRange; - rewindPoint.oldSourceUnitCursorIndex = oldSourceUnitCursorIndex; - - return rewindPoint; - }; - - IncrementalParserSource.prototype.rewind = function (rewindPoint) { - this._changeRange = rewindPoint.changeRange; - this._changeDelta = rewindPoint.changeDelta; - this._oldSourceUnitCursor.rewindToPinnedCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - - this._normalParserSource.rewind(rewindPoint); - }; - - IncrementalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this._oldSourceUnitCursor.releaseAndUnpinCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - this._normalParserSource.releaseRewindPoint(rewindPoint); - }; - - IncrementalParserSource.prototype.canReadFromOldSourceUnit = function () { - if (this._normalParserSource.isPinned()) { - return false; - } - - if (this._changeRange !== null && this._changeRange.newSpan().intersectsWithPosition(this.absolutePosition())) { - return false; - } - - this.syncCursorToNewTextIfBehind(); - - return this._changeDelta === 0 && !this._oldSourceUnitCursor.isFinished(); - }; - - IncrementalParserSource.prototype.currentNode = function () { - if (this.canReadFromOldSourceUnit()) { - return this.tryGetNodeFromOldSourceUnit(); - } - - return null; - }; - - IncrementalParserSource.prototype.currentToken = function () { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryGetTokenFromOldSourceUnit(); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.currentToken(); - }; - - IncrementalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - return this._normalParserSource.currentTokenAllowingRegularExpression(); - }; - - IncrementalParserSource.prototype.syncCursorToNewTextIfBehind = function () { - while (true) { - if (this._oldSourceUnitCursor.isFinished()) { - break; - } - - if (this._changeDelta >= 0) { - break; - } - - var currentElement = this._oldSourceUnitCursor.currentElement(); - - if (currentElement.isNode() && (currentElement.fullWidth() > Math.abs(this._changeDelta))) { - this._oldSourceUnitCursor.moveToFirstChild(); - } else { - this._oldSourceUnitCursor.moveToNextSibling(); - - this._changeDelta += currentElement.fullWidth(); - } - } - }; - - IncrementalParserSource.prototype.intersectsWithChangeRangeSpanInOriginalText = function (start, length) { - return this._changeRange !== null && this._changeRange.span().intersectsWith(start, length); - }; - - IncrementalParserSource.prototype.tryGetNodeFromOldSourceUnit = function () { - while (true) { - var node = this._oldSourceUnitCursor.currentNode(); - if (node === null) { - return null; - } - - if (!this.intersectsWithChangeRangeSpanInOriginalText(this.absolutePosition(), node.fullWidth())) { - if (!node.isIncrementallyUnusable()) { - return node; - } - } - - this._oldSourceUnitCursor.moveToFirstChild(); - } - }; - - IncrementalParserSource.prototype.canReuseTokenFromOldSourceUnit = function (position, token) { - if (token !== null) { - if (!this.intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { - if (!token.isIncrementallyUnusable()) { - return true; - } - } - } - - return false; - }; - - IncrementalParserSource.prototype.tryGetTokenFromOldSourceUnit = function () { - var token = this._oldSourceUnitCursor.currentToken(); - - return this.canReuseTokenFromOldSourceUnit(this.absolutePosition(), token) ? token : null; - }; - - IncrementalParserSource.prototype.peekToken = function (n) { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryPeekTokenFromOldSourceUnit(n); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.peekToken(n); - }; - - IncrementalParserSource.prototype.tryPeekTokenFromOldSourceUnit = function (n) { - var currentPosition = this.absolutePosition(); - for (var i = 0; i < n; i++) { - var interimToken = this._oldSourceUnitCursor.peekToken(i); - if (!this.canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { - return null; - } - - currentPosition += interimToken.fullWidth(); - } - - var token = this._oldSourceUnitCursor.peekToken(n); - return this.canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null; - }; - - IncrementalParserSource.prototype.moveToNextNode = function () { - var currentElement = this._oldSourceUnitCursor.currentElement(); - var currentNode = this._oldSourceUnitCursor.currentNode(); - - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentNode.fullWidth(); - var previousToken = currentNode.lastToken(); - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - }; - - IncrementalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - - if (this._oldSourceUnitCursor.currentToken() === currentToken) { - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentToken.fullWidth(); - var previousToken = currentToken; - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - } else { - this._changeDelta -= currentToken.fullWidth(); - - this._normalParserSource.moveToNextToken(); - - if (this._changeRange !== null) { - var changeRangeSpanInNewText = this._changeRange.newSpan(); - if (this.absolutePosition() >= changeRangeSpanInNewText.end()) { - this._changeDelta += this._changeRange.newLength() - this._changeRange.span().length(); - this._changeRange = null; - } - } - } - }; - return IncrementalParserSource; - })(); - - var ParserImpl = (function () { - function ParserImpl(fileName, lineMap, source, parseOptions, newText_forDebuggingPurposesOnly) { - this.newText_forDebuggingPurposesOnly = newText_forDebuggingPurposesOnly; - this.listParsingState = 0; - this.isInStrictMode = false; - this.diagnostics = []; - this.factory = TypeScript.Syntax.normalModeFactory; - this.mergeTokensStorage = []; - this.arrayPool = []; - this.fileName = fileName; - this.lineMap = lineMap; - this.source = source; - this.parseOptions = parseOptions; - } - ParserImpl.prototype.getRewindPoint = function () { - var rewindPoint = this.source.getRewindPoint(); - - rewindPoint.diagnosticsCount = this.diagnostics.length; - - rewindPoint.isInStrictMode = this.isInStrictMode; - rewindPoint.listParsingState = this.listParsingState; - - return rewindPoint; - }; - - ParserImpl.prototype.rewind = function (rewindPoint) { - this.source.rewind(rewindPoint); - - this.diagnostics.length = rewindPoint.diagnosticsCount; - }; - - ParserImpl.prototype.releaseRewindPoint = function (rewindPoint) { - this.source.releaseRewindPoint(rewindPoint); - }; - - ParserImpl.prototype.currentTokenStart = function () { - return this.source.absolutePosition() + this.currentToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenStart = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.source.absolutePosition() - this.previousToken().fullWidth() + this.previousToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenEnd = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.previousTokenStart() + this.previousToken().width(); - }; - - ParserImpl.prototype.currentNode = function () { - var node = this.source.currentNode(); - - if (node === null || node.parsedInStrictMode() !== this.isInStrictMode) { - return null; - } - - return node; - }; - - ParserImpl.prototype.currentToken = function () { - return this.source.currentToken(); - }; - - ParserImpl.prototype.currentTokenAllowingRegularExpression = function () { - return this.source.currentTokenAllowingRegularExpression(); - }; - - ParserImpl.prototype.peekToken = function (n) { - return this.source.peekToken(n); - }; - - ParserImpl.prototype.eatAnyToken = function () { - var token = this.currentToken(); - this.moveToNextToken(); - return token; - }; - - ParserImpl.prototype.moveToNextToken = function () { - this.source.moveToNextToken(); - }; - - ParserImpl.prototype.previousToken = function () { - return this.source.previousToken(); - }; - - ParserImpl.prototype.eatNode = function () { - var node = this.source.currentNode(); - this.source.moveToNextNode(); - return node; - }; - - ParserImpl.prototype.eatToken = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.tryEatToken = function (kind) { - if (this.currentToken().tokenKind === kind) { - return this.eatToken(kind); - } - - return null; - }; - - ParserImpl.prototype.eatKeyword = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.isIdentifier = function (token) { - var tokenKind = token.tokenKind; - - if (tokenKind === 11 /* IdentifierName */) { - return true; - } - - if (tokenKind >= 51 /* FirstFutureReservedStrictKeyword */) { - if (tokenKind <= 59 /* LastFutureReservedStrictKeyword */) { - return !this.isInStrictMode; - } - - return tokenKind <= 69 /* LastTypeScriptKeyword */; - } - - return false; - }; - - ParserImpl.prototype.eatIdentifierNameToken = function () { - var token = this.currentToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - this.moveToNextToken(); - return token; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)) { - this.moveToNextToken(); - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.eatIdentifierToken = function () { - var token = this.currentToken(); - if (this.isIdentifier(token)) { - this.moveToNextToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - return token; - } - - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.canEatAutomaticSemicolon = function (allowWithoutNewLine) { - var token = this.currentToken(); - - if (token.tokenKind === 10 /* EndOfFileToken */) { - return true; - } - - if (token.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - if (allowWithoutNewLine) { - return true; - } - - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.canEatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return true; - } - - return this.canEatAutomaticSemicolon(allowWithoutNewline); - }; - - ParserImpl.prototype.eatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return this.eatToken(78 /* SemicolonToken */); - } - - if (this.canEatAutomaticSemicolon(allowWithoutNewline)) { - var semicolonToken = TypeScript.Syntax.emptyToken(78 /* SemicolonToken */); - - if (!this.parseOptions.allowAutomaticSemicolonInsertion()) { - this.addDiagnostic(new TypeScript.Diagnostic(this.fileName, this.lineMap, this.previousTokenEnd(), 0, TypeScript.DiagnosticCode.Automatic_semicolon_insertion_not_allowed, null)); - } - - return semicolonToken; - } - - return this.eatToken(78 /* SemicolonToken */); - }; - - ParserImpl.prototype.isKeyword = function (kind) { - if (kind >= 15 /* FirstKeyword */) { - if (kind <= 50 /* LastFutureReservedKeyword */) { - return true; - } - - if (this.isInStrictMode) { - return kind <= 59 /* LastFutureReservedStrictKeyword */; - } - } - - return false; - }; - - ParserImpl.prototype.createMissingToken = function (expectedKind, actual) { - var diagnostic = this.getExpectedTokenDiagnostic(expectedKind, actual); - this.addDiagnostic(diagnostic); - - return TypeScript.Syntax.emptyToken(expectedKind); - }; - - ParserImpl.prototype.getExpectedTokenDiagnostic = function (expectedKind, actual) { - var token = this.currentToken(); - - if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(expectedKind)]); - } else { - if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.tokenKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword, [TypeScript.SyntaxFacts.getText(actual.tokenKind)]); - } else { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected, null); - } - } - }; - - ParserImpl.getPrecedence = function (expressionKind) { - switch (expressionKind) { - case 173 /* CommaExpression */: - return 1 /* CommaExpressionPrecedence */; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 2 /* AssignmentExpressionPrecedence */; - - case 186 /* ConditionalExpression */: - return 3 /* ConditionalExpressionPrecedence */; - - case 187 /* LogicalOrExpression */: - return 5 /* LogicalOrExpressionPrecedence */; - - case 188 /* LogicalAndExpression */: - return 6 /* LogicalAndExpressionPrecedence */; - - case 189 /* BitwiseOrExpression */: - return 7 /* BitwiseOrExpressionPrecedence */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 8 /* BitwiseExclusiveOrExpressionPrecedence */; - - case 191 /* BitwiseAndExpression */: - return 9 /* BitwiseAndExpressionPrecedence */; - - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - return 10 /* EqualityExpressionPrecedence */; - - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - return 11 /* RelationalExpressionPrecedence */; - - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - return 12 /* ShiftExpressionPrecdence */; - - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return 13 /* AdditiveExpressionPrecedence */; - - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - return 14 /* MultiplicativeExpressionPrecedence */; - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 167 /* LogicalNotExpression */: - case 170 /* DeleteExpression */: - case 171 /* TypeOfExpression */: - case 172 /* VoidExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return 15 /* UnaryExpressionPrecedence */; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - ParserImpl.prototype.addSkippedTokenAfterNodeOrToken = function (nodeOrToken, skippedToken) { - if (nodeOrToken.isToken()) { - return this.addSkippedTokenAfterToken(nodeOrToken, skippedToken); - } else if (nodeOrToken.isNode()) { - return this.addSkippedTokenAfterNode(nodeOrToken, skippedToken); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.addSkippedTokenAfterNode = function (node, skippedToken) { - var oldToken = node.lastToken(); - var newToken = this.addSkippedTokenAfterToken(oldToken, skippedToken); - - return node.replaceToken(oldToken, newToken); - }; - - ParserImpl.prototype.addSkippedTokensBeforeNode = function (node, skippedTokens) { - if (skippedTokens.length > 0) { - var oldToken = node.firstToken(); - var newToken = this.addSkippedTokensBeforeToken(oldToken, skippedTokens); - - return node.replaceToken(oldToken, newToken); - } - - return node; - }; - - ParserImpl.prototype.addSkippedTokensBeforeToken = function (token, skippedTokens) { - var leadingTrivia = []; - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(leadingTrivia, skippedTokens[i]); - } - - this.addTriviaTo(token.leadingTrivia(), leadingTrivia); - - this.returnArray(skippedTokens); - return token.withLeadingTrivia(TypeScript.Syntax.triviaList(leadingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokensAfterToken = function (token, skippedTokens) { - if (skippedTokens.length === 0) { - this.returnArray(skippedTokens); - return token; - } - - var trailingTrivia = token.trailingTrivia().toArray(); - - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]); - } - - this.returnArray(skippedTokens); - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenAfterToken = function (token, skippedToken) { - var trailingTrivia = token.trailingTrivia().toArray(); - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedToken); - - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenToTriviaArray = function (array, skippedToken) { - this.addTriviaTo(skippedToken.leadingTrivia(), array); - - var trimmedToken = skippedToken.withLeadingTrivia(TypeScript.Syntax.emptyTriviaList).withTrailingTrivia(TypeScript.Syntax.emptyTriviaList); - array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken)); - - this.addTriviaTo(skippedToken.trailingTrivia(), array); - }; - - ParserImpl.prototype.addTriviaTo = function (list, array) { - for (var i = 0, n = list.count(); i < n; i++) { - array.push(list.syntaxTriviaAt(i)); - } - }; - - ParserImpl.prototype.parseSyntaxTree = function (isDeclaration) { - var sourceUnit = this.parseSourceUnit(); - - var allDiagnostics = this.source.tokenDiagnostics().concat(this.diagnostics); - allDiagnostics.sort(function (a, b) { - return a.start() - b.start(); - }); - - return new TypeScript.SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, this.fileName, this.lineMap, this.parseOptions); - }; - - ParserImpl.prototype.setStrictMode = function (isInStrictMode) { - this.isInStrictMode = isInStrictMode; - this.factory = isInStrictMode ? TypeScript.Syntax.strictModeFactory : TypeScript.Syntax.normalModeFactory; - }; - - ParserImpl.prototype.parseSourceUnit = function () { - var savedIsInStrictMode = this.isInStrictMode; - - var result = this.parseSyntaxList(1 /* SourceUnit_ModuleElements */, ParserImpl.updateStrictModeState); - var moduleElements = result.list; - - this.setStrictMode(savedIsInStrictMode); - - var sourceUnit = this.factory.sourceUnit(moduleElements, this.currentToken()); - sourceUnit = this.addSkippedTokensBeforeNode(sourceUnit, result.skippedTokens); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullWidth() === this.newText_forDebuggingPurposesOnly.length()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullText() === this.newText_forDebuggingPurposesOnly.substr(0, this.newText_forDebuggingPurposesOnly.length(), false)); - } - } - - return sourceUnit; - }; - - ParserImpl.updateStrictModeState = function (parser, items) { - if (!parser.isInStrictMode) { - for (var i = 0; i < items.length; i++) { - var item = items[i]; - if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) { - return; - } - } - - parser.setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1])); - } - }; - - ParserImpl.prototype.isModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return true; - } - - var modifierCount = this.modifierCount(); - return this.isImportDeclaration(modifierCount) || this.isExportAssignment() || this.isModuleDeclaration(modifierCount) || this.isInterfaceDeclaration(modifierCount) || this.isClassDeclaration(modifierCount) || this.isEnumDeclaration(modifierCount) || this.isStatement(inErrorRecovery); - }; - - ParserImpl.prototype.parseModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return this.eatNode(); - } - - var modifierCount = this.modifierCount(); - if (this.isImportDeclaration(modifierCount)) { - return this.parseImportDeclaration(); - } else if (this.isExportAssignment()) { - return this.parseExportAssignment(); - } else if (this.isModuleDeclaration(modifierCount)) { - return this.parseModuleDeclaration(); - } else if (this.isInterfaceDeclaration(modifierCount)) { - return this.parseInterfaceDeclaration(); - } else if (this.isClassDeclaration(modifierCount)) { - return this.parseClassDeclaration(); - } else if (this.isEnumDeclaration(modifierCount)) { - return this.parseEnumDeclaration(); - } else if (this.isStatement(inErrorRecovery)) { - return this.parseStatement(inErrorRecovery); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isImportDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 49 /* ImportKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 49 /* ImportKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseImportDeclaration = function () { - var modifiers = this.parseModifiers(); - var importKeyword = this.eatKeyword(49 /* ImportKeyword */); - var identifier = this.eatIdentifierToken(); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var moduleReference = this.parseModuleReference(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.importDeclaration(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken); - }; - - ParserImpl.prototype.isExportAssignment = function () { - return this.currentToken().tokenKind === 47 /* ExportKeyword */ && this.peekToken(1).tokenKind === 107 /* EqualsToken */; - }; - - ParserImpl.prototype.parseExportAssignment = function () { - var exportKeyword = this.eatKeyword(47 /* ExportKeyword */); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var identifier = this.eatIdentifierToken(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.exportAssignment(exportKeyword, equalsToken, identifier, semicolonToken); - }; - - ParserImpl.prototype.parseModuleReference = function () { - if (this.isExternalModuleReference()) { - return this.parseExternalModuleReference(); - } else { - return this.parseModuleNameModuleReference(); - } - }; - - ParserImpl.prototype.isExternalModuleReference = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 66 /* RequireKeyword */) { - return this.peekToken(1).tokenKind === 72 /* OpenParenToken */; - } - - return false; - }; - - ParserImpl.prototype.parseExternalModuleReference = function () { - var requireKeyword = this.eatKeyword(66 /* RequireKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var stringLiteral = this.eatToken(14 /* StringLiteral */); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.externalModuleReference(requireKeyword, openParenToken, stringLiteral, closeParenToken); - }; - - ParserImpl.prototype.parseModuleNameModuleReference = function () { - var name = this.parseName(); - return this.factory.moduleNameModuleReference(name); - }; - - ParserImpl.prototype.parseIdentifierName = function () { - var identifierName = this.eatIdentifierNameToken(); - return identifierName; - }; - - ParserImpl.prototype.tryParseTypeArgumentList = function (inExpression) { - if (this.currentToken().kind() !== 80 /* LessThanToken */) { - return null; - } - - var lessThanToken; - var greaterThanToken; - var result; - var typeArguments; - - if (!inExpression) { - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - return this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - } - - var rewindPoint = this.getRewindPoint(); - - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (greaterThanToken.fullWidth() === 0 || !this.canFollowTypeArgumentListInExpression(this.currentToken().kind())) { - this.rewind(rewindPoint); - - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeArgumentList = this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - - return typeArgumentList; - } - }; - - ParserImpl.prototype.canFollowTypeArgumentListInExpression = function (kind) { - switch (kind) { - case 72 /* OpenParenToken */: - case 76 /* DotToken */: - - case 73 /* CloseParenToken */: - case 75 /* CloseBracketToken */: - case 106 /* ColonToken */: - case 78 /* SemicolonToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - case 84 /* EqualsEqualsToken */: - case 87 /* EqualsEqualsEqualsToken */: - case 86 /* ExclamationEqualsToken */: - case 88 /* ExclamationEqualsEqualsToken */: - case 103 /* AmpersandAmpersandToken */: - case 104 /* BarBarToken */: - case 100 /* CaretToken */: - case 98 /* AmpersandToken */: - case 99 /* BarToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseName = function () { - var shouldContinue = this.isIdentifier(this.currentToken()); - var current = this.eatIdentifierToken(); - - while (shouldContinue && this.currentToken().tokenKind === 76 /* DotToken */) { - var dotToken = this.eatToken(76 /* DotToken */); - - var currentToken = this.currentToken(); - var identifierName; - - if (TypeScript.SyntaxFacts.isAnyKeyword(currentToken.tokenKind) && this.previousToken().hasTrailingNewLine() && !currentToken.hasTrailingNewLine() && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.peekToken(1))) { - identifierName = this.createMissingToken(11 /* IdentifierName */, currentToken); - } else { - identifierName = this.eatIdentifierNameToken(); - } - - current = this.factory.qualifiedName(current, dotToken, identifierName); - - shouldContinue = identifierName.fullWidth() > 0; - } - - return current; - }; - - ParserImpl.prototype.isEnumDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 46 /* EnumKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 46 /* EnumKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseEnumDeclaration = function () { - var modifiers = this.parseModifiers(); - var enumKeyword = this.eatKeyword(46 /* EnumKeyword */); - var identifier = this.eatIdentifierToken(); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var enumElements = TypeScript.Syntax.emptySeparatedList; - - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(256 /* EnumDeclaration_EnumElements */); - enumElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.enumDeclaration(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken); - }; - - ParserImpl.prototype.isEnumElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return true; - } - - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseEnumElement = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return this.eatNode(); - } - - var propertyName = this.eatPropertyName(); - var equalsValueClause = null; - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.enumElement(propertyName, equalsValueClause); - }; - - ParserImpl.isModifier = function (token) { - switch (token.tokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 47 /* ExportKeyword */: - case 63 /* DeclareKeyword */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.modifierCount = function () { - var modifierCount = 0; - while (true) { - if (ParserImpl.isModifier(this.peekToken(modifierCount))) { - modifierCount++; - continue; - } - - break; - } - - return modifierCount; - }; - - ParserImpl.prototype.parseModifiers = function () { - var tokens = this.getArray(); - - while (true) { - if (ParserImpl.isModifier(this.currentToken())) { - tokens.push(this.eatAnyToken()); - continue; - } - - break; - } - - var result = TypeScript.Syntax.list(tokens); - - this.returnZeroOrOneLengthArray(tokens); - - return result; - }; - - ParserImpl.prototype.isClassDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 44 /* ClassKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 44 /* ClassKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseHeritageClauses = function () { - var heritageClauses = TypeScript.Syntax.emptyList; - - if (this.isHeritageClause()) { - var result = this.parseSyntaxList(1024 /* ClassOrInterfaceDeclaration_HeritageClauses */); - heritageClauses = result.list; - TypeScript.Debug.assert(result.skippedTokens.length === 0); - } - - return heritageClauses; - }; - - ParserImpl.prototype.parseClassDeclaration = function () { - var modifiers = this.parseModifiers(); - - var classKeyword = this.eatKeyword(44 /* ClassKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var classElements = TypeScript.Syntax.emptyList; - - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(2 /* ClassDeclaration_ClassElements */); - - classElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.classDeclaration(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken); - }; - - ParserImpl.isPublicOrPrivateKeyword = function (token) { - return token.tokenKind === 57 /* PublicKeyword */ || token.tokenKind === 55 /* PrivateKeyword */; - }; - - ParserImpl.prototype.isAccessor = function (inErrorRecovery) { - var index = this.modifierCount(); - - if (this.peekToken(index).tokenKind !== 64 /* GetKeyword */ && this.peekToken(index).tokenKind !== 68 /* SetKeyword */) { - return false; - } - - index++; - return this.isPropertyName(this.peekToken(index), inErrorRecovery); - }; - - ParserImpl.prototype.parseAccessor = function (checkForStrictMode) { - var modifiers = this.parseModifiers(); - - if (this.currentToken().tokenKind === 64 /* GetKeyword */) { - return this.parseGetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else if (this.currentToken().tokenKind === 68 /* SetKeyword */) { - return this.parseSetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseGetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var getKeyword = this.eatKeyword(64 /* GetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.getAccessor(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block); - }; - - ParserImpl.prototype.parseSetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var setKeyword = this.eatKeyword(68 /* SetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.setAccessor(modifiers, setKeyword, propertyName, parameterList, block); - }; - - ParserImpl.prototype.isClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return true; - } - - return this.isConstructorDeclaration() || this.isMemberFunctionDeclaration(inErrorRecovery) || this.isAccessor(inErrorRecovery) || this.isMemberVariableDeclaration(inErrorRecovery) || this.isIndexMemberDeclaration(); - }; - - ParserImpl.prototype.parseClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return this.eatNode(); - } - - if (this.isConstructorDeclaration()) { - return this.parseConstructorDeclaration(); - } else if (this.isMemberFunctionDeclaration(inErrorRecovery)) { - return this.parseMemberFunctionDeclaration(); - } else if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(false); - } else if (this.isMemberVariableDeclaration(inErrorRecovery)) { - return this.parseMemberVariableDeclaration(); - } else if (this.isIndexMemberDeclaration()) { - return this.parseIndexMemberDeclaration(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isConstructorDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 62 /* ConstructorKeyword */; - }; - - ParserImpl.prototype.parseConstructorDeclaration = function () { - var modifiers = this.parseModifiers(); - var constructorKeyword = this.eatKeyword(62 /* ConstructorKeyword */); - var callSignature = this.parseCallSignature(false); - - var semicolonToken = null; - var block = null; - - if (this.isBlock()) { - block = this.parseBlock(false, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.constructorDeclaration(modifiers, constructorKeyword, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isMemberFunctionDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isCallSignature(index + 1)) { - return true; - } - - if (ParserImpl.isModifier(token)) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberFunctionDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isCallSignature(1)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var block = null; - var semicolon = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolon = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.memberFunctionDeclaration(modifiers, propertyName, callSignature, block, semicolon); - }; - - ParserImpl.prototype.isDefinitelyMemberVariablePropertyName = function (index) { - if (TypeScript.SyntaxFacts.isAnyKeyword(this.peekToken(index).tokenKind)) { - switch (this.peekToken(index + 1).tokenKind) { - case 78 /* SemicolonToken */: - case 107 /* EqualsToken */: - case 106 /* ColonToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - default: - return false; - } - } else { - return true; - } - }; - - ParserImpl.prototype.isMemberVariableDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isDefinitelyMemberVariablePropertyName(index)) { - return true; - } - - if (ParserImpl.isModifier(this.peekToken(index))) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberVariableDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isDefinitelyMemberVariablePropertyName(0)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var variableDeclarator = this.parseVariableDeclarator(true, true); - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.memberVariableDeclaration(modifiers, variableDeclarator, semicolon); - }; - - ParserImpl.prototype.isIndexMemberDeclaration = function () { - var index = this.modifierCount(); - return this.isIndexSignature(index); - }; - - ParserImpl.prototype.parseIndexMemberDeclaration = function () { - var modifiers = this.parseModifiers(); - var indexSignature = this.parseIndexSignature(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.indexMemberDeclaration(modifiers, indexSignature, semicolonToken); - }; - - ParserImpl.prototype.tryAddUnexpectedEqualsGreaterThanToken = function (callSignature) { - var token0 = this.currentToken(); - - var hasEqualsGreaterThanToken = token0.tokenKind === 85 /* EqualsGreaterThanToken */; - if (hasEqualsGreaterThanToken) { - if (callSignature.lastToken()) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]); - this.addDiagnostic(diagnostic); - - var token = this.eatAnyToken(); - return this.addSkippedTokenAfterNode(callSignature, token0); - } - } - - return callSignature; - }; - - ParserImpl.prototype.isFunctionDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 27 /* FunctionKeyword */; - }; - - ParserImpl.prototype.parseFunctionDeclaration = function () { - var modifiers = this.parseModifiers(); - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = this.eatIdentifierToken(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var semicolonToken = null; - var block = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.functionDeclaration(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isModuleDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 65 /* ModuleKeyword */) { - return true; - } - - if (this.currentToken().tokenKind === 65 /* ModuleKeyword */) { - var token1 = this.peekToken(1); - return this.isIdentifier(token1) || token1.tokenKind === 14 /* StringLiteral */; - } - - return false; - }; - - ParserImpl.prototype.parseModuleDeclaration = function () { - var modifiers = this.parseModifiers(); - var moduleKeyword = this.eatKeyword(65 /* ModuleKeyword */); - - var moduleName = null; - var stringLiteral = null; - - if (this.currentToken().tokenKind === 14 /* StringLiteral */) { - stringLiteral = this.eatToken(14 /* StringLiteral */); - } else { - moduleName = this.parseName(); - } - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var moduleElements = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(4 /* ModuleDeclaration_ModuleElements */); - moduleElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.moduleDeclaration(modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, closeBraceToken); - }; - - ParserImpl.prototype.isInterfaceDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 52 /* InterfaceKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 52 /* InterfaceKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseInterfaceDeclaration = function () { - var modifiers = this.parseModifiers(); - var interfaceKeyword = this.eatKeyword(52 /* InterfaceKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - - var objectType = this.parseObjectType(); - return this.factory.interfaceDeclaration(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, objectType); - }; - - ParserImpl.prototype.parseObjectType = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var typeMembers = TypeScript.Syntax.emptySeparatedList; - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(512 /* ObjectType_TypeMembers */); - typeMembers = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.objectType(openBraceToken, typeMembers, closeBraceToken); - }; - - ParserImpl.prototype.isTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return true; - } - - return this.isCallSignature(0) || this.isConstructSignature() || this.isIndexSignature(0) || this.isMethodSignature(inErrorRecovery) || this.isPropertySignature(inErrorRecovery); - }; - - ParserImpl.prototype.parseTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return this.eatNode(); - } - - if (this.isCallSignature(0)) { - return this.parseCallSignature(false); - } else if (this.isConstructSignature()) { - return this.parseConstructSignature(); - } else if (this.isIndexSignature(0)) { - return this.parseIndexSignature(); - } else if (this.isMethodSignature(inErrorRecovery)) { - return this.parseMethodSignature(); - } else if (this.isPropertySignature(inErrorRecovery)) { - return this.parsePropertySignature(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseConstructSignature = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var callSignature = this.parseCallSignature(false); - - return this.factory.constructSignature(newKeyword, callSignature); - }; - - ParserImpl.prototype.parseIndexSignature = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var parameter = this.parseParameter(); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.indexSignature(openBracketToken, parameter, closeBracketToken, typeAnnotation); - }; - - ParserImpl.prototype.parseMethodSignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var callSignature = this.parseCallSignature(false); - - return this.factory.methodSignature(propertyName, questionToken, callSignature); - }; - - ParserImpl.prototype.parsePropertySignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.propertySignature(propertyName, questionToken, typeAnnotation); - }; - - ParserImpl.prototype.isCallSignature = function (tokenIndex) { - var tokenKind = this.peekToken(tokenIndex).tokenKind; - return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */; - }; - - ParserImpl.prototype.isConstructSignature = function () { - if (this.currentToken().tokenKind !== 31 /* NewKeyword */) { - return false; - } - - var token1 = this.peekToken(1); - return token1.tokenKind === 80 /* LessThanToken */ || token1.tokenKind === 72 /* OpenParenToken */; - }; - - ParserImpl.prototype.isIndexSignature = function (tokenIndex) { - return this.peekToken(tokenIndex).tokenKind === 74 /* OpenBracketToken */; - }; - - ParserImpl.prototype.isMethodSignature = function (inErrorRecovery) { - if (this.isPropertyName(this.currentToken(), inErrorRecovery)) { - if (this.isCallSignature(1)) { - return true; - } - - if (this.peekToken(1).tokenKind === 105 /* QuestionToken */ && this.isCallSignature(2)) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPropertySignature = function (inErrorRecovery) { - var currentToken = this.currentToken(); - - if (ParserImpl.isModifier(currentToken) && !currentToken.hasTrailingNewLine() && this.isPropertyName(this.peekToken(1), inErrorRecovery)) { - return false; - } - - return this.isPropertyName(currentToken, inErrorRecovery); - }; - - ParserImpl.prototype.isHeritageClause = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */; - }; - - ParserImpl.prototype.isNotHeritageClauseTypeName = function () { - if (this.currentToken().tokenKind === 51 /* ImplementsKeyword */ || this.currentToken().tokenKind === 48 /* ExtendsKeyword */) { - return this.isIdentifier(this.peekToken(1)); - } - - return false; - }; - - ParserImpl.prototype.isHeritageClauseTypeName = function () { - if (this.isIdentifier(this.currentToken())) { - return !this.isNotHeritageClauseTypeName(); - } - - return false; - }; - - ParserImpl.prototype.parseHeritageClause = function () { - var extendsOrImplementsKeyword = this.eatAnyToken(); - TypeScript.Debug.assert(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ || extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - - var result = this.parseSeparatedSyntaxList(2048 /* HeritageClause_TypeNameList */); - var typeNames = result.list; - extendsOrImplementsKeyword = this.addSkippedTokensAfterToken(extendsOrImplementsKeyword, result.skippedTokens); - - return this.factory.heritageClause(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, extendsOrImplementsKeyword, typeNames); - }; - - ParserImpl.prototype.isStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return true; - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - var token1 = this.peekToken(1); - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { - return false; - } - - break; - - case 28 /* IfKeyword */: - case 70 /* OpenBraceToken */: - case 33 /* ReturnKeyword */: - case 34 /* SwitchKeyword */: - case 36 /* ThrowKeyword */: - case 15 /* BreakKeyword */: - case 18 /* ContinueKeyword */: - case 26 /* ForKeyword */: - case 42 /* WhileKeyword */: - case 43 /* WithKeyword */: - case 22 /* DoKeyword */: - case 38 /* TryKeyword */: - case 19 /* DebuggerKeyword */: - return true; - } - - if (this.isInterfaceDeclaration(0) || this.isClassDeclaration(0) || this.isEnumDeclaration(0) || this.isModuleDeclaration(0)) { - return false; - } - - return this.isLabeledStatement(currentToken) || this.isVariableStatement() || this.isFunctionDeclaration() || this.isEmptyStatement(currentToken, inErrorRecovery) || this.isExpressionStatement(currentToken); - }; - - ParserImpl.prototype.parseStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return this.eatNode(); - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 28 /* IfKeyword */: - return this.parseIfStatement(); - case 70 /* OpenBraceToken */: - return this.parseBlock(false, false); - case 33 /* ReturnKeyword */: - return this.parseReturnStatement(); - case 34 /* SwitchKeyword */: - return this.parseSwitchStatement(); - case 36 /* ThrowKeyword */: - return this.parseThrowStatement(); - case 15 /* BreakKeyword */: - return this.parseBreakStatement(); - case 18 /* ContinueKeyword */: - return this.parseContinueStatement(); - case 26 /* ForKeyword */: - return this.parseForOrForInStatement(); - case 42 /* WhileKeyword */: - return this.parseWhileStatement(); - case 43 /* WithKeyword */: - return this.parseWithStatement(); - case 22 /* DoKeyword */: - return this.parseDoStatement(); - case 38 /* TryKeyword */: - return this.parseTryStatement(); - case 19 /* DebuggerKeyword */: - return this.parseDebuggerStatement(); - } - - if (this.isVariableStatement()) { - return this.parseVariableStatement(); - } else if (this.isLabeledStatement(currentToken)) { - return this.parseLabeledStatement(); - } else if (this.isFunctionDeclaration()) { - return this.parseFunctionDeclaration(); - } else if (this.isEmptyStatement(currentToken, inErrorRecovery)) { - return this.parseEmptyStatement(); - } else { - return this.parseExpressionStatement(); - } - }; - - ParserImpl.prototype.parseDebuggerStatement = function () { - var debuggerKeyword = this.eatKeyword(19 /* DebuggerKeyword */); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.debuggerStatement(debuggerKeyword, semicolonToken); - }; - - ParserImpl.prototype.parseDoStatement = function () { - var doKeyword = this.eatKeyword(22 /* DoKeyword */); - var statement = this.parseStatement(false); - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(true); - - return this.factory.doStatement(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken); - }; - - ParserImpl.prototype.isLabeledStatement = function (currentToken) { - return this.isIdentifier(currentToken) && this.peekToken(1).tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseLabeledStatement = function () { - var identifier = this.eatIdentifierToken(); - var colonToken = this.eatToken(106 /* ColonToken */); - var statement = this.parseStatement(false); - - return this.factory.labeledStatement(identifier, colonToken, statement); - }; - - ParserImpl.prototype.parseTryStatement = function () { - var tryKeyword = this.eatKeyword(38 /* TryKeyword */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 64 /* TryBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - var catchClause = null; - if (this.isCatchClause()) { - catchClause = this.parseCatchClause(); - } - - var finallyClause = null; - if (catchClause === null || this.isFinallyClause()) { - finallyClause = this.parseFinallyClause(); - } - - return this.factory.tryStatement(tryKeyword, block, catchClause, finallyClause); - }; - - ParserImpl.prototype.isCatchClause = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */; - }; - - ParserImpl.prototype.parseCatchClause = function () { - var catchKeyword = this.eatKeyword(17 /* CatchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var identifier = this.eatIdentifierToken(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 128 /* CatchBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - return this.factory.catchClause(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block); - }; - - ParserImpl.prototype.isFinallyClause = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.parseFinallyClause = function () { - var finallyKeyword = this.eatKeyword(25 /* FinallyKeyword */); - var block = this.parseBlock(false, false); - - return this.factory.finallyClause(finallyKeyword, block); - }; - - ParserImpl.prototype.parseWithStatement = function () { - var withKeyword = this.eatKeyword(43 /* WithKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.withStatement(withKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.parseWhileStatement = function () { - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.whileStatement(whileKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.isEmptyStatement = function (currentToken, inErrorRecovery) { - if (inErrorRecovery) { - return false; - } - - return currentToken.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.parseEmptyStatement = function () { - var semicolonToken = this.eatToken(78 /* SemicolonToken */); - return this.factory.emptyStatement(semicolonToken); - }; - - ParserImpl.prototype.parseForOrForInStatement = function () { - var forKeyword = this.eatKeyword(26 /* ForKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 40 /* VarKeyword */) { - return this.parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken); - } else if (currentToken.tokenKind === 78 /* SemicolonToken */) { - return this.parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken); - } else { - return this.parseForOrForInStatementWithInitializer(forKeyword, openParenToken); - } - }; - - ParserImpl.prototype.parseForOrForInStatementWithVariableDeclaration = function (forKeyword, openParenToken) { - var variableDeclaration = this.parseVariableDeclaration(false); - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - } - - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - }; - - ParserImpl.prototype.parseForInStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var inKeyword = this.eatKeyword(29 /* InKeyword */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forInStatement(forKeyword, openParenToken, variableDeclaration, initializer, inKeyword, expression, closeParenToken, statement); - }; - - ParserImpl.prototype.parseForOrForInStatementWithInitializer = function (forKeyword, openParenToken) { - var initializer = this.parseExpression(false); - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } else { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } - }; - - ParserImpl.prototype.parseForStatementWithNoVariableDeclarationOrInitializer = function (forKeyword, openParenToken) { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null); - }; - - ParserImpl.prototype.parseForStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var firstSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var condition = null; - if (this.currentToken().tokenKind !== 78 /* SemicolonToken */ && this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - condition = this.parseExpression(true); - } - - var secondSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var incrementor = null; - if (this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - incrementor = this.parseExpression(true); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forStatement(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement); - }; - - ParserImpl.prototype.parseBreakStatement = function () { - var breakKeyword = this.eatKeyword(15 /* BreakKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.breakStatement(breakKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseContinueStatement = function () { - var continueKeyword = this.eatKeyword(18 /* ContinueKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.continueStatement(continueKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseSwitchStatement = function () { - var switchKeyword = this.eatKeyword(34 /* SwitchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var switchClauses = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(8 /* SwitchStatement_SwitchClauses */); - switchClauses = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.switchStatement(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken); - }; - - ParserImpl.prototype.isCaseSwitchClause = function () { - return this.currentToken().tokenKind === 16 /* CaseKeyword */; - }; - - ParserImpl.prototype.isDefaultSwitchClause = function () { - return this.currentToken().tokenKind === 20 /* DefaultKeyword */; - }; - - ParserImpl.prototype.isSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return true; - } - - return this.isCaseSwitchClause() || this.isDefaultSwitchClause(); - }; - - ParserImpl.prototype.parseSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return this.eatNode(); - } - - if (this.isCaseSwitchClause()) { - return this.parseCaseSwitchClause(); - } else if (this.isDefaultSwitchClause()) { - return this.parseDefaultSwitchClause(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseCaseSwitchClause = function () { - var caseKeyword = this.eatKeyword(16 /* CaseKeyword */); - var expression = this.parseExpression(true); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.caseSwitchClause(caseKeyword, expression, colonToken, statements); - }; - - ParserImpl.prototype.parseDefaultSwitchClause = function () { - var defaultKeyword = this.eatKeyword(20 /* DefaultKeyword */); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.defaultSwitchClause(defaultKeyword, colonToken, statements); - }; - - ParserImpl.prototype.parseThrowStatement = function () { - var throwKeyword = this.eatKeyword(36 /* ThrowKeyword */); - - var expression = null; - if (this.canEatExplicitOrAutomaticSemicolon(false)) { - var token = this.createMissingToken(11 /* IdentifierName */, null); - expression = token; - } else { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.throwStatement(throwKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.parseReturnStatement = function () { - var returnKeyword = this.eatKeyword(33 /* ReturnKeyword */); - - var expression = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.returnStatement(returnKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.isExpressionStatement = function (currentToken) { - var kind = currentToken.tokenKind; - if (kind === 70 /* OpenBraceToken */ || kind === 27 /* FunctionKeyword */) { - return false; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.isAssignmentOrOmittedExpression = function () { - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.parseAssignmentOrOmittedExpression = function () { - if (this.currentToken().tokenKind === 79 /* CommaToken */) { - return this.factory.omittedExpression(); - } - - return this.parseAssignmentExpression(true); - }; - - ParserImpl.prototype.isExpression = function (currentToken) { - switch (currentToken.tokenKind) { - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 12 /* RegularExpressionLiteral */: - - case 74 /* OpenBracketToken */: - - case 72 /* OpenParenToken */: - - case 80 /* LessThanToken */: - - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 89 /* PlusToken */: - case 90 /* MinusToken */: - case 102 /* TildeToken */: - case 101 /* ExclamationToken */: - - case 70 /* OpenBraceToken */: - - case 85 /* EqualsGreaterThanToken */: - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - - case 50 /* SuperKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - - case 31 /* NewKeyword */: - - case 21 /* DeleteKeyword */: - case 41 /* VoidKeyword */: - case 39 /* TypeOfKeyword */: - - case 27 /* FunctionKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseExpressionStatement = function () { - var expression = this.parseExpression(true); - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.expressionStatement(expression, semicolon); - }; - - ParserImpl.prototype.parseIfStatement = function () { - var ifKeyword = this.eatKeyword(28 /* IfKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - var elseClause = null; - if (this.isElseClause()) { - elseClause = this.parseElseClause(); - } - - return this.factory.ifStatement(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause); - }; - - ParserImpl.prototype.isElseClause = function () { - return this.currentToken().tokenKind === 23 /* ElseKeyword */; - }; - - ParserImpl.prototype.parseElseClause = function () { - var elseKeyword = this.eatKeyword(23 /* ElseKeyword */); - var statement = this.parseStatement(false); - - return this.factory.elseClause(elseKeyword, statement); - }; - - ParserImpl.prototype.isVariableStatement = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 40 /* VarKeyword */; - }; - - ParserImpl.prototype.parseVariableStatement = function () { - var modifiers = this.parseModifiers(); - var variableDeclaration = this.parseVariableDeclaration(true); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.variableStatement(modifiers, variableDeclaration, semicolonToken); - }; - - ParserImpl.prototype.parseVariableDeclaration = function (allowIn) { - var varKeyword = this.eatKeyword(40 /* VarKeyword */); - - var listParsingState = allowIn ? 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */; - - var result = this.parseSeparatedSyntaxList(listParsingState); - var variableDeclarators = result.list; - varKeyword = this.addSkippedTokensAfterToken(varKeyword, result.skippedTokens); - - return this.factory.variableDeclaration(varKeyword, variableDeclarators); - }; - - ParserImpl.prototype.isVariableDeclarator = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 225 /* VariableDeclarator */) { - return true; - } - - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.canReuseVariableDeclaratorNode = function (node) { - if (node === null || node.kind() !== 225 /* VariableDeclarator */) { - return false; - } - - var variableDeclarator = node; - return variableDeclarator.equalsValueClause === null; - }; - - ParserImpl.prototype.parseVariableDeclarator = function (allowIn, allowPropertyName) { - if (this.canReuseVariableDeclaratorNode(this.currentNode())) { - return this.eatNode(); - } - - var propertyName = allowPropertyName ? this.eatPropertyName() : this.eatIdentifierToken(); - var equalsValueClause = null; - var typeAnnotation = null; - - if (propertyName.width() > 0) { - typeAnnotation = this.parseOptionalTypeAnnotation(false); - - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(allowIn); - } - } - - return this.factory.variableDeclarator(propertyName, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.isColonValueClause = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.isEqualsValueClause = function (inParameter) { - var token0 = this.currentToken(); - if (token0.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (!this.previousToken().hasTrailingNewLine()) { - if (token0.tokenKind === 85 /* EqualsGreaterThanToken */) { - return false; - } - - if (token0.tokenKind === 70 /* OpenBraceToken */ && inParameter) { - return false; - } - - return this.isExpression(token0); - } - - return false; - }; - - ParserImpl.prototype.parseEqualsValueClause = function (allowIn) { - var equalsToken = this.eatToken(107 /* EqualsToken */); - var value = this.parseAssignmentExpression(allowIn); - - return this.factory.equalsValueClause(equalsToken, value); - }; - - ParserImpl.prototype.parseExpression = function (allowIn) { - return this.parseSubExpression(0, allowIn); - }; - - ParserImpl.prototype.parseAssignmentExpression = function (allowIn) { - return this.parseSubExpression(2 /* AssignmentExpressionPrecedence */, allowIn); - }; - - ParserImpl.prototype.parseUnaryExpressionOrLower = function () { - var currentTokenKind = this.currentToken().tokenKind; - if (TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(currentTokenKind)) { - var operatorKind = TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(currentTokenKind); - - var operatorToken = this.eatAnyToken(); - - var operand = this.parseUnaryExpressionOrLower(); - return this.factory.prefixUnaryExpression(operatorKind, operatorToken, operand); - } else if (currentTokenKind === 39 /* TypeOfKeyword */) { - return this.parseTypeOfExpression(); - } else if (currentTokenKind === 41 /* VoidKeyword */) { - return this.parseVoidExpression(); - } else if (currentTokenKind === 21 /* DeleteKeyword */) { - return this.parseDeleteExpression(); - } else if (currentTokenKind === 80 /* LessThanToken */) { - return this.parseCastExpression(); - } else { - return this.parsePostfixExpressionOrLower(); - } - }; - - ParserImpl.prototype.parseSubExpression = function (precedence, allowIn) { - if (precedence <= 2 /* AssignmentExpressionPrecedence */) { - if (this.isSimpleArrowFunctionExpression()) { - return this.parseSimpleArrowFunctionExpression(); - } - - var parethesizedArrowFunction = this.tryParseParenthesizedArrowFunctionExpression(); - if (parethesizedArrowFunction !== null) { - return parethesizedArrowFunction; - } - } - - var leftOperand = this.parseUnaryExpressionOrLower(); - return this.parseBinaryOrConditionalExpressions(precedence, allowIn, leftOperand); - }; - - ParserImpl.prototype.parseBinaryOrConditionalExpressions = function (precedence, allowIn, leftOperand) { - while (true) { - var token0 = this.currentToken(); - var token0Kind = token0.tokenKind; - - if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(token0Kind)) { - if (token0Kind === 29 /* InKeyword */ && !allowIn) { - break; - } - - var mergedToken = this.tryMergeBinaryExpressionTokens(); - var tokenKind = mergedToken === null ? token0Kind : mergedToken.syntaxKind; - - var binaryExpressionKind = TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(tokenKind); - var newPrecedence = ParserImpl.getPrecedence(binaryExpressionKind); - - if (newPrecedence < precedence) { - break; - } - - if (newPrecedence === precedence && !this.isRightAssociative(binaryExpressionKind)) { - break; - } - - var operatorToken = mergedToken === null ? token0 : TypeScript.Syntax.token(mergedToken.syntaxKind).withLeadingTrivia(token0.leadingTrivia()).withTrailingTrivia(this.peekToken(mergedToken.tokenCount - 1).trailingTrivia()); - - var skipCount = mergedToken === null ? 1 : mergedToken.tokenCount; - for (var i = 0; i < skipCount; i++) { - this.eatAnyToken(); - } - - leftOperand = this.factory.binaryExpression(binaryExpressionKind, leftOperand, operatorToken, this.parseSubExpression(newPrecedence, allowIn)); - continue; - } - - if (token0Kind === 105 /* QuestionToken */ && precedence <= 3 /* ConditionalExpressionPrecedence */) { - var questionToken = this.eatToken(105 /* QuestionToken */); - - var whenTrueExpression = this.parseAssignmentExpression(allowIn); - var colon = this.eatToken(106 /* ColonToken */); - - var whenFalseExpression = this.parseAssignmentExpression(allowIn); - leftOperand = this.factory.conditionalExpression(leftOperand, questionToken, whenTrueExpression, colon, whenFalseExpression); - continue; - } - - break; - } - - return leftOperand; - }; - - ParserImpl.prototype.tryMergeBinaryExpressionTokens = function () { - var token0 = this.currentToken(); - - if (token0.tokenKind === 81 /* GreaterThanToken */ && !token0.hasTrailingTrivia()) { - var storage = this.mergeTokensStorage; - storage[0] = 0 /* None */; - storage[1] = 0 /* None */; - storage[2] = 0 /* None */; - - for (var i = 0; i < storage.length; i++) { - var nextToken = this.peekToken(i + 1); - - if (!nextToken.hasLeadingTrivia()) { - storage[i] = nextToken.tokenKind; - } - - if (nextToken.hasTrailingTrivia()) { - break; - } - } - - if (storage[0] === 81 /* GreaterThanToken */) { - if (storage[1] === 81 /* GreaterThanToken */) { - if (storage[2] === 107 /* EqualsToken */) { - return { tokenCount: 4, syntaxKind: 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 3, syntaxKind: 97 /* GreaterThanGreaterThanGreaterThanToken */ }; - } - } else if (storage[1] === 107 /* EqualsToken */) { - return { tokenCount: 3, syntaxKind: 113 /* GreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 2, syntaxKind: 96 /* GreaterThanGreaterThanToken */ }; - } - } else if (storage[0] === 107 /* EqualsToken */) { - return { tokenCount: 2, syntaxKind: 83 /* GreaterThanEqualsToken */ }; - } - } - - return null; - }; - - ParserImpl.prototype.isRightAssociative = function (expressionKind) { - switch (expressionKind) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return true; - default: - return false; - } - }; - - ParserImpl.prototype.parseMemberExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } - - var expression = this.parsePrimaryExpression(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - return this.parseMemberExpressionRest(expression, false, inObjectCreation); - }; - - ParserImpl.prototype.parseCallExpressionOrLower = function () { - var expression; - if (this.currentToken().tokenKind === 50 /* SuperKeyword */) { - expression = this.eatKeyword(50 /* SuperKeyword */); - - var currentTokenKind = this.currentToken().tokenKind; - if (currentTokenKind !== 72 /* OpenParenToken */ && currentTokenKind !== 76 /* DotToken */) { - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - } - } else { - expression = this.parseMemberExpressionOrLower(false); - } - - return this.parseMemberExpressionRest(expression, true, false); - }; - - ParserImpl.prototype.parseMemberExpressionRest = function (expression, allowArguments, inObjectCreation) { - while (true) { - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 72 /* OpenParenToken */: - if (!allowArguments) { - return expression; - } - - expression = this.factory.invocationExpression(expression, this.parseArgumentList(null)); - continue; - - case 80 /* LessThanToken */: - if (!allowArguments) { - return expression; - } - - var argumentList = this.tryParseArgumentList(); - if (argumentList !== null) { - expression = this.factory.invocationExpression(expression, argumentList); - continue; - } - - break; - - case 74 /* OpenBracketToken */: - expression = this.parseElementAccessExpression(expression, inObjectCreation); - continue; - - case 76 /* DotToken */: - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - continue; - } - - return expression; - } - }; - - ParserImpl.prototype.parseLeftHandSideExpressionOrLower = function () { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseCallExpressionOrLower(); - } - }; - - ParserImpl.prototype.parsePostfixExpressionOrLower = function () { - var expression = this.parseLeftHandSideExpressionOrLower(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - break; - } - - return this.factory.postfixUnaryExpression(TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(currentTokenKind), expression, this.eatAnyToken()); - } - - return expression; - }; - - ParserImpl.prototype.tryParseGenericArgumentList = function () { - var rewindPoint = this.getRewindPoint(); - - var typeArgumentList = this.tryParseTypeArgumentList(true); - var token0 = this.currentToken(); - - var isOpenParen = token0.tokenKind === 72 /* OpenParenToken */; - var isDot = token0.tokenKind === 76 /* DotToken */; - var isOpenParenOrDot = isOpenParen || isDot; - - var argumentList = null; - if (typeArgumentList === null || !isOpenParenOrDot) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - - if (isDot) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null); - this.addDiagnostic(diagnostic); - - return this.factory.argumentList(typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.emptyToken(73 /* CloseParenToken */)); - } else { - return this.parseArgumentList(typeArgumentList); - } - } - }; - - ParserImpl.prototype.tryParseArgumentList = function () { - if (this.currentToken().tokenKind === 80 /* LessThanToken */) { - return this.tryParseGenericArgumentList(); - } - - if (this.currentToken().tokenKind === 72 /* OpenParenToken */) { - return this.parseArgumentList(null); - } - - return null; - }; - - ParserImpl.prototype.parseArgumentList = function (typeArgumentList) { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var _arguments = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.fullWidth() > 0) { - var result = this.parseSeparatedSyntaxList(16384 /* ArgumentList_AssignmentExpressions */); - _arguments = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.argumentList(typeArgumentList, openParenToken, _arguments, closeParenToken); - }; - - ParserImpl.prototype.parseElementAccessExpression = function (expression, inObjectCreation) { - var start = this.currentTokenStart(); - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var argumentExpression; - - if (this.currentToken().tokenKind === 75 /* CloseBracketToken */ && inObjectCreation) { - var end = this.currentTokenStart() + this.currentToken().width(); - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, start, end - start, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null); - this.addDiagnostic(diagnostic); - - argumentExpression = TypeScript.Syntax.emptyToken(11 /* IdentifierName */); - } else { - argumentExpression = this.parseExpression(true); - } - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.elementAccessExpression(expression, openBracketToken, argumentExpression, closeBracketToken); - }; - - ParserImpl.prototype.parsePrimaryExpression = function () { - var currentToken = this.currentToken(); - - if (this.isIdentifier(currentToken)) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 35 /* ThisKeyword */: - return this.parseThisExpression(); - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.parseLiteralExpression(); - - case 32 /* NullKeyword */: - return this.parseLiteralExpression(); - - case 27 /* FunctionKeyword */: - return this.parseFunctionExpression(); - - case 13 /* NumericLiteral */: - return this.parseLiteralExpression(); - - case 12 /* RegularExpressionLiteral */: - return this.parseLiteralExpression(); - - case 14 /* StringLiteral */: - return this.parseLiteralExpression(); - - case 74 /* OpenBracketToken */: - return this.parseArrayLiteralExpression(); - - case 70 /* OpenBraceToken */: - return this.parseObjectLiteralExpression(); - - case 72 /* OpenParenToken */: - return this.parseParenthesizedExpression(); - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - var result = this.tryReparseDivideAsRegularExpression(); - if (result !== null) { - return result; - } - break; - } - - return null; - }; - - ParserImpl.prototype.tryReparseDivideAsRegularExpression = function () { - var currentToken = this.currentToken(); - - if (this.previousToken() !== null) { - var previousTokenKind = this.previousToken().tokenKind; - switch (previousTokenKind) { - case 11 /* IdentifierName */: - return null; - - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return null; - - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 75 /* CloseBracketToken */: - return null; - } - } - - currentToken = this.currentTokenAllowingRegularExpression(); - - if (currentToken.tokenKind === 118 /* SlashToken */ || currentToken.tokenKind === 119 /* SlashEqualsToken */) { - return null; - } else if (currentToken.tokenKind === 12 /* RegularExpressionLiteral */) { - return this.parseLiteralExpression(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseTypeOfExpression = function () { - var typeOfKeyword = this.eatKeyword(39 /* TypeOfKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.typeOfExpression(typeOfKeyword, expression); - }; - - ParserImpl.prototype.parseDeleteExpression = function () { - var deleteKeyword = this.eatKeyword(21 /* DeleteKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.deleteExpression(deleteKeyword, expression); - }; - - ParserImpl.prototype.parseVoidExpression = function () { - var voidKeyword = this.eatKeyword(41 /* VoidKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.voidExpression(voidKeyword, expression); - }; - - ParserImpl.prototype.parseFunctionExpression = function () { - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = null; - - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionExpression(functionKeyword, identifier, callSignature, block); - }; - - ParserImpl.prototype.parseObjectCreationExpression = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - - var expression = this.parseObjectCreationExpressionOrLower(true); - var argumentList = this.tryParseArgumentList(); - - var result = this.factory.objectCreationExpression(newKeyword, expression, argumentList); - return this.parseMemberExpressionRest(result, true, false); - }; - - ParserImpl.prototype.parseObjectCreationExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseMemberExpressionOrLower(inObjectCreation); - } - }; - - ParserImpl.prototype.parseCastExpression = function () { - var lessThanToken = this.eatToken(80 /* LessThanToken */); - var type = this.parseType(); - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.castExpression(lessThanToken, type, greaterThanToken, expression); - }; - - ParserImpl.prototype.parseParenthesizedExpression = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.parenthesizedExpression(openParenToken, expression, closeParenToken); - }; - - ParserImpl.prototype.tryParseParenthesizedArrowFunctionExpression = function () { - var tokenKind = this.currentToken().tokenKind; - if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) { - return null; - } - - if (this.isDefinitelyArrowFunctionExpression()) { - return this.parseParenthesizedArrowFunctionExpression(false); - } - - if (!this.isPossiblyArrowFunctionExpression()) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var arrowFunction = this.parseParenthesizedArrowFunctionExpression(true); - if (arrowFunction === null) { - this.rewind(rewindPoint); - } - - this.releaseRewindPoint(rewindPoint); - return arrowFunction; - }; - - ParserImpl.prototype.parseParenthesizedArrowFunctionExpression = function (requireArrow) { - var currentToken = this.currentToken(); - - var callSignature = this.parseCallSignature(true); - - if (requireArrow && this.currentToken().tokenKind !== 85 /* EqualsGreaterThanToken */) { - return null; - } - - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.parenthesizedArrowFunctionExpression(callSignature, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.tryParseArrowFunctionBlock = function () { - if (this.isBlock()) { - return this.parseBlock(false, false); - } else { - if (this.isStatement(false) && !this.isExpressionStatement(this.currentToken()) && !this.isFunctionDeclaration()) { - return this.parseBlock(true, false); - } else { - return null; - } - } - }; - - ParserImpl.prototype.isSimpleArrowFunctionExpression = function () { - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.isIdentifier(this.currentToken()) && this.peekToken(1).tokenKind === 85 /* EqualsGreaterThanToken */; - }; - - ParserImpl.prototype.parseSimpleArrowFunctionExpression = function () { - var identifier = this.eatIdentifierToken(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.simpleArrowFunctionExpression(identifier, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.isBlock = function () { - return this.currentToken().tokenKind === 70 /* OpenBraceToken */; - }; - - ParserImpl.prototype.isDefinitelyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return false; - } - - var token1 = this.peekToken(1); - var token2; - - if (token1.tokenKind === 73 /* CloseParenToken */) { - token2 = this.peekToken(2); - return token2.tokenKind === 106 /* ColonToken */ || token2.tokenKind === 85 /* EqualsGreaterThanToken */ || token2.tokenKind === 70 /* OpenBraceToken */; - } - - if (token1.tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - token2 = this.peekToken(2); - if (token1.tokenKind === 57 /* PublicKeyword */ || token1.tokenKind === 55 /* PrivateKeyword */) { - if (this.isIdentifier(token2)) { - return true; - } - } - - if (!this.isIdentifier(token1)) { - return false; - } - - if (token2.tokenKind === 106 /* ColonToken */) { - return true; - } - - var token3 = this.peekToken(3); - if (token2.tokenKind === 105 /* QuestionToken */) { - if (token3.tokenKind === 106 /* ColonToken */ || token3.tokenKind === 73 /* CloseParenToken */ || token3.tokenKind === 79 /* CommaToken */) { - return true; - } - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - if (token3.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPossiblyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return true; - } - - var token1 = this.peekToken(1); - - if (!this.isIdentifier(token1)) { - return false; - } - - var token2 = this.peekToken(2); - if (token2.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (token2.tokenKind === 79 /* CommaToken */) { - return true; - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - var token3 = this.peekToken(3); - if (token3.tokenKind === 106 /* ColonToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseObjectLiteralExpression = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var result = this.parseSeparatedSyntaxList(32768 /* ObjectLiteralExpression_PropertyAssignments */); - var propertyAssignments = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.objectLiteralExpression(openBraceToken, propertyAssignments, closeBraceToken); - }; - - ParserImpl.prototype.parsePropertyAssignment = function (inErrorRecovery) { - if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(true); - } else if (this.isFunctionPropertyAssignment(inErrorRecovery)) { - return this.parseFunctionPropertyAssignment(); - } else if (this.isSimplePropertyAssignment(inErrorRecovery)) { - return this.parseSimplePropertyAssignment(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isPropertyAssignment = function (inErrorRecovery) { - return this.isAccessor(inErrorRecovery) || this.isFunctionPropertyAssignment(inErrorRecovery) || this.isSimplePropertyAssignment(inErrorRecovery); - }; - - ParserImpl.prototype.eatPropertyName = function () { - return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.currentToken()) ? this.eatIdentifierNameToken() : this.eatAnyToken(); - }; - - ParserImpl.prototype.isFunctionPropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery) && this.isCallSignature(1); - }; - - ParserImpl.prototype.parseFunctionPropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionPropertyAssignment(propertyName, callSignature, block); - }; - - ParserImpl.prototype.isSimplePropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseSimplePropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var colonToken = this.eatToken(106 /* ColonToken */); - var expression = this.parseAssignmentExpression(true); - - return this.factory.simplePropertyAssignment(propertyName, colonToken, expression); - }; - - ParserImpl.prototype.isPropertyName = function (token, inErrorRecovery) { - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - if (inErrorRecovery) { - return this.isIdentifier(token); - } else { - return true; - } - } - - switch (token.tokenKind) { - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseArrayLiteralExpression = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - - var result = this.parseSeparatedSyntaxList(65536 /* ArrayLiteralExpression_AssignmentExpressions */); - var expressions = result.list; - openBracketToken = this.addSkippedTokensAfterToken(openBracketToken, result.skippedTokens); - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.arrayLiteralExpression(openBracketToken, expressions, closeBracketToken); - }; - - ParserImpl.prototype.parseLiteralExpression = function () { - return this.eatAnyToken(); - }; - - ParserImpl.prototype.parseThisExpression = function () { - return this.eatKeyword(35 /* ThisKeyword */); - }; - - ParserImpl.prototype.parseBlock = function (parseBlockEvenWithNoOpenBrace, checkForStrictMode) { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var statements = TypeScript.Syntax.emptyList; - - if (parseBlockEvenWithNoOpenBrace || openBraceToken.width() > 0) { - var savedIsInStrictMode = this.isInStrictMode; - - var processItems = checkForStrictMode ? ParserImpl.updateStrictModeState : null; - var result = this.parseSyntaxList(32 /* Block_Statements */, processItems); - statements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - this.setStrictMode(savedIsInStrictMode); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.block(openBraceToken, statements, closeBraceToken); - }; - - ParserImpl.prototype.parseCallSignature = function (requireCompleteTypeParameterList) { - var typeParameterList = this.parseOptionalTypeParameterList(requireCompleteTypeParameterList); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.callSignature(typeParameterList, parameterList, typeAnnotation); - }; - - ParserImpl.prototype.parseOptionalTypeParameterList = function (requireCompleteTypeParameterList) { - if (this.currentToken().tokenKind !== 80 /* LessThanToken */) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var lessThanToken = this.eatToken(80 /* LessThanToken */); - - var result = this.parseSeparatedSyntaxList(524288 /* TypeParameterList_TypeParameters */); - var typeParameters = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeParameterList = this.factory.typeParameterList(lessThanToken, typeParameters, greaterThanToken); - - return typeParameterList; - } - }; - - ParserImpl.prototype.isTypeParameter = function () { - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.parseTypeParameter = function () { - var identifier = this.eatIdentifierToken(); - var constraint = this.parseOptionalConstraint(); - - return this.factory.typeParameter(identifier, constraint); - }; - - ParserImpl.prototype.parseOptionalConstraint = function () { - if (this.currentToken().kind() !== 48 /* ExtendsKeyword */) { - return null; - } - - var extendsKeyword = this.eatKeyword(48 /* ExtendsKeyword */); - var type = this.parseType(); - - return this.factory.constraint(extendsKeyword, type); - }; - - ParserImpl.prototype.parseParameterList = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var parameters = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(131072 /* ParameterList_Parameters */); - parameters = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - return this.factory.parameterList(openParenToken, parameters, closeParenToken); - }; - - ParserImpl.prototype.isTypeAnnotation = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseOptionalTypeAnnotation = function (allowStringLiteral) { - return this.isTypeAnnotation() ? this.parseTypeAnnotation(allowStringLiteral) : null; - }; - - ParserImpl.prototype.parseTypeAnnotation = function (allowStringLiteral) { - var colonToken = this.eatToken(106 /* ColonToken */); - var type = allowStringLiteral && this.currentToken().tokenKind === 14 /* StringLiteral */ ? this.eatToken(14 /* StringLiteral */) : this.parseType(); - - return this.factory.typeAnnotation(colonToken, type); - }; - - ParserImpl.prototype.isType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 39 /* TypeOfKeyword */: - - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - - case 70 /* OpenBraceToken */: - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - - case 31 /* NewKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - var type = this.parseNonArrayType(currentToken); - - while (this.currentToken().tokenKind === 74 /* OpenBracketToken */) { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - type = this.factory.arrayType(type, openBracketToken, closeBracketToken); - } - - return type; - }; - - ParserImpl.prototype.isTypeQuery = function () { - return this.currentToken().tokenKind === 39 /* TypeOfKeyword */; - }; - - ParserImpl.prototype.parseTypeQuery = function () { - var typeOfKeyword = this.eatToken(39 /* TypeOfKeyword */); - var name = this.parseName(); - - return this.factory.typeQuery(typeOfKeyword, name); - }; - - ParserImpl.prototype.parseNonArrayType = function (currentToken) { - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - return this.eatAnyToken(); - - case 70 /* OpenBraceToken */: - return this.parseObjectType(); - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - return this.parseFunctionType(); - - case 31 /* NewKeyword */: - return this.parseConstructorType(); - - case 39 /* TypeOfKeyword */: - return this.parseTypeQuery(); - } - - return this.parseNameOrGenericType(); - }; - - ParserImpl.prototype.parseNameOrGenericType = function () { - var name = this.parseName(); - var typeArgumentList = this.tryParseTypeArgumentList(false); - - return typeArgumentList === null ? name : this.factory.genericType(name, typeArgumentList); - }; - - ParserImpl.prototype.parseFunctionType = function () { - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var returnType = this.parseType(); - - return this.factory.functionType(typeParameterList, parameterList, equalsGreaterThanToken, returnType); - }; - - ParserImpl.prototype.parseConstructorType = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var type = this.parseType(); - - return this.factory.constructorType(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type); - }; - - ParserImpl.prototype.isParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return true; - } - - var token = this.currentToken(); - var tokenKind = token.tokenKind; - if (tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - if (ParserImpl.isModifier(token) && !this.isModifierUsedAsParameterIdentifier(token)) { - return true; - } - - return this.isIdentifier(token); - }; - - ParserImpl.prototype.isModifierUsedAsParameterIdentifier = function (token) { - if (this.isIdentifier(token)) { - var nextTokenKind = this.peekToken(1).tokenKind; - switch (nextTokenKind) { - case 73 /* CloseParenToken */: - case 106 /* ColonToken */: - case 107 /* EqualsToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return this.eatNode(); - } - - var dotDotDotToken = this.tryEatToken(77 /* DotDotDotToken */); - - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (ParserImpl.isModifier(currentToken) && !this.isModifierUsedAsParameterIdentifier(currentToken)) { - modifierArray.push(this.eatAnyToken()); - continue; - } - - break; - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var identifier = this.eatIdentifierToken(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(true); - - var equalsValueClause = null; - if (this.isEqualsValueClause(true)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.parseSyntaxList = function (currentListType, processItems) { - if (typeof processItems === "undefined") { processItems = null; } - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSyntaxListWorker(currentListType, processItems); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.parseSeparatedSyntaxList = function (currentListType) { - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSeparatedSyntaxListWorker(currentListType); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.abortParsingListOrMoveToNextToken = function (currentListType, items, skippedTokens) { - this.reportUnexpectedTokenDiagnostic(currentListType); - - for (var state = 524288 /* LastListParsingState */; state >= 1 /* FirstListParsingState */; state >>= 1) { - if ((this.listParsingState & state) !== 0) { - if (this.isExpectedListTerminator(state) || this.isExpectedListItem(state, true)) { - return true; - } - } - } - - var skippedToken = this.currentToken(); - - this.moveToNextToken(); - - this.addSkippedTokenToList(items, skippedTokens, skippedToken); - - return false; - }; - - ParserImpl.prototype.addSkippedTokenToList = function (items, skippedTokens, skippedToken) { - for (var i = items.length - 1; i >= 0; i--) { - var item = items[i]; - var lastToken = item.lastToken(); - if (lastToken.fullWidth() > 0) { - items[i] = this.addSkippedTokenAfterNodeOrToken(item, skippedToken); - return; - } - } - - skippedTokens.push(skippedToken); - }; - - ParserImpl.prototype.tryParseExpectedListItem = function (currentListType, inErrorRecovery, items, processItems) { - if (this.isExpectedListItem(currentListType, inErrorRecovery)) { - var item = this.parseExpectedListItem(currentListType, inErrorRecovery); - - items.push(item); - - if (processItems !== null) { - processItems(this, items); - } - } - }; - - ParserImpl.prototype.listIsTerminated = function (currentListType) { - return this.isExpectedListTerminator(currentListType) || this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.getArray = function () { - if (this.arrayPool.length > 0) { - return this.arrayPool.pop(); - } - - return []; - }; - - ParserImpl.prototype.returnZeroOrOneLengthArray = function (array) { - if (array.length <= 1) { - this.returnArray(array); - } - }; - - ParserImpl.prototype.returnArray = function (array) { - array.length = 0; - this.arrayPool.push(array); - }; - - ParserImpl.prototype.parseSyntaxListWorker = function (currentListType, processItems) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - - while (true) { - var oldItemsCount = items.length; - this.tryParseExpectedListItem(currentListType, false, items, processItems); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } - } - } - - var result = TypeScript.Syntax.list(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.parseSeparatedSyntaxListWorker = function (currentListType) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - TypeScript.Debug.assert(items.length === 0); - TypeScript.Debug.assert(skippedTokens.length === 0); - TypeScript.Debug.assert(skippedTokens !== items); - - var separatorKind = this.separatorKind(currentListType); - var allowAutomaticSemicolonInsertion = separatorKind === 78 /* SemicolonToken */; - - var inErrorRecovery = false; - var listWasTerminated = false; - while (true) { - var oldItemsCount = items.length; - - this.tryParseExpectedListItem(currentListType, inErrorRecovery, items, null); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } else { - inErrorRecovery = true; - continue; - } - } - - inErrorRecovery = false; - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === separatorKind || currentToken.tokenKind === 79 /* CommaToken */) { - items.push(this.eatAnyToken()); - continue; - } - - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - if (allowAutomaticSemicolonInsertion && this.canEatAutomaticSemicolon(false)) { - items.push(this.eatExplicitOrAutomaticSemicolon(false)); - - continue; - } - - items.push(this.eatToken(separatorKind)); - - inErrorRecovery = true; - } - - var result = TypeScript.Syntax.separatedList(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.separatorKind = function (currentListType) { - switch (currentListType) { - case 2048 /* HeritageClause_TypeNameList */: - case 16384 /* ArgumentList_AssignmentExpressions */: - case 256 /* EnumDeclaration_EnumElements */: - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - case 131072 /* ParameterList_Parameters */: - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - case 262144 /* TypeArgumentList_Types */: - case 524288 /* TypeParameterList_TypeParameters */: - return 79 /* CommaToken */; - - case 512 /* ObjectType_TypeMembers */: - return 78 /* SemicolonToken */; - - case 1 /* SourceUnit_ModuleElements */: - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - case 2 /* ClassDeclaration_ClassElements */: - case 4 /* ModuleDeclaration_ModuleElements */: - case 8 /* SwitchStatement_SwitchClauses */: - case 16 /* SwitchClause_Statements */: - case 32 /* Block_Statements */: - default: - throw TypeScript.Errors.notYetImplemented(); - } - }; - - ParserImpl.prototype.reportUnexpectedTokenDiagnostic = function (listType) { - var token = this.currentToken(); - - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [this.getExpectedListElementType(listType)]); - this.addDiagnostic(diagnostic); - }; - - ParserImpl.prototype.addDiagnostic = function (diagnostic) { - if (this.diagnostics.length > 0 && this.diagnostics[this.diagnostics.length - 1].start() === diagnostic.start()) { - return; - } - - this.diagnostics.push(diagnostic); - }; - - ParserImpl.prototype.isExpectedListTerminator = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isExpectedSourceUnit_ModuleElementsTerminator(); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isExpectedClassDeclaration_ClassElementsTerminator(); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isExpectedModuleDeclaration_ModuleElementsTerminator(); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isExpectedSwitchStatement_SwitchClausesTerminator(); - - case 16 /* SwitchClause_Statements */: - return this.isExpectedSwitchClause_StatementsTerminator(); - - case 32 /* Block_Statements */: - return this.isExpectedBlock_StatementsTerminator(); - - case 64 /* TryBlock_Statements */: - return this.isExpectedTryBlock_StatementsTerminator(); - - case 128 /* CatchBlock_Statements */: - return this.isExpectedCatchBlock_StatementsTerminator(); - - case 256 /* EnumDeclaration_EnumElements */: - return this.isExpectedEnumDeclaration_EnumElementsTerminator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isExpectedObjectType_TypeMembersTerminator(); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpressionsTerminator(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isExpectedHeritageClause_TypeNameListTerminator(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator(); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); - - case 131072 /* ParameterList_Parameters */: - return this.isExpectedParameterList_ParametersTerminator(); - - case 262144 /* TypeArgumentList_Types */: - return this.isExpectedTypeArgumentList_TypesTerminator(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isExpectedTypeParameterList_TypeParametersTerminator(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isExpectedLiteralExpression_AssignmentExpressionsTerminator(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedSourceUnit_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.isExpectedEnumDeclaration_EnumElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedModuleDeclaration_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectType_TypeMembersTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedLiteralExpression_AssignmentExpressionsTerminator = function () { - return this.currentToken().tokenKind === 75 /* CloseBracketToken */; - }; - - ParserImpl.prototype.isExpectedTypeArgumentList_TypesTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (this.canFollowTypeArgumentListInExpression(token.tokenKind)) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedTypeParameterList_TypeParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (token.tokenKind === 72 /* OpenParenToken */ || token.tokenKind === 70 /* OpenBraceToken */ || token.tokenKind === 48 /* ExtendsKeyword */ || token.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedParameterList_ParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (token.tokenKind === 70 /* OpenBraceToken */) { - return true; - } - - if (token.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator = function () { - if (this.currentToken().tokenKind === 78 /* SemicolonToken */ || this.currentToken().tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator = function () { - if (this.previousToken().tokenKind === 79 /* CommaToken */) { - return false; - } - - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.canEatExplicitOrAutomaticSemicolon(false); - }; - - ParserImpl.prototype.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 70 /* OpenBraceToken */ || token0.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedHeritageClause_TypeNameListTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - if (this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpressionsTerminator = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 73 /* CloseParenToken */ || token0.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.isExpectedClassDeclaration_ClassElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchStatement_SwitchClausesTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchClause_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */ || this.isSwitchClause(); - }; - - ParserImpl.prototype.isExpectedBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedTryBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */ || this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedCatchBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.isStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.isStatement(inErrorRecovery); - - case 64 /* TryBlock_Statements */: - case 128 /* CatchBlock_Statements */: - return false; - - case 256 /* EnumDeclaration_EnumElements */: - return this.isEnumElement(inErrorRecovery); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isVariableDeclarator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpression(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isHeritageClauseTypeName(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isPropertyAssignment(inErrorRecovery); - - case 131072 /* ParameterList_Parameters */: - return this.isParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.isType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isTypeParameter(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isAssignmentOrOmittedExpression(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpression = function () { - var currentToken = this.currentToken(); - if (this.isExpression(currentToken)) { - return true; - } - - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.parseExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.parseHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.parseClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.parseSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.parseStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.parseStatement(inErrorRecovery); - - case 256 /* EnumDeclaration_EnumElements */: - return this.parseEnumElement(); - - case 512 /* ObjectType_TypeMembers */: - return this.parseTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.parseAssignmentExpression(true); - - case 2048 /* HeritageClause_TypeNameList */: - return this.parseNameOrGenericType(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.parseVariableDeclarator(true, false); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.parseVariableDeclarator(false, false); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.parsePropertyAssignment(inErrorRecovery); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.parseAssignmentOrOmittedExpression(); - - case 131072 /* ParameterList_Parameters */: - return this.parseParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.parseType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.parseTypeParameter(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.getExpectedListElementType = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return '{'; - - case 2 /* ClassDeclaration_ClassElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null); - - case 4 /* ModuleDeclaration_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 8 /* SwitchStatement_SwitchClauses */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null); - - case 16 /* SwitchClause_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 32 /* Block_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 256 /* EnumDeclaration_EnumElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 512 /* ObjectType_TypeMembers */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - case 2048 /* HeritageClause_TypeNameList */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null); - - case 131072 /* ParameterList_Parameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); - - case 262144 /* TypeArgumentList_Types */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null); - - case 524288 /* TypeParameterList_TypeParameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - return ParserImpl; - })(); - - function parse(fileName, text, isDeclaration, options) { - var source = new NormalParserSource(fileName, text, options.languageVersion()); - - return new ParserImpl(fileName, text.lineMap(), source, options, text).parseSyntaxTree(isDeclaration); - } - Parser.parse = parse; - - function incrementalParse(oldSyntaxTree, textChangeRange, newText) { - if (textChangeRange.isUnchanged()) { - return oldSyntaxTree; - } - - var source = new IncrementalParserSource(oldSyntaxTree, textChangeRange, newText); - - return new ParserImpl(oldSyntaxTree.fileName(), newText.lineMap(), source, oldSyntaxTree.parseOptions(), newText).parseSyntaxTree(oldSyntaxTree.isDeclaration()); - } - Parser.incrementalParse = incrementalParse; - })(TypeScript.Parser || (TypeScript.Parser = {})); - var Parser = TypeScript.Parser; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTree = (function () { - function SyntaxTree(sourceUnit, isDeclaration, diagnostics, fileName, lineMap, parseOtions) { - this._allDiagnostics = null; - this._sourceUnit = sourceUnit; - this._isDeclaration = isDeclaration; - this._parserDiagnostics = diagnostics; - this._fileName = fileName; - this._lineMap = lineMap; - this._parseOptions = parseOtions; - } - SyntaxTree.prototype.toJSON = function (key) { - var result = {}; - - result.isDeclaration = this._isDeclaration; - result.languageVersion = TypeScript.LanguageVersion[this._parseOptions.languageVersion()]; - result.parseOptions = this._parseOptions; - - if (this.diagnostics().length > 0) { - result.diagnostics = this.diagnostics(); - } - - result.sourceUnit = this._sourceUnit; - result.lineMap = this._lineMap; - - return result; - }; - - SyntaxTree.prototype.sourceUnit = function () { - return this._sourceUnit; - }; - - SyntaxTree.prototype.isDeclaration = function () { - return this._isDeclaration; - }; - - SyntaxTree.prototype.computeDiagnostics = function () { - if (this._parserDiagnostics.length > 0) { - return this._parserDiagnostics; - } - - var diagnostics = []; - this.sourceUnit().accept(new GrammarCheckerWalker(this, diagnostics)); - - return diagnostics; - }; - - SyntaxTree.prototype.diagnostics = function () { - if (this._allDiagnostics === null) { - this._allDiagnostics = this.computeDiagnostics(); - } - - return this._allDiagnostics; - }; - - SyntaxTree.prototype.fileName = function () { - return this._fileName; - }; - - SyntaxTree.prototype.lineMap = function () { - return this._lineMap; - }; - - SyntaxTree.prototype.parseOptions = function () { - return this._parseOptions; - }; - - SyntaxTree.prototype.structuralEquals = function (tree) { - return TypeScript.ArrayUtilities.sequenceEquals(this.diagnostics(), tree.diagnostics(), TypeScript.Diagnostic.equals) && this.sourceUnit().structuralEquals(tree.sourceUnit()); - }; - return SyntaxTree; - })(); - TypeScript.SyntaxTree = SyntaxTree; - - var GrammarCheckerWalker = (function (_super) { - __extends(GrammarCheckerWalker, _super); - function GrammarCheckerWalker(syntaxTree, diagnostics) { - _super.call(this); - this.syntaxTree = syntaxTree; - this.diagnostics = diagnostics; - this.inAmbientDeclaration = false; - this.inBlock = false; - this.inObjectLiteralExpression = false; - this.currentConstructor = null; - } - GrammarCheckerWalker.prototype.childFullStart = function (parent, child) { - return this.position() + TypeScript.Syntax.childOffset(parent, child); - }; - - GrammarCheckerWalker.prototype.childStart = function (parent, child) { - return this.childFullStart(parent, child) + child.leadingTriviaWidth(); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic = function (start, length, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start, length, diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic1 = function (elementFullStart, element, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), elementFullStart + element.leadingTriviaWidth(), element.width(), diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.visitCatchClause = function (node) { - if (node.typeAnnotation) { - this.pushDiagnostic(this.childStart(node, node.typeAnnotation), node.typeAnnotation.width(), TypeScript.DiagnosticCode.Catch_clause_parameter_cannot_have_a_type_annotation); - } - - _super.prototype.visitCatchClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkParameterListOrder = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - var seenOptionalParameter = false; - var parameterCount = node.parameters.nonSeparatorCount(); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameterIndex = i / 2; - var parameter = node.parameters.childAt(i); - - if (parameter.dotDotDotToken) { - if (parameterIndex !== (parameterCount - 1)) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_must_be_last_in_list); - return true; - } - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_have_an_initializer); - return true; - } - } else if (parameter.questionToken || parameter.equalsValueClause) { - seenOptionalParameter = true; - - if (parameter.questionToken && parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer); - return true; - } - } else { - if (seenOptionalParameter) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Required_parameter_cannot_follow_optional_parameter); - return true; - } - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterListAcessibilityModifiers = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameter = node.parameters.childAt(i); - - if (this.checkParameterAccessibilityModifiers(node, parameter, parameterFullStart)) { - return true; - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifiers = function (parameterList, parameter, parameterFullStart) { - if (parameter.modifiers.childCount() > 0) { - var modifiers = parameter.modifiers; - var modifierFullStart = parameterFullStart + TypeScript.Syntax.childOffset(parameter, modifiers); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - - if (this.checkParameterAccessibilityModifier(parameterList, modifier, modifierFullStart, i)) { - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierFullStart, modifierIndex) { - if (modifier.tokenKind !== 57 /* PublicKeyword */ && modifier.tokenKind !== 55 /* PrivateKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]); - return true; - } else { - if (modifierIndex > 0) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (!this.inAmbientDeclaration && this.currentConstructor && !this.currentConstructor.block && this.currentConstructor.callSignature.parameterList === parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_cannot_be_used_in_a_constructor_overload); - return true; - } else if (this.inAmbientDeclaration || this.currentConstructor === null || this.currentConstructor.callSignature.parameterList !== parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForTrailingSeparator = function (parent, list) { - if (list.childCount() === 0 || list.childCount() % 2 === 1) { - return false; - } - - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i === n - 1) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode.Trailing_separator_not_allowed); - } - - currentElementFullStart += child.fullWidth(); - } - - return true; - }; - - GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, expected) { - if (list.childCount() > 0) { - return false; - } - - var listFullStart = this.childFullStart(parent, list); - var tokenAtStart = this.syntaxTree.sourceUnit().findToken(listFullStart); - - this.pushDiagnostic1(listFullStart, tokenAtStart.token(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [expected]); - - return true; - }; - - GrammarCheckerWalker.prototype.visitParameterList = function (node) { - if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingSeparator(node, node.parameters)) { - this.skip(node); - return; - } - - _super.prototype.visitParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitHeritageClause = function (node) { - if (this.checkForTrailingSeparator(node, node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null))) { - this.skip(node); - return; - } - - _super.prototype.visitHeritageClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.arguments)) { - this.skip(node); - return; - } - - _super.prototype.visitArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) { - if (this.checkForTrailingSeparator(node, node.variableDeclarators) || this.checkForAtLeastOneElement(node, node.variableDeclarators, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameter); - var parameter = node.parameter; - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters); - return true; - } else if (parameter.modifiers.childCount() > 0) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers); - return true; - } else if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark); - return true; - } else if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer); - return true; - } else if (!parameter.typeAnnotation) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation); - return true; - } else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexSignature = function (node) { - if (this.checkIndexSignatureParameter(node)) { - this.skip(node); - return; - } - - if (!node.typeAnnotation) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation); - this.skip(node); - return; - } - - _super.prototype.visitIndexSignature.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - var seenImplementsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 2); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause); - return true; - } - - if (heritageClause.typeNames.nonSeparatorCount() > 1) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen); - return true; - } - - seenImplementsClause = true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) { - if (this.inAmbientDeclaration) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_for_code_already_in_an_ambient_context); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, typeKeyword, modifiers) { - if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) { - if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - this.pushDiagnostic1(this.childFullStart(moduleElement, typeKeyword), typeKeyword.firstToken(), TypeScript.DiagnosticCode.declare_modifier_required_for_top_level_element); - return true; - } - } - }; - - GrammarCheckerWalker.prototype.checkFunctionOverloads = function (node, moduleElements) { - if (!this.inAmbientDeclaration && !this.syntaxTree.isDeclaration()) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - - var inFunctionOverloadChain = false; - var functionOverloadChainName = null; - - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - var lastElement = i === (n - 1); - - if (inFunctionOverloadChain) { - if (moduleElement.kind() !== 129 /* FunctionDeclaration */) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - var functionDeclaration = moduleElement; - if (functionDeclaration.identifier.valueText() !== functionOverloadChainName) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - } - - if (moduleElement.kind() === 129 /* FunctionDeclaration */) { - functionDeclaration = moduleElement; - if (!TypeScript.SyntaxUtilities.containsToken(functionDeclaration.modifiers, 63 /* DeclareKeyword */)) { - inFunctionOverloadChain = functionDeclaration.block === null; - functionOverloadChainName = functionDeclaration.identifier.valueText(); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = moduleElements.childAt(i + 1); - if (nextElement.kind() === 129 /* FunctionDeclaration */) { - var nextFunction = nextElement; - - if (nextFunction.identifier.valueText() !== functionOverloadChainName && nextFunction.block === null) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else { - inFunctionOverloadChain = false; - functionOverloadChainName = ""; - } - } - - moduleElementFullStart += moduleElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkClassOverloads = function (node) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var classElementFullStart = this.childFullStart(node, node.classElements); - - var inFunctionOverloadChain = false; - var inConstructorOverloadChain = false; - - var functionOverloadChainName = null; - var isInStaticOverloadChain = null; - var memberFunctionDeclaration = null; - - for (var i = 0, n = node.classElements.childCount(); i < n; i++) { - var classElement = node.classElements.childAt(i); - var lastElement = i === (n - 1); - var isStaticOverload = null; - - if (inFunctionOverloadChain) { - if (classElement.kind() !== 135 /* MemberFunctionDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - memberFunctionDeclaration = classElement; - if (memberFunctionDeclaration.propertyName.valueText() !== functionOverloadChainName) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - - isStaticOverload = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - if (isStaticOverload !== isInStaticOverloadChain) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - var diagnostic = isInStaticOverloadChain ? TypeScript.DiagnosticCode.Function_overload_must_be_static : TypeScript.DiagnosticCode.Function_overload_must_not_be_static; - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, diagnostic, null); - return true; - } - } else if (inConstructorOverloadChain) { - if (classElement.kind() !== 137 /* ConstructorDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - if (classElement.kind() === 135 /* MemberFunctionDeclaration */) { - memberFunctionDeclaration = classElement; - - inFunctionOverloadChain = memberFunctionDeclaration.block === null; - functionOverloadChainName = memberFunctionDeclaration.propertyName.valueText(); - isInStaticOverloadChain = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = node.classElements.childAt(i + 1); - if (nextElement.kind() === 135 /* MemberFunctionDeclaration */) { - var nextMemberFunction = nextElement; - - if (nextMemberFunction.propertyName.valueText() !== functionOverloadChainName && nextMemberFunction.block === null) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else if (classElement.kind() === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = classElement; - - inConstructorOverloadChain = constructorDeclaration.block === null; - if (lastElement && inConstructorOverloadChain) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - classElementFullStart += classElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForReservedName = function (parent, name, diagnosticKey) { - var nameFullStart = this.childFullStart(parent, name); - var token; - var tokenFullStart; - - var current = name; - while (current !== null) { - if (current.kind() === 121 /* QualifiedName */) { - var qualifiedName = current; - token = qualifiedName.right; - tokenFullStart = nameFullStart + this.childFullStart(qualifiedName, token); - current = qualifiedName.left; - } else { - TypeScript.Debug.assert(current.kind() === 11 /* IdentifierName */); - token = current; - tokenFullStart = nameFullStart; - current = null; - } - - switch (token.valueText()) { - case "any": - case "number": - case "boolean": - case "string": - case "void": - this.pushDiagnostic(tokenFullStart + token.leadingTriviaWidth(), token.width(), diagnosticKey, [token.valueText()]); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Class_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.classKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node) || this.checkClassOverloads(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitClassDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 1); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause); - return true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) { - var modifierFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.declare_modifier_cannot_appear_on_an_interface_declaration); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Interface_name_cannot_be_0) || this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) { - this.skip(node); - return; - } - - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) { - var modifierFullStart = this.position(); - - var seenAccessibilityModifier = false; - var seenStaticModifier = false; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var modifier = list.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */) { - if (seenAccessibilityModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (seenStaticModifier) { - var previousToken = list.childAt(i - 1); - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]); - return true; - } - - seenAccessibilityModifier = true; - } else if (modifier.tokenKind === 58 /* StaticKeyword */) { - if (seenStaticModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return true; - } - - seenStaticModifier = true; - } else { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node, getKeyword, parameterList) { - var getKeywordFullStart = this.childFullStart(node, getKeyword); - if (parameterList.parameters.childCount() !== 0) { - this.pushDiagnostic1(getKeywordFullStart, getKeyword, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) { - if (this.checkIndexMemberModifiers(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIndexMemberDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) { - if (node.modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(node, node.modifiers); - this.pushDiagnostic1(modifierFullStart, node.modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, node, languageVersion, diagnosticKey) { - if (this.syntaxTree.parseOptions().languageVersion() < languageVersion) { - var nodeFullStart = this.childFullStart(parent, node); - this.pushDiagnostic1(nodeFullStart, node, diagnosticKey); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - GrammarCheckerWalker.prototype.visitGetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.getKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkGetAccessorParameter(node, node.getKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitGetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) { - if (this.inAmbientDeclaration) { - this.pushDiagnostic1(this.position(), accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts, null); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node, setKeyword, parameterList) { - var setKeywordFullStart = this.childFullStart(node, setKeyword); - if (parameterList.parameters.childCount() !== 1) { - this.pushDiagnostic1(setKeywordFullStart, setKeyword, TypeScript.DiagnosticCode.set_accessor_must_have_one_and_only_one_parameter); - return true; - } - - var parameterListFullStart = this.childFullStart(node, parameterList); - var parameterFullStart = parameterListFullStart + TypeScript.Syntax.childOffset(parameterList, parameterList.openParenToken); - var parameter = parameterList.parameters.childAt(0); - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer); - return true; - } - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.setKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkSetAccessorParameter(node, node.setKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitSetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Enum_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.enumKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitEnumDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkEnumElements = function (node) { - var enumElementFullStart = this.childFullStart(node, node.enumElements); - - var previousValueWasComputed = false; - for (var i = 0, n = node.enumElements.childCount(); i < n; i++) { - var child = node.enumElements.childAt(i); - - if (i % 2 === 0) { - var enumElement = child; - - if (!enumElement.equalsValueClause && previousValueWasComputed) { - this.pushDiagnostic1(enumElementFullStart, enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer, null); - return true; - } - - if (enumElement.equalsValueClause) { - var value = enumElement.equalsValueClause.value; - previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value); - } - } - - enumElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitEnumElement = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - var expression = node.equalsValueClause.value; - if (!TypeScript.Syntax.isIntegerLiteral(expression)) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers); - this.skip(node); - return; - } - } - - _super.prototype.visitEnumElement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) { - if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments); - } - - _super.prototype.visitInvocationExpression.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) { - var modifierFullStart = this.position(); - var seenExportModifier = false; - var seenDeclareModifier = false; - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */ || modifier.tokenKind === 58 /* StaticKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]); - return true; - } - - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return; - } - - seenDeclareModifier = true; - } else if (modifier.tokenKind === 47 /* ExportKeyword */) { - if (seenExportModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return; - } - - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]); - return; - } - - seenExportModifier = true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) { - var currentElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - if (child.kind() === 133 /* ImportDeclaration */) { - var importDeclaration = child; - if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (node.stringLiteral === null) { - this.pushDiagnostic1(currentElementFullStart, importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module, null); - } - } - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_on_import_declaration); - return true; - } - }; - - GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitImportDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) { - if (this.checkForReservedName(node, node.name, TypeScript.DiagnosticCode.Module_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.moduleKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (!TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */) && this.checkFunctionOverloads(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (node.stringLiteral) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var stringLiteralFullStart = this.childFullStart(node, node.stringLiteral); - this.pushDiagnostic1(stringLiteralFullStart, node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names); - this.skip(node); - return; - } - } - - if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitModuleDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExports = function (node, moduleElements) { - var seenExportedElement = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (TypeScript.SyntaxUtilities.hasExportKeyword(child)) { - seenExportedElement = true; - break; - } - } - - var moduleElementFullStart = this.childFullStart(node, moduleElements); - if (seenExportedElement) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_not_allowed_in_module_with_exported_element); - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForMultipleExportAssignments = function (node, moduleElements) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - var seenExportAssignment = false; - var errorFound = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - if (child.kind() === 134 /* ExportAssignment */) { - if (seenExportAssignment) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Module_cannot_have_multiple_export_assignments); - errorFound = true; - } - seenExportAssignment = true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return errorFound; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) { - var moduleElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules); - - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBlock = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Implementations_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - if (this.checkFunctionOverloads(node, node.statements)) { - this.skip(node); - return; - } - - var savedInBlock = this.inBlock; - this.inBlock = true; - _super.prototype.visitBlock.call(this, node); - this.inBlock = savedInBlock; - }; - - GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBreakStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitBreakStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitContinueStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitContinueStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDebuggerStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDoStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDoStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitEmptyStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitExpressionStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitForInStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForInStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) { - if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.nonSeparatorCount() > 1) { - var variableDeclarationFullStart = this.childFullStart(node, node.variableDeclaration); - - this.pushDiagnostic1(variableDeclarationFullStart, node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitForStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitIfStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIfStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitLabeledStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitReturnStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitReturnStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitSwitchStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitThrowStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitThrowStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTryStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitTryStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWhileStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWhileStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWithStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWithStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) { - if (this.inBlock || this.inObjectLiteralExpression) { - if (modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(parent, modifiers); - this.pushDiagnostic1(modifierFullStart, modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.functionKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitFunctionDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableStatement = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitVariableStatement.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) { - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i % 2 === 1 && child.kind() !== kind) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]); - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectType = function (node) { - if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitObjectType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitArrayType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitArrayType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitFunctionType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitFunctionType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitConstructorType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitConstructorType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclarator.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) { - this.skip(node); - return; - } - - var savedCurrentConstructor = this.currentConstructor; - this.currentConstructor = node; - _super.prototype.visitConstructorDeclaration.call(this, node); - this.currentConstructor = savedCurrentConstructor; - }; - - GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) { - var currentElementFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var child = modifiers.childAt(i); - if (child.kind() !== 57 /* PublicKeyword */) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]); - return true; - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeParameterList) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeParameterListFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(callSignatureFullStart, node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeAnnotation) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeAnnotationFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(typeAnnotationFullStart, node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSourceUnit = function (node) { - if (this.checkFunctionOverloads(node, node.moduleElements) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - _super.prototype.visitSourceUnit.call(this, node); - }; - return GrammarCheckerWalker; - })(TypeScript.PositionTrackingWalker); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Unicode = (function () { - function Unicode() { - } - Unicode.lookupInUnicodeMap = function (code, map) { - if (code < map[0]) { - return false; - } - - var lo = 0; - var hi = map.length; - var mid; - - while (lo + 1 < hi) { - mid = lo + (hi - lo) / 2; - - mid -= mid % 2; - if (map[mid] <= code && code <= map[mid + 1]) { - return true; - } - - if (code < map[mid]) { - hi = mid; - } else { - lo = mid + 2; - } - } - - return false; - }; - - Unicode.isIdentifierStart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - - Unicode.isIdentifierPart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - - Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - return Unicode; - })(); - TypeScript.Unicode = Unicode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CompilerDiagnostics) { - CompilerDiagnostics.debug = false; - - CompilerDiagnostics.diagnosticWriter = null; - - CompilerDiagnostics.analysisPass = 0; - - function Alert(output) { - if (CompilerDiagnostics.diagnosticWriter) { - CompilerDiagnostics.diagnosticWriter.Alert(output); - } - } - CompilerDiagnostics.Alert = Alert; - - function debugPrint(s) { - if (CompilerDiagnostics.debug) { - Alert(s); - } - } - CompilerDiagnostics.debugPrint = debugPrint; - - function assert(condition, s) { - if (CompilerDiagnostics.debug) { - if (!condition) { - Alert(s); - } - } - } - CompilerDiagnostics.assert = assert; - })(TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {})); - var CompilerDiagnostics = TypeScript.CompilerDiagnostics; - - var NullLogger = (function () { - function NullLogger() { - } - NullLogger.prototype.information = function () { - return false; - }; - NullLogger.prototype.debug = function () { - return false; - }; - NullLogger.prototype.warning = function () { - return false; - }; - NullLogger.prototype.error = function () { - return false; - }; - NullLogger.prototype.fatal = function () { - return false; - }; - NullLogger.prototype.log = function (s) { - }; - return NullLogger; - })(); - TypeScript.NullLogger = NullLogger; - - function timeFunction(logger, funcDescription, func) { - var start = (new Date()).getTime(); - var result = func(); - var end = (new Date()).getTime(); - if (logger.information()) { - logger.log(funcDescription + " completed in " + (end - start) + " msec"); - } - return result; - } - TypeScript.timeFunction = timeFunction; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Document = (function () { - function Document(_compiler, _semanticInfoChain, fileName, referencedFiles, _scriptSnapshot, byteOrderMark, version, isOpen, _syntaxTree, _topLevelDecl) { - this._compiler = _compiler; - this._semanticInfoChain = _semanticInfoChain; - this.fileName = fileName; - this.referencedFiles = referencedFiles; - this._scriptSnapshot = _scriptSnapshot; - this.byteOrderMark = byteOrderMark; - this.version = version; - this.isOpen = isOpen; - this._syntaxTree = _syntaxTree; - this._topLevelDecl = _topLevelDecl; - this._diagnostics = null; - this._bloomFilter = null; - this._sourceUnit = null; - this._lineMap = null; - this._declASTMap = []; - this._astDeclMap = []; - this._amdDependencies = undefined; - this._externalModuleIndicatorSpan = undefined; - } - Document.prototype.invalidate = function () { - this._declASTMap.length = 0; - this._astDeclMap.length = 0; - this._topLevelDecl = null; - - this._syntaxTree = null; - this._sourceUnit = null; - this._diagnostics = null; - this._bloomFilter = null; - }; - - Document.prototype.isDeclareFile = function () { - return TypeScript.isDTSFile(this.fileName); - }; - - Document.prototype.cacheSyntaxTreeInfo = function (syntaxTree) { - var start = new Date().getTime(); - this._diagnostics = syntaxTree.diagnostics(); - TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start; - - this._lineMap = syntaxTree.lineMap(); - - var sourceUnit = syntaxTree.sourceUnit(); - var leadingTrivia = sourceUnit.leadingTrivia(); - - this._externalModuleIndicatorSpan = this.getImplicitImportSpan(leadingTrivia) || this.getTopLevelImportOrExportSpan(sourceUnit); - - var amdDependencies = []; - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.isComment()) { - var amdDependency = this.getAmdDependency(trivia.fullText()); - if (amdDependency) { - amdDependencies.push(amdDependency); - } - } - } - - this._amdDependencies = amdDependencies; - }; - - Document.prototype.getAmdDependency = function (comment) { - var amdDependencyRegEx = /^\/\/\/\s*/gim; - var match = implicitImportRegEx.exec(trivia.fullText()); - - if (match) { - return new TypeScript.TextSpan(position, trivia.fullWidth()); - } - - return null; - }; - - Document.prototype.getTopLevelImportOrExportSpan = function (node) { - var firstToken; - var position = 0; - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var moduleElement = node.moduleElements.childAt(i); - - firstToken = moduleElement.firstToken(); - if (firstToken !== null && firstToken.tokenKind === 47 /* ExportKeyword */) { - return new TypeScript.TextSpan(position + firstToken.leadingTriviaWidth(), firstToken.width()); - } - - if (moduleElement.kind() === 133 /* ImportDeclaration */) { - var importDecl = moduleElement; - if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) { - return new TypeScript.TextSpan(position + importDecl.leadingTriviaWidth(), importDecl.width()); - } - } - - position += moduleElement.fullWidth(); - } - - return null; - ; - }; - - Document.prototype.sourceUnit = function () { - if (!this._sourceUnit) { - var start = new Date().getTime(); - var syntaxTree = this.syntaxTree(); - this._sourceUnit = TypeScript.SyntaxTreeToAstVisitor.visit(syntaxTree, this.fileName, this._compiler.compilationSettings(), this.isOpen); - TypeScript.astTranslationTime += new Date().getTime() - start; - - if (!this.isOpen) { - this._syntaxTree = null; - } - } - - return this._sourceUnit; - }; - - Document.prototype.diagnostics = function () { - if (this._diagnostics === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._diagnostics); - } - - return this._diagnostics; - }; - - Document.prototype.lineMap = function () { - if (this._lineMap === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._lineMap); - } - - return this._lineMap; - }; - - Document.prototype.isExternalModule = function () { - return this.externalModuleIndicatorSpan() !== null; - }; - - Document.prototype.externalModuleIndicatorSpan = function () { - if (this._externalModuleIndicatorSpan === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._externalModuleIndicatorSpan !== undefined); - } - - return this._externalModuleIndicatorSpan; - }; - - Document.prototype.amdDependencies = function () { - if (this._amdDependencies === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._amdDependencies !== undefined); - } - - return this._amdDependencies; - }; - - Document.prototype.syntaxTree = function () { - var result = this._syntaxTree; - if (!result) { - var start = new Date().getTime(); - - result = TypeScript.Parser.parse(this.fileName, TypeScript.SimpleText.fromScriptSnapshot(this._scriptSnapshot), TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())); - - TypeScript.syntaxTreeParseTime += new Date().getTime() - start; - - if (this.isOpen || !this._sourceUnit) { - this._syntaxTree = result; - } - } - - this.cacheSyntaxTreeInfo(result); - return result; - }; - - Document.prototype.bloomFilter = function () { - if (!this._bloomFilter) { - var identifiers = TypeScript.createIntrinsicsObject(); - var pre = function (cur) { - if (TypeScript.ASTHelpers.isValidAstNode(cur)) { - if (cur.kind() === 11 /* IdentifierName */) { - var nodeText = cur.valueText(); - - identifiers[nodeText] = true; - } - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(this.sourceUnit(), pre, null, identifiers); - - var identifierCount = 0; - for (var name in identifiers) { - if (identifiers[name]) { - identifierCount++; - } - } - - this._bloomFilter = new TypeScript.BloomFilter(identifierCount); - this._bloomFilter.addKeys(identifiers); - } - return this._bloomFilter; - }; - - Document.prototype.emitToOwnOutputFile = function () { - return !this._compiler.compilationSettings().outFileOption() || this.isExternalModule(); - }; - - Document.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) { - var oldSyntaxTree = this._syntaxTree; - - if (textChangeRange !== null && TypeScript.Debug.shouldAssert(1 /* Normal */)) { - var oldText = this._scriptSnapshot; - var newText = scriptSnapshot; - - TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldTextPrefix = oldText.getText(0, textChangeRange.span().start()); - var newTextPrefix = newText.getText(0, textChangeRange.span().start()); - TypeScript.Debug.assert(oldTextPrefix === newTextPrefix); - - var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength()); - var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength()); - TypeScript.Debug.assert(oldTextSuffix === newTextSuffix); - } - } - - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var newSyntaxTree = textChangeRange === null || oldSyntaxTree === null ? TypeScript.Parser.parse(this.fileName, text, TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())) : TypeScript.Parser.incrementalParse(oldSyntaxTree, textChangeRange, text); - - return new Document(this._compiler, this._semanticInfoChain, this.fileName, this.referencedFiles, scriptSnapshot, this.byteOrderMark, version, isOpen, newSyntaxTree, null); - }; - - Document.create = function (compiler, semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - return new Document(compiler, semanticInfoChain, fileName, referencedFiles, scriptSnapshot, byteOrderMark, version, isOpen, null, null); - }; - - Document.prototype.topLevelDecl = function () { - if (this._topLevelDecl === null) { - this._topLevelDecl = TypeScript.DeclarationCreator.create(this, this._semanticInfoChain, this._compiler.compilationSettings()); - } - - return this._topLevelDecl; - }; - - Document.prototype._getDeclForAST = function (ast) { - this.topLevelDecl(); - return this._astDeclMap[ast.syntaxID()]; - }; - - Document.prototype.getEnclosingDecl = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - return this._getDeclForAST(ast); - } - - ast = ast.parent; - var decl = null; - while (ast) { - decl = this._getDeclForAST(ast); - - if (decl) { - break; - } - - ast = ast.parent; - } - - return decl._getEnclosingDeclFromParentDecl(); - }; - - Document.prototype._setDeclForAST = function (ast, decl) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._astDeclMap[ast.syntaxID()] = decl; - }; - - Document.prototype._getASTForDecl = function (decl) { - return this._declASTMap[decl.declID]; - }; - - Document.prototype._setASTForDecl = function (decl, ast) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._declASTMap[decl.declID] = ast; - }; - return Document; - })(); - TypeScript.Document = Document; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function hasFlag(val, flag) { - return (val & flag) !== 0; - } - TypeScript.hasFlag = hasFlag; - - (function (TypeRelationshipFlags) { - TypeRelationshipFlags[TypeRelationshipFlags["SuccessfulComparison"] = 0] = "SuccessfulComparison"; - TypeRelationshipFlags[TypeRelationshipFlags["RequiredPropertyIsMissing"] = 1 << 1] = "RequiredPropertyIsMissing"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleSignatures"] = 1 << 2] = "IncompatibleSignatures"; - TypeRelationshipFlags[TypeRelationshipFlags["SourceSignatureHasTooManyParameters"] = 3] = "SourceSignatureHasTooManyParameters"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleReturnTypes"] = 1 << 4] = "IncompatibleReturnTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatiblePropertyTypes"] = 1 << 5] = "IncompatiblePropertyTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleParameterTypes"] = 1 << 6] = "IncompatibleParameterTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["InconsistantPropertyAccesibility"] = 1 << 7] = "InconsistantPropertyAccesibility"; - })(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {})); - var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags; - - (function (ModuleGenTarget) { - ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; - ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; - ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous"; - })(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {})); - var ModuleGenTarget = TypeScript.ModuleGenTarget; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var proto = "__proto__"; - - var BlockIntrinsics = (function () { - function BlockIntrinsics() { - this.prototype = undefined; - this.toString = undefined; - this.toLocaleString = undefined; - this.valueOf = undefined; - this.hasOwnProperty = undefined; - this.propertyIsEnumerable = undefined; - this.isPrototypeOf = undefined; - this["constructor"] = undefined; - - this[proto] = null; - this[proto] = undefined; - } - return BlockIntrinsics; - })(); - - function createIntrinsicsObject() { - return new BlockIntrinsics(); - } - TypeScript.createIntrinsicsObject = createIntrinsicsObject; - - var StringHashTable = (function () { - function StringHashTable() { - this.itemCount = 0; - this.table = createIntrinsicsObject(); - } - StringHashTable.prototype.getAllKeys = function () { - var result = []; - - for (var k in this.table) { - if (this.table[k] !== undefined) { - result.push(k); - } - } - - return result; - }; - - StringHashTable.prototype.add = function (key, data) { - if (this.table[key] !== undefined) { - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.addOrUpdate = function (key, data) { - if (this.table[key] !== undefined) { - this.table[key] = data; - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.map = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - fn(k, this.table[k], context); - } - } - }; - - StringHashTable.prototype.every = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (!fn(k, this.table[k], context)) { - return false; - } - } - } - - return true; - }; - - StringHashTable.prototype.some = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (fn(k, this.table[k], context)) { - return true; - } - } - } - - return false; - }; - - StringHashTable.prototype.count = function () { - return this.itemCount; - }; - - StringHashTable.prototype.lookup = function (key) { - var data = this.table[key]; - return data === undefined ? null : data; - }; - - StringHashTable.prototype.remove = function (key) { - if (this.table[key] !== undefined) { - this.table[key] = undefined; - this.itemCount--; - } - }; - return StringHashTable; - })(); - TypeScript.StringHashTable = StringHashTable; - - var IdentiferNameHashTable = (function (_super) { - __extends(IdentiferNameHashTable, _super); - function IdentiferNameHashTable() { - _super.apply(this, arguments); - } - IdentiferNameHashTable.prototype.getAllKeys = function () { - var result = []; - - _super.prototype.map.call(this, function (k, v, c) { - if (v !== undefined) { - result.push(k.substring(1)); - } - }, null); - - return result; - }; - - IdentiferNameHashTable.prototype.add = function (key, data) { - return _super.prototype.add.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.addOrUpdate = function (key, data) { - return _super.prototype.addOrUpdate.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.map = function (fn, context) { - return _super.prototype.map.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.every = function (fn, context) { - return _super.prototype.every.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.some = function (fn, context) { - return _super.prototype.some.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.lookup = function (key) { - return _super.prototype.lookup.call(this, "#" + key); - }; - return IdentiferNameHashTable; - })(StringHashTable); - TypeScript.IdentiferNameHashTable = IdentiferNameHashTable; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (ASTHelpers) { - function scriptIsElided(sourceUnit) { - return TypeScript.isDTSFile(sourceUnit.fileName()) || moduleMembersAreElided(sourceUnit.moduleElements); - } - ASTHelpers.scriptIsElided = scriptIsElided; - - function moduleIsElided(declaration) { - return TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) || moduleMembersAreElided(declaration.moduleElements); - } - ASTHelpers.moduleIsElided = moduleIsElided; - - function moduleMembersAreElided(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - if (!moduleIsElided(member)) { - return false; - } - } else if (member.kind() !== 128 /* InterfaceDeclaration */) { - return false; - } - } - - return true; - } - - function enumIsElided(declaration) { - if (TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - return true; - } - - return false; - } - ASTHelpers.enumIsElided = enumIsElided; - - function isValidAstNode(ast) { - if (!ast) - return false; - - if (ast.start() === -1 || ast.end() === -1) - return false; - - return true; - } - ASTHelpers.isValidAstNode = isValidAstNode; - - function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) { - if (typeof useTrailingTriviaAsLimChar === "undefined") { useTrailingTriviaAsLimChar = true; } - if (typeof forceInclusive === "undefined") { forceInclusive = false; } - var top = null; - - var pre = function (cur, walker) { - if (isValidAstNode(cur)) { - var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && cur.width() === 0; - - if (isInvalid1) { - walker.options.goChildren = false; - } else { - var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === script.end() + script.trailingTriviaWidth(); - - var minChar = cur.start(); - var limChar = cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0) + (inclusive ? 1 : 0); - if (pos >= minChar && pos < limChar) { - if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || cur.end() > cur.start()) { - if (top === null) { - top = cur; - } else if (cur.start() >= top.start() && (cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0)) <= (top.end() + (useTrailingTriviaAsLimChar ? top.trailingTriviaWidth() : 0))) { - if (top.width() !== 0 || cur.width() !== 0) { - top = cur; - } - } - } - } - - walker.options.goChildren = (minChar <= pos && pos <= limChar); - } - } - }; - - TypeScript.getAstWalkerFactory().walk(script, pre); - return top; - } - ASTHelpers.getAstAtPosition = getAstAtPosition; - - function getExtendsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 230 /* ExtendsHeritageClause */; - }); - } - ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause; - - function getImplementsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 231 /* ImplementsHeritageClause */; - }); - } - ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause; - - function isCallExpression(ast) { - return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */); - } - ASTHelpers.isCallExpression = isCallExpression; - - function isCallExpressionTarget(ast) { - if (!ast) { - return false; - } - - var current = ast; - - while (current && current.parent) { - if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) { - current = current.parent; - continue; - } - - break; - } - - if (current && current.parent) { - if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) { - return current === current.parent.expression; - } - } - - return false; - } - ASTHelpers.isCallExpressionTarget = isCallExpressionTarget; - - function isNameOfSomeDeclaration(ast) { - if (ast === null || ast.parent === null) { - return false; - } - if (ast.kind() !== 11 /* IdentifierName */) { - return false; - } - - switch (ast.parent.kind()) { - case 131 /* ClassDeclaration */: - return ast.parent.identifier === ast; - case 128 /* InterfaceDeclaration */: - return ast.parent.identifier === ast; - case 132 /* EnumDeclaration */: - return ast.parent.identifier === ast; - case 130 /* ModuleDeclaration */: - return ast.parent.name === ast || ast.parent.stringLiteral === ast; - case 225 /* VariableDeclarator */: - return ast.parent.propertyName === ast; - case 129 /* FunctionDeclaration */: - return ast.parent.identifier === ast; - case 135 /* MemberFunctionDeclaration */: - return ast.parent.propertyName === ast; - case 242 /* Parameter */: - return ast.parent.identifier === ast; - case 238 /* TypeParameter */: - return ast.parent.identifier === ast; - case 240 /* SimplePropertyAssignment */: - return ast.parent.propertyName === ast; - case 241 /* FunctionPropertyAssignment */: - return ast.parent.propertyName === ast; - case 243 /* EnumElement */: - return ast.parent.propertyName === ast; - case 133 /* ImportDeclaration */: - return ast.parent.identifier === ast; - } - - return false; - } - - function isDeclarationASTOrDeclarationNameAST(ast) { - return isNameOfSomeDeclaration(ast) || isDeclarationAST(ast); - } - ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST; - - function getEnclosingParameterForInitializer(ast) { - var current = ast; - while (current) { - switch (current.kind()) { - case 232 /* EqualsValueClause */: - if (current.parent && current.parent.kind() === 242 /* Parameter */) { - return current.parent; - } - break; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - - current = current.parent; - } - return null; - } - ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer; - - function getEnclosingMemberVariableDeclaration(ast) { - var current = ast; - - while (current) { - switch (current.kind()) { - case 136 /* MemberVariableDeclaration */: - return current; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - current = current.parent; - } - - return null; - } - ASTHelpers.getEnclosingMemberVariableDeclaration = getEnclosingMemberVariableDeclaration; - - function isNameOfFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast; - } - ASTHelpers.isNameOfFunction = isNameOfFunction; - - function isNameOfMemberFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast; - } - ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction; - - function isNameOfMemberAccessExpression(ast) { - if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) { - return true; - } - - return false; - } - ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression; - - function isRightSideOfQualifiedName(ast) { - if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) { - return true; - } - - return false; - } - ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName; - - function parentIsModuleDeclaration(ast) { - return ast.parent && ast.parent.kind() === 130 /* ModuleDeclaration */; - } - ASTHelpers.parentIsModuleDeclaration = parentIsModuleDeclaration; - - function parametersFromIdentifier(id) { - return { - length: 1, - lastParameterIsRest: function () { - return false; - }, - ast: id, - astAt: function (index) { - return id; - }, - identifierAt: function (index) { - return id; - }, - typeAt: function (index) { - return null; - }, - initializerAt: function (index) { - return null; - }, - isOptionalAt: function (index) { - return false; - } - }; - } - ASTHelpers.parametersFromIdentifier = parametersFromIdentifier; - - function parametersFromParameter(parameter) { - return { - length: 1, - lastParameterIsRest: function () { - return parameter.dotDotDotToken !== null; - }, - ast: parameter, - astAt: function (index) { - return parameter; - }, - identifierAt: function (index) { - return parameter.identifier; - }, - typeAt: function (index) { - return getType(parameter); - }, - initializerAt: function (index) { - return parameter.equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(parameter); - } - }; - } - ASTHelpers.parametersFromParameter = parametersFromParameter; - - function parameterIsOptional(parameter) { - return parameter.questionToken !== null || parameter.equalsValueClause !== null; - } - - function parametersFromParameterList(list) { - return { - length: list.parameters.nonSeparatorCount(), - lastParameterIsRest: function () { - return TypeScript.lastParameterIsRest(list); - }, - ast: list.parameters, - astAt: function (index) { - return list.parameters.nonSeparatorAt(index); - }, - identifierAt: function (index) { - return list.parameters.nonSeparatorAt(index).identifier; - }, - typeAt: function (index) { - return getType(list.parameters.nonSeparatorAt(index)); - }, - initializerAt: function (index) { - return list.parameters.nonSeparatorAt(index).equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(list.parameters.nonSeparatorAt(index)); - } - }; - } - ASTHelpers.parametersFromParameterList = parametersFromParameterList; - - function isDeclarationAST(ast) { - switch (ast.kind()) { - case 225 /* VariableDeclarator */: - return getVariableStatement(ast) !== null; - - case 133 /* ImportDeclaration */: - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 242 /* Parameter */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 144 /* IndexSignature */: - case 129 /* FunctionDeclaration */: - case 130 /* ModuleDeclaration */: - case 124 /* ArrayType */: - case 122 /* ObjectType */: - case 238 /* TypeParameter */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - case 138 /* IndexMemberDeclaration */: - case 132 /* EnumDeclaration */: - case 243 /* EnumElement */: - case 240 /* SimplePropertyAssignment */: - case 241 /* FunctionPropertyAssignment */: - case 222 /* FunctionExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - case 145 /* MethodSignature */: - case 141 /* PropertySignature */: - return true; - default: - return false; - } - } - ASTHelpers.isDeclarationAST = isDeclarationAST; - - function docComments(ast) { - if (isDeclarationAST(ast)) { - var preComments = ast.kind() === 225 /* VariableDeclarator */ ? getVariableStatement(ast).preComments() : ast.preComments(); - - if (preComments && preComments.length > 0) { - var preCommentsLength = preComments.length; - var docComments = new Array(); - for (var i = preCommentsLength - 1; i >= 0; i--) { - if (isDocComment(preComments[i])) { - docComments.push(preComments[i]); - continue; - } - - break; - } - - return docComments.reverse(); - } - } - - return TypeScript.sentinelEmptyArray; - } - ASTHelpers.docComments = docComments; - - function isDocComment(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - var fullText = comment.fullText(); - return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/"; - } - - return false; - } - - function getParameterList(ast) { - if (ast) { - switch (ast.kind()) { - case 137 /* ConstructorDeclaration */: - return getParameterList(ast.callSignature); - case 129 /* FunctionDeclaration */: - return getParameterList(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getParameterList(ast.callSignature); - case 143 /* ConstructSignature */: - return getParameterList(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getParameterList(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getParameterList(ast.callSignature); - case 222 /* FunctionExpression */: - return getParameterList(ast.callSignature); - case 145 /* MethodSignature */: - return getParameterList(ast.callSignature); - case 125 /* ConstructorType */: - return ast.parameterList; - case 123 /* FunctionType */: - return ast.parameterList; - case 142 /* CallSignature */: - return ast.parameterList; - case 139 /* GetAccessor */: - return ast.parameterList; - case 140 /* SetAccessor */: - return ast.parameterList; - } - } - - return null; - } - ASTHelpers.getParameterList = getParameterList; - - function getType(ast) { - if (ast) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - return getType(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getType(ast.callSignature); - case 143 /* ConstructSignature */: - return getType(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getType(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getType(ast.callSignature); - case 222 /* FunctionExpression */: - return getType(ast.callSignature); - case 145 /* MethodSignature */: - return getType(ast.callSignature); - case 142 /* CallSignature */: - return getType(ast.typeAnnotation); - case 144 /* IndexSignature */: - return getType(ast.typeAnnotation); - case 141 /* PropertySignature */: - return getType(ast.typeAnnotation); - case 139 /* GetAccessor */: - return getType(ast.typeAnnotation); - case 242 /* Parameter */: - return getType(ast.typeAnnotation); - case 136 /* MemberVariableDeclaration */: - return getType(ast.variableDeclarator); - case 225 /* VariableDeclarator */: - return getType(ast.typeAnnotation); - case 236 /* CatchClause */: - return getType(ast.typeAnnotation); - case 125 /* ConstructorType */: - return ast.type; - case 123 /* FunctionType */: - return ast.type; - case 244 /* TypeAnnotation */: - return ast.type; - } - } - - return null; - } - ASTHelpers.getType = getType; - - function getVariableStatement(variableDeclarator) { - if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) { - return variableDeclarator.parent.parent.parent; - } - - return null; - } - - function getVariableDeclaratorModifiers(variableDeclarator) { - var variableStatement = getVariableStatement(variableDeclarator); - return variableStatement ? variableStatement.modifiers : TypeScript.sentinelEmptyArray; - } - ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers; - - function isIntegerLiteralAST(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST; - - function getEnclosingModuleDeclaration(ast) { - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - } - ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration; - - function isEntireNameOfModuleDeclaration(nameAST) { - return parentIsModuleDeclaration(nameAST) && nameAST.parent.name === nameAST; - } - - function getModuleDeclarationFromNameAST(ast) { - if (ast) { - switch (ast.kind()) { - case 14 /* StringLiteral */: - if (parentIsModuleDeclaration(ast) && ast.parent.stringLiteral === ast) { - return ast.parent; - } - return null; - - case 11 /* IdentifierName */: - case 121 /* QualifiedName */: - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - break; - - default: - return null; - } - - for (ast = ast.parent; ast && ast.kind() === 121 /* QualifiedName */; ast = ast.parent) { - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - } - } - - return null; - } - ASTHelpers.getModuleDeclarationFromNameAST = getModuleDeclarationFromNameAST; - - function isLastNameOfModule(ast, astName) { - if (ast) { - if (ast.stringLiteral) { - return astName === ast.stringLiteral; - } else if (ast.name.kind() === 121 /* QualifiedName */) { - return astName === ast.name.right; - } else { - return astName === ast.name; - } - } - - return false; - } - ASTHelpers.isLastNameOfModule = isLastNameOfModule; - - function getNameOfIdenfierOrQualifiedName(name) { - if (name.kind() === 11 /* IdentifierName */) { - return name.text(); - } else { - TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); - var dotExpr = name; - return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); - } - } - ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName; - - function getModuleNames(name, result) { - result = result || []; - - if (name.kind() === 121 /* QualifiedName */) { - getModuleNames(name.left, result); - result.push(name.right); - } else { - result.push(name); - } - - return result; - } - ASTHelpers.getModuleNames = getModuleNames; - })(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); - var ASTHelpers = TypeScript.ASTHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function walkListChildren(preAst, walker) { - for (var i = 0, n = preAst.childCount(); i < n; i++) { - walker.walk(preAst.childAt(i)); - } - } - - function walkThrowStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkPrefixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkPostfixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkDeleteExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkTypeArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArguments); - } - - function walkTypeOfExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkVoidExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArgumentList); - walker.walk(preAst.arguments); - } - - function walkArrayLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.expressions); - } - - function walkSimplePropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.expression); - } - - function walkFunctionPropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkGetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkSeparatedListChildren(preAst, walker) { - for (var i = 0, n = preAst.nonSeparatorCount(); i < n; i++) { - walker.walk(preAst.nonSeparatorAt(i)); - } - } - - function walkSetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.block); - } - - function walkObjectLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.propertyAssignments); - } - - function walkCastExpressionChildren(preAst, walker) { - walker.walk(preAst.type); - walker.walk(preAst.expression); - } - - function walkParenthesizedExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkElementAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentExpression); - } - - function walkMemberAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.name); - } - - function walkQualifiedNameChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkBinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkEqualsValueClauseChildren(preAst, walker) { - walker.walk(preAst.value); - } - - function walkTypeParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.constraint); - } - - function walkTypeParameterListChildren(preAst, walker) { - walker.walk(preAst.typeParameters); - } - - function walkGenericTypeChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.typeArgumentList); - } - - function walkTypeAnnotationChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkTypeQueryChildren(preAst, walker) { - walker.walk(preAst.name); - } - - function walkInvocationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkObjectCreationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkTrinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.whenTrue); - walker.walk(preAst.whenFalse); - } - - function walkFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFunctionTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkSimpleArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkMemberFunctionDeclarationChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFuncDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkIndexMemberDeclarationChildren(preAst, walker) { - walker.walk(preAst.indexSignature); - } - - function walkIndexSignatureChildren(preAst, walker) { - walker.walk(preAst.parameter); - walker.walk(preAst.typeAnnotation); - } - - function walkCallSignatureChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - } - - function walkConstraintChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkConstructorDeclarationChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkConstructorTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkConstructSignatureChildren(preAst, walker) { - walker.walk(preAst.callSignature); - } - - function walkParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkParameterListChildren(preAst, walker) { - walker.walk(preAst.parameters); - } - - function walkPropertySignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - } - - function walkVariableDeclaratorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkMemberVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.variableDeclarator); - } - - function walkMethodSignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - } - - function walkReturnStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkForStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.initializer); - walker.walk(preAst.condition); - walker.walk(preAst.incrementor); - walker.walk(preAst.statement); - } - - function walkForInStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.left); - walker.walk(preAst.expression); - walker.walk(preAst.statement); - } - - function walkIfStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - walker.walk(preAst.elseClause); - } - - function walkElseClauseChildren(preAst, walker) { - walker.walk(preAst.statement); - } - - function walkWhileStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkDoStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkBlockChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.declarators); - } - - function walkCaseSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.statements); - } - - function walkDefaultSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkSwitchStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.switchClauses); - } - - function walkTryStatementChildren(preAst, walker) { - walker.walk(preAst.block); - walker.walk(preAst.catchClause); - walker.walk(preAst.finallyClause); - } - - function walkCatchClauseChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkExternalModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.stringLiteral); - } - - function walkFinallyClauseChildren(preAst, walker) { - walker.walk(preAst.block); - } - - function walkClassDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.classElements); - } - - function walkScriptChildren(preAst, walker) { - walker.walk(preAst.moduleElements); - } - - function walkHeritageClauseChildren(preAst, walker) { - walker.walk(preAst.typeNames); - } - - function walkInterfaceDeclerationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.body); - } - - function walkObjectTypeChildren(preAst, walker) { - walker.walk(preAst.typeMembers); - } - - function walkArrayTypeChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkModuleDeclarationChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.stringLiteral); - walker.walk(preAst.moduleElements); - } - - function walkModuleNameModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.moduleName); - } - - function walkEnumDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.enumElements); - } - - function walkEnumElementChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.equalsValueClause); - } - - function walkImportDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.moduleReference); - } - - function walkExportAssignmentChildren(preAst, walker) { - walker.walk(preAst.identifier); - } - - function walkWithStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkExpressionStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkLabeledStatementChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.statement); - } - - function walkVariableStatementChildren(preAst, walker) { - walker.walk(preAst.declaration); - } - - var childrenWalkers = new Array(246 /* Last */ + 1); - - for (var i = 9 /* FirstToken */, n = 119 /* LastToken */; i <= n; i++) { - childrenWalkers[i] = null; - } - for (var i = 4 /* FirstTrivia */, n = 8 /* LastTrivia */; i <= n; i++) { - childrenWalkers[i] = null; - } - - childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren; - childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[60 /* AnyKeyword */] = null; - childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren; - childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren; - childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren; - childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren; - childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren; - childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[146 /* Block */] = walkBlockChildren; - childrenWalkers[61 /* BooleanKeyword */] = null; - childrenWalkers[152 /* BreakStatement */] = null; - childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren; - childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren; - childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren; - childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren; - childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren; - childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren; - childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren; - childrenWalkers[239 /* Constraint */] = walkConstraintChildren; - childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren; - childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren; - childrenWalkers[153 /* ContinueStatement */] = null; - childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren; - childrenWalkers[162 /* DebuggerStatement */] = null; - childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren; - childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren; - childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren; - childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren; - childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren; - childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren; - childrenWalkers[156 /* EmptyStatement */] = null; - childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren; - childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren; - childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren; - childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren; - childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren; - childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren; - childrenWalkers[24 /* FalseKeyword */] = null; - childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren; - childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren; - childrenWalkers[154 /* ForStatement */] = walkForStatementChildren; - childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren; - childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren; - childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren; - childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren; - childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren; - childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren; - childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren; - childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren; - childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren; - childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren; - childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren; - childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren; - childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren; - childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren; - childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren; - childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[1 /* List */] = walkListChildren; - childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren; - childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren; - childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren; - childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren; - childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren; - childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren; - childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren; - childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren; - childrenWalkers[11 /* IdentifierName */] = null; - childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[0 /* None */] = null; - childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[32 /* NullKeyword */] = null; - childrenWalkers[67 /* NumberKeyword */] = null; - childrenWalkers[13 /* NumericLiteral */] = null; - childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren; - childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren; - childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren; - childrenWalkers[223 /* OmittedExpression */] = null; - childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[242 /* Parameter */] = walkParameterChildren; - childrenWalkers[227 /* ParameterList */] = walkParameterListChildren; - childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren; - childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren; - childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren; - childrenWalkers[12 /* RegularExpressionLiteral */] = null; - childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren; - childrenWalkers[120 /* SourceUnit */] = walkScriptChildren; - childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren; - childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren; - childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren; - childrenWalkers[14 /* StringLiteral */] = null; - childrenWalkers[69 /* StringKeyword */] = null; - childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren; - childrenWalkers[50 /* SuperKeyword */] = null; - childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren; - childrenWalkers[35 /* ThisKeyword */] = null; - childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren; - childrenWalkers[3 /* TriviaList */] = null; - childrenWalkers[37 /* TrueKeyword */] = null; - childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren; - childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren; - childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren; - childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren; - childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren; - childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren; - childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren; - childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren; - childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren; - childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren; - childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren; - childrenWalkers[41 /* VoidKeyword */] = null; - childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren; - childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren; - - for (var e in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) { - TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]); - } - } - - var AstWalkOptions = (function () { - function AstWalkOptions() { - this.goChildren = true; - this.stopWalking = false; - } - return AstWalkOptions; - })(); - TypeScript.AstWalkOptions = AstWalkOptions; - - var SimplePreAstWalker = (function () { - function SimplePreAstWalker(pre, state) { - this.pre = pre; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePreAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - }; - return SimplePreAstWalker; - })(); - - var SimplePrePostAstWalker = (function () { - function SimplePrePostAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePrePostAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - - this.post(ast, this.state); - }; - return SimplePrePostAstWalker; - })(); - - var NormalAstWalker = (function () { - function NormalAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - NormalAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - if (this.options.stopWalking) { - return; - } - - this.pre(ast, this); - - if (this.options.stopWalking) { - return; - } - - if (this.options.goChildren) { - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - } else { - this.options.goChildren = true; - } - - if (this.post) { - this.post(ast, this); - } - }; - return NormalAstWalker; - })(); - - var AstWalkerFactory = (function () { - function AstWalkerFactory() { - } - AstWalkerFactory.prototype.walk = function (ast, pre, post, state) { - new NormalAstWalker(pre, post, state).walk(ast); - }; - - AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) { - if (post) { - new SimplePrePostAstWalker(pre, post, state).walk(ast); - } else { - new SimplePreAstWalker(pre, state).walk(ast); - } - }; - return AstWalkerFactory; - })(); - TypeScript.AstWalkerFactory = AstWalkerFactory; - - var globalAstWalkerFactory = new AstWalkerFactory(); - - function getAstWalkerFactory() { - return globalAstWalkerFactory; - } - TypeScript.getAstWalkerFactory = getAstWalkerFactory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Base64Format = (function () { - function Base64Format() { - } - Base64Format.encode = function (inValue) { - if (inValue < 64) { - return Base64Format.encodedValues.charAt(inValue); - } - throw TypeError(inValue + ": not a 64 based value"); - }; - - Base64Format.decodeChar = function (inChar) { - if (inChar.length === 1) { - return Base64Format.encodedValues.indexOf(inChar); - } else { - throw TypeError('"' + inChar + '" must have length 1'); - } - }; - Base64Format.encodedValues = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - return Base64Format; - })(); - - var Base64VLQFormat = (function () { - function Base64VLQFormat() { - } - Base64VLQFormat.encode = function (inValue) { - if (inValue < 0) { - inValue = ((-inValue) << 1) + 1; - } else { - inValue = inValue << 1; - } - - var encodedStr = ""; - do { - var currentDigit = inValue & 31; - inValue = inValue >> 5; - if (inValue > 0) { - currentDigit = currentDigit | 32; - } - encodedStr = encodedStr + Base64Format.encode(currentDigit); - } while(inValue > 0); - - return encodedStr; - }; - - Base64VLQFormat.decode = function (inString) { - var result = 0; - var negative = false; - - var shift = 0; - for (var i = 0; i < inString.length; i++) { - var byte = Base64Format.decodeChar(inString[i]); - if (i === 0) { - if ((byte & 1) === 1) { - negative = true; - } - result = (byte >> 1) & 15; - } else { - result = result | ((byte & 31) << shift); - } - - shift += (i === 0) ? 4 : 5; - - if ((byte & 32) === 32) { - } else { - return { value: negative ? -(result) : result, rest: inString.substr(i + 1) }; - } - } - - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Base64_value_0_finished_with_a_continuation_bit, [inString])); - }; - return Base64VLQFormat; - })(); - TypeScript.Base64VLQFormat = Base64VLQFormat; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceMapPosition = (function () { - function SourceMapPosition() { - } - return SourceMapPosition; - })(); - TypeScript.SourceMapPosition = SourceMapPosition; - - var SourceMapping = (function () { - function SourceMapping() { - this.start = new SourceMapPosition(); - this.end = new SourceMapPosition(); - this.nameIndex = -1; - this.childMappings = []; - } - return SourceMapping; - })(); - TypeScript.SourceMapping = SourceMapping; - - var SourceMapEntry = (function () { - function SourceMapEntry(emittedFile, emittedLine, emittedColumn, sourceFile, sourceLine, sourceColumn, sourceName) { - this.emittedFile = emittedFile; - this.emittedLine = emittedLine; - this.emittedColumn = emittedColumn; - this.sourceFile = sourceFile; - this.sourceLine = sourceLine; - this.sourceColumn = sourceColumn; - this.sourceName = sourceName; - TypeScript.Debug.assert(isFinite(emittedLine)); - TypeScript.Debug.assert(isFinite(emittedColumn)); - TypeScript.Debug.assert(isFinite(sourceColumn)); - TypeScript.Debug.assert(isFinite(sourceLine)); - } - return SourceMapEntry; - })(); - TypeScript.SourceMapEntry = SourceMapEntry; - - var SourceMapper = (function () { - function SourceMapper(jsFile, sourceMapOut, document, jsFilePath, emitOptions, resolvePath) { - this.jsFile = jsFile; - this.sourceMapOut = sourceMapOut; - this.names = []; - this.mappingLevel = []; - this.tsFilePaths = []; - this.allSourceMappings = []; - this.sourceMapEntries = []; - this.setSourceMapOptions(document, jsFilePath, emitOptions, resolvePath); - this.setNewSourceFile(document, emitOptions); - } - SourceMapper.prototype.getOutputFile = function () { - var result = this.sourceMapOut.getOutputFile(); - result.sourceMapEntries = this.sourceMapEntries; - - return result; - }; - - SourceMapper.prototype.increaseMappingLevel = function (ast) { - this.mappingLevel.push(ast); - }; - - SourceMapper.prototype.decreaseMappingLevel = function (ast) { - TypeScript.Debug.assert(this.mappingLevel.length > 0, "Mapping level should never be less than 0. This suggests a missing start call."); - var expectedAst = this.mappingLevel.pop(); - var expectedAstInfo = expectedAst.kind ? TypeScript.SyntaxKind[expectedAst.kind()] : [expectedAst.start(), expectedAst.end()]; - var astInfo = ast.kind ? TypeScript.SyntaxKind[ast.kind()] : [ast.start(), ast.end()]; - TypeScript.Debug.assert(ast === expectedAst, "Provided ast is not the expected AST, Expected: " + expectedAstInfo + " Given: " + astInfo); - }; - - SourceMapper.prototype.setNewSourceFile = function (document, emitOptions) { - var sourceMappings = []; - this.allSourceMappings.push(sourceMappings); - this.currentMappings = [sourceMappings]; - this.currentNameIndex = []; - - this.setNewSourceFilePath(document, emitOptions); - }; - - SourceMapper.prototype.setSourceMapOptions = function (document, jsFilePath, emitOptions, resolvePath) { - var prettyJsFileName = TypeScript.getPrettyName(jsFilePath, false, true); - var prettyMapFileName = prettyJsFileName + SourceMapper.MapFileExtension; - this.jsFileName = prettyJsFileName; - - if (emitOptions.sourceMapRootDirectory()) { - this.sourceMapDirectory = emitOptions.sourceMapRootDirectory(); - if (document.emitToOwnOutputFile()) { - this.sourceMapDirectory = this.sourceMapDirectory + TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath((document.fileName)).replace(emitOptions.commonDirectoryPath(), "")); - } - - if (TypeScript.isRelative(this.sourceMapDirectory)) { - this.sourceMapDirectory = emitOptions.commonDirectoryPath() + this.sourceMapDirectory; - this.sourceMapDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(this.sourceMapDirectory))); - this.sourceMapPath = TypeScript.getRelativePathToFixedPath(TypeScript.getRootFilePath(jsFilePath), this.sourceMapDirectory + prettyMapFileName); - } else { - this.sourceMapPath = this.sourceMapDirectory + prettyMapFileName; - } - } else { - this.sourceMapPath = prettyMapFileName; - this.sourceMapDirectory = TypeScript.getRootFilePath(jsFilePath); - } - this.sourceRoot = emitOptions.sourceRootDirectory(); - }; - - SourceMapper.prototype.setNewSourceFilePath = function (document, emitOptions) { - var tsFilePath = TypeScript.switchToForwardSlashes(document.fileName); - if (emitOptions.sourceRootDirectory()) { - tsFilePath = TypeScript.getRelativePathToFixedPath(emitOptions.commonDirectoryPath(), tsFilePath); - } else { - tsFilePath = TypeScript.getRelativePathToFixedPath(this.sourceMapDirectory, tsFilePath); - } - this.tsFilePaths.push(tsFilePath); - }; - - SourceMapper.prototype.emitSourceMapping = function () { - var _this = this; - TypeScript.Debug.assert(this.mappingLevel.length === 0, "Mapping level is not 0. This suggest a missing end call. Value: " + this.mappingLevel.map(function (item) { - return ['Node of type', TypeScript.SyntaxKind[item.kind()], 'at', item.start(), 'to', item.end()].join(' '); - }).join(', ')); - - this.jsFile.WriteLine("//# sourceMappingURL=" + this.sourceMapPath); - - var mappingsString = ""; - - var prevEmittedColumn = 0; - var prevEmittedLine = 0; - var prevSourceColumn = 0; - var prevSourceLine = 0; - var prevSourceIndex = 0; - var prevNameIndex = 0; - var emitComma = false; - - var recordedPosition = null; - for (var sourceIndex = 0; sourceIndex < this.tsFilePaths.length; sourceIndex++) { - var recordSourceMapping = function (mappedPosition, nameIndex) { - if (recordedPosition !== null && recordedPosition.emittedColumn === mappedPosition.emittedColumn && recordedPosition.emittedLine === mappedPosition.emittedLine) { - return; - } - - if (prevEmittedLine !== mappedPosition.emittedLine) { - while (prevEmittedLine < mappedPosition.emittedLine) { - prevEmittedColumn = 0; - mappingsString = mappingsString + ";"; - prevEmittedLine++; - } - emitComma = false; - } else if (emitComma) { - mappingsString = mappingsString + ","; - } - - _this.sourceMapEntries.push(new SourceMapEntry(_this.jsFileName, mappedPosition.emittedLine + 1, mappedPosition.emittedColumn + 1, _this.tsFilePaths[sourceIndex], mappedPosition.sourceLine, mappedPosition.sourceColumn + 1, nameIndex >= 0 ? _this.names[nameIndex] : undefined)); - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.emittedColumn - prevEmittedColumn); - prevEmittedColumn = mappedPosition.emittedColumn; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(sourceIndex - prevSourceIndex); - prevSourceIndex = sourceIndex; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceLine - 1 - prevSourceLine); - prevSourceLine = mappedPosition.sourceLine - 1; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceColumn - prevSourceColumn); - prevSourceColumn = mappedPosition.sourceColumn; - - if (nameIndex >= 0) { - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(nameIndex - prevNameIndex); - prevNameIndex = nameIndex; - } - - emitComma = true; - recordedPosition = mappedPosition; - }; - - var recordSourceMappingSiblings = function (sourceMappings) { - for (var i = 0; i < sourceMappings.length; i++) { - var sourceMapping = sourceMappings[i]; - recordSourceMapping(sourceMapping.start, sourceMapping.nameIndex); - recordSourceMappingSiblings(sourceMapping.childMappings); - recordSourceMapping(sourceMapping.end, sourceMapping.nameIndex); - } - }; - - recordSourceMappingSiblings(this.allSourceMappings[sourceIndex]); - } - - this.sourceMapOut.Write(JSON.stringify({ - version: 3, - file: this.jsFileName, - sourceRoot: this.sourceRoot, - sources: this.tsFilePaths, - names: this.names, - mappings: mappingsString - })); - - this.sourceMapOut.Close(); - }; - SourceMapper.MapFileExtension = ".map"; - return SourceMapper; - })(); - TypeScript.SourceMapper = SourceMapper; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (EmitContainer) { - EmitContainer[EmitContainer["Prog"] = 0] = "Prog"; - EmitContainer[EmitContainer["Module"] = 1] = "Module"; - EmitContainer[EmitContainer["DynamicModule"] = 2] = "DynamicModule"; - EmitContainer[EmitContainer["Class"] = 3] = "Class"; - EmitContainer[EmitContainer["Constructor"] = 4] = "Constructor"; - EmitContainer[EmitContainer["Function"] = 5] = "Function"; - EmitContainer[EmitContainer["Args"] = 6] = "Args"; - EmitContainer[EmitContainer["Interface"] = 7] = "Interface"; - })(TypeScript.EmitContainer || (TypeScript.EmitContainer = {})); - var EmitContainer = TypeScript.EmitContainer; - - var EmitState = (function () { - function EmitState() { - this.column = 0; - this.line = 0; - this.container = 0 /* Prog */; - } - return EmitState; - })(); - TypeScript.EmitState = EmitState; - - var EmitOptions = (function () { - function EmitOptions(compiler, resolvePath) { - this.resolvePath = resolvePath; - this._diagnostic = null; - this._settings = null; - this._commonDirectoryPath = ""; - this._sharedOutputFile = ""; - this._sourceRootDirectory = ""; - this._sourceMapRootDirectory = ""; - this._outputDirectory = ""; - var settings = compiler.compilationSettings(); - this._settings = settings; - - if (settings.moduleGenTarget() === 0 /* Unspecified */) { - var fileNames = compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = compiler.getDocument(fileNames[i]); - if (!document.isDeclareFile() && document.isExternalModule()) { - var errorSpan = document.externalModuleIndicatorSpan(); - this._diagnostic = new TypeScript.Diagnostic(document.fileName, document.lineMap(), errorSpan.start(), errorSpan.length(), TypeScript.DiagnosticCode.Cannot_compile_external_modules_unless_the_module_flag_is_provided); - - return; - } - } - } - - if (!settings.mapSourceFiles()) { - if (settings.mapRoot()) { - if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } else { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } else if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } - - this._sourceMapRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.mapRoot())); - this._sourceRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.sourceRoot())); - - if (settings.outFileOption() || settings.outDirOption() || settings.mapRoot() || settings.sourceRoot()) { - if (settings.outFileOption()) { - this._sharedOutputFile = TypeScript.switchToForwardSlashes(resolvePath(settings.outFileOption())); - } - - if (settings.outDirOption()) { - this._outputDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(settings.outDirOption()))); - } - - if (this._outputDirectory || this._sourceMapRootDirectory || this.sourceRootDirectory) { - this.determineCommonDirectoryPath(compiler); - } - } - } - EmitOptions.prototype.diagnostic = function () { - return this._diagnostic; - }; - - EmitOptions.prototype.commonDirectoryPath = function () { - return this._commonDirectoryPath; - }; - EmitOptions.prototype.sharedOutputFile = function () { - return this._sharedOutputFile; - }; - EmitOptions.prototype.sourceRootDirectory = function () { - return this._sourceRootDirectory; - }; - EmitOptions.prototype.sourceMapRootDirectory = function () { - return this._sourceMapRootDirectory; - }; - EmitOptions.prototype.outputDirectory = function () { - return this._outputDirectory; - }; - - EmitOptions.prototype.compilationSettings = function () { - return this._settings; - }; - - EmitOptions.prototype.determineCommonDirectoryPath = function (compiler) { - var commonComponents = []; - var commonComponentsLength = -1; - - var fileNames = compiler.fileNames(); - for (var i = 0, len = fileNames.length; i < len; i++) { - var fileName = fileNames[i]; - var document = compiler.getDocument(fileNames[i]); - var sourceUnit = document.sourceUnit(); - - if (!document.isDeclareFile()) { - var fileComponents = TypeScript.filePathComponents(fileName); - if (commonComponentsLength === -1) { - commonComponents = fileComponents; - commonComponentsLength = commonComponents.length; - } else { - var updatedPath = false; - for (var j = 0; j < commonComponentsLength && j < fileComponents.length; j++) { - if (commonComponents[j] !== fileComponents[j]) { - commonComponentsLength = j; - updatedPath = true; - - if (j === 0) { - var isDynamicModuleCompilation = TypeScript.ArrayUtilities.any(fileNames, function (fileName) { - document = compiler.getDocument(fileName); - return !document.isDeclareFile() && document.isExternalModule(); - }); - - if (this._outputDirectory || this._sourceRootDirectory || (this._sourceMapRootDirectory && (!this._sharedOutputFile || isDynamicModuleCompilation))) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Cannot_find_the_common_subdirectory_path_for_the_input_files, null); - return; - } - - return; - } - - break; - } - } - - if (!updatedPath && fileComponents.length < commonComponentsLength) { - commonComponentsLength = fileComponents.length; - } - } - } - } - - this._commonDirectoryPath = commonComponents.slice(0, commonComponentsLength).join("/") + "/"; - }; - return EmitOptions; - })(); - TypeScript.EmitOptions = EmitOptions; - - var Indenter = (function () { - function Indenter() { - this.indentAmt = 0; - } - Indenter.prototype.increaseIndent = function () { - this.indentAmt += Indenter.indentStep; - }; - - Indenter.prototype.decreaseIndent = function () { - this.indentAmt -= Indenter.indentStep; - }; - - Indenter.prototype.getIndent = function () { - var indentString = Indenter.indentStrings[this.indentAmt]; - if (indentString === undefined) { - indentString = ""; - for (var i = 0; i < this.indentAmt; i = i + Indenter.indentStep) { - indentString += Indenter.indentStepString; - } - Indenter.indentStrings[this.indentAmt] = indentString; - } - return indentString; - }; - Indenter.indentStep = 4; - Indenter.indentStepString = " "; - Indenter.indentStrings = []; - return Indenter; - })(); - TypeScript.Indenter = Indenter; - - function lastParameterIsRest(parameterList) { - var parameters = parameterList.parameters; - return parameters.nonSeparatorCount() > 0 && parameters.nonSeparatorAt(parameters.nonSeparatorCount() - 1).dotDotDotToken !== null; - } - TypeScript.lastParameterIsRest = lastParameterIsRest; - - var Emitter = (function () { - function Emitter(emittingFileName, outfile, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.outfile = outfile; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.globalThisCapturePrologueEmitted = false; - this.extendsPrologueEmitted = false; - this.thisClassNode = null; - this.inArrowFunction = false; - this.moduleName = ""; - this.emitState = new EmitState(); - this.indenter = new Indenter(); - this.sourceMapper = null; - this.captureThisStmtString = "var _this = this;"; - this.declStack = []; - this.exportAssignment = null; - this.inWithBlock = false; - this.document = null; - this.detachedCommentsElement = null; - } - Emitter.prototype.pushDecl = function (decl) { - if (decl) { - this.declStack[this.declStack.length] = decl; - } - }; - - Emitter.prototype.popDecl = function (decl) { - if (decl) { - this.declStack.length--; - } - }; - - Emitter.prototype.getEnclosingDecl = function () { - var declStackLen = this.declStack.length; - var enclosingDecl = declStackLen > 0 ? this.declStack[declStackLen - 1] : null; - return enclosingDecl; - }; - - Emitter.prototype.setExportAssignment = function (exportAssignment) { - this.exportAssignment = exportAssignment; - }; - - Emitter.prototype.getExportAssignment = function () { - return this.exportAssignment; - }; - - Emitter.prototype.setDocument = function (document) { - this.document = document; - }; - - Emitter.prototype.shouldEmitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - if (isExternalModuleReference && !isExported && isAmdCodeGen) { - return false; - } - - var importSymbol = importDecl.getSymbol(); - if (importSymbol.isUsedAsValue()) { - return true; - } - - if (importDeclAST.moduleReference.kind() !== 245 /* ExternalModuleReference */) { - var canBeUsedExternally = isExported || importSymbol.typeUsedExternally() || importSymbol.isUsedInExportedAlias(); - if (!canBeUsedExternally && !this.document.isExternalModule()) { - canBeUsedExternally = TypeScript.hasFlag(importDecl.getParentDecl().kind, 1 /* Script */ | 32 /* DynamicModule */); - } - - if (canBeUsedExternally) { - if (importSymbol.getExportAssignedValueSymbol()) { - return true; - } - - var containerSymbol = importSymbol.getExportAssignedContainerSymbol(); - if (containerSymbol && containerSymbol.getInstanceSymbol()) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - this.emitComments(importDeclAST, true); - - var importSymbol = importDecl.getSymbol(); - - var parentSymbol = importSymbol.getContainer(); - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - var associatedParentSymbol = parentSymbol ? parentSymbol.getAssociatedContainerType() : null; - var associatedParentSymbolKind = associatedParentSymbol ? associatedParentSymbol.kind : 0 /* None */; - - var needsPropertyAssignment = false; - var usePropertyAssignmentInsteadOfVarDecl = false; - var moduleNamePrefix; - - if (isExported && (parentKind === 4 /* Container */ || parentKind === 32 /* DynamicModule */ || associatedParentSymbolKind === 4 /* Container */ || associatedParentSymbolKind === 32 /* DynamicModule */)) { - if (importSymbol.getExportAssignedTypeSymbol() || importSymbol.getExportAssignedContainerSymbol()) { - needsPropertyAssignment = true; - } else { - var valueSymbol = importSymbol.getExportAssignedValueSymbol(); - if (valueSymbol && (valueSymbol.kind === 65536 /* Method */ || valueSymbol.kind === 16384 /* Function */)) { - needsPropertyAssignment = true; - } else { - usePropertyAssignmentInsteadOfVarDecl = true; - } - } - - if (this.emitState.container === 2 /* DynamicModule */) { - moduleNamePrefix = "exports."; - } else { - moduleNamePrefix = this.moduleName + "."; - } - } - - if (isAmdCodeGen && isExternalModuleReference) { - needsPropertyAssignment = true; - } else { - this.recordSourceMappingStart(importDeclAST); - if (usePropertyAssignmentInsteadOfVarDecl) { - this.writeToOutput(moduleNamePrefix); - } else { - this.writeToOutput("var "); - } - this.writeToOutput(importDeclAST.identifier.text() + " = "); - var aliasAST = importDeclAST.moduleReference; - - if (isExternalModuleReference) { - this.writeToOutput("require(" + aliasAST.stringLiteral.text() + ")"); - } else { - this.emitJavascript(aliasAST.moduleName, false); - } - - this.recordSourceMappingEnd(importDeclAST); - this.writeToOutput(";"); - - if (needsPropertyAssignment) { - this.writeLineToOutput(""); - this.emitIndent(); - } - } - - if (needsPropertyAssignment) { - this.writeToOutputWithSourceMapRecord(moduleNamePrefix + importDeclAST.identifier.text() + " = " + importDeclAST.identifier.text(), importDeclAST); - this.writeToOutput(";"); - } - this.emitComments(importDeclAST, false); - }; - - Emitter.prototype.createSourceMapper = function (document, jsFileName, jsFile, sourceMapOut, resolvePath) { - this.sourceMapper = new TypeScript.SourceMapper(jsFile, sourceMapOut, document, jsFileName, this.emitOptions, resolvePath); - }; - - Emitter.prototype.setSourceMapperNewSourceFile = function (document) { - this.sourceMapper.setNewSourceFile(document, this.emitOptions); - }; - - Emitter.prototype.updateLineAndColumn = function (s) { - var lineNumbers = TypeScript.TextUtilities.parseLineStarts(s); - if (lineNumbers.length > 1) { - this.emitState.line += lineNumbers.length - 1; - this.emitState.column = s.length - lineNumbers[lineNumbers.length - 1]; - } else { - this.emitState.column += s.length; - } - }; - - Emitter.prototype.writeToOutputWithSourceMapRecord = function (s, astSpan) { - this.recordSourceMappingStart(astSpan); - this.writeToOutput(s); - this.recordSourceMappingEnd(astSpan); - }; - - Emitter.prototype.writeToOutput = function (s) { - this.outfile.Write(s); - this.updateLineAndColumn(s); - }; - - Emitter.prototype.writeLineToOutput = function (s, force) { - if (typeof force === "undefined") { force = false; } - if (!force && s === "" && this.emitState.column === 0) { - return; - } - - this.outfile.WriteLine(s); - this.updateLineAndColumn(s); - this.emitState.column = 0; - this.emitState.line++; - }; - - Emitter.prototype.writeCaptureThisStatement = function (ast) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord(this.captureThisStmtString, ast); - this.writeLineToOutput(""); - }; - - Emitter.prototype.setContainer = function (c) { - var temp = this.emitState.container; - this.emitState.container = c; - return temp; - }; - - Emitter.prototype.getIndentString = function () { - return this.indenter.getIndent(); - }; - - Emitter.prototype.emitIndent = function () { - this.writeToOutput(this.getIndentString()); - }; - - Emitter.prototype.emitComment = function (comment, trailing, first) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var text = getTrimmedTextLines(comment); - var emitColumn = this.emitState.column; - - if (emitColumn === 0) { - this.emitIndent(); - } else if (trailing && first) { - this.writeToOutput(" "); - } - - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - - if (text.length > 1 || comment.endsLine) { - for (var i = 1; i < text.length; i++) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput(text[i]); - } - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingEnd(comment); - this.writeToOutput(" "); - return; - } - } else { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } - - if (!trailing && emitColumn !== 0) { - this.emitIndent(); - } - }; - - Emitter.prototype.emitComments = function (ast, pre, onlyPinnedOrTripleSlashComments) { - var _this = this; - if (typeof onlyPinnedOrTripleSlashComments === "undefined") { onlyPinnedOrTripleSlashComments = false; } - if (ast && ast.kind() !== 146 /* Block */) { - if (ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ || ast.parent.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - return; - } - } - - if (pre) { - var preComments = ast.preComments(); - - if (preComments && ast === this.detachedCommentsElement) { - var detachedComments = this.getDetachedComments(ast); - preComments = preComments.slice(detachedComments.length); - this.detachedCommentsElement = null; - } - - if (preComments && onlyPinnedOrTripleSlashComments) { - preComments = TypeScript.ArrayUtilities.where(preComments, function (c) { - return _this.isPinnedOrTripleSlash(c); - }); - } - - this.emitCommentsArray(preComments, false); - } else { - this.emitCommentsArray(ast.postComments(), true); - } - }; - - Emitter.prototype.isPinnedOrTripleSlash = function (comment) { - var fullText = comment.fullText(); - if (fullText.match(TypeScript.tripleSlashReferenceRegExp)) { - return true; - } else { - return fullText.indexOf("/*!") === 0; - } - }; - - Emitter.prototype.emitCommentsArray = function (comments, trailing) { - if (!this.emitOptions.compilationSettings().removeComments() && comments) { - for (var i = 0, n = comments.length; i < n; i++) { - this.emitComment(comments[i], trailing, i === 0); - } - } - }; - - Emitter.prototype.emitObjectLiteralExpression = function (objectLiteral) { - this.recordSourceMappingStart(objectLiteral); - - this.writeToOutput("{"); - this.emitCommaSeparatedList(objectLiteral, objectLiteral.propertyAssignments, " ", true); - this.writeToOutput("}"); - - this.recordSourceMappingEnd(objectLiteral); - }; - - Emitter.prototype.emitArrayLiteralExpression = function (arrayLiteral) { - this.recordSourceMappingStart(arrayLiteral); - - this.writeToOutput("["); - this.emitCommaSeparatedList(arrayLiteral, arrayLiteral.expressions, "", true); - this.writeToOutput("]"); - - this.recordSourceMappingEnd(arrayLiteral); - }; - - Emitter.prototype.emitObjectCreationExpression = function (objectCreationExpression) { - this.recordSourceMappingStart(objectCreationExpression); - this.writeToOutput("new "); - var target = objectCreationExpression.expression; - - this.emit(target); - if (objectCreationExpression.argumentList) { - this.recordSourceMappingStart(objectCreationExpression.argumentList); - this.writeToOutput("("); - this.emitCommaSeparatedList(objectCreationExpression.argumentList, objectCreationExpression.argumentList.arguments, "", false); - this.writeToOutputWithSourceMapRecord(")", objectCreationExpression.argumentList.closeParenToken); - this.recordSourceMappingEnd(objectCreationExpression.argumentList); - } - - this.recordSourceMappingEnd(objectCreationExpression); - }; - - Emitter.prototype.getConstantDecl = function (dotExpr) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(dotExpr); - if (pullSymbol && pullSymbol.kind === 67108864 /* EnumMember */) { - var pullDecls = pullSymbol.getDeclarations(); - if (pullDecls.length === 1) { - var pullDecl = pullDecls[0]; - if (pullDecl.kind === 67108864 /* EnumMember */) { - return pullDecl; - } - } - } - - return null; - }; - - Emitter.prototype.tryEmitConstant = function (dotExpr) { - var propertyName = dotExpr.name; - var boundDecl = this.getConstantDecl(dotExpr); - if (boundDecl) { - var value = boundDecl.constantValue; - if (value !== null) { - this.recordSourceMappingStart(dotExpr); - this.writeToOutput(value.toString()); - var comment = " /* "; - comment += propertyName.text(); - comment += " */"; - this.writeToOutput(comment); - this.recordSourceMappingEnd(dotExpr); - return true; - } - } - - return false; - }; - - Emitter.prototype.emitInvocationExpression = function (callNode) { - this.recordSourceMappingStart(callNode); - var target = callNode.expression; - var args = callNode.argumentList.arguments; - - if (target.kind() === 212 /* MemberAccessExpression */ && target.expression.kind() === 50 /* SuperKeyword */) { - this.emit(target); - this.writeToOutput(".call"); - this.recordSourceMappingStart(args); - this.writeToOutput("("); - this.emitThis(); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - } else { - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("_super.call"); - } else { - this.emitJavascript(target, false); - } - this.recordSourceMappingStart(args); - this.writeToOutput("("); - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("this"); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - } - } - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - - this.writeToOutputWithSourceMapRecord(")", callNode.argumentList.closeParenToken); - this.recordSourceMappingEnd(args); - this.recordSourceMappingEnd(callNode); - }; - - Emitter.prototype.emitParameterList = function (list) { - this.writeToOutput("("); - this.emitCommentsArray(list.openParenTrailingComments, true); - this.emitFunctionParameters(TypeScript.ASTHelpers.parametersFromParameterList(list)); - this.writeToOutput(")"); - }; - - Emitter.prototype.emitFunctionParameters = function (parameters) { - var argsLen = 0; - - if (parameters) { - this.emitComments(parameters.ast, true); - - var tempContainer = this.setContainer(6 /* Args */); - argsLen = parameters.length; - var printLen = argsLen; - if (parameters.lastParameterIsRest()) { - printLen--; - } - for (var i = 0; i < printLen; i++) { - var arg = parameters.astAt(i); - this.emit(arg); - - if (i < (printLen - 1)) { - this.writeToOutput(", "); - } - } - this.setContainer(tempContainer); - - this.emitComments(parameters.ast, false); - } - }; - - Emitter.prototype.emitFunctionBodyStatements = function (name, funcDecl, parameterList, block, bodyExpression) { - this.writeLineToOutput(" {"); - if (name) { - this.recordSourceMappingNameStart(name); - } - - this.indenter.increaseIndent(); - - if (block) { - this.emitDetachedComments(block.statements); - } - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - if (parameterList) { - this.emitDefaultValueAssignments(parameterList); - this.emitRestParameterInitializer(parameterList); - } - - if (block) { - this.emitList(block.statements); - this.emitCommentsArray(block.closeBraceLeadingComments, false); - } else { - this.emitIndent(); - this.emitCommentsArray(bodyExpression.preComments(), false); - this.writeToOutput("return "); - this.emit(bodyExpression); - this.writeLineToOutput(";"); - this.emitCommentsArray(bodyExpression.postComments(), true); - } - - this.indenter.decreaseIndent(); - this.emitIndent(); - - if (block) { - this.writeToOutputWithSourceMapRecord("}", block.closeBraceToken); - } else { - this.writeToOutputWithSourceMapRecord("}", bodyExpression); - } - - if (name) { - this.recordSourceMappingNameEnd(); - } - }; - - Emitter.prototype.emitDefaultValueAssignments = function (parameters) { - var n = parameters.length; - if (parameters.lastParameterIsRest()) { - n--; - } - - for (var i = 0; i < n; i++) { - var arg = parameters.astAt(i); - var id = parameters.identifierAt(i); - var equalsValueClause = parameters.initializerAt(i); - if (equalsValueClause) { - this.emitIndent(); - this.recordSourceMappingStart(arg); - this.writeToOutput("if (typeof " + id.text() + " === \"undefined\") { "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.emitJavascript(equalsValueClause, false); - this.writeLineToOutput("; }"); - this.recordSourceMappingEnd(arg); - } - } - }; - - Emitter.prototype.emitRestParameterInitializer = function (parameters) { - if (parameters.lastParameterIsRest()) { - var n = parameters.length; - var lastArg = parameters.astAt(n - 1); - var id = parameters.identifierAt(n - 1); - this.emitIndent(); - this.recordSourceMappingStart(lastArg); - this.writeToOutput("var "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.writeLineToOutput(" = [];"); - this.recordSourceMappingEnd(lastArg); - this.emitIndent(); - this.writeToOutput("for ("); - this.writeToOutputWithSourceMapRecord("var _i = 0;", lastArg); - this.writeToOutput(" "); - this.writeToOutputWithSourceMapRecord("_i < (arguments.length - " + (n - 1) + ")", lastArg); - this.writeToOutput("; "); - this.writeToOutputWithSourceMapRecord("_i++", lastArg); - this.writeLineToOutput(") {"); - this.indenter.increaseIndent(); - this.emitIndent(); - - this.writeToOutputWithSourceMapRecord(id.text() + "[_i] = arguments[_i + " + (n - 1) + "];", lastArg); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("}"); - } - }; - - Emitter.prototype.getImportDecls = function (fileName) { - var topLevelDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - var result = []; - - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - var queue = dynamicModuleDecl.getChildDecls(); - - for (var i = 0, n = queue.length; i < n; i++) { - var decl = queue[i]; - - if (decl.kind & 128 /* TypeAlias */) { - var importStatementAST = this.semanticInfoChain.getASTForDecl(decl); - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var symbol = decl.getSymbol(); - var typeSymbol = symbol && symbol.type; - if (typeSymbol && typeSymbol !== this.semanticInfoChain.anyTypeSymbol && !typeSymbol.isError()) { - result.push(decl); - } - } - } - } - - return result; - }; - - Emitter.prototype.getModuleImportAndDependencyList = function (sourceUnit) { - var importList = ""; - var dependencyList = ""; - - var importDecls = this.getImportDecls(this.document.fileName); - - if (importDecls.length) { - for (var i = 0; i < importDecls.length; i++) { - var importStatementDecl = importDecls[i]; - var importStatementSymbol = importStatementDecl.getSymbol(); - var importStatementAST = this.semanticInfoChain.getASTForDecl(importStatementDecl); - - if (importStatementSymbol.isUsedAsValue()) { - if (i <= importDecls.length - 1) { - dependencyList += ", "; - importList += ", "; - } - - importList += importStatementDecl.name; - dependencyList += importStatementAST.moduleReference.stringLiteral.text(); - } - } - } - - var amdDependencies = this.document.amdDependencies(); - for (var i = 0; i < amdDependencies.length; i++) { - dependencyList += ", \"" + amdDependencies[i] + "\""; - } - - return { - importList: importList, - dependencyList: dependencyList - }; - }; - - Emitter.prototype.shouldCaptureThis = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - var scriptDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - return TypeScript.hasFlag(scriptDecl.flags, 262144 /* MustCaptureThis */); - } - - var decl = this.semanticInfoChain.getDeclForAST(ast); - if (decl) { - return TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */); - } - - return false; - }; - - Emitter.prototype.emitEnum = function (moduleDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - this.moduleName = moduleDecl.identifier.text(); - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleDecl.identifier); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleDecl.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleDecl.identifier); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(this.moduleName); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - this.emitSeparatedList(moduleDecl.enumElements); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.getModuleDeclToVerifyChildNameCollision = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - if (TypeScript.ArrayUtilities.contains(this.declStack, moduleDecl)) { - return moduleDecl; - } else if (changeNameIfAnyDeclarationInContext) { - var symbol = moduleDecl.getSymbol(); - if (symbol) { - var otherDecls = symbol.getDeclarations(); - for (var i = 0; i < otherDecls.length; i++) { - if (TypeScript.ArrayUtilities.contains(this.declStack, otherDecls[i])) { - return otherDecls[i]; - } - } - } - } - - return null; - }; - - Emitter.prototype.hasChildNameCollision = function (moduleName, parentDecl) { - var _this = this; - var childDecls = parentDecl.getChildDecls(); - return TypeScript.ArrayUtilities.any(childDecls, function (childDecl) { - var childAST = _this.semanticInfoChain.getASTForDecl(childDecl); - - if (childDecl.kind != 67108864 /* EnumMember */ && _this.shouldEmit(childAST)) { - if (childDecl.name === moduleName) { - if (parentDecl.kind != 8 /* Class */) { - return true; - } - - if (!(childDecl.kind == 65536 /* Method */ || childDecl.kind == 4096 /* Property */ || childDecl.kind == 524288 /* SetAccessor */ || childDecl.kind == 262144 /* GetAccessor */)) { - return true; - } - } - - if (_this.hasChildNameCollision(moduleName, childDecl)) { - return true; - } - } - return false; - }); - }; - - Emitter.prototype.getModuleName = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - var moduleName = moduleDecl.name; - var moduleDisplayName = moduleDecl.getDisplayName(); - - moduleDecl = this.getModuleDeclToVerifyChildNameCollision(moduleDecl, changeNameIfAnyDeclarationInContext); - if (moduleDecl && moduleDecl.kind != 64 /* Enum */) { - while (this.hasChildNameCollision(moduleName, moduleDecl)) { - moduleName = "_" + moduleName; - moduleDisplayName = "_" + moduleDisplayName; - } - } - - return moduleDisplayName; - }; - - Emitter.prototype.emitModuleDeclarationWorker = function (moduleDecl) { - if (moduleDecl.stringLiteral) { - this.emitSingleModuleDeclaration(moduleDecl, moduleDecl.stringLiteral); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[0]); - } - }; - - Emitter.prototype.emitSingleModuleDeclaration = function (moduleDecl, moduleName) { - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDecl, moduleName); - - if (isLastName) { - this.emitComments(moduleDecl, true); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleName); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - - if (moduleDecl.stringLiteral) { - this.moduleName = moduleDecl.stringLiteral.valueText(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - } else { - this.moduleName = moduleName.text(); - } - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleName); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleName); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - - this.moduleName = this.getModuleName(pullDecl); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleName); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(moduleName.text()); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - if (moduleName === moduleDecl.stringLiteral) { - this.emitList(moduleDecl.moduleElements); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - var nameIndex = moduleNames.indexOf(moduleName); - TypeScript.Debug.assert(nameIndex >= 0); - - if (isLastName) { - this.emitList(moduleDecl.moduleElements); - } else { - this.emitIndent(); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[nameIndex + 1]); - this.writeLineToOutput(""); - } - } - - this.moduleName = moduleName.text(); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - this.recordSourceMappingStart(moduleDecl.endingToken); - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - - if (isLastName) { - this.emitComments(moduleDecl, false); - } - }; - - Emitter.prototype.emitEnumElement = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - TypeScript.Debug.assert(pullDecl && pullDecl.kind === 67108864 /* EnumMember */); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - var name = varDecl.propertyName.text(); - var quoted = TypeScript.isQuoted(name); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.writeToOutput(']'); - - if (varDecl.equalsValueClause) { - this.emit(varDecl.equalsValueClause); - } else if (pullDecl.constantValue !== null) { - this.writeToOutput(' = '); - this.writeToOutput(pullDecl.constantValue.toString()); - } else { - this.writeToOutput(' = null'); - } - - this.writeToOutput('] = '); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - this.writeToOutput(';'); - }; - - Emitter.prototype.emitElementAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("["); - this.emit(expression.argumentExpression); - this.writeToOutput("]"); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimpleArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitParenthesizedArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitAnyArrowFunctionExpression = function (arrowFunction, funcName, parameters, block, expression) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = true; - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(arrowFunction); - - var pullDecl = this.semanticInfoChain.getDeclForAST(arrowFunction); - this.pushDecl(pullDecl); - - this.emitComments(arrowFunction, true); - - this.recordSourceMappingStart(arrowFunction); - this.writeToOutput("function "); - this.writeToOutput("("); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, arrowFunction, parameters, block, expression); - - this.recordSourceMappingEnd(arrowFunction); - - this.recordSourceMappingEnd(arrowFunction); - - this.emitComments(arrowFunction, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConstructor = function (funcDecl) { - if (!funcDecl.block) { - return; - } - var temp = this.setContainer(4 /* Constructor */); - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - this.writeToOutput(this.thisClassNode.identifier.text()); - this.writeToOutput("("); - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart("constructor"); - this.indenter.increaseIndent(); - - this.emitDefaultValueAssignments(parameters); - this.emitRestParameterInitializer(parameters); - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - this.emitConstructorStatements(funcDecl); - this.emitCommentsArray(funcDecl.block.closeBraceLeadingComments, false); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", funcDecl.block.closeBraceToken); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - }; - - Emitter.prototype.emitGetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("get "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList), accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitSetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("set "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, parameters, accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitFunctionExpression = function (funcDecl) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier ? funcDecl.identifier.text() : null; - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - this.writeToOutput(funcDecl.identifier.text()); - this.recordSourceMappingEnd(funcDecl.identifier); - } - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitFunction = function (funcDecl) { - if (funcDecl.block === null) { - return; - } - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier.text(); - - this.recordSourceMappingStart(funcDecl); - - var printName = funcDecl.identifier !== null; - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (printName) { - var id = funcDecl.identifier.text(); - if (id) { - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - } - this.writeToOutput(id); - if (funcDecl.identifier) { - this.recordSourceMappingEnd(funcDecl.identifier); - } - } - } - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.identifier.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - - if (funcDecl.block) { - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - if ((this.emitState.container === 1 /* Module */ || this.emitState.container === 2 /* DynamicModule */) && pullFunctionDecl && TypeScript.hasFlag(pullFunctionDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = this.emitState.container === 1 /* Module */ ? this.moduleName : "exports"; - this.recordSourceMappingStart(funcDecl); - this.writeToOutput(modName + "." + funcName + " = " + funcName + ";"); - this.recordSourceMappingEnd(funcDecl); - } - } - }; - - Emitter.prototype.emitAmbientVarDecl = function (varDecl) { - this.recordSourceMappingStart(this.currentVariableDeclaration); - if (varDecl.equalsValueClause) { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - this.emitJavascript(varDecl.equalsValueClause, false); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - }; - - Emitter.prototype.emitVarDeclVar = function () { - if (this.currentVariableDeclaration) { - this.writeToOutput("var "); - } - }; - - Emitter.prototype.emitVariableDeclaration = function (declaration) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - - this.emitComments(declaration, true); - - var pullVarDecl = this.semanticInfoChain.getDeclForAST(varDecl); - var isAmbientWithoutInit = pullVarDecl && TypeScript.hasFlag(pullVarDecl.flags, 8 /* Ambient */) && varDecl.equalsValueClause === null; - if (!isAmbientWithoutInit) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.currentVariableDeclaration = declaration; - - for (var i = 0, n = declaration.declarators.nonSeparatorCount(); i < n; i++) { - var declarator = declaration.declarators.nonSeparatorAt(i); - - if (i > 0) { - this.writeToOutput(", "); - } - - this.emit(declarator); - } - this.currentVariableDeclaration = prevVariableDeclaration; - - this.recordSourceMappingEnd(declaration); - } - - this.emitComments(declaration, false); - }; - - Emitter.prototype.emitMemberVariableDeclaration = function (varDecl) { - TypeScript.Debug.assert(!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause); - - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - var quotedOrNumber = TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */; - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - - if (quotedOrNumber) { - this.writeToOutput("this["); - } else { - this.writeToOutput("this."); - } - - this.writeToOutputWithSourceMapRecord(varDecl.variableDeclarator.propertyName.text(), varDecl.variableDeclarator.propertyName); - - if (quotedOrNumber) { - this.writeToOutput("]"); - } - - if (varDecl.variableDeclarator.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.variableDeclarator.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - if (this.emitState.container !== 6 /* Args */) { - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitVariableDeclarator = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - if (pullDecl && (pullDecl.flags & 8 /* Ambient */) === 8 /* Ambient */) { - this.emitAmbientVarDecl(varDecl); - } else { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(this.currentVariableDeclaration); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.propertyName.text(); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - var parentIsModule = parentDecl && (parentDecl.flags & 102400 /* SomeInitializedModule */); - - if (parentIsModule) { - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.emitVarDeclVar(); - } else { - if (this.emitState.container === 2 /* DynamicModule */) { - this.writeToOutput("exports."); - } else { - this.writeToOutput(this.moduleName + "."); - } - } - } else { - this.emitVarDeclVar(); - } - - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - - if (varDecl.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - this.currentVariableDeclaration = undefined; - this.popDecl(pullDecl); - }; - - Emitter.prototype.symbolIsUsedInItsEnclosingContainer = function (symbol, dynamic) { - if (typeof dynamic === "undefined") { dynamic = false; } - var symDecls = symbol.getDeclarations(); - - if (symDecls.length) { - var enclosingDecl = this.getEnclosingDecl(); - if (enclosingDecl) { - var parentDecl = symDecls[0].getParentDecl(); - if (parentDecl) { - var symbolDeclarationEnclosingContainer = parentDecl; - var enclosingContainer = enclosingDecl; - - while (symbolDeclarationEnclosingContainer) { - if (symbolDeclarationEnclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - symbolDeclarationEnclosingContainer = symbolDeclarationEnclosingContainer.getParentDecl(); - } - - if (symbolDeclarationEnclosingContainer) { - while (enclosingContainer) { - if (enclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - - enclosingContainer = enclosingContainer.getParentDecl(); - } - } - - if (symbolDeclarationEnclosingContainer && enclosingContainer) { - var same = symbolDeclarationEnclosingContainer === enclosingContainer; - - if (!same && symbol.anyDeclHasFlag(32768 /* InitializedModule */)) { - same = symbolDeclarationEnclosingContainer === enclosingContainer.getParentDecl(); - } - - return same; - } - } - } - } - - return false; - }; - - Emitter.prototype.shouldQualifySymbolNameWithParentName = function (symbol) { - var enclosingContextDeclPath = this.declStack; - var symbolDeclarations = symbol.getDeclarations(); - for (var i = 0; i < symbolDeclarations.length; i++) { - var currentDecl = symbolDeclarations[i]; - var declParent = currentDecl.getParentDecl(); - - if (currentDecl.kind === 67108864 /* EnumMember */) { - return true; - } - - if (!TypeScript.hasFlag(currentDecl.flags, 1 /* Exported */)) { - return false; - } - - if (currentDecl.kind === 512 /* Variable */ && !TypeScript.hasFlag(currentDecl.flags, 118784 /* ImplicitVariable */)) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(this.declStack, declParent)) { - return false; - } - } - - return true; - }; - - Emitter.prototype.getSymbolForEmit = function (ast) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(ast); - var pullSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(ast); - if (pullSymbol && pullSymbolAlias) { - var symbolToCompare = TypeScript.isTypesOnlyLocation(ast) ? pullSymbolAlias.getExportAssignedTypeSymbol() : pullSymbolAlias.getExportAssignedValueSymbol(); - - if (pullSymbol === symbolToCompare) { - pullSymbol = pullSymbolAlias; - pullSymbolAlias = null; - } - } - return { symbol: pullSymbol, aliasSymbol: pullSymbolAlias }; - }; - - Emitter.prototype.emitName = function (name, addThis) { - this.emitComments(name, true); - this.recordSourceMappingStart(name); - if (name.text().length > 0) { - var symbolForEmit = this.getSymbolForEmit(name); - var pullSymbol = symbolForEmit.symbol; - if (!pullSymbol) { - pullSymbol = this.semanticInfoChain.anyTypeSymbol; - } - var pullSymbolAlias = symbolForEmit.aliasSymbol; - var pullSymbolKind = pullSymbol.kind; - var isLocalAlias = pullSymbolAlias && (pullSymbolAlias.getDeclarations()[0].getParentDecl() === this.getEnclosingDecl()); - if (addThis && (this.emitState.container !== 6 /* Args */) && pullSymbol) { - var pullSymbolContainer = pullSymbol.getContainer(); - - if (pullSymbolContainer) { - var pullSymbolContainerKind = pullSymbolContainer.kind; - - if (TypeScript.PullHelpers.symbolIsModule(pullSymbolContainer) || pullSymbolContainerKind === 64 /* Enum */ || pullSymbolContainer.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) { - var needToEmitParentName = this.shouldQualifySymbolNameWithParentName(pullSymbol); - if (needToEmitParentName) { - var parentDecl = pullSymbol.getDeclarations()[0].getParentDecl(); - TypeScript.Debug.assert(parentDecl && !parentDecl.isRootDecl()); - this.writeToOutput(this.getModuleName(parentDecl, true) + "."); - } - } else if (pullSymbolContainerKind === 32 /* DynamicModule */ || pullSymbolContainer.anyDeclHasFlag(65536 /* InitializedDynamicModule */)) { - if (pullSymbolKind === 4096 /* Property */) { - this.writeToOutput("exports."); - } else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && !isLocalAlias && !pullSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */) && pullSymbol.kind !== 32768 /* ConstructorMethod */ && pullSymbol.kind !== 8 /* Class */ && pullSymbol.kind !== 64 /* Enum */) { - this.writeToOutput("exports."); - } - } - } - } - - this.writeToOutput(name.text()); - } - - this.recordSourceMappingEnd(name); - this.emitComments(name, false); - }; - - Emitter.prototype.recordSourceMappingNameStart = function (name) { - if (this.sourceMapper) { - var nameIndex = -1; - if (name) { - if (this.sourceMapper.currentNameIndex.length > 0) { - var parentNameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - if (parentNameIndex !== -1) { - name = this.sourceMapper.names[parentNameIndex] + "." + name; - } - } - - var nameIndex = this.sourceMapper.names.length - 1; - for (nameIndex; nameIndex >= 0; nameIndex--) { - if (this.sourceMapper.names[nameIndex] === name) { - break; - } - } - - if (nameIndex === -1) { - nameIndex = this.sourceMapper.names.length; - this.sourceMapper.names.push(name); - } - } - this.sourceMapper.currentNameIndex.push(nameIndex); - } - }; - - Emitter.prototype.recordSourceMappingNameEnd = function () { - if (this.sourceMapper) { - this.sourceMapper.currentNameIndex.pop(); - } - }; - - Emitter.prototype.recordSourceMappingStart = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - var lineCol = { line: -1, character: -1 }; - var sourceMapping = new TypeScript.SourceMapping(); - sourceMapping.start.emittedColumn = this.emitState.column; - sourceMapping.start.emittedLine = this.emitState.line; - - var lineMap = this.document.lineMap(); - lineMap.fillLineAndCharacterFromPosition(ast.start(), lineCol); - sourceMapping.start.sourceColumn = lineCol.character; - sourceMapping.start.sourceLine = lineCol.line + 1; - lineMap.fillLineAndCharacterFromPosition(ast.end(), lineCol); - sourceMapping.end.sourceColumn = lineCol.character; - sourceMapping.end.sourceLine = lineCol.line + 1; - - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceLine)); - - if (this.sourceMapper.currentNameIndex.length > 0) { - sourceMapping.nameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - } - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - siblings.push(sourceMapping); - this.sourceMapper.currentMappings.push(sourceMapping.childMappings); - this.sourceMapper.increaseMappingLevel(ast); - } - }; - - Emitter.prototype.recordSourceMappingEnd = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - this.sourceMapper.currentMappings.pop(); - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - var sourceMapping = siblings[siblings.length - 1]; - - sourceMapping.end.emittedColumn = this.emitState.column; - sourceMapping.end.emittedLine = this.emitState.line; - - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedLine)); - - this.sourceMapper.decreaseMappingLevel(ast); - } - }; - - Emitter.prototype.getOutputFiles = function () { - var result = []; - if (this.sourceMapper !== null) { - this.sourceMapper.emitSourceMapping(); - result.push(this.sourceMapper.getOutputFile()); - } - - result.push(this.outfile.getOutputFile()); - return result; - }; - - Emitter.prototype.emitParameterPropertyAndMemberVariableAssignments = function () { - var constructorDecl = getLastConstructor(this.thisClassNode); - - if (constructorDecl) { - for (var i = 0, n = constructorDecl.callSignature.parameterList.parameters.nonSeparatorCount(); i < n; i++) { - var parameter = constructorDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - this.emitIndent(); - this.recordSourceMappingStart(parameter); - this.writeToOutputWithSourceMapRecord("this." + parameter.identifier.text(), parameter.identifier); - this.writeToOutput(" = "); - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(parameter); - } - } - } - - for (var i = 0, n = this.thisClassNode.classElements.childCount(); i < n; i++) { - if (this.thisClassNode.classElements.childAt(i).kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = this.thisClassNode.classElements.childAt(i); - if (!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitIndent(); - this.emitMemberVariableDeclaration(varDecl); - this.writeLineToOutput(""); - } - } - } - }; - - Emitter.prototype.isOnSameLine = function (pos1, pos2) { - var lineMap = this.document.lineMap(); - return lineMap.getLineNumberFromPosition(pos1) === lineMap.getLineNumberFromPosition(pos2); - }; - - Emitter.prototype.emitCommaSeparatedList = function (parent, list, buffer, preserveNewLines) { - if (list === null || list.nonSeparatorCount() === 0) { - return; - } - - var startLine = preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(0).end()); - - if (preserveNewLines) { - this.indenter.increaseIndent(); - } - - if (startLine) { - this.writeLineToOutput(""); - } else { - this.writeToOutput(buffer); - } - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - var emitNode = list.nonSeparatorAt(i); - - this.emitJavascript(emitNode, startLine); - - if (i < (n - 1)) { - startLine = preserveNewLines && !this.isOnSameLine(emitNode.end(), list.nonSeparatorAt(i + 1).start()); - if (startLine) { - this.writeLineToOutput(","); - } else { - this.writeToOutput(", "); - } - } - } - - if (preserveNewLines) { - this.indenter.decreaseIndent(); - } - - if (preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(list.nonSeparatorCount() - 1).end())) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(buffer); - } - }; - - Emitter.prototype.emitList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.childCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitSeparatedList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.nonSeparatorCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.nonSeparatorAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.isDirectivePrologueElement = function (node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var exprStatement = node; - return exprStatement.expression.kind() === 14 /* StringLiteral */; - } - - return false; - }; - - Emitter.prototype.emitSpaceBetweenConstructs = function (node1, node2) { - if (node1 === null || node2 === null) { - return; - } - - if (node1.start() === -1 || node1.end() === -1 || node2.start() === -1 || node2.end() === -1) { - return; - } - - var lineMap = this.document.lineMap(); - var node1EndLine = lineMap.getLineNumberFromPosition(node1.end()); - var node2StartLine = lineMap.getLineNumberFromPosition(node2.start()); - - if ((node2StartLine - node1EndLine) > 1) { - this.writeLineToOutput("", true); - } - }; - - Emitter.prototype.getDetachedComments = function (element) { - var preComments = element.preComments(); - if (preComments) { - var lineMap = this.document.lineMap(); - - var detachedComments = []; - var lastComment = null; - - for (var i = 0, n = preComments.length; i < n; i++) { - var comment = preComments[i]; - - if (lastComment) { - var lastCommentLine = lineMap.getLineNumberFromPosition(lastComment.end()); - var commentLine = lineMap.getLineNumberFromPosition(comment.start()); - - if (commentLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - detachedComments.push(comment); - lastComment = comment; - } - - var lastCommentLine = lineMap.getLineNumberFromPosition(TypeScript.ArrayUtilities.last(detachedComments).end()); - var astLine = lineMap.getLineNumberFromPosition(element.start()); - if (astLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - return []; - }; - - Emitter.prototype.emitPossibleCopyrightHeaders = function (script) { - this.emitDetachedComments(script.moduleElements); - }; - - Emitter.prototype.emitDetachedComments = function (list) { - if (list.childCount() > 0) { - var firstElement = list.childAt(0); - - this.detachedCommentsElement = firstElement; - this.emitCommentsArray(this.getDetachedComments(this.detachedCommentsElement), false); - } - }; - - Emitter.prototype.emitScriptElements = function (sourceUnit) { - var list = sourceUnit.moduleElements; - - this.emitPossibleCopyrightHeaders(sourceUnit); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var node = list.childAt(i); - - if (!this.isDirectivePrologueElement(node)) { - break; - } - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - } - - this.emitPrologue(sourceUnit); - - var isExternalModule = this.document.isExternalModule(); - var isNonElidedExternalModule = isExternalModule && !TypeScript.ASTHelpers.scriptIsElided(sourceUnit); - if (isNonElidedExternalModule) { - this.recordSourceMappingStart(sourceUnit); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - var dependencyList = "[\"require\", \"exports\""; - var importList = "require, exports"; - - var importAndDependencyList = this.getModuleImportAndDependencyList(sourceUnit); - importList += importAndDependencyList.importList; - dependencyList += importAndDependencyList.dependencyList + "]"; - - this.writeLineToOutput("define(" + dependencyList + "," + " function(" + importList + ") {"); - } - } - - if (isExternalModule) { - var temp = this.setContainer(2 /* DynamicModule */); - - var svModuleName = this.moduleName; - this.moduleName = sourceUnit.fileName(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - - this.setExportAssignment(null); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.increaseIndent(); - } - - var externalModule = this.semanticInfoChain.getDeclForAST(this.document.sourceUnit()); - - if (TypeScript.hasFlag(externalModule.flags, 262144 /* MustCaptureThis */)) { - this.writeCaptureThisStatement(sourceUnit); - } - - this.pushDecl(externalModule); - } - - this.emitList(list, true, i, n); - - if (isExternalModule) { - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.decreaseIndent(); - } - - if (isNonElidedExternalModule) { - var exportAssignment = this.getExportAssignment(); - var exportAssignmentIdentifierText = exportAssignment ? exportAssignment.identifier.text() : null; - var exportAssignmentValueSymbol = externalModule.getSymbol().getExportAssignedValueSymbol(); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.indenter.increaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + exportAssignmentIdentifierText, exportAssignment); - this.writeLineToOutput(";"); - this.indenter.decreaseIndent(); - } - this.writeToOutput("});"); - } else if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("module.exports = " + exportAssignmentIdentifierText, exportAssignment); - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(sourceUnit); - this.writeLineToOutput(""); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - this.popDecl(externalModule); - } - }; - - Emitter.prototype.emitConstructorStatements = function (funcDecl) { - var list = funcDecl.block.statements; - - if (list === null) { - return; - } - - this.emitComments(list, true); - - var emitPropertyAssignmentsAfterSuperCall = TypeScript.ASTHelpers.getExtendsHeritageClause(this.thisClassNode.heritageClauses) !== null; - var propertyAssignmentIndex = emitPropertyAssignmentsAfterSuperCall ? 1 : 0; - var lastEmittedNode = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - - lastEmittedNode = node; - } - } - - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitJavascript = function (ast, startLine) { - if (ast === null) { - return; - } - - if (startLine && this.indenter.indentAmt > 0) { - this.emitIndent(); - } - - this.emit(ast); - }; - - Emitter.prototype.emitAccessorMemberDeclaration = function (funcDecl, name, className, isProto) { - if (funcDecl.kind() !== 139 /* GetAccessor */) { - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - if (accessorSymbol.getGetter()) { - return; - } - } - - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - - this.writeToOutput("Object.defineProperty(" + className); - if (isProto) { - this.writeToOutput(".prototype, "); - } else { - this.writeToOutput(", "); - } - - var functionName = name.text(); - if (TypeScript.isQuoted(functionName)) { - this.writeToOutput(functionName); - } else { - this.writeToOutput('"' + functionName + '"'); - } - - this.writeLineToOutput(", {"); - - this.indenter.increaseIndent(); - - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - if (accessors.getter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.getter); - this.emitComments(accessors.getter, true); - this.writeToOutput("get: "); - this.emitAccessorBody(accessors.getter, accessors.getter.parameterList, accessors.getter.block); - this.writeLineToOutput(","); - } - - if (accessors.setter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.setter); - this.emitComments(accessors.setter, true); - this.writeToOutput("set: "); - this.emitAccessorBody(accessors.setter, accessors.setter.parameterList, accessors.setter.block); - this.writeLineToOutput(","); - } - - this.emitIndent(); - this.writeLineToOutput("enumerable: true,"); - this.emitIndent(); - this.writeLineToOutput("configurable: true"); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("});"); - this.recordSourceMappingEnd(funcDecl); - }; - - Emitter.prototype.emitAccessorBody = function (funcDecl, parameterList, block) { - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, funcDecl, parameters, block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClass = function (classDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.pushDecl(pullDecl); - - var svClassNode = this.thisClassNode; - this.thisClassNode = classDecl; - var className = classDecl.identifier.text(); - this.emitComments(classDecl, true); - var temp = this.setContainer(3 /* Class */); - - this.recordSourceMappingStart(classDecl); - this.writeToOutput("var " + className); - - var hasBaseClass = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses) !== null; - var baseTypeReference = null; - var varDecl = null; - - if (hasBaseClass) { - this.writeLineToOutput(" = (function (_super) {"); - } else { - this.writeLineToOutput(" = (function () {"); - } - - this.recordSourceMappingNameStart(className); - this.indenter.increaseIndent(); - - if (hasBaseClass) { - baseTypeReference = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses).typeNames.nonSeparatorAt(0); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("__extends(" + className + ", _super)", baseTypeReference); - this.writeLineToOutput(";"); - } - - this.emitIndent(); - - var constrDecl = getLastConstructor(classDecl); - - if (constrDecl) { - this.emit(constrDecl); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingStart(classDecl); - - this.indenter.increaseIndent(); - this.writeLineToOutput("function " + classDecl.identifier.text() + "() {"); - this.recordSourceMappingNameStart("constructor"); - if (hasBaseClass) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("_super.apply(this, arguments)", baseTypeReference); - this.writeLineToOutput(";"); - } - - if (this.shouldCaptureThis(classDecl)) { - this.writeCaptureThisStatement(classDecl); - } - - this.emitParameterPropertyAndMemberVariableAssignments(); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.writeLineToOutput(""); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(classDecl); - } - - this.emitClassMembers(classDecl); - - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + className + ";", classDecl.closeBraceToken); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingStart(classDecl); - this.writeToOutput(")("); - if (hasBaseClass) { - this.emitJavascript(baseTypeReference, false); - } - this.writeToOutput(");"); - this.recordSourceMappingEnd(classDecl); - - if ((temp === 1 /* Module */ || temp === 2 /* DynamicModule */) && TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = temp === 1 /* Module */ ? this.moduleName : "exports"; - this.writeToOutputWithSourceMapRecord(modName + "." + className + " = " + className + ";", classDecl); - } - - this.recordSourceMappingEnd(classDecl); - this.emitComments(classDecl, false); - this.setContainer(temp); - this.thisClassNode = svClassNode; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClassMembers = function (classDecl) { - var lastEmittedMember = null; - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 139 /* GetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var getter = memberDecl; - this.emitAccessorMemberDeclaration(getter, getter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(getter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 140 /* SetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var setter = memberDecl; - this.emitAccessorMemberDeclaration(setter, setter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(setter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 135 /* MemberFunctionDeclaration */) { - var memberFunction = memberDecl; - - if (memberFunction.block) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - - this.emitClassMemberFunctionDeclaration(classDecl, memberFunction); - lastEmittedMember = memberDecl; - } - } - } - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = memberDecl; - - if (TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitSpaceBetweenConstructs(lastEmittedMember, varDecl); - - this.emitIndent(); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - if (TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput(classDecl.identifier.text() + "[" + varDeclName + "]"); - } else { - this.writeToOutput(classDecl.identifier.text() + "." + varDeclName); - } - - this.emit(varDecl.variableDeclarator.equalsValueClause); - - this.recordSourceMappingEnd(varDecl); - this.writeLineToOutput(";"); - - lastEmittedMember = varDecl; - } - } - } - }; - - Emitter.prototype.emitClassMemberFunctionDeclaration = function (classDecl, funcDecl) { - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - this.emitComments(funcDecl, true); - var functionName = funcDecl.propertyName.text(); - - this.writeToOutput(classDecl.identifier.text()); - - if (!TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - this.writeToOutput(".prototype"); - } - - if (TypeScript.isQuoted(functionName) || funcDecl.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput("[" + functionName + "] = "); - } else { - this.writeToOutput("." + functionName + " = "); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.propertyName.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - - this.writeLineToOutput(";"); - }; - - Emitter.prototype.requiresExtendsBlock = function (moduleElements) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - - if (moduleElement.kind() === 130 /* ModuleDeclaration */) { - var moduleAST = moduleElement; - - if (!TypeScript.hasModifier(moduleAST.modifiers, 8 /* Ambient */) && this.requiresExtendsBlock(moduleAST.moduleElements)) { - return true; - } - } else if (moduleElement.kind() === 131 /* ClassDeclaration */) { - var classDeclaration = moduleElement; - - if (!TypeScript.hasModifier(classDeclaration.modifiers, 8 /* Ambient */) && TypeScript.ASTHelpers.getExtendsHeritageClause(classDeclaration.heritageClauses) !== null) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitPrologue = function (sourceUnit) { - if (!this.extendsPrologueEmitted) { - if (this.requiresExtendsBlock(sourceUnit.moduleElements)) { - this.extendsPrologueEmitted = true; - this.writeLineToOutput("var __extends = this.__extends || function (d, b) {"); - this.writeLineToOutput(" for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); - this.writeLineToOutput(" function __() { this.constructor = d; }"); - this.writeLineToOutput(" __.prototype = b.prototype;"); - this.writeLineToOutput(" d.prototype = new __();"); - this.writeLineToOutput("};"); - } - } - - if (!this.globalThisCapturePrologueEmitted) { - if (this.shouldCaptureThis(sourceUnit)) { - this.globalThisCapturePrologueEmitted = true; - this.writeLineToOutput(this.captureThisStmtString); - } - } - }; - - Emitter.prototype.emitThis = function () { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutput("_this"); - } else { - this.writeToOutput("this"); - } - }; - - Emitter.prototype.emitBlockOrStatement = function (node) { - if (node.kind() === 146 /* Block */) { - this.emit(node); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emitJavascript(node, true); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitLiteralExpression = function (expression) { - switch (expression.kind()) { - case 32 /* NullKeyword */: - this.writeToOutputWithSourceMapRecord("null", expression); - break; - case 24 /* FalseKeyword */: - this.writeToOutputWithSourceMapRecord("false", expression); - break; - case 37 /* TrueKeyword */: - this.writeToOutputWithSourceMapRecord("true", expression); - break; - default: - throw TypeScript.Errors.abstract(); - } - }; - - Emitter.prototype.emitThisExpression = function (expression) { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutputWithSourceMapRecord("_this", expression); - } else { - this.writeToOutputWithSourceMapRecord("this", expression); - } - }; - - Emitter.prototype.emitSuperExpression = function (expression) { - this.writeToOutputWithSourceMapRecord("_super.prototype", expression); - }; - - Emitter.prototype.emitParenthesizedExpression = function (parenthesizedExpression) { - var omitParentheses = false; - - if (parenthesizedExpression.expression.kind() === 220 /* CastExpression */ && parenthesizedExpression.openParenTrailingComments === null) { - var castedExpression = parenthesizedExpression.expression.expression; - - while (castedExpression.kind() == 220 /* CastExpression */) { - castedExpression = castedExpression.expression; - } - - switch (castedExpression.kind()) { - case 217 /* ParenthesizedExpression */: - case 11 /* IdentifierName */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 214 /* ArrayLiteralExpression */: - case 215 /* ObjectLiteralExpression */: - case 212 /* MemberAccessExpression */: - case 221 /* ElementAccessExpression */: - omitParentheses = true; - break; - - case 213 /* InvocationExpression */: - if (parenthesizedExpression.parent.kind() !== 216 /* ObjectCreationExpression */) { - omitParentheses = true; - } - - break; - } - } - - if (omitParentheses) { - this.emit(parenthesizedExpression.expression); - } else { - this.recordSourceMappingStart(parenthesizedExpression); - this.writeToOutput("("); - this.emitCommentsArray(parenthesizedExpression.openParenTrailingComments, false); - this.emit(parenthesizedExpression.expression); - this.writeToOutput(")"); - this.recordSourceMappingEnd(parenthesizedExpression); - } - }; - - Emitter.prototype.emitCastExpression = function (expression) { - this.emit(expression.expression); - }; - - Emitter.prototype.emitPrefixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 167 /* LogicalNotExpression */: - this.writeToOutput("!"); - this.emit(expression.operand); - break; - case 166 /* BitwiseNotExpression */: - this.writeToOutput("~"); - this.emit(expression.operand); - break; - case 165 /* NegateExpression */: - this.writeToOutput("-"); - if (expression.operand.kind() === 165 /* NegateExpression */ || expression.operand.kind() === 169 /* PreDecrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 164 /* PlusExpression */: - this.writeToOutput("+"); - if (expression.operand.kind() === 164 /* PlusExpression */ || expression.operand.kind() === 168 /* PreIncrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 168 /* PreIncrementExpression */: - this.writeToOutput("++"); - this.emit(expression.operand); - break; - case 169 /* PreDecrementExpression */: - this.writeToOutput("--"); - this.emit(expression.operand); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitPostfixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 210 /* PostIncrementExpression */: - this.emit(expression.operand); - this.writeToOutput("++"); - break; - case 211 /* PostDecrementExpression */: - this.emit(expression.operand); - this.writeToOutput("--"); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitTypeOfExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("typeof "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDeleteExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("delete "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitVoidExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("void "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.canEmitDottedNameMemberAccessExpression = function (expression) { - var memberExpressionNodeType = expression.expression.kind(); - - if (memberExpressionNodeType === 11 /* IdentifierName */ || memberExpressionNodeType == 212 /* MemberAccessExpression */) { - var memberAccessSymbol = this.getSymbolForEmit(expression).symbol; - var memberAccessExpressionSymbol = this.getSymbolForEmit(expression.expression).symbol; - if (memberAccessSymbol && memberAccessExpressionSymbol && !this.semanticInfoChain.getAliasSymbolForAST(expression.expression) && (TypeScript.PullHelpers.symbolIsModule(memberAccessExpressionSymbol) || memberAccessExpressionSymbol.kind === 64 /* Enum */ || memberAccessExpressionSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */))) { - var memberAccessSymbolKind = memberAccessSymbol.kind; - if (memberAccessSymbolKind === 4096 /* Property */ || memberAccessSymbolKind === 67108864 /* EnumMember */ || (memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && memberAccessSymbolKind === 512 /* Variable */ && !memberAccessSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) || ((memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && !this.symbolIsUsedInItsEnclosingContainer(memberAccessSymbol)))) { - if (memberExpressionNodeType === 212 /* MemberAccessExpression */) { - return this.canEmitDottedNameMemberAccessExpression(expression.expression); - } - - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitDottedNameMemberAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - if (expression.expression.kind() === 212 /* MemberAccessExpression */) { - this.emitDottedNameMemberAccessExpressionRecurse(expression.expression); - } else { - this.emitName(expression.expression, true); - } - - this.writeToOutput("."); - this.emitName(expression.name, false); - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDottedNameMemberAccessExpressionRecurse = function (expression) { - this.emitComments(expression, true); - this.emitDottedNameMemberAccessExpression(expression); - this.emitComments(expression, false); - }; - - Emitter.prototype.emitMemberAccessExpression = function (expression) { - if (!this.tryEmitConstant(expression)) { - if (this.canEmitDottedNameMemberAccessExpression(expression)) { - this.emitDottedNameMemberAccessExpression(expression); - } else { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("."); - this.emitName(expression.name, false); - this.recordSourceMappingEnd(expression); - } - } - }; - - Emitter.prototype.emitQualifiedName = function (name) { - this.recordSourceMappingStart(name); - - this.emit(name.left); - this.writeToOutput("."); - this.emitName(name.right, false); - - this.recordSourceMappingEnd(name); - }; - - Emitter.prototype.emitBinaryExpression = function (expression) { - this.recordSourceMappingStart(expression); - switch (expression.kind()) { - case 173 /* CommaExpression */: - this.emit(expression.left); - this.writeToOutput(", "); - this.emit(expression.right); - break; - default: { - this.emit(expression.left); - var binOp = TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(expression.kind())); - if (binOp === "instanceof") { - this.writeToOutput(" instanceof "); - } else if (binOp === "in") { - this.writeToOutput(" in "); - } else { - this.writeToOutput(" " + binOp + " "); - } - this.emit(expression.right); - } - } - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimplePropertyAssignment = function (property) { - this.recordSourceMappingStart(property); - this.emit(property.propertyName); - this.writeToOutput(": "); - this.emit(property.expression); - this.recordSourceMappingEnd(property); - }; - - Emitter.prototype.emitFunctionPropertyAssignment = function (funcProp) { - this.recordSourceMappingStart(funcProp); - - this.emit(funcProp.propertyName); - this.writeToOutput(": "); - - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcProp); - - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - var funcName = funcProp.propertyName; - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcProp); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcProp); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcProp.propertyName.text(), funcProp, parameters, funcProp.block, null); - - this.recordSourceMappingEnd(funcProp); - - this.recordSourceMappingEnd(funcProp); - - this.emitComments(funcProp, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConditionalExpression = function (expression) { - this.emit(expression.condition); - this.writeToOutput(" ? "); - this.emit(expression.whenTrue); - this.writeToOutput(" : "); - this.emit(expression.whenFalse); - }; - - Emitter.prototype.emitThrowStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("throw "); - this.emit(statement.expression); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitExpressionStatement = function (statement) { - var isArrowExpression = statement.expression.kind() === 219 /* SimpleArrowFunctionExpression */ || statement.expression.kind() === 218 /* ParenthesizedArrowFunctionExpression */; - - this.recordSourceMappingStart(statement); - if (isArrowExpression) { - this.writeToOutput("("); - } - - this.emit(statement.expression); - - if (isArrowExpression) { - this.writeToOutput(")"); - } - - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitLabeledStatement = function (statement) { - this.writeToOutputWithSourceMapRecord(statement.identifier.text(), statement.identifier); - this.writeLineToOutput(":"); - this.emitJavascript(statement.statement, true); - }; - - Emitter.prototype.emitBlock = function (block) { - this.recordSourceMappingStart(block); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - if (block.statements) { - this.emitList(block.statements); - } - this.emitCommentsArray(block.closeBraceLeadingComments, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(block); - }; - - Emitter.prototype.emitBreakStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("break"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitContinueStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("continue"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitWhileStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("while ("); - this.emit(statement.condition); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitDoStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("do"); - this.emitBlockOrStatement(statement.statement); - this.writeToOutputWithSourceMapRecord(" while", statement.whileKeyword); - this.writeToOutput('('); - this.emit(statement.condition); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitIfStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("if ("); - this.emit(statement.condition); - this.writeToOutput(")"); - - this.emitBlockOrStatement(statement.statement); - - if (statement.elseClause) { - if (statement.statement.kind() !== 146 /* Block */) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(" "); - } - - this.emit(statement.elseClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitElseClause = function (elseClause) { - if (elseClause.statement.kind() === 147 /* IfStatement */) { - this.writeToOutput("else "); - this.emit(elseClause.statement); - } else { - this.writeToOutput("else"); - this.emitBlockOrStatement(elseClause.statement); - } - }; - - Emitter.prototype.emitReturnStatement = function (statement) { - this.recordSourceMappingStart(statement); - if (statement.expression) { - this.writeToOutput("return "); - this.emit(statement.expression); - } else { - this.writeToOutput("return"); - } - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitForInStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.left) { - this.emit(statement.left); - } else { - this.emit(statement.variableDeclaration); - } - this.writeToOutput(" in "); - this.emit(statement.expression); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitForStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.variableDeclaration) { - this.emit(statement.variableDeclaration); - } else if (statement.initializer) { - this.emit(statement.initializer); - } - - this.writeToOutput("; "); - this.emitJavascript(statement.condition, false); - this.writeToOutput(";"); - if (statement.incrementor) { - this.writeToOutput(" "); - this.emitJavascript(statement.incrementor, false); - } - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitWithStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("with ("); - if (statement.condition) { - this.emit(statement.condition); - } - - this.writeToOutput(")"); - var prevInWithBlock = this.inWithBlock; - this.inWithBlock = true; - this.emitBlockOrStatement(statement.statement); - this.inWithBlock = prevInWithBlock; - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitSwitchStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("switch ("); - this.emit(statement.expression); - this.recordSourceMappingStart(statement.closeParenToken); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement.closeParenToken); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - this.emitList(statement.switchClauses, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCaseSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("case "); - this.emit(clause.expression); - this.writeToOutput(":"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitSwitchClauseBody = function (body) { - if (body.childCount() === 1 && body.childAt(0).kind() === 146 /* Block */) { - this.emit(body.childAt(0)); - this.writeLineToOutput(""); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emit(body); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitDefaultSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("default:"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitTryStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("try "); - this.emit(statement.block); - this.emitJavascript(statement.catchClause, false); - - if (statement.finallyClause) { - this.emit(statement.finallyClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCatchClause = function (clause) { - this.writeToOutput(" "); - this.recordSourceMappingStart(clause); - this.writeToOutput("catch ("); - this.emit(clause.identifier); - this.writeToOutput(")"); - this.emit(clause.block); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitFinallyClause = function (clause) { - this.writeToOutput(" finally"); - this.emit(clause.block); - }; - - Emitter.prototype.emitDebuggerStatement = function (statement) { - this.writeToOutputWithSourceMapRecord("debugger", statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitNumericLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitRegularExpressionLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitStringLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitEqualsValueClause = function (clause) { - this.writeToOutput(" = "); - this.emit(clause.value); - }; - - Emitter.prototype.emitParameter = function (parameter) { - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter); - }; - - Emitter.prototype.emitConstructorDeclaration = function (declaration) { - if (declaration.block) { - this.emitConstructor(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitFunctionDeclaration = function (declaration) { - return declaration.preComments() !== null || (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null); - }; - - Emitter.prototype.emitFunctionDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null) { - this.emitFunction(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.emitSourceUnit = function (sourceUnit) { - if (!this.document.isDeclareFile()) { - var pullDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - this.pushDecl(pullDecl); - this.emitScriptElements(sourceUnit); - this.popDecl(pullDecl); - - this.emitCommentsArray(sourceUnit.endOfFileTokenLeadingComments, false); - } - }; - - Emitter.prototype.shouldEmitEnumDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.enumIsElided(declaration); - }; - - Emitter.prototype.emitEnumDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.enumIsElided(declaration)) { - this.emitComments(declaration, true); - this.emitEnum(declaration); - this.emitComments(declaration, false); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitModuleDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.moduleIsElided(declaration); - }; - - Emitter.prototype.emitModuleDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.moduleIsElided(declaration)) { - this.emitModuleDeclarationWorker(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitClassDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */); - }; - - Emitter.prototype.emitClassDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - this.emitClass(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitInterfaceDeclaration = function (declaration) { - return declaration.preComments() !== null; - }; - - Emitter.prototype.emitInterfaceDeclaration = function (declaration) { - this.emitComments(declaration, true, true); - }; - - Emitter.prototype.firstVariableDeclarator = function (statement) { - return statement.declaration.declarators.nonSeparatorAt(0); - }; - - Emitter.prototype.isNotAmbientOrHasInitializer = function (variableStatement) { - return !TypeScript.hasModifier(variableStatement.modifiers, 8 /* Ambient */) || this.firstVariableDeclarator(variableStatement).equalsValueClause !== null; - }; - - Emitter.prototype.shouldEmitVariableStatement = function (statement) { - return statement.preComments() !== null || this.isNotAmbientOrHasInitializer(statement); - }; - - Emitter.prototype.emitVariableStatement = function (statement) { - if (this.isNotAmbientOrHasInitializer(statement)) { - this.emitComments(statement, true); - this.emit(statement.declaration); - this.writeToOutput(";"); - this.emitComments(statement, false); - } else { - this.emitComments(statement, true, true); - } - }; - - Emitter.prototype.emitGenericType = function (type) { - this.emit(type.name); - }; - - Emitter.prototype.shouldEmit = function (ast) { - if (!ast) { - return false; - } - - switch (ast.kind()) { - case 133 /* ImportDeclaration */: - return this.shouldEmitImportDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.shouldEmitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.shouldEmitInterfaceDeclaration(ast); - case 129 /* FunctionDeclaration */: - return this.shouldEmitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.shouldEmitModuleDeclaration(ast); - case 148 /* VariableStatement */: - return this.shouldEmitVariableStatement(ast); - case 223 /* OmittedExpression */: - return false; - case 132 /* EnumDeclaration */: - return this.shouldEmitEnumDeclaration(ast); - } - - return true; - }; - - Emitter.prototype.emit = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 2 /* SeparatedList */: - return this.emitSeparatedList(ast); - case 1 /* List */: - return this.emitList(ast); - case 120 /* SourceUnit */: - return this.emitSourceUnit(ast); - case 133 /* ImportDeclaration */: - return this.emitImportDeclaration(ast); - case 134 /* ExportAssignment */: - return this.setExportAssignment(ast); - case 131 /* ClassDeclaration */: - return this.emitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitInterfaceDeclaration(ast); - case 11 /* IdentifierName */: - return this.emitName(ast, true); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast); - case 219 /* SimpleArrowFunctionExpression */: - return this.emitSimpleArrowFunctionExpression(ast); - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.emitParenthesizedArrowFunctionExpression(ast); - case 129 /* FunctionDeclaration */: - return this.emitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitModuleDeclaration(ast); - case 224 /* VariableDeclaration */: - return this.emitVariableDeclaration(ast); - case 126 /* GenericType */: - return this.emitGenericType(ast); - case 137 /* ConstructorDeclaration */: - return this.emitConstructorDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitEnumDeclaration(ast); - case 243 /* EnumElement */: - return this.emitEnumElement(ast); - case 222 /* FunctionExpression */: - return this.emitFunctionExpression(ast); - case 148 /* VariableStatement */: - return this.emitVariableStatement(ast); - } - - this.emitComments(ast, true); - this.emitWorker(ast); - this.emitComments(ast, false); - }; - - Emitter.prototype.emitWorker = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 13 /* NumericLiteral */: - return this.emitNumericLiteral(ast); - case 12 /* RegularExpressionLiteral */: - return this.emitRegularExpressionLiteral(ast); - case 14 /* StringLiteral */: - return this.emitStringLiteral(ast); - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 37 /* TrueKeyword */: - return this.emitLiteralExpression(ast); - case 35 /* ThisKeyword */: - return this.emitThisExpression(ast); - case 50 /* SuperKeyword */: - return this.emitSuperExpression(ast); - case 217 /* ParenthesizedExpression */: - return this.emitParenthesizedExpression(ast); - case 214 /* ArrayLiteralExpression */: - return this.emitArrayLiteralExpression(ast); - case 211 /* PostDecrementExpression */: - case 210 /* PostIncrementExpression */: - return this.emitPostfixUnaryExpression(ast); - case 167 /* LogicalNotExpression */: - case 166 /* BitwiseNotExpression */: - case 165 /* NegateExpression */: - case 164 /* PlusExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.emitPrefixUnaryExpression(ast); - case 213 /* InvocationExpression */: - return this.emitInvocationExpression(ast); - case 221 /* ElementAccessExpression */: - return this.emitElementAccessExpression(ast); - case 212 /* MemberAccessExpression */: - return this.emitMemberAccessExpression(ast); - case 121 /* QualifiedName */: - return this.emitQualifiedName(ast); - case 173 /* CommaExpression */: - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return this.emitBinaryExpression(ast); - case 186 /* ConditionalExpression */: - return this.emitConditionalExpression(ast); - case 232 /* EqualsValueClause */: - return this.emitEqualsValueClause(ast); - case 242 /* Parameter */: - return this.emitParameter(ast); - case 146 /* Block */: - return this.emitBlock(ast); - case 235 /* ElseClause */: - return this.emitElseClause(ast); - case 147 /* IfStatement */: - return this.emitIfStatement(ast); - case 149 /* ExpressionStatement */: - return this.emitExpressionStatement(ast); - case 139 /* GetAccessor */: - return this.emitGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitSetAccessor(ast); - case 157 /* ThrowStatement */: - return this.emitThrowStatement(ast); - case 150 /* ReturnStatement */: - return this.emitReturnStatement(ast); - case 216 /* ObjectCreationExpression */: - return this.emitObjectCreationExpression(ast); - case 151 /* SwitchStatement */: - return this.emitSwitchStatement(ast); - case 233 /* CaseSwitchClause */: - return this.emitCaseSwitchClause(ast); - case 234 /* DefaultSwitchClause */: - return this.emitDefaultSwitchClause(ast); - case 152 /* BreakStatement */: - return this.emitBreakStatement(ast); - case 153 /* ContinueStatement */: - return this.emitContinueStatement(ast); - case 154 /* ForStatement */: - return this.emitForStatement(ast); - case 155 /* ForInStatement */: - return this.emitForInStatement(ast); - case 158 /* WhileStatement */: - return this.emitWhileStatement(ast); - case 163 /* WithStatement */: - return this.emitWithStatement(ast); - case 220 /* CastExpression */: - return this.emitCastExpression(ast); - case 215 /* ObjectLiteralExpression */: - return this.emitObjectLiteralExpression(ast); - case 240 /* SimplePropertyAssignment */: - return this.emitSimplePropertyAssignment(ast); - case 241 /* FunctionPropertyAssignment */: - return this.emitFunctionPropertyAssignment(ast); - case 156 /* EmptyStatement */: - return this.writeToOutputWithSourceMapRecord(";", ast); - case 159 /* TryStatement */: - return this.emitTryStatement(ast); - case 236 /* CatchClause */: - return this.emitCatchClause(ast); - case 237 /* FinallyClause */: - return this.emitFinallyClause(ast); - case 160 /* LabeledStatement */: - return this.emitLabeledStatement(ast); - case 161 /* DoStatement */: - return this.emitDoStatement(ast); - case 171 /* TypeOfExpression */: - return this.emitTypeOfExpression(ast); - case 170 /* DeleteExpression */: - return this.emitDeleteExpression(ast); - case 172 /* VoidExpression */: - return this.emitVoidExpression(ast); - case 162 /* DebuggerStatement */: - return this.emitDebuggerStatement(ast); - } - }; - return Emitter; - })(); - TypeScript.Emitter = Emitter; - - function getLastConstructor(classDecl) { - return classDecl.classElements.lastOrDefault(function (e) { - return e.kind() === 137 /* ConstructorDeclaration */; - }); - } - TypeScript.getLastConstructor = getLastConstructor; - - function getTrimmedTextLines(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - return comment.fullText().split("\n").map(function (s) { - return s.trim(); - }); - } else { - return [comment.fullText().trim()]; - } - } - TypeScript.getTrimmedTextLines = getTrimmedTextLines; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MemberName = (function () { - function MemberName() { - this.prefix = ""; - this.suffix = ""; - } - MemberName.prototype.isString = function () { - return false; - }; - MemberName.prototype.isArray = function () { - return false; - }; - MemberName.prototype.isMarker = function () { - return !this.isString() && !this.isArray(); - }; - - MemberName.prototype.toString = function () { - return MemberName.memberNameToString(this); - }; - - MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { - if (typeof markerBaseLength === "undefined") { markerBaseLength = 0; } - var result = memberName.prefix; - - if (memberName.isString()) { - result += memberName.text; - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - if (ar.entries[index].isMarker()) { - if (markerInfo) { - markerInfo.push(markerBaseLength + result.length); - } - continue; - } - - result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); - result += ar.delim; - } - } - - result += memberName.suffix; - return result; - }; - - MemberName.create = function (arg1, arg2, arg3) { - if (typeof arg1 === "string") { - return new MemberNameString(arg1); - } else { - var result = new MemberNameArray(); - if (arg2) - result.prefix = arg2; - if (arg3) - result.suffix = arg3; - result.entries.push(arg1); - return result; - } - }; - return MemberName; - })(); - TypeScript.MemberName = MemberName; - - var MemberNameString = (function (_super) { - __extends(MemberNameString, _super); - function MemberNameString(text) { - _super.call(this); - this.text = text; - } - MemberNameString.prototype.isString = function () { - return true; - }; - return MemberNameString; - })(MemberName); - TypeScript.MemberNameString = MemberNameString; - - var MemberNameArray = (function (_super) { - __extends(MemberNameArray, _super); - function MemberNameArray() { - _super.call(this); - this.delim = ""; - this.entries = []; - } - MemberNameArray.prototype.isArray = function () { - return true; - }; - - MemberNameArray.prototype.add = function (entry) { - this.entries.push(entry); - }; - - MemberNameArray.prototype.addAll = function (entries) { - for (var i = 0; i < entries.length; i++) { - this.entries.push(entries[i]); - } - }; - return MemberNameArray; - })(MemberName); - TypeScript.MemberNameArray = MemberNameArray; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function stripStartAndEndQuotes(str) { - var firstCharCode = str && str.charCodeAt(0); - if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { - return str.substring(1, str.length - 1); - } - - return str; - } - TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes; - - function isSingleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */; - } - TypeScript.isSingleQuoted = isSingleQuoted; - - function isDoubleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */; - } - TypeScript.isDoubleQuoted = isDoubleQuoted; - - function isQuoted(str) { - return isDoubleQuoted(str) || isSingleQuoted(str); - } - TypeScript.isQuoted = isQuoted; - - function quoteStr(str) { - return "\"" + str + "\""; - } - TypeScript.quoteStr = quoteStr; - - var switchToForwardSlashesRegEx = /\\/g; - function switchToForwardSlashes(path) { - return path.replace(switchToForwardSlashesRegEx, "/"); - } - TypeScript.switchToForwardSlashes = switchToForwardSlashes; - - function trimModName(modName) { - if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") { - return modName.substring(0, modName.length - 5); - } - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") { - return modName.substring(0, modName.length - 3); - } - - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") { - return modName.substring(0, modName.length - 3); - } - - return modName; - } - TypeScript.trimModName = trimModName; - - function getDeclareFilePath(fname) { - return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname); - } - TypeScript.getDeclareFilePath = getDeclareFilePath; - - function isFileOfExtension(fname, ext) { - var invariantFname = fname.toLocaleUpperCase(); - var invariantExt = ext.toLocaleUpperCase(); - var extLength = invariantExt.length; - return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt; - } - - function isTSFile(fname) { - return isFileOfExtension(fname, ".ts"); - } - TypeScript.isTSFile = isTSFile; - - function isDTSFile(fname) { - return isFileOfExtension(fname, ".d.ts"); - } - TypeScript.isDTSFile = isDTSFile; - - function getPrettyName(modPath, quote, treatAsFileName) { - if (typeof quote === "undefined") { quote = true; } - if (typeof treatAsFileName === "undefined") { treatAsFileName = false; } - var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath)); - var components = this.getPathComponents(modName); - return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath; - } - TypeScript.getPrettyName = getPrettyName; - - function getPathComponents(path) { - return path.split("/"); - } - TypeScript.getPathComponents = getPathComponents; - - function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) { - if (typeof isAbsoultePathURL === "undefined") { isAbsoultePathURL = true; } - absoluteModPath = switchToForwardSlashes(absoluteModPath); - - var modComponents = this.getPathComponents(absoluteModPath); - var fixedModComponents = this.getPathComponents(fixedModFilePath); - - var joinStartIndex = 0; - for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) { - break; - } - } - - if (joinStartIndex !== 0) { - var relativePath = ""; - var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length); - for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== "") { - relativePath = relativePath + "../"; - } - } - - return relativePath + relativePathComponents.join("/"); - } - - if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) { - absoluteModPath = "file:///" + absoluteModPath; - } - - return absoluteModPath; - } - TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath; - - function changePathToDTS(modPath) { - return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts"; - } - TypeScript.changePathToDTS = changePathToDTS; - - function isRelative(path) { - return path.length > 0 && path.charAt(0) === "."; - } - TypeScript.isRelative = isRelative; - function isRooted(path) { - return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1)); - } - TypeScript.isRooted = isRooted; - - function getRootFilePath(outFname) { - if (outFname === "") { - return outFname; - } else { - var isPath = outFname.indexOf("/") !== -1; - return isPath ? filePath(outFname) : ""; - } - } - TypeScript.getRootFilePath = getRootFilePath; - - function filePathComponents(fullPath) { - fullPath = switchToForwardSlashes(fullPath); - var components = getPathComponents(fullPath); - return components.slice(0, components.length - 1); - } - TypeScript.filePathComponents = filePathComponents; - - function filePath(fullPath) { - var path = filePathComponents(fullPath); - return path.join("/") + "/"; - } - TypeScript.filePath = filePath; - - function convertToDirectoryPath(dirPath) { - if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") { - dirPath += "/"; - } - - return dirPath; - } - TypeScript.convertToDirectoryPath = convertToDirectoryPath; - - var normalizePathRegEx = /^\\\\[^\\]/; - function normalizePath(path) { - if (normalizePathRegEx.test(path)) { - path = "file:" + path; - } - var parts = this.getPathComponents(switchToForwardSlashes(path)); - var normalizedParts = []; - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (part === ".") { - continue; - } - - if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") { - normalizedParts.pop(); - continue; - } - - normalizedParts.push(part); - } - - return normalizedParts.join("/"); - } - TypeScript.normalizePath = normalizePath; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - function isNoDefaultLibMatch(comment) { - var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; - return isNoDefaultLibRegex.exec(comment); - } - - TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; - - function getFileReferenceFromReferencePath(fileName, lineMap, position, comment, diagnostics) { - var simpleReferenceRegEx = /^\/\/\/\s*= 7 && fullReference[6] === "true"; - if (isResident) { - TypeScript.CompilerDiagnostics.debugPrint(path + " is resident"); - } - return { - line: 0, - character: 0, - position: 0, - length: 0, - path: TypeScript.switchToForwardSlashes(adjustedPath), - isResident: isResident - }; - } - } - } - - return null; - } - - var scannerWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - var scannerDiagnostics = []; - - function processImports(lineMap, scanner, token, importedFiles) { - var position = 0; - var lineChar = { line: -1, character: -1 }; - - var start = new Date().getTime(); - - while (token.tokenKind !== 10 /* EndOfFileToken */) { - if (token.tokenKind === 49 /* ImportKeyword */) { - var importStart = position + token.leadingTriviaWidth(); - token = scanner.scan(scannerDiagnostics, false); - - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 107 /* EqualsToken */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 65 /* ModuleKeyword */ || token.tokenKind === 66 /* RequireKeyword */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 72 /* OpenParenToken */) { - var afterOpenParenPosition = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - - lineMap.fillLineAndCharacterFromPosition(importStart, lineChar); - - if (token.tokenKind === 14 /* StringLiteral */) { - var ref = { - line: lineChar.line, - character: lineChar.character, - position: afterOpenParenPosition + token.leadingTriviaWidth(), - length: token.width(), - path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())), - isResident: false - }; - importedFiles.push(ref); - } - } - } - } - } - } - - position = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - } - - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionScanImportsTime += totalTime; - } - - function processTripleSlashDirectives(fileName, lineMap, firstToken) { - var leadingTrivia = firstToken.leadingTrivia(); - - var position = 0; - var lineChar = { line: -1, character: -1 }; - var noDefaultLib = false; - var diagnostics = []; - var referencedFiles = []; - - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - - if (trivia.kind() === 7 /* SingleLineCommentTrivia */) { - var triviaText = trivia.fullText(); - var referencedCode = getFileReferenceFromReferencePath(fileName, lineMap, position, triviaText, diagnostics); - - if (referencedCode) { - lineMap.fillLineAndCharacterFromPosition(position, lineChar); - referencedCode.position = position; - referencedCode.length = trivia.fullWidth(); - referencedCode.line = lineChar.line; - referencedCode.character = lineChar.character; - - referencedFiles.push(referencedCode); - } - - var isNoDefaultLib = isNoDefaultLibMatch(triviaText); - if (isNoDefaultLib) { - noDefaultLib = isNoDefaultLib[3] === "true"; - } - } - - position += trivia.fullWidth(); - } - - return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles }; - } - - function preProcessFile(fileName, sourceText, readImportFiles) { - if (typeof readImportFiles === "undefined") { readImportFiles = true; } - var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText); - var scanner = new TypeScript.Scanner(fileName, text, 1 /* EcmaScript5 */, scannerWindow); - - var firstToken = scanner.scan(scannerDiagnostics, false); - - var importedFiles = []; - if (readImportFiles) { - processImports(text.lineMap(), scanner, firstToken, importedFiles); - } - - var properties = processTripleSlashDirectives(fileName, text.lineMap(), firstToken); - - scannerDiagnostics.length = 0; - return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics }; - } - TypeScript.preProcessFile = preProcessFile; - - function getParseOptions(settings) { - return new TypeScript.ParseOptions(settings.codeGenTarget(), settings.allowAutomaticSemicolonInsertion()); - } - TypeScript.getParseOptions = getParseOptions; - - function getReferencedFiles(fileName, sourceText) { - return preProcessFile(fileName, sourceText, false).referencedFiles; - } - TypeScript.getReferencedFiles = getReferencedFiles; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ReferenceResolutionResult = (function () { - function ReferenceResolutionResult() { - this.resolvedFiles = []; - this.diagnostics = []; - this.seenNoDefaultLibTag = false; - } - return ReferenceResolutionResult; - })(); - TypeScript.ReferenceResolutionResult = ReferenceResolutionResult; - - var ReferenceLocation = (function () { - function ReferenceLocation(filePath, lineMap, position, length, isImported) { - this.filePath = filePath; - this.lineMap = lineMap; - this.position = position; - this.length = length; - this.isImported = isImported; - } - return ReferenceLocation; - })(); - - var ReferenceResolver = (function () { - function ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution) { - this.useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this.inputFileNames = inputFileNames; - this.host = host; - this.visited = {}; - } - ReferenceResolver.resolve = function (inputFileNames, host, useCaseSensitiveFileResolution) { - var resolver = new ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution); - return resolver.resolveInputFiles(); - }; - - ReferenceResolver.prototype.resolveInputFiles = function () { - var _this = this; - var result = new ReferenceResolutionResult(); - - if (!this.inputFileNames || this.inputFileNames.length <= 0) { - return result; - } - - var referenceLocation = new ReferenceLocation(null, null, 0, 0, false); - this.inputFileNames.forEach(function (fileName) { - return _this.resolveIncludedFile(fileName, referenceLocation, result); - }); - - return result; - }; - - ReferenceResolver.prototype.resolveIncludedFile = function (path, referenceLocation, resolutionResult) { - var normalizedPath = this.getNormalizedFilePath(path, referenceLocation.filePath); - - if (this.isSameFile(normalizedPath, referenceLocation.filePath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.A_file_cannot_have_a_reference_to_itself, null)); - } - - return normalizedPath; - } - - if (!TypeScript.isTSFile(normalizedPath) && !TypeScript.isDTSFile(normalizedPath)) { - var dtsFile = normalizedPath + ".d.ts"; - var tsFile = normalizedPath + ".ts"; - - if (this.host.fileExists(tsFile)) { - normalizedPath = tsFile; - } else { - normalizedPath = dtsFile; - } - } - - if (!this.host.fileExists(normalizedPath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.Cannot_resolve_referenced_file_0, [path])); - } - - return normalizedPath; - } - - return this.resolveFile(normalizedPath, resolutionResult); - }; - - ReferenceResolver.prototype.resolveImportedFile = function (path, referenceLocation, resolutionResult) { - var isRelativePath = TypeScript.isRelative(path); - var isRootedPath = isRelativePath ? false : TypeScript.isRooted(path); - - if (isRelativePath || isRootedPath) { - return this.resolveIncludedFile(path, referenceLocation, resolutionResult); - } else { - var parentDirectory = this.host.getParentDirectory(referenceLocation.filePath); - var searchFilePath = null; - var dtsFileName = path + ".d.ts"; - var tsFilePath = path + ".ts"; - - var start = new Date().getTime(); - - do { - currentFilePath = this.host.resolveRelativePath(tsFilePath, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - var currentFilePath = this.host.resolveRelativePath(dtsFileName, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - parentDirectory = this.host.getParentDirectory(parentDirectory); - } while(parentDirectory); - - TypeScript.fileResolutionImportFileSearchTime += new Date().getTime() - start; - - if (!searchFilePath) { - return path; - } - - return this.resolveFile(searchFilePath, resolutionResult); - } - }; - - ReferenceResolver.prototype.resolveFile = function (normalizedPath, resolutionResult) { - var _this = this; - var visitedPath = this.isVisited(normalizedPath); - if (!visitedPath) { - this.recordVisitedFile(normalizedPath); - - var start = new Date().getTime(); - var scriptSnapshot = this.host.getScriptSnapshot(normalizedPath); - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionIOTime += totalTime; - - var lineMap = TypeScript.LineMap1.fromScriptSnapshot(scriptSnapshot); - var preprocessedFileInformation = TypeScript.preProcessFile(normalizedPath, scriptSnapshot); - resolutionResult.diagnostics.push.apply(resolutionResult.diagnostics, preprocessedFileInformation.diagnostics); - - if (preprocessedFileInformation.isLibFile) { - resolutionResult.seenNoDefaultLibTag = true; - } - - var normalizedReferencePaths = []; - preprocessedFileInformation.referencedFiles.forEach(function (fileReference) { - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileReference.position, fileReference.length, false); - var normalizedReferencePath = _this.resolveIncludedFile(fileReference.path, currentReferenceLocation, resolutionResult); - normalizedReferencePaths.push(normalizedReferencePath); - }); - - var normalizedImportPaths = []; - for (var i = 0; i < preprocessedFileInformation.importedFiles.length; i++) { - var fileImport = preprocessedFileInformation.importedFiles[i]; - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileImport.position, fileImport.length, true); - var normalizedImportPath = this.resolveImportedFile(fileImport.path, currentReferenceLocation, resolutionResult); - normalizedImportPaths.push(normalizedImportPath); - } - - resolutionResult.resolvedFiles.push({ - path: normalizedPath, - referencedFiles: normalizedReferencePaths, - importedFiles: normalizedImportPaths - }); - } else { - normalizedPath = visitedPath; - } - - return normalizedPath; - }; - - ReferenceResolver.prototype.getNormalizedFilePath = function (path, parentFilePath) { - var parentFileDirectory = parentFilePath ? this.host.getParentDirectory(parentFilePath) : ""; - var normalizedPath = this.host.resolveRelativePath(path, parentFileDirectory); - return normalizedPath; - }; - - ReferenceResolver.prototype.getUniqueFileId = function (filePath) { - return this.useCaseSensitiveFileResolution ? filePath : filePath.toLocaleUpperCase(); - }; - - ReferenceResolver.prototype.recordVisitedFile = function (filePath) { - this.visited[this.getUniqueFileId(filePath)] = filePath; - }; - - ReferenceResolver.prototype.isVisited = function (filePath) { - return this.visited[this.getUniqueFileId(filePath)]; - }; - - ReferenceResolver.prototype.isSameFile = function (filePath1, filePath2) { - if (!filePath1 || !filePath2) { - return false; - } - - if (this.useCaseSensitiveFileResolution) { - return filePath1 === filePath2; - } else { - return filePath1.toLocaleUpperCase() === filePath2.toLocaleUpperCase(); - } - }; - return ReferenceResolver; - })(); - TypeScript.ReferenceResolver = ReferenceResolver; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextWriter = (function () { - function TextWriter(name, writeByteOrderMark, outputFileType) { - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.outputFileType = outputFileType; - this.contents = ""; - this.onNewLine = true; - } - TextWriter.prototype.Write = function (s) { - this.contents += s; - this.onNewLine = false; - }; - - TextWriter.prototype.WriteLine = function (s) { - this.contents += s; - this.contents += TypeScript.newLine(); - this.onNewLine = true; - }; - - TextWriter.prototype.Close = function () { - }; - - TextWriter.prototype.getOutputFile = function () { - return new TypeScript.OutputFile(this.name, this.writeByteOrderMark, this.contents, this.outputFileType); - }; - return TextWriter; - })(); - TypeScript.TextWriter = TextWriter; - - var DeclarationEmitter = (function () { - function DeclarationEmitter(emittingFileName, document, compiler, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.document = document; - this.compiler = compiler; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.declFile = null; - this.indenter = new TypeScript.Indenter(); - this.emittedReferencePaths = false; - this.declFile = new TextWriter(emittingFileName, this.document.byteOrderMark !== 0 /* None */, 2 /* Declaration */); - } - DeclarationEmitter.prototype.getOutputFile = function () { - return this.declFile.getOutputFile(); - }; - - DeclarationEmitter.prototype.emitDeclarations = function (sourceUnit) { - this.emitDeclarationsForSourceUnit(sourceUnit); - }; - - DeclarationEmitter.prototype.emitDeclarationsForList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.emitDeclarationsForAST(list.childAt(i)); - } - }; - - DeclarationEmitter.prototype.emitSeparatedList = function (list) { - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.emitDeclarationsForAST(list.nonSeparatorAt(i)); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForAST = function (ast) { - switch (ast.kind()) { - case 148 /* VariableStatement */: - return this.emitDeclarationsForVariableStatement(ast); - case 141 /* PropertySignature */: - return this.emitPropertySignature(ast); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast, true, true); - case 136 /* MemberVariableDeclaration */: - return this.emitDeclarationsForMemberVariableDeclaration(ast); - case 137 /* ConstructorDeclaration */: - return this.emitDeclarationsForConstructorDeclaration(ast); - case 139 /* GetAccessor */: - return this.emitDeclarationsForGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitDeclarationsForSetAccessor(ast); - case 138 /* IndexMemberDeclaration */: - return this.emitIndexMemberDeclaration(ast); - case 144 /* IndexSignature */: - return this.emitIndexSignature(ast); - case 142 /* CallSignature */: - return this.emitCallSignature(ast); - case 143 /* ConstructSignature */: - return this.emitConstructSignature(ast); - case 145 /* MethodSignature */: - return this.emitMethodSignature(ast); - case 129 /* FunctionDeclaration */: - return this.emitDeclarationsForFunctionDeclaration(ast); - case 135 /* MemberFunctionDeclaration */: - return this.emitMemberFunctionDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.emitDeclarationsForClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitDeclarationsForInterfaceDeclaration(ast); - case 133 /* ImportDeclaration */: - return this.emitDeclarationsForImportDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitDeclarationsForModuleDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitDeclarationsForEnumDeclaration(ast); - case 134 /* ExportAssignment */: - return this.emitDeclarationsForExportAssignment(ast); - } - }; - - DeclarationEmitter.prototype.getIndentString = function (declIndent) { - if (typeof declIndent === "undefined") { declIndent = false; } - return this.indenter.getIndent(); - }; - - DeclarationEmitter.prototype.emitIndent = function () { - this.declFile.Write(this.getIndentString()); - }; - - DeclarationEmitter.prototype.canEmitDeclarations = function (declAST) { - var container = DeclarationEmitter.getEnclosingContainer(declAST); - if (container.kind() === 130 /* ModuleDeclaration */ || container.kind() === 120 /* SourceUnit */) { - var pullDecl = this.semanticInfoChain.getDeclForAST(declAST); - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - var start = new Date().getTime(); - var declSymbol = this.semanticInfoChain.getSymbolForAST(declAST); - var result = declSymbol && declSymbol.isExternallyVisible(); - TypeScript.declarationEmitIsExternallyVisibleTime += new Date().getTime() - start; - - return result; - } - } - - return true; - }; - - DeclarationEmitter.prototype.getDeclFlagsString = function (pullDecl, typeString) { - var result = this.getIndentString(); - var pullFlags = pullDecl.flags; - - if (TypeScript.hasFlag(pullFlags, 16 /* Static */)) { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } - result += "static "; - } else { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } else if (TypeScript.hasFlag(pullFlags, 4 /* Public */)) { - result += "public "; - } else { - var emitDeclare = !TypeScript.hasFlag(pullFlags, 1 /* Exported */); - - var declAST = this.semanticInfoChain.getASTForDecl(pullDecl); - var container = DeclarationEmitter.getEnclosingContainer(declAST); - - var isExternalModule = container.kind() === 120 /* SourceUnit */ && this.document.isExternalModule(); - - if (isExternalModule && TypeScript.hasFlag(pullFlags, 1 /* Exported */)) { - result += "export "; - emitDeclare = true; - } - - if (isExternalModule || container.kind() === 120 /* SourceUnit */) { - if (emitDeclare && typeString !== "interface" && typeString !== "import") { - result += "declare "; - } - } - - result += typeString + " "; - } - } - - return result; - }; - - DeclarationEmitter.prototype.emitDeclFlags = function (declarationAST, typeString) { - this.declFile.Write(this.getDeclFlagsString(this.semanticInfoChain.getDeclForAST(declarationAST), typeString)); - }; - - DeclarationEmitter.prototype.emitTypeNamesMember = function (memberName, emitIndent) { - if (typeof emitIndent === "undefined") { emitIndent = false; } - if (memberName.prefix === "{ ") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.WriteLine("{"); - this.indenter.increaseIndent(); - emitIndent = true; - } else if (memberName.prefix !== "") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.prefix); - emitIndent = false; - } - - if (memberName.isString()) { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.text); - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - this.emitTypeNamesMember(ar.entries[index], emitIndent); - if (ar.delim === "; ") { - this.declFile.WriteLine(";"); - } - } - } - - if (memberName.suffix === "}") { - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.Write(memberName.suffix); - } else { - this.declFile.Write(memberName.suffix); - } - }; - - DeclarationEmitter.prototype.emitTypeSignature = function (ast, type) { - var declarationContainerAst = DeclarationEmitter.getEnclosingContainer(ast); - - var start = new Date().getTime(); - var declarationContainerDecl = this.semanticInfoChain.getDeclForAST(declarationContainerAst); - - var declarationPullSymbol = declarationContainerDecl.getSymbol(); - TypeScript.declarationEmitTypeSignatureTime += new Date().getTime() - start; - - var isNotAGenericType = ast.kind() !== 126 /* GenericType */; - - var typeNameMembers = type.getScopedNameEx(declarationPullSymbol, false, false, false, false, false, isNotAGenericType); - this.emitTypeNamesMember(typeNameMembers); - }; - - DeclarationEmitter.prototype.emitComment = function (comment) { - var text = TypeScript.getTrimmedTextLines(comment); - if (this.declFile.onNewLine) { - this.emitIndent(); - } else if (comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - this.emitIndent(); - } - - this.declFile.Write(text[0]); - - for (var i = 1; i < text.length; i++) { - this.declFile.WriteLine(""); - this.emitIndent(); - this.declFile.Write(text[i]); - } - - if (comment.endsLine || comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - } else { - this.declFile.Write(" "); - } - }; - - DeclarationEmitter.prototype.emitDeclarationComments = function (astOrSymbol, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var declComments = astOrSymbol.docComments ? astOrSymbol.docComments() : TypeScript.ASTHelpers.docComments(astOrSymbol); - this.writeDeclarationComments(declComments, endLine); - }; - - DeclarationEmitter.prototype.writeDeclarationComments = function (declComments, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (declComments.length > 0) { - for (var i = 0; i < declComments.length; i++) { - this.emitComment(declComments[i]); - } - - if (endLine) { - if (!this.declFile.onNewLine) { - this.declFile.WriteLine(""); - } - } else { - if (this.declFile.onNewLine) { - this.emitIndent(); - } - } - } - }; - - DeclarationEmitter.prototype.emitTypeOfVariableDeclaratorOrParameter = function (boundDecl) { - var start = new Date().getTime(); - var decl = this.semanticInfoChain.getDeclForAST(boundDecl); - var pullSymbol = decl.getSymbol(); - TypeScript.declarationEmitGetBoundDeclTypeTime += new Date().getTime() - start; - - var type = pullSymbol.type; - TypeScript.Debug.assert(type); - - this.declFile.Write(": "); - this.emitTypeSignature(boundDecl, type); - }; - - DeclarationEmitter.prototype.emitPropertySignature = function (varDecl) { - this.emitDeclarationComments(varDecl); - this.emitIndent(); - this.declFile.Write(varDecl.propertyName.text()); - if (varDecl.questionToken) { - this.declFile.Write("?"); - } - - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitVariableDeclarator = function (varDecl, isFirstVarInList, isLastVarInList) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - if (isFirstVarInList) { - this.emitDeclFlags(varDecl, "var"); - } - - this.declFile.Write(varDecl.propertyName.text()); - - if (!TypeScript.hasModifier(TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - if (isLastVarInList) { - this.declFile.WriteLine(";"); - } else { - this.declFile.Write(", "); - } - } - }; - - DeclarationEmitter.prototype.emitClassElementModifiers = function (modifiers) { - if (TypeScript.hasModifier(modifiers, 16 /* Static */)) { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } - this.declFile.Write("static "); - } else { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } else { - this.declFile.Write("public "); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForMemberVariableDeclaration = function (varDecl) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(varDecl.modifiers); - ; - - this.declFile.Write(varDecl.variableDeclarator.propertyName.text()); - - if (!TypeScript.hasModifier(varDecl.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - this.declFile.WriteLine(";"); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableStatement = function (variableStatement) { - this.emitDeclarationsForVariableDeclaration(variableStatement.declaration); - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableDeclaration = function (variableDeclaration) { - var varListCount = variableDeclaration.declarators.nonSeparatorCount(); - for (var i = 0; i < varListCount; i++) { - this.emitVariableDeclarator(variableDeclaration.declarators.nonSeparatorAt(i), i === 0, i === varListCount - 1); - } - }; - - DeclarationEmitter.prototype.emitArgDecl = function (argDecl, id, isOptional, isPrivate) { - this.indenter.increaseIndent(); - - this.emitDeclarationComments(argDecl, false); - this.declFile.Write(id.text()); - if (isOptional) { - this.declFile.Write("?"); - } - - this.indenter.decreaseIndent(); - - if (!isPrivate) { - this.emitTypeOfVariableDeclaratorOrParameter(argDecl); - } - }; - - DeclarationEmitter.prototype.isOverloadedCallSignature = function (funcDecl) { - var start = new Date().getTime(); - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDecl.getSymbol(); - TypeScript.declarationEmitIsOverloadedCallSignatureTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - var signatures = funcTypeSymbol.getCallSignatures(); - var result = signatures && signatures.length > 1; - - return result; - }; - - DeclarationEmitter.prototype.emitDeclarationsForConstructorDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("constructor"); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitParameterList = function (isPrivate, parameterList) { - this.declFile.Write("("); - this.emitParameters(isPrivate, TypeScript.ASTHelpers.parametersFromParameterList(parameterList)); - this.declFile.Write(")"); - }; - - DeclarationEmitter.prototype.emitParameters = function (isPrivate, parameterList) { - var hasLastParameterRestParameter = parameterList.lastParameterIsRest(); - var argsLen = parameterList.length; - if (hasLastParameterRestParameter) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - this.emitArgDecl(parameterList.astAt(i), parameterList.identifierAt(i), parameterList.isOptionalAt(i), isPrivate); - if (i < (argsLen - 1)) { - this.declFile.Write(", "); - } - } - - if (hasLastParameterRestParameter) { - if (parameterList.length > 1) { - this.declFile.Write(", ..."); - } else { - this.declFile.Write("..."); - } - - var index = parameterList.length - 1; - this.emitArgDecl(parameterList.astAt(index), parameterList.identifierAt(index), parameterList.isOptionalAt(index), isPrivate); - } - }; - - DeclarationEmitter.prototype.emitMemberFunctionDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } else if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */) && this.isOverloadedCallSignature(funcDecl)) { - var callSignatures = funcTypeSymbol.getCallSignatures(); - TypeScript.Debug.assert(callSignatures && callSignatures.length > 1); - var firstSignature = callSignatures[0].isDefinition() ? callSignatures[1] : callSignatures[0]; - var firstSignatureDecl = firstSignature.getDeclarations()[0]; - var firstFuncDecl = this.semanticInfoChain.getASTForDecl(firstSignatureDecl); - if (firstFuncDecl !== funcDecl) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitDeclFlags(funcDecl, "function"); - var id = funcDecl.propertyName.text(); - this.declFile.Write(id); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - var isPrivate = TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */); - - this.emitParameterList(isPrivate, funcDecl.callSignature.parameterList); - - if (!isPrivate) { - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitCallSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - this.emitDeclarationComments(funcDecl); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.typeParameterList, funcSignature); - - this.emitIndent(); - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitConstructSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("new"); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitMethodSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write(funcDecl.propertyName.text()); - if (funcDecl.questionToken) { - this.declFile.Write("? "); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForFunctionDeclaration = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - if (funcDecl.block) { - var funcTypeSymbol = funcSymbol.type; - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - var id = funcDecl.identifier.text(); - this.emitDeclFlags(funcDecl, "function"); - if (id !== "" || !funcDecl.identifier || funcDecl.identifier.text().length > 0) { - this.declFile.Write(id); - } else if (funcPullDecl.kind === 2097152 /* ConstructSignature */) { - this.declFile.Write("new"); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitIndexMemberDeclaration = function (funcDecl) { - this.emitDeclarationsForAST(funcDecl.indexSignature); - }; - - DeclarationEmitter.prototype.emitIndexSignature = function (funcDecl) { - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("["); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter)); - this.declFile.Write("]"); - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitBaseList = function (bases, useExtendsList) { - if (bases && (bases.nonSeparatorCount() > 0)) { - var qual = useExtendsList ? "extends" : "implements"; - this.declFile.Write(" " + qual + " "); - var basesLen = bases.nonSeparatorCount(); - for (var i = 0; i < basesLen; i++) { - if (i > 0) { - this.declFile.Write(", "); - } - var base = bases.nonSeparatorAt(i); - var baseType = this.semanticInfoChain.getSymbolForAST(base); - this.emitTypeSignature(base, baseType); - } - } - }; - - DeclarationEmitter.prototype.emitAccessorDeclarationComments = function (funcDecl) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var start = new Date().getTime(); - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - var comments = []; - if (accessors.getter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.getter)); - } - if (accessors.setter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.setter)); - } - - this.writeDeclarationComments(comments); - }; - - DeclarationEmitter.prototype.emitDeclarationsForGetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitDeclarationsForSetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitMemberAccessorDeclaration = function (funcDecl, modifiers, name) { - var start = new Date().getTime(); - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - if (funcDecl.kind() === 140 /* SetAccessor */ && accessorSymbol.getGetter()) { - return; - } - - var isPrivate = TypeScript.hasModifier(modifiers, 2 /* Private */); - this.emitAccessorDeclarationComments(funcDecl); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(modifiers); - this.declFile.Write(name.text()); - if (!isPrivate) { - this.declFile.Write(" : "); - var type = accessorSymbol.type; - this.emitTypeSignature(funcDecl, type); - } - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitClassMembersFromConstructorDefinition = function (funcDecl) { - var argsLen = funcDecl.callSignature.parameterList.parameters.nonSeparatorCount(); - if (TypeScript.lastParameterIsRest(funcDecl.callSignature.parameterList)) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - var parameter = funcDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.emitDeclarationComments(parameter); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(parameter.modifiers); - this.declFile.Write(parameter.identifier.text()); - - if (!TypeScript.hasModifier(parameter.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(parameter); - } - this.declFile.WriteLine(";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForClassDeclaration = function (classDecl) { - if (!this.canEmitDeclarations(classDecl)) { - return; - } - - var className = classDecl.identifier.text(); - this.emitDeclarationComments(classDecl); - var classPullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.emitDeclFlags(classDecl, "class"); - this.declFile.Write(className); - - this.emitTypeParameters(classDecl.typeParameterList); - this.emitHeritageClauses(classDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - var constructorDecl = TypeScript.getLastConstructor(classDecl); - if (constructorDecl) { - this.emitClassMembersFromConstructorDefinition(constructorDecl); - } - - this.emitDeclarationsForList(classDecl.classElements); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitHeritageClauses = function (clauses) { - if (clauses) { - for (var i = 0, n = clauses.childCount(); i < n; i++) { - this.emitHeritageClause(clauses.childAt(i)); - } - } - }; - - DeclarationEmitter.prototype.emitHeritageClause = function (clause) { - this.emitBaseList(clause.typeNames, clause.kind() === 230 /* ExtendsHeritageClause */); - }; - - DeclarationEmitter.getEnclosingContainer = function (ast) { - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - ast = enclosingModule || ast; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */ || ast.kind() === 128 /* InterfaceDeclaration */ || ast.kind() === 130 /* ModuleDeclaration */ || ast.kind() === 120 /* SourceUnit */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - DeclarationEmitter.prototype.emitTypeParameters = function (typeParams, funcSignature) { - if (!typeParams || !typeParams.typeParameters.nonSeparatorCount()) { - return; - } - - this.declFile.Write("<"); - var containerAst = DeclarationEmitter.getEnclosingContainer(typeParams); - - var start = new Date().getTime(); - var containerDecl = this.semanticInfoChain.getDeclForAST(containerAst); - var containerSymbol = containerDecl.getSymbol(); - TypeScript.declarationEmitGetTypeParameterSymbolTime += new Date().getTime() - start; - - var typars; - if (funcSignature) { - typars = funcSignature.getTypeParameters(); - } else { - typars = containerSymbol.getTypeArgumentsOrTypeParameters(); - } - - for (var i = 0; i < typars.length; i++) { - if (i) { - this.declFile.Write(", "); - } - - var memberName = typars[i].getScopedNameEx(containerSymbol, false, true); - this.emitTypeNamesMember(memberName); - } - - this.declFile.Write(">"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForInterfaceDeclaration = function (interfaceDecl) { - if (!this.canEmitDeclarations(interfaceDecl)) { - return; - } - - var interfaceName = interfaceDecl.identifier.text(); - this.emitDeclarationComments(interfaceDecl); - var interfacePullDecl = this.semanticInfoChain.getDeclForAST(interfaceDecl); - this.emitDeclFlags(interfaceDecl, "interface"); - this.declFile.Write(interfaceName); - - this.emitTypeParameters(interfaceDecl.typeParameterList); - this.emitHeritageClauses(interfaceDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - - this.emitSeparatedList(interfaceDecl.body.typeMembers); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForImportDeclaration = function (importDeclAST) { - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var importSymbol = importDecl.getSymbol(); - var isExportedImportDecl = TypeScript.hasModifier(importDeclAST.modifiers, 1 /* Exported */); - - if (isExportedImportDecl || importSymbol.typeUsedExternally() || TypeScript.PullContainerSymbol.usedAsSymbol(importSymbol.getContainer(), importSymbol)) { - this.emitDeclarationComments(importDeclAST); - this.emitIndent(); - if (isExportedImportDecl) { - this.declFile.Write("export "); - } - this.declFile.Write("import "); - this.declFile.Write(importDeclAST.identifier.text() + " = "); - if (importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - this.declFile.WriteLine("require(" + importDeclAST.moduleReference.stringLiteral.text() + ");"); - } else { - this.declFile.WriteLine(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(importDeclAST.moduleReference.moduleName) + ";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForEnumDeclaration = function (moduleDecl) { - if (!this.canEmitDeclarations(moduleDecl)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - var modulePullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.emitDeclFlags(moduleDecl, "enum"); - this.declFile.WriteLine(moduleDecl.identifier.text() + " {"); - - this.indenter.increaseIndent(); - var membersLen = moduleDecl.enumElements.nonSeparatorCount(); - for (var j = 0; j < membersLen; j++) { - var memberDecl = moduleDecl.enumElements.nonSeparatorAt(j); - var enumElement = memberDecl; - var enumElementDecl = this.semanticInfoChain.getDeclForAST(enumElement); - this.emitDeclarationComments(enumElement); - this.emitIndent(); - this.declFile.Write(enumElement.propertyName.text()); - if (enumElementDecl.constantValue !== null) { - this.declFile.Write(" = " + enumElementDecl.constantValue); - } - this.declFile.WriteLine(","); - } - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForModuleDeclaration = function (moduleDecl) { - var name = moduleDecl.stringLiteral || TypeScript.ArrayUtilities.first(TypeScript.ASTHelpers.getModuleNames(moduleDecl.name)); - if (!this.canEmitDeclarations(name)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - this.emitDeclFlags(name, "module"); - - if (moduleDecl.stringLiteral) { - this.declFile.Write(moduleDecl.stringLiteral.text()); - } else { - this.declFile.Write(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(moduleDecl.name)); - } - - this.declFile.WriteLine(" {"); - this.indenter.increaseIndent(); - - this.emitDeclarationsForList(moduleDecl.moduleElements); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForExportAssignment = function (ast) { - this.emitIndent(); - this.declFile.Write("export = "); - this.declFile.Write(ast.identifier.text()); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.resolveScriptReference = function (document, reference) { - if (!this.emitOptions.compilationSettings().noResolve() || TypeScript.isRooted(reference)) { - return reference; - } - - var documentDir = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath(document.fileName))); - var resolvedReferencePath = this.emitOptions.resolvePath(documentDir + reference); - return resolvedReferencePath; - }; - - DeclarationEmitter.prototype.emitReferencePaths = function (sourceUnit) { - if (this.emittedReferencePaths) { - return; - } - - var documents = []; - if (this.document.emitToOwnOutputFile()) { - var scriptReferences = this.document.referencedFiles; - var addedGlobalDocument = false; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(this.document, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.emitToOwnOutputFile() || document.isDeclareFile() || !addedGlobalDocument)) { - documents = documents.concat(document); - - if (!document.isDeclareFile() && document.isExternalModule()) { - addedGlobalDocument = true; - } - } - } - } else { - var fileNames = this.compiler.fileNames(); - for (var i = 0; i < fileNames.length; i++) { - var doc = this.compiler.getDocument(fileNames[i]); - if (!doc.isDeclareFile() && !doc.isExternalModule()) { - var scriptReferences = doc.referencedFiles; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(doc, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.isDeclareFile() || document.isExternalModule())) { - for (var k = 0; k < documents.length; k++) { - if (documents[k] === document) { - break; - } - } - - if (k === documents.length) { - documents = documents.concat(document); - } - } - } - } - } - } - - var emittingFilePath = documents.length ? TypeScript.getRootFilePath(this.emittingFileName) : null; - for (var i = 0; i < documents.length; i++) { - var document = documents[i]; - var declFileName; - if (document.isDeclareFile()) { - declFileName = document.fileName; - } else { - declFileName = this.compiler.mapOutputFileName(document, this.emitOptions, TypeScript.TypeScriptCompiler.mapToDTSFileName); - } - - declFileName = TypeScript.getRelativePathToFixedPath(emittingFilePath, declFileName, false); - this.declFile.WriteLine('/// '); - } - - this.emittedReferencePaths = true; - }; - - DeclarationEmitter.prototype.emitDeclarationsForSourceUnit = function (sourceUnit) { - this.emitReferencePaths(sourceUnit); - this.emitDeclarationsForList(sourceUnit.moduleElements); - }; - return DeclarationEmitter; - })(); - TypeScript.DeclarationEmitter = DeclarationEmitter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var BloomFilter = (function () { - function BloomFilter(expectedCount) { - var m = Math.max(1, BloomFilter.computeM(expectedCount)); - var k = Math.max(1, BloomFilter.computeK(expectedCount)); - ; - - var sizeInEvenBytes = (m + 7) & ~7; - - this.bitArray = []; - for (var i = 0, len = sizeInEvenBytes; i < len; i++) { - this.bitArray[i] = false; - } - this.hashFunctionCount = k; - } - BloomFilter.computeM = function (expectedCount) { - var p = BloomFilter.falsePositiveProbability; - var n = expectedCount; - - var numerator = n * Math.log(p); - var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); - return Math.ceil(numerator / denominator); - }; - - BloomFilter.computeK = function (expectedCount) { - var n = expectedCount; - var m = BloomFilter.computeM(expectedCount); - - var temp = Math.log(2.0) * m / n; - return Math.round(temp); - }; - - BloomFilter.prototype.computeHash = function (key, seed) { - return TypeScript.Hash.computeMurmur2StringHashCode(key, seed); - }; - - BloomFilter.prototype.addKeys = function (keys) { - for (var name in keys) { - if (keys[name]) { - this.add(name); - } - } - }; - - BloomFilter.prototype.add = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - this.bitArray[Math.abs(hash)] = true; - } - }; - - BloomFilter.prototype.probablyContains = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - if (!this.bitArray[Math.abs(hash)]) { - return false; - } - } - - return true; - }; - - BloomFilter.prototype.isEquivalent = function (filter) { - return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount; - }; - - BloomFilter.isEquivalent = function (array1, array2) { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - }; - BloomFilter.falsePositiveProbability = 0.0001; - return BloomFilter; - })(); - TypeScript.BloomFilter = BloomFilter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var IdentifierWalker = (function (_super) { - __extends(IdentifierWalker, _super); - function IdentifierWalker(list) { - _super.call(this); - this.list = list; - } - IdentifierWalker.prototype.visitToken = function (token) { - this.list[token.text()] = true; - }; - return IdentifierWalker; - })(TypeScript.SyntaxWalker); - TypeScript.IdentifierWalker = IdentifierWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CompilationSettings = (function () { - function CompilationSettings() { - this.propagateEnumConstants = false; - this.removeComments = false; - this.watch = false; - this.noResolve = false; - this.allowAutomaticSemicolonInsertion = true; - this.noImplicitAny = false; - this.noLib = false; - this.codeGenTarget = 0 /* EcmaScript3 */; - this.moduleGenTarget = 0 /* Unspecified */; - this.outFileOption = ""; - this.outDirOption = ""; - this.mapSourceFiles = false; - this.mapRoot = ""; - this.sourceRoot = ""; - this.generateDeclarationFiles = false; - this.useCaseSensitiveFileResolution = false; - this.gatherDiagnostics = false; - this.codepage = null; - this.createFileLog = false; - } - return CompilationSettings; - })(); - TypeScript.CompilationSettings = CompilationSettings; - - var ImmutableCompilationSettings = (function () { - function ImmutableCompilationSettings(propagateEnumConstants, removeComments, watch, noResolve, allowAutomaticSemicolonInsertion, noImplicitAny, noLib, codeGenTarget, moduleGenTarget, outFileOption, outDirOption, mapSourceFiles, mapRoot, sourceRoot, generateDeclarationFiles, useCaseSensitiveFileResolution, gatherDiagnostics, codepage, createFileLog) { - this._propagateEnumConstants = propagateEnumConstants; - this._removeComments = removeComments; - this._watch = watch; - this._noResolve = noResolve; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - this._noImplicitAny = noImplicitAny; - this._noLib = noLib; - this._codeGenTarget = codeGenTarget; - this._moduleGenTarget = moduleGenTarget; - this._outFileOption = outFileOption; - this._outDirOption = outDirOption; - this._mapSourceFiles = mapSourceFiles; - this._mapRoot = mapRoot; - this._sourceRoot = sourceRoot; - this._generateDeclarationFiles = generateDeclarationFiles; - this._useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this._gatherDiagnostics = gatherDiagnostics; - this._codepage = codepage; - this._createFileLog = createFileLog; - } - ImmutableCompilationSettings.prototype.propagateEnumConstants = function () { - return this._propagateEnumConstants; - }; - ImmutableCompilationSettings.prototype.removeComments = function () { - return this._removeComments; - }; - ImmutableCompilationSettings.prototype.watch = function () { - return this._watch; - }; - ImmutableCompilationSettings.prototype.noResolve = function () { - return this._noResolve; - }; - ImmutableCompilationSettings.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - ImmutableCompilationSettings.prototype.noImplicitAny = function () { - return this._noImplicitAny; - }; - ImmutableCompilationSettings.prototype.noLib = function () { - return this._noLib; - }; - ImmutableCompilationSettings.prototype.codeGenTarget = function () { - return this._codeGenTarget; - }; - ImmutableCompilationSettings.prototype.moduleGenTarget = function () { - return this._moduleGenTarget; - }; - ImmutableCompilationSettings.prototype.outFileOption = function () { - return this._outFileOption; - }; - ImmutableCompilationSettings.prototype.outDirOption = function () { - return this._outDirOption; - }; - ImmutableCompilationSettings.prototype.mapSourceFiles = function () { - return this._mapSourceFiles; - }; - ImmutableCompilationSettings.prototype.mapRoot = function () { - return this._mapRoot; - }; - ImmutableCompilationSettings.prototype.sourceRoot = function () { - return this._sourceRoot; - }; - ImmutableCompilationSettings.prototype.generateDeclarationFiles = function () { - return this._generateDeclarationFiles; - }; - ImmutableCompilationSettings.prototype.useCaseSensitiveFileResolution = function () { - return this._useCaseSensitiveFileResolution; - }; - ImmutableCompilationSettings.prototype.gatherDiagnostics = function () { - return this._gatherDiagnostics; - }; - ImmutableCompilationSettings.prototype.codepage = function () { - return this._codepage; - }; - ImmutableCompilationSettings.prototype.createFileLog = function () { - return this._createFileLog; - }; - - ImmutableCompilationSettings.defaultSettings = function () { - if (!ImmutableCompilationSettings._defaultSettings) { - ImmutableCompilationSettings._defaultSettings = ImmutableCompilationSettings.fromCompilationSettings(new CompilationSettings()); - } - - return ImmutableCompilationSettings._defaultSettings; - }; - - ImmutableCompilationSettings.fromCompilationSettings = function (settings) { - return new ImmutableCompilationSettings(settings.propagateEnumConstants, settings.removeComments, settings.watch, settings.noResolve, settings.allowAutomaticSemicolonInsertion, settings.noImplicitAny, settings.noLib, settings.codeGenTarget, settings.moduleGenTarget, settings.outFileOption, settings.outDirOption, settings.mapSourceFiles, settings.mapRoot, settings.sourceRoot, settings.generateDeclarationFiles, settings.useCaseSensitiveFileResolution, settings.gatherDiagnostics, settings.codepage, settings.createFileLog); - }; - - ImmutableCompilationSettings.prototype.toCompilationSettings = function () { - var result = new CompilationSettings(); - - var thisAsIndexable = this; - var resultAsIndexable = result; - for (var name in this) { - if (this.hasOwnProperty(name) && TypeScript.StringUtilities.startsWith(name, "_")) { - resultAsIndexable[name.substr(1)] = thisAsIndexable[name]; - } - } - - return result; - }; - return ImmutableCompilationSettings; - })(); - TypeScript.ImmutableCompilationSettings = ImmutableCompilationSettings; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullElementFlags) { - PullElementFlags[PullElementFlags["None"] = 0] = "None"; - PullElementFlags[PullElementFlags["Exported"] = 1] = "Exported"; - PullElementFlags[PullElementFlags["Private"] = 1 << 1] = "Private"; - PullElementFlags[PullElementFlags["Public"] = 1 << 2] = "Public"; - PullElementFlags[PullElementFlags["Ambient"] = 1 << 3] = "Ambient"; - PullElementFlags[PullElementFlags["Static"] = 1 << 4] = "Static"; - PullElementFlags[PullElementFlags["Optional"] = 1 << 7] = "Optional"; - PullElementFlags[PullElementFlags["Signature"] = 1 << 11] = "Signature"; - PullElementFlags[PullElementFlags["Enum"] = 1 << 12] = "Enum"; - PullElementFlags[PullElementFlags["ArrowFunction"] = 1 << 13] = "ArrowFunction"; - - PullElementFlags[PullElementFlags["ClassConstructorVariable"] = 1 << 14] = "ClassConstructorVariable"; - PullElementFlags[PullElementFlags["InitializedModule"] = 1 << 15] = "InitializedModule"; - PullElementFlags[PullElementFlags["InitializedDynamicModule"] = 1 << 16] = "InitializedDynamicModule"; - - PullElementFlags[PullElementFlags["MustCaptureThis"] = 1 << 18] = "MustCaptureThis"; - - PullElementFlags[PullElementFlags["DeclaredInAWithBlock"] = 1 << 21] = "DeclaredInAWithBlock"; - - PullElementFlags[PullElementFlags["HasReturnStatement"] = 1 << 22] = "HasReturnStatement"; - - PullElementFlags[PullElementFlags["PropertyParameter"] = 1 << 23] = "PropertyParameter"; - - PullElementFlags[PullElementFlags["IsAnnotatedWithAny"] = 1 << 24] = "IsAnnotatedWithAny"; - - PullElementFlags[PullElementFlags["HasDefaultArgs"] = 1 << 25] = "HasDefaultArgs"; - - PullElementFlags[PullElementFlags["ConstructorParameter"] = 1 << 26] = "ConstructorParameter"; - - PullElementFlags[PullElementFlags["ImplicitVariable"] = PullElementFlags.ClassConstructorVariable | PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "ImplicitVariable"; - PullElementFlags[PullElementFlags["SomeInitializedModule"] = PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "SomeInitializedModule"; - })(TypeScript.PullElementFlags || (TypeScript.PullElementFlags = {})); - var PullElementFlags = TypeScript.PullElementFlags; - - function hasModifier(modifiers, flag) { - for (var i = 0, n = modifiers.length; i < n; i++) { - if (TypeScript.hasFlag(modifiers[i], flag)) { - return true; - } - } - - return false; - } - TypeScript.hasModifier = hasModifier; - - (function (PullElementKind) { - PullElementKind[PullElementKind["None"] = 0] = "None"; - PullElementKind[PullElementKind["Global"] = 0] = "Global"; - - PullElementKind[PullElementKind["Script"] = 1 << 0] = "Script"; - PullElementKind[PullElementKind["Primitive"] = 1 << 1] = "Primitive"; - - PullElementKind[PullElementKind["Container"] = 1 << 2] = "Container"; - PullElementKind[PullElementKind["Class"] = 1 << 3] = "Class"; - PullElementKind[PullElementKind["Interface"] = 1 << 4] = "Interface"; - PullElementKind[PullElementKind["DynamicModule"] = 1 << 5] = "DynamicModule"; - PullElementKind[PullElementKind["Enum"] = 1 << 6] = "Enum"; - PullElementKind[PullElementKind["TypeAlias"] = 1 << 7] = "TypeAlias"; - PullElementKind[PullElementKind["ObjectLiteral"] = 1 << 8] = "ObjectLiteral"; - - PullElementKind[PullElementKind["Variable"] = 1 << 9] = "Variable"; - PullElementKind[PullElementKind["CatchVariable"] = 1 << 10] = "CatchVariable"; - PullElementKind[PullElementKind["Parameter"] = 1 << 11] = "Parameter"; - PullElementKind[PullElementKind["Property"] = 1 << 12] = "Property"; - PullElementKind[PullElementKind["TypeParameter"] = 1 << 13] = "TypeParameter"; - - PullElementKind[PullElementKind["Function"] = 1 << 14] = "Function"; - PullElementKind[PullElementKind["ConstructorMethod"] = 1 << 15] = "ConstructorMethod"; - PullElementKind[PullElementKind["Method"] = 1 << 16] = "Method"; - PullElementKind[PullElementKind["FunctionExpression"] = 1 << 17] = "FunctionExpression"; - - PullElementKind[PullElementKind["GetAccessor"] = 1 << 18] = "GetAccessor"; - PullElementKind[PullElementKind["SetAccessor"] = 1 << 19] = "SetAccessor"; - - PullElementKind[PullElementKind["CallSignature"] = 1 << 20] = "CallSignature"; - PullElementKind[PullElementKind["ConstructSignature"] = 1 << 21] = "ConstructSignature"; - PullElementKind[PullElementKind["IndexSignature"] = 1 << 22] = "IndexSignature"; - - PullElementKind[PullElementKind["ObjectType"] = 1 << 23] = "ObjectType"; - PullElementKind[PullElementKind["FunctionType"] = 1 << 24] = "FunctionType"; - PullElementKind[PullElementKind["ConstructorType"] = 1 << 25] = "ConstructorType"; - - PullElementKind[PullElementKind["EnumMember"] = 1 << 26] = "EnumMember"; - - PullElementKind[PullElementKind["WithBlock"] = 1 << 27] = "WithBlock"; - PullElementKind[PullElementKind["CatchBlock"] = 1 << 28] = "CatchBlock"; - - PullElementKind[PullElementKind["All"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Container | PullElementKind.Class | PullElementKind.Interface | PullElementKind.DynamicModule | PullElementKind.Enum | PullElementKind.TypeAlias | PullElementKind.ObjectLiteral | PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.TypeParameter | PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor | PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.EnumMember | PullElementKind.WithBlock | PullElementKind.CatchBlock] = "All"; - - PullElementKind[PullElementKind["SomeFunction"] = PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor] = "SomeFunction"; - - PullElementKind[PullElementKind["SomeValue"] = PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.EnumMember | PullElementKind.SomeFunction] = "SomeValue"; - - PullElementKind[PullElementKind["SomeType"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.ObjectLiteral | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.TypeParameter] = "SomeType"; - - PullElementKind[PullElementKind["AcceptableAlias"] = PullElementKind.Variable | PullElementKind.SomeFunction | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.Container | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "AcceptableAlias"; - - PullElementKind[PullElementKind["SomeContainer"] = PullElementKind.Container | PullElementKind.DynamicModule | PullElementKind.TypeAlias] = "SomeContainer"; - - PullElementKind[PullElementKind["SomeSignature"] = PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature] = "SomeSignature"; - - PullElementKind[PullElementKind["SomeTypeReference"] = PullElementKind.Interface | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "SomeTypeReference"; - - PullElementKind[PullElementKind["SomeInstantiatableType"] = PullElementKind.Class | PullElementKind.Interface | PullElementKind.TypeParameter] = "SomeInstantiatableType"; - })(TypeScript.PullElementKind || (TypeScript.PullElementKind = {})); - var PullElementKind = TypeScript.PullElementKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var pullDeclID = 0; - var sentinelEmptyPullDeclArray = []; - - var PullDecl = (function () { - function PullDecl(declName, displayName, kind, declFlags, semanticInfoChain) { - this.declID = pullDeclID++; - this.flags = 0 /* None */; - this.declGroups = null; - this.childDecls = null; - this.typeParameters = null; - this.synthesizedValDecl = null; - this.containerDecl = null; - this.childDeclTypeCache = null; - this.childDeclValueCache = null; - this.childDeclNamespaceCache = null; - this.childDeclTypeParameterCache = null; - this.name = declName; - this.kind = kind; - this.flags = declFlags; - this.semanticInfoChain = semanticInfoChain; - - if (displayName !== this.name) { - this.declDisplayName = displayName; - } - } - PullDecl.prototype.fileName = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentPath = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.isExternalModule = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getEnclosingDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype._getEnclosingDeclFromParentDecl = function () { - var decl = this; - while (decl) { - switch (decl.kind) { - default: - return decl; - case 512 /* Variable */: - case 8192 /* TypeParameter */: - case 2048 /* Parameter */: - case 128 /* TypeAlias */: - case 67108864 /* EnumMember */: - } - - decl = decl.getParentDecl(); - } - - TypeScript.Debug.fail(); - }; - - PullDecl.prototype.getDisplayName = function () { - return this.declDisplayName === undefined ? this.name : this.declDisplayName; - }; - - PullDecl.prototype.setSymbol = function (symbol) { - this.semanticInfoChain.setSymbolForDecl(this, symbol); - }; - - PullDecl.prototype.ensureSymbolIsBound = function () { - if (!this.hasBeenBound() && this.kind !== 1 /* Script */) { - var binder = this.semanticInfoChain.getBinder(); - binder.bindDeclToPullSymbol(this); - } - }; - - PullDecl.prototype.getSymbol = function () { - if (this.kind === 1 /* Script */) { - return null; - } - - this.ensureSymbolIsBound(); - - return this.semanticInfoChain.getSymbolForDecl(this); - }; - - PullDecl.prototype.hasSymbol = function () { - var symbol = this.semanticInfoChain.getSymbolForDecl(this); - return !!symbol; - }; - - PullDecl.prototype.setSignatureSymbol = function (signatureSymbol) { - this.semanticInfoChain.setSignatureSymbolForDecl(this, signatureSymbol); - }; - - PullDecl.prototype.getSignatureSymbol = function () { - this.ensureSymbolIsBound(); - return this.semanticInfoChain.getSignatureSymbolForDecl(this); - }; - - PullDecl.prototype.hasSignatureSymbol = function () { - var signatureSymbol = this.semanticInfoChain.getSignatureSymbolForDecl(this); - return !!signatureSymbol; - }; - - PullDecl.prototype.setFlags = function (flags) { - this.flags = flags; - }; - - PullDecl.prototype.setFlag = function (flags) { - this.flags |= flags; - }; - - PullDecl.prototype.setValueDecl = function (valDecl) { - this.synthesizedValDecl = valDecl; - valDecl.containerDecl = this; - }; - - PullDecl.prototype.getValueDecl = function () { - return this.synthesizedValDecl; - }; - - PullDecl.prototype.getContainerDecl = function () { - return this.containerDecl; - }; - - PullDecl.prototype.getChildDeclCache = function (declKind) { - if (declKind === 8192 /* TypeParameter */) { - if (!this.childDeclTypeParameterCache) { - this.childDeclTypeParameterCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeParameterCache; - } else if (TypeScript.hasFlag(declKind, 164 /* SomeContainer */)) { - if (!this.childDeclNamespaceCache) { - this.childDeclNamespaceCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclNamespaceCache; - } else if (TypeScript.hasFlag(declKind, 58728795 /* SomeType */)) { - if (!this.childDeclTypeCache) { - this.childDeclTypeCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeCache; - } else { - if (!this.childDeclValueCache) { - this.childDeclValueCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclValueCache; - } - }; - - PullDecl.prototype.addChildDecl = function (childDecl) { - if (childDecl.kind === 8192 /* TypeParameter */) { - if (!this.typeParameters) { - this.typeParameters = []; - } - this.typeParameters[this.typeParameters.length] = childDecl; - } else { - if (!this.childDecls) { - this.childDecls = []; - } - this.childDecls[this.childDecls.length] = childDecl; - } - - var declName = childDecl.name; - - if (!(childDecl.kind & 7340032 /* SomeSignature */)) { - var cache = this.getChildDeclCache(childDecl.kind); - var childrenOfName = cache[declName]; - if (!childrenOfName) { - childrenOfName = []; - } - - childrenOfName.push(childDecl); - cache[declName] = childrenOfName; - } - }; - - PullDecl.prototype.searchChildDecls = function (declName, searchKind) { - var cacheVal = null; - - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeCache ? this.childDeclTypeCache[declName] : null; - } else if (searchKind & 164 /* SomeContainer */) { - cacheVal = this.childDeclNamespaceCache ? this.childDeclNamespaceCache[declName] : null; - } else { - cacheVal = this.childDeclValueCache ? this.childDeclValueCache[declName] : null; - } - - if (cacheVal) { - return cacheVal; - } else { - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeParameterCache ? this.childDeclTypeParameterCache[declName] : null; - - if (cacheVal) { - return cacheVal; - } - } - - return sentinelEmptyPullDeclArray; - } - }; - - PullDecl.prototype.getChildDecls = function () { - return this.childDecls || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.getTypeParameters = function () { - return this.typeParameters || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.addVariableDeclToGroup = function (decl) { - if (!this.declGroups) { - this.declGroups = TypeScript.createIntrinsicsObject(); - } - - var declGroup = this.declGroups[decl.name]; - if (declGroup) { - declGroup.addDecl(decl); - } else { - declGroup = new PullDeclGroup(decl.name); - declGroup.addDecl(decl); - this.declGroups[decl.name] = declGroup; - } - }; - - PullDecl.prototype.getVariableDeclGroups = function () { - var declGroups = null; - - if (this.declGroups) { - for (var declName in this.declGroups) { - if (this.declGroups[declName]) { - if (declGroups === null) { - declGroups = []; - } - - declGroups.push(this.declGroups[declName].getDecls()); - } - } - } - - return declGroups || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.hasBeenBound = function () { - return this.hasSymbol() || this.hasSignatureSymbol(); - }; - - PullDecl.prototype.isSynthesized = function () { - return false; - }; - - PullDecl.prototype.ast = function () { - return this.semanticInfoChain.getASTForDecl(this); - }; - - PullDecl.prototype.isRootDecl = function () { - throw TypeScript.Errors.abstract(); - }; - return PullDecl; - })(); - TypeScript.PullDecl = PullDecl; - - var RootPullDecl = (function (_super) { - __extends(RootPullDecl, _super); - function RootPullDecl(name, fileName, kind, declFlags, semanticInfoChain, isExternalModule) { - _super.call(this, name, name, kind, declFlags, semanticInfoChain); - this.semanticInfoChain = semanticInfoChain; - this._isExternalModule = isExternalModule; - this._fileName = fileName; - } - RootPullDecl.prototype.fileName = function () { - return this._fileName; - }; - - RootPullDecl.prototype.getParentPath = function () { - return [this]; - }; - - RootPullDecl.prototype.getParentDecl = function () { - return null; - }; - - RootPullDecl.prototype.isExternalModule = function () { - return this._isExternalModule; - }; - - RootPullDecl.prototype.getEnclosingDecl = function () { - return this; - }; - - RootPullDecl.prototype.isRootDecl = function () { - return true; - }; - return RootPullDecl; - })(PullDecl); - TypeScript.RootPullDecl = RootPullDecl; - - var NormalPullDecl = (function (_super) { - __extends(NormalPullDecl, _super); - function NormalPullDecl(declName, displayName, kind, declFlags, parentDecl, addToParent) { - if (typeof addToParent === "undefined") { addToParent = true; } - _super.call(this, declName, displayName, kind, declFlags, parentDecl ? parentDecl.semanticInfoChain : null); - this.parentDecl = null; - this.parentPath = null; - - this.parentDecl = parentDecl; - if (addToParent) { - parentDecl.addChildDecl(this); - } - - if (this.parentDecl) { - if (this.parentDecl.isRootDecl()) { - this._rootDecl = this.parentDecl; - } else { - this._rootDecl = this.parentDecl._rootDecl; - } - } else { - TypeScript.Debug.assert(this.isSynthesized()); - this._rootDecl = null; - } - } - NormalPullDecl.prototype.fileName = function () { - return this._rootDecl.fileName(); - }; - - NormalPullDecl.prototype.getParentDecl = function () { - return this.parentDecl; - }; - - NormalPullDecl.prototype.getParentPath = function () { - if (!this.parentPath) { - var path = [this]; - var parentDecl = this.parentDecl; - - while (parentDecl) { - if (parentDecl && path[path.length - 1] !== parentDecl && !(parentDecl.kind & (256 /* ObjectLiteral */ | 8388608 /* ObjectType */))) { - path.unshift(parentDecl); - } - - parentDecl = parentDecl.getParentDecl(); - } - - this.parentPath = path; - } - - return this.parentPath; - }; - - NormalPullDecl.prototype.isExternalModule = function () { - return false; - }; - - NormalPullDecl.prototype.getEnclosingDecl = function () { - return this.parentDecl && this.parentDecl._getEnclosingDeclFromParentDecl(); - }; - - NormalPullDecl.prototype.isRootDecl = function () { - return false; - }; - return NormalPullDecl; - })(PullDecl); - TypeScript.NormalPullDecl = NormalPullDecl; - - var PullEnumElementDecl = (function (_super) { - __extends(PullEnumElementDecl, _super); - function PullEnumElementDecl(declName, displayName, parentDecl) { - _super.call(this, declName, displayName, 67108864 /* EnumMember */, 4 /* Public */, parentDecl); - this.constantValue = null; - } - return PullEnumElementDecl; - })(NormalPullDecl); - TypeScript.PullEnumElementDecl = PullEnumElementDecl; - - var PullFunctionExpressionDecl = (function (_super) { - __extends(PullFunctionExpressionDecl, _super); - function PullFunctionExpressionDecl(expressionName, declFlags, parentDecl, displayName) { - if (typeof displayName === "undefined") { displayName = ""; } - _super.call(this, "", displayName, 131072 /* FunctionExpression */, declFlags, parentDecl); - this.functionExpressionName = expressionName; - } - PullFunctionExpressionDecl.prototype.getFunctionExpressionName = function () { - return this.functionExpressionName; - }; - return PullFunctionExpressionDecl; - })(NormalPullDecl); - TypeScript.PullFunctionExpressionDecl = PullFunctionExpressionDecl; - - var PullSynthesizedDecl = (function (_super) { - __extends(PullSynthesizedDecl, _super); - function PullSynthesizedDecl(declName, displayName, kind, declFlags, parentDecl, semanticInfoChain) { - _super.call(this, declName, displayName, kind, declFlags, parentDecl, false); - this.semanticInfoChain = semanticInfoChain; - } - PullSynthesizedDecl.prototype.isSynthesized = function () { - return true; - }; - - PullSynthesizedDecl.prototype.fileName = function () { - return this._rootDecl ? this._rootDecl.fileName() : ""; - }; - return PullSynthesizedDecl; - })(NormalPullDecl); - TypeScript.PullSynthesizedDecl = PullSynthesizedDecl; - - var PullDeclGroup = (function () { - function PullDeclGroup(name) { - this.name = name; - this._decls = []; - } - PullDeclGroup.prototype.addDecl = function (decl) { - if (decl.name === this.name) { - this._decls[this._decls.length] = decl; - } - }; - - PullDeclGroup.prototype.getDecls = function () { - return this._decls; - }; - return PullDeclGroup; - })(); - TypeScript.PullDeclGroup = PullDeclGroup; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.pullSymbolID = 0; - TypeScript.sentinelEmptyArray = []; - - var PullSymbol = (function () { - function PullSymbol(name, declKind) { - this.pullSymbolID = ++TypeScript.pullSymbolID; - this._container = null; - this.type = null; - this._declarations = null; - this.isResolved = false; - this.isOptional = false; - this.inResolution = false; - this.isSynthesized = false; - this.isVarArg = false; - this.rootSymbol = null; - this._enclosingSignature = null; - this._docComments = null; - this.isPrinting = false; - this.name = name; - this.kind = declKind; - } - PullSymbol.prototype.isAny = function () { - return false; - }; - - PullSymbol.prototype.isType = function () { - return (this.kind & 58728795 /* SomeType */) !== 0; - }; - - PullSymbol.prototype.isTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isSignature = function () { - return (this.kind & 7340032 /* SomeSignature */) !== 0; - }; - - PullSymbol.prototype.isArrayNamedTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isPrimitive = function () { - return this.kind === 2 /* Primitive */; - }; - - PullSymbol.prototype.isAccessor = function () { - return false; - }; - - PullSymbol.prototype.isError = function () { - return false; - }; - - PullSymbol.prototype.isInterface = function () { - return this.kind === 16 /* Interface */; - }; - - PullSymbol.prototype.isMethod = function () { - return this.kind === 65536 /* Method */; - }; - - PullSymbol.prototype.isProperty = function () { - return this.kind === 4096 /* Property */; - }; - - PullSymbol.prototype.isAlias = function () { - return false; - }; - - PullSymbol.prototype.isContainer = function () { - return false; - }; - - PullSymbol.prototype.findAliasedTypeSymbols = function (scopeSymbol, skipScopeSymbolAliasesLookIn, lookIntoOnlyExportedAlias, aliasSymbols, visitedScopeDeclarations) { - if (typeof aliasSymbols === "undefined") { aliasSymbols = []; } - if (typeof visitedScopeDeclarations === "undefined") { visitedScopeDeclarations = []; } - var scopeDeclarations = scopeSymbol.getDeclarations(); - var scopeSymbolAliasesToLookIn = []; - - for (var i = 0; i < scopeDeclarations.length; i++) { - var scopeDecl = scopeDeclarations[i]; - if (!TypeScript.ArrayUtilities.contains(visitedScopeDeclarations, scopeDecl)) { - visitedScopeDeclarations.push(scopeDecl); - - var childDecls = scopeDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; j++) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */ && (!lookIntoOnlyExportedAlias || (childDecl.flags & 1 /* Exported */))) { - var symbol = childDecl.getSymbol(); - - if (PullContainerSymbol.usedAsSymbol(symbol, this) || (this.rootSymbol && PullContainerSymbol.usedAsSymbol(symbol, this.rootSymbol))) { - aliasSymbols.push(symbol); - return aliasSymbols; - } - - if (!skipScopeSymbolAliasesLookIn && PullSymbol._isExternalModuleReferenceAlias(symbol) && (!symbol.assignedContainer().hasExportAssignment() || (symbol.assignedContainer().getExportAssignedContainerSymbol() && symbol.assignedContainer().getExportAssignedContainerSymbol().kind === 32 /* DynamicModule */))) { - scopeSymbolAliasesToLookIn.push(symbol); - } - } - } - } - } - - for (var i = 0; i < scopeSymbolAliasesToLookIn.length; i++) { - var scopeSymbolAlias = scopeSymbolAliasesToLookIn[i]; - - aliasSymbols.push(scopeSymbolAlias); - var result = this.findAliasedTypeSymbols(scopeSymbolAlias.assignedContainer().hasExportAssignment() ? scopeSymbolAlias.assignedContainer().getExportAssignedContainerSymbol() : scopeSymbolAlias.assignedContainer(), false, true, aliasSymbols, visitedScopeDeclarations); - if (result) { - return result; - } - - aliasSymbols.pop(); - } - - return null; - }; - - PullSymbol.prototype.getExternalAliasedSymbols = function (scopeSymbol) { - if (!scopeSymbol) { - return null; - } - - var scopePath = scopeSymbol.pathToRoot(); - if (scopePath.length && scopePath[scopePath.length - 1].kind === 32 /* DynamicModule */) { - var symbols = this.findAliasedTypeSymbols(scopePath[scopePath.length - 1]); - return symbols; - } - - return null; - }; - - PullSymbol._isExternalModuleReferenceAlias = function (aliasSymbol) { - if (aliasSymbol) { - if (aliasSymbol.assignedValue()) { - return false; - } - - if (aliasSymbol.assignedType() && aliasSymbol.assignedType() !== aliasSymbol.assignedContainer()) { - return false; - } - - if (aliasSymbol.assignedContainer() && aliasSymbol.assignedContainer().kind !== 32 /* DynamicModule */) { - return false; - } - - return true; - } - - return false; - }; - - PullSymbol.prototype.getExportedInternalAliasSymbol = function (scopeSymbol) { - if (scopeSymbol) { - if (this.kind !== 128 /* TypeAlias */) { - var scopePath = scopeSymbol.pathToRoot(); - for (var i = 0; i < scopePath.length; i++) { - var internalAliases = this.findAliasedTypeSymbols(scopeSymbol, true, true); - if (internalAliases) { - TypeScript.Debug.assert(internalAliases.length === 1); - return internalAliases[0]; - } - } - } - } - - return null; - }; - - PullSymbol.prototype.getAliasSymbolName = function (scopeSymbol, aliasNameGetter, aliasPartsNameGetter, skipInternalAlias) { - if (!skipInternalAlias) { - var internalAlias = this.getExportedInternalAliasSymbol(scopeSymbol); - if (internalAlias) { - return aliasNameGetter(internalAlias); - } - } - - var externalAliases = this.getExternalAliasedSymbols(scopeSymbol); - - if (externalAliases && externalAliases[0] != this && PullSymbol._isExternalModuleReferenceAlias(externalAliases[externalAliases.length - 1])) { - var aliasFullName = aliasNameGetter(externalAliases[0]); - if (!aliasFullName) { - return null; - } - for (var i = 1, symbolsLen = externalAliases.length; i < symbolsLen; i++) { - aliasFullName = aliasFullName + "." + aliasPartsNameGetter(externalAliases[i]); - } - return aliasFullName; - } - - return null; - }; - - PullSymbol.prototype._getResolver = function () { - TypeScript.Debug.assert(this._declarations && this._declarations.length > 0); - return this._declarations[0].semanticInfoChain.getResolver(); - }; - - PullSymbol.prototype._resolveDeclaredSymbol = function () { - return this._getResolver().resolveDeclaredSymbol(this); - }; - - PullSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var aliasName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getName(); - }); - return aliasName || this.name; - }; - - PullSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var aliasDisplayName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getDisplayName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getDisplayName(); - }, skipInternalAliasName); - if (aliasDisplayName) { - return aliasDisplayName; - } - - var decls = this.getDeclarations(); - var name = decls.length && decls[0].getDisplayName(); - - return (name && name.length) ? name : this.name; - }; - - PullSymbol.prototype.getIsSpecialized = function () { - return false; - }; - - PullSymbol.prototype.getRootSymbol = function () { - if (!this.rootSymbol) { - return this; - } - return this.rootSymbol; - }; - PullSymbol.prototype.setRootSymbol = function (symbol) { - this.rootSymbol = symbol; - }; - - PullSymbol.prototype.setIsSynthesized = function (value) { - if (typeof value === "undefined") { value = true; } - TypeScript.Debug.assert(this.rootSymbol == null); - this.isSynthesized = value; - }; - - PullSymbol.prototype.getIsSynthesized = function () { - if (this.rootSymbol) { - return this.rootSymbol.getIsSynthesized(); - } - return this.isSynthesized; - }; - - PullSymbol.prototype.setEnclosingSignature = function (signature) { - this._enclosingSignature = signature; - }; - - PullSymbol.prototype.getEnclosingSignature = function () { - return this._enclosingSignature; - }; - - PullSymbol.prototype.addDeclaration = function (decl) { - TypeScript.Debug.assert(!!decl); - - if (this.rootSymbol) { - return; - } - - if (!this._declarations) { - this._declarations = [decl]; - } else { - this._declarations[this._declarations.length] = decl; - } - }; - - PullSymbol.prototype.getDeclarations = function () { - if (this.rootSymbol) { - return this.rootSymbol.getDeclarations(); - } - - if (!this._declarations) { - this._declarations = []; - } - - return this._declarations; - }; - - PullSymbol.prototype.hasDeclaration = function (decl) { - if (!this._declarations) { - return false; - } - - return TypeScript.ArrayUtilities.any(this._declarations, function (eachDecl) { - return eachDecl === decl; - }); - }; - - PullSymbol.prototype.setContainer = function (containerSymbol) { - if (this.rootSymbol) { - return; - } - - this._container = containerSymbol; - }; - - PullSymbol.prototype.getContainer = function () { - if (this.rootSymbol) { - return this.rootSymbol.getContainer(); - } - - return this._container; - }; - - PullSymbol.prototype.setResolved = function () { - this.isResolved = true; - this.inResolution = false; - }; - - PullSymbol.prototype.startResolving = function () { - this.inResolution = true; - }; - - PullSymbol.prototype.setUnresolved = function () { - this.isResolved = false; - this.inResolution = false; - }; - - PullSymbol.prototype.anyDeclHasFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (TypeScript.hasFlag(declarations[i].flags, flag)) { - return true; - } - } - return false; - }; - - PullSymbol.prototype.allDeclsHaveFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (!TypeScript.hasFlag(declarations[i].flags, flag)) { - return false; - } - } - return true; - }; - - PullSymbol.prototype.pathToRoot = function () { - var path = []; - var node = this; - while (node) { - if (node.isType()) { - var associatedContainerSymbol = node.getAssociatedContainerType(); - if (associatedContainerSymbol) { - node = associatedContainerSymbol; - } - } - path[path.length] = node; - var nodeKind = node.kind; - if (nodeKind === 2048 /* Parameter */) { - break; - } else { - node = node.getContainer(); - } - } - return path; - }; - - PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope = function (symbol, scopePath, endScopePathIndex) { - var declPath = scopePath[0].getDeclarations()[0].getParentPath(); - for (var i = 0, declIndex = declPath.length - 1; i <= endScopePathIndex; i++, declIndex--) { - if (scopePath[i].isContainer()) { - var scopeContainer = scopePath[i]; - if (symbol.isContainer()) { - var memberSymbol = scopeContainer.findContainedNonMemberContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol) { - return true; - } - } else if (symbol.isType()) { - var memberSymbol = scopeContainer.findContainedNonMemberType(symbol.name, 58728795 /* SomeType */); - var symbolRootType = TypeScript.PullHelpers.getRootType(symbol); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedType(symbol.name, 58728795 /* SomeType */); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType) { - return true; - } - } - } - } - - return false; - }; - - PullSymbol.prototype.findQualifyingSymbolPathInScopeSymbol = function (scopeSymbol) { - var thisPath = this.pathToRoot(); - if (thisPath.length === 1) { - return thisPath; - } - - var scopeSymbolPath; - if (scopeSymbol) { - scopeSymbolPath = scopeSymbol.pathToRoot(); - } else { - return thisPath; - } - - var thisCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(thisPath, function (thisNode) { - return TypeScript.ArrayUtilities.contains(scopeSymbolPath, thisNode); - }); - if (thisCommonAncestorIndex > 0) { - var thisCommonAncestor = thisPath[thisCommonAncestorIndex]; - var scopeCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(scopeSymbolPath, function (scopeNode) { - return scopeNode === thisCommonAncestor; - }); - TypeScript.Debug.assert(thisPath.length - thisCommonAncestorIndex === scopeSymbolPath.length - scopeCommonAncestorIndex); - - for (; thisCommonAncestorIndex < thisPath.length; thisCommonAncestorIndex++, scopeCommonAncestorIndex++) { - if (!PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope(thisPath[thisCommonAncestorIndex - 1], scopeSymbolPath, scopeCommonAncestorIndex)) { - break; - } - } - } - - if (thisCommonAncestorIndex >= 0 && thisCommonAncestorIndex < thisPath.length) { - return thisPath.slice(0, thisCommonAncestorIndex); - } else { - return thisPath; - } - }; - - PullSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var str = this.getNameAndTypeName(scopeSymbol); - return str; - }; - - PullSymbol.prototype.getNamePartForFullName = function () { - return this.getDisplayName(null, true); - }; - - PullSymbol.prototype.fullName = function (scopeSymbol) { - var _this = this; - var path = this.pathToRoot(); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol === _this ? null : symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - var scopedName = path[i].getNamePartForFullName(); - if (path[i].kind === 32 /* DynamicModule */ && !TypeScript.isQuoted(scopedName)) { - break; - } - - if (scopedName === "") { - break; - } - - fullName = scopedName + "." + fullName; - } - - fullName = fullName + this.getNamePartForFullName(); - return fullName; - }; - - PullSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - var path = this.findQualifyingSymbolPathInScopeSymbol(scopeSymbol); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var kind = path[i].kind; - if (kind === 4 /* Container */ || kind === 32 /* DynamicModule */) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, false, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - if (kind === 4 /* Container */) { - fullName = path[i].getDisplayName() + "." + fullName; - } else { - var displayName = path[i].getDisplayName(); - if (TypeScript.isQuoted(displayName)) { - fullName = displayName + "." + fullName; - } - break; - } - } else { - break; - } - } - fullName = fullName + this.getDisplayName(scopeSymbol, useConstraintInName, skipInternalAliasName); - return fullName; - }; - - PullSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) { - var name = this.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - return TypeScript.MemberName.create(name); - }; - - PullSymbol.prototype.getTypeName = function (scopeSymbol, getPrettyTypeName) { - var memberName = this.getTypeNameEx(scopeSymbol, getPrettyTypeName); - return memberName.toString(); - }; - - PullSymbol.prototype.getTypeNameEx = function (scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type) { - var memberName = getPrettyTypeName ? this.getTypeNameForFunctionSignature("", scopeSymbol, getPrettyTypeName) : null; - if (!memberName) { - memberName = type.getScopedNameEx(scopeSymbol, false, true, getPrettyTypeName); - } - - return memberName; - } - return TypeScript.MemberName.create(""); - }; - - PullSymbol.prototype.getTypeNameForFunctionSignature = function (prefix, scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type && !type.isNamedTypeSymbol() && this.kind !== 4096 /* Property */ && this.kind !== 512 /* Variable */ && this.kind !== 2048 /* Parameter */) { - var signatures = type.getCallSignatures(); - if (signatures.length === 1 || (getPrettyTypeName && signatures.length)) { - var typeName = new TypeScript.MemberNameArray(); - var signatureName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, prefix, false, false, scopeSymbol, getPrettyTypeName); - typeName.addAll(signatureName); - return typeName; - } - } - - return null; - }; - - PullSymbol.prototype.getNameAndTypeName = function (scopeSymbol) { - var nameAndTypeName = this.getNameAndTypeNameEx(scopeSymbol); - return nameAndTypeName.toString(); - }; - - PullSymbol.prototype.getNameAndTypeNameEx = function (scopeSymbol) { - var type = this.type; - var nameStr = this.getDisplayName(scopeSymbol); - if (type) { - nameStr = nameStr + (this.isOptional ? "?" : ""); - var memberName = this.getTypeNameForFunctionSignature(nameStr, scopeSymbol); - if (!memberName) { - var typeNameEx = type.getScopedNameEx(scopeSymbol); - memberName = TypeScript.MemberName.create(typeNameEx, nameStr + ": ", ""); - } - return memberName; - } - return TypeScript.MemberName.create(nameStr); - }; - - PullSymbol.getTypeParameterString = function (typars, scopeSymbol, useContraintInName) { - return PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, undefined, useContraintInName).toString(); - }; - - PullSymbol.getTypeParameterStringEx = function (typeParameters, scopeSymbol, getTypeParamMarkerInfo, useContraintInName) { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = ""; - - if (typeParameters && typeParameters.length) { - builder.add(TypeScript.MemberName.create("<")); - - for (var i = 0; i < typeParameters.length; i++) { - if (i) { - builder.add(TypeScript.MemberName.create(", ")); - } - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - - builder.add(typeParameters[i].getScopedNameEx(scopeSymbol, false, useContraintInName)); - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - } - - builder.add(TypeScript.MemberName.create(">")); - } - - return builder; - }; - - PullSymbol.getIsExternallyVisible = function (symbol, fromIsExternallyVisibleSymbol, inIsExternallyVisibleSymbols) { - if (inIsExternallyVisibleSymbols) { - for (var i = 0; i < inIsExternallyVisibleSymbols.length; i++) { - if (inIsExternallyVisibleSymbols[i] === symbol) { - return true; - } - } - } else { - inIsExternallyVisibleSymbols = []; - } - - if (fromIsExternallyVisibleSymbol === symbol) { - return true; - } - - inIsExternallyVisibleSymbols.push(fromIsExternallyVisibleSymbol); - - var result = symbol.isExternallyVisible(inIsExternallyVisibleSymbols); - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(inIsExternallyVisibleSymbols) === fromIsExternallyVisibleSymbol); - inIsExternallyVisibleSymbols.pop(); - - return result; - }; - - PullSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - var kind = this.kind; - if (kind === 2 /* Primitive */) { - return true; - } - - if (this.rootSymbol) { - return PullSymbol.getIsExternallyVisible(this.rootSymbol, this, inIsExternallyVisibleSymbols); - } - - if (this.isType()) { - var associatedContainerSymbol = this.getAssociatedContainerType(); - if (associatedContainerSymbol) { - return PullSymbol.getIsExternallyVisible(associatedContainerSymbol, this, inIsExternallyVisibleSymbols); - } - } - - if (this.anyDeclHasFlag(2 /* Private */)) { - return false; - } - - var container = this.getContainer(); - if (container === null) { - var decls = this.getDeclarations(); - if (decls.length) { - var parentDecl = decls[0].getParentDecl(); - if (parentDecl) { - var parentSymbol = parentDecl.getSymbol(); - if (!parentSymbol || parentDecl.kind === 1 /* Script */) { - return true; - } - - return PullSymbol.getIsExternallyVisible(parentSymbol, this, inIsExternallyVisibleSymbols); - } - } - - return true; - } - - if (container.kind === 32 /* DynamicModule */ || (container.getAssociatedContainerType() && container.getAssociatedContainerType().kind === 32 /* DynamicModule */)) { - var containerSymbol = container.kind === 32 /* DynamicModule */ ? container : container.getAssociatedContainerType(); - if (PullContainerSymbol.usedAsSymbol(containerSymbol, this)) { - return true; - } - } - - if (!this.anyDeclHasFlag(1 /* Exported */) && kind !== 4096 /* Property */ && kind !== 65536 /* Method */) { - return false; - } - - return PullSymbol.getIsExternallyVisible(container, this, inIsExternallyVisibleSymbols); - }; - - PullSymbol.prototype.getDocCommentsOfDecl = function (decl) { - var ast = decl.ast(); - - if (ast) { - var enclosingModuleDeclaration = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - if (TypeScript.ASTHelpers.isLastNameOfModule(enclosingModuleDeclaration, ast)) { - return TypeScript.ASTHelpers.docComments(enclosingModuleDeclaration); - } - - if (ast.kind() !== 130 /* ModuleDeclaration */ || decl.kind !== 512 /* Variable */) { - return TypeScript.ASTHelpers.docComments(ast); - } - } - - return []; - }; - - PullSymbol.prototype.getDocCommentArray = function (symbol) { - var docComments = []; - if (!symbol) { - return docComments; - } - - var isParameter = symbol.kind === 2048 /* Parameter */; - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (isParameter && decls[i].kind === 4096 /* Property */) { - continue; - } - docComments = docComments.concat(this.getDocCommentsOfDecl(decls[i])); - } - return docComments; - }; - - PullSymbol.getDefaultConstructorSymbolForDocComments = function (classSymbol) { - if (classSymbol.getHasDefaultConstructor()) { - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - return PullSymbol.getDefaultConstructorSymbolForDocComments(extendedTypes[0]); - } - } - - return classSymbol.type.getConstructSignatures()[0]; - }; - - PullSymbol.prototype.getDocCommentText = function (comments) { - var docCommentText = new Array(); - for (var c = 0; c < comments.length; c++) { - var commentText = this.getDocCommentTextValue(comments[c]); - if (commentText !== "") { - docCommentText.push(commentText); - } - } - return docCommentText.join("\n"); - }; - - PullSymbol.prototype.getDocCommentTextValue = function (comment) { - return this.cleanJSDocComment(comment.fullText()); - }; - - PullSymbol.prototype.docComments = function (useConstructorAsClass) { - var decls = this.getDeclarations(); - if (useConstructorAsClass && decls.length && decls[0].kind === 32768 /* ConstructorMethod */) { - var classDecl = decls[0].getParentDecl(); - return this.getDocCommentText(this.getDocCommentsOfDecl(classDecl)); - } - - if (this._docComments === null) { - var docComments = ""; - if (!useConstructorAsClass && this.kind === 2097152 /* ConstructSignature */ && decls.length && decls[0].kind === 8 /* Class */) { - var classSymbol = this.returnType; - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - docComments = extendedTypes[0].getConstructorMethod().docComments(); - } else { - docComments = ""; - } - } else if (this.kind === 2048 /* Parameter */) { - var parameterComments = []; - - var funcContainer = this.getEnclosingSignature(); - var funcDocComments = this.getDocCommentArray(funcContainer); - var paramComment = this.getParameterDocCommentText(this.getDisplayName(), funcDocComments); - if (paramComment != "") { - parameterComments.push(paramComment); - } - - var paramSelfComment = this.getDocCommentText(this.getDocCommentArray(this)); - if (paramSelfComment != "") { - parameterComments.push(paramSelfComment); - } - docComments = parameterComments.join("\n"); - } else { - var getSymbolComments = true; - if (this.kind === 16777216 /* FunctionType */) { - var functionSymbol = this.getFunctionSymbol(); - - if (functionSymbol) { - docComments = functionSymbol._docComments || ""; - getSymbolComments = false; - } else { - var declarationList = this.getDeclarations(); - if (declarationList.length > 0) { - docComments = declarationList[0].getSymbol()._docComments || ""; - getSymbolComments = false; - } - } - } - if (getSymbolComments) { - docComments = this.getDocCommentText(this.getDocCommentArray(this)); - if (docComments === "") { - if (this.kind === 1048576 /* CallSignature */) { - var callTypeSymbol = this.functionType; - if (callTypeSymbol && callTypeSymbol.getCallSignatures().length === 1) { - docComments = callTypeSymbol.docComments(); - } - } - } - } - } - - this._docComments = docComments; - } - - return this._docComments; - }; - - PullSymbol.prototype.getParameterDocCommentText = function (param, fncDocComments) { - if (fncDocComments.length === 0 || fncDocComments[0].kind() !== 6 /* MultiLineCommentTrivia */) { - return ""; - } - - for (var i = 0; i < fncDocComments.length; i++) { - var commentContents = fncDocComments[i].fullText(); - for (var j = commentContents.indexOf("@param", 0); 0 <= j; j = commentContents.indexOf("@param", j)) { - j += 6; - if (!this.isSpaceChar(commentContents, j)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j); - if (j === -1) { - break; - } - - if (commentContents.charCodeAt(j) === 123 /* openBrace */) { - j++; - - var charCode = 0; - for (var curlies = 1; j < commentContents.length; j++) { - charCode = commentContents.charCodeAt(j); - - if (charCode === 123 /* openBrace */) { - curlies++; - continue; - } - - if (charCode === 125 /* closeBrace */) { - curlies--; - if (curlies === 0) { - break; - } else { - continue; - } - } - - if (charCode === 64 /* at */) { - break; - } - } - - if (j === commentContents.length) { - break; - } - - if (charCode === 64 /* at */) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + 1); - if (j === -1) { - break; - } - } - - if (param !== commentContents.substr(j, param.length) || !this.isSpaceChar(commentContents, j + param.length)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + param.length); - if (j === -1) { - return ""; - } - - var endOfParam = commentContents.indexOf("@", j); - var paramHelpString = commentContents.substring(j, endOfParam < 0 ? commentContents.length : endOfParam); - - var paramSpacesToRemove = undefined; - var paramLineIndex = commentContents.substring(0, j).lastIndexOf("\n") + 1; - if (paramLineIndex !== 0) { - if (paramLineIndex < j && commentContents.charAt(paramLineIndex + 1) === "\r") { - paramLineIndex++; - } - } - var startSpaceRemovalIndex = this.consumeLeadingSpace(commentContents, paramLineIndex); - if (startSpaceRemovalIndex !== j && commentContents.charAt(startSpaceRemovalIndex) === "*") { - paramSpacesToRemove = j - startSpaceRemovalIndex - 1; - } - - return this.cleanJSDocComment(paramHelpString, paramSpacesToRemove); - } - } - - return ""; - }; - - PullSymbol.prototype.cleanJSDocComment = function (content, spacesToRemove) { - var docCommentLines = new Array(); - content = content.replace("/**", ""); - if (content.length >= 2 && content.charAt(content.length - 1) === "/" && content.charAt(content.length - 2) === "*") { - content = content.substring(0, content.length - 2); - } - var lines = content.split("\n"); - var inParamTag = false; - for (var l = 0; l < lines.length; l++) { - var line = lines[l]; - var cleanLinePos = this.cleanDocCommentLine(line, true, spacesToRemove); - if (!cleanLinePos) { - continue; - } - - var docCommentText = ""; - var prevPos = cleanLinePos.start; - for (var i = line.indexOf("@", cleanLinePos.start); 0 <= i && i < cleanLinePos.end; i = line.indexOf("@", i + 1)) { - var wasInParamtag = inParamTag; - - if (line.indexOf("param", i + 1) === i + 1 && this.isSpaceChar(line, i + 6)) { - if (!wasInParamtag) { - docCommentText += line.substring(prevPos, i); - } - - prevPos = i; - inParamTag = true; - } else if (wasInParamtag) { - prevPos = i; - inParamTag = false; - } - } - - if (!inParamTag) { - docCommentText += line.substring(prevPos, cleanLinePos.end); - } - - var newCleanPos = this.cleanDocCommentLine(docCommentText, false); - if (newCleanPos) { - if (spacesToRemove === undefined) { - spacesToRemove = cleanLinePos.jsDocSpacesRemoved; - } - docCommentLines.push(docCommentText); - } - } - - return docCommentLines.join("\n"); - }; - - PullSymbol.prototype.consumeLeadingSpace = function (line, startIndex, maxSpacesToRemove) { - var endIndex = line.length; - if (maxSpacesToRemove !== undefined) { - endIndex = TypeScript.MathPrototype.min(startIndex + maxSpacesToRemove, endIndex); - } - - for (; startIndex < endIndex; startIndex++) { - var charCode = line.charCodeAt(startIndex); - if (charCode !== 32 /* space */ && charCode !== 9 /* tab */) { - return startIndex; - } - } - - if (endIndex !== line.length) { - return endIndex; - } - - return -1; - }; - - PullSymbol.prototype.isSpaceChar = function (line, index) { - var length = line.length; - if (index < length) { - var charCode = line.charCodeAt(index); - - return charCode === 32 /* space */ || charCode === 9 /* tab */; - } - - return index === length; - }; - - PullSymbol.prototype.cleanDocCommentLine = function (line, jsDocStyleComment, jsDocLineSpaceToRemove) { - var nonSpaceIndex = this.consumeLeadingSpace(line, 0); - if (nonSpaceIndex !== -1) { - var jsDocSpacesRemoved = nonSpaceIndex; - if (jsDocStyleComment && line.charAt(nonSpaceIndex) === '*') { - var startIndex = nonSpaceIndex + 1; - nonSpaceIndex = this.consumeLeadingSpace(line, startIndex, jsDocLineSpaceToRemove); - - if (nonSpaceIndex !== -1) { - jsDocSpacesRemoved = nonSpaceIndex - startIndex; - } else { - return null; - } - } - - return { - start: nonSpaceIndex, - end: line.charAt(line.length - 1) === "\r" ? line.length - 1 : line.length, - jsDocSpacesRemoved: jsDocSpacesRemoved - }; - } - - return null; - }; - return PullSymbol; - })(); - TypeScript.PullSymbol = PullSymbol; - - - - var PullSignatureSymbol = (function (_super) { - __extends(PullSignatureSymbol, _super); - function PullSignatureSymbol(kind, _isDefinition) { - if (typeof _isDefinition === "undefined") { _isDefinition = false; } - _super.call(this, "", kind); - this._isDefinition = _isDefinition; - this._memberTypeParameterNameCache = null; - this._stringConstantOverload = undefined; - this.parameters = TypeScript.sentinelEmptyArray; - this._typeParameters = null; - this.returnType = null; - this.functionType = null; - this.hasOptionalParam = false; - this.nonOptionalParamCount = 0; - this.hasVarArgs = false; - this._allowedToReferenceTypeParameters = null; - this._instantiationCache = null; - this.hasBeenChecked = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - } - PullSignatureSymbol.prototype.isDefinition = function () { - return this._isDefinition; - }; - - PullSignatureSymbol.prototype.isGeneric = function () { - var typeParameters = this.getTypeParameters(); - return !!typeParameters && typeParameters.length !== 0; - }; - - PullSignatureSymbol.prototype.addParameter = function (parameter, isOptional) { - if (typeof isOptional === "undefined") { isOptional = false; } - if (this.parameters === TypeScript.sentinelEmptyArray) { - this.parameters = []; - } - - this.parameters[this.parameters.length] = parameter; - this.hasOptionalParam = isOptional; - - if (!parameter.getEnclosingSignature()) { - parameter.setEnclosingSignature(this); - } - - if (!isOptional) { - this.nonOptionalParamCount++; - } - }; - - PullSignatureSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!this._typeParameters) { - this._typeParameters = []; - } - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - - this._memberTypeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullSignatureSymbol.prototype.addTypeParametersFromReturnType = function () { - var typeParameters = this.returnType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addTypeParameter(typeParameters[i]); - } - }; - - PullSignatureSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - this._typeParameters = []; - } - - return this._typeParameters; - }; - - PullSignatureSymbol.prototype.findTypeParameter = function (name) { - var memberSymbol; - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - - for (var i = 0; i < this.getTypeParameters().length; i++) { - this._memberTypeParameterNameCache[this._typeParameters[i].getName()] = this._typeParameters[i]; - } - } - - memberSymbol = this._memberTypeParameterNameCache[name]; - - return memberSymbol; - }; - - PullSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullSignatureSymbol.prototype.addSpecialization = function (specializedVersionOfThisSignature, typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - this._instantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisSignature; - }; - - PullSignatureSymbol.prototype.getSpecialization = function (typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - return null; - } - - var result = this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - }; - - PullSignatureSymbol.prototype.isStringConstantOverloadSignature = function () { - if (this._stringConstantOverload === undefined) { - var params = this.parameters; - this._stringConstantOverload = false; - for (var i = 0; i < params.length; i++) { - var paramType = params[i].type; - if (paramType && paramType.isPrimitive() && paramType.isStringConstant()) { - this._stringConstantOverload = true; - } - } - } - - return this._stringConstantOverload; - }; - - PullSignatureSymbol.prototype.getParameterTypeAtIndex = function (iParam) { - if (iParam < this.parameters.length - 1 || (iParam < this.parameters.length && !this.hasVarArgs)) { - return this.parameters[iParam].type; - } else if (this.hasVarArgs) { - var paramType = this.parameters[this.parameters.length - 1].type; - if (paramType.isArrayNamedTypeReference()) { - paramType = paramType.getElementType(); - } - return paramType; - } - - return null; - }; - - PullSignatureSymbol.getSignatureTypeMemberName = function (candidateSignature, signatures, scopeSymbol) { - var allMemberNames = new TypeScript.MemberNameArray(); - var signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, "", false, false, scopeSymbol, true, candidateSignature); - allMemberNames.addAll(signatureMemberName); - return allMemberNames; - }; - - PullSignatureSymbol.getSignaturesTypeNameEx = function (signatures, prefix, shortform, brackets, scopeSymbol, getPrettyTypeName, candidateSignature) { - var result = []; - if (!signatures) { - return result; - } - - var len = signatures.length; - if (!getPrettyTypeName && len > 1) { - shortform = false; - } - - var foundDefinition = false; - if (candidateSignature && candidateSignature.isDefinition() && len > 1) { - candidateSignature = null; - } - - for (var i = 0; i < len; i++) { - if (len > 1 && signatures[i].isDefinition()) { - foundDefinition = true; - continue; - } - - var signature = signatures[i]; - if (getPrettyTypeName && candidateSignature) { - signature = candidateSignature; - } - - result.push(signature.getSignatureTypeNameEx(prefix, shortform, brackets, scopeSymbol)); - if (getPrettyTypeName) { - break; - } - } - - if (getPrettyTypeName && result.length && len > 1) { - var lastMemberName = result[result.length - 1]; - for (var i = i + 1; i < len; i++) { - if (signatures[i].isDefinition()) { - foundDefinition = true; - break; - } - } - var overloadString = TypeScript.getLocalizedText(TypeScript.DiagnosticCode._0_overload_s, [foundDefinition ? len - 2 : len - 1]); - lastMemberName.add(TypeScript.MemberName.create(overloadString)); - } - - return result; - }; - - PullSignatureSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getSignatureTypeNameEx(this.getScopedNameEx().toString(), false, false, scopeSymbol, undefined, useConstraintInName).toString(); - return s; - }; - - PullSignatureSymbol.prototype.getSignatureTypeNameEx = function (prefix, shortform, brackets, scopeSymbol, getParamMarkerInfo, getTypeParamMarkerInfo) { - var typeParamterBuilder = new TypeScript.MemberNameArray(); - - typeParamterBuilder.add(PullSymbol.getTypeParameterStringEx(this.getTypeParameters(), scopeSymbol, getTypeParamMarkerInfo, true)); - - if (brackets) { - typeParamterBuilder.add(TypeScript.MemberName.create("[")); - } else { - typeParamterBuilder.add(TypeScript.MemberName.create("(")); - } - - var builder = new TypeScript.MemberNameArray(); - builder.prefix = prefix; - - if (getTypeParamMarkerInfo) { - builder.prefix = prefix; - builder.addAll(typeParamterBuilder.entries); - } else { - builder.prefix = prefix + typeParamterBuilder.toString(); - } - - var params = this.parameters; - var paramLen = params.length; - for (var i = 0; i < paramLen; i++) { - var paramType = params[i].type; - var typeString = paramType ? ": " : ""; - var paramIsVarArg = params[i].isVarArg; - var varArgPrefix = paramIsVarArg ? "..." : ""; - var optionalString = (!paramIsVarArg && params[i].isOptional) ? "?" : ""; - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - builder.add(TypeScript.MemberName.create(varArgPrefix + params[i].getScopedNameEx(scopeSymbol).toString() + optionalString + typeString)); - if (paramType) { - builder.add(paramType.getScopedNameEx(scopeSymbol)); - } - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - if (i < paramLen - 1) { - builder.add(TypeScript.MemberName.create(", ")); - } - } - - if (shortform) { - if (brackets) { - builder.add(TypeScript.MemberName.create("] => ")); - } else { - builder.add(TypeScript.MemberName.create(") => ")); - } - } else { - if (brackets) { - builder.add(TypeScript.MemberName.create("]: ")); - } else { - builder.add(TypeScript.MemberName.create("): ")); - } - } - - if (this.returnType) { - builder.add(this.returnType.getScopedNameEx(scopeSymbol)); - } else { - builder.add(TypeScript.MemberName.create("any")); - } - - return builder; - }; - - PullSignatureSymbol.prototype.forAllParameterTypes = function (length, predicate) { - if (this.parameters.length < length && !this.hasVarArgs) { - length = this.parameters.length; - } - - for (var i = 0; i < length; i++) { - var paramType = this.getParameterTypeAtIndex(i); - if (!predicate(paramType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.forAllCorrespondingParameterTypesInThisAndOtherSignature = function (otherSignature, predicate) { - var length; - if (this.hasVarArgs) { - length = otherSignature.hasVarArgs ? Math.max(this.parameters.length, otherSignature.parameters.length) : otherSignature.parameters.length; - } else { - length = otherSignature.hasVarArgs ? this.parameters.length : Math.min(this.parameters.length, otherSignature.parameters.length); - } - - for (var i = 0; i < length; i++) { - var thisParamType = this.getParameterTypeAtIndex(i); - var otherParamType = otherSignature.getParameterTypeAtIndex(i); - if (!predicate(thisParamType, otherParamType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap) !== 0; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap) { - var signature = this; - if (signature.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap); - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap) { - var signature = this; - signature.inWrapCheck = true; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(signature); - var wrappingTypeParameterID = signature.returnType ? signature.returnType.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - - var parameters = signature.parameters; - for (var i = 0; !wrappingTypeParameterID && i < parameters.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(parameters[i]); - wrappingTypeParameterID = parameters[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - signature.inWrapCheck = false; - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - if (this.returnType && this.returnType._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - - var parameters = this.parameters; - - for (var i = 0; i < parameters.length; i++) { - if (parameters[i].type && parameters[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - return PullSignatureSymbol; - })(PullSymbol); - TypeScript.PullSignatureSymbol = PullSignatureSymbol; - - var PullTypeSymbol = (function (_super) { - __extends(PullTypeSymbol, _super); - function PullTypeSymbol(name, kind) { - _super.call(this, name, kind); - this._members = TypeScript.sentinelEmptyArray; - this._enclosedMemberTypes = null; - this._enclosedMemberContainers = null; - this._typeParameters = null; - this._allowedToReferenceTypeParameters = null; - this._specializedVersionsOfThisType = null; - this._arrayVersionOfThisType = null; - this._implementedTypes = null; - this._extendedTypes = null; - this._typesThatExplicitlyImplementThisType = null; - this._typesThatExtendThisType = null; - this._callSignatures = null; - this._allCallSignatures = null; - this._constructSignatures = null; - this._allConstructSignatures = null; - this._indexSignatures = null; - this._allIndexSignatures = null; - this._allIndexSignaturesOfAugmentedType = null; - this._memberNameCache = null; - this._enclosedTypeNameCache = null; - this._enclosedContainerCache = null; - this._typeParameterNameCache = null; - this._containedNonMemberNameCache = null; - this._containedNonMemberTypeNameCache = null; - this._containedNonMemberContainerCache = null; - this._simpleInstantiationCache = null; - this._complexInstantiationCache = null; - this._hasGenericSignature = false; - this._hasGenericMember = false; - this._hasBaseTypeConflict = false; - this._knownBaseTypeCount = 0; - this._associatedContainerTypeSymbol = null; - this._constructorMethod = null; - this._hasDefaultConstructor = false; - this._functionSymbol = null; - this._inMemberTypeNameEx = false; - this.inSymbolPrivacyCheck = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - this.typeReference = null; - this._widenedType = null; - this._isArrayNamedTypeReference = undefined; - this.type = this; - } - PullTypeSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArrayNamedTypeReference === undefined) { - this._isArrayNamedTypeReference = this.computeIsArrayNamedTypeReference(); - } - - return this._isArrayNamedTypeReference; - }; - - PullTypeSymbol.prototype.computeIsArrayNamedTypeReference = function () { - var typeArgs = this.getTypeArguments(); - if (typeArgs && this.getTypeArguments().length === 1 && this.name === "Array") { - var declaration = this.getDeclarations()[0]; - - if (declaration && declaration.getParentDecl() && declaration.getParentDecl().getParentDecl() === null) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.isType = function () { - return true; - }; - PullTypeSymbol.prototype.isClass = function () { - return this.kind === 8 /* Class */ || (this._constructorMethod !== null); - }; - PullTypeSymbol.prototype.isFunction = function () { - return (this.kind & (33554432 /* ConstructorType */ | 16777216 /* FunctionType */)) !== 0; - }; - PullTypeSymbol.prototype.isConstructor = function () { - return this.kind === 33554432 /* ConstructorType */ || (this._associatedContainerTypeSymbol && this._associatedContainerTypeSymbol.isClass()); - }; - PullTypeSymbol.prototype.isTypeParameter = function () { - return false; - }; - PullTypeSymbol.prototype.isTypeVariable = function () { - return false; - }; - PullTypeSymbol.prototype.isError = function () { - return false; - }; - PullTypeSymbol.prototype.isEnum = function () { - return this.kind === 64 /* Enum */; - }; - - PullTypeSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullTypeSymbol.prototype.isObject = function () { - return TypeScript.hasFlag(this.kind, 8 /* Class */ | 33554432 /* ConstructorType */ | 64 /* Enum */ | 16777216 /* FunctionType */ | 16 /* Interface */ | 8388608 /* ObjectType */ | 256 /* ObjectLiteral */); - }; - - PullTypeSymbol.prototype.isFunctionType = function () { - return this.getCallSignatures().length > 0 || this.getConstructSignatures().length > 0; - }; - - PullTypeSymbol.prototype.getKnownBaseTypeCount = function () { - return this._knownBaseTypeCount; - }; - PullTypeSymbol.prototype.resetKnownBaseTypeCount = function () { - this._knownBaseTypeCount = 0; - }; - PullTypeSymbol.prototype.incrementKnownBaseCount = function () { - this._knownBaseTypeCount++; - }; - - PullTypeSymbol.prototype.setHasBaseTypeConflict = function () { - this._hasBaseTypeConflict = true; - }; - PullTypeSymbol.prototype.hasBaseTypeConflict = function () { - return this._hasBaseTypeConflict; - }; - - PullTypeSymbol.prototype.hasMembers = function () { - if (this._members !== TypeScript.sentinelEmptyArray) { - return true; - } - - var parents = this.getExtendedTypes(); - - for (var i = 0; i < parents.length; i++) { - if (parents[i].hasMembers()) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.setHasGenericSignature = function () { - this._hasGenericSignature = true; - }; - PullTypeSymbol.prototype.getHasGenericSignature = function () { - return this._hasGenericSignature; - }; - - PullTypeSymbol.prototype.setHasGenericMember = function () { - this._hasGenericMember = true; - }; - PullTypeSymbol.prototype.getHasGenericMember = function () { - return this._hasGenericMember; - }; - - PullTypeSymbol.prototype.setAssociatedContainerType = function (type) { - this._associatedContainerTypeSymbol = type; - }; - - PullTypeSymbol.prototype.getAssociatedContainerType = function () { - return this._associatedContainerTypeSymbol; - }; - - PullTypeSymbol.prototype.getArrayType = function () { - return this._arrayVersionOfThisType; - }; - - PullTypeSymbol.prototype.getElementType = function () { - return null; - }; - - PullTypeSymbol.prototype.setArrayType = function (arrayType) { - this._arrayVersionOfThisType = arrayType; - }; - - PullTypeSymbol.prototype.getFunctionSymbol = function () { - return this._functionSymbol; - }; - - PullTypeSymbol.prototype.setFunctionSymbol = function (symbol) { - if (symbol) { - this._functionSymbol = symbol; - } - }; - - PullTypeSymbol.prototype.findContainedNonMember = function (name) { - if (!this._containedNonMemberNameCache) { - return null; - } - - return this._containedNonMemberNameCache[name]; - }; - - PullTypeSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberTypeNameCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberTypeNameCache[typeName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberContainerCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberContainerCache[containerName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.addMember = function (memberSymbol) { - if (!memberSymbol) { - return; - } - - memberSymbol.setContainer(this); - - if (!this._memberNameCache) { - this._memberNameCache = TypeScript.createIntrinsicsObject(); - } - - if (this._members === TypeScript.sentinelEmptyArray) { - this._members = []; - } - - this._members.push(memberSymbol); - this._memberNameCache[memberSymbol.name] = memberSymbol; - }; - - PullTypeSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - if (!enclosedType) { - return; - } - - enclosedType.setContainer(this); - - if (!this._enclosedTypeNameCache) { - this._enclosedTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberTypes) { - this._enclosedMemberTypes = []; - } - - this._enclosedMemberTypes[this._enclosedMemberTypes.length] = enclosedType; - this._enclosedTypeNameCache[enclosedType.name] = enclosedType; - }; - - PullTypeSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - if (!enclosedContainer) { - return; - } - - enclosedContainer.setContainer(this); - - if (!this._enclosedContainerCache) { - this._enclosedContainerCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberContainers) { - this._enclosedMemberContainers = []; - } - - this._enclosedMemberContainers[this._enclosedMemberContainers.length] = enclosedContainer; - this._enclosedContainerCache[enclosedContainer.name] = enclosedContainer; - }; - - PullTypeSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - if (!enclosedNonMember) { - return; - } - - enclosedNonMember.setContainer(this); - - if (!this._containedNonMemberNameCache) { - this._containedNonMemberNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberNameCache[enclosedNonMember.name] = enclosedNonMember; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - if (!enclosedNonMemberType) { - return; - } - - enclosedNonMemberType.setContainer(this); - - if (!this._containedNonMemberTypeNameCache) { - this._containedNonMemberTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberTypeNameCache[enclosedNonMemberType.name] = enclosedNonMemberType; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - if (!enclosedNonMemberContainer) { - return; - } - - enclosedNonMemberContainer.setContainer(this); - - if (!this._containedNonMemberContainerCache) { - this._containedNonMemberContainerCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberContainerCache[enclosedNonMemberContainer.name] = enclosedNonMemberContainer; - }; - - PullTypeSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!typeParameter) { - return; - } - - if (!typeParameter.getContainer()) { - typeParameter.setContainer(this); - } - - if (!this._typeParameterNameCache) { - this._typeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._typeParameters) { - this._typeParameters = []; - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - this._typeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullTypeSymbol.prototype.getMembers = function () { - return this._members; - }; - - PullTypeSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - this._hasDefaultConstructor = hasOne; - }; - - PullTypeSymbol.prototype.getHasDefaultConstructor = function () { - return this._hasDefaultConstructor; - }; - - PullTypeSymbol.prototype.getConstructorMethod = function () { - return this._constructorMethod; - }; - - PullTypeSymbol.prototype.setConstructorMethod = function (constructorMethod) { - this._constructorMethod = constructorMethod; - }; - - PullTypeSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - return TypeScript.sentinelEmptyArray; - } - - return this._typeParameters; - }; - - PullTypeSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - if (!!(this.kind && 8216 /* SomeInstantiatableType */) && this.isNamedTypeSymbol() && !this.isTypeParameter()) { - return this.getTypeParameters(); - } - - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullTypeSymbol.prototype.isGeneric = function () { - return (this._typeParameters && this._typeParameters.length > 0) || this._hasGenericSignature || this._hasGenericMember || this.isArrayNamedTypeReference(); - }; - - PullTypeSymbol.prototype.canUseSimpleInstantiationCache = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return true; - } - - var typeParameters = this.getTypeParameters(); - return typeArgumentMap && this.isNamedTypeSymbol() && typeParameters.length === 1 && typeArgumentMap[typeParameters[0].pullSymbolID].kind !== 8388608 /* ObjectType */; - }; - - PullTypeSymbol.prototype.getSimpleInstantiationCacheId = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return typeArgumentMap[0].pullSymbolID; - } - - return typeArgumentMap[this.getTypeParameters()[0].pullSymbolID].pullSymbolID; - }; - - PullTypeSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - this._simpleInstantiationCache = []; - } - - this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)] = specializedVersionOfThisType; - } else { - if (!this._complexInstantiationCache) { - this._complexInstantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisType; - } - - if (!this._specializedVersionsOfThisType) { - this._specializedVersionsOfThisType = []; - } - - this._specializedVersionsOfThisType.push(specializedVersionOfThisType); - }; - - PullTypeSymbol.prototype.getSpecialization = function (typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - return null; - } - - var result = this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)]; - return result || null; - } else { - if (!this._complexInstantiationCache) { - return null; - } - - if (this.getAllowedToReferenceTypeParameters().length == 0) { - return this; - } - - var result = this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - } - }; - - PullTypeSymbol.prototype.getKnownSpecializations = function () { - if (!this._specializedVersionsOfThisType) { - return TypeScript.sentinelEmptyArray; - } - - return this._specializedVersionsOfThisType; - }; - - PullTypeSymbol.prototype.getTypeArguments = function () { - return null; - }; - - PullTypeSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeParameters(); - }; - - PullTypeSymbol.prototype.addCallOrConstructSignaturePrerequisiteBase = function (signature) { - if (signature.isGeneric()) { - this._hasGenericSignature = true; - } - - signature.functionType = this; - }; - - PullTypeSymbol.prototype.addCallSignaturePrerequisite = function (callSignature) { - if (!this._callSignatures) { - this._callSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(callSignature); - }; - - PullTypeSymbol.prototype.appendCallSignature = function (callSignature) { - this.addCallSignaturePrerequisite(callSignature); - this._callSignatures.push(callSignature); - }; - - PullTypeSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - this.addCallSignaturePrerequisite(callSignature); - TypeScript.Debug.assert(index <= this._callSignatures.length); - if (index === this._callSignatures.length) { - this._callSignatures.push(callSignature); - } else { - this._callSignatures.splice(index, 0, callSignature); - } - }; - - PullTypeSymbol.prototype.addConstructSignaturePrerequisite = function (constructSignature) { - if (!this._constructSignatures) { - this._constructSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(constructSignature); - }; - - PullTypeSymbol.prototype.appendConstructSignature = function (constructSignature) { - this.addConstructSignaturePrerequisite(constructSignature); - this._constructSignatures.push(constructSignature); - }; - - PullTypeSymbol.prototype.insertConstructSignatureAtIndex = function (constructSignature, index) { - this.addConstructSignaturePrerequisite(constructSignature); - TypeScript.Debug.assert(index <= this._constructSignatures.length); - if (index === this._constructSignatures.length) { - this._constructSignatures.push(constructSignature); - } else { - this._constructSignatures.splice(index, 0, constructSignature); - } - }; - - PullTypeSymbol.prototype.addIndexSignature = function (indexSignature) { - if (!this._indexSignatures) { - this._indexSignatures = []; - } - - this._indexSignatures[this._indexSignatures.length] = indexSignature; - - if (indexSignature.isGeneric()) { - this._hasGenericSignature = true; - } - - indexSignature.functionType = this; - }; - - PullTypeSymbol.prototype.hasOwnCallSignatures = function () { - return this._callSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnCallSignatures = function () { - return this._callSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getCallSignatures = function () { - if (this._allCallSignatures) { - return this._allCallSignatures; - } - - var signatures = []; - - if (this._callSignatures) { - signatures = signatures.concat(this._callSignatures); - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._callSignatures, this._extendedTypes[i].getCallSignatures(), signatures); - } - } - - this._allCallSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnConstructSignatures = function () { - return this._constructSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnDeclaredConstructSignatures = function () { - return this._constructSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getConstructSignatures = function () { - if (this._allConstructSignatures) { - return this._allConstructSignatures; - } - - var signatures = []; - - if (this._constructSignatures) { - signatures = signatures.concat(this._constructSignatures); - } else if (this.isConstructor()) { - if (this._extendedTypes && this._extendedTypes.length > 0) { - signatures = this.getBaseClassConstructSignatures(this._extendedTypes[0]); - } else { - signatures = [this.getDefaultClassConstructSignature()]; - } - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._constructSignatures, this._extendedTypes[i].getConstructSignatures(), signatures); - } - } - - this._allConstructSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnIndexSignatures = function () { - return this._indexSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnIndexSignatures = function () { - return this._indexSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getIndexSignatures = function () { - if (this._allIndexSignatures) { - return this._allIndexSignatures; - } - - var signatures = []; - - if (this._indexSignatures) { - signatures = signatures.concat(this._indexSignatures); - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._indexSignatures, this._extendedTypes[i].getIndexSignatures(), signatures); - } - } - - this._allIndexSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.getIndexSignaturesOfAugmentedType = function (resolver, globalFunctionInterface, globalObjectInterface) { - if (!this._allIndexSignaturesOfAugmentedType) { - var initialIndexSignatures = this.getIndexSignatures(); - var shouldAddFunctionSignatures = false; - var shouldAddObjectSignatures = false; - - if (globalFunctionInterface && this.isFunctionType() && this !== globalFunctionInterface) { - var functionIndexSignatures = globalFunctionInterface.getIndexSignatures(); - if (functionIndexSignatures.length) { - shouldAddFunctionSignatures = true; - } - } - - if (globalObjectInterface && this !== globalObjectInterface) { - var objectIndexSignatures = globalObjectInterface.getIndexSignatures(); - if (objectIndexSignatures.length) { - shouldAddObjectSignatures = true; - } - } - - if (shouldAddFunctionSignatures || shouldAddObjectSignatures) { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures.slice(0); - if (shouldAddFunctionSignatures) { - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, functionIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - if (shouldAddObjectSignatures) { - if (shouldAddFunctionSignatures) { - initialIndexSignatures = initialIndexSignatures.concat(functionIndexSignatures); - } - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, objectIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - } else { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures; - } - } - - return this._allIndexSignaturesOfAugmentedType; - }; - - PullTypeSymbol.prototype.getBaseClassConstructSignatures = function (baseType) { - TypeScript.Debug.assert(this.isConstructor() && baseType.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length === 1); - if (baseType.hasBase(this)) { - return null; - } - - var baseConstructSignatures = baseType.getConstructSignatures(); - var signatures = []; - for (var i = 0; i < baseConstructSignatures.length; i++) { - var baseSignature = baseConstructSignatures[i]; - - baseSignature._resolveDeclaredSymbol(); - var currentSignature = new PullSignatureSymbol(2097152 /* ConstructSignature */, baseSignature.isDefinition()); - currentSignature.returnType = instanceTypeSymbol; - currentSignature.addTypeParametersFromReturnType(); - for (var j = 0; j < baseSignature.parameters.length; j++) { - currentSignature.addParameter(baseSignature.parameters[j], baseSignature.parameters[j].isOptional); - } - if (baseSignature.parameters.length > 0) { - currentSignature.hasVarArgs = baseSignature.parameters[baseSignature.parameters.length - 1].isVarArg; - } - - currentSignature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(currentSignature); - signatures.push(currentSignature); - } - - return signatures; - }; - - PullTypeSymbol.prototype.getDefaultClassConstructSignature = function () { - TypeScript.Debug.assert(this.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length == 1); - var signature = new PullSignatureSymbol(2097152 /* ConstructSignature */, true); - signature.returnType = instanceTypeSymbol; - signature.addTypeParametersFromReturnType(); - signature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(signature); - - return signature; - }; - - PullTypeSymbol.prototype.addImplementedType = function (implementedType) { - if (!implementedType) { - return; - } - - if (!this._implementedTypes) { - this._implementedTypes = []; - } - - this._implementedTypes[this._implementedTypes.length] = implementedType; - - implementedType.addTypeThatExplicitlyImplementsThisType(this); - }; - - PullTypeSymbol.prototype.getImplementedTypes = function () { - if (!this._implementedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._implementedTypes; - }; - - PullTypeSymbol.prototype.addExtendedType = function (extendedType) { - if (!extendedType) { - return; - } - - if (!this._extendedTypes) { - this._extendedTypes = []; - } - - this._extendedTypes[this._extendedTypes.length] = extendedType; - - extendedType.addTypeThatExtendsThisType(this); - }; - - PullTypeSymbol.prototype.getExtendedTypes = function () { - if (!this._extendedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._extendedTypes; - }; - - PullTypeSymbol.prototype.addTypeThatExtendsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - this._typesThatExtendThisType[this._typesThatExtendThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExtendThisType = function () { - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - return this._typesThatExtendThisType; - }; - - PullTypeSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - this._typesThatExplicitlyImplementThisType[this._typesThatExplicitlyImplementThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - return this._typesThatExplicitlyImplementThisType; - }; - - PullTypeSymbol.prototype.hasBase = function (potentialBase, visited) { - if (typeof visited === "undefined") { visited = []; } - if (this === potentialBase || this.getRootSymbol() === potentialBase || this === potentialBase.getRootSymbol()) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(visited, this)) { - return true; - } - - visited.push(this); - - var extendedTypes = this.getExtendedTypes(); - - for (var i = 0; i < extendedTypes.length; i++) { - if (extendedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - var implementedTypes = this.getImplementedTypes(); - - for (var i = 0; i < implementedTypes.length; i++) { - if (implementedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - visited.pop(); - - return false; - }; - - PullTypeSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - if (baseType.isError()) { - return false; - } - - var thisIsClass = this.isClass(); - if (isExtendedType) { - if (thisIsClass) { - return baseType.kind === 8 /* Class */; - } - } else { - if (!thisIsClass) { - return false; - } - } - - return !!(baseType.kind & (16 /* Interface */ | 8 /* Class */)); - }; - - PullTypeSymbol.prototype.findMember = function (name, lookInParent) { - var memberSymbol = null; - - if (this._memberNameCache) { - memberSymbol = this._memberNameCache[name]; - } - - if (memberSymbol || !lookInParent) { - return memberSymbol; - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - memberSymbol = this._extendedTypes[i].findMember(name, lookInParent); - - if (memberSymbol) { - return memberSymbol; - } - } - } - - return null; - }; - - PullTypeSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedTypeNameCache) { - return null; - } - - memberSymbol = this._enclosedTypeNameCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedContainerCache) { - return null; - } - - memberSymbol = this._enclosedContainerCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - var allMembers = []; - - if (this._members !== TypeScript.sentinelEmptyArray) { - for (var i = 0, n = this._members.length; i < n; i++) { - var member = this._members[i]; - if ((member.kind & searchDeclKind) && (memberVisiblity !== 2 /* externallyVisible */ || !member.anyDeclHasFlag(2 /* Private */))) { - allMembers[allMembers.length] = member; - } - } - } - - if (this._extendedTypes) { - var extenedMembersVisibility = memberVisiblity !== 0 /* all */ ? 2 /* externallyVisible */ : 0 /* all */; - - for (var i = 0, n = this._extendedTypes.length; i < n; i++) { - var extendedMembers = this._extendedTypes[i].getAllMembers(searchDeclKind, extenedMembersVisibility); - - for (var j = 0, m = extendedMembers.length; j < m; j++) { - var extendedMember = extendedMembers[j]; - if (!(this._memberNameCache && this._memberNameCache[extendedMember.name])) { - allMembers[allMembers.length] = extendedMember; - } - } - } - } - - if (this.isContainer()) { - if (this._enclosedMemberTypes) { - for (var i = 0; i < this._enclosedMemberTypes.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberTypes[i]; - } - } - if (this._enclosedMemberContainers) { - for (var i = 0; i < this._enclosedMemberContainers.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberContainers[i]; - } - } - } - - return allMembers; - }; - - PullTypeSymbol.prototype.findTypeParameter = function (name) { - if (!this._typeParameterNameCache) { - return null; - } - - return this._typeParameterNameCache[name]; - }; - - PullTypeSymbol.prototype.setResolved = function () { - _super.prototype.setResolved.call(this); - }; - - PullTypeSymbol.prototype.getNamePartForFullName = function () { - var name = _super.prototype.getNamePartForFullName.call(this); - - var typars = this.getTypeArgumentsOrTypeParameters(); - var typarString = PullSymbol.getTypeParameterString(typars, this, true); - return name + typarString; - }; - - PullTypeSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - return this.getScopedNameEx(scopeSymbol, skipTypeParametersInName, useConstraintInName, false, false, skipInternalAliasName).toString(); - }; - - PullTypeSymbol.prototype.isNamedTypeSymbol = function () { - var kind = this.kind; - if (kind === 2 /* Primitive */ || kind === 8 /* Class */ || kind === 4 /* Container */ || kind === 32 /* DynamicModule */ || kind === 128 /* TypeAlias */ || kind === 64 /* Enum */ || kind === 8192 /* TypeParameter */ || ((kind === 16 /* Interface */ || kind === 8388608 /* ObjectType */) && this.name !== "")) { - return true; - } - - return false; - }; - - PullTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getScopedNameEx(scopeSymbol, false, useConstraintInName).toString(); - return s; - }; - - PullTypeSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName, shouldAllowArrayType) { - if (typeof shouldAllowArrayType === "undefined") { shouldAllowArrayType = true; } - if (this.isArrayNamedTypeReference() && shouldAllowArrayType) { - var elementType = this.getElementType(); - var elementMemberName = elementType ? (elementType.isArrayNamedTypeReference() || elementType.isNamedTypeSymbol() ? elementType.getScopedNameEx(scopeSymbol, false, false, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) : elementType.getMemberTypeNameEx(false, scopeSymbol, getPrettyTypeName)) : TypeScript.MemberName.create("any"); - return TypeScript.MemberName.create(elementMemberName, "", "[]"); - } - - if (!this.isNamedTypeSymbol()) { - return this.getMemberTypeNameEx(true, scopeSymbol, getPrettyTypeName); - } - - if (skipTypeParametersInName) { - return TypeScript.MemberName.create(_super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName)); - } else { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = _super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - - var typars = this.getTypeArgumentsOrTypeParameters(); - builder.add(PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, getTypeParamMarkerInfo, useConstraintInName)); - - return builder; - } - }; - - PullTypeSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - return members.length === 0 && constructSignatures.length === 0 && callSignatures.length > 1; - }; - - PullTypeSymbol.prototype.getTypeOfSymbol = function () { - var associatedContainerType = this.getAssociatedContainerType(); - if (associatedContainerType && associatedContainerType.isNamedTypeSymbol()) { - return associatedContainerType; - } - - var functionSymbol = this.getFunctionSymbol(); - if (functionSymbol && functionSymbol.kind === 16384 /* Function */ && !TypeScript.PullHelpers.isSymbolLocal(functionSymbol)) { - return TypeScript.PullHelpers.isExportedSymbolInClodule(functionSymbol) ? null : functionSymbol; - } - - return null; - }; - - PullTypeSymbol.prototype.getMemberTypeNameEx = function (topLevel, scopeSymbol, getPrettyTypeName) { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - var indexSignatures = this.getIndexSignatures(); - - var typeOfSymbol = this.getTypeOfSymbol(); - if (typeOfSymbol) { - var nameForTypeOf = typeOfSymbol.getScopedNameEx(scopeSymbol, true); - return TypeScript.MemberName.create(nameForTypeOf, "typeof ", ""); - } - - if (members.length > 0 || callSignatures.length > 0 || constructSignatures.length > 0 || indexSignatures.length > 0) { - if (this._inMemberTypeNameEx) { - return TypeScript.MemberName.create("any"); - } - - this._inMemberTypeNameEx = true; - - var allMemberNames = new TypeScript.MemberNameArray(); - var curlies = !topLevel || indexSignatures.length !== 0; - var delim = "; "; - for (var i = 0; i < members.length; i++) { - if (members[i].kind === 65536 /* Method */ && members[i].type.hasOnlyOverloadCallSignatures()) { - var methodCallSignatures = members[i].type.getCallSignatures(); - var nameStr = members[i].getDisplayName(scopeSymbol) + (members[i].isOptional ? "?" : ""); - ; - var methodMemberNames = PullSignatureSymbol.getSignaturesTypeNameEx(methodCallSignatures, nameStr, false, false, scopeSymbol); - allMemberNames.addAll(methodMemberNames); - } else { - var memberTypeName = members[i].getNameAndTypeNameEx(scopeSymbol); - if (memberTypeName.isArray() && memberTypeName.delim === delim) { - allMemberNames.addAll(memberTypeName.entries); - } else { - allMemberNames.add(memberTypeName); - } - } - curlies = true; - } - - var getPrettyFunctionOverload = getPrettyTypeName && !curlies && this.hasOnlyOverloadCallSignatures(); - - var signatureCount = callSignatures.length + constructSignatures.length + indexSignatures.length; - var useShortFormSignature = !curlies && (signatureCount === 1); - var signatureMemberName; - - if (callSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(callSignatures, "", useShortFormSignature, false, scopeSymbol, getPrettyFunctionOverload); - allMemberNames.addAll(signatureMemberName); - } - - if (constructSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(constructSignatures, "new", useShortFormSignature, false, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if (indexSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(indexSignatures, "", useShortFormSignature, true, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if ((curlies) || (!getPrettyFunctionOverload && (signatureCount > 1) && topLevel)) { - allMemberNames.prefix = "{ "; - allMemberNames.suffix = "}"; - allMemberNames.delim = delim; - } else if (allMemberNames.entries.length > 1) { - allMemberNames.delim = delim; - } - - this._inMemberTypeNameEx = false; - - return allMemberNames; - } - - return TypeScript.MemberName.create("{}"); - }; - - PullTypeSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - return 2 /* Closed */; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap, skipTypeArgumentCheck) != 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - - if (type.isTypeParameter()) { - if (typeParameterArgumentMap[type.pullSymbolID] || typeParameterArgumentMap[type.getRootSymbol().pullSymbolID]) { - return type.pullSymbolID; - } - - var constraint = type.getConstraint(); - var wrappingTypeParameterID = constraint ? constraint.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - return wrappingTypeParameterID; - } - - if (type.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap, skipTypeArgumentCheck); - - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDFromSignatures = function (signatures, typeParameterArgumentMap) { - for (var i = 0; i < signatures.length; i++) { - var wrappingTypeParameterID = signatures[i].getWrappingTypeParameterID(typeParameterArgumentMap); - if (wrappingTypeParameterID !== 0) { - return wrappingTypeParameterID; - } - } - - return 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - var wrappingTypeParameterID = 0; - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = true; - - var typeArguments = type.getTypeArguments(); - - if (type.isGeneric() && !typeArguments) { - typeArguments = type.getTypeParameters(); - } - - if (typeArguments) { - for (var i = 0; !wrappingTypeParameterID && i < typeArguments.length; i++) { - wrappingTypeParameterID = typeArguments[i].getWrappingTypeParameterID(typeParameterArgumentMap); - } - } - } - - if (skipTypeArgumentCheck || !(type.kind & 8216 /* SomeInstantiatableType */) || !type.name) { - var members = type.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; !wrappingTypeParameterID && i < members.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(members[i]); - wrappingTypeParameterID = members[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - wrappingTypeParameterID = wrappingTypeParameterID || this.getWrappingTypeParameterIDFromSignatures(type.getCallSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getConstructSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getIndexSignatures(), typeParameterArgumentMap); - } - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = false; - } - - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType) { - TypeScript.Debug.assert(this.isNamedTypeSymbol()); - TypeScript.Debug.assert(TypeScript.PullHelpers.getRootType(enclosingType) == enclosingType); - var knownWrapMap = TypeScript.BitMatrix.getBitMatrix(true); - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap); - knownWrapMap.release(); - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - var thisRootType = TypeScript.PullHelpers.getRootType(this); - - if (thisRootType != enclosingType) { - var thisIsNamedType = this.isNamedTypeSymbol(); - - if (thisIsNamedType) { - if (thisRootType.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - thisRootType.inWrapInfiniteExpandingReferenceCheck = true; - } - - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure(enclosingType, knownWrapMap); - - if (thisIsNamedType) { - thisRootType.inWrapInfiniteExpandingReferenceCheck = false; - } - - return wrapsIntoInfinitelyExpandingTypeReference; - } - - var enclosingTypeParameters = enclosingType.getTypeParameters(); - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (TypeScript.ArrayUtilities.contains(enclosingTypeParameters, typeArguments[i])) { - continue; - } - - if (typeArguments[i].wrapsSomeTypeParameter(this.getTypeParameterArgumentMap())) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure = function (enclosingType, knownWrapMap) { - var members = this.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; i < members.length; i++) { - if (members[i].type && members[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - var sigs = this.getCallSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getConstructSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getIndexSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.widenedType = function (resolver, ast, context) { - if (!this._widenedType) { - this._widenedType = resolver.widenType(this, ast, context); - } - return this._widenedType; - }; - return PullTypeSymbol; - })(PullSymbol); - TypeScript.PullTypeSymbol = PullTypeSymbol; - - var PullPrimitiveTypeSymbol = (function (_super) { - __extends(PullPrimitiveTypeSymbol, _super); - function PullPrimitiveTypeSymbol(name) { - _super.call(this, name, 2 /* Primitive */); - - this.isResolved = true; - } - PullPrimitiveTypeSymbol.prototype.isAny = function () { - return !this.isStringConstant() && this.name === "any"; - }; - - PullPrimitiveTypeSymbol.prototype.isNull = function () { - return !this.isStringConstant() && this.name === "null"; - }; - - PullPrimitiveTypeSymbol.prototype.isUndefined = function () { - return !this.isStringConstant() && this.name === "undefined"; - }; - - PullPrimitiveTypeSymbol.prototype.isStringConstant = function () { - return false; - }; - - PullPrimitiveTypeSymbol.prototype.setUnresolved = function () { - }; - - PullPrimitiveTypeSymbol.prototype.getDisplayName = function () { - if (this.isNull() || this.isUndefined()) { - return "any"; - } else { - return _super.prototype.getDisplayName.call(this); - } - }; - return PullPrimitiveTypeSymbol; - })(PullTypeSymbol); - TypeScript.PullPrimitiveTypeSymbol = PullPrimitiveTypeSymbol; - - var PullStringConstantTypeSymbol = (function (_super) { - __extends(PullStringConstantTypeSymbol, _super); - function PullStringConstantTypeSymbol(name) { - _super.call(this, name); - } - PullStringConstantTypeSymbol.prototype.isStringConstant = function () { - return true; - }; - return PullStringConstantTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullStringConstantTypeSymbol = PullStringConstantTypeSymbol; - - var PullErrorTypeSymbol = (function (_super) { - __extends(PullErrorTypeSymbol, _super); - function PullErrorTypeSymbol(_anyType, name) { - _super.call(this, name); - this._anyType = _anyType; - - TypeScript.Debug.assert(this._anyType); - this.isResolved = true; - } - PullErrorTypeSymbol.prototype.isError = function () { - return true; - }; - - PullErrorTypeSymbol.prototype._getResolver = function () { - return this._anyType._getResolver(); - }; - - PullErrorTypeSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - return PullErrorTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullErrorTypeSymbol = PullErrorTypeSymbol; - - var PullContainerSymbol = (function (_super) { - __extends(PullContainerSymbol, _super); - function PullContainerSymbol(name, kind) { - _super.call(this, name, kind); - this.instanceSymbol = null; - this.assignedValue = null; - this.assignedType = null; - this.assignedContainer = null; - } - PullContainerSymbol.prototype.isContainer = function () { - return true; - }; - - PullContainerSymbol.prototype.setInstanceSymbol = function (symbol) { - this.instanceSymbol = symbol; - }; - - PullContainerSymbol.prototype.getInstanceSymbol = function () { - return this.instanceSymbol; - }; - - PullContainerSymbol.prototype.setExportAssignedValueSymbol = function (symbol) { - this.assignedValue = symbol; - }; - - PullContainerSymbol.prototype.getExportAssignedValueSymbol = function () { - return this.assignedValue; - }; - - PullContainerSymbol.prototype.setExportAssignedTypeSymbol = function (type) { - this.assignedType = type; - }; - - PullContainerSymbol.prototype.getExportAssignedTypeSymbol = function () { - return this.assignedType; - }; - - PullContainerSymbol.prototype.setExportAssignedContainerSymbol = function (container) { - this.assignedContainer = container; - }; - - PullContainerSymbol.prototype.getExportAssignedContainerSymbol = function () { - return this.assignedContainer; - }; - - PullContainerSymbol.prototype.hasExportAssignment = function () { - return !!this.assignedValue || !!this.assignedType || !!this.assignedContainer; - }; - - PullContainerSymbol.usedAsSymbol = function (containerSymbol, symbol) { - if (!containerSymbol || !containerSymbol.isContainer()) { - return false; - } - - if (!containerSymbol.isAlias() && containerSymbol.type === symbol) { - return true; - } - - var moduleSymbol = containerSymbol; - var valueExportSymbol = moduleSymbol.getExportAssignedValueSymbol(); - var typeExportSymbol = moduleSymbol.getExportAssignedTypeSymbol(); - var containerExportSymbol = moduleSymbol.getExportAssignedContainerSymbol(); - if (valueExportSymbol || typeExportSymbol || containerExportSymbol) { - if (valueExportSymbol === symbol || typeExportSymbol == symbol || containerExportSymbol == symbol) { - return true; - } - - if (containerExportSymbol != containerSymbol) { - return PullContainerSymbol.usedAsSymbol(containerExportSymbol, symbol); - } - } - - return false; - }; - - PullContainerSymbol.prototype.getInstanceType = function () { - return this.instanceSymbol ? this.instanceSymbol.type : null; - }; - return PullContainerSymbol; - })(PullTypeSymbol); - TypeScript.PullContainerSymbol = PullContainerSymbol; - - var PullTypeAliasSymbol = (function (_super) { - __extends(PullTypeAliasSymbol, _super); - function PullTypeAliasSymbol(name) { - _super.call(this, name, 128 /* TypeAlias */); - this._assignedValue = null; - this._assignedType = null; - this._assignedContainer = null; - this._isUsedAsValue = false; - this._typeUsedExternally = false; - this._isUsedInExportAlias = false; - this.retrievingExportAssignment = false; - this.linkedAliasSymbols = null; - } - PullTypeAliasSymbol.prototype.isUsedInExportedAlias = function () { - this._resolveDeclaredSymbol(); - return this._isUsedInExportAlias; - }; - - PullTypeAliasSymbol.prototype.typeUsedExternally = function () { - this._resolveDeclaredSymbol(); - return this._typeUsedExternally; - }; - - PullTypeAliasSymbol.prototype.isUsedAsValue = function () { - this._resolveDeclaredSymbol(); - return this._isUsedAsValue; - }; - - PullTypeAliasSymbol.prototype.setTypeUsedExternally = function () { - this._typeUsedExternally = true; - }; - - PullTypeAliasSymbol.prototype.setIsUsedInExportedAlias = function () { - this._isUsedInExportAlias = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedInExportedAlias(); - }); - } - }; - - PullTypeAliasSymbol.prototype.addLinkedAliasSymbol = function (contingentValueSymbol) { - if (!this.linkedAliasSymbols) { - this.linkedAliasSymbols = [contingentValueSymbol]; - } else { - this.linkedAliasSymbols.push(contingentValueSymbol); - } - }; - - PullTypeAliasSymbol.prototype.setIsUsedAsValue = function () { - this._isUsedAsValue = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedAsValue(); - }); - } - }; - - PullTypeAliasSymbol.prototype.assignedValue = function () { - this._resolveDeclaredSymbol(); - return this._assignedValue; - }; - - PullTypeAliasSymbol.prototype.assignedType = function () { - this._resolveDeclaredSymbol(); - return this._assignedType; - }; - - PullTypeAliasSymbol.prototype.assignedContainer = function () { - this._resolveDeclaredSymbol(); - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.isAlias = function () { - return true; - }; - PullTypeAliasSymbol.prototype.isContainer = function () { - return true; - }; - - PullTypeAliasSymbol.prototype.setAssignedValueSymbol = function (symbol) { - this._assignedValue = symbol; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedValueSymbol = function () { - if (this._assignedValue) { - return this._assignedValue; - } - - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - if (this._assignedContainer.hasExportAssignment()) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedValueSymbol(); - this.retrievingExportAssignment = false; - return sym; - } - - return this._assignedContainer.getInstanceSymbol(); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.setAssignedTypeSymbol = function (type) { - this._assignedType = type; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedTypeSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedType) { - if (this._assignedType.isAlias()) { - this.retrievingExportAssignment = true; - var sym = this._assignedType.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - } else if (this._assignedType !== this._assignedContainer) { - return this._assignedType; - } - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.setAssignedContainerSymbol = function (container) { - this._assignedContainer = container; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedContainerSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedContainerSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.getMembers = function () { - if (this._assignedType) { - return this._assignedType.getMembers(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getCallSignatures = function () { - if (this._assignedType) { - return this._assignedType.getCallSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getConstructSignatures = function () { - if (this._assignedType) { - return this._assignedType.getConstructSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getIndexSignatures = function () { - if (this._assignedType) { - return this._assignedType.getIndexSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.findMember = function (name) { - if (this._assignedType) { - return this._assignedType.findMember(name, true); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedType = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedType(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedContainer = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedContainer(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisibility) { - if (this._assignedType) { - return this._assignedType.getAllMembers(searchDeclKind, memberVisibility); - } - - return TypeScript.sentinelEmptyArray; - }; - return PullTypeAliasSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeAliasSymbol = PullTypeAliasSymbol; - - var PullTypeParameterSymbol = (function (_super) { - __extends(PullTypeParameterSymbol, _super); - function PullTypeParameterSymbol(name) { - _super.call(this, name, 8192 /* TypeParameter */); - this._constraint = null; - } - PullTypeParameterSymbol.prototype.isTypeParameter = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.setConstraint = function (constraintType) { - this._constraint = constraintType; - }; - - PullTypeParameterSymbol.prototype.getConstraint = function () { - return this._constraint; - }; - - PullTypeParameterSymbol.prototype.getBaseConstraint = function (semanticInfoChain) { - var preBaseConstraint = this.getConstraintRecursively({}); - TypeScript.Debug.assert(preBaseConstraint === null || !preBaseConstraint.isTypeParameter()); - return preBaseConstraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getConstraintRecursively = function (visitedTypeParameters) { - var constraint = this.getConstraint(); - - if (constraint) { - if (constraint.isTypeParameter()) { - var constraintAsTypeParameter = constraint; - if (!visitedTypeParameters[constraintAsTypeParameter.pullSymbolID]) { - visitedTypeParameters[constraintAsTypeParameter.pullSymbolID] = constraintAsTypeParameter; - return constraintAsTypeParameter.getConstraintRecursively(visitedTypeParameters); - } - } else { - return constraint; - } - } - - return null; - }; - - PullTypeParameterSymbol.prototype.getDefaultConstraint = function (semanticInfoChain) { - return this._constraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getCallSignatures = function () { - if (this._constraint) { - return this._constraint.getCallSignatures(); - } - - return _super.prototype.getCallSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getConstructSignatures = function () { - if (this._constraint) { - return this._constraint.getConstructSignatures(); - } - - return _super.prototype.getConstructSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getIndexSignatures = function () { - if (this._constraint) { - return this._constraint.getIndexSignatures(); - } - - return _super.prototype.getIndexSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.isGeneric = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.fullName = function (scopeSymbol) { - var name = this.getDisplayName(scopeSymbol); - var container = this.getContainer(); - if (container) { - var containerName = container.fullName(scopeSymbol); - name = name + " in " + containerName; - } - - return name; - }; - - PullTypeParameterSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var name = _super.prototype.getName.call(this, scopeSymbol); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var name = _super.prototype.getDisplayName.call(this, scopeSymbol, useConstraintInName, skipInternalAliasName); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - return true; - }; - return PullTypeParameterSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeParameterSymbol = PullTypeParameterSymbol; - - var PullAccessorSymbol = (function (_super) { - __extends(PullAccessorSymbol, _super); - function PullAccessorSymbol(name) { - _super.call(this, name, 4096 /* Property */); - this._getterSymbol = null; - this._setterSymbol = null; - } - PullAccessorSymbol.prototype.isAccessor = function () { - return true; - }; - - PullAccessorSymbol.prototype.setSetter = function (setter) { - if (!setter) { - return; - } - - this._setterSymbol = setter; - }; - - PullAccessorSymbol.prototype.getSetter = function () { - return this._setterSymbol; - }; - - PullAccessorSymbol.prototype.setGetter = function (getter) { - if (!getter) { - return; - } - - this._getterSymbol = getter; - }; - - PullAccessorSymbol.prototype.getGetter = function () { - return this._getterSymbol; - }; - return PullAccessorSymbol; - })(PullSymbol); - TypeScript.PullAccessorSymbol = PullAccessorSymbol; - - function getIDForTypeSubstitutions(instantiatingTypeOrSignature, typeArgumentMap) { - var substitution = ""; - var members = null; - - var allowedToReferenceTypeParameters = instantiatingTypeOrSignature.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedToReferenceTypeParameters.length; i++) { - var typeParameter = allowedToReferenceTypeParameters[i]; - var typeParameterID = typeParameter.pullSymbolID; - var typeArg = typeArgumentMap[typeParameterID]; - if (!typeArg) { - typeArg = typeParameter; - } - substitution += typeParameterID + ":" + getIDForTypeSubstitutionsOfType(typeArg); - } - - return substitution; - } - TypeScript.getIDForTypeSubstitutions = getIDForTypeSubstitutions; - - function getIDForTypeSubstitutionsOfType(type) { - var structure; - if (type.isError()) { - structure = "E" + getIDForTypeSubstitutionsOfType(type._anyType); - } else if (!type.isNamedTypeSymbol()) { - structure = getIDForTypeSubstitutionsFromObjectType(type); - } - - if (!structure) { - structure = type.pullSymbolID + "#"; - } - - return structure; - } - - function getIDForTypeSubstitutionsFromObjectType(type) { - if (type.isResolved) { - var getIDForTypeSubStitutionWalker = new GetIDForTypeSubStitutionWalker(); - TypeScript.PullHelpers.walkPullTypeSymbolStructure(type, getIDForTypeSubStitutionWalker); - } - - return null; - } - - var GetIDForTypeSubStitutionWalker = (function () { - function GetIDForTypeSubStitutionWalker() { - this.structure = ""; - } - GetIDForTypeSubStitutionWalker.prototype.memberSymbolWalk = function (memberSymbol) { - this.structure += memberSymbol.name + "@" + getIDForTypeSubstitutionsOfType(memberSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.callSignatureWalk = function (signatureSymbol) { - this.structure += "("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.constructSignatureWalk = function (signatureSymbol) { - this.structure += "new("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.indexSignatureWalk = function (signatureSymbol) { - this.structure += "[]("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureParameterWalk = function (parameterSymbol) { - this.structure += parameterSymbol.name + "@" + getIDForTypeSubstitutionsOfType(parameterSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureReturnTypeWalk = function (returnType) { - this.structure += ")" + getIDForTypeSubstitutionsOfType(returnType); - return true; - }; - return GetIDForTypeSubStitutionWalker; - })(); - - (function (GetAllMembersVisiblity) { - GetAllMembersVisiblity[GetAllMembersVisiblity["all"] = 0] = "all"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["internallyVisible"] = 1] = "internallyVisible"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["externallyVisible"] = 2] = "externallyVisible"; - })(TypeScript.GetAllMembersVisiblity || (TypeScript.GetAllMembersVisiblity = {})); - var GetAllMembersVisiblity = TypeScript.GetAllMembersVisiblity; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var EnclosingTypeWalkerState = (function () { - function EnclosingTypeWalkerState() { - } - EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = false; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState = function (genericEnclosingType) { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - defaultEnclosingTypeWalkerState._currentSymbols = [TypeScript.PullHelpers.getRootType(genericEnclosingType)]; - return defaultEnclosingTypeWalkerState; - }; - return EnclosingTypeWalkerState; - })(); - TypeScript.EnclosingTypeWalkerState = EnclosingTypeWalkerState; - - var PullTypeEnclosingTypeWalker = (function () { - function PullTypeEnclosingTypeWalker() { - this.setDefaultTypeWalkerState(); - } - PullTypeEnclosingTypeWalker.prototype.setDefaultTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.setNonGenericEnclosingTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolOrDeclBeUsedAsEnclosingTypeHelper = function (name, kind) { - return name && (kind === 8 /* Class */ || kind === 16 /* Interface */); - }; - - PullTypeEnclosingTypeWalker.prototype.canDeclBeUsedAsEnclosingType = function (decl) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(decl.name, decl.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolBeUsedAsEnclosingType = function (symbol) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(symbol.name, symbol.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.getEnclosingType = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols) { - TypeScript.Debug.assert(currentSymbols.length > 0); - return currentSymbols[0]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype._canWalkStructure = function () { - var enclosingType = this.getEnclosingType(); - TypeScript.Debug.assert(!enclosingType || enclosingType.isGeneric()); - return !!enclosingType; - }; - - PullTypeEnclosingTypeWalker.prototype._getCurrentSymbol = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols && currentSymbols.length) { - return currentSymbols[currentSymbols.length - 1]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.getGenerativeClassification = function () { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (!currentType) { - return 0 /* Unknown */; - } - - var variableNeededToFixNodeJitterBug = this.getEnclosingType(); - - return currentType.getGenerativeTypeClassification(variableNeededToFixNodeJitterBug); - } - - return 2 /* Closed */; - }; - - PullTypeEnclosingTypeWalker.prototype._pushSymbol = function (symbol) { - return this.enclosingTypeWalkerState._currentSymbols.push(symbol); - }; - - PullTypeEnclosingTypeWalker.prototype._popSymbol = function () { - return this.enclosingTypeWalkerState._currentSymbols.pop(); - }; - - PullTypeEnclosingTypeWalker.prototype.setSymbolAsEnclosingType = function (type) { - if (type.isGeneric()) { - this.enclosingTypeWalkerState = EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState(type); - } else { - this.setNonGenericEnclosingTypeWalkerState(); - } - }; - - PullTypeEnclosingTypeWalker.prototype._setEnclosingTypeOfParentDecl = function (decl, setSignature) { - var parentDecl = decl.getParentDecl(); - - if (parentDecl && !(parentDecl.kind & (164 /* SomeContainer */ | 1 /* Script */))) { - if (this.canDeclBeUsedAsEnclosingType(parentDecl)) { - this.setSymbolAsEnclosingType(parentDecl.getSymbol()); - } else { - this._setEnclosingTypeOfParentDecl(parentDecl, true); - } - - if (this._canWalkStructure()) { - var symbol = decl.getSymbol(); - if (symbol) { - if (!symbol.isType() && !symbol.isSignature()) { - symbol = symbol.type; - } - - this._pushSymbol(symbol); - } - - if (setSignature) { - var signature = decl.getSignatureSymbol(); - if (signature) { - this._pushSymbol(signature); - } - } - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeForSymbol = function (symbol) { - var currentEnclosingTypeWalkerState = this.enclosingTypeWalkerState; - if (this.canSymbolBeUsedAsEnclosingType(symbol)) { - this.setSymbolAsEnclosingType(symbol); - } else { - this.setDefaultTypeWalkerState(); - - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - this._setEnclosingTypeOfParentDecl(decl, symbol.isSignature()); - - if (this.enclosingTypeWalkerState._hasSetEnclosingType) { - break; - } - } - - if (!this.enclosingTypeWalkerState._hasSetEnclosingType) { - this.setNonGenericEnclosingTypeWalkerState(); - } - } - return currentEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.startWalkingType = function (symbol) { - var currentState = this.enclosingTypeWalkerState; - - var setEnclosingTypeForSymbol = !this.enclosingTypeWalkerState._hasSetEnclosingType || this.canSymbolBeUsedAsEnclosingType(symbol); - if (setEnclosingTypeForSymbol) { - this.setEnclosingTypeForSymbol(symbol); - } - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.endWalkingType = function (stateWhenStartedWalkingTypes) { - this.enclosingTypeWalkerState = stateWhenStartedWalkingTypes; - }; - - PullTypeEnclosingTypeWalker.prototype.walkMemberType = function (memberName, resolver) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var memberSymbol = currentType ? resolver._getNamedPropertySymbolOfAugmentedType(memberName, currentType) : null; - this._pushSymbol(memberSymbol ? memberSymbol.type : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkMemberType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkSignature = function (kind, index) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var signatures; - if (currentType) { - if (kind == 1048576 /* CallSignature */) { - signatures = currentType.getCallSignatures(); - } else if (kind == 2097152 /* ConstructSignature */) { - signatures = currentType.getConstructSignatures(); - } else { - signatures = currentType.getIndexSignatures(); - } - } - - this._pushSymbol(signatures ? signatures[index] : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkSignature = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeArgument = function (index) { - if (this._canWalkStructure()) { - var typeArgument = null; - var currentType = this._getCurrentSymbol(); - if (currentType) { - var typeArguments = currentType.getTypeArguments(); - typeArgument = typeArguments ? typeArguments[index] : null; - } - this._pushSymbol(typeArgument); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeArgument = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeParameterConstraint = function (index) { - if (this._canWalkStructure()) { - var typeParameters; - var currentSymbol = this._getCurrentSymbol(); - if (currentSymbol) { - if (currentSymbol.isSignature()) { - typeParameters = currentSymbol.getTypeParameters(); - } else { - TypeScript.Debug.assert(currentSymbol.isType()); - typeParameters = currentSymbol.getTypeParameters(); - } - } - this._pushSymbol(typeParameters ? typeParameters[index].getConstraint() : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeParameterConstraint = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkReturnType = function () { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.returnType : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkReturnType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkParameterType = function (iParam) { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.getParameterTypeAtIndex(iParam) : null); - } - }; - PullTypeEnclosingTypeWalker.prototype.postWalkParameterType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.getBothKindOfIndexSignatures = function (resolver, context, includeAugmentedType) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (currentType) { - return resolver._getBothKindsOfIndexSignatures(currentType, context, includeAugmentedType); - } - } - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.walkIndexSignatureReturnType = function (indexSigInfo, useStringIndexSignature, onlySignature) { - if (this._canWalkStructure()) { - var indexSig = indexSigInfo ? (useStringIndexSignature ? indexSigInfo.stringSignature : indexSigInfo.numericSignature) : null; - this._pushSymbol(indexSig); - if (!onlySignature) { - this._pushSymbol(indexSig ? indexSig.returnType : null); - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkIndexSignatureReturnType = function (onlySignature) { - if (this._canWalkStructure()) { - if (!onlySignature) { - this._popSymbol(); - } - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.resetEnclosingTypeWalkerState = function () { - var currentState = this.enclosingTypeWalkerState; - this.setDefaultTypeWalkerState(); - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeWalkerState = function (enclosingTypeWalkerState) { - if (enclosingTypeWalkerState) { - this.enclosingTypeWalkerState = enclosingTypeWalkerState; - } else { - this.setDefaultTypeWalkerState(); - } - }; - PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState = EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState(); - - PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState = EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState(); - return PullTypeEnclosingTypeWalker; - })(); - TypeScript.PullTypeEnclosingTypeWalker = PullTypeEnclosingTypeWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CandidateInferenceInfo = (function () { - function CandidateInferenceInfo() { - this.typeParameter = null; - this._inferredTypeAfterFixing = null; - this.inferenceCandidates = []; - } - CandidateInferenceInfo.prototype.addCandidate = function (candidate) { - if (!this._inferredTypeAfterFixing) { - this.inferenceCandidates[this.inferenceCandidates.length] = candidate; - } - }; - - CandidateInferenceInfo.prototype.isFixed = function () { - return !!this._inferredTypeAfterFixing; - }; - - CandidateInferenceInfo.prototype.fixTypeParameter = function (resolver, context) { - var _this = this; - if (!this._inferredTypeAfterFixing) { - var collection = { - getLength: function () { - return _this.inferenceCandidates.length; - }, - getTypeAtIndex: function (index) { - return _this.inferenceCandidates[index].type; - } - }; - - var bestCommonType = resolver.findBestCommonType(collection, context, new TypeScript.TypeComparisonInfo()); - this._inferredTypeAfterFixing = bestCommonType.widenedType(resolver, null, context); - } - }; - return CandidateInferenceInfo; - })(); - TypeScript.CandidateInferenceInfo = CandidateInferenceInfo; - - var TypeArgumentInferenceContext = (function () { - function TypeArgumentInferenceContext(resolver, context, signatureBeingInferred) { - this.resolver = resolver; - this.context = context; - this.signatureBeingInferred = signatureBeingInferred; - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - this.candidateCache = []; - var typeParameters = signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addInferenceRoot(typeParameters[i]); - } - } - TypeArgumentInferenceContext.prototype.alreadyRelatingTypes = function (objectType, parameterType) { - if (this.inferenceCache.valueAt(objectType.pullSymbolID, parameterType.pullSymbolID)) { - return true; - } else { - this.inferenceCache.setValueAt(objectType.pullSymbolID, parameterType.pullSymbolID, true); - return false; - } - }; - - TypeArgumentInferenceContext.prototype.resetRelationshipCache = function () { - this.inferenceCache.release(); - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - }; - - TypeArgumentInferenceContext.prototype.addInferenceRoot = function (param) { - var info = this.candidateCache[param.pullSymbolID]; - - if (!info) { - info = new CandidateInferenceInfo(); - info.typeParameter = param; - this.candidateCache[param.pullSymbolID] = info; - } - }; - - TypeArgumentInferenceContext.prototype.getInferenceInfo = function (param) { - return this.candidateCache[param.pullSymbolID]; - }; - - TypeArgumentInferenceContext.prototype.addCandidateForInference = function (param, candidate) { - var info = this.getInferenceInfo(param); - - if (info && candidate && info.inferenceCandidates.indexOf(candidate) < 0) { - info.addCandidate(candidate); - } - }; - - TypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - throw TypeScript.Errors.abstract(); - }; - - TypeArgumentInferenceContext.prototype.fixTypeParameter = function (typeParameter) { - var candidateInfo = this.candidateCache[typeParameter.pullSymbolID]; - if (candidateInfo) { - candidateInfo.fixTypeParameter(this.resolver, this.context); - } - }; - - TypeArgumentInferenceContext.prototype._finalizeInferredTypeArguments = function () { - var results = []; - var typeParameters = this.signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - var info = this.candidateCache[typeParameters[i].pullSymbolID]; - - info.fixTypeParameter(this.resolver, this.context); - - for (var i = 0; i < results.length; i++) { - if (results[i].type === info.typeParameter) { - results[i].type = info._inferredTypeAfterFixing; - } - } - - results.push(info._inferredTypeAfterFixing); - } - - return results; - }; - - TypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - throw TypeScript.Errors.abstract(); - }; - return TypeArgumentInferenceContext; - })(); - TypeScript.TypeArgumentInferenceContext = TypeArgumentInferenceContext; - - var InvocationTypeArgumentInferenceContext = (function (_super) { - __extends(InvocationTypeArgumentInferenceContext, _super); - function InvocationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, argumentASTs) { - _super.call(this, resolver, context, signatureBeingInferred); - this.argumentASTs = argumentASTs; - } - InvocationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return true; - }; - - InvocationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - this.signatureBeingInferred.forAllParameterTypes(this.argumentASTs.nonSeparatorCount(), function (parameterType, argumentIndex) { - var argumentAST = _this.argumentASTs.nonSeparatorAt(argumentIndex); - - _this.context.pushInferentialType(parameterType, _this); - var argumentType = _this.resolver.resolveAST(argumentAST, true, _this.context).type; - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(argumentType, parameterType, _this, _this.context); - _this.context.popAnyContextualType(); - - return true; - }); - - return this._finalizeInferredTypeArguments(); - }; - return InvocationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.InvocationTypeArgumentInferenceContext = InvocationTypeArgumentInferenceContext; - - var ContextualSignatureInstantiationTypeArgumentInferenceContext = (function (_super) { - __extends(ContextualSignatureInstantiationTypeArgumentInferenceContext, _super); - function ContextualSignatureInstantiationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, contextualSignature, shouldFixContextualSignatureParameterTypes) { - _super.call(this, resolver, context, signatureBeingInferred); - this.contextualSignature = contextualSignature; - this.shouldFixContextualSignatureParameterTypes = shouldFixContextualSignatureParameterTypes; - } - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return false; - }; - - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - var relateTypesCallback = function (parameterTypeBeingInferred, contextualParameterType) { - if (_this.shouldFixContextualSignatureParameterTypes) { - contextualParameterType = _this.context.fixAllTypeParametersReferencedByType(contextualParameterType, _this.resolver, _this); - } - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(contextualParameterType, parameterTypeBeingInferred, _this, _this.context); - - return true; - }; - - this.signatureBeingInferred.forAllCorrespondingParameterTypesInThisAndOtherSignature(this.contextualSignature, relateTypesCallback); - - return this._finalizeInferredTypeArguments(); - }; - return ContextualSignatureInstantiationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext = ContextualSignatureInstantiationTypeArgumentInferenceContext; - - var PullContextualTypeContext = (function () { - function PullContextualTypeContext(contextualType, provisional, isInferentiallyTyping, typeArgumentInferenceContext) { - this.contextualType = contextualType; - this.provisional = provisional; - this.isInferentiallyTyping = isInferentiallyTyping; - this.typeArgumentInferenceContext = typeArgumentInferenceContext; - this.provisionallyTypedSymbols = []; - this.hasProvisionalErrors = false; - this.astSymbolMap = []; - } - PullContextualTypeContext.prototype.recordProvisionallyTypedSymbol = function (symbol) { - this.provisionallyTypedSymbols[this.provisionallyTypedSymbols.length] = symbol; - }; - - PullContextualTypeContext.prototype.invalidateProvisionallyTypedSymbols = function () { - for (var i = 0; i < this.provisionallyTypedSymbols.length; i++) { - this.provisionallyTypedSymbols[i].setUnresolved(); - } - }; - - PullContextualTypeContext.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - PullContextualTypeContext.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()]; - }; - return PullContextualTypeContext; - })(); - TypeScript.PullContextualTypeContext = PullContextualTypeContext; - - var PullTypeResolutionContext = (function () { - function PullTypeResolutionContext(resolver, inTypeCheck, fileName) { - if (typeof inTypeCheck === "undefined") { inTypeCheck = false; } - if (typeof fileName === "undefined") { fileName = null; } - this.resolver = resolver; - this.inTypeCheck = inTypeCheck; - this.fileName = fileName; - this.contextStack = []; - this.typeCheckedNodes = null; - this.enclosingTypeWalker1 = null; - this.enclosingTypeWalker2 = null; - this.inBaseTypeResolution = false; - if (inTypeCheck) { - TypeScript.Debug.assert(fileName, "A file name must be provided if you are typechecking"); - this.typeCheckedNodes = TypeScript.BitVector.getBitVector(false); - } - } - PullTypeResolutionContext.prototype.setTypeChecked = function (ast) { - if (!this.inProvisionalResolution()) { - this.typeCheckedNodes.setValueAt(ast.syntaxID(), true); - } - }; - - PullTypeResolutionContext.prototype.canTypeCheckAST = function (ast) { - return this.typeCheck() && !this.typeCheckedNodes.valueAt(ast.syntaxID()) && this.fileName === ast.fileName(); - }; - - PullTypeResolutionContext.prototype._pushAnyContextualType = function (type, provisional, isInferentiallyTyping, argContext) { - this.contextStack.push(new PullContextualTypeContext(type, provisional, isInferentiallyTyping, argContext)); - }; - - PullTypeResolutionContext.prototype.pushNewContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), false, null); - }; - - PullTypeResolutionContext.prototype.propagateContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), this.isInferentiallyTyping(), this.getCurrentTypeArgumentInferenceContext()); - }; - - PullTypeResolutionContext.prototype.pushInferentialType = function (type, typeArgumentInferenceContext) { - this._pushAnyContextualType(type, true, true, typeArgumentInferenceContext); - }; - - PullTypeResolutionContext.prototype.pushProvisionalType = function (type) { - this._pushAnyContextualType(type, true, false, null); - }; - - PullTypeResolutionContext.prototype.popAnyContextualType = function () { - var tc = this.contextStack.pop(); - - tc.invalidateProvisionallyTypedSymbols(); - - if (tc.hasProvisionalErrors && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].hasProvisionalErrors = true; - } - - return tc; - }; - - PullTypeResolutionContext.prototype.hasProvisionalErrors = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].hasProvisionalErrors : false; - }; - - PullTypeResolutionContext.prototype.getContextualType = function () { - var context = !this.contextStack.length ? null : this.contextStack[this.contextStack.length - 1]; - - if (context) { - var type = context.contextualType; - - if (!type) { - return null; - } - - return type; - } - - return null; - }; - - PullTypeResolutionContext.prototype.fixAllTypeParametersReferencedByType = function (type, resolver, argContext) { - var argContext = this.getCurrentTypeArgumentInferenceContext(); - if (type.wrapsSomeTypeParameter(argContext.candidateCache)) { - var typeParameterArgumentMap = []; - - for (var n in argContext.candidateCache) { - var typeParameter = argContext.candidateCache[n] && argContext.candidateCache[n].typeParameter; - if (typeParameter) { - var dummyMap = []; - dummyMap[typeParameter.pullSymbolID] = typeParameter; - if (type.wrapsSomeTypeParameter(dummyMap)) { - argContext.fixTypeParameter(typeParameter); - TypeScript.Debug.assert(argContext.candidateCache[n]._inferredTypeAfterFixing); - typeParameterArgumentMap[typeParameter.pullSymbolID] = argContext.candidateCache[n]._inferredTypeAfterFixing; - } - } - } - - return resolver.instantiateType(type, typeParameterArgumentMap); - } - - return type; - }; - - PullTypeResolutionContext.prototype.getCurrentTypeArgumentInferenceContext = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].typeArgumentInferenceContext : null; - }; - - PullTypeResolutionContext.prototype.isInferentiallyTyping = function () { - return this.contextStack.length > 0 && this.contextStack[this.contextStack.length - 1].isInferentiallyTyping; - }; - - PullTypeResolutionContext.prototype.inProvisionalResolution = function () { - return (!this.contextStack.length ? false : this.contextStack[this.contextStack.length - 1].provisional); - }; - - PullTypeResolutionContext.prototype.isInBaseTypeResolution = function () { - return this.inBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.startBaseTypeResolution = function () { - var wasInBaseTypeResoltion = this.inBaseTypeResolution; - this.inBaseTypeResolution = true; - return wasInBaseTypeResoltion; - }; - - PullTypeResolutionContext.prototype.doneBaseTypeResolution = function (wasInBaseTypeResolution) { - this.inBaseTypeResolution = wasInBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.setTypeInContext = function (symbol, type) { - if (symbol.type && symbol.type.isError() && !type.isError()) { - return; - } - symbol.type = type; - - if (this.contextStack.length && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].recordProvisionallyTypedSymbol(symbol); - } - }; - - PullTypeResolutionContext.prototype.postDiagnostic = function (diagnostic) { - if (diagnostic) { - if (this.inProvisionalResolution()) { - (this.contextStack[this.contextStack.length - 1]).hasProvisionalErrors = true; - } else if (this.inTypeCheck && this.resolver) { - this.resolver.semanticInfoChain.addDiagnostic(diagnostic); - } - } - }; - - PullTypeResolutionContext.prototype.typeCheck = function () { - return this.inTypeCheck && !this.inProvisionalResolution(); - }; - - PullTypeResolutionContext.prototype.setSymbolForAST = function (ast, symbol) { - this.contextStack[this.contextStack.length - 1].setSymbolForAST(ast, symbol); - }; - - PullTypeResolutionContext.prototype.getSymbolForAST = function (ast) { - for (var i = this.contextStack.length - 1; i >= 0; i--) { - var typeContext = this.contextStack[i]; - if (!typeContext.provisional) { - break; - } - - var symbol = typeContext.getSymbolForAST(ast); - if (symbol) { - return symbol; - } - } - - return null; - }; - - PullTypeResolutionContext.prototype.startWalkingTypes = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes1 = this.enclosingTypeWalker1.startWalkingType(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes2 = this.enclosingTypeWalker2.startWalkingType(symbol2); - return { - stateWhenStartedWalkingTypes1: stateWhenStartedWalkingTypes1, - stateWhenStartedWalkingTypes2: stateWhenStartedWalkingTypes2 - }; - }; - - PullTypeResolutionContext.prototype.endWalkingTypes = function (statesWhenStartedWalkingTypes) { - this.enclosingTypeWalker1.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes1); - this.enclosingTypeWalker2.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes2); - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeForSymbols = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1.setEnclosingTypeForSymbol(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2.setEnclosingTypeForSymbol(symbol2); - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.walkMemberTypes = function (memberName) { - this.enclosingTypeWalker1.walkMemberType(memberName, this.resolver); - this.enclosingTypeWalker2.walkMemberType(memberName, this.resolver); - }; - - PullTypeResolutionContext.prototype.postWalkMemberTypes = function () { - this.enclosingTypeWalker1.postWalkMemberType(); - this.enclosingTypeWalker2.postWalkMemberType(); - }; - - PullTypeResolutionContext.prototype.walkSignatures = function (kind, index, index2) { - this.enclosingTypeWalker1.walkSignature(kind, index); - this.enclosingTypeWalker2.walkSignature(kind, index2 == undefined ? index : index2); - }; - - PullTypeResolutionContext.prototype.postWalkSignatures = function () { - this.enclosingTypeWalker1.postWalkSignature(); - this.enclosingTypeWalker2.postWalkSignature(); - }; - - PullTypeResolutionContext.prototype.walkTypeParameterConstraints = function (index) { - this.enclosingTypeWalker1.walkTypeParameterConstraint(index); - this.enclosingTypeWalker2.walkTypeParameterConstraint(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeParameterConstraints = function () { - this.enclosingTypeWalker1.postWalkTypeParameterConstraint(); - this.enclosingTypeWalker2.postWalkTypeParameterConstraint(); - }; - - PullTypeResolutionContext.prototype.walkTypeArgument = function (index) { - this.enclosingTypeWalker1.walkTypeArgument(index); - this.enclosingTypeWalker2.walkTypeArgument(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeArgument = function () { - this.enclosingTypeWalker1.postWalkTypeArgument(); - this.enclosingTypeWalker2.postWalkTypeArgument(); - }; - - PullTypeResolutionContext.prototype.walkReturnTypes = function () { - this.enclosingTypeWalker1.walkReturnType(); - this.enclosingTypeWalker2.walkReturnType(); - }; - - PullTypeResolutionContext.prototype.postWalkReturnTypes = function () { - this.enclosingTypeWalker1.postWalkReturnType(); - this.enclosingTypeWalker2.postWalkReturnType(); - }; - - PullTypeResolutionContext.prototype.walkParameterTypes = function (iParam) { - this.enclosingTypeWalker1.walkParameterType(iParam); - this.enclosingTypeWalker2.walkParameterType(iParam); - }; - - PullTypeResolutionContext.prototype.postWalkParameterTypes = function () { - this.enclosingTypeWalker1.postWalkParameterType(); - this.enclosingTypeWalker2.postWalkParameterType(); - }; - - PullTypeResolutionContext.prototype.getBothKindOfIndexSignatures = function (includeAugmentedType1, includeAugmentedType2) { - var indexSigs1 = this.enclosingTypeWalker1.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType1); - var indexSigs2 = this.enclosingTypeWalker2.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType2); - return { indexSigs1: indexSigs1, indexSigs2: indexSigs2 }; - }; - - PullTypeResolutionContext.prototype.walkIndexSignatureReturnTypes = function (indexSigs, useStringIndexSignature1, useStringIndexSignature2, onlySignature) { - this.enclosingTypeWalker1.walkIndexSignatureReturnType(indexSigs.indexSigs1, useStringIndexSignature1, onlySignature); - this.enclosingTypeWalker2.walkIndexSignatureReturnType(indexSigs.indexSigs2, useStringIndexSignature2, onlySignature); - }; - - PullTypeResolutionContext.prototype.postWalkIndexSignatureReturnTypes = function (onlySignature) { - this.enclosingTypeWalker1.postWalkIndexSignatureReturnType(onlySignature); - this.enclosingTypeWalker2.postWalkIndexSignatureReturnType(onlySignature); - }; - - PullTypeResolutionContext.prototype.swapEnclosingTypeWalkers = function () { - var tempEnclosingWalker1 = this.enclosingTypeWalker1; - this.enclosingTypeWalker1 = this.enclosingTypeWalker2; - this.enclosingTypeWalker2 = tempEnclosingWalker1; - }; - - PullTypeResolutionContext.prototype.oneOfClassificationsIsInfinitelyExpanding = function () { - var generativeClassification1 = this.enclosingTypeWalker1.getGenerativeClassification(); - if (generativeClassification1 === 3 /* InfinitelyExpanding */) { - return true; - } - var generativeClassification2 = this.enclosingTypeWalker2.getGenerativeClassification(); - if (generativeClassification2 === 3 /* InfinitelyExpanding */) { - return true; - } - - return false; - }; - - PullTypeResolutionContext.prototype.resetEnclosingTypeWalkerStates = function () { - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1 ? this.enclosingTypeWalker1.resetEnclosingTypeWalkerState() : null; - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2 ? this.enclosingTypeWalker2.resetEnclosingTypeWalkerState() : null; - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeWalkerStates = function (enclosingTypeWalkerStates) { - TypeScript.Debug.assert(this.enclosingTypeWalker1 || !enclosingTypeWalkerStates.enclosingTypeWalkerState1); - if (this.enclosingTypeWalker1) { - this.enclosingTypeWalker1.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState1); - } - TypeScript.Debug.assert(this.enclosingTypeWalker2 || !enclosingTypeWalkerStates.enclosingTypeWalkerState2); - if (this.enclosingTypeWalker2) { - this.enclosingTypeWalker2.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState2); - } - }; - return PullTypeResolutionContext; - })(); - TypeScript.PullTypeResolutionContext = PullTypeResolutionContext; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var OverloadApplicabilityStatus; - (function (OverloadApplicabilityStatus) { - OverloadApplicabilityStatus[OverloadApplicabilityStatus["NotAssignable"] = 0] = "NotAssignable"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableButWithProvisionalErrors"] = 1] = "AssignableButWithProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableWithNoProvisionalErrors"] = 2] = "AssignableWithNoProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["Subtype"] = 3] = "Subtype"; - })(OverloadApplicabilityStatus || (OverloadApplicabilityStatus = {})); - - var PullAdditionalCallResolutionData = (function () { - function PullAdditionalCallResolutionData() { - this.targetSymbol = null; - this.resolvedSignatures = null; - this.candidateSignature = null; - this.actualParametersContextTypeSymbols = null; - this.diagnosticsFromOverloadResolution = []; - } - return PullAdditionalCallResolutionData; - })(); - TypeScript.PullAdditionalCallResolutionData = PullAdditionalCallResolutionData; - - var PullAdditionalObjectLiteralResolutionData = (function () { - function PullAdditionalObjectLiteralResolutionData() { - this.membersContextTypeSymbols = null; - } - return PullAdditionalObjectLiteralResolutionData; - })(); - TypeScript.PullAdditionalObjectLiteralResolutionData = PullAdditionalObjectLiteralResolutionData; - - var MemberWithBaseOrigin = (function () { - function MemberWithBaseOrigin(memberSymbol, baseOrigin) { - this.memberSymbol = memberSymbol; - this.baseOrigin = baseOrigin; - } - return MemberWithBaseOrigin; - })(); - - var SignatureWithBaseOrigin = (function () { - function SignatureWithBaseOrigin(signature, baseOrigin) { - this.signature = signature; - this.baseOrigin = baseOrigin; - } - return SignatureWithBaseOrigin; - })(); - - var InheritedIndexSignatureInfo = (function () { - function InheritedIndexSignatureInfo() { - } - return InheritedIndexSignatureInfo; - })(); - - var CompilerReservedName; - (function (CompilerReservedName) { - CompilerReservedName[CompilerReservedName["_this"] = 1] = "_this"; - CompilerReservedName[CompilerReservedName["_super"] = 2] = "_super"; - CompilerReservedName[CompilerReservedName["arguments"] = 3] = "arguments"; - CompilerReservedName[CompilerReservedName["_i"] = 4] = "_i"; - CompilerReservedName[CompilerReservedName["require"] = 5] = "require"; - CompilerReservedName[CompilerReservedName["exports"] = 6] = "exports"; - })(CompilerReservedName || (CompilerReservedName = {})); - - function getCompilerReservedName(name) { - var nameText = name.valueText(); - return CompilerReservedName[nameText]; - } - - var PullTypeResolver = (function () { - function PullTypeResolver(compilationSettings, semanticInfoChain) { - this.compilationSettings = compilationSettings; - this.semanticInfoChain = semanticInfoChain; - this._cachedArrayInterfaceType = null; - this._cachedNumberInterfaceType = null; - this._cachedStringInterfaceType = null; - this._cachedBooleanInterfaceType = null; - this._cachedObjectInterfaceType = null; - this._cachedFunctionInterfaceType = null; - this._cachedIArgumentsInterfaceType = null; - this._cachedRegExpInterfaceType = null; - this._cachedAnyTypeArgs = null; - this.typeCheckCallBacks = []; - this.postTypeCheckWorkitems = []; - this._cachedFunctionArgumentsSymbol = null; - this.assignableCache = TypeScript.BitMatrix.getBitMatrix(true); - this.subtypeCache = TypeScript.BitMatrix.getBitMatrix(true); - this.identicalCache = TypeScript.BitMatrix.getBitMatrix(true); - this.inResolvingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullTypeResolver.prototype.cachedArrayInterfaceType = function () { - if (!this._cachedArrayInterfaceType) { - this._cachedArrayInterfaceType = this.getSymbolFromDeclPath("Array", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedArrayInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedArrayInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedArrayInterfaceType; - }; - - PullTypeResolver.prototype.getArrayNamedType = function () { - return this.cachedArrayInterfaceType(); - }; - - PullTypeResolver.prototype.cachedNumberInterfaceType = function () { - if (!this._cachedNumberInterfaceType) { - this._cachedNumberInterfaceType = this.getSymbolFromDeclPath("Number", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedNumberInterfaceType && !this._cachedNumberInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedNumberInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedNumberInterfaceType; - }; - - PullTypeResolver.prototype.cachedStringInterfaceType = function () { - if (!this._cachedStringInterfaceType) { - this._cachedStringInterfaceType = this.getSymbolFromDeclPath("String", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedStringInterfaceType && !this._cachedStringInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedStringInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedStringInterfaceType; - }; - - PullTypeResolver.prototype.cachedBooleanInterfaceType = function () { - if (!this._cachedBooleanInterfaceType) { - this._cachedBooleanInterfaceType = this.getSymbolFromDeclPath("Boolean", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedBooleanInterfaceType && !this._cachedBooleanInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedBooleanInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedBooleanInterfaceType; - }; - - PullTypeResolver.prototype.cachedObjectInterfaceType = function () { - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.getSymbolFromDeclPath("Object", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedObjectInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedObjectInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionInterfaceType = function () { - if (!this._cachedFunctionInterfaceType) { - this._cachedFunctionInterfaceType = this.getSymbolFromDeclPath("Function", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedFunctionInterfaceType && !this._cachedFunctionInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedFunctionInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedFunctionInterfaceType; - }; - - PullTypeResolver.prototype.cachedIArgumentsInterfaceType = function () { - if (!this._cachedIArgumentsInterfaceType) { - this._cachedIArgumentsInterfaceType = this.getSymbolFromDeclPath("IArguments", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedIArgumentsInterfaceType && !this._cachedIArgumentsInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedIArgumentsInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedIArgumentsInterfaceType; - }; - - PullTypeResolver.prototype.cachedRegExpInterfaceType = function () { - if (!this._cachedRegExpInterfaceType) { - this._cachedRegExpInterfaceType = this.getSymbolFromDeclPath("RegExp", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedRegExpInterfaceType && !this._cachedRegExpInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedRegExpInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedRegExpInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionArgumentsSymbol = function () { - if (!this._cachedFunctionArgumentsSymbol) { - this._cachedFunctionArgumentsSymbol = new TypeScript.PullSymbol("arguments", 512 /* Variable */); - this._cachedFunctionArgumentsSymbol.type = this.cachedIArgumentsInterfaceType() || this.semanticInfoChain.anyTypeSymbol; - this._cachedFunctionArgumentsSymbol.setResolved(); - - var functionArgumentsDecl = new TypeScript.PullSynthesizedDecl("arguments", "arguments", 2048 /* Parameter */, 0 /* None */, null, this.semanticInfoChain); - functionArgumentsDecl.setSymbol(this._cachedFunctionArgumentsSymbol); - this._cachedFunctionArgumentsSymbol.addDeclaration(functionArgumentsDecl); - } - - return this._cachedFunctionArgumentsSymbol; - }; - - PullTypeResolver.prototype.getApparentType = function (type) { - if (type.isTypeParameter()) { - var baseConstraint = type.getBaseConstraint(this.semanticInfoChain); - if (baseConstraint === this.semanticInfoChain.anyTypeSymbol) { - return this.semanticInfoChain.emptyTypeSymbol; - } else { - type = baseConstraint; - } - } - if (type.isPrimitive()) { - if (type === this.semanticInfoChain.numberTypeSymbol) { - return this.cachedNumberInterfaceType(); - } - if (type === this.semanticInfoChain.booleanTypeSymbol) { - return this.cachedBooleanInterfaceType(); - } - if (type === this.semanticInfoChain.stringTypeSymbol) { - return this.cachedStringInterfaceType(); - } - return type; - } - if (type.isEnum()) { - return this.cachedNumberInterfaceType(); - } - return type; - }; - - PullTypeResolver.prototype.setTypeChecked = function (ast, context) { - context.setTypeChecked(ast); - }; - - PullTypeResolver.prototype.canTypeCheckAST = function (ast, context) { - return context.canTypeCheckAST(ast); - }; - - PullTypeResolver.prototype.setSymbolForAST = function (ast, symbol, context) { - if (context && context.inProvisionalResolution()) { - context.setSymbolForAST(ast, symbol); - } else { - this.semanticInfoChain.setSymbolForAST(ast, symbol); - } - }; - - PullTypeResolver.prototype.getSymbolForAST = function (ast, context) { - var symbol = this.semanticInfoChain.getSymbolForAST(ast); - - if (!symbol) { - if (context && context.inProvisionalResolution()) { - symbol = context.getSymbolForAST(ast); - } - } - - return symbol; - }; - - PullTypeResolver.prototype.getASTForDecl = function (decl) { - return this.semanticInfoChain.getASTForDecl(decl); - }; - - PullTypeResolver.prototype.getNewErrorTypeSymbol = function (name) { - if (typeof name === "undefined") { name = null; } - return new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, name); - }; - - PullTypeResolver.prototype.getEnclosingDecl = function (decl) { - var declPath = decl.getParentPath(); - - if (declPath.length > 1 && declPath[declPath.length - 1] === decl) { - return declPath[declPath.length - 2]; - } else { - return declPath[declPath.length - 1]; - } - }; - - PullTypeResolver.prototype.getExportedMemberSymbol = function (symbol, parent) { - if (!(symbol.kind & (65536 /* Method */ | 4096 /* Property */))) { - var isContainer = (parent.kind & (4 /* Container */ | 32 /* DynamicModule */)) !== 0; - var containerType = !isContainer ? parent.getAssociatedContainerType() : parent; - - if (isContainer && containerType) { - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol; - } - - return null; - } - } - - return symbol; - }; - - PullTypeResolver.prototype._getNamedPropertySymbolOfAugmentedType = function (symbolName, parent) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, 68147712 /* SomeValue */, parent); - if (memberSymbol) { - return memberSymbol; - } - - if (this.cachedFunctionInterfaceType() && parent.isFunctionType()) { - memberSymbol = this.cachedFunctionInterfaceType().findMember(symbolName, true); - if (memberSymbol) { - return memberSymbol; - } - } - - if (this.cachedObjectInterfaceType()) { - return this.cachedObjectInterfaceType().findMember(symbolName, true); - } - - return null; - }; - - PullTypeResolver.prototype.getNamedPropertySymbol = function (symbolName, declSearchKind, parent) { - var member = null; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - - var containerType = parent.getAssociatedContainerType(); - - if (containerType) { - if (containerType.isClass()) { - return null; - } - - parent = containerType; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - } - - if (parent.kind & 164 /* SomeContainer */) { - var typeDeclarations = parent.getDeclarations(); - var childDecls = null; - - for (var j = 0; j < typeDeclarations.length; j++) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - member = childDecls[0].getSymbol(); - - if (!member) { - member = childDecls[0].getSignatureSymbol(); - } - return this.getExportedMemberSymbol(member, parent); - } - - if ((declSearchKind & 58728795 /* SomeType */) !== 0 || (declSearchKind & 68147712 /* SomeValue */) !== 0) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, 128 /* TypeAlias */); - if (childDecls.length && childDecls[0].kind === 128 /* TypeAlias */) { - var aliasSymbol = this.getExportedMemberSymbol(childDecls[0].getSymbol(), parent); - if (aliasSymbol) { - if ((declSearchKind & 58728795 /* SomeType */) !== 0) { - var typeSymbol = aliasSymbol.getExportAssignedTypeSymbol(); - if (typeSymbol) { - return typeSymbol; - } - } else { - var valueSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - return valueSymbol; - } - } - - return aliasSymbol; - } - } - } - } - } - }; - - PullTypeResolver.prototype.getSymbolFromDeclPath = function (symbolName, declPath, declSearchKind) { - var _this = this; - var symbol = null; - - var decl = null; - var childDecls; - var declSymbol = null; - var declMembers; - var pathDeclKind; - var valDecl = null; - var kind; - var instanceSymbol = null; - var instanceType = null; - var childSymbol = null; - - var allowedContainerDeclKind = 4 /* Container */ | 32 /* DynamicModule */; - if (TypeScript.hasFlag(declSearchKind, 67108864 /* EnumMember */)) { - allowedContainerDeclKind |= 64 /* Enum */; - } - - var isAcceptableAlias = function (symbol) { - if (symbol.isAlias()) { - _this.resolveDeclaredSymbol(symbol); - if (TypeScript.hasFlag(declSearchKind, 164 /* SomeContainer */)) { - if (symbol.assignedContainer() || symbol.getExportAssignedContainerSymbol()) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 58728795 /* SomeType */)) { - var type = symbol.getExportAssignedTypeSymbol(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - - var type = symbol.assignedType(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 68147712 /* SomeValue */ & ~67108864 /* EnumMember */)) { - if (symbol.assignedType() && symbol.assignedType().isError()) { - return true; - } else if (symbol.assignedValue() || symbol.getExportAssignedValueSymbol()) { - return true; - } else { - var assignedType = symbol.assignedType(); - if (assignedType && assignedType.isContainer() && assignedType.getInstanceType()) { - return true; - } - - var decls = symbol.getDeclarations(); - var ast = decls[0].ast(); - return ast.moduleReference.kind() === 245 /* ExternalModuleReference */; - } - } - } - - return false; - }; - - var tryFindAlias = function (decl) { - var childDecls = decl.searchChildDecls(symbolName, 128 /* TypeAlias */); - - if (childDecls.length) { - var sym = childDecls[0].getSymbol(); - if (isAcceptableAlias(sym)) { - return sym; - } - } - return null; - }; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - if (decl.flags & 2097152 /* DeclaredInAWithBlock */) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (pathDeclKind & allowedContainerDeclKind) { - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - return childDecls[0].getSymbol(); - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - - if (declSearchKind & 68147712 /* SomeValue */) { - instanceSymbol = decl.getSymbol().getInstanceSymbol(); - - if (instanceSymbol) { - instanceType = instanceSymbol.type; - - childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, instanceType); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } - - valDecl = decl.getValueDecl(); - - if (valDecl) { - decl = valDecl; - } - } - - declSymbol = decl.getSymbol().type; - - var childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, declSymbol); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } else if ((declSearchKind & (58728795 /* SomeType */ | 164 /* SomeContainer */)) || !(pathDeclKind & 8 /* Class */)) { - var candidateSymbol = null; - - if (pathDeclKind === 131072 /* FunctionExpression */ && symbolName === decl.getFunctionExpressionName()) { - candidateSymbol = decl.getSymbol(); - } - - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - if (decl.kind & 1032192 /* SomeFunction */) { - decl.ensureSymbolIsBound(); - } - return childDecls[0].getSymbol(); - } - - if (candidateSymbol) { - return candidateSymbol; - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - } - } - - symbol = this.semanticInfoChain.findSymbol([symbolName], declSearchKind); - if (symbol) { - return symbol; - } - - if (!TypeScript.hasFlag(declSearchKind, 128 /* TypeAlias */)) { - symbol = this.semanticInfoChain.findSymbol([symbolName], 128 /* TypeAlias */); - if (symbol && isAcceptableAlias(symbol)) { - return symbol; - } - } - - return null; - }; - - PullTypeResolver.prototype.getVisibleDeclsFromDeclPath = function (declPath, declSearchKind) { - var result = []; - var decl = null; - var childDecls; - var pathDeclKind; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - var declKind = decl.kind; - - if (declKind !== 8 /* Class */ && declKind !== 16 /* Interface */) { - this.addFilteredDecls(decl.getChildDecls(), declSearchKind, result); - } - - switch (declKind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - var otherDecls = this.semanticInfoChain.findDeclsFromPath(declPath.slice(0, i + 1), 164 /* SomeContainer */); - for (var j = 0, m = otherDecls.length; j < m; j++) { - var otherDecl = otherDecls[j]; - if (otherDecl === decl) { - continue; - } - - var otherDeclChildren = otherDecl.getChildDecls(); - for (var k = 0, s = otherDeclChildren.length; k < s; k++) { - var otherDeclChild = otherDeclChildren[k]; - if ((otherDeclChild.flags & 1 /* Exported */) && (otherDeclChild.kind & declSearchKind)) { - result.push(otherDeclChild); - } - } - } - - break; - - case 8 /* Class */: - case 16 /* Interface */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - - case 131072 /* FunctionExpression */: - var functionExpressionName = decl.getFunctionExpressionName(); - if (functionExpressionName) { - result.push(decl); - } - - case 16384 /* Function */: - case 32768 /* ConstructorMethod */: - case 65536 /* Method */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - } - } - - var topLevelDecls = this.semanticInfoChain.topLevelDecls(); - for (var i = 0, n = topLevelDecls.length; i < n; i++) { - var topLevelDecl = topLevelDecls[i]; - if (declPath.length > 0 && topLevelDecl.fileName() === declPath[0].fileName()) { - continue; - } - - if (!topLevelDecl.isExternalModule()) { - this.addFilteredDecls(topLevelDecl.getChildDecls(), declSearchKind, result); - } - } - - return result; - }; - - PullTypeResolver.prototype.addFilteredDecls = function (decls, declSearchKind, result) { - if (decls.length) { - for (var i = 0, n = decls.length; i < n; i++) { - var decl = decls[i]; - if (decl.kind & declSearchKind) { - result.push(decl); - } - } - } - }; - - PullTypeResolver.prototype.getVisibleDecls = function (enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - return this.getVisibleDeclsFromDeclPath(declPath, declSearchKind); - }; - - PullTypeResolver.prototype.getVisibleContextSymbols = function (enclosingDecl, context) { - var contextualTypeSymbol = context.getContextualType(); - if (!contextualTypeSymbol || this.isAnyOrEquivalent(contextualTypeSymbol)) { - return null; - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - var members = contextualTypeSymbol.getAllMembers(declSearchKind, 2 /* externallyVisible */); - - for (var i = 0; i < members.length; i++) { - members[i].setUnresolved(); - } - - return members; - }; - - PullTypeResolver.prototype.getVisibleMembersFromExpression = function (expression, enclosingDecl, context) { - var lhs = this.resolveAST(expression, false, context); - - if (isTypesOnlyLocation(expression) && (lhs.kind === 8 /* Class */ || lhs.kind === 16 /* Interface */ || lhs.kind === 64 /* Enum */)) { - return null; - } - - var lhsType = lhs.type; - if (!lhsType) { - return null; - } - - this.resolveDeclaredSymbol(lhsType, context); - - if (lhsType.isContainer() && lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return null; - } - - var memberVisibilty = 2 /* externallyVisible */; - var containerSymbol = lhsType; - if (containerSymbol.kind === 33554432 /* ConstructorType */) { - containerSymbol = containerSymbol.getConstructSignatures()[0].returnType; - } - - if (containerSymbol && containerSymbol.isClass()) { - var declPath = enclosingDecl.getParentPath(); - if (declPath && declPath.length) { - var declarations = containerSymbol.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - var declaration = declarations[i]; - if (TypeScript.ArrayUtilities.contains(declPath, declaration)) { - memberVisibilty = 1 /* internallyVisible */; - break; - } - } - } - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - var members = []; - - if (lhsType.isContainer()) { - var exportedAssignedContainerSymbol = lhsType.getExportAssignedContainerSymbol(); - if (exportedAssignedContainerSymbol) { - lhsType = exportedAssignedContainerSymbol; - } - } - - lhsType = this.getApparentType(lhsType); - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - members = lhsType.getAllMembers(declSearchKind, memberVisibilty); - - if (lhsType.isContainer()) { - var associatedInstance = lhsType.getInstanceSymbol(); - if (associatedInstance) { - var instanceType = associatedInstance.type; - this.resolveDeclaredSymbol(instanceType, context); - var instanceMembers = instanceType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(instanceMembers); - } - - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - if (exportedContainer) { - var exportedContainerMembers = exportedContainer.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(exportedContainerMembers); - } - } else if (!lhsType.isConstructor() && !lhsType.isEnum()) { - var associatedContainerSymbol = lhsType.getAssociatedContainerType(); - if (associatedContainerSymbol) { - var containerType = associatedContainerSymbol.type; - this.resolveDeclaredSymbol(containerType, context); - var containerMembers = containerType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(containerMembers); - } - } - - if (lhsType.isFunctionType() && this.cachedFunctionInterfaceType()) { - members = members.concat(this.cachedFunctionInterfaceType().getAllMembers(declSearchKind, 2 /* externallyVisible */)); - } - - return members; - }; - - PullTypeResolver.prototype.isAnyOrEquivalent = function (type) { - return (type === this.semanticInfoChain.anyTypeSymbol) || type.isError(); - }; - - PullTypeResolver.prototype.resolveExternalModuleReference = function (idText, currentFileName) { - var originalIdText = idText; - var symbol = null; - - if (TypeScript.isRelative(originalIdText)) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - symbol = this.semanticInfoChain.findExternalModule(path + idText); - } else { - idText = originalIdText; - - symbol = this.semanticInfoChain.findAmbientExternalModuleInGlobalContext(TypeScript.quoteStr(originalIdText)); - - if (!symbol) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - - while (symbol === null && path != "") { - symbol = this.semanticInfoChain.findExternalModule(path + idText); - if (symbol === null) { - if (path === '/') { - path = ''; - } else { - path = TypeScript.normalizePath(path + ".."); - path = path && path != '/' ? path + '/' : path; - } - } - } - } - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveDeclaredSymbol = function (symbol, context) { - if (!symbol || symbol.isResolved || symbol.isTypeReference()) { - return symbol; - } - - if (!context) { - context = new TypeScript.PullTypeResolutionContext(this); - } - - return this.resolveDeclaredSymbolWorker(symbol, context); - }; - - PullTypeResolver.prototype.resolveDeclaredSymbolWorker = function (symbol, context) { - if (!symbol || symbol.isResolved) { - return symbol; - } - - if (symbol.inResolution) { - if (!symbol.type && !symbol.isType()) { - symbol.type = this.semanticInfoChain.anyTypeSymbol; - } - - return symbol; - } - - var decls = symbol.getDeclarations(); - - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - - var ast = this.semanticInfoChain.getASTForDecl(decl); - - if (!ast || (ast.kind() === 139 /* GetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (ast.kind() === 140 /* SetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 236 /* CatchClause */ && ast.parent.identifier === ast) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ && ast.parent.identifier === ast) { - return symbol; - } - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - var resolvedSymbol; - if (enclosingModule) { - resolvedSymbol = this.resolveSingleModuleDeclaration(enclosingModule, ast, context); - } else if (ast.kind() === 120 /* SourceUnit */ && decl.kind === 32 /* DynamicModule */) { - resolvedSymbol = this.resolveModuleSymbol(decl.getSymbol(), context, null, null, ast); - } else { - TypeScript.Debug.assert(ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */); - resolvedSymbol = this.resolveAST(ast, false, context); - } - - if (decl.kind === 2048 /* Parameter */ && !symbol.isResolved && !symbol.type && resolvedSymbol && symbol.anyDeclHasFlag(8388608 /* PropertyParameter */ | 67108864 /* ConstructorParameter */)) { - symbol.type = resolvedSymbol.type; - symbol.setResolved(); - } - } - - if (!symbol.isResolved) { - TypeScript.Debug.assert(!symbol.inResolution); - - symbol.setResolved(); - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveOtherDecl = function (otherDecl, context) { - var astForOtherDecl = this.getASTForDecl(otherDecl); - var moduleDecl = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(astForOtherDecl); - if (moduleDecl) { - this.resolveSingleModuleDeclaration(moduleDecl, astForOtherDecl, context); - } else { - this.resolveAST(astForOtherDecl, false, context); - } - }; - - PullTypeResolver.prototype.resolveOtherDeclarations = function (astName, context) { - var _this = this; - var resolvedDecl = this.semanticInfoChain.getDeclForAST(astName); - var symbol = resolvedDecl.getSymbol(); - - var allDecls = symbol.getDeclarations(); - this.inResolvingOtherDeclsWalker.walkOtherPullDecls(resolvedDecl, symbol.getDeclarations(), function (otherDecl) { - return _this.resolveOtherDecl(otherDecl, context); - }); - }; - - PullTypeResolver.prototype.resolveSourceUnit = function (sourceUnit, context) { - var enclosingDecl = this.getEnclosingDeclForAST(sourceUnit); - var moduleSymbol = enclosingDecl.getSymbol(); - this.ensureAllSymbolsAreBound(moduleSymbol); - - this.resolveFirstExportAssignmentStatement(sourceUnit.moduleElements, context); - this.resolveAST(sourceUnit.moduleElements, false, context); - - if (this.canTypeCheckAST(sourceUnit, context)) { - this.typeCheckSourceUnit(sourceUnit, context); - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.typeCheckSourceUnit = function (sourceUnit, context) { - var _this = this; - this.setTypeChecked(sourceUnit, context); - - this.resolveAST(sourceUnit.moduleElements, false, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInSourceUnit(sourceUnit); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInSourceUnit = function (sourceUnit) { - var _this = this; - var enclosingDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - - var doesImportNameExistInOtherFiles = function (name) { - var importSymbol = _this.semanticInfoChain.findTopLevelSymbol(name, 128 /* TypeAlias */, null); - return importSymbol && importSymbol.isAlias(); - }; - - this.checkUniquenessOfImportNames([enclosingDecl], doesImportNameExistInOtherFiles); - }; - - PullTypeResolver.prototype.resolveEnumDeclaration = function (ast, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - var containerSymbol = containerDecl.getSymbol(); - - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - containerSymbol.setResolved(); - - this.resolveOtherDeclarations(ast, context); - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckEnumDeclaration(ast, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.typeCheckEnumDeclaration = function (ast, context) { - var _this = this; - this.setTypeChecked(ast, context); - - this.resolveAST(ast.enumElements, false, context); - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(containerDecl, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.checkInitializersInEnumDeclarations(containerDecl, context); - }); - - if (!TypeScript.ASTHelpers.enumIsElided(ast)) { - this.checkNameForCompilerGeneratedDeclarationCollision(ast, true, ast.identifier, context); - } - }; - - PullTypeResolver.prototype.postTypeCheckEnumDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.checkInitializersInEnumDeclarations = function (decl, context) { - var symbol = decl.getSymbol(); - - var declarations = symbol.getDeclarations(); - if (decl !== declarations[0]) { - return; - } - - var seenEnumDeclWithNoFirstMember = false; - for (var i = 0; i < declarations.length; ++i) { - var currentDecl = declarations[i]; - - var ast = currentDecl.ast(); - if (ast.enumElements.nonSeparatorCount() === 0) { - continue; - } - - var firstVariable = ast.enumElements.nonSeparatorAt(0); - if (!firstVariable.equalsValueClause) { - if (!seenEnumDeclWithNoFirstMember) { - seenEnumDeclWithNoFirstMember = true; - } else { - this.semanticInfoChain.addDiagnosticFromAST(firstVariable, TypeScript.DiagnosticCode.In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleDeclaration = function (ast, context) { - var result; - - if (ast.stringLiteral) { - result = this.resolveSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - result = this.resolveSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckModuleDeclaration(ast, context); - } - - return result; - }; - - PullTypeResolver.prototype.ensureAllSymbolsAreBound = function (containerSymbol) { - if (containerSymbol) { - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleSymbol = function (containerSymbol, context, moduleDeclAST, moduleDeclNameAST, sourceUnitAST) { - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - this.ensureAllSymbolsAreBound(containerSymbol); - - var instanceSymbol = containerSymbol.getInstanceSymbol(); - - if (instanceSymbol) { - this.resolveDeclaredSymbol(instanceSymbol, context); - } - - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDeclAST, moduleDeclNameAST); - if (isLastName) { - this.resolveFirstExportAssignmentStatement(moduleDeclAST.moduleElements, context); - } else if (sourceUnitAST) { - this.resolveFirstExportAssignmentStatement(sourceUnitAST.moduleElements, context); - } - - containerSymbol.setResolved(); - - if (moduleDeclNameAST) { - this.resolveOtherDeclarations(moduleDeclNameAST, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.resolveFirstExportAssignmentStatement = function (moduleElements, context) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - if (moduleElement.kind() === 134 /* ExportAssignment */) { - this.resolveExportAssignmentStatement(moduleElement, context); - return; - } - } - }; - - PullTypeResolver.prototype.resolveSingleModuleDeclaration = function (ast, astName, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - var containerSymbol = containerDecl.getSymbol(); - - return this.resolveModuleSymbol(containerSymbol, context, ast, astName, null); - }; - - PullTypeResolver.prototype.typeCheckModuleDeclaration = function (ast, context) { - if (ast.stringLiteral) { - this.typeCheckSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - this.typeCheckSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - }; - - PullTypeResolver.prototype.typeCheckSingleModuleDeclaration = function (ast, astName, context) { - var _this = this; - this.setTypeChecked(ast, context); - - if (TypeScript.ASTHelpers.isLastNameOfModule(ast, astName)) { - this.resolveAST(ast.moduleElements, false, context); - } - - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - this.validateVariableDeclarationGroups(containerDecl, context); - - if (ast.stringLiteral) { - if (TypeScript.isRelative(ast.stringLiteral.valueText())) { - this.semanticInfoChain.addDiagnosticFromAST(ast.stringLiteral, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_specify_relative_module_name); - } - } - - if (!TypeScript.ASTHelpers.moduleIsElided(ast) && !ast.stringLiteral) { - this.checkNameForCompilerGeneratedDeclarationCollision(astName, true, astName, context); - } - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInModule(containerDecl); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInModule = function (decl) { - var symbol = decl.getSymbol(); - if (!symbol) { - return; - } - - var decls = symbol.getDeclarations(); - - if (decls[0] !== decl) { - return; - } - - this.checkUniquenessOfImportNames(decls); - }; - - PullTypeResolver.prototype.checkUniquenessOfImportNames = function (decls, doesNameExistOutside) { - var _this = this; - var importDeclarationNames; - - for (var i = 0; i < decls.length; ++i) { - var childDecls = decls[i].getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[childDecl.name] = true; - } - } - } - - if (!importDeclarationNames && !doesNameExistOutside) { - return; - } - - for (var i = 0; i < decls.length; ++i) { - this.scanVariableDeclarationGroups(decls[i], function (firstDeclInGroup) { - var nameConflict = importDeclarationNames && importDeclarationNames[firstDeclInGroup.name]; - if (!nameConflict) { - nameConflict = doesNameExistOutside && doesNameExistOutside(firstDeclInGroup.name); - if (nameConflict) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[firstDeclInGroup.name] = true; - } - } - - if (nameConflict) { - _this.semanticInfoChain.addDiagnosticFromAST(firstDeclInGroup.ast(), TypeScript.DiagnosticCode.Variable_declaration_cannot_have_the_same_name_as_an_import_declaration); - } - }); - } - }; - - PullTypeResolver.prototype.scanVariableDeclarationGroups = function (enclosingDecl, firstDeclHandler, subsequentDeclHandler) { - var declGroups = enclosingDecl.getVariableDeclGroups(); - - for (var i = 0; i < declGroups.length; i++) { - var firstSymbol = null; - var enclosingDeclForFirstSymbol = null; - - if (enclosingDecl.kind === 1 /* Script */ && declGroups[i].length) { - var name = declGroups[i][0].name; - var candidateSymbol = this.semanticInfoChain.findTopLevelSymbol(name, 512 /* Variable */, enclosingDecl); - if (candidateSymbol) { - if (!candidateSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */)) { - if (!candidateSymbol.isResolved) { - this.resolveDeclaredSymbol(candidateSymbol); - } - firstSymbol = candidateSymbol; - } - } - } - - for (var j = 0; j < declGroups[i].length; j++) { - var decl = declGroups[i][j]; - - var name = decl.name; - - var symbol = decl.getSymbol(); - - if (j === 0) { - firstDeclHandler(decl); - if (!subsequentDeclHandler) { - break; - } - - if (!firstSymbol || !firstSymbol.type) { - firstSymbol = symbol; - continue; - } - } - - subsequentDeclHandler(decl, firstSymbol); - } - } - }; - - PullTypeResolver.prototype.postTypeCheckModuleDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.isTypeRefWithoutTypeArgs = function (term) { - if (term.kind() === 11 /* IdentifierName */) { - return true; - } else if (term.kind() === 121 /* QualifiedName */) { - var binex = term; - - if (binex.right.kind() === 11 /* IdentifierName */) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.createInstantiatedType = function (type, typeArguments) { - if (!type.isGeneric()) { - return type; - } - - var typeParameters = type.getTypeArgumentsOrTypeParameters(); - - var typeParameterArgumentMap = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].pullSymbolID] = typeArguments[i] || new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, typeParameters[i].name); - } - - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); - }; - - PullTypeResolver.prototype.resolveReferenceTypeDeclaration = function (classOrInterface, name, heritageClauses, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(typeDecl); - var typeDeclSymbol = typeDecl.getSymbol(); - var typeDeclIsClass = classOrInterface.kind() === 131 /* ClassDeclaration */; - var hasVisited = this.getSymbolForAST(classOrInterface, context) !== null; - - if ((typeDeclSymbol.isResolved && hasVisited) || (typeDeclSymbol.inResolution && !context.isInBaseTypeResolution())) { - return typeDeclSymbol; - } - - var wasResolving = typeDeclSymbol.inResolution; - typeDeclSymbol.startResolving(); - - var typeRefDecls = typeDeclSymbol.getDeclarations(); - - for (var i = 0; i < typeRefDecls.length; i++) { - var childDecls = typeRefDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - if (!typeDeclSymbol.isResolved) { - var typeDeclTypeParameters = typeDeclSymbol.getTypeParameters(); - for (var i = 0; i < typeDeclTypeParameters.length; i++) { - this.resolveDeclaredSymbol(typeDeclTypeParameters[i], context); - } - } - - var wasInBaseTypeResolution = context.startBaseTypeResolution(); - - if (!typeDeclIsClass && !hasVisited) { - typeDeclSymbol.resetKnownBaseTypeCount(); - } - - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - if (extendsClause) { - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); i < extendsClause.typeNames.nonSeparatorCount(); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var parentType = this.resolveTypeReference(extendsClause.typeNames.nonSeparatorAt(i), context); - - if (typeDeclSymbol.isValidBaseKind(parentType, true)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - - if (!typeDeclSymbol.hasBase(parentType) && !parentType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addExtendedType(parentType); - - var specializations = typeDeclSymbol.getKnownSpecializations(); - - for (var j = 0; j < specializations.length; j++) { - specializations[j].addExtendedType(parentType); - } - } - } else if (parentType && !this.getSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), context)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - } - } - } - - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (implementsClause && typeDeclIsClass) { - var extendsCount = extendsClause ? extendsClause.typeNames.nonSeparatorCount() : 0; - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); ((i - extendsCount) >= 0) && ((i - extendsCount) < implementsClause.typeNames.nonSeparatorCount()); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var implementedTypeAST = implementsClause.typeNames.nonSeparatorAt(i - extendsCount); - var implementedType = this.resolveTypeReference(implementedTypeAST, context); - - if (typeDeclSymbol.isValidBaseKind(implementedType, false)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - - if (!typeDeclSymbol.hasBase(implementedType) && !implementedType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addImplementedType(implementedType); - } - } else if (implementedType && !this.getSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), context)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - } - } - } - - context.doneBaseTypeResolution(wasInBaseTypeResolution); - - if (wasInBaseTypeResolution) { - typeDeclSymbol.inResolution = false; - - this.typeCheckCallBacks.push(function (context) { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - _this.resolveClassDeclaration(classOrInterface, context); - } else { - _this.resolveInterfaceDeclaration(classOrInterface, context); - } - }); - - return typeDeclSymbol; - } - - this.setSymbolForAST(name, typeDeclSymbol, context); - this.setSymbolForAST(classOrInterface, typeDeclSymbol, context); - - typeDeclSymbol.setResolved(); - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.resolveClassDeclaration = function (classDeclAST, context) { - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - if (!classDeclSymbol.isResolved) { - this.resolveReferenceTypeDeclaration(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, context); - - var constructorMethod = classDeclSymbol.getConstructorMethod(); - var extendedTypes = classDeclSymbol.getExtendedTypes(); - var parentType = extendedTypes.length ? extendedTypes[0] : null; - - if (constructorMethod) { - if (parentType) { - var parentConstructorSymbol = parentType.getConstructorMethod(); - - if (parentConstructorSymbol) { - var parentConstructorTypeSymbol = parentConstructorSymbol.type; - var constructorTypeSymbol = constructorMethod.type; - if (!constructorTypeSymbol.hasBase(parentConstructorTypeSymbol)) { - constructorTypeSymbol.addExtendedType(parentConstructorTypeSymbol); - } - } - } - - if (!classDeclSymbol.isResolved) { - return classDeclSymbol; - } - } - - this.resolveOtherDeclarations(classDeclAST, context); - } - - if (this.canTypeCheckAST(classDeclAST, context)) { - this.typeCheckClassDeclaration(classDeclAST, context); - } - - return classDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckTypeParametersOfTypeDeclaration = function (classOrInterface, context) { - var _this = this; - var typeParametersList = classOrInterface.kind() == 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - if (typeParametersList) { - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var typeDeclSymbol = typeDecl.getSymbol(); - - for (var i = 0; i < typeParametersList.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParametersList.typeParameters.nonSeparatorAt(i); - this.resolveTypeParameterDeclaration(typeParameterAST, context); - - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.checkSymbolPrivacy(typeDeclSymbol, typeParameterSymbol, function (symbol) { - return _this.typeParameterOfTypeDeclarationPrivacyErrorReporter(classOrInterface, typeParameterAST, typeParameterSymbol, symbol, context); - }); - } - } - }; - - PullTypeResolver.prototype.typeCheckClassDeclaration = function (classDeclAST, context) { - this.setTypeChecked(classDeclAST, context); - - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - this.checkNameForCompilerGeneratedDeclarationCollision(classDeclAST, true, classDeclAST.identifier, context); - this.resolveAST(classDeclAST.classElements, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(classDeclAST, context); - this.typeCheckBases(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, classDeclSymbol, this.getEnclosingDecl(classDecl), context); - - if (!classDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(classDeclSymbol, classDecl, context); - } - - this.checkTypeForDuplicateIndexSignatures(classDeclSymbol); - }; - - PullTypeResolver.prototype.postTypeCheckClassDeclaration = function (classDeclAST, context) { - this.checkThisCaptureVariableCollides(classDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveTypeSymbolSignatures = function (typeSymbol, context) { - var callSignatures = typeSymbol.getCallSignatures(); - for (var i = 0; i < callSignatures.length; i++) { - this.resolveDeclaredSymbol(callSignatures[i], context); - } - - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; i < constructSignatures.length; i++) { - this.resolveDeclaredSymbol(constructSignatures[i], context); - } - - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignatures.length; i++) { - this.resolveDeclaredSymbol(indexSignatures[i], context); - } - }; - - PullTypeResolver.prototype.resolveInterfaceDeclaration = function (interfaceDeclAST, context) { - this.resolveReferenceTypeDeclaration(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveTypeSymbolSignatures(interfaceDeclSymbol, context); - - if (interfaceDeclSymbol.isResolved) { - this.resolveOtherDeclarations(interfaceDeclAST, context); - - if (this.canTypeCheckAST(interfaceDeclAST, context)) { - this.typeCheckInterfaceDeclaration(interfaceDeclAST, context); - } - } - - return interfaceDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckInterfaceDeclaration = function (interfaceDeclAST, context) { - this.setTypeChecked(interfaceDeclAST, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveAST(interfaceDeclAST.body.typeMembers, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(interfaceDeclAST, context); - this.typeCheckBases(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, interfaceDeclSymbol, this.getEnclosingDecl(interfaceDecl), context); - - if (!interfaceDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(interfaceDeclSymbol, interfaceDecl, context); - } - - var allInterfaceDecls = interfaceDeclSymbol.getDeclarations(); - if (interfaceDecl === allInterfaceDecls[allInterfaceDecls.length - 1]) { - this.checkTypeForDuplicateIndexSignatures(interfaceDeclSymbol); - } - - if (!this.checkInterfaceDeclForIdenticalTypeParameters(interfaceDeclAST, context)) { - this.semanticInfoChain.addDiagnosticFromAST(interfaceDeclAST.identifier, TypeScript.DiagnosticCode.All_declarations_of_an_interface_must_have_identical_type_parameters); - } - }; - - PullTypeResolver.prototype.checkInterfaceDeclForIdenticalTypeParameters = function (interfaceDeclAST, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - if (!interfaceDeclSymbol.isGeneric()) { - return true; - } - - var firstInterfaceDecl = interfaceDeclSymbol.getDeclarations()[0]; - if (firstInterfaceDecl == interfaceDecl) { - return true; - } - - var typeParameters = interfaceDecl.getTypeParameters(); - var firstInterfaceDeclTypeParameters = firstInterfaceDecl.getTypeParameters(); - - if (typeParameters.length != firstInterfaceDeclTypeParameters.length) { - return false; - } - - for (var i = 0; i < typeParameters.length; i++) { - var typeParameter = typeParameters[i]; - var firstInterfaceDeclTypeParameter = firstInterfaceDeclTypeParameters[i]; - - if (typeParameter.name != firstInterfaceDeclTypeParameter.name) { - return false; - } - - var typeParameterSymbol = typeParameter.getSymbol(); - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter); - var firstInterfaceDeclTypeParameterAST = this.semanticInfoChain.getASTForDecl(firstInterfaceDeclTypeParameter); - - if (!!typeParameterAST.constraint != !!firstInterfaceDeclTypeParameterAST.constraint) { - return false; - } - - if (typeParameterAST.constraint) { - var typeParameterConstraint = this.resolveAST(typeParameterAST.constraint, false, context); - if (!this.typesAreIdenticalWithNewEnclosingTypes(typeParameterConstraint, typeParameterSymbol.getConstraint(), context)) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.checkTypeForDuplicateIndexSignatures = function (enclosingTypeSymbol) { - var indexSignatures = enclosingTypeSymbol.getOwnIndexSignatures(); - var firstStringIndexer = null; - var firstNumberIndexer = null; - for (var i = 0; i < indexSignatures.length; i++) { - var currentIndexer = indexSignatures[i]; - var currentParameterType = currentIndexer.parameters[0].type; - TypeScript.Debug.assert(currentParameterType); - if (currentParameterType === this.semanticInfoChain.stringTypeSymbol) { - if (firstStringIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_string_index_signature, null, [this.semanticInfoChain.locationFromAST(firstStringIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstStringIndexer = currentIndexer; - } - } else if (currentParameterType === this.semanticInfoChain.numberTypeSymbol) { - if (firstNumberIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_number_index_signature, null, [this.semanticInfoChain.locationFromAST(firstNumberIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstNumberIndexer = currentIndexer; - } - } - } - }; - - PullTypeResolver.prototype.filterSymbol = function (symbol, kind, enclosingDecl, context) { - if (symbol) { - if (symbol.kind & kind) { - return symbol; - } - - if (symbol.isAlias()) { - this.resolveDeclaredSymbol(symbol, context); - - var alias = symbol; - if (kind & 164 /* SomeContainer */) { - return alias.getExportAssignedContainerSymbol(); - } else if (kind & 58728795 /* SomeType */) { - return alias.getExportAssignedTypeSymbol(); - } else if (kind & 68147712 /* SomeValue */) { - return alias.getExportAssignedValueSymbol(); - } - } - } - return null; - }; - - PullTypeResolver.prototype.getMemberSymbolOfKind = function (symbolName, kind, pullTypeSymbol, enclosingDecl, context) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, kind, pullTypeSymbol); - - return { - symbol: this.filterSymbol(memberSymbol, kind, enclosingDecl, context), - aliasSymbol: memberSymbol && memberSymbol.isAlias() ? memberSymbol : null - }; - }; - - PullTypeResolver.prototype.resolveIdentifierOfInternalModuleReference = function (importDecl, identifier, moduleSymbol, enclosingDecl, context) { - var rhsName = identifier.valueText(); - if (rhsName.length === 0) { - return null; - } - - var moduleTypeSymbol = moduleSymbol.type; - var memberSymbol = this.getMemberSymbolOfKind(rhsName, 164 /* SomeContainer */, moduleTypeSymbol, enclosingDecl, context); - var containerSymbol = memberSymbol.symbol; - var valueSymbol = null; - var typeSymbol = null; - var aliasSymbol = null; - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - aliasSymbol = memberSymbol.aliasSymbol; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - var aliasedAssignedValue = containerSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = containerSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = containerSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - aliasSymbol = containerSymbol; - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return null; - } - - if (!valueSymbol) { - if (moduleTypeSymbol.getInstanceSymbol()) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 68147712 /* SomeValue */, moduleTypeSymbol.getInstanceSymbol().type, enclosingDecl, context); - valueSymbol = memberSymbol.symbol; - if (valueSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - } - - if (!typeSymbol) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 58728795 /* SomeType */, moduleTypeSymbol, enclosingDecl, context); - typeSymbol = memberSymbol.symbol; - if (typeSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Could_not_find_symbol_0_in_module_1, [rhsName, moduleSymbol.toString()]); - return null; - } - - if (!typeSymbol && containerSymbol) { - typeSymbol = containerSymbol; - } - - return { - valueSymbol: valueSymbol, - typeSymbol: typeSymbol, - containerSymbol: containerSymbol, - aliasSymbol: aliasSymbol - }; - }; - - PullTypeResolver.prototype.resolveModuleReference = function (importDecl, moduleNameExpr, enclosingDecl, context, declPath) { - TypeScript.Debug.assert(moduleNameExpr.kind() === 121 /* QualifiedName */ || moduleNameExpr.kind() === 11 /* IdentifierName */ || moduleNameExpr.kind() === 14 /* StringLiteral */, "resolving module reference should always be either name or member reference"); - - var moduleSymbol = null; - var moduleName; - - if (moduleNameExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = moduleNameExpr; - var moduleContainer = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleContainer) { - moduleName = dottedNameAST.right.valueText(); - - moduleSymbol = this.getMemberSymbolOfKind(moduleName, 4 /* Container */, moduleContainer.type, enclosingDecl, context).symbol; - if (!moduleSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.Could_not_find_module_0_in_module_1, [moduleName, moduleContainer.toString()]); - } - } - } else { - var valueText = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.valueText() : moduleNameExpr.valueText(); - var text = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.text() : moduleNameExpr.text(); - - if (text.length > 0) { - var resolvedModuleNameSymbol = this.getSymbolFromDeclPath(valueText, declPath, 4 /* Container */); - moduleSymbol = this.filterSymbol(resolvedModuleNameSymbol, 4 /* Container */, enclosingDecl, context); - if (moduleSymbol) { - this.semanticInfoChain.setSymbolForAST(moduleNameExpr, moduleSymbol); - if (resolvedModuleNameSymbol.isAlias()) { - this.semanticInfoChain.setAliasSymbolForAST(moduleNameExpr, resolvedModuleNameSymbol); - var importDeclSymbol = importDecl.getSymbol(); - importDeclSymbol.addLinkedAliasSymbol(resolvedModuleNameSymbol); - } - } else { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameExpr, TypeScript.DiagnosticCode.Unable_to_resolve_module_reference_0, [valueText]); - } - } - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.resolveInternalModuleReference = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - - var moduleReference = importStatementAST.moduleReference; - - var aliasExpr = moduleReference.kind() === 245 /* ExternalModuleReference */ ? moduleReference.stringLiteral : moduleReference.moduleName; - - var declPath = enclosingDecl.getParentPath(); - var aliasedType = null; - var importDeclSymbol = importDecl.getSymbol(); - - if (aliasExpr.kind() === 11 /* IdentifierName */ || aliasExpr.kind() === 14 /* StringLiteral */) { - var moduleSymbol = this.resolveModuleReference(importDecl, aliasExpr, enclosingDecl, context, declPath); - if (moduleSymbol) { - aliasedType = moduleSymbol.type; - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, this.semanticInfoChain.getAliasSymbolForAST(aliasExpr)); - if (aliasedType.anyDeclHasFlag(32768 /* InitializedModule */)) { - var moduleName = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.valueText() : aliasExpr.valueText(); - var valueSymbol = this.getSymbolFromDeclPath(moduleName, declPath, 68147712 /* SomeValue */); - var instanceSymbol = aliasedType.getInstanceSymbol(); - - if (valueSymbol && (instanceSymbol != valueSymbol || valueSymbol.type === aliasedType)) { - var text = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.text() : aliasExpr.text(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(aliasExpr, TypeScript.DiagnosticCode.Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1, [text, moduleSymbol.type.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - } else { - importDeclSymbol.setAssignedValueSymbol(valueSymbol); - } - } - } else { - aliasedType = this.getNewErrorTypeSymbol(); - } - } else if (aliasExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = aliasExpr; - var moduleSymbol = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleSymbol) { - var identifierResolution = this.resolveIdentifierOfInternalModuleReference(importDecl, dottedNameAST.right, moduleSymbol, enclosingDecl, context); - if (identifierResolution) { - importDeclSymbol.setAssignedValueSymbol(identifierResolution.valueSymbol); - importDeclSymbol.setAssignedTypeSymbol(identifierResolution.typeSymbol); - importDeclSymbol.setAssignedContainerSymbol(identifierResolution.containerSymbol); - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, identifierResolution.aliasSymbol); - return null; - } - } - } - - if (!aliasedType) { - importDeclSymbol.setAssignedTypeSymbol(this.getNewErrorTypeSymbol()); - } - - return aliasedType; - }; - - PullTypeResolver.prototype.resolveImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - var aliasedType = null; - - if (importDeclSymbol.isResolved) { - return importDeclSymbol; - } - - importDeclSymbol.startResolving(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - var declPath = enclosingDecl.getParentPath(); - - aliasedType = this.resolveExternalModuleReference(modPath, importDecl.fileName()); - - if (!aliasedType) { - var path = importStatementAST.moduleReference.stringLiteral.text(); - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Unable_to_resolve_external_module_0, [path]); - aliasedType = this.getNewErrorTypeSymbol(); - } - } else { - aliasedType = this.resolveInternalModuleReference(importStatementAST, context); - } - - if (aliasedType) { - if (!aliasedType.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Module_cannot_be_aliased_to_a_non_module_type); - if (!aliasedType.isError()) { - aliasedType = this.getNewErrorTypeSymbol(); - } - } - - if (aliasedType.isContainer()) { - importDeclSymbol.setAssignedContainerSymbol(aliasedType); - } - importDeclSymbol.setAssignedTypeSymbol(aliasedType); - - this.setSymbolForAST(importStatementAST.moduleReference, aliasedType, null); - } - - importDeclSymbol.setResolved(); - - this.resolveDeclaredSymbol(importDeclSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedType(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedContainer(), context); - - if (aliasedType && importDeclSymbol.anyDeclHasFlag(1 /* Exported */)) { - importDeclSymbol.setIsUsedInExportedAlias(); - - if (aliasedType.isContainer() && aliasedType.getExportAssignedValueSymbol()) { - importDeclSymbol.setIsUsedAsValue(); - } - } - - if (this.canTypeCheckAST(importStatementAST, context)) { - this.typeCheckImportDeclaration(importStatementAST, context); - } - - return importDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckImportDeclaration = function (importStatementAST, context) { - var _this = this; - this.setTypeChecked(importStatementAST, context); - - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (this.compilationSettings.noResolve()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set, null)); - } - - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - if (enclosingDecl.kind === 32 /* DynamicModule */) { - var ast = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(this.getASTForDecl(enclosingDecl)); - if (ast && ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.isRelative(modPath)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name)); - } - } - } - } - - var checkPrivacy; - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var container = containerSymbol ? containerSymbol.getContainer() : null; - if (container && container.kind === 32 /* DynamicModule */) { - checkPrivacy = true; - } - } else { - checkPrivacy = true; - } - - if (checkPrivacy) { - var typeSymbol = importDeclSymbol.getExportAssignedTypeSymbol(); - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var valueSymbol = importDeclSymbol.getExportAssignedValueSymbol(); - - this.checkSymbolPrivacy(importDeclSymbol, containerSymbol, function (symbol) { - var messageCode = TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - - if (typeSymbol !== containerSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, typeSymbol, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1; - - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - - if (valueSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, valueSymbol.type, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - } - - this.checkNameForCompilerGeneratedDeclarationCollision(importStatementAST, true, importStatementAST.identifier, context); - }; - - PullTypeResolver.prototype.postTypeCheckImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var importSymbol = importDecl.getSymbol(); - - var isUsedAsValue = importSymbol.isUsedAsValue(); - var hasAssignedValue = importStatementAST.moduleReference.kind() !== 245 /* ExternalModuleReference */ && importSymbol.getExportAssignedValueSymbol() !== null; - - if (isUsedAsValue || hasAssignedValue) { - this.checkThisCaptureVariableCollides(importStatementAST, true, context); - } - }; - - PullTypeResolver.prototype.resolveExportAssignmentStatement = function (exportAssignmentAST, context) { - var id = exportAssignmentAST.identifier.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var valueSymbol = null; - var typeSymbol = null; - var containerSymbol = null; - - var enclosingDecl = this.getEnclosingDeclForAST(exportAssignmentAST); - var parentSymbol = enclosingDecl.getSymbol(); - - if (!parentSymbol.isType() && parentSymbol.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_used_at_the_top_level_of_external_modules); - return this.semanticInfoChain.anyTypeSymbol; - } - - var declPath = enclosingDecl !== null ? [enclosingDecl] : []; - - containerSymbol = this.getSymbolFromDeclPath(id, declPath, 164 /* SomeContainer */); - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - - var aliasSymbol = containerSymbol; - var aliasedAssignedValue = aliasSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = aliasSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = aliasSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - aliasSymbol.setTypeUsedExternally(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - } - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (!valueSymbol) { - valueSymbol = this.getSymbolFromDeclPath(id, declPath, 68147712 /* SomeValue */); - } - if (!typeSymbol) { - typeSymbol = this.getSymbolFromDeclPath(id, declPath, 58728795 /* SomeType */); - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [id])); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (valueSymbol) { - parentSymbol.setExportAssignedValueSymbol(valueSymbol); - } - if (typeSymbol) { - parentSymbol.setExportAssignedTypeSymbol(typeSymbol); - } - if (containerSymbol) { - parentSymbol.setExportAssignedContainerSymbol(containerSymbol); - } - - this.resolveDeclaredSymbol(valueSymbol, context); - this.resolveDeclaredSymbol(typeSymbol, context); - this.resolveDeclaredSymbol(containerSymbol, context); - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionTypeSignature = function (funcDeclAST, typeParameters, parameterList, returnTypeAnnotation, context) { - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - var funcDeclSymbol = functionDecl.getSymbol(); - - var signature = funcDeclSymbol.kind === 33554432 /* ConstructorType */ ? funcDeclSymbol.getConstructSignatures()[0] : funcDeclSymbol.getCallSignatures()[0]; - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveFunctionTypeSignatureParameter(parameterList.parameters.nonSeparatorAt(i), signature, functionDecl, context); - } - } - - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.setTypeChecked(funcDeclAST, context); - this.typeCheckFunctionOverloads(funcDeclAST, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionTypeSignatureParameter = function (argDeclAST, signature, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - - if (argDeclAST.typeAnnotation) { - var typeRef = this.resolveTypeReference(TypeScript.ASTHelpers.getType(argDeclAST), context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(paramSymbol, typeRef); - } else { - if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_function_type_implicitly_has_an_any_type, [argDeclAST.identifier.text()])); - } - } - - if (TypeScript.hasFlag(paramDecl.flags, 128 /* Optional */) && argDeclAST.equalsValueClause && isTypesOnlyLocation(argDeclAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.resolveFunctionExpressionParameter = function (argDeclAST, id, typeExpr, equalsValueClause, contextParam, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - var contextualType = contextParam && contextParam.type; - var isImplicitAny = false; - - if (typeExpr) { - var typeRef = this.resolveTypeReference(typeExpr, context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - var diagnostic = context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - contextualType = typeRef || contextualType; - } - if (contextualType) { - if (context.isInferentiallyTyping()) { - contextualType = context.fixAllTypeParametersReferencedByType(contextualType, this); - } - context.setTypeInContext(paramSymbol, contextualType); - } else if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - isImplicitAny = true; - } - - var canTypeCheckAST = this.canTypeCheckAST(argDeclAST, context); - if (equalsValueClause && (canTypeCheckAST || !contextualType)) { - if (contextualType) { - context.propagateContextualType(contextualType); - } - - var initExprSymbol = this.resolveAST(equalsValueClause, contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - } - - if (!initExprSymbol || !initExprSymbol.type) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [id.text()])); - - if (!contextualType) { - context.setTypeInContext(paramSymbol, this.getNewErrorTypeSymbol(paramSymbol.name)); - } - } else { - var initTypeSymbol = this.getInstanceTypeForAssignment(argDeclAST, initExprSymbol.type, context); - if (!contextualType) { - context.setTypeInContext(paramSymbol, initTypeSymbol.widenedType(this, equalsValueClause, context)); - isImplicitAny = initTypeSymbol !== paramSymbol.type; - } else { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, contextualType, argDeclAST, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(argDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol)])); - } - } - } - } - } - - if (!contextualType && !paramSymbol.isVarArg && !initTypeSymbol) { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - isImplicitAny = true; - } - - if (isImplicitAny && this.compilationSettings.noImplicitAny()) { - var functionExpressionName = paramDecl.getParentDecl().getFunctionExpressionName(); - if (functionExpressionName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [id.text(), functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_lambda_function_implicitly_has_an_any_type, [id.text()])); - } - } - - if (canTypeCheckAST) { - this.checkNameForCompilerGeneratedDeclarationCollision(argDeclAST, true, id, context); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.checkNameForCompilerGeneratedDeclarationCollision = function (astWithName, isDeclaration, name, context) { - var compilerReservedName = getCompilerReservedName(name); - switch (compilerReservedName) { - case 1 /* _this */: - this.postTypeCheckWorkitems.push(astWithName); - return; - - case 2 /* _super */: - this.checkSuperCaptureVariableCollides(astWithName, isDeclaration, context); - return; - - case 3 /* arguments */: - this.checkArgumentsCollides(astWithName, context); - return; - - case 4 /* _i */: - this.checkIndexOfRestArgumentInitializationCollides(astWithName, isDeclaration, context); - return; - - case 5 /* require */: - case 6 /* exports */: - if (isDeclaration) { - this.checkExternalModuleRequireExportsCollides(astWithName, name, context); - } - return; - } - }; - - PullTypeResolver.prototype.hasRestParameterCodeGen = function (someFunctionDecl) { - var enclosingAST = this.getASTForDecl(someFunctionDecl); - var nodeType = enclosingAST.kind(); - - if (nodeType === 129 /* FunctionDeclaration */) { - var functionDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && functionDeclaration.block && TypeScript.lastParameterIsRest(functionDeclaration.callSignature.parameterList); - } else if (nodeType === 135 /* MemberFunctionDeclaration */) { - var memberFunction = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && memberFunction.block && TypeScript.lastParameterIsRest(memberFunction.callSignature.parameterList); - } else if (nodeType === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.getParentDecl().flags, 8 /* Ambient */) && constructorDeclaration.block && TypeScript.lastParameterIsRest(constructorDeclaration.callSignature.parameterList); - } else if (nodeType === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunctionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(arrowFunctionExpression.callSignature.parameterList); - } else if (nodeType === 222 /* FunctionExpression */) { - var functionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(functionExpression.callSignature.parameterList); - } - - return false; - }; - - PullTypeResolver.prototype.checkArgumentsCollides = function (ast, context) { - if (ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - if (TypeScript.hasFlag(enclosingDecl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(enclosingDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters)); - } - } - } - }; - - PullTypeResolver.prototype.checkIndexOfRestArgumentInitializationCollides = function (ast, isDeclaration, context) { - if (!isDeclaration || ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var declPath = isDeclaration ? [enclosingDecl] : (enclosingDecl ? enclosingDecl.getParentPath() : []); - var resolvedSymbol = null; - var resolvedSymbolContainer; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (!isDeclaration) { - if (!resolvedSymbol) { - resolvedSymbol = this.resolveNameExpression(ast, context); - if (resolvedSymbol.isError()) { - return; - } - - resolvedSymbolContainer = resolvedSymbol.getContainer(); - } - - if (resolvedSymbolContainer && TypeScript.ArrayUtilities.contains(resolvedSymbolContainer.getDeclarations(), decl)) { - break; - } - } - - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter)); - } - } - } - } - }; - - PullTypeResolver.prototype.checkExternalModuleRequireExportsCollides = function (ast, name, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(name); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - if (enclosingDecl && enclosingDecl.kind === 32 /* DynamicModule */) { - var decl = this.semanticInfoChain.getDeclForAST(ast); - - if (!TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - var nameText = name.valueText(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, [nameText, nameText])); - } - } - }; - - PullTypeResolver.prototype.resolveObjectTypeTypeReference = function (objectType, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(objectType); - TypeScript.Debug.assert(interfaceDecl); - - var interfaceSymbol = interfaceDecl.getSymbol(); - TypeScript.Debug.assert(interfaceSymbol); - - if (objectType.typeMembers) { - var memberDecl = null; - var memberSymbol = null; - var memberType = null; - var typeMembers = objectType.typeMembers; - - for (var i = 0; i < typeMembers.nonSeparatorCount(); i++) { - memberDecl = this.semanticInfoChain.getDeclForAST(typeMembers.nonSeparatorAt(i)); - memberSymbol = (memberDecl.kind & 7340032 /* SomeSignature */) ? memberDecl.getSignatureSymbol() : memberDecl.getSymbol(); - - this.resolveAST(typeMembers.nonSeparatorAt(i), false, context); - - memberType = memberSymbol.type; - - if ((memberType && memberType.isGeneric()) || (memberSymbol.isSignature() && memberSymbol.isGeneric())) { - interfaceSymbol.setHasGenericMember(); - } - } - } - - interfaceSymbol.setResolved(); - - if (this.canTypeCheckAST(objectType, context)) { - this.typeCheckObjectTypeTypeReference(objectType, context); - } - - return interfaceSymbol; - }; - - PullTypeResolver.prototype.typeCheckObjectTypeTypeReference = function (objectType, context) { - this.setTypeChecked(objectType, context); - var objectTypeDecl = this.semanticInfoChain.getDeclForAST(objectType); - var objectTypeSymbol = objectTypeDecl.getSymbol(); - - this.typeCheckMembersAgainstIndexer(objectTypeSymbol, objectTypeDecl, context); - this.checkTypeForDuplicateIndexSignatures(objectTypeSymbol); - }; - - PullTypeResolver.prototype.resolveTypeAnnotation = function (typeAnnotation, context) { - return this.resolveTypeReference(typeAnnotation.type, context); - }; - - PullTypeResolver.prototype.resolveTypeReference = function (typeRef, context) { - if (typeRef === null) { - return null; - } - - TypeScript.Debug.assert(typeRef.kind() !== 244 /* TypeAnnotation */); - - var aliasType = null; - var type = this.computeTypeReferenceSymbol(typeRef, context); - - if (type.kind === 4 /* Container */) { - var container = type; - var instanceSymbol = container.getInstanceSymbol(); - - if (instanceSymbol && (instanceSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */) || instanceSymbol.kind === 32768 /* ConstructorMethod */)) { - type = instanceSymbol.type.getAssociatedContainerType(); - } - } - - if (type && type.isAlias()) { - aliasType = type; - type = aliasType.getExportAssignedTypeSymbol(); - } - - if (type && !type.isGeneric()) { - if (aliasType) { - this.semanticInfoChain.setAliasSymbolForAST(typeRef, aliasType); - } - } - - if (type && !type.isError()) { - if ((type.kind & 58728795 /* SomeType */) === 0) { - if (type.kind & 164 /* SomeContainer */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_cannot_refer_to_container_0, [aliasType ? aliasType.toString() : type.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_must_refer_to_type)); - } - } - } - - if (this.canTypeCheckAST(typeRef, context)) { - this.setTypeChecked(typeRef, context); - } - - return type; - }; - - PullTypeResolver.prototype.getArrayType = function (elementType) { - var arraySymbol = elementType.getArrayType(); - - if (!arraySymbol) { - arraySymbol = this.createInstantiatedType(this.cachedArrayInterfaceType(), [elementType]); - - if (!arraySymbol) { - arraySymbol = this.semanticInfoChain.anyTypeSymbol; - } - - elementType.setArrayType(arraySymbol); - } - - return arraySymbol; - }; - - PullTypeResolver.prototype.computeTypeReferenceSymbol = function (term, context) { - switch (term.kind()) { - case 60 /* AnyKeyword */: - return this.semanticInfoChain.anyTypeSymbol; - case 61 /* BooleanKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - case 67 /* NumberKeyword */: - return this.semanticInfoChain.numberTypeSymbol; - case 69 /* StringKeyword */: - return this.semanticInfoChain.stringTypeSymbol; - case 41 /* VoidKeyword */: - return this.semanticInfoChain.voidTypeSymbol; - } - - var typeDeclSymbol = null; - - if (term.kind() === 11 /* IdentifierName */) { - typeDeclSymbol = this.resolveTypeNameExpression(term, context); - } else if (term.kind() === 123 /* FunctionType */) { - var functionType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(functionType, functionType.typeParameterList, functionType.parameterList, functionType.type, context); - } else if (term.kind() === 125 /* ConstructorType */) { - var constructorType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(constructorType, constructorType.typeParameterList, constructorType.parameterList, constructorType.type, context); - } else if (term.kind() === 122 /* ObjectType */) { - typeDeclSymbol = this.resolveObjectTypeTypeReference(term, context); - } else if (term.kind() === 126 /* GenericType */) { - typeDeclSymbol = this.resolveGenericTypeReference(term, context); - } else if (term.kind() === 121 /* QualifiedName */) { - typeDeclSymbol = this.resolveQualifiedName(term, context); - } else if (term.kind() === 14 /* StringLiteral */) { - var stringConstantAST = term; - var enclosingDecl = this.getEnclosingDeclForAST(term); - typeDeclSymbol = new TypeScript.PullStringConstantTypeSymbol(stringConstantAST.text()); - var decl = new TypeScript.PullSynthesizedDecl(stringConstantAST.text(), stringConstantAST.text(), typeDeclSymbol.kind, null, enclosingDecl, enclosingDecl.semanticInfoChain); - typeDeclSymbol.addDeclaration(decl); - } else if (term.kind() === 127 /* TypeQuery */) { - var typeQuery = term; - - var typeQueryTerm = typeQuery.name; - - var valueSymbol = this.resolveAST(typeQueryTerm, false, context); - - if (valueSymbol && valueSymbol.isAlias()) { - if (valueSymbol.assignedValue()) { - valueSymbol = valueSymbol.assignedValue(); - } else { - var containerSymbol = valueSymbol.getExportAssignedContainerSymbol(); - valueSymbol = (containerSymbol && containerSymbol.isContainer() && !containerSymbol.isEnum()) ? containerSymbol.getInstanceSymbol() : null; - } - } - - if (valueSymbol) { - typeDeclSymbol = valueSymbol.type.widenedType(this, typeQueryTerm, context); - } else { - typeDeclSymbol = this.getNewErrorTypeSymbol(); - } - } else if (term.kind() === 124 /* ArrayType */) { - var arrayType = term; - var underlying = this.resolveTypeReference(arrayType.type, context); - typeDeclSymbol = this.getArrayType(underlying); - } else { - throw TypeScript.Errors.invalidOperation("unknown type"); - } - - if (!typeDeclSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Unable_to_resolve_type)); - return this.getNewErrorTypeSymbol(); - } - - if (typeDeclSymbol.isError()) { - return typeDeclSymbol; - } - - if (this.genericTypeIsUsedWithoutRequiredTypeArguments(typeDeclSymbol, term, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Generic_type_references_must_include_all_type_arguments)); - typeDeclSymbol = this.instantiateTypeToAny(typeDeclSymbol, context); - } - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.genericTypeIsUsedWithoutRequiredTypeArguments = function (typeSymbol, term, context) { - if (!typeSymbol) { - return false; - } - - if (typeSymbol.isAlias()) { - return this.genericTypeIsUsedWithoutRequiredTypeArguments(typeSymbol.getExportAssignedTypeSymbol(), term, context); - } - - return typeSymbol.isNamedTypeSymbol() && typeSymbol.isGeneric() && !typeSymbol.isTypeParameter() && (typeSymbol.isResolved || typeSymbol.inResolution) && !typeSymbol.getIsSpecialized() && typeSymbol.getTypeParameters().length && typeSymbol.getTypeArguments() === null && this.isTypeRefWithoutTypeArgs(term); - }; - - PullTypeResolver.prototype.resolveMemberVariableDeclaration = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl.variableDeclarator), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolvePropertySignature = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclarator = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveParameterList = function (list, context) { - return this.resolveSeparatedList(list.parameters, context); - }; - - PullTypeResolver.prototype.resolveParameter = function (parameter, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.getEnumTypeSymbol = function (enumElement, context) { - var enumDeclaration = enumElement.parent.parent; - var decl = this.semanticInfoChain.getDeclForAST(enumDeclaration); - var symbol = decl.getSymbol(); - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.resolveEnumElement = function (enumElement, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckEnumElement = function (enumElement, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveEqualsValueClause = function (clause, isContextuallyTyped, context) { - if (this.canTypeCheckAST(clause, context)) { - this.setTypeChecked(clause, context); - } - - return this.resolveAST(clause.value, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - - if (enclosingDecl && decl.kind === 2048 /* Parameter */) { - enclosingDecl.ensureSymbolIsBound(); - } - - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (declSymbol.isResolved) { - var declType = declSymbol.type; - var valDecl = decl.getValueDecl(); - - if (valDecl) { - var valSymbol = valDecl.getSymbol(); - - if (valSymbol && !valSymbol.isResolved) { - valSymbol.type = declType; - valSymbol.setResolved(); - } - } - } else { - if (declSymbol.inResolution) { - declSymbol.type = this.semanticInfoChain.anyTypeSymbol; - declSymbol.setResolved(); - return declSymbol; - } - - if (!declSymbol.type || !declSymbol.type.isError()) { - declSymbol.startResolving(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - if (!hasTypeExpr) { - this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - } - - if (!(hasTypeExpr || init)) { - var defaultType = this.semanticInfoChain.anyTypeSymbol; - - if (declSymbol.isVarArg && this.cachedArrayInterfaceType()) { - defaultType = this.createInstantiatedType(this.cachedArrayInterfaceType(), [defaultType]); - } - - context.setTypeInContext(declSymbol, defaultType); - - if (declParameterSymbol) { - declParameterSymbol.type = defaultType; - } - } - declSymbol.setResolved(); - - if (declParameterSymbol) { - declParameterSymbol.setResolved(); - } - } - } - - if (this.canTypeCheckAST(varDeclOrParameter, context)) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context); - } - - return declSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclarationTypeExpr = function (varDeclOrParameter, name, typeExpr, context) { - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (varDeclOrParameter.kind() === 243 /* EnumElement */) { - var result = this.getEnumTypeSymbol(varDeclOrParameter, context); - declSymbol.type = result; - return result; - } - - if (!typeExpr) { - return null; - } - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var typeExprSymbol = this.resolveTypeReference(typeExpr, context); - - if (!typeExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - declSymbol.type = this.getNewErrorTypeSymbol(); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else if (typeExprSymbol.isError()) { - context.setTypeInContext(declSymbol, typeExprSymbol); - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, typeExprSymbol); - } - } else { - if (typeExprSymbol === this.semanticInfoChain.anyTypeSymbol) { - decl.setFlag(16777216 /* IsAnnotatedWithAny */); - } - - if (typeExprSymbol.isContainer()) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - typeExprSymbol = typeExprSymbol.type; - - if (typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.isContainer() && !typeExprSymbol.isEnum()) { - var instanceSymbol = typeExprSymbol.getInstanceSymbol(); - - if (!instanceSymbol || !TypeScript.PullHelpers.symbolIsEnum(instanceSymbol)) { - typeExprSymbol = this.getNewErrorTypeSymbol(); - } else { - typeExprSymbol = instanceSymbol.type; - } - } - } - } else if (declSymbol.isVarArg && !(typeExprSymbol.isArrayNamedTypeReference() || typeExprSymbol === this.cachedArrayInterfaceType())) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeExprSymbol = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(declSymbol, typeExprSymbol); - - if (declParameterSymbol) { - declParameterSymbol.type = typeExprSymbol; - } - - if (typeExprSymbol.kind === 16777216 /* FunctionType */ && !typeExprSymbol.getFunctionSymbol()) { - typeExprSymbol.setFunctionSymbol(declSymbol); - } - } - - return typeExprSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr = function (varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol) { - if (!init) { - return null; - } - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - if (typeExprSymbol) { - context.pushNewContextualType(typeExprSymbol); - } - - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var initExprSymbol = this.resolveAST(init, typeExprSymbol !== null, context); - - if (typeExprSymbol) { - context.popAnyContextualType(); - } - - if (!initExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - - if (!hasTypeExpr) { - context.setTypeInContext(declSymbol, this.getNewErrorTypeSymbol()); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } - } else { - var initTypeSymbol = initExprSymbol.type; - - if (!hasTypeExpr) { - var widenedInitTypeSymbol = initTypeSymbol.widenedType(this, init.value, context); - context.setTypeInContext(declSymbol, widenedInitTypeSymbol); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, widenedInitTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - if ((widenedInitTypeSymbol !== initTypeSymbol) && (widenedInitTypeSymbol === this.semanticInfoChain.anyTypeSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - - return widenedInitTypeSymbol; - } - } - - return initTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckPropertySignature = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberVariableDeclaration = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclarator = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckParameter = function (parameter, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var _this = this; - this.setTypeChecked(varDeclOrParameter, context); - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - var initTypeSymbol = this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - - if (hasTypeExpr || init) { - if (typeExprSymbol && typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.kind === 32 /* DynamicModule */) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - var instanceTypeSymbol = typeExprSymbol.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [typeExprSymbol.toString()])); - typeExprSymbol = null; - } else { - typeExprSymbol = instanceTypeSymbol; - } - } - } - - initTypeSymbol = this.getInstanceTypeForAssignment(varDeclOrParameter, initTypeSymbol, context); - - if (initTypeSymbol && typeExprSymbol) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, typeExprSymbol, varDeclOrParameter, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(varDeclOrParameter); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol)])); - } - } - } - } else if (varDeclOrParameter.kind() !== 243 /* EnumElement */ && this.compilationSettings.noImplicitAny() && !this.isForInVariableDeclarator(varDeclOrParameter)) { - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var needReportError = function (containerDecl, selfDecl) { - if (!TypeScript.hasFlag(containerDecl.flags, 8 /* Ambient */)) { - return true; - } - - return selfDecl && !TypeScript.hasFlag(selfDecl.flags, 2 /* Private */); - }; - - if ((wrapperDecl.kind === 16384 /* Function */ || wrapperDecl.kind === 32768 /* ConstructorMethod */ || wrapperDecl.kind === 2097152 /* ConstructSignature */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } else if (wrapperDecl.kind === 65536 /* Method */) { - var parentDecl = wrapperDecl.getParentDecl(); - - if (needReportError(parentDecl, wrapperDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } - } else if (decl.kind === 4096 /* Property */ && !declSymbol.getContainer().isNamedTypeSymbol()) { - if (needReportError(wrapperDecl, decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Member_0_of_object_type_implicitly_has_an_any_type, [name.text()])); - } - } else if (wrapperDecl.kind !== 268435456 /* CatchBlock */) { - if (needReportError(wrapperDecl) || !TypeScript.hasModifier(modifiers, 2 /* Private */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - } - - if (init && varDeclOrParameter.kind() === 242 /* Parameter */) { - var containerSignature = enclosingDecl.getSignatureSymbol(); - if (containerSignature && !containerSignature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - } - if (declSymbol.kind !== 2048 /* Parameter */ && (declSymbol.kind !== 4096 /* Property */ || declSymbol.getContainer().isNamedTypeSymbol())) { - this.checkSymbolPrivacy(declSymbol, declSymbol.type, function (symbol) { - return _this.variablePrivacyErrorReporter(varDeclOrParameter, declSymbol, symbol, context); - }); - } - - if ((declSymbol.kind !== 4096 /* Property */ && declSymbol.kind !== 67108864 /* EnumMember */) || declSymbol.anyDeclHasFlag(8388608 /* PropertyParameter */)) { - this.checkNameForCompilerGeneratedDeclarationCollision(varDeclOrParameter, true, name, context); - } - }; - - PullTypeResolver.prototype.isForInVariableDeclarator = function (ast) { - return ast.kind() === 225 /* VariableDeclarator */ && ast.parent && ast.parent.parent && ast.parent.parent.parent && ast.parent.kind() === 2 /* SeparatedList */ && ast.parent.parent.kind() === 224 /* VariableDeclaration */ && ast.parent.parent.parent.kind() === 155 /* ForInStatement */ && ast.parent.parent.parent.variableDeclaration === ast.parent.parent; - }; - - PullTypeResolver.prototype.checkSuperCaptureVariableCollides = function (superAST, isDeclaration, context) { - var enclosingDecl = this.getEnclosingDeclForAST(superAST); - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(superAST, enclosingDecl); - - if (classSymbol && !classSymbol.anyDeclHasFlag(8 /* Ambient */)) { - if (superAST.kind() === 242 /* Parameter */) { - var enclosingAST = this.getASTForDecl(enclosingDecl); - if (enclosingAST.kind() !== 218 /* ParenthesizedArrowFunctionExpression */ && enclosingAST.kind() !== 219 /* SimpleArrowFunctionExpression */) { - var block = enclosingDecl.kind === 65536 /* Method */ ? enclosingAST.block : enclosingAST.block; - if (!block) { - return; - } - } - } - - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - if (parents.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(superAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference : TypeScript.DiagnosticCode.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference)); - } - } - }; - - PullTypeResolver.prototype.checkThisCaptureVariableCollides = function (_thisAST, isDeclaration, context) { - if (isDeclaration) { - var decl = this.semanticInfoChain.getDeclForAST(_thisAST); - if (TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - return; - } - } - - var enclosingDecl = this.getEnclosingDeclForAST(_thisAST); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(_thisAST); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - var declPath = enclosingDecl.getParentPath(); - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - continue; - } - - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - if (TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(_thisAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference)); - } - break; - } - } - }; - - PullTypeResolver.prototype.postTypeCheckVariableDeclaratorOrParameter = function (varDeclOrParameter, context) { - this.checkThisCaptureVariableCollides(varDeclOrParameter, true, context); - }; - - PullTypeResolver.prototype.resolveTypeParameterDeclaration = function (typeParameterAST, context) { - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.resolveFirstTypeParameterDeclaration(typeParameterSymbol, context); - - if (typeParameterSymbol.isResolved && this.canTypeCheckAST(typeParameterAST, context)) { - this.typeCheckTypeParameterDeclaration(typeParameterAST, context); - } - - return typeParameterSymbol; - }; - - PullTypeResolver.prototype.resolveFirstTypeParameterDeclaration = function (typeParameterSymbol, context) { - var typeParameterDecl = typeParameterSymbol.getDeclarations()[0]; - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecl); - - if (typeParameterSymbol.isResolved || typeParameterSymbol.inResolution) { - return; - } - - typeParameterSymbol.startResolving(); - - if (typeParameterAST.constraint) { - var constraintTypeSymbol = this.resolveTypeReference(typeParameterAST.constraint.type, context); - - if (constraintTypeSymbol) { - typeParameterSymbol.setConstraint(constraintTypeSymbol); - } - } - - typeParameterSymbol.setResolved(); - }; - - PullTypeResolver.prototype.typeCheckTypeParameterDeclaration = function (typeParameterAST, context) { - this.setTypeChecked(typeParameterAST, context); - - var constraint = this.resolveAST(typeParameterAST.constraint, false, context); - - if (constraint) { - var typeParametersAST = typeParameterAST.parent; - var typeParameters = []; - for (var i = 0; i < typeParametersAST.nonSeparatorCount(); i++) { - var currentTypeParameterAST = typeParametersAST.nonSeparatorAt(i); - var currentTypeParameterDecl = this.semanticInfoChain.getDeclForAST(currentTypeParameterAST); - var currentTypeParameter = this.semanticInfoChain.getSymbolForDecl(currentTypeParameterDecl); - typeParameters[currentTypeParameter.pullSymbolID] = currentTypeParameter; - } - - if (constraint.wrapsSomeTypeParameter(typeParameters)) { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); - } - } - }; - - PullTypeResolver.prototype.resolveConstraint = function (constraint, context) { - if (this.canTypeCheckAST(constraint, context)) { - this.setTypeChecked(constraint, context); - } - - return this.resolveTypeReference(constraint.type, context); - }; - - PullTypeResolver.prototype.resolveFunctionBodyReturnTypes = function (funcDeclAST, block, bodyExpression, signature, useContextualType, enclosingDecl, context) { - var _this = this; - var returnStatementsExpressions = []; - - var enclosingDeclStack = [enclosingDecl]; - - var preFindReturnExpressionTypes = function (ast, walker) { - var go = true; - - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - returnStatementsExpressions.push({ expression: returnStatement.expression, enclosingDecl: enclosingDeclStack[enclosingDeclStack.length - 1] }); - go = false; - break; - - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack[enclosingDeclStack.length] = _this.semanticInfoChain.getDeclForAST(ast); - break; - - default: - break; - } - - walker.options.goChildren = go; - - return ast; - }; - - var postFindReturnExpressionEnclosingDecls = function (ast, walker) { - switch (ast.kind()) { - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack.length--; - break; - default: - break; - } - - walker.options.goChildren = true; - - return ast; - }; - - if (block) { - TypeScript.getAstWalkerFactory().walk(block, preFindReturnExpressionTypes, postFindReturnExpressionEnclosingDecls); - } else { - returnStatementsExpressions.push({ expression: bodyExpression, enclosingDecl: enclosingDecl }); - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - } - - if (!returnStatementsExpressions.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var returnExpressionSymbols = []; - var returnExpressions = []; - - for (var i = 0; i < returnStatementsExpressions.length; i++) { - var returnExpression = returnStatementsExpressions[i].expression; - if (returnExpression) { - var returnType = this.resolveAST(returnExpression, useContextualType, context).type; - - if (returnType.isError()) { - signature.returnType = returnType; - return; - } else { - if (returnExpression.parent.kind() === 150 /* ReturnStatement */) { - this.setSymbolForAST(returnExpression.parent, returnType, context); - } - } - - returnExpressionSymbols.push(returnType); - returnExpressions.push(returnExpression); - } - } - - if (!returnExpressionSymbols.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var collection = { - getLength: function () { - return returnExpressionSymbols.length; - }, - getTypeAtIndex: function (index) { - return returnExpressionSymbols[index].type; - } - }; - - var bestCommonReturnType = this.findBestCommonType(collection, context, new TypeComparisonInfo()); - var returnType = bestCommonReturnType; - var returnExpression = returnExpressions[returnExpressionSymbols.indexOf(returnType)]; - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - - if (returnType) { - var previousReturnType = returnType; - var newReturnType = returnType.widenedType(this, returnExpression, context); - signature.returnType = newReturnType; - - if (!TypeScript.ArrayUtilities.contains(returnExpressionSymbols, bestCommonReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions)); - } - - if (this.compilationSettings.noImplicitAny()) { - if (previousReturnType !== newReturnType && newReturnType === this.semanticInfoChain.anyTypeSymbol) { - var functionName = enclosingDecl.name; - if (functionName === "") { - functionName = enclosingDecl.getFunctionExpressionName(); - } - - if (functionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } - - if (!functionSymbol.type && functionSymbol.isAccessor()) { - functionSymbol.type = signature.returnType; - } - } - } - }; - - PullTypeResolver.prototype.typeCheckConstructorDeclaration = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveAST(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), false, context); - } - - this.resolveAST(funcDeclAST.block, false, context); - - if (funcDecl.getSignatureSymbol() && funcDecl.getSignatureSymbol().isDefinition() && this.enclosingClassIsDerived(funcDecl.getParentDecl())) { - if (!this.constructorHasSuperCall(funcDeclAST)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call)); - } else if (this.superCallMustBeFirstStatementInConstructor(funcDecl)) { - var firstStatement = this.getFirstStatementOfBlockOrNull(funcDeclAST.block); - if (!firstStatement || !this.isSuperInvocationExpressionStatement(firstStatement)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties)); - } - } - } - - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.callSignature.parameterList), null, funcDeclAST.block, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.constructorHasSuperCall = function (constructorDecl) { - var _this = this; - if (constructorDecl.block) { - var foundSuperCall = false; - var pre = function (ast, walker) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - walker.options.goChildren = false; - default: - if (_this.isSuperInvocationExpression(ast)) { - foundSuperCall = true; - walker.options.stopWalking = true; - } - } - }; - - TypeScript.getAstWalkerFactory().walk(constructorDecl.block, pre); - return foundSuperCall; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), funcDecl.callSignature.typeAnnotation, funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckCallSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckConstructSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMethodSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberFunctionDeclaration = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.containsSingleThrowStatement = function (block) { - return block !== null && block.statements.childCount() === 1 && block.statements.childAt(0).kind() === 157 /* ThrowStatement */; - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(parameters, false, context); - - this.resolveAST(block, false, context); - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, isStatic, typeParameters, TypeScript.ASTHelpers.parametersFromParameterList(parameters), returnTypeAnnotation, block, context); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(funcDecl, returnTypeAnnotation, funcDecl.getSignatureSymbol().returnType, block, context); - - if (funcDecl.kind === 16384 /* Function */) { - this.checkNameForCompilerGeneratedDeclarationCollision(funcDeclAST, true, name, context); - } - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement = function (functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context) { - var hasReturn = TypeScript.hasFlag(functionDecl.flags, 4194304 /* HasReturnStatement */); - - if (block !== null && returnTypeAnnotation !== null && !hasReturn) { - var isVoidOrAny = this.isAnyOrEquivalent(returnTypeSymbol) || returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol; - - if (!isVoidOrAny && !this.containsSingleThrowStatement(block)) { - var funcName = functionDecl.getDisplayName() || TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Function_declared_a_non_void_return_type_but_has_no_return_expression)); - } - } - }; - - PullTypeResolver.prototype.typeCheckIndexSignature = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - this.resolveAST(funcDeclAST.parameter, false, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameter(funcDeclAST.parameter), TypeScript.ASTHelpers.getType(funcDeclAST), null, context); - - var signature = funcDecl.getSignatureSymbol(); - - this.typeCheckCallBacks.push(function (context) { - var parentSymbol = funcDecl.getSignatureSymbol().getContainer(); - var allIndexSignatures = _this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parentSymbol, context); - var stringIndexSignature = allIndexSignatures.stringSignature; - var numberIndexSignature = allIndexSignatures.numericSignature; - var isNumericIndexer = numberIndexSignature === signature; - - if (numberIndexSignature && stringIndexSignature && (isNumericIndexer || stringIndexSignature.getDeclarations()[0].getParentDecl() !== numberIndexSignature.getDeclarations()[0].getParentDecl())) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!_this.sourceIsAssignableToTarget(numberIndexSignature.returnType, stringIndexSignature.returnType, funcDeclAST, context, comparisonInfo)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(funcDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol)])); - } - } - } - - var allMembers = parentSymbol.type.getAllMembers(536869887 /* All */, 0 /* all */); - for (var i = 0; i < allMembers.length; i++) { - var member = allMembers[i]; - var name = member.name; - if (name || (member.kind === 4096 /* Property */ && name === "")) { - if (!allMembers[i].isResolved) { - _this.resolveDeclaredSymbol(allMembers[i], context); - } - - if (parentSymbol !== allMembers[i].getContainer()) { - var isMemberNumeric = TypeScript.PullHelpers.isNameNumeric(name); - var indexerKindMatchesMemberNameKind = isNumericIndexer === isMemberNumeric; - var onlyStringIndexerIsPresent = !numberIndexSignature; - - if (indexerKindMatchesMemberNameKind || onlyStringIndexerIsPresent) { - var comparisonInfo = new TypeComparisonInfo(); - if (!_this.sourceIsAssignableToTarget(allMembers[i].type, signature.returnType, funcDeclAST, context, comparisonInfo, false)) { - _this.reportErrorThatMemberIsNotSubtypeOfIndexer(allMembers[i], signature, funcDeclAST, context, comparisonInfo); - } - } - } - } - } - }); - }; - - PullTypeResolver.prototype.postTypeCheckFunctionDeclaration = function (funcDeclAST, context) { - this.checkThisCaptureVariableCollides(funcDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveReturnTypeAnnotationOfFunctionDeclaration = function (funcDeclAST, returnTypeAnnotation, context) { - var returnTypeSymbol = null; - - if (returnTypeAnnotation) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - } else { - var isConstructor = funcDeclAST.kind() === 137 /* ConstructorDeclaration */ || funcDeclAST.kind() === 143 /* ConstructSignature */; - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } - - return returnTypeSymbol; - }; - - PullTypeResolver.prototype.resolveMemberFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveCallSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveConstructSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveMethodSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveAnyFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveSimpleArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, null, TypeScript.ASTHelpers.parametersFromIdentifier(funcDecl.identifier), null, funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveParenthesizedArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.getEnclosingClassDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - PullTypeResolver.prototype.resolveConstructorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - return funcSymbol; - } - - if (!signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - - if (signature.isGeneric()) { - if (funcSymbol) { - funcSymbol.type.setHasGenericSignature(); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveIndexMemberDeclaration = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveIndexSignature(ast.indexSignature, context); - }; - - PullTypeResolver.prototype.resolveIndexSignature = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - return funcSymbol; - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (funcDeclAST.typeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(TypeScript.ASTHelpers.getType(funcDeclAST), context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(TypeScript.ASTHelpers.getType(funcDeclAST), TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (funcDeclAST.parameter) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - this.resolveParameter(funcDeclAST.parameter, context); - context.inTypeCheck = prevInTypeCheck; - } - - if (funcDeclAST.typeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - var isConstructor = funcDeclAST.kind() === 143 /* ConstructSignature */; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - return funcSymbol; - } - - if (isConstructor && !signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - } - - if (returnTypeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else if (funcDecl.kind !== 2097152 /* ConstructSignature */) { - if (TypeScript.hasFlag(funcDecl.flags, 2048 /* Signature */)) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - var parentDeclFlags = 0 /* None */; - if (TypeScript.hasFlag(funcDecl.kind, 65536 /* Method */) || TypeScript.hasFlag(funcDecl.kind, 32768 /* ConstructorMethod */)) { - var parentDecl = funcDecl.getParentDecl(); - parentDeclFlags = parentDecl.flags; - } - - if (this.compilationSettings.noImplicitAny() && (!TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) || (TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) && !TypeScript.hasFlag(funcDecl.flags, 2 /* Private */)))) { - var funcDeclASTName = name; - if (funcDeclASTName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [funcDeclASTName.text()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } - } else if (funcDecl.kind === 2097152 /* ConstructSignature */) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveGetterReturnTypeAnnotation = function (getterFunctionDeclarationAst, enclosingDecl, context) { - if (getterFunctionDeclarationAst && getterFunctionDeclarationAst.typeAnnotation) { - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveSetterArgumentTypeAnnotation = function (setterFunctionDeclarationAst, enclosingDecl, context) { - if (setterFunctionDeclarationAst && setterFunctionDeclarationAst.parameterList && setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorCount() > 0) { - var parameter = setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorAt(0); - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(parameter), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveAccessorDeclaration = function (funcDeclAst, context) { - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - - if (accessorSymbol.inResolution) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - accessorSymbol.setResolved(); - - return accessorSymbol; - } - - if (accessorSymbol.isResolved) { - if (!accessorSymbol.type) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - } - } else { - var getterSymbol = accessorSymbol.getGetter(); - var getterFunctionDeclarationAst = getterSymbol ? getterSymbol.getDeclarations()[0].ast() : null; - var hasGetter = getterSymbol !== null; - - var setterSymbol = accessorSymbol.getSetter(); - var setterFunctionDeclarationAst = setterSymbol ? setterSymbol.getDeclarations()[0].ast() : null; - var hasSetter = setterSymbol !== null; - - var getterAnnotatedType = this.resolveGetterReturnTypeAnnotation(getterFunctionDeclarationAst, functionDeclaration, context); - var getterHasTypeAnnotation = getterAnnotatedType !== null; - - var setterAnnotatedType = this.resolveSetterArgumentTypeAnnotation(setterFunctionDeclarationAst, functionDeclaration, context); - var setterHasTypeAnnotation = setterAnnotatedType !== null; - - accessorSymbol.startResolving(); - - if (hasGetter) { - getterSymbol = this.resolveGetAccessorDeclaration(getterFunctionDeclarationAst, getterFunctionDeclarationAst.parameterList, TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), getterFunctionDeclarationAst.block, setterAnnotatedType, context); - } - - if (hasSetter) { - setterSymbol = this.resolveSetAccessorDeclaration(setterFunctionDeclarationAst, setterFunctionDeclarationAst.parameterList, context); - } - - if (hasGetter && hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - var getterSig = getterSymbol.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterHasParameters ? setterParameters[0].type : null; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (setterHasTypeAnnotation && !getterHasTypeAnnotation) { - getterSuppliedTypeSymbol = setterSuppliedTypeSymbol; - getterSig.returnType = setterSuppliedTypeSymbol; - } else if ((getterHasTypeAnnotation && !setterHasTypeAnnotation) || (!getterHasTypeAnnotation && !setterHasTypeAnnotation)) { - setterSuppliedTypeSymbol = getterSuppliedTypeSymbol; - - if (setterHasParameters) { - setterParameters[0].type = getterSuppliedTypeSymbol; - } - } - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - accessorSymbol.type = this.getNewErrorTypeSymbol(); - } else { - accessorSymbol.type = getterSuppliedTypeSymbol; - } - } else if (hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - - accessorSymbol.type = setterHasParameters ? setterParameters[0].type : this.semanticInfoChain.anyTypeSymbol; - } else { - var getterSig = getterSymbol.type.getCallSignatures()[0]; - accessorSymbol.type = getterSig.returnType; - } - - accessorSymbol.setResolved(); - } - - if (this.canTypeCheckAST(funcDeclAst, context)) { - this.typeCheckAccessorDeclaration(funcDeclAst, context); - } - - return accessorSymbol; - }; - - PullTypeResolver.prototype.typeCheckAccessorDeclaration = function (funcDeclAst, context) { - this.setTypeChecked(funcDeclAst, context); - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - var getterSymbol = accessorSymbol.getGetter(); - var setterSymbol = accessorSymbol.getSetter(); - - var isGetter = funcDeclAst.kind() === 139 /* GetAccessor */; - if (isGetter) { - var getterFunctionDeclarationAst = funcDeclAst; - context.pushNewContextualType(getterSymbol.type); - this.typeCheckGetAccessorDeclaration(getterFunctionDeclarationAst, context); - context.popAnyContextualType(); - } else { - var setterFunctionDeclarationAst = funcDeclAst; - this.typeCheckSetAccessorDeclaration(setterFunctionDeclarationAst, context); - } - }; - - PullTypeResolver.prototype.resolveGetAccessorDeclaration = function (funcDeclAST, parameters, returnTypeAnnotation, block, setterAnnotatedType, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var getterSymbol = accessorSymbol.getGetter(); - var getterTypeSymbol = getterSymbol.type; - - var signature = getterTypeSymbol.getCallSignatures()[0]; - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return getterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - signature.setResolved(); - - return getterSymbol; - } - - signature.startResolving(); - - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - if (!setterAnnotatedType) { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } else { - signature.returnType = setterAnnotatedType; - } - } - - if (!hadError) { - signature.setResolved(); - } - } - - return getterSymbol; - }; - - PullTypeResolver.prototype.checkIfGetterAndSetterTypeMatch = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - var getter = accessorSymbol.getGetter(); - var setter = accessorSymbol.getSetter(); - - if (getter && setter) { - var getterAST = getter.getDeclarations()[0].ast(); - var setterAST = setter.getDeclarations()[0].ast(); - - if (getterAST.typeAnnotation && PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterAST)) { - var setterSig = setter.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - - var getter = accessorSymbol.getGetter(); - var getterSig = getter.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterParameters[0].type; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.get_and_set_accessor_must_have_the_same_type)); - } - } - } - }; - - PullTypeResolver.prototype.typeCheckGetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - var funcNameAST = funcDeclAST.propertyName; - - if (!hasReturn && !this.containsSingleThrowStatement(funcDeclAST.block)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getters_must_return_a_value)); - } - - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - var setterIsPrivate = TypeScript.hasFlag(setterDecl.flags, 2 /* Private */); - var getterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), TypeScript.ASTHelpers.getType(funcDeclAST), funcDeclAST.block, context); - }; - - PullTypeResolver.hasSetAccessorParameterTypeAnnotation = function (setAccessor) { - return setAccessor.parameterList && setAccessor.parameterList.parameters.nonSeparatorCount() > 0 && setAccessor.parameterList.parameters.nonSeparatorAt(0).typeAnnotation !== null; - }; - - PullTypeResolver.prototype.resolveSetAccessorDeclaration = function (funcDeclAST, parameterList, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var setterSymbol = accessorSymbol.getSetter(); - var setterTypeSymbol = setterSymbol.type; - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return setterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - signature.setResolved(); - return setterSymbol; - } - - signature.startResolving(); - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - } - - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - - if (!hadError) { - signature.setResolved(); - } - } - - return setterSymbol; - }; - - PullTypeResolver.prototype.typeCheckSetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - if (funcDeclAST.parameterList) { - for (var i = 0; i < funcDeclAST.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.parameterList.parameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - - var getter = accessorSymbol.getGetter(); - - var funcNameAST = funcDeclAST.propertyName; - - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - var getterIsPrivate = TypeScript.hasFlag(getterDecl.flags, 2 /* Private */); - var setterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } else { - if (this.compilationSettings.noImplicitAny()) { - var setterFunctionDeclarationAst = funcDeclAST; - if (!PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterFunctionDeclarationAst) && accessorSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type, [setterFunctionDeclarationAst.propertyName.text()])); - } - } - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), null, funcDeclAST.block, context); - }; - - PullTypeResolver.prototype.resolveList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.childCount(); i < n; i++) { - this.resolveAST(list.childAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveSeparatedList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.resolveAST(list.nonSeparatorAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVoidExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.undefinedTypeSymbol; - }; - - PullTypeResolver.prototype.resolveLogicalOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLogicalOperation(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLogicalOperation = function (binex, context) { - this.setTypeChecked(binex, context); - - var leftType = this.resolveAST(binex.left, false, context).type; - var rightType = this.resolveAST(binex.right, false, context).type; - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(leftType, rightType, binex, context, comparisonInfo) && !this.sourceIsAssignableToTarget(rightType, leftType, binex, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(binex); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binex, TypeScript.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, [ - TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(binex.kind())), - leftType.toString(enclosingSymbol), rightType.toString(enclosingSymbol)])); - } - }; - - PullTypeResolver.prototype.resolveLogicalNotExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.operand, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveUnaryArithmeticOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckUnaryArithmeticOperation(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.resolvePostfixUnaryExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckPostfixUnaryExpression(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.isAnyOrNumberOrEnum = function (type) { - return this.isAnyOrEquivalent(type) || type === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(type); - }; - - PullTypeResolver.prototype.typeCheckUnaryArithmeticOperation = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - if (nodeType === 164 /* PlusExpression */ || nodeType == 165 /* NegateExpression */ || nodeType == 166 /* BitwiseNotExpression */) { - return; - } - - TypeScript.Debug.assert(nodeType === 168 /* PreIncrementExpression */ || nodeType === 169 /* PreDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.typeCheckPostfixUnaryExpression = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - TypeScript.Debug.assert(nodeType === 210 /* PostIncrementExpression */ || nodeType === 211 /* PostDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.resolveBinaryArithmeticExpression = function (binaryExpression, context) { - if (this.canTypeCheckAST(binaryExpression, context)) { - this.typeCheckBinaryArithmeticExpression(binaryExpression, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBinaryArithmeticExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsSymbol = this.resolveAST(binaryExpression.left, false, context); - - var lhsType = lhsSymbol.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol) { - lhsType = rhsType; - } - - if (rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol) { - rhsType = lhsType; - } - - var lhsIsFit = this.isAnyOrNumberOrEnum(lhsType); - var rhsIsFit = this.isAnyOrNumberOrEnum(rhsType); - - if (!rhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!lhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (lhsIsFit && rhsIsFit) { - switch (binaryExpression.kind()) { - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - if (!this.isReference(binaryExpression.left, lhsSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, rhsType, lhsType, context); - } - } - }; - - PullTypeResolver.prototype.resolveTypeOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.stringTypeSymbol; - }; - - PullTypeResolver.prototype.resolveThrowStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveDeleteExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInstanceOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInstanceOfExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInstanceOfExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var enclosingSymbol = this.getEnclosingSymbolForAST(binaryExpression); - var isValidLHS = this.isAnyOrEquivalent(lhsType) || lhsType.isObject() || lhsType.isTypeParameter(); - var isValidRHS = this.isAnyOrEquivalent(rhsType) || this.typeIsAssignableToFunction(rhsType, binaryExpression, context); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type)); - } - }; - - PullTypeResolver.prototype.resolveCommaExpression = function (commaExpression, context) { - if (this.canTypeCheckAST(commaExpression, context)) { - this.setTypeChecked(commaExpression, context); - - this.resolveAST(commaExpression.left, false, context); - } - - return this.resolveAST(commaExpression.right, false, context).type; - }; - - PullTypeResolver.prototype.resolveInExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var isValidLHS = this.isAnyOrEquivalent(lhsType.type) || lhsType.type === this.semanticInfoChain.stringTypeSymbol || lhsType.type === this.semanticInfoChain.numberTypeSymbol; - - var isValidRHS = this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter(); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - }; - - PullTypeResolver.prototype.resolveForStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.variableDeclaration, false, context); - this.resolveAST(ast.initializer, false, context); - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.incrementor, false, context); - this.resolveAST(ast.statement, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveForInStatement = function (forInStatement, context) { - if (this.canTypeCheckAST(forInStatement, context)) { - this.typeCheckForInStatement(forInStatement, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckForInStatement = function (forInStatement, context) { - this.setTypeChecked(forInStatement, context); - - if (forInStatement.variableDeclaration) { - var declaration = forInStatement.variableDeclaration; - - if (declaration.declarators.nonSeparatorCount() === 1) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - if (varDecl.typeAnnotation) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declaration, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation)); - } - } - } else { - var varSym = this.resolveAST(forInStatement.left, false, context); - var isStringOrNumber = varSym.type === this.semanticInfoChain.stringTypeSymbol || this.isAnyOrEquivalent(varSym.type); - - if (!isStringOrNumber) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.left, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any)); - } - } - - var rhsType = this.resolveAST(forInStatement.expression, false, context).type; - var isValidRHS = rhsType && (this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter()); - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.expression, TypeScript.DiagnosticCode.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - this.resolveAST(forInStatement.statement, false, context); - }; - - PullTypeResolver.prototype.resolveWhileStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWhileStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWhileStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveDoStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckDoStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckDoStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveIfStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckIfStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckIfStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - this.resolveAST(ast.elseClause, false, context); - }; - - PullTypeResolver.prototype.resolveElseClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckElseClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckElseClause = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveBlock = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.statements, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declaration, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableDeclarationList = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declarators, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveWithStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWithStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWithStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var withStatement = ast; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(withStatement.condition, TypeScript.DiagnosticCode.All_symbols_within_a_with_block_will_be_resolved_to_any)); - }; - - PullTypeResolver.prototype.resolveTryStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckTryStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckTryStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var tryStatement = ast; - - this.resolveAST(tryStatement.block, false, context); - this.resolveAST(tryStatement.catchClause, false, context); - this.resolveAST(tryStatement.finallyClause, false, context); - }; - - PullTypeResolver.prototype.resolveCatchClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckCatchClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckCatchClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - - var catchDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(catchDecl, context); - }; - - PullTypeResolver.prototype.resolveFinallyClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckFinallyClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckFinallyClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - }; - - PullTypeResolver.prototype.getEnclosingFunctionDeclaration = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - while (enclosingDecl) { - if (enclosingDecl.kind & 1032192 /* SomeFunction */) { - return enclosingDecl; - } - - enclosingDecl = enclosingDecl.getParentDecl(); - } - - return null; - }; - - PullTypeResolver.prototype.resolveReturnExpression = function (expression, enclosingFunction, context) { - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var isContextuallyTyped = false; - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeAnnotationSymbol = this.resolveTypeReference(typeAnnotation, context); - if (returnTypeAnnotationSymbol) { - isContextuallyTyped = true; - context.pushNewContextualType(returnTypeAnnotationSymbol); - } - } else { - var currentContextualType = context.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - isContextuallyTyped = true; - context.propagateContextualType(currentContextualTypeReturnTypeSymbol); - } - } - } - } - - var result = this.resolveAST(expression, isContextuallyTyped, context).type; - if (isContextuallyTyped) { - context.popAnyContextualType(); - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckReturnExpression = function (expression, expressionType, enclosingFunction, context) { - if (enclosingFunction && enclosingFunction.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingFunction.getParentDecl(); - if (classDecl) { - var classSymbol = classDecl.getSymbol(); - this.resolveDeclaredSymbol(classSymbol, context); - - var comparisonInfo = new TypeComparisonInfo(); - var isAssignable = this.sourceIsAssignableToTarget(expressionType, classSymbol.type, expression, context, comparisonInfo); - if (!isAssignable) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class)); - } - } - } - - if (enclosingFunction && enclosingFunction.kind === 524288 /* SetAccessor */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Setters_cannot_return_a_value)); - } - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation || enclosingFunction.kind === 262144 /* GetAccessor */) { - var signatureSymbol = enclosingFunction.getSignatureSymbol(); - var sigReturnType = signatureSymbol.returnType; - - if (expressionType && sigReturnType) { - var comparisonInfo = new TypeComparisonInfo(); - var upperBound = null; - - this.resolveDeclaredSymbol(expressionType, context); - this.resolveDeclaredSymbol(sigReturnType, context); - - var isAssignable = this.sourceIsAssignableToTarget(expressionType, sigReturnType, expression, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol)])); - } - } - } - } - } - }; - - PullTypeResolver.prototype.resolveReturnStatement = function (returnAST, context) { - var enclosingFunction = this.getEnclosingFunctionDeclaration(returnAST); - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var returnType = this.getSymbolForAST(returnAST, context); - var canTypeCheckAST = this.canTypeCheckAST(returnAST, context); - if (!returnType || canTypeCheckAST) { - var returnExpr = returnAST.expression; - - var resolvedReturnType = returnExpr === null ? this.semanticInfoChain.voidTypeSymbol : this.resolveReturnExpression(returnExpr, enclosingFunction, context); - - if (!returnType) { - returnType = resolvedReturnType; - this.setSymbolForAST(returnAST, resolvedReturnType, context); - } - - if (returnExpr && canTypeCheckAST) { - this.setTypeChecked(returnExpr, context); - this.typeCheckReturnExpression(returnExpr, resolvedReturnType, enclosingFunction, context); - } - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveSwitchStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSwitchStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckSwitchStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var expressionType = this.resolveAST(ast.expression, false, context).type; - - for (var i = 0, n = ast.switchClauses.childCount(); i < n; i++) { - var switchClause = ast.switchClauses.childAt(i); - if (switchClause.kind() === 233 /* CaseSwitchClause */) { - var caseSwitchClause = switchClause; - - var caseClauseExpressionType = this.resolveAST(caseSwitchClause.expression, false, context).type; - this.resolveAST(caseSwitchClause.statements, false, context); - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(expressionType, caseClauseExpressionType, caseSwitchClause.expression, context, comparisonInfo) && !this.sourceIsAssignableToTarget(caseClauseExpressionType, expressionType, caseSwitchClause.expression, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(caseSwitchClause.expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol)])); - } - } - } else { - var defaultSwitchClause = switchClause; - this.resolveAST(defaultSwitchClause.statements, false, context); - } - } - }; - - PullTypeResolver.prototype.resolveLabeledStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLabeledStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLabeledStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var labelIdentifier = ast.identifier.valueText(); - - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { - return s.identifier.valueText() === labelIdentifier; - }); - if (matchingLabel) { - context.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(ast.identifier, labelIdentifier, matchingLabel)); - } - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.labelIsOnContinuableConstruct = function (statement) { - switch (statement.kind()) { - case 160 /* LabeledStatement */: - return this.labelIsOnContinuableConstruct(statement.statement); - - case 158 /* WhileStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 161 /* DoStatement */: - return true; - - default: - return false; - } - }; - - PullTypeResolver.prototype.resolveContinueStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckContinueStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.isIterationStatement = function (ast) { - switch (ast.kind()) { - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.isAnyFunctionExpressionOrDeclaration = function (ast) { - switch (ast.kind()) { - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 241 /* FunctionPropertyAssignment */: - case 137 /* ConstructorDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.inSwitchStatement = function (ast) { - while (ast) { - if (ast.kind() === 151 /* SwitchStatement */) { - return true; - } - - if (this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inIterationStatement = function (ast, crossFunctions) { - while (ast) { - if (this.isIterationStatement(ast)) { - return true; - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingLabels = function (ast, breakable, crossFunctions) { - var result = []; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 160 /* LabeledStatement */) { - var labeledStatement = ast; - if (breakable) { - result.push(labeledStatement); - } else { - if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) { - result.push(labeledStatement); - } - } - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - break; - } - - ast = ast.parent; - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckContinueStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (!this.inIterationStatement(ast, false)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement)); - } - } else if (ast.identifier) { - var continuableLabels = this.getEnclosingLabels(ast, false, false); - - if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var continuableLabels = this.getEnclosingLabels(ast, false, true); - - if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } - }; - - PullTypeResolver.prototype.resolveBreakStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckBreakStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBreakStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (ast.identifier) { - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var breakableLabels = this.getEnclosingLabels(ast, true, true); - if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } else if (!this.inIterationStatement(ast, false) && !this.inSwitchStatement(ast)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement)); - } - } - }; - - PullTypeResolver.prototype.resolveAST = function (ast, isContextuallyTyped, context) { - if (!ast) { - return; - } - - var symbol = this.getSymbolForAST(ast, context); - if (symbol && symbol.isResolved) { - this.typeCheckAST(ast, isContextuallyTyped, context); - return symbol; - } - - if (ast.isExpression() && !isTypesOnlyLocation(ast)) { - return this.resolveExpressionAST(ast, isContextuallyTyped, context); - } - - var nodeType = ast.kind(); - - switch (nodeType) { - case 124 /* ArrayType */: - case 126 /* GenericType */: - case 122 /* ObjectType */: - case 127 /* TypeQuery */: - case 125 /* ConstructorType */: - case 123 /* FunctionType */: - return this.resolveTypeReference(ast, context); - - case 1 /* List */: - return this.resolveList(ast, context); - - case 2 /* SeparatedList */: - return this.resolveSeparatedList(ast, context); - - case 120 /* SourceUnit */: - return this.resolveSourceUnit(ast, context); - - case 132 /* EnumDeclaration */: - return this.resolveEnumDeclaration(ast, context); - - case 130 /* ModuleDeclaration */: - return this.resolveModuleDeclaration(ast, context); - - case 128 /* InterfaceDeclaration */: - return this.resolveInterfaceDeclaration(ast, context); - - case 131 /* ClassDeclaration */: - return this.resolveClassDeclaration(ast, context); - - case 224 /* VariableDeclaration */: - return this.resolveVariableDeclarationList(ast, context); - - case 136 /* MemberVariableDeclaration */: - return this.resolveMemberVariableDeclaration(ast, context); - - case 225 /* VariableDeclarator */: - return this.resolveVariableDeclarator(ast, context); - - case 141 /* PropertySignature */: - return this.resolvePropertySignature(ast, context); - - case 227 /* ParameterList */: - return this.resolveParameterList(ast, context); - - case 242 /* Parameter */: - return this.resolveParameter(ast, context); - - case 243 /* EnumElement */: - return this.resolveEnumElement(ast, context); - - case 232 /* EqualsValueClause */: - return this.resolveEqualsValueClause(ast, isContextuallyTyped, context); - - case 238 /* TypeParameter */: - return this.resolveTypeParameterDeclaration(ast, context); - - case 239 /* Constraint */: - return this.resolveConstraint(ast, context); - - case 133 /* ImportDeclaration */: - return this.resolveImportDeclaration(ast, context); - - case 240 /* SimplePropertyAssignment */: - return this.resolveSimplePropertyAssignment(ast, isContextuallyTyped, context); - - case 241 /* FunctionPropertyAssignment */: - return this.resolveFunctionPropertyAssignment(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - TypeScript.Debug.assert(isTypesOnlyLocation(ast)); - return this.resolveTypeNameExpression(ast, context); - - case 121 /* QualifiedName */: - return this.resolveQualifiedName(ast, context); - - case 137 /* ConstructorDeclaration */: - return this.resolveConstructorDeclaration(ast, context); - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return this.resolveAccessorDeclaration(ast, context); - - case 138 /* IndexMemberDeclaration */: - return this.resolveIndexMemberDeclaration(ast, context); - - case 144 /* IndexSignature */: - return this.resolveIndexSignature(ast, context); - - case 135 /* MemberFunctionDeclaration */: - return this.resolveMemberFunctionDeclaration(ast, context); - - case 142 /* CallSignature */: - return this.resolveCallSignature(ast, context); - - case 143 /* ConstructSignature */: - return this.resolveConstructSignature(ast, context); - - case 145 /* MethodSignature */: - return this.resolveMethodSignature(ast, context); - - case 129 /* FunctionDeclaration */: - return this.resolveAnyFunctionDeclaration(ast, context); - - case 244 /* TypeAnnotation */: - return this.resolveTypeAnnotation(ast, context); - - case 134 /* ExportAssignment */: - return this.resolveExportAssignmentStatement(ast, context); - - case 157 /* ThrowStatement */: - return this.resolveThrowStatement(ast, context); - - case 149 /* ExpressionStatement */: - return this.resolveExpressionStatement(ast, context); - - case 154 /* ForStatement */: - return this.resolveForStatement(ast, context); - - case 155 /* ForInStatement */: - return this.resolveForInStatement(ast, context); - - case 158 /* WhileStatement */: - return this.resolveWhileStatement(ast, context); - - case 161 /* DoStatement */: - return this.resolveDoStatement(ast, context); - - case 147 /* IfStatement */: - return this.resolveIfStatement(ast, context); - - case 235 /* ElseClause */: - return this.resolveElseClause(ast, context); - - case 146 /* Block */: - return this.resolveBlock(ast, context); - - case 148 /* VariableStatement */: - return this.resolveVariableStatement(ast, context); - - case 163 /* WithStatement */: - return this.resolveWithStatement(ast, context); - - case 159 /* TryStatement */: - return this.resolveTryStatement(ast, context); - - case 236 /* CatchClause */: - return this.resolveCatchClause(ast, context); - - case 237 /* FinallyClause */: - return this.resolveFinallyClause(ast, context); - - case 150 /* ReturnStatement */: - return this.resolveReturnStatement(ast, context); - - case 151 /* SwitchStatement */: - return this.resolveSwitchStatement(ast, context); - - case 153 /* ContinueStatement */: - return this.resolveContinueStatement(ast, context); - - case 152 /* BreakStatement */: - return this.resolveBreakStatement(ast, context); - - case 160 /* LabeledStatement */: - return this.resolveLabeledStatement(ast, context); - } - - return this.semanticInfoChain.anyTypeSymbol; - }; - - PullTypeResolver.prototype.resolveExpressionAST = function (ast, isContextuallyOrInferentiallyTyped, context) { - var expressionSymbol = this.resolveExpressionWorker(ast, isContextuallyOrInferentiallyTyped, context); - - if (isContextuallyOrInferentiallyTyped && context.isInferentiallyTyping()) { - return this.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference(expressionSymbol, context); - } else { - return expressionSymbol; - } - }; - - PullTypeResolver.prototype.resolveExpressionWorker = function (ast, isContextuallyTyped, context) { - switch (ast.kind()) { - case 215 /* ObjectLiteralExpression */: - return this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - return this.resolveNameExpression(ast, context); - - case 212 /* MemberAccessExpression */: - return this.resolveMemberAccessExpression(ast, context); - - case 222 /* FunctionExpression */: - return this.resolveFunctionExpression(ast, isContextuallyTyped, context); - - case 219 /* SimpleArrowFunctionExpression */: - return this.resolveSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.resolveParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 214 /* ArrayLiteralExpression */: - return this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - - case 35 /* ThisKeyword */: - return this.resolveThisExpression(ast, context); - - case 50 /* SuperKeyword */: - return this.resolveSuperExpression(ast, context); - - case 213 /* InvocationExpression */: - return this.resolveInvocationExpression(ast, context); - - case 216 /* ObjectCreationExpression */: - return this.resolveObjectCreationExpression(ast, context); - - case 220 /* CastExpression */: - return this.resolveCastExpression(ast, context); - - case 13 /* NumericLiteral */: - return this.semanticInfoChain.numberTypeSymbol; - - case 14 /* StringLiteral */: - return this.semanticInfoChain.stringTypeSymbol; - - case 32 /* NullKeyword */: - return this.semanticInfoChain.nullTypeSymbol; - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - - case 172 /* VoidExpression */: - return this.resolveVoidExpression(ast, context); - - case 174 /* AssignmentExpression */: - return this.resolveAssignmentExpression(ast, context); - - case 167 /* LogicalNotExpression */: - return this.resolveLogicalNotExpression(ast, context); - - case 193 /* NotEqualsWithTypeConversionExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 197 /* GreaterThanExpression */: - return this.resolveLogicalOperation(ast, context); - - case 208 /* AddExpression */: - case 175 /* AddAssignmentExpression */: - return this.resolveBinaryAdditionOperation(ast, context); - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.resolveUnaryArithmeticOperation(ast, context); - - case 210 /* PostIncrementExpression */: - case 211 /* PostDecrementExpression */: - return this.resolvePostfixUnaryExpression(ast, context); - - case 209 /* SubtractExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 189 /* BitwiseOrExpression */: - case 191 /* BitwiseAndExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - return this.resolveBinaryArithmeticExpression(ast, context); - - case 221 /* ElementAccessExpression */: - return this.resolveElementAccessExpression(ast, context); - - case 187 /* LogicalOrExpression */: - return this.resolveLogicalOrExpression(ast, isContextuallyTyped, context); - - case 188 /* LogicalAndExpression */: - return this.resolveLogicalAndExpression(ast, context); - - case 171 /* TypeOfExpression */: - return this.resolveTypeOfExpression(ast, context); - - case 170 /* DeleteExpression */: - return this.resolveDeleteExpression(ast, context); - - case 186 /* ConditionalExpression */: - return this.resolveConditionalExpression(ast, isContextuallyTyped, context); - - case 12 /* RegularExpressionLiteral */: - return this.resolveRegularExpressionLiteral(); - - case 217 /* ParenthesizedExpression */: - return this.resolveParenthesizedExpression(ast, context); - - case 200 /* InstanceOfExpression */: - return this.resolveInstanceOfExpression(ast, context); - - case 173 /* CommaExpression */: - return this.resolveCommaExpression(ast, context); - - case 201 /* InExpression */: - return this.resolveInExpression(ast, context); - - case 223 /* OmittedExpression */: - return this.semanticInfoChain.undefinedTypeSymbol; - } - - TypeScript.Debug.fail("resolveExpressionASTWorker: Missing expression kind: " + TypeScript.SyntaxKind[ast.kind()]); - }; - - PullTypeResolver.prototype.typeCheckAST = function (ast, isContextuallyTyped, context) { - if (!this.canTypeCheckAST(ast, context)) { - return; - } - - var nodeType = ast.kind(); - switch (nodeType) { - case 120 /* SourceUnit */: - this.typeCheckSourceUnit(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.typeCheckEnumDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.typeCheckModuleDeclaration(ast, context); - return; - - case 128 /* InterfaceDeclaration */: - this.typeCheckInterfaceDeclaration(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.typeCheckClassDeclaration(ast, context); - return; - - case 243 /* EnumElement */: - this.typeCheckEnumElement(ast, context); - return; - - case 136 /* MemberVariableDeclaration */: - this.typeCheckMemberVariableDeclaration(ast, context); - return; - - case 225 /* VariableDeclarator */: - this.typeCheckVariableDeclarator(ast, context); - return; - - case 141 /* PropertySignature */: - this.typeCheckPropertySignature(ast, context); - return; - - case 242 /* Parameter */: - this.typeCheckParameter(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.typeCheckImportDeclaration(ast, context); - return; - - case 215 /* ObjectLiteralExpression */: - this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 241 /* FunctionPropertyAssignment */: - this.typeCheckFunctionPropertyAssignment(ast, isContextuallyTyped, context); - return; - - case 11 /* IdentifierName */: - if (isTypesOnlyLocation(ast)) { - this.resolveTypeNameExpression(ast, context); - } else { - this.resolveNameExpression(ast, context); - } - return; - - case 212 /* MemberAccessExpression */: - this.resolveMemberAccessExpression(ast, context); - return; - - case 121 /* QualifiedName */: - this.resolveQualifiedName(ast, context); - return; - - case 222 /* FunctionExpression */: - this.typeCheckFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 137 /* ConstructorDeclaration */: - this.typeCheckConstructorDeclaration(ast, context); - return; - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - this.typeCheckAccessorDeclaration(ast, context); - return; - - case 135 /* MemberFunctionDeclaration */: - this.typeCheckMemberFunctionDeclaration(ast, context); - return; - - case 145 /* MethodSignature */: - this.typeCheckMethodSignature(ast, context); - return; - - case 144 /* IndexSignature */: - this.typeCheckIndexSignature(ast, context); - break; - - case 142 /* CallSignature */: - this.typeCheckCallSignature(ast, context); - return; - - case 143 /* ConstructSignature */: - this.typeCheckConstructSignature(ast, context); - return; - - case 129 /* FunctionDeclaration */: { - var funcDecl = ast; - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - return; - } - - case 219 /* SimpleArrowFunctionExpression */: - this.typeCheckSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 218 /* ParenthesizedArrowFunctionExpression */: - this.typeCheckParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 214 /* ArrayLiteralExpression */: - this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 213 /* InvocationExpression */: - this.typeCheckInvocationExpression(ast, context); - return; - - case 216 /* ObjectCreationExpression */: - this.typeCheckObjectCreationExpression(ast, context); - return; - - case 150 /* ReturnStatement */: - this.resolveReturnStatement(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Failure nodeType: " + TypeScript.SyntaxKind[ast.kind()] + ". Implement typeCheck when symbol is set for the ast as part of resolution."); - } - }; - - PullTypeResolver.prototype.processPostTypeCheckWorkItems = function (context) { - while (this.postTypeCheckWorkitems.length) { - var ast = this.postTypeCheckWorkitems.pop(); - this.postTypeCheck(ast, context); - } - }; - - PullTypeResolver.prototype.postTypeCheck = function (ast, context) { - var nodeType = ast.kind(); - - switch (nodeType) { - case 242 /* Parameter */: - case 225 /* VariableDeclarator */: - this.postTypeCheckVariableDeclaratorOrParameter(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.postTypeCheckClassDeclaration(ast, context); - return; - - case 129 /* FunctionDeclaration */: - this.postTypeCheckFunctionDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.postTypeCheckModuleDeclaration(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.postTypeCheckEnumDeclaration(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.postTypeCheckImportDeclaration(ast, context); - return; - - case 11 /* IdentifierName */: - this.postTypeCheckNameExpression(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Implement postTypeCheck clause to handle the postTypeCheck work, nodeType: " + TypeScript.SyntaxKind[ast.kind()]); - } - }; - - PullTypeResolver.prototype.resolveRegularExpressionLiteral = function () { - if (this.cachedRegExpInterfaceType()) { - return this.cachedRegExpInterfaceType(); - } else { - return this.semanticInfoChain.anyTypeSymbol; - } - }; - - PullTypeResolver.prototype.postTypeCheckNameExpression = function (nameAST, context) { - this.checkThisCaptureVariableCollides(nameAST, false, context); - }; - - PullTypeResolver.prototype.typeCheckNameExpression = function (nameAST, context) { - this.setTypeChecked(nameAST, context); - this.checkNameForCompilerGeneratedDeclarationCollision(nameAST, false, nameAST, context); - }; - - PullTypeResolver.prototype.resolveNameExpression = function (nameAST, context) { - var nameSymbol = this.getSymbolForAST(nameAST, context); - var foundCached = nameSymbol !== null; - - if (!foundCached || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.typeCheckNameExpression(nameAST, context); - } - nameSymbol = this.computeNameExpression(nameAST, context); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - if (nameSymbol && (nameSymbol.type !== this.semanticInfoChain.anyTypeSymbol || nameSymbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(nameAST, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.isInEnumDecl = function (decl) { - if (decl.kind & 64 /* Enum */) { - return true; - } - - var declPath = decl.getParentPath(); - - var disallowedKinds = 164 /* SomeContainer */ | 58728795 /* SomeType */; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - - if (decl.kind & 64 /* Enum */) { - return true; - } - - if (decl.kind & disallowedKinds) { - return false; - } - } - return false; - }; - - PullTypeResolver.prototype.getSomeInnermostFunctionScopeDecl = function (declPath) { - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (decl.kind & 1032192 /* SomeFunction */) { - return decl; - } - } - - return null; - }; - - PullTypeResolver.prototype.isFromFunctionScope = function (nameSymbol, functionScopeDecl) { - var _this = this; - return TypeScript.ArrayUtilities.any(nameSymbol.getDeclarations(), function (nameSymbolDecl) { - return _this.getSomeInnermostFunctionScopeDecl(nameSymbolDecl.getParentPath()) === functionScopeDecl; - }); - }; - - PullTypeResolver.prototype.findConstructorDeclOfEnclosingType = function (decl) { - var current = decl; - while (current) { - if (TypeScript.hasFlag(current.kind, 4096 /* Property */)) { - var parentDecl = current.getParentDecl(); - if (TypeScript.hasFlag(parentDecl.kind, 8 /* Class */)) { - return TypeScript.ArrayUtilities.lastOrDefault(parentDecl.getChildDecls(), function (decl) { - return TypeScript.hasFlag(decl.kind, 32768 /* ConstructorMethod */); - }); - } - } - - if (TypeScript.hasFlag(current.kind, 164 /* SomeContainer */)) { - return null; - } - - current = current.getParentDecl(); - } - return null; - }; - - PullTypeResolver.prototype.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable = function (nameAST, nameSymbol, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return false; - } - - var memberVariableDeclarationAST = TypeScript.ASTHelpers.getEnclosingMemberVariableDeclaration(nameAST); - if (memberVariableDeclarationAST) { - var memberVariableDecl = this.semanticInfoChain.getDeclForAST(memberVariableDeclarationAST); - if (!TypeScript.hasFlag(memberVariableDecl.flags, 16 /* Static */)) { - var constructorDecl = this.findConstructorDeclOfEnclosingType(memberVariableDecl); - - if (constructorDecl) { - var childDecls = constructorDecl.searchChildDecls(id, 68147712 /* SomeValue */); - if (childDecls.length) { - if (TypeScript.PullHelpers.isSymbolDeclaredInScopeChain(nameSymbol, constructorDecl.getSymbol().getContainer())) { - var memberVariableSymbol = memberVariableDecl.getSymbol(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, [memberVariableSymbol.getScopedName(constructorDecl.getSymbol()), nameAST.text()])); - return true; - } - } - } - } - } - return false; - }; - - PullTypeResolver.prototype.computeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var nameSymbol = null; - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - if (TypeScript.hasFlag(enclosingDecl.flags, 8388608 /* PropertyParameter */)) { - var valueDecl = enclosingDecl.getValueDecl(); - if (valueDecl && TypeScript.hasFlag(valueDecl.kind, 2048 /* Parameter */)) { - enclosingDecl = valueDecl; - } - } - - var isDeclarationASTOrDeclarationNameAST = TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(nameAST); - if (isDeclarationASTOrDeclarationNameAST) { - nameSymbol = this.semanticInfoChain.getDeclForAST(nameAST.parent).getSymbol(); - } - - var declPath = enclosingDecl.getParentPath(); - - if (!nameSymbol) { - var searchKind = 68147712 /* SomeValue */; - - if (!this.isInEnumDecl(enclosingDecl)) { - searchKind = searchKind & ~(67108864 /* EnumMember */); - } - - var nameSymbol = this.getSymbolFromDeclPath(id, declPath, searchKind); - } - - if (id === "arguments") { - var functionScopeDecl = this.getSomeInnermostFunctionScopeDecl(declPath); - if (functionScopeDecl) { - if (!nameSymbol || !this.isFromFunctionScope(nameSymbol, functionScopeDecl)) { - nameSymbol = this.cachedFunctionArgumentsSymbol(); - this.resolveDeclaredSymbol(this.cachedIArgumentsInterfaceType(), context); - } - } - } - - var aliasSymbol = null; - if (nameSymbol && nameSymbol.isAlias() && !isDeclarationASTOrDeclarationNameAST) { - aliasSymbol = nameSymbol; - if (!this.inTypeQuery(nameAST)) { - aliasSymbol.setIsUsedAsValue(); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - this.resolveDeclaredSymbol(aliasSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(aliasSymbol.assignedContainer(), context); - - nameSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (!nameSymbol) { - aliasSymbol = null; - } - } - - if (!nameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (this.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable(nameAST, nameSymbol, context)) { - return this.getNewErrorTypeSymbol(id); - } - - var nameDeclaration = nameSymbol.getDeclarations()[0]; - var nameParentDecl = nameDeclaration.getParentDecl(); - if (nameParentDecl && (nameParentDecl.kind & 1032192 /* SomeFunction */) && (nameParentDecl.flags & 33554432 /* HasDefaultArgs */)) { - var enclosingFunctionAST = this.semanticInfoChain.getASTForDecl(nameParentDecl); - var currentParameterIndex = this.getCurrentParameterIndexForFunction(nameAST, enclosingFunctionAST); - - var parameterList = TypeScript.ASTHelpers.getParameterList(enclosingFunctionAST); - - if (currentParameterIndex >= 0) { - var matchingParameter; - if (parameterList) { - for (var i = 0; i <= currentParameterIndex; i++) { - var candidateParameter = parameterList.parameters.nonSeparatorAt(i); - if (candidateParameter && candidateParameter.identifier.valueText() === id) { - matchingParameter = candidateParameter; - break; - } - } - } - - if (!matchingParameter) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text(), nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (matchingParameter === TypeScript.ASTHelpers.getEnclosingParameterForInitializer(nameAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Parameter_0_cannot_be_referenced_in_its_initializer, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text()])); - return this.getNewErrorTypeSymbol(id); - } - } - } - - if (aliasSymbol) { - this.semanticInfoChain.setAliasSymbolForAST(nameAST, aliasSymbol); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.getCurrentParameterIndexForFunction = function (parameter, funcDecl) { - var parameterList = TypeScript.ASTHelpers.getParameterList(funcDecl); - if (parameterList) { - while (parameter && parameter.parent) { - if (parameter.parent.parent === parameterList) { - return parameterList.parameters.nonSeparatorIndexOf(parameter); - } - - parameter = parameter.parent; - } - } - - return -1; - }; - - PullTypeResolver.prototype.resolveMemberAccessExpression = function (dottedNameAST, context) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.expression, dottedNameAST.name, context); - }; - - PullTypeResolver.prototype.resolveDottedNameExpression = function (dottedNameAST, expression, name, context) { - var symbol = this.getSymbolForAST(dottedNameAST, context); - var foundCached = symbol !== null; - - if (!foundCached || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheckDottedNameAST = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheckDottedNameAST) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeDottedNameExpression(expression, name, context, canTypeCheckDottedNameAST); - } - - this.resolveDeclaredSymbol(symbol, context); - - if (symbol && (symbol.type !== this.semanticInfoChain.anyTypeSymbol || symbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(dottedNameAST, symbol, context); - this.setSymbolForAST(name, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeDottedNameExpression = function (expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhs = this.resolveAST(expression, false, context); - return this.computeDottedNameExpressionFromLHS(lhs, expression, name, context, checkSuperPrivateAndStaticAccess); - }; - - PullTypeResolver.prototype.computeDottedNameExpressionFromLHS = function (lhs, expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhsType = lhs.type; - - if (lhs.isAlias()) { - var lhsAlias = lhs; - if (!this.inTypeQuery(expression)) { - lhsAlias.setIsUsedAsValue(); - } - lhsType = lhsAlias.getExportAssignedTypeSymbol(); - } - - if (lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (!lhsType) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Could_not_find_enclosing_symbol_for_dotted_name_0, [name.text()])); - return this.getNewErrorTypeSymbol(); - } - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - if (lhsType.isContainer() && !lhsType.isAlias() && !lhsType.isEnum()) { - var instanceSymbol = lhsType.getInstanceSymbol(); - - if (instanceSymbol) { - lhsType = instanceSymbol.type; - } - } - - var originalLhsTypeForErrorReporting = lhsType; - - lhsType = this.getApparentType(lhsType).widenedType(this, expression, context); - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var nameSymbol = this._getNamedPropertySymbolOfAugmentedType(rhsName, lhsType); - - if (!nameSymbol) { - if (lhsType.kind === 32 /* DynamicModule */) { - var container = lhsType; - var associatedInstance = container.getInstanceSymbol(); - - if (associatedInstance) { - var instanceType = associatedInstance.type; - - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, instanceType); - } - } else { - var associatedType = lhsType.getAssociatedContainerType(); - - if (associatedType && !associatedType.isClass()) { - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, associatedType); - } - } - - if (!nameSymbol) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [name.text(), originalLhsTypeForErrorReporting.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - } - - if (checkSuperPrivateAndStaticAccess) { - this.checkForSuperMemberAccess(expression, name, nameSymbol, context) || this.checkForPrivateMemberAccess(name, lhsType, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.resolveTypeNameExpression = function (nameAST, context) { - var typeNameSymbol = this.getSymbolForAST(nameAST, context); - - if (!typeNameSymbol || !typeNameSymbol.isType() || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.setTypeChecked(nameAST, context); - } - typeNameSymbol = this.computeTypeNameExpression(nameAST, context); - this.setSymbolForAST(nameAST, typeNameSymbol, context); - } - - this.resolveDeclaredSymbol(typeNameSymbol, context); - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.computeTypeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - var declPath = enclosingDecl.getParentPath(); - - var onLeftOfDot = this.isLeftSideOfQualifiedName(nameAST); - - var kindToCheckFirst = onLeftOfDot ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - var kindToCheckSecond = onLeftOfDot ? 58728795 /* SomeType */ : 164 /* SomeContainer */; - - var typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckFirst); - - if (!typeNameSymbol) { - typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckSecond); - } - - if (!typeNameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } - - var typeNameSymbolAlias = null; - if (typeNameSymbol.isAlias()) { - typeNameSymbolAlias = typeNameSymbol; - this.resolveDeclaredSymbol(typeNameSymbol, context); - - var aliasedType = typeNameSymbolAlias.getExportAssignedTypeSymbol(); - - this.resolveDeclaredSymbol(aliasedType, context); - } - - if (typeNameSymbol.isTypeParameter()) { - if (this.isInStaticMemberContext(enclosingDecl)) { - var parentDecl = typeNameSymbol.getDeclarations()[0].getParentDecl(); - - if (parentDecl.kind === 8 /* Class */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Static_members_cannot_reference_class_type_parameters)); - return this.getNewErrorTypeSymbol(); - } - } - } - - if (!typeNameSymbol.isGeneric() && (typeNameSymbol.isClass() || typeNameSymbol.isInterface())) { - typeNameSymbol = TypeScript.PullTypeReferenceSymbol.createTypeReference(typeNameSymbol); - } - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.isInStaticMemberContext = function (decl) { - while (decl) { - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */ | 4096 /* Property */) && TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - return true; - } - - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - return false; - } - - decl = decl.getParentDecl(); - } - - return false; - }; - - PullTypeResolver.prototype.isLeftSideOfQualifiedName = function (ast) { - return ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.left === ast; - }; - - PullTypeResolver.prototype.resolveGenericTypeReference = function (genericTypeAST, context) { - var _this = this; - var genericTypeSymbol = this.resolveAST(genericTypeAST.name, false, context).type; - - if (genericTypeSymbol.isError()) { - return genericTypeSymbol; - } - - if (!genericTypeSymbol.inResolution && !genericTypeSymbol.isResolved) { - this.resolveDeclaredSymbol(genericTypeSymbol, context); - } - - if (genericTypeSymbol.isAlias()) { - if (this.inClassExtendsHeritageClause(genericTypeAST) && !this.inTypeArgumentList(genericTypeAST)) { - genericTypeSymbol.setIsUsedAsValue(); - } - genericTypeSymbol = genericTypeSymbol.getExportAssignedTypeSymbol(); - } - - var typeParameters = genericTypeSymbol.getTypeParameters(); - if (typeParameters.length === 0) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_have_type_parameters, [genericTypeSymbol.toString()])); - return this.getNewErrorTypeSymbol(); - } - - var typeArgs = []; - - if (genericTypeAST.typeArgumentList && genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - typeArgs[i] = this.resolveTypeReference(genericTypeAST.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - - if (typeArgs[i].isError()) { - typeArgs[i] = this.semanticInfoChain.anyTypeSymbol; - } - } - } - - if (typeArgs.length && typeArgs.length !== typeParameters.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Generic_type_0_requires_1_type_argument_s, [genericTypeSymbol.toString(), genericTypeSymbol.getTypeParameters().length])); - return this.getNewErrorTypeSymbol(); - } - - if (!genericTypeSymbol.isResolved) { - var typeDecls = genericTypeSymbol.getDeclarations(); - var childDecls = null; - - for (var i = 0; i < typeDecls.length; i++) { - childDecls = typeDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - - var specializedSymbol = this.createInstantiatedType(genericTypeSymbol, typeArgs); - - var upperBound = null; - - typeParameters = specializedSymbol.getTypeParameters(); - - var typeConstraintSubstitutionMap = []; - - var instantiatedSubstitutionMap = specializedSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < typeParameters.length; i++) { - typeConstraintSubstitutionMap[typeParameters[i].pullSymbolID] = typeParameters[i]; - } - - for (var id in instantiatedSubstitutionMap) { - typeConstraintSubstitutionMap[id] = instantiatedSubstitutionMap[id]; - } - - for (var iArg = 0; (iArg < typeArgs.length) && (iArg < typeParameters.length); iArg++) { - var typeArg = typeArgs[iArg]; - var typeParameter = typeParameters[iArg]; - var typeConstraint = typeParameter.getConstraint(); - - typeConstraintSubstitutionMap[typeParameter.pullSymbolID] = typeArg; - - if (typeConstraint) { - if (typeConstraint.isTypeParameter()) { - for (var j = 0; j < typeParameters.length && j < typeArgs.length; j++) { - if (typeParameters[j] === typeConstraint) { - typeConstraint = typeArgs[j]; - } - } - } else if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeConstraintSubstitutionMap); - } - - if (typeArg.isTypeParameter()) { - upperBound = typeArg.getConstraint(); - - if (upperBound) { - typeArg = upperBound; - } - } - - if (typeArg.inResolution || (typeArg.isTypeReference() && typeArg.referencedTypeSymbol.inResolution)) { - return specializedSymbol; - } - - if (context.canTypeCheckAST(genericTypeAST)) { - this.typeCheckCallBacks.push(function (context) { - if (!_this.sourceIsAssignableToTarget(typeArg, typeConstraint, genericTypeAST, context)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(genericTypeAST); - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [typeArg.toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameter.toString(enclosingSymbol, true)])); - } - }); - } - } - } - - return specializedSymbol; - }; - - PullTypeResolver.prototype.resolveQualifiedName = function (dottedNameAST, context) { - if (this.inTypeQuery(dottedNameAST)) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.left, dottedNameAST.right, context).type; - } - - var symbol = this.getSymbolForAST(dottedNameAST, context); - if (!symbol || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheck = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheck) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeQualifiedName(dottedNameAST, context); - this.setSymbolForAST(dottedNameAST, symbol, context); - } - - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.isLastNameOfModuleNameModuleReference = function (ast) { - return ast.kind() === 11 /* IdentifierName */ && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast && ast.parent.parent && ast.parent.parent.kind() === 246 /* ModuleNameModuleReference */; - }; - - PullTypeResolver.prototype.computeQualifiedName = function (dottedNameAST, context) { - var rhsName = dottedNameAST.right.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(dottedNameAST); - var lhs = this.resolveAST(dottedNameAST.left, false, context); - - var lhsType = lhs.isAlias() ? lhs.getExportAssignedContainerSymbol() : lhs.type; - - if (this.inClassExtendsHeritageClause(dottedNameAST) && !this.inTypeArgumentList(dottedNameAST)) { - if (lhs.isAlias()) { - lhs.setIsUsedAsValue(); - } - } - - if (!lhsType) { - return this.getNewErrorTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var onLeftOfDot = this.isLeftSideOfQualifiedName(dottedNameAST); - var isNameOfModule = dottedNameAST.parent.kind() === 130 /* ModuleDeclaration */ && dottedNameAST.parent.name === dottedNameAST; - - var memberKind = (onLeftOfDot || isNameOfModule) ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - - var childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - - if (!childTypeSymbol && !isNameOfModule && this.isLastNameOfModuleNameModuleReference(dottedNameAST.right)) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, lhsType); - } - - if (!childTypeSymbol && lhsType.isContainer()) { - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - - if (exportedContainer) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, exportedContainer); - } - } - - if (!childTypeSymbol && enclosingDecl) { - var parentDecl = enclosingDecl; - - while (parentDecl) { - if (parentDecl.kind & 164 /* SomeContainer */) { - break; - } - - parentDecl = parentDecl.getParentDecl(); - } - - if (parentDecl) { - var enclosingSymbolType = parentDecl.getSymbol().type; - - if (enclosingSymbolType === lhsType) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - } - } - } - - if (!childTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [dottedNameAST.right.text(), lhsType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - - return childTypeSymbol; - }; - - PullTypeResolver.prototype.shouldContextuallyTypeAnyFunctionExpression = function (functionExpressionAST, typeParameters, parameters, returnTypeAnnotation, context) { - if (typeParameters && typeParameters.typeParameters.nonSeparatorCount() > 0) { - return false; - } - - if (returnTypeAnnotation) { - return false; - } - - if (parameters) { - for (var i = 0, n = parameters.length; i < n; i++) { - if (parameters.typeAt(i)) { - return false; - } - } - } - - var contextualFunctionTypeSymbol = context.getContextualType(); - - if (contextualFunctionTypeSymbol) { - this.resolveDeclaredSymbol(contextualFunctionTypeSymbol, context); - var callSignatures = contextualFunctionTypeSymbol.getCallSignatures(); - var exactlyOneCallSignature = callSignatures && callSignatures.length === 1; - if (!exactlyOneCallSignature) { - return false; - } - - var callSignatureIsGeneric = callSignatures[0].getTypeParameters().length > 0; - return !callSignatureIsGeneric; - } - - return false; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var funcDeclSymbol = null; - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - if (functionDecl && functionDecl.hasSymbol()) { - funcDeclSymbol = functionDecl.getSymbol(); - if (funcDeclSymbol.isResolved || funcDeclSymbol.inResolution) { - return funcDeclSymbol; - } - } - - funcDeclSymbol = functionDecl.getSymbol(); - TypeScript.Debug.assert(funcDeclSymbol); - - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - funcDeclSymbol.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } else { - if (assigningFunctionSignature) { - var returnType = assigningFunctionSignature.returnType; - - if (returnType) { - context.propagateContextualType(returnType); - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, true, functionDecl, context); - context.popAnyContextualType(); - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - var functionExpressionName = functionDecl.getFunctionExpressionName(); - - if (functionExpressionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, false, functionDecl, context); - } - } - - context.setTypeInContext(funcDeclSymbol, funcDeclType); - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpressionParameters = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context) { - if (!parameters) { - return; - } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var contextParams = []; - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - if (assigningFunctionSignature) { - contextParams = assigningFunctionSignature.parameters; - } - - var contextualParametersCount = contextParams.length; - for (var i = 0, n = parameters.length; i < n; i++) { - var actualParameterIsVarArgParameter = (i === (n - 1)) && parameters.lastParameterIsRest(); - var correspondingContextualParameter = null; - var contextualParameterType = null; - - if (i < contextualParametersCount) { - correspondingContextualParameter = contextParams[i]; - } else if (contextualParametersCount && contextParams[contextualParametersCount - 1].isVarArg) { - correspondingContextualParameter = contextParams[contextualParametersCount - 1]; - } - - if (correspondingContextualParameter) { - if (correspondingContextualParameter.isVarArg === actualParameterIsVarArgParameter) { - contextualParameterType = correspondingContextualParameter.type; - } else if (correspondingContextualParameter.isVarArg) { - contextualParameterType = correspondingContextualParameter.type.getElementType(); - } - } - - this.resolveFunctionExpressionParameter(parameters.astAt(i), parameters.identifierAt(i), parameters.typeAt(i), parameters.initializerAt(i), contextualParameterType, functionDecl, context); - } - }; - - PullTypeResolver.prototype.typeCheckSimpleArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), null, arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckParenthesizedArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcDeclSymbol = functionDecl.getSymbol(); - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - var returnTypeSymbol = signature.returnType; - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - context.pushNewContextualType(null); - if (block) { - this.resolveAST(block, false, context); - } else { - var bodyExpressionType = this.resolveReturnExpression(bodyExpression, functionDecl, context); - this.typeCheckReturnExpression(bodyExpression, bodyExpressionType, functionDecl, context); - } - - context.popAnyContextualType(); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context); - - this.validateVariableDeclarationGroups(functionDecl, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.resolveThisExpression = function (thisExpression, context) { - var enclosingDecl = this.getEnclosingDeclForAST(thisExpression); - var thisTypeSymbol = this.getContextualClassSymbolForEnclosingDecl(thisExpression, enclosingDecl) || this.semanticInfoChain.anyTypeSymbol; - - if (this.canTypeCheckAST(thisExpression, context)) { - this.typeCheckThisExpression(thisExpression, context, enclosingDecl); - } - - return thisTypeSymbol; - }; - - PullTypeResolver.prototype.inTypeArgumentList = function (ast) { - var previous = null; - var current = ast; - - while (current) { - switch (current.kind()) { - case 126 /* GenericType */: - var genericType = current; - if (genericType.typeArgumentList === previous) { - return true; - } - break; - - case 226 /* ArgumentList */: - var argumentList = current; - return argumentList.typeArgumentList === previous; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inClassExtendsHeritageClause = function (ast) { - while (ast) { - switch (ast.kind()) { - case 230 /* ExtendsHeritageClause */: - var heritageClause = ast; - - return heritageClause.parent.parent.kind() === 131 /* ClassDeclaration */; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inTypeQuery = function (ast) { - while (ast) { - switch (ast.kind()) { - case 127 /* TypeQuery */: - return true; - case 129 /* FunctionDeclaration */: - case 213 /* InvocationExpression */: - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inArgumentListOfSuperInvocation = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 213 /* InvocationExpression */: - var invocationExpression = current; - if (previous === invocationExpression.argumentList && invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } - break; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inConstructorParameterList = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 142 /* CallSignature */: - var callSignature = current; - if (previous === callSignature.parameterList && callSignature.parent.kind() === 137 /* ConstructorDeclaration */) { - return true; - } - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - PullTypeResolver.prototype.isFunctionAccessorOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 262144 /* GetAccessor */ || decl.kind === 524288 /* SetAccessor */) { - return true; - } - - return this.isFunctionOrNonArrowFunctionExpression(decl); - }; - - PullTypeResolver.prototype.isFunctionOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 16384 /* Function */) { - return true; - } else if (decl.kind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - return true; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckThisExpression = function (thisExpression, context, enclosingDecl) { - this.checkForThisCaptureInArrowFunction(thisExpression); - - if (this.inConstructorParameterList(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_constructor_arguments)); - return; - } - - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionAccessorOrNonArrowFunctionExpression(currentDecl)) { - return; - } else if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - if (currentDecl.getParentDecl() === null) { - return; - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_within_module_bodies)); - return; - } - } else if (currentDecl.kind === 64 /* Enum */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - return; - } else if (currentDecl.kind === 32768 /* ConstructorMethod */) { - if (this.inArgumentListOfSuperInvocation(thisExpression) && this.superCallMustBeFirstStatementInConstructor(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - } - - return; - } else if (currentDecl.kind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_static_initializers_in_a_class_body)); - } - - return; - } - } - }; - - PullTypeResolver.prototype.getContextualClassSymbolForEnclosingDecl = function (ast, enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var isStaticContext = false; - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declFlags & 16 /* Static */) { - isStaticContext = true; - } else if (declKind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - return null; - } else if (declKind === 16384 /* Function */) { - return null; - } else if (declKind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(ast)) { - return this.getNewErrorTypeSymbol(); - } else { - var classSymbol = decl.getSymbol(); - if (isStaticContext) { - var constructorSymbol = classSymbol.getConstructorMethod(); - return constructorSymbol.type; - } else { - return classSymbol; - } - } - } - } - } - - return null; - }; - - PullTypeResolver.prototype.inStaticMemberVariableDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 136 /* MemberVariableDeclaration */ && TypeScript.hasModifier(ast.modifiers, 16 /* Static */)) { - return true; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.resolveSuperExpression = function (ast, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var superType = this.semanticInfoChain.anyTypeSymbol; - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(ast, enclosingDecl); - - if (classSymbol) { - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - - if (parents.length) { - superType = parents[0]; - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSuperExpression(ast, context, enclosingDecl); - } - - return superType; - }; - - PullTypeResolver.prototype.typeCheckSuperExpression = function (ast, context, enclosingDecl) { - this.setTypeChecked(ast, context); - - this.checkForThisCaptureInArrowFunction(ast); - - var isSuperCall = ast.parent.kind() === 213 /* InvocationExpression */; - var isSuperPropertyAccess = ast.parent.kind() === 212 /* MemberAccessExpression */; - TypeScript.Debug.assert(isSuperCall || isSuperPropertyAccess); - - if (isSuperPropertyAccess) { - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionOrNonArrowFunctionExpression(currentDecl)) { - break; - } else if (currentDecl.kind === 8 /* Class */) { - if (!this.enclosingClassIsDerived(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } else if (this.inStaticMemberVariableDeclaration(ast)) { - break; - } - - return; - } - } - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class)); - return; - } else { - if (enclosingDecl.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingDecl.getParentDecl(); - - if (!this.enclosingClassIsDerived(classDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors)); - } - } - }; - - PullTypeResolver.prototype.resolveSimplePropertyAssignment = function (propertyAssignment, isContextuallyTyped, context) { - return this.resolveAST(propertyAssignment.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveObjectLiteralExpression = function (expressionAST, isContextuallyTyped, context, additionalResults) { - var symbol = this.getSymbolForAST(expressionAST, context); - var hasResolvedSymbol = symbol && symbol.isResolved; - - if (!hasResolvedSymbol || additionalResults || this.canTypeCheckAST(expressionAST, context)) { - if (this.canTypeCheckAST(expressionAST, context)) { - this.setTypeChecked(expressionAST, context); - } - symbol = this.computeObjectLiteralExpression(expressionAST, isContextuallyTyped, context, additionalResults); - this.setSymbolForAST(expressionAST, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.bindObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralMembers, isUsingExistingSymbol, pullTypeContext) { - var boundMemberSymbols = []; - var memberSymbol; - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var id = this.getPropertyAssignmentName(propertyAssignment); - var assignmentText = getPropertyAssignmentNameTextFromIdentifier(id); - - var isAccessor = propertyAssignment.kind() === 139 /* GetAccessor */ || propertyAssignment.kind() === 140 /* SetAccessor */; - var decl = this.semanticInfoChain.getDeclForAST(propertyAssignment); - TypeScript.Debug.assert(decl); - - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - if (!isUsingExistingSymbol) { - memberSymbol = new TypeScript.PullSymbol(assignmentText.memberName, 4096 /* Property */); - memberSymbol.addDeclaration(decl); - decl.setSymbol(memberSymbol); - } else { - memberSymbol = decl.getSymbol(); - } - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - memberSymbol = decl.getSymbol(); - } else { - TypeScript.Debug.assert(isAccessor); - memberSymbol = decl.getSymbol(); - } - - if (!isUsingExistingSymbol && !isAccessor) { - var existingMember = objectLiteralTypeSymbol.findMember(memberSymbol.name, true); - if (existingMember) { - pullTypeContext.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(propertyAssignment, assignmentText.actualText, existingMember.getDeclarations()[0].ast())); - } - - objectLiteralTypeSymbol.addMember(memberSymbol); - } - - boundMemberSymbols.push(memberSymbol); - } - - return boundMemberSymbols; - }; - - PullTypeResolver.prototype.resolveObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralContextualType, objectLiteralMembers, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, pullTypeContext, additionalResults) { - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var acceptedContextualType = false; - var assigningSymbol = null; - - var id = this.getPropertyAssignmentName(propertyAssignment); - var memberSymbol = boundMemberSymbols[i]; - var contextualMemberType = null; - - if (objectLiteralContextualType) { - assigningSymbol = this.getNamedPropertySymbol(memberSymbol.name, 68147712 /* SomeValue */, objectLiteralContextualType); - - if (!assigningSymbol) { - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - assigningSymbol = numericIndexerSignature; - } else if (stringIndexerSignature) { - assigningSymbol = stringIndexerSignature; - } - } - - if (assigningSymbol) { - this.resolveDeclaredSymbol(assigningSymbol, pullTypeContext); - - contextualMemberType = assigningSymbol.kind === 4194304 /* IndexSignature */ ? assigningSymbol.returnType : assigningSymbol.type; - pullTypeContext.propagateContextualType(contextualMemberType); - - acceptedContextualType = true; - - if (additionalResults) { - additionalResults.membersContextTypeSymbols[i] = contextualMemberType; - } - } - } - - var memberSymbolType = this.resolveAST(propertyAssignment, contextualMemberType !== null, pullTypeContext).type; - - if (memberSymbolType) { - if (memberSymbolType.isGeneric()) { - objectLiteralTypeSymbol.setHasGenericMember(); - } - - if (stringIndexerSignature) { - allMemberTypes.push(memberSymbolType); - } - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - allNumericMemberTypes.push(memberSymbolType); - } - } - - if (acceptedContextualType) { - pullTypeContext.popAnyContextualType(); - } - - var isAccessor = propertyAssignment.kind() === 140 /* SetAccessor */ || propertyAssignment.kind() === 139 /* GetAccessor */; - if (!memberSymbol.isResolved) { - if (isAccessor) { - this.setSymbolForAST(id, memberSymbolType, pullTypeContext); - } else { - pullTypeContext.setTypeInContext(memberSymbol, memberSymbolType); - memberSymbol.setResolved(); - - this.setSymbolForAST(id, memberSymbol, pullTypeContext); - } - } - } - }; - - PullTypeResolver.prototype.computeObjectLiteralExpression = function (objectLitAST, isContextuallyTyped, context, additionalResults) { - var objectLitDecl = this.semanticInfoChain.getDeclForAST(objectLitAST); - TypeScript.Debug.assert(objectLitDecl); - - var typeSymbol = this.getSymbolForAST(objectLitAST, context); - var isUsingExistingSymbol = !!typeSymbol; - - if (!typeSymbol) { - typeSymbol = new TypeScript.PullTypeSymbol("", 256 /* ObjectLiteral */); - typeSymbol.addDeclaration(objectLitDecl); - this.setSymbolForAST(objectLitAST, typeSymbol, context); - objectLitDecl.setSymbol(typeSymbol); - } - - var propertyAssignments = objectLitAST.propertyAssignments; - var contextualType = null; - - if (isContextuallyTyped) { - contextualType = context.getContextualType(); - this.resolveDeclaredSymbol(contextualType, context); - } - - var stringIndexerSignature = null; - var numericIndexerSignature = null; - var allMemberTypes = null; - var allNumericMemberTypes = null; - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - - stringIndexerSignature = indexSignatures.stringSignature; - numericIndexerSignature = indexSignatures.numericSignature; - - var inInferentialTyping = context.isInferentiallyTyping(); - if (stringIndexerSignature) { - allMemberTypes = inInferentialTyping ? [] : [stringIndexerSignature.returnType]; - } - - if (numericIndexerSignature) { - allNumericMemberTypes = inInferentialTyping ? [] : [numericIndexerSignature.returnType]; - } - } - - if (propertyAssignments) { - if (additionalResults) { - additionalResults.membersContextTypeSymbols = []; - } - - var boundMemberSymbols = this.bindObjectLiteralMembers(objectLitDecl, typeSymbol, propertyAssignments, isUsingExistingSymbol, context); - - this.resolveObjectLiteralMembers(objectLitDecl, typeSymbol, contextualType, propertyAssignments, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, context, additionalResults); - - if (!isUsingExistingSymbol) { - this.stampObjectLiteralWithIndexSignature(typeSymbol, allMemberTypes, stringIndexerSignature, context); - this.stampObjectLiteralWithIndexSignature(typeSymbol, allNumericMemberTypes, numericIndexerSignature, context); - } - } - - typeSymbol.setResolved(); - return typeSymbol; - }; - - PullTypeResolver.prototype.getPropertyAssignmentName = function (propertyAssignment) { - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 139 /* GetAccessor */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 140 /* SetAccessor */) { - return propertyAssignment.propertyName; - } else { - TypeScript.Debug.assert(false); - } - }; - - PullTypeResolver.prototype.stampObjectLiteralWithIndexSignature = function (objectLiteralSymbol, indexerTypeCandidates, contextualIndexSignature, context) { - if (contextualIndexSignature) { - var typeCollection = { - getLength: function () { - return indexerTypeCandidates.length; - }, - getTypeAtIndex: function (index) { - return indexerTypeCandidates[index]; - } - }; - var decl = objectLiteralSymbol.getDeclarations()[0]; - var indexerReturnType = this.findBestCommonType(typeCollection, context).widenedType(this, null, context); - if (indexerReturnType === contextualIndexSignature.returnType) { - objectLiteralSymbol.addIndexSignature(contextualIndexSignature); - } else { - this.semanticInfoChain.addSyntheticIndexSignature(decl, objectLiteralSymbol, this.getASTForDecl(decl), contextualIndexSignature.parameters[0].name, contextualIndexSignature.parameters[0].type, indexerReturnType); - } - } - }; - - PullTypeResolver.prototype.resolveArrayLiteralExpression = function (arrayLit, isContextuallyTyped, context) { - var symbol = this.getSymbolForAST(arrayLit, context); - if (!symbol || this.canTypeCheckAST(arrayLit, context)) { - if (this.canTypeCheckAST(arrayLit, context)) { - this.setTypeChecked(arrayLit, context); - } - symbol = this.computeArrayLiteralExpressionSymbol(arrayLit, isContextuallyTyped, context); - this.setSymbolForAST(arrayLit, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeArrayLiteralExpressionSymbol = function (arrayLit, isContextuallyTyped, context) { - var elements = arrayLit.expressions; - var elementType = null; - var elementTypes = []; - var comparisonInfo = new TypeComparisonInfo(); - var contextualElementType = null; - comparisonInfo.onlyCaptureFirstError = true; - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - - this.resolveDeclaredSymbol(contextualType, context); - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - if (indexSignatures.numericSignature) { - contextualElementType = indexSignatures.numericSignature.returnType; - } - } - } - - if (elements) { - if (contextualElementType) { - context.propagateContextualType(contextualElementType); - } - - for (var i = 0, n = elements.nonSeparatorCount(); i < n; i++) { - elementTypes.push(this.resolveAST(elements.nonSeparatorAt(i), contextualElementType !== null, context).type); - } - - if (contextualElementType) { - context.popAnyContextualType(); - } - } - - if (elementTypes.length) { - elementType = elementTypes[0]; - } - var collection; - - if (contextualElementType && !context.isInferentiallyTyping()) { - if (!elementType) { - elementType = contextualElementType; - } - - collection = { - getLength: function () { - return elements.nonSeparatorCount() + 1; - }, - getTypeAtIndex: function (index) { - return index === 0 ? contextualElementType : elementTypes[index - 1]; - } - }; - } else { - collection = { - getLength: function () { - return elements.nonSeparatorCount(); - }, - getTypeAtIndex: function (index) { - return elementTypes[index]; - } - }; - } - - elementType = elementType ? this.findBestCommonType(collection, context, comparisonInfo) : elementType; - - if (!elementType) { - elementType = this.semanticInfoChain.undefinedTypeSymbol; - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.resolveElementAccessExpression = function (callEx, context) { - var symbolAndDiagnostic = this.computeElementAccessExpressionSymbolAndDiagnostic(callEx, context); - - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckElementAccessExpression(callEx, context, symbolAndDiagnostic); - } - - return symbolAndDiagnostic.symbol; - }; - - PullTypeResolver.prototype.typeCheckElementAccessExpression = function (callEx, context, symbolAndDiagnostic) { - this.setTypeChecked(callEx, context); - context.postDiagnostic(symbolAndDiagnostic.diagnostic); - }; - - PullTypeResolver.prototype.computeElementAccessExpressionSymbolAndDiagnostic = function (callEx, context) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var indexType = this.resolveAST(callEx.argumentExpression, false, context).type; - - var targetTypeSymbol = targetSymbol.type; - - targetTypeSymbol = this.getApparentType(targetTypeSymbol); - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - return { symbol: targetTypeSymbol }; - } - - var elementType = targetTypeSymbol.getElementType(); - - var isNumberIndex = indexType === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(indexType); - - if (elementType && isNumberIndex) { - return { symbol: elementType }; - } - - if (callEx.argumentExpression.kind() === 14 /* StringLiteral */ || callEx.argumentExpression.kind() === 13 /* NumericLiteral */) { - var memberName = callEx.argumentExpression.kind() === 14 /* StringLiteral */ ? TypeScript.stripStartAndEndQuotes(callEx.argumentExpression.text()) : callEx.argumentExpression.valueText(); - - var member = this._getNamedPropertySymbolOfAugmentedType(memberName, targetTypeSymbol); - - if (member) { - this.resolveDeclaredSymbol(member, context); - - return { symbol: member.type }; - } - } - - var signatures = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(targetTypeSymbol, context); - - var stringSignature = signatures.stringSignature; - var numberSignature = signatures.numericSignature; - - if (numberSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol)) { - return { symbol: numberSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (stringSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol)) { - return { symbol: stringSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol) { - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(callEx.argumentExpression, TypeScript.DiagnosticCode.Index_signature_of_object_type_implicitly_has_an_any_type)); - } - return { symbol: this.semanticInfoChain.anyTypeSymbol }; - } else { - return { - symbol: this.getNewErrorTypeSymbol(), - diagnostic: this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Value_of_type_0_is_not_indexable_by_type_1, [targetTypeSymbol.toString(), indexType.toString()]) - }; - } - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesIncludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, true); - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesExcludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, false); - }; - - PullTypeResolver.prototype._getBothKindsOfIndexSignatures = function (enclosingType, context, includeAugmentedType) { - var signatures = includeAugmentedType ? enclosingType.getIndexSignaturesOfAugmentedType(this, this.cachedFunctionInterfaceType(), this.cachedObjectInterfaceType()) : enclosingType.getIndexSignatures(); - - var stringSignature = null; - var numberSignature = null; - var signature = null; - var paramSymbols; - var paramType; - - for (var i = 0; i < signatures.length; i++) { - if (stringSignature && numberSignature) { - break; - } - - signature = signatures[i]; - if (!signature.isResolved) { - this.resolveDeclaredSymbol(signature, context); - } - - paramSymbols = signature.parameters; - - if (paramSymbols.length) { - paramType = paramSymbols[0].type; - - if (!stringSignature && paramType === this.semanticInfoChain.stringTypeSymbol) { - stringSignature = signature; - continue; - } else if (!numberSignature && paramType === this.semanticInfoChain.numberTypeSymbol) { - numberSignature = signature; - continue; - } - } - } - - return { - numericSignature: numberSignature, - stringSignature: stringSignature - }; - }; - - PullTypeResolver.prototype._addUnhiddenSignaturesFromBaseType = function (derivedTypeSignatures, baseTypeSignatures, signaturesBeingAggregated) { - var _this = this; - if (!derivedTypeSignatures) { - signaturesBeingAggregated.push.apply(signaturesBeingAggregated, baseTypeSignatures); - return; - } - - var context = new TypeScript.PullTypeResolutionContext(this); - for (var i = 0; i < baseTypeSignatures.length; i++) { - var baseSignature = baseTypeSignatures[i]; - - var signatureIsHidden = TypeScript.ArrayUtilities.any(derivedTypeSignatures, function (sig) { - return _this.signaturesAreIdenticalWithNewEnclosingTypes(baseSignature, sig, context, false); - }); - - if (!signatureIsHidden) { - signaturesBeingAggregated.push(baseSignature); - } - } - }; - - PullTypeResolver.prototype.resolveBinaryAdditionOperation = function (binaryExpression, context) { - var lhsExpression = this.resolveAST(binaryExpression.left, false, context); - var lhsType = lhsExpression.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (TypeScript.PullHelpers.symbolIsEnum(lhsType)) { - lhsType = this.semanticInfoChain.numberTypeSymbol; - } - - if (TypeScript.PullHelpers.symbolIsEnum(rhsType)) { - rhsType = this.semanticInfoChain.numberTypeSymbol; - } - - var isLhsTypeNullOrUndefined = lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol; - var isRhsTypeNullOrUndefined = rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol; - - if (isLhsTypeNullOrUndefined) { - if (isRhsTypeNullOrUndefined) { - lhsType = rhsType = this.semanticInfoChain.anyTypeSymbol; - } else { - lhsType = rhsType; - } - } else if (isRhsTypeNullOrUndefined) { - rhsType = lhsType; - } - - var exprType = null; - - if (lhsType === this.semanticInfoChain.stringTypeSymbol || rhsType === this.semanticInfoChain.stringTypeSymbol) { - exprType = this.semanticInfoChain.stringTypeSymbol; - } else if (this.isAnyOrEquivalent(lhsType) || this.isAnyOrEquivalent(rhsType)) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } else if (rhsType === this.semanticInfoChain.numberTypeSymbol && lhsType === this.semanticInfoChain.numberTypeSymbol) { - exprType = this.semanticInfoChain.numberTypeSymbol; - } - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (exprType) { - if (binaryExpression.kind() === 175 /* AddAssignmentExpression */) { - if (!this.isReference(binaryExpression.left, lhsExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, exprType, lhsType, context); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_expression_types_not_known_to_support_the_addition_operator)); - } - } - - if (!exprType) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } - - return exprType; - }; - - PullTypeResolver.prototype.bestCommonTypeOfTwoTypes = function (type1, type2, context) { - return this.findBestCommonType({ - getLength: function () { - return 2; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - } - } - }, context); - }; - - PullTypeResolver.prototype.bestCommonTypeOfThreeTypes = function (type1, type2, type3, context) { - return this.findBestCommonType({ - getLength: function () { - return 3; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - case 2: - return type3; - } - } - }, context); - }; - - PullTypeResolver.prototype.resolveLogicalOrExpression = function (binex, isContextuallyTyped, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - } - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - var leftType = this.resolveAST(binex.left, isContextuallyTyped, context).type; - var rightType = this.resolveAST(binex.right, isContextuallyTyped, context).type; - - return context.isInferentiallyTyping() ? this.bestCommonTypeOfTwoTypes(leftType, rightType, context) : this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - var leftType = this.resolveAST(binex.left, false, context).type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binex.right, true, context).type; - context.popAnyContextualType(); - - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveLogicalAndExpression = function (binex, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - - this.resolveAST(binex.left, false, context); - } - - return this.resolveAST(binex.right, false, context).type; - }; - - PullTypeResolver.prototype.computeTypeOfConditionalExpression = function (leftType, rightType, isContextuallyTyped, context) { - if (isContextuallyTyped && !context.isInferentiallyTyping()) { - var contextualType = context.getContextualType(); - return this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveConditionalExpression = function (trinex, isContextuallyTyped, context) { - var leftType = this.resolveAST(trinex.whenTrue, isContextuallyTyped, context).type; - var rightType = this.resolveAST(trinex.whenFalse, isContextuallyTyped, context).type; - - var expressionType = this.computeTypeOfConditionalExpression(leftType, rightType, isContextuallyTyped, context); - - var conditionalTypesAreValid = this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context); - - if (this.canTypeCheckAST(trinex, context)) { - this.setTypeChecked(trinex, context); - this.resolveAST(trinex.condition, false, context); - - if (!this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context)) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_2_or_3, [expressionType.toString(), leftType.toString(), rightType.toString(), contextualType.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_or_2, [expressionType.toString(), leftType.toString(), rightType.toString()])); - } - } - } - - if (!conditionalTypesAreValid) { - return this.getNewErrorTypeSymbol(); - } - - return expressionType; - }; - - PullTypeResolver.prototype.conditionExpressionTypesAreValid = function (leftType, rightType, expressionType, isContextuallyTyped, context) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context) || this.typesAreIdentical(expressionType, contextualType, context)) { - return true; - } - } else { - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.resolveParenthesizedExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveAST(ast.expression, false, context); - }; - - PullTypeResolver.prototype.resolveExpressionStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInvocationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeInvocationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - if (symbol !== this.semanticInfoChain.anyTypeSymbol) { - this.setSymbolForAST(callEx, symbol, context); - } - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckInvocationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckInvocationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - var targetSymbol = this.resolveAST(callEx.expression, false, context); - - if (callEx.argumentList.arguments) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - - var len = callEx.argumentList.arguments.nonSeparatorCount(); - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.computeInvocationExpressionSymbol = function (callEx, context, additionalResults) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var targetTypeSymbol = targetSymbol.type; - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - if (targetTypeSymbol === this.semanticInfoChain.anyTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Untyped_function_calls_may_not_accept_type_arguments), additionalResults, context); - return this.getNewErrorTypeSymbol(); - } - } - - return this.semanticInfoChain.anyTypeSymbol; - } - - var isSuperCall = false; - - if (callEx.expression.kind() === 50 /* SuperKeyword */) { - isSuperCall = true; - - if (targetTypeSymbol.isClass()) { - targetSymbol = targetTypeSymbol.getConstructorMethod(); - this.resolveDeclaredSymbol(targetSymbol, context); - targetTypeSymbol = targetSymbol.type; - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Calls_to_super_are_only_valid_inside_a_class), additionalResults, context); - this.resolveAST(callEx.argumentList.arguments, false, context); - - return this.getNewErrorTypeSymbol(); - } - } - - var signatures = isSuperCall ? targetTypeSymbol.getConstructSignatures() : targetTypeSymbol.getCallSignatures(); - - if (!signatures.length && (targetTypeSymbol.kind === 33554432 /* ConstructorType */)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, [targetTypeSymbol.toString()]), additionalResults, context); - } - - var explicitTypeArgs = null; - var couldNotFindGenericOverload = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - var triedToInferTypeArgs = false; - - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var beforeResolutionSignatures = signatures; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < signatures.length; i++) { - typeParameters = signatures[i].getTypeParameters(); - couldNotAssignToConstraint = false; - - if (signatures[i].isGeneric() && typeParameters.length) { - if (isSuperCall && targetTypeSymbol.isGeneric() && !callEx.argumentList.typeArgumentList) { - explicitTypeArgs = signatures[i].returnType.getTypeArguments(); - } - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else { - TypeScript.Debug.assert(callEx.argumentList); - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, signatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(signatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = signatures[i]; - } - } - } - - if (signatures.length && !resolvedSignatures.length) { - couldNotFindGenericOverload = true; - } - - signatures = resolvedSignatures; - - var errorCondition = null; - if (!signatures.length) { - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures && beforeResolutionSignatures.length ? beforeResolutionSignatures[0] : null; - - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (!couldNotFindGenericOverload) { - if (this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(targetTypeSymbol, this.cachedFunctionInterfaceType(), targetAST, context)) { - if (callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } - return this.semanticInfoChain.anyTypeSymbol; - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature), additionalResults, context); - } else if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var signature = this.resolveOverloads(callEx, signatures, callEx.argumentList.typeArgumentList !== null, context, diagnostics); - var useBeforeResolutionSignatures = signature == null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!signatures.length) { - return errorCondition; - } - - signature = signatures[0]; - } - - var rootSignature = signature.getRootSymbol(); - if (!rootSignature.isGeneric() && callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } else if (rootSignature.isGeneric() && callEx.argumentList.typeArgumentList && rootSignature.getTypeParameters() && (callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount() !== rootSignature.getTypeParameters().length)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [rootSignature.getTypeParameters().length, callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()]), additionalResults, context); - } - - var returnType = isSuperCall ? this.semanticInfoChain.voidTypeSymbol : signature.returnType; - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - if (useBeforeResolutionSignatures && beforeResolutionSignatures) { - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures[0]; - } else { - additionalResults.resolvedSignatures = signatures; - additionalResults.candidateSignature = signature; - } - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveObjectCreationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeObjectCreationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - this.setSymbolForAST(callEx, symbol, context); - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckObjectCreationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckObjectCreationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - this.resolveAST(callEx.expression, false, context); - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (callEx.argumentList) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - var len = callEx.argumentList.arguments.nonSeparatorCount(); - - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.postOverloadResolutionDiagnostics = function (diagnostic, additionalResults, context) { - if (!context.inProvisionalResolution()) { - additionalResults.diagnosticsFromOverloadResolution.push(diagnostic); - } - context.postDiagnostic(diagnostic); - }; - - PullTypeResolver.prototype.computeObjectCreationExpressionSymbol = function (callEx, context, additionalResults) { - var _this = this; - var returnType = null; - - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetTypeSymbol = targetSymbol.isType() ? targetSymbol : targetSymbol.type; - - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var constructSignatures = targetTypeSymbol.getConstructSignatures(); - - var explicitTypeArgs = null; - var usedCallSignaturesInstead = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - return targetTypeSymbol; - } - - if (!constructSignatures.length) { - constructSignatures = targetTypeSymbol.getCallSignatures(); - usedCallSignaturesInstead = true; - - if (this.compilationSettings.noImplicitAny()) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type), additionalResults, context); - } - } - - if (constructSignatures.length) { - if (callEx.argumentList && callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - if (targetTypeSymbol.isGeneric()) { - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var triedToInferTypeArgs; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < constructSignatures.length; i++) { - couldNotAssignToConstraint = false; - - if (constructSignatures[i].isGeneric()) { - typeParameters = constructSignatures[i].getTypeParameters(); - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else if (callEx.argumentList) { - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, constructSignatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } else { - inferredOrExplicitTypeArgs = TypeScript.ArrayUtilities.select(typeParameters, function (typeParameter) { - return typeParameter.getDefaultConstraint(_this.semanticInfoChain); - }); - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(constructSignatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList && callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = constructSignatures[i]; - } - } - } - - constructSignatures = resolvedSignatures; - } - - var signature = this.resolveOverloads(callEx, constructSignatures, callEx.argumentList && callEx.argumentList.typeArgumentList !== null, context, diagnostics); - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = []; - - if (!constructSignatures.length) { - if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var errorCondition = null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_new_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!constructSignatures.length) { - return errorCondition; - } - - signature = constructSignatures[0]; - } - - returnType = signature.returnType; - - if (returnType && !signature.isGeneric() && returnType.isGeneric() && !returnType.getIsSpecialized()) { - if (explicitTypeArgs && explicitTypeArgs.length) { - returnType = this.createInstantiatedType(returnType, explicitTypeArgs); - } else { - returnType = this.instantiateTypeToAny(returnType, context); - } - } - - if (usedCallSignaturesInstead) { - if (returnType !== this.semanticInfoChain.voidTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Call_signatures_used_in_a_new_expression_must_have_a_void_return_type), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - } else { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - } - - if (!returnType) { - returnType = signature.returnType; - - if (!returnType) { - returnType = targetTypeSymbol; - } - } - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList && callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - } else if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Invalid_new_expression), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - }; - - PullTypeResolver.prototype.instantiateSignatureInContext = function (signatureAToInstantiate, contextualSignatureB, context, shouldFixContextualSignatureParameterTypes) { - var typeReplacementMap = []; - var inferredTypeArgs; - var specializedSignature; - var typeParameters = signatureAToInstantiate.getTypeParameters(); - var typeConstraint = null; - - var typeArgumentInferenceContext = new TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext(this, context, signatureAToInstantiate, contextualSignatureB, shouldFixContextualSignatureParameterTypes); - inferredTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - - var functionTypeA = signatureAToInstantiate.functionType; - var functionTypeB = contextualSignatureB.functionType; - var enclosingTypeParameterMap; - - if (functionTypeA) { - enclosingTypeParameterMap = functionTypeA.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - if (functionTypeB) { - enclosingTypeParameterMap = functionTypeB.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - TypeScript.PullInstantiationHelpers.updateTypeParameterArgumentMap(typeParameters, inferredTypeArgs, typeReplacementMap); - - return this.instantiateSignature(signatureAToInstantiate, typeReplacementMap); - }; - - PullTypeResolver.prototype.resolveCastExpression = function (assertionExpression, context) { - var typeAssertionType = this.resolveTypeReference(assertionExpression.type, context).type; - - if (this.canTypeCheckAST(assertionExpression, context)) { - this.typeCheckCastExpression(assertionExpression, context, typeAssertionType); - } - - return typeAssertionType; - }; - - PullTypeResolver.prototype.typeCheckCastExpression = function (assertionExpression, context, typeAssertionType) { - this.setTypeChecked(assertionExpression, context); - - context.pushNewContextualType(typeAssertionType); - var exprType = this.resolveAST(assertionExpression.expression, true, context).type; - context.popAnyContextualType(); - - this.resolveDeclaredSymbol(typeAssertionType, context); - this.resolveDeclaredSymbol(exprType, context); - - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(exprType, typeAssertionType, assertionExpression, context, comparisonInfo); - - if (!isAssignable) { - var widenedExprType = exprType.widenedType(this, assertionExpression.expression, context); - isAssignable = this.sourceIsAssignableToTarget(typeAssertionType, widenedExprType, assertionExpression, context, comparisonInfo); - } - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(assertionExpression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.resolveAssignmentExpression = function (binaryExpression, context) { - var leftExpr = this.resolveAST(binaryExpression.left, false, context); - var leftType = leftExpr.type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binaryExpression.right, true, context).type; - context.popAnyContextualType(); - - rightType = this.getInstanceTypeForAssignment(binaryExpression.left, rightType, context); - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (!this.isReference(binaryExpression.left, leftExpr)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } else { - this.checkAssignability(binaryExpression.left, rightType, leftExpr.type, context); - } - } - - return rightType; - }; - - PullTypeResolver.prototype.getInstanceTypeForAssignment = function (lhs, type, context) { - var typeToReturn = type; - if (typeToReturn && typeToReturn.isAlias()) { - typeToReturn = typeToReturn.getExportAssignedTypeSymbol(); - } - - if (typeToReturn && typeToReturn.isContainer() && !typeToReturn.isEnum()) { - var instanceTypeSymbol = typeToReturn.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(lhs, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [type.toString()])); - typeToReturn = null; - } else { - typeToReturn = instanceTypeSymbol; - } - } - - return typeToReturn; - }; - - PullTypeResolver.prototype.widenType = function (type, ast, context) { - if (type === this.semanticInfoChain.undefinedTypeSymbol || type === this.semanticInfoChain.nullTypeSymbol || type.isError()) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (type.isArrayNamedTypeReference()) { - return this.widenArrayType(type, ast, context); - } else if (type.kind === 256 /* ObjectLiteral */) { - return this.widenObjectLiteralType(type, ast, context); - } - - return type; - }; - - PullTypeResolver.prototype.widenArrayType = function (type, ast, context) { - var elementType = type.getElementType().widenedType(this, ast, context); - - if (this.compilationSettings.noImplicitAny() && ast) { - if (elementType === this.semanticInfoChain.anyTypeSymbol && type.getElementType() !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Array_Literal_implicitly_has_an_any_type_from_widening)); - } - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.widenObjectLiteralType = function (type, ast, context) { - if (!this.needsToWidenObjectLiteralType(type, ast, context)) { - return type; - } - - TypeScript.Debug.assert(type.name === ""); - var newObjectTypeSymbol = new TypeScript.PullTypeSymbol(type.name, type.kind); - var declsOfObjectType = type.getDeclarations(); - TypeScript.Debug.assert(declsOfObjectType.length === 1); - newObjectTypeSymbol.addDeclaration(declsOfObjectType[0]); - var members = type.getMembers(); - - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - - var widenedMemberType = members[i].type.widenedType(this, ast, context); - var newMember = new TypeScript.PullSymbol(members[i].name, members[i].kind); - - var declsOfMember = members[i].getDeclarations(); - - newMember.addDeclaration(declsOfMember[0]); - newMember.type = widenedMemberType; - newObjectTypeSymbol.addMember(newMember); - newMember.setResolved(); - - if (this.compilationSettings.noImplicitAny() && ast && widenedMemberType === this.semanticInfoChain.anyTypeSymbol && memberType !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Object_literal_s_property_0_implicitly_has_an_any_type_from_widening, [members[i].name])); - } - } - - var indexers = type.getIndexSignatures(); - for (var i = 0; i < indexers.length; i++) { - var newIndexer = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var parameter = indexers[i].parameters[0]; - var newParameter = new TypeScript.PullSymbol(parameter.name, parameter.kind); - newParameter.type = parameter.type; - newIndexer.addParameter(newParameter); - newIndexer.returnType = indexers[i].returnType; - newObjectTypeSymbol.addIndexSignature(newIndexer); - } - - return newObjectTypeSymbol; - }; - - PullTypeResolver.prototype.needsToWidenObjectLiteralType = function (type, ast, context) { - var members = type.getMembers(); - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - if (memberType !== memberType.widenedType(this, ast, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.findBestCommonType = function (collection, context, comparisonInfo) { - var len = collection.getLength(); - - for (var i = 0; i < len; i++) { - var candidateType = collection.getTypeAtIndex(i); - if (this.typeIsBestCommonTypeCandidate(candidateType, collection, context)) { - return candidateType; - } - } - - return this.semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeResolver.prototype.typeIsBestCommonTypeCandidate = function (candidateType, collection, context) { - for (var i = 0; i < collection.getLength(); i++) { - var otherType = collection.getTypeAtIndex(i); - if (candidateType === otherType) { - continue; - } - - if (!this.sourceIsSubtypeOfTarget(otherType, candidateType, null, context)) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typesAreIdenticalInEnclosingTypes = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (t1 && t2) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingTypesAreIdentical(t1, t2, context); - } - } - - return this.typesAreIdentical(t1, t2, context); - }; - - PullTypeResolver.prototype.typesAreIdenticalWithNewEnclosingTypes = function (t1, t2, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var areTypesIdentical = this.typesAreIdentical(t1, t2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areTypesIdentical; - }; - - PullTypeResolver.prototype.typesAreIdentical = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (!t1 || !t2) { - return false; - } - - if (TypeScript.hasFlag(t1.kind, 64 /* Enum */) || TypeScript.hasFlag(t2.kind, 64 /* Enum */)) { - return false; - } - - if (t1.isPrimitive() && t1.isStringConstant() && t2.isPrimitive() && t2.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(t1.name) === TypeScript.stripStartAndEndQuotes(t2.name); - } - - if (t1.isPrimitive() || t2.isPrimitive()) { - return false; - } - - if (t1.isError() && t2.isError()) { - return true; - } - - var isIdentical = this.identicalCache.valueAt(t1.pullSymbolID, t2.pullSymbolID); - if (isIdentical != undefined) { - return isIdentical; - } - - if (t1.isTypeParameter() !== t2.isTypeParameter()) { - return false; - } else if (t1.isTypeParameter()) { - var t1ParentDeclaration = t1.getDeclarations()[0].getParentDecl(); - var t2ParentDeclaration = t2.getDeclarations()[0].getParentDecl(); - - if (t1ParentDeclaration === t2ParentDeclaration) { - return this.symbolsShareDeclaration(t1, t2); - } else { - return false; - } - } - - if (t1.isPrimitive() !== t2.isPrimitive()) { - return false; - } - - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, true); - var statesWhenStartedWalkingTypes = context.startWalkingTypes(t1, t2); - isIdentical = this.typesAreIdenticalWorker(t1, t2, context); - context.endWalkingTypes(statesWhenStartedWalkingTypes); - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, isIdentical); - - return isIdentical; - }; - - PullTypeResolver.prototype.typesAreIdenticalWorker = function (t1, t2, context) { - if (t1.getIsSpecialized() && t2.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(t1) === TypeScript.PullHelpers.getRootType(t2) && TypeScript.PullHelpers.getRootType(t1).isNamedTypeSymbol()) { - var t1TypeArguments = t1.getTypeArguments(); - var t2TypeArguments = t2.getTypeArguments(); - - if (t1TypeArguments && t2TypeArguments) { - for (var i = 0; i < t1TypeArguments.length; i++) { - if (!this.typesAreIdenticalWithNewEnclosingTypes(t1TypeArguments[i], t2TypeArguments[i], context)) { - return false; - } - } - } - - return true; - } - } - - if (t1.hasMembers() && t2.hasMembers()) { - var t1Members = t1.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - var t2Members = t2.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - if (t1Members.length !== t2Members.length) { - return false; - } - - var t1MemberSymbol = null; - var t2MemberSymbol = null; - - var t1MemberType = null; - var t2MemberType = null; - - for (var iMember = 0; iMember < t1Members.length; iMember++) { - t1MemberSymbol = t1Members[iMember]; - t2MemberSymbol = this.getNamedPropertySymbol(t1MemberSymbol.name, 68147712 /* SomeValue */, t2); - - if (!this.propertiesAreIdentical(t1MemberSymbol, t2MemberSymbol, context)) { - return false; - } - } - } else if (t1.hasMembers() || t2.hasMembers()) { - return false; - } - - var t1CallSigs = t1.getCallSignatures(); - var t2CallSigs = t2.getCallSignatures(); - - var t1ConstructSigs = t1.getConstructSignatures(); - var t2ConstructSigs = t2.getConstructSignatures(); - - var t1IndexSigs = t1.getIndexSignatures(); - var t2IndexSigs = t2.getIndexSignatures(); - - if (!this.signatureGroupsAreIdentical(t1CallSigs, t2CallSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1ConstructSigs, t2ConstructSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1IndexSigs, t2IndexSigs, context)) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.propertiesAreIdentical = function (propertySymbol1, propertySymbol2, context) { - if (!propertySymbol2 || (propertySymbol1.isOptional !== propertySymbol2.isOptional)) { - return false; - } - - var t1MemberSymbolIsPrivate = propertySymbol1.anyDeclHasFlag(2 /* Private */); - var t2MemberSymbolIsPrivate = propertySymbol2.anyDeclHasFlag(2 /* Private */); - - if (t1MemberSymbolIsPrivate !== t2MemberSymbolIsPrivate) { - return false; - } else if (t2MemberSymbolIsPrivate && t1MemberSymbolIsPrivate) { - var t1MemberSymbolDecl = propertySymbol1.getDeclarations()[0]; - var sourceDecl = propertySymbol2.getDeclarations()[0]; - if (t1MemberSymbolDecl !== sourceDecl) { - return false; - } - } - - var t1MemberType = propertySymbol1.type; - var t2MemberType = propertySymbol2.type; - - context.walkMemberTypes(propertySymbol1.name); - var areMemberTypesIdentical = this.typesAreIdenticalInEnclosingTypes(t1MemberType, t2MemberType, context); - context.postWalkMemberTypes(); - return areMemberTypesIdentical; - }; - - PullTypeResolver.prototype.propertiesAreIdenticalWithNewEnclosingTypes = function (type1, type2, property1, property2, context) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(type1, type2); - var arePropertiesIdentical = this.propertiesAreIdentical(property1, property2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return arePropertiesIdentical; - }; - - PullTypeResolver.prototype.signatureGroupsAreIdentical = function (sg1, sg2, context) { - if (sg1 === sg2) { - return true; - } - - if (!sg1 || !sg2) { - return false; - } - - if (sg1.length !== sg2.length) { - return false; - } - - for (var i = 0; i < sg1.length; i++) { - context.walkSignatures(sg1[i].kind, i); - var areSignaturesIdentical = this.signaturesAreIdentical(sg1[i], sg2[i], context, true); - context.postWalkSignatures(); - if (!areSignaturesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typeParametersAreIdentical = function (tp1, tp2, context) { - var typeParamsAreIdentical = this.typeParametersAreIdenticalWorker(tp1, tp2, context); - - this.setTypeParameterIdentity(tp1, tp2, undefined); - - return typeParamsAreIdentical; - }; - - PullTypeResolver.prototype.typeParametersAreIdenticalWorker = function (tp1, tp2, context) { - if (!!(tp1 && tp1.length) !== !!(tp2 && tp2.length)) { - return false; - } - - if (tp1 && tp2 && (tp1.length !== tp2.length)) { - return false; - } - - if (tp1 && tp2) { - for (var i = 0; i < tp1.length; i++) { - context.walkTypeParameterConstraints(i); - var areConstraintsIdentical = this.typesAreIdentical(tp1[i].getConstraint(), tp2[i].getConstraint(), context); - context.postWalkTypeParameterConstraints(); - if (!areConstraintsIdentical) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.setTypeParameterIdentity = function (tp1, tp2, val) { - if (tp1 && tp2 && tp1.length === tp2.length) { - for (var i = 0; i < tp1.length; i++) { - this.identicalCache.setValueAt(tp1[i].pullSymbolID, tp2[i].pullSymbolID, val); - } - } - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWithNewEnclosingTypes = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var areSignaturesIdentical = this.signaturesAreIdentical(s1, s2, context, includingReturnType); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSignaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdentical = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1 === s2) { - return true; - } - - var signaturesIdentical = this.identicalCache.valueAt(s1.pullSymbolID, s2.pullSymbolID); - if (signaturesIdentical || (signaturesIdentical != undefined && includingReturnType)) { - return signaturesIdentical; - } - - var oldValue = signaturesIdentical; - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, true); - - signaturesIdentical = this.signaturesAreIdenticalWorker(s1, s2, context, includingReturnType); - - if (includingReturnType) { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, signaturesIdentical); - } else { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, oldValue); - } - - return signaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWorker = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1.hasVarArgs !== s2.hasVarArgs) { - return false; - } - - if (s1.nonOptionalParamCount !== s2.nonOptionalParamCount) { - return false; - } - - if (s1.parameters.length !== s2.parameters.length) { - return false; - } - - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var typeParametersParametersAndReturnTypesAreIdentical = this.signatureTypeParametersParametersAndReturnTypesAreIdentical(s1, s2, context, includingReturnType); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - return typeParametersParametersAndReturnTypesAreIdentical; - }; - - PullTypeResolver.prototype.signatureTypeParametersParametersAndReturnTypesAreIdentical = function (s1, s2, context, includingReturnType) { - if (!this.typeParametersAreIdenticalWorker(s1.getTypeParameters(), s2.getTypeParameters(), context)) { - return false; - } - - if (includingReturnType) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2); - context.walkReturnTypes(); - var areReturnTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - context.postWalkReturnTypes(); - if (!areReturnTypesIdentical) { - return false; - } - } - - var s1Params = s1.parameters; - var s2Params = s2.parameters; - - for (var iParam = 0; iParam < s1Params.length; iParam++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1Params[iParam]); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2Params[iParam]); - context.walkParameterTypes(iParam); - var areParameterTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1Params[iParam].type, s2Params[iParam].type, context); - context.postWalkParameterTypes(); - - if (!areParameterTypesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.signatureReturnTypesAreIdentical = function (s1, s2, context) { - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - context.walkReturnTypes(); - var returnTypeIsIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - - return returnTypeIsIdentical; - }; - - PullTypeResolver.prototype.symbolsShareDeclaration = function (symbol1, symbol2) { - var decls1 = symbol1.getDeclarations(); - var decls2 = symbol2.getDeclarations(); - - if (decls1.length && decls2.length) { - return decls1[0] === decls2[0]; - } - - return false; - }; - - PullTypeResolver.prototype.sourceIsSubtypeOfTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, false, this.subtypeCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceMembersAreAssignableToTargetMembers = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceMembersAreAssignableToTargetMembers = this.sourceMembersAreRelatableToTargetMembers(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceMembersAreAssignableToTargetMembers; - }; - - PullTypeResolver.prototype.sourcePropertyIsAssignableToTargetProperty = function (source, target, sourceProp, targetProp, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var isSourcePropertyIsAssignableToTargetProperty = this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourcePropertyIsAssignableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreAssignableToTargetCallSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceCallSignaturesAssignableToTargetCallSignatures = this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceCallSignaturesAssignableToTargetCallSignatures; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreAssignableToTargetConstructSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceConstructSignaturesAssignableToTargetConstructSignatures = this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceConstructSignaturesAssignableToTargetConstructSignatures; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreAssignableToTargetIndexSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceIndexSignaturesAssignableToTargetIndexSignatures = this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceIndexSignaturesAssignableToTargetIndexSignatures; - }; - - PullTypeResolver.prototype.typeIsAssignableToFunction = function (source, ast, context) { - if (source.isFunctionType()) { - return true; - } - - return this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(source, this.cachedFunctionInterfaceType(), ast, context); - }; - - PullTypeResolver.prototype.signatureIsAssignableToTarget = function (s1, s2, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var isSignatureIsAssignableToTarget = this.signatureIsRelatableToTarget(s1, s2, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSignatureIsAssignableToTarget; - }; - - PullTypeResolver.prototype.sourceIsAssignableToTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsAssignableToTargetWithNewEnclosingTypes = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTargetWithNewEnclosingTypes(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.getSymbolForRelationshipCheck = function (symbol) { - if (symbol && symbol.isTypeReference()) { - return symbol.getReferencedTypeSymbol(); - } - - return symbol; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; - } - - if (source && target) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingSourceTypeIsRelatableToTargetType(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - } - } - - return this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWithNewEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var isSourceRelatable = this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourceRelatable; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInCache = function (source, target, comparisonCache, comparisonInfo) { - var isRelatable = comparisonCache.valueAt(source.pullSymbolID, target.pullSymbolID); - - if (isRelatable) { - return { isRelatable: isRelatable }; - } - - if (isRelatable != undefined && !comparisonInfo) { - return { isRelatable: isRelatable }; - } - - return null; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTarget = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; - } - - if (!(source && target)) { - return true; - } - - var sourceApparentType = this.getApparentType(source); - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(source, target, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - if (source === this.semanticInfoChain.stringTypeSymbol && target.isPrimitive() && target.isStringConstant()) { - return comparisonInfo && comparisonInfo.stringConstantVal && (comparisonInfo.stringConstantVal.kind() === 14 /* StringLiteral */) && (TypeScript.stripStartAndEndQuotes(comparisonInfo.stringConstantVal.text()) === TypeScript.stripStartAndEndQuotes(target.name)); - } - - if (assignableTo) { - if (this.isAnyOrEquivalent(source) || this.isAnyOrEquivalent(target)) { - return true; - } - } else { - if (this.isAnyOrEquivalent(target)) { - return true; - } - } - - if (target === this.semanticInfoChain.stringTypeSymbol && source.isPrimitive() && source.isStringConstant()) { - return true; - } - - if (source.isPrimitive() && source.isStringConstant() && target.isPrimitive() && target.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(source.name) === TypeScript.stripStartAndEndQuotes(target.name); - } - - if (source === this.semanticInfoChain.undefinedTypeSymbol) { - return true; - } - - if ((source === this.semanticInfoChain.nullTypeSymbol) && (target !== this.semanticInfoChain.undefinedTypeSymbol && target != this.semanticInfoChain.voidTypeSymbol)) { - return true; - } - - if (target === this.semanticInfoChain.voidTypeSymbol) { - if (source === this.semanticInfoChain.undefinedTypeSymbol || source == this.semanticInfoChain.nullTypeSymbol) { - return true; - } - - return false; - } else if (source === this.semanticInfoChain.voidTypeSymbol) { - if (target === this.semanticInfoChain.anyTypeSymbol) { - return true; - } - - return false; - } - - if (target === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(source)) { - return true; - } - - if (source === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(target)) { - return assignableTo; - } - - if (TypeScript.PullHelpers.symbolIsEnum(target) && TypeScript.PullHelpers.symbolIsEnum(source)) { - return this.symbolsShareDeclaration(target, source); - } - - if ((source.kind & 64 /* Enum */) || (target.kind & 64 /* Enum */)) { - return false; - } - - if (source.getIsSpecialized() && target.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(source) === TypeScript.PullHelpers.getRootType(target) && TypeScript.PullHelpers.getRootType(source).isNamedTypeSymbol()) { - var sourceTypeArguments = source.getTypeArguments(); - var targetTypeArguments = target.getTypeArguments(); - - if (sourceTypeArguments && targetTypeArguments) { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - for (var i = 0; i < sourceTypeArguments.length; i++) { - if (!this.sourceIsRelatableToTargetWithNewEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, null, isComparingInstantiatedSignatures)) { - break; - } - } - - if (i === sourceTypeArguments.length) { - return true; - } else { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, undefined); - } - } - } - } - - if (target.isTypeParameter()) { - if (source.isTypeParameter()) { - if (!source.getConstraint()) { - return this.typesAreIdentical(target, source, context); - } else { - return this.isSourceTypeParameterConstrainedToTargetTypeParameter(source, target); - } - } else { - if (isComparingInstantiatedSignatures) { - target = target.getBaseConstraint(this.semanticInfoChain); - } else { - return this.typesAreIdentical(target, sourceApparentType, context); - } - } - } - - if (sourceApparentType.isPrimitive() || target.isPrimitive()) { - return false; - } - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(sourceApparentType, target); - var isRelatable = this.sourceIsRelatableToTargetWorker(sourceApparentType, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.isSourceTypeParameterConstrainedToTargetTypeParameter = function (source, target) { - var current = source; - while (current && current.isTypeParameter()) { - if (current === target) { - return true; - } - - current = current.getConstraint(); - } - return false; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWorker = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (target.hasMembers() && !this.sourceMembersAreRelatableToTargetMembers(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.sourceMembersAreRelatableToTargetMembers = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetProps = target.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - for (var itargetProp = 0; itargetProp < targetProps.length; itargetProp++) { - var targetProp = targetProps[itargetProp]; - - var sourceProp = this._getNamedPropertySymbolOfAugmentedType(targetProp.name, source); - - this.resolveDeclaredSymbol(targetProp, context); - - var targetPropType = targetProp.type; - - if (!sourceProp) { - if (!(targetProp.isOptional)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_is_missing_property_1_from_type_2, [source.toString(enclosingSymbol), targetProp.getScopedNameEx().toString(), target.toString(enclosingSymbol)])); - } - return false; - } - continue; - } - - if (!this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.infinitelyExpandingSourceTypeIsRelatableToTargetType = function (sourceType, targetType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var widenedTargetType = targetType.widenedType(this, null, context); - var widenedSourceType = sourceType.widenedType(this, null, context); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type, [sourceType.getScopedNameEx(enclosingSymbol).toString(), targetType.toString(enclosingSymbol)])); - } - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)])); - } - return false; - } - - var comparisonInfoTypeArgumentsCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoTypeArgumentsCheck = new TypeComparisonInfo(comparisonInfo); - } - var isRelatable = true; - for (var i = 0; i < sourceTypeArguments.length && isRelatable; i++) { - context.walkTypeArgument(i); - - if (!this.sourceIsRelatableToTargetInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, comparisonInfoTypeArgumentsCheck, isComparingInstantiatedSignatures)) { - isRelatable = false; - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - - if (comparisonInfoTypeArgumentsCheck && comparisonInfoTypeArgumentsCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol), comparisonInfoTypeArgumentsCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)]); - } - comparisonInfo.addMessage(message); - } - } - - context.postWalkTypeArgument(); - } - } - - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.infinitelyExpandingTypesAreIdentical = function (sourceType, targetType, context) { - var widenedTargetType = targetType.widenedType(this, null, null); - var widenedSourceType = sourceType.widenedType(this, null, null); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - for (var i = 0; i < sourceTypeArguments.length; i++) { - context.walkTypeArgument(i); - var areIdentical = this.typesAreIdenticalInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], context); - context.postWalkTypeArgument(); - - if (!areIdentical) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - } - } - - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - }; - - PullTypeResolver.prototype.sourcePropertyIsRelatableToTargetProperty = function (source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceAndTargetAreConstructors = source.isConstructor() && target.isConstructor(); - - var getNames = function (takeTypesFromPropertyContainers) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(ast); - var sourceType = takeTypesFromPropertyContainers ? sourceProp.getContainer() : source; - var targetType = takeTypesFromPropertyContainers ? targetProp.getContainer() : target; - if (sourceAndTargetAreConstructors) { - sourceType = sourceType.getAssociatedContainerType(); - targetType = targetType.getAssociatedContainerType(); - } - return { - propertyName: targetProp.getScopedNameEx().toString(), - sourceTypeName: sourceType.toString(enclosingSymbol), - targetTypeName: targetType.toString(enclosingSymbol) - }; - }; - - var targetPropIsPrivate = targetProp.anyDeclHasFlag(2 /* Private */); - var sourcePropIsPrivate = sourceProp.anyDeclHasFlag(2 /* Private */); - - if (targetPropIsPrivate !== sourcePropIsPrivate) { - if (comparisonInfo) { - var names = getNames(true); - var code; - if (targetPropIsPrivate) { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2; - } else { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2; - } - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName])); - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - } - return false; - } else if (sourcePropIsPrivate && targetPropIsPrivate) { - var targetDecl = targetProp.getDeclarations()[0]; - var sourceDecl = sourceProp.getDeclarations()[0]; - - if (targetDecl !== sourceDecl) { - if (comparisonInfo) { - var names = getNames(true); - - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_0_and_1_define_static_property_2_as_private : TypeScript.DiagnosticCode.Types_0_and_1_define_property_2_as_private; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.sourceTypeName, names.targetTypeName, names.propertyName])); - } - - return false; - } - } - - if (sourceProp.isOptional && !targetProp.isOptional) { - if (comparisonInfo) { - var names = getNames(true); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2, [names.propertyName, names.sourceTypeName, names.targetTypeName])); - } - return false; - } - - this.resolveDeclaredSymbol(sourceProp, context); - - var sourcePropType = sourceProp.type; - var targetPropType = targetProp.type; - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourcePropType, targetPropType, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - var comparisonInfoPropertyTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoPropertyTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - context.walkMemberTypes(targetProp.name); - var isSourcePropertyRelatableToTargetProperty = this.sourceIsRelatableToTargetInEnclosingTypes(sourcePropType, targetPropType, assignableTo, comparisonCache, ast, context, comparisonInfoPropertyTypeCheck, isComparingInstantiatedSignatures); - context.postWalkMemberTypes(); - - if (!isSourcePropertyRelatableToTargetProperty && comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 32 /* IncompatiblePropertyTypes */; - var message; - var names = getNames(false); - if (comparisonInfoPropertyTypeCheck && comparisonInfoPropertyTypeCheck.message) { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3 : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName, comparisonInfoPropertyTypeCheck.message]); - } else { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName]); - } - comparisonInfo.addMessage(message); - } - - return isSourcePropertyRelatableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreRelatableToTargetCallSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetCallSigs = target.getCallSignatures(); - - if (targetCallSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - var sourceCallSigs = source.getCallSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceCallSigs, targetCallSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (sourceCallSigs.length && targetCallSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - } else { - var hasSig = targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_call_signature_but_type_1_lacks_one, [hasSig, lacksSig]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreRelatableToTargetConstructSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetConstructSigs = target.getConstructSignatures(); - if (targetConstructSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - var sourceConstructSigs = source.getConstructSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceConstructSigs, targetConstructSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - var message; - if (sourceConstructSigs.length && targetConstructSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - } else { - var hasSig = targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_construct_signature_but_type_1_lacks_one, [hasSig, lacksSig]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreRelatableToTargetIndexSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetIndexSigs = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(target, context); - var targetStringSig = targetIndexSigs.stringSignature; - var targetNumberSig = targetIndexSigs.numericSignature; - - if (targetStringSig || targetNumberSig) { - var sourceIndexSigs = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(source, context); - var enclosingTypeIndexSigs = context.getBothKindOfIndexSignatures(true, false); - var sourceStringSig = sourceIndexSigs.stringSignature; - var sourceNumberSig = sourceIndexSigs.numericSignature; - - var comparable = true; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - if (targetStringSig) { - if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, true); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetStringSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; - } - } - - if (comparable && targetNumberSig) { - if (sourceNumberSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, false, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceNumberSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; - } - } - - if (!comparable) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.signatureGroupIsRelatableToTarget = function (source, target, sourceSG, targetSG, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (sourceSG === targetSG) { - return true; - } - - if (!(sourceSG.length && targetSG.length)) { - return false; - } - - var foundMatch = false; - - var targetExcludeDefinition = targetSG.length > 1; - var sourceExcludeDefinition = sourceSG.length > 1; - var sigsCompared = 0; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo, true); - comparisonInfoSignatuesTypeCheck.message = comparisonInfo.message; - } - for (var iMSig = 0; iMSig < targetSG.length; iMSig++) { - var mSig = targetSG[iMSig]; - - if (mSig.isStringConstantOverloadSignature() || (targetExcludeDefinition && mSig.isDefinition())) { - continue; - } - - for (var iNSig = 0; iNSig < sourceSG.length; iNSig++) { - var nSig = sourceSG[iNSig]; - - if (nSig.isStringConstantOverloadSignature() || (sourceExcludeDefinition && nSig.isDefinition())) { - continue; - } - - context.walkSignatures(nSig.kind, iNSig, iMSig); - var isSignatureRelatableToTarget = this.signatureIsRelatableToTarget(nSig, mSig, assignableTo, comparisonCache, ast, context, sigsCompared == 0 ? comparisonInfoSignatuesTypeCheck : null, isComparingInstantiatedSignatures); - context.postWalkSignatures(); - - sigsCompared++; - - if (isSignatureRelatableToTarget) { - foundMatch = true; - break; - } - } - - if (foundMatch) { - foundMatch = false; - continue; - } - - if (comparisonInfo && sigsCompared == 1) { - comparisonInfo.message = comparisonInfoSignatuesTypeCheck.message; - } - - return false; - } - - return true; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTarget = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourceSig, targetSig, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, true); - var isRelatable = this.signatureIsRelatableToTargetWorker(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTargetWorker = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceParameters = sourceSig.parameters; - var targetParameters = targetSig.parameters; - - if (!sourceParameters || !targetParameters) { - return false; - } - - var targetNonOptionalParamCount = targetSig.nonOptionalParamCount; - var sourceNonOptionalParamCount = sourceSig.nonOptionalParamCount; - - if (!targetSig.hasVarArgs && sourceNonOptionalParamCount > targetParameters.length) { - if (comparisonInfo) { - comparisonInfo.flags |= 3 /* SourceSignatureHasTooManyParameters */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signature_expects_0_or_fewer_parameters, [targetParameters.length])); - } - return false; - } - - if (this.signaturesAreIdentical(sourceSig, targetSig, context)) { - return true; - } - - if (targetSig.isGeneric()) { - targetSig = this.instantiateSignatureToAny(targetSig); - } - - if (sourceSig.isGeneric()) { - sourceSig = this.instantiateSignatureToAny(sourceSig); - } - - var sourceReturnType = sourceSig.returnType; - var targetReturnType = targetSig.returnType; - - if (targetReturnType !== this.semanticInfoChain.voidTypeSymbol) { - context.walkReturnTypes(); - var returnTypesAreRelatable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceReturnType, targetReturnType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.postWalkReturnTypes(); - if (!returnTypesAreRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 16 /* IncompatibleReturnTypes */; - } - - return false; - } - } - - return targetSig.forAllCorrespondingParameterTypesInThisAndOtherSignature(sourceSig, function (targetParamType, sourceParamType, iParam) { - context.walkParameterTypes(iParam); - var areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(sourceParamType, targetParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - if (!areParametersRelatable) { - context.swapEnclosingTypeWalkers(); - areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(targetParamType, sourceParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.swapEnclosingTypeWalkers(); - } - context.postWalkParameterTypes(); - - if (!areParametersRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 64 /* IncompatibleParameterTypes */; - } - } - - return areParametersRelatable; - }); - }; - - PullTypeResolver.prototype.resolveOverloads = function (application, group, haveTypeArgumentsAtCallSite, context, diagnostics) { - var _this = this; - var hasOverloads = group.length > 1; - var comparisonInfo = new TypeComparisonInfo(); - var args = application.argumentList ? application.argumentList.arguments : null; - - var initialCandidates = TypeScript.ArrayUtilities.where(group, function (signature) { - if (hasOverloads && signature.isDefinition()) { - return false; - } - - var rootSignature = signature.getRootSymbol(); - if (haveTypeArgumentsAtCallSite && !rootSignature.isGeneric()) { - return false; - } - - return _this.overloadHasCorrectArity(signature, args); - }); - - var firstAssignableButNotSupertypeSignature = null; - var firstAssignableWithProvisionalErrorsSignature = null; - - for (var i = 0; i < initialCandidates.length; i++) { - var applicability = this.overloadIsApplicable(initialCandidates[i], args, context, comparisonInfo); - if (applicability === 3 /* Subtype */) { - return initialCandidates[i]; - } else if (applicability === 2 /* AssignableWithNoProvisionalErrors */ && !firstAssignableButNotSupertypeSignature) { - firstAssignableButNotSupertypeSignature = initialCandidates[i]; - } else if (applicability === 1 /* AssignableButWithProvisionalErrors */ && !firstAssignableWithProvisionalErrorsSignature) { - firstAssignableWithProvisionalErrorsSignature = initialCandidates[i]; - } - } - - if (firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature) { - return firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature; - } else { - var target = this.getCallTargetErrorSpanAST(application); - if (comparisonInfo.message) { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0, [comparisonInfo.message])); - } else { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target, null)); - } - } - - return null; - }; - - PullTypeResolver.prototype.getCallTargetErrorSpanAST = function (callEx) { - return (callEx.expression.kind() === 212 /* MemberAccessExpression */) ? callEx.expression.name : callEx.expression; - }; - - PullTypeResolver.prototype.overloadHasCorrectArity = function (signature, args) { - if (args == null) { - return signature.nonOptionalParamCount === 0; - } - - var numberOfArgs = (args.nonSeparatorCount() && args.nonSeparatorCount() === args.separatorCount()) ? args.separatorCount() + 1 : args.nonSeparatorCount(); - if (numberOfArgs < signature.nonOptionalParamCount) { - return false; - } - if (!signature.hasVarArgs && numberOfArgs > signature.parameters.length) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.overloadIsApplicable = function (signature, args, context, comparisonInfo) { - if (args === null) { - return 3 /* Subtype */; - } - - var isInVarArg = false; - var parameters = signature.parameters; - var paramType = null; - - var overloadApplicability = 3 /* Subtype */; - - for (var i = 0; i < args.nonSeparatorCount(); i++) { - if (!isInVarArg) { - this.resolveDeclaredSymbol(parameters[i], context); - - if (parameters[i].isVarArg) { - paramType = parameters[i].type.getElementType() || this.getNewErrorTypeSymbol(parameters[i].type.getName()); - isInVarArg = true; - } else { - paramType = parameters[i].type; - } - } - - var statusOfCurrentArgument = this.overloadIsApplicableForArgument(paramType, args.nonSeparatorAt(i), i, context, comparisonInfo); - - if (statusOfCurrentArgument === 0 /* NotAssignable */) { - return 0 /* NotAssignable */; - } else if (statusOfCurrentArgument === 1 /* AssignableButWithProvisionalErrors */) { - overloadApplicability = 1 /* AssignableButWithProvisionalErrors */; - } else if (overloadApplicability !== 1 /* AssignableButWithProvisionalErrors */ && statusOfCurrentArgument === 2 /* AssignableWithNoProvisionalErrors */) { - overloadApplicability = 2 /* AssignableWithNoProvisionalErrors */; - } - } - - return overloadApplicability; - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType.isAny()) { - return 3 /* Subtype */; - } else if (paramType.isError()) { - return 1 /* AssignableButWithProvisionalErrors */; - } else if (arg.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, null, TypeScript.ASTHelpers.parametersFromIdentifier(simpleArrowFunction.identifier), null, simpleArrowFunction.block, simpleArrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 222 /* FunctionExpression */) { - var functionExpression = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, functionExpression.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(functionExpression.callSignature.parameterList), TypeScript.ASTHelpers.getType(functionExpression), functionExpression.block, null, argIndex, context, comparisonInfo); - } else if (arg.kind() === 215 /* ObjectLiteralExpression */) { - return this.overloadIsApplicableForObjectLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else if (arg.kind() === 214 /* ArrayLiteralExpression */) { - return this.overloadIsApplicableForArrayLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else { - return this.overloadIsApplicableForOtherArgument(paramType, arg, argIndex, context, comparisonInfo); - } - }; - - PullTypeResolver.prototype.overloadIsApplicableForAnyFunctionExpressionArgument = function (paramType, arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, argIndex, context, comparisonInfo) { - if (this.cachedFunctionInterfaceType() && paramType === this.cachedFunctionInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - - var argSym = this.resolveAnyFunctionExpression(arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForObjectLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (this.cachedObjectInterfaceType() && paramType === this.cachedObjectInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveObjectLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForArrayLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType === this.cachedArrayInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveArrayLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForOtherArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - var argSym = this.resolveAST(arg, false, context); - - if (argSym.type.isAlias()) { - var aliasSym = argSym.type; - argSym = aliasSym.getExportAssignedTypeSymbol(); - } - - comparisonInfo.stringConstantVal = arg; - return this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgumentHelper = function (paramType, argSym, argumentIndex, comparisonInfo, arg, context) { - var tempComparisonInfo = new TypeComparisonInfo(); - tempComparisonInfo.stringConstantVal = comparisonInfo.stringConstantVal; - if (!context.hasProvisionalErrors() && this.sourceIsSubtypeOfTarget(argSym.type, paramType, arg, context, tempComparisonInfo)) { - return 3 /* Subtype */; - } - - if (this.sourceIsAssignableToTarget(argSym.type, paramType, arg, context, comparisonInfo.message ? tempComparisonInfo : comparisonInfo)) { - return context.hasProvisionalErrors() ? 1 /* AssignableButWithProvisionalErrors */ : 2 /* AssignableWithNoProvisionalErrors */; - } - - if (!comparisonInfo.message) { - var enclosingSymbol = this.getEnclosingSymbolForAST(arg); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_apply_type_0_to_argument_1_which_is_of_type_2, [paramType.toString(enclosingSymbol), (argumentIndex + 1), argSym.getTypeName(enclosingSymbol)])); - } - - return 0 /* NotAssignable */; - }; - - PullTypeResolver.prototype.inferArgumentTypesForSignature = function (argContext, comparisonInfo, context) { - var inferenceResultTypes = argContext.inferTypeArguments(); - var typeParameters = argContext.signatureBeingInferred.getTypeParameters(); - TypeScript.Debug.assert(typeParameters.length == inferenceResultTypes.length); - - var typeReplacementMapForConstraints = null; - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (typeParameters[i].getConstraint()) { - typeReplacementMapForConstraints = typeReplacementMapForConstraints || TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, inferenceResultTypes); - var associatedConstraint = this.instantiateType(typeParameters[i].getConstraint(), typeReplacementMapForConstraints); - if (!this.sourceIsAssignableToTargetWithNewEnclosingTypes(inferenceResultTypes[i], associatedConstraint, null, context, null, false)) { - inferenceResultTypes[i] = associatedConstraint; - } - } - } - - if (argContext.isInvocationInferenceContext()) { - var invocationContext = argContext; - if (!this.typeParametersAreInScopeAtArgumentList(typeParameters, invocationContext.argumentASTs)) { - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (inferenceResultTypes[i].wrapsSomeTypeParameter(argContext.candidateCache)) { - inferenceResultTypes[i] = this.semanticInfoChain.anyTypeSymbol; - } - } - } - } - - return inferenceResultTypes; - }; - - PullTypeResolver.prototype.typeParametersAreInScopeAtArgumentList = function (typeParameters, args) { - var enclosingDecl = this.getEnclosingDeclForAST(args); - var typeParameterParentDecl = typeParameters[0].getDeclarations()[0].getParentDecl(); - return enclosingDecl.getParentPath().indexOf(typeParameterParentDecl) > -1; - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersInEnclosingType = function (expressionType, parameterType, argContext, context) { - if (expressionType && parameterType) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - this.relateInifinitelyExpandingTypeToTypeParameters(expressionType, parameterType, argContext, context); - return; - } - } - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersWithNewEnclosingTypes = function (expressionType, parameterType, argContext, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - }; - - PullTypeResolver.prototype.relateTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - if (expressionType.isError()) { - expressionType = this.semanticInfoChain.anyTypeSymbol; - } - - if (parameterType.isTypeParameter()) { - var typeParameter = parameterType; - argContext.addCandidateForInference(typeParameter, expressionType); - return; - } - - if (parameterType.isNamedTypeSymbol() && !parameterType.isGeneric() && !parameterType.getTypeArguments()) { - return; - } - - if (TypeScript.PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType(expressionType, parameterType)) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - } else { - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(expressionType, parameterType); - this.relateObjectTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - } - }; - - PullTypeResolver.prototype.relateTypeArgumentsOfTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - var parameterSideTypeArguments = parameterType.getTypeArguments(); - var argumentSideTypeArguments = expressionType.getTypeArguments(); - - TypeScript.Debug.assert(parameterSideTypeArguments && argumentSideTypeArguments && parameterSideTypeArguments.length === argumentSideTypeArguments.length); - for (var i = 0; i < parameterSideTypeArguments.length; i++) { - this.relateTypeToTypeParametersWithNewEnclosingTypes(argumentSideTypeArguments[i], parameterSideTypeArguments[i], argContext, context); - } - }; - - PullTypeResolver.prototype.relateInifinitelyExpandingTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - var expressionTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(expressionType); - var parameterTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(parameterType); - if (expressionTypeNamedTypeReference !== parameterTypeNamedTypeReference) { - return; - } - - var expressionTypeTypeArguments = expressionType.getTypeArguments(); - var parameterTypeArguments = parameterType.getTypeArguments(); - - if (expressionTypeTypeArguments && parameterTypeArguments && expressionTypeTypeArguments.length === parameterTypeArguments.length) { - for (var i = 0; i < expressionTypeTypeArguments.length; i++) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - } - } - }; - - PullTypeResolver.prototype.relateFunctionSignatureToTypeParameters = function (expressionSignature, parameterSignature, argContext, context) { - var _this = this; - var expressionReturnType = expressionSignature.returnType; - var parameterReturnType = parameterSignature.returnType; - - parameterSignature.forAllCorrespondingParameterTypesInThisAndOtherSignature(expressionSignature, function (parameterSignatureParameterType, expressionSignatureParameterType, i) { - context.walkParameterTypes(i); - _this.relateTypeToTypeParametersInEnclosingType(expressionSignatureParameterType, parameterSignatureParameterType, argContext, context); - context.postWalkParameterTypes(); - return true; - }); - - context.walkReturnTypes(); - this.relateTypeToTypeParametersInEnclosingType(expressionReturnType, parameterReturnType, argContext, context); - context.postWalkReturnTypes(); - }; - - PullTypeResolver.prototype.relateObjectTypeToTypeParameters = function (objectType, parameterType, argContext, context) { - var parameterTypeMembers = parameterType.getMembers(); - var parameterSignatures; - - var objectMember; - var objectSignatures; - - if (argContext.alreadyRelatingTypes(objectType, parameterType)) { - return; - } - - for (var i = 0; i < parameterTypeMembers.length; i++) { - objectMember = this.getNamedPropertySymbol(parameterTypeMembers[i].name, 68147712 /* SomeValue */, objectType); - if (objectMember) { - this.resolveDeclaredSymbol(objectMember); - this.resolveDeclaredSymbol(parameterTypeMembers[i]); - context.walkMemberTypes(parameterTypeMembers[i].name); - this.relateTypeToTypeParametersInEnclosingType(objectMember.type, parameterTypeMembers[i].type, argContext, context); - context.postWalkMemberTypes(); - } - } - - this.relateSignatureGroupToTypeParameters(objectType.getCallSignatures(), parameterType.getCallSignatures(), 1048576 /* CallSignature */, argContext, context); - - this.relateSignatureGroupToTypeParameters(objectType.getConstructSignatures(), parameterType.getConstructSignatures(), 2097152 /* ConstructSignature */, argContext, context); - - var parameterIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parameterType, context); - var objectIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(objectType, context); - var indexSigInfo = context.getBothKindOfIndexSignatures(false, false); - - if (parameterIndexSignatures.stringSignature && objectIndexSignatures.stringSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, true, true, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.stringSignature, parameterIndexSignatures.stringSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - if (parameterIndexSignatures.numericSignature && objectIndexSignatures.numericSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, false, false, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.numericSignature, parameterIndexSignatures.numericSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - }; - - PullTypeResolver.prototype.relateSignatureGroupToTypeParameters = function (argumentSignatures, parameterSignatures, signatureKind, argContext, context) { - for (var i = 0; i < parameterSignatures.length; i++) { - var paramSignature = parameterSignatures[i]; - if (argumentSignatures.length > 0 && paramSignature.isGeneric()) { - paramSignature = this.instantiateSignatureToAny(paramSignature); - } - for (var j = 0; j < argumentSignatures.length; j++) { - var argumentSignature = argumentSignatures[j]; - if (argumentSignature.nonOptionalParamCount > paramSignature.nonOptionalParamCount) { - continue; - } - - if (argumentSignature.isGeneric()) { - argumentSignature = this.instantiateSignatureToAny(argumentSignature); - } - - context.walkSignatures(signatureKind, j, i); - this.relateFunctionSignatureToTypeParameters(argumentSignature, paramSignature, argContext, context); - context.postWalkSignatures(); - } - } - }; - - PullTypeResolver.prototype.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference = function (expressionSymbol, context) { - var inferentialType = context.getContextualType(); - TypeScript.Debug.assert(inferentialType); - var expressionType = expressionSymbol.type; - if (this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(expressionType, true) && this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(inferentialType, false)) { - var genericExpressionSignature = expressionType.getCallSignatures()[0]; - var contextualSignature = inferentialType.getCallSignatures()[0]; - - var instantiatedSignature = this.instantiateSignatureInContext(genericExpressionSignature, contextualSignature, context, true); - if (instantiatedSignature === null) { - return expressionSymbol; - } - - var newType = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - newType.appendCallSignature(instantiatedSignature); - return newType; - } - - return expressionSymbol; - }; - - PullTypeResolver.prototype.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers = function (type, callSignatureShouldBeGeneric) { - TypeScript.Debug.assert(type); - if (type.getCallSignatures().length !== 1) { - return false; - } - - var callSignatureIsGeneric = type.getCallSignatures()[0].isGeneric(); - if (callSignatureIsGeneric !== callSignatureShouldBeGeneric) { - return false; - } - - var typeHasOtherMembers = type.getConstructSignatures().length || type.getIndexSignatures().length || type.getAllMembers(68147712 /* SomeValue */, 0 /* all */).length; - if (typeHasOtherMembers) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.instantiateTypeToAny = function (typeToSpecialize, context) { - var typeParameters = typeToSpecialize.getTypeParameters(); - - if (!typeParameters.length) { - return typeToSpecialize; - } - - var typeArguments = null; - - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; - } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; - } - } - - var type = this.createInstantiatedType(typeToSpecialize, typeArguments); - - return type; - }; - - PullTypeResolver.prototype.instantiateSignatureToAny = function (signature) { - var typeParameters = signature.getTypeParameters(); - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; - } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - var typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; - } - } - - var typeParameterArgumentMap = TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, typeArguments); - return this.instantiateSignature(signature, typeParameterArgumentMap); - }; - - PullTypeResolver.typeCheck = function (compilationSettings, semanticInfoChain, document) { - var sourceUnit = document.sourceUnit(); - - var resolver = semanticInfoChain.getResolver(); - var context = new TypeScript.PullTypeResolutionContext(resolver, true, sourceUnit.fileName()); - - if (resolver.canTypeCheckAST(sourceUnit, context)) { - resolver.resolveAST(sourceUnit, false, context); - resolver.validateVariableDeclarationGroups(semanticInfoChain.getDeclForAST(sourceUnit), context); - - while (resolver.typeCheckCallBacks.length) { - var callBack = resolver.typeCheckCallBacks.pop(); - callBack(context); - } - - resolver.processPostTypeCheckWorkItems(context); - } - }; - - PullTypeResolver.prototype.validateVariableDeclarationGroups = function (enclosingDecl, context) { - var _this = this; - this.scanVariableDeclarationGroups(enclosingDecl, function (_) { - }, function (subsequentDecl, firstSymbol) { - if (TypeScript.hasFlag(subsequentDecl.kind, 2048 /* Parameter */) || TypeScript.hasFlag(subsequentDecl.flags, 8388608 /* PropertyParameter */)) { - return; - } - - var boundDeclAST = _this.semanticInfoChain.getASTForDecl(subsequentDecl); - - var symbol = subsequentDecl.getSymbol(); - var symbolType = symbol.type; - var firstSymbolType = firstSymbol.type; - - if (symbolType && firstSymbolType && symbolType !== firstSymbolType && !_this.typesAreIdentical(symbolType, firstSymbolType, context)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(boundDeclAST, TypeScript.DiagnosticCode.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, [symbol.getScopedName(), firstSymbolType.toString(firstSymbol), symbolType.toString(symbol)])); - } - }); - }; - - PullTypeResolver.prototype.typeCheckFunctionOverloads = function (funcDecl, context, signature, allSignatures) { - if (!signature) { - var functionSignatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.semanticInfoChain.getDeclForAST(funcDecl)); - signature = functionSignatureInfo.signature; - allSignatures = functionSignatureInfo.allSignatures; - } - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDeclaration.getSymbol(); - - var definitionSignature = null; - for (var i = allSignatures.length - 1; i >= 0; i--) { - if (allSignatures[i].isDefinition()) { - definitionSignature = allSignatures[i]; - break; - } - } - - if (!signature.isDefinition()) { - var signatureParentDecl = signature.getDeclarations()[0].getParentDecl(); - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i] === signature) { - break; - } - - var allSignaturesParentDecl = allSignatures[i].getDeclarations()[0].getParentDecl(); - if (allSignaturesParentDecl !== signatureParentDecl) { - continue; - } - - if (this.signaturesAreIdenticalWithNewEnclosingTypes(allSignatures[i], signature, context, false)) { - if (!this.signatureReturnTypesAreIdentical(allSignatures[i], signature, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overloads_cannot_differ_only_by_return_type)); - } else if (funcDecl.kind() === 137 /* ConstructorDeclaration */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_constructor_overload_signature)); - } else if (functionDeclaration.kind === 2097152 /* ConstructSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_construct_signature)); - } else if (functionDeclaration.kind === 1048576 /* CallSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_call_signature)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_signature_for_0, [funcSymbol.getScopedNameEx().toString()])); - } - - break; - } - } - } - - var isConstantOverloadSignature = signature.isStringConstantOverloadSignature(); - if (isConstantOverloadSignature) { - if (signature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_implementation_cannot_use_specialized_type)); - } else { - var foundSubtypeSignature = false; - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i].isDefinition() || allSignatures[i] === signature) { - continue; - } - - if (!allSignatures[i].isResolved) { - this.resolveDeclaredSymbol(allSignatures[i], context); - } - - if (allSignatures[i].isStringConstantOverloadSignature()) { - continue; - } - - if (this.signatureIsAssignableToTarget(signature, allSignatures[i], null, context)) { - foundSubtypeSignature = true; - break; - } - } - - if (!foundSubtypeSignature) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature)); - } - } - } else if (definitionSignature && definitionSignature !== signature) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!definitionSignature.isResolved) { - this.resolveDeclaredSymbol(definitionSignature, context); - } - - if (!this.signatureIsAssignableToTarget(definitionSignature, signature, funcDecl, context, comparisonInfo)) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition_NL_0, [comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition)); - } - } - } - - var signatureForVisibilityCheck = definitionSignature; - if (!definitionSignature) { - if (allSignatures[0] === signature) { - return; - } - signatureForVisibilityCheck = allSignatures[0]; - } - - if (funcDecl.kind() !== 137 /* ConstructorDeclaration */ && functionDeclaration.kind !== 2097152 /* ConstructSignature */ && signatureForVisibilityCheck && signature !== signatureForVisibilityCheck) { - var errorCode; - - if (signatureForVisibilityCheck.anyDeclHasFlag(2 /* Private */) !== signature.anyDeclHasFlag(2 /* Private */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_public_or_private; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(1 /* Exported */) !== signature.anyDeclHasFlag(1 /* Exported */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_exported_or_not_exported; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(8 /* Ambient */) !== signature.anyDeclHasFlag(8 /* Ambient */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_ambient_or_non_ambient; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(128 /* Optional */) !== signature.anyDeclHasFlag(128 /* Optional */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_optional_or_required; - } - - if (errorCode) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, errorCode)); - } - } - }; - - PullTypeResolver.prototype.checkSymbolPrivacy = function (declSymbol, symbol, privacyErrorReporter) { - if (!symbol || symbol.kind === 2 /* Primitive */) { - return; - } - - if (symbol.isType()) { - var typeSymbol = symbol; - var isNamedType = typeSymbol.isNamedTypeSymbol(); - - if (typeSymbol.isArrayNamedTypeReference()) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getElementType(), privacyErrorReporter); - return; - } - - if (!isNamedType) { - var typeOfSymbol = typeSymbol.getTypeOfSymbol(); - if (typeOfSymbol) { - this.checkSymbolPrivacy(declSymbol, typeOfSymbol, privacyErrorReporter); - return; - } - } - - if (typeSymbol.inSymbolPrivacyCheck) { - return; - } - - typeSymbol.inSymbolPrivacyCheck = true; - - var typars = typeSymbol.getTypeArgumentsOrTypeParameters(); - if (typars) { - for (var i = 0; i < typars.length; i++) { - this.checkSymbolPrivacy(declSymbol, typars[i], privacyErrorReporter); - } - } - - if (!isNamedType) { - var members = typeSymbol.getMembers(); - for (var i = 0; i < members.length; i++) { - this.checkSymbolPrivacy(declSymbol, members[i].type, privacyErrorReporter); - } - - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getCallSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getConstructSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getIndexSignatures(), privacyErrorReporter); - } else if (typeSymbol.kind === 8192 /* TypeParameter */) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getConstraint(), privacyErrorReporter); - } - - typeSymbol.inSymbolPrivacyCheck = false; - - if (!isNamedType) { - return; - } - } - - if (declSymbol.isExternallyVisible()) { - var symbolIsVisible = symbol.isExternallyVisible(); - - if (symbolIsVisible && symbol.kind !== 8192 /* TypeParameter */) { - var symbolPath = symbol.pathToRoot(); - var declSymbolPath = declSymbol.pathToRoot(); - - if (symbolPath[symbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1] !== symbolPath[symbolPath.length - 1]) { - symbolIsVisible = false; - var declSymbolScope = declSymbolPath[declSymbolPath.length - 1]; - for (var i = symbolPath.length - 1; i >= 0; i--) { - var aliasSymbols = symbolPath[i].getExternalAliasedSymbols(declSymbolScope); - if (aliasSymbols) { - symbolIsVisible = true; - aliasSymbols[0].setTypeUsedExternally(); - break; - } - } - symbol = symbolPath[symbolPath.length - 1]; - } - } else if (symbol.kind === 128 /* TypeAlias */) { - var aliasSymbol = symbol; - symbolIsVisible = true; - aliasSymbol.setTypeUsedExternally(); - } - - if (!symbolIsVisible) { - privacyErrorReporter(symbol); - } - } - }; - - PullTypeResolver.prototype.checkTypePrivacyOfSignatures = function (declSymbol, signatures, privacyErrorReporter) { - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (signatures.length > 1 && signature.isDefinition()) { - continue; - } - - var typeParams = signature.getTypeParameters(); - for (var j = 0; j < typeParams.length; j++) { - this.checkSymbolPrivacy(declSymbol, typeParams[j], privacyErrorReporter); - } - - var params = signature.parameters; - for (var j = 0; j < params.length; j++) { - var paramType = params[j].type; - this.checkSymbolPrivacy(declSymbol, paramType, privacyErrorReporter); - } - - var returnType = signature.returnType; - this.checkSymbolPrivacy(declSymbol, returnType, privacyErrorReporter); - } - }; - - PullTypeResolver.prototype.typeParameterOfTypeDeclarationPrivacyErrorReporter = function (classOrInterface, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeParameters = classOrInterface.kind() === 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1; - } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1; - } - } - - var messageArguments = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.baseListPrivacyErrorReporter = function (classOrInterface, declSymbol, baseAst, isExtendedType, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_class_from_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_interface_from_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_interface_from_inaccessible_module_1; - } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_private_class_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_private_interface_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_private_interface_1; - } - } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseAst, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.variablePrivacyErrorReporter = function (declAST, declSymbol, symbol, context) { - var typeSymbol = symbol; - var enclosingDecl = this.getEnclosingDecl(declSymbol.getDeclarations()[0]); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isProperty = declSymbol.kind === 4096 /* Property */; - var isPropertyOfClass = false; - var declParent = declSymbol.getContainer(); - if (declParent && (declParent.kind === 8 /* Class */ || declParent.kind === 32768 /* ConstructorMethod */)) { - isPropertyOfClass = true; - } - - var messageCode; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_is_using_inaccessible_module_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_is_using_inaccessible_module_1; - } - } else { - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_has_or_is_using_private_type_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_has_or_is_using_private_type_1; - } - } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.checkFunctionTypePrivacy = function (funcDeclAST, isStatic, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - if (funcDeclAST.kind() === 222 /* FunctionExpression */ || funcDeclAST.kind() === 241 /* FunctionPropertyAssignment */ || (funcDeclAST.kind() === 139 /* GetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (funcDeclAST.kind() === 140 /* SetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { - return; - } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - ; - var functionSignature; - - var isGetter = funcDeclAST.kind() === 139 /* GetAccessor */; - var isSetter = funcDeclAST.kind() === 140 /* SetAccessor */; - var isIndexSignature = functionDecl.kind === 4194304 /* IndexSignature */; - - if (isGetter || isSetter) { - var accessorSymbol = functionSymbol; - functionSignature = (isGetter ? accessorSymbol.getGetter() : accessorSymbol.getSetter()).type.getCallSignatures()[0]; - } else { - if (!functionSymbol) { - var parentDecl = functionDecl.getParentDecl(); - functionSymbol = parentDecl.getSymbol(); - if (functionSymbol && functionSymbol.isType() && !functionSymbol.isNamedTypeSymbol()) { - return; - } - } else if (functionSymbol.kind === 65536 /* Method */ && !isStatic && !functionSymbol.getContainer().isNamedTypeSymbol()) { - return; - } - functionSignature = functionDecl.getSignatureSymbol(); - } - - if (typeParameters && !isGetter && !isSetter && !isIndexSignature && funcDeclAST.kind() !== 137 /* ConstructorDeclaration */) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParameters.typeParameters.nonSeparatorAt(i); - var typeParameter = this.resolveTypeParameterDeclaration(typeParameterAST, context); - this.checkSymbolPrivacy(functionSymbol, typeParameter, function (symbol) { - return _this.functionTypeArgumentArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, typeParameterAST, typeParameter, symbol, context); - }); - } - } - - if (!isGetter && !isIndexSignature) { - var funcParams = functionSignature.parameters; - for (var i = 0; i < funcParams.length; i++) { - this.checkSymbolPrivacy(functionSymbol, funcParams[i].type, function (symbol) { - return _this.functionArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, parameters, i, funcParams[i], symbol, context); - }); - } - } - - if (!isSetter) { - this.checkSymbolPrivacy(functionSymbol, functionSignature.returnType, function (symbol) { - return _this.functionReturnTypePrivacyErrorReporter(funcDeclAST, isStatic, returnTypeAnnotation, block, functionSignature.returnType, symbol, context); - }); - } - }; - - PullTypeResolver.prototype.functionTypeArgumentArgumentTypePrivacyErrorReporter = function (declAST, isStatic, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_has_or_is_using_private_type_1; - } - } - - if (messageCode) { - var messageArgs = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArgs)); - } - }; - - PullTypeResolver.prototype.functionArgumentTypePrivacyErrorReporter = function (declAST, isStatic, parameters, argIndex, paramSymbol, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else if (!isGetter) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else if (!isGetter && decl.kind !== 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_has_or_is_using_private_type_1; - } - } - - if (messageCode) { - var parameter = parameters.astAt(argIndex); - - var messageArgs = [paramSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(parameter, messageCode, messageArgs)); - } - }; - - PullTypeResolver.prototype.functionReturnTypePrivacyErrorReporter = function (declAST, isStatic, returnTypeAnnotation, block, funcReturnType, symbol, context) { - var _this = this; - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var messageCode = null; - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_is_using_inaccessible_module_0; - } - } else { - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_has_or_is_using_private_type_0; - } - } - - if (messageCode) { - var messageArguments = [typeSymbolName]; - var reportOnFuncDecl = false; - - if (returnTypeAnnotation) { - var returnExpressionSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, messageCode, messageArguments)); - } - } - - if (block) { - var reportErrorOnReturnExpressions = function (ast, walker) { - var go = true; - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - var returnExpressionSymbol = _this.resolveAST(returnStatement.expression, false, context).type; - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(returnStatement, messageCode, messageArguments)); - } else { - reportOnFuncDecl = true; - } - go = false; - break; - - default: - break; - } - - walker.options.goChildren = go; - return ast; - }; - - TypeScript.getAstWalkerFactory().walk(block, reportErrorOnReturnExpressions); - } - - if (reportOnFuncDecl) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - } - } - }; - - PullTypeResolver.prototype.enclosingClassIsDerived = function (classDecl) { - TypeScript.Debug.assert(classDecl.kind === 8 /* Class */); - - var classSymbol = classDecl.getSymbol(); - return classSymbol.getExtendedTypes().length > 0; - }; - - PullTypeResolver.prototype.isSuperInvocationExpression = function (ast) { - if (ast.kind() === 213 /* InvocationExpression */) { - var invocationExpression = ast; - if (invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.isSuperInvocationExpressionStatement = function (node) { - if (node && node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - if (this.isSuperInvocationExpression(expressionStatement.expression)) { - return true; - } - } - return false; - }; - - PullTypeResolver.prototype.getFirstStatementOfBlockOrNull = function (block) { - if (block && block.statements && block.statements.childCount() > 0) { - return block.statements.childAt(0); - } - - return null; - }; - - PullTypeResolver.prototype.superCallMustBeFirstStatementInConstructor = function (constructorDecl) { - TypeScript.Debug.assert(constructorDecl.kind === 32768 /* ConstructorMethod */); - - if (constructorDecl) { - var enclosingClass = constructorDecl.getParentDecl(); - - var classSymbol = enclosingClass.getSymbol(); - if (classSymbol.getExtendedTypes().length === 0) { - return false; - } - - var classMembers = classSymbol.getMembers(); - for (var i = 0, n1 = classMembers.length; i < n1; i++) { - var member = classMembers[i]; - - if (member.kind === 4096 /* Property */) { - var declarations = member.getDeclarations(); - for (var j = 0, n2 = declarations.length; j < n2; j++) { - var declaration = declarations[j]; - var ast = this.semanticInfoChain.getASTForDecl(declaration); - if (ast.kind() === 242 /* Parameter */) { - return true; - } - - if (ast.kind() === 136 /* MemberVariableDeclaration */) { - var variableDeclarator = ast; - if (variableDeclarator.variableDeclarator.equalsValueClause) { - return true; - } - } - } - } - } - } - - return false; - }; - - PullTypeResolver.prototype.checkForThisCaptureInArrowFunction = function (expression) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var inArrowFunction = false; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - inArrowFunction = true; - continue; - } - - if (inArrowFunction) { - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - decl.setFlags(decl.flags | 262144 /* MustCaptureThis */); - - if (declKind === 8 /* Class */) { - var constructorSymbol = decl.getSymbol().getConstructorMethod(); - var constructorDecls = constructorSymbol.getDeclarations(); - for (var i = 0; i < constructorDecls.length; i++) { - constructorDecls[i].flags = constructorDecls[i].flags | 262144 /* MustCaptureThis */; - } - } - break; - } - } else if (declKind === 16384 /* Function */ || declKind === 131072 /* FunctionExpression */) { - break; - } - } - } - }; - - PullTypeResolver.prototype.typeCheckMembersAgainstIndexer = function (containerType, containerTypeDecl, context) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(containerType, context); - var stringSignature = indexSignatures.stringSignature; - var numberSignature = indexSignatures.numericSignature; - - if (stringSignature || numberSignature) { - var members = containerTypeDecl.getChildDecls(); - for (var i = 0; i < members.length; i++) { - var member = members[i]; - if ((member.name || (member.kind === 4096 /* Property */ && member.name === "")) && member.kind !== 32768 /* ConstructorMethod */ && !TypeScript.hasFlag(member.flags, 16 /* Static */)) { - var memberSymbol = member.getSymbol(); - var relevantSignature = this.determineRelevantIndexerForMember(memberSymbol, numberSignature, stringSignature); - if (relevantSignature) { - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(memberSymbol.type, relevantSignature.returnType, member.ast(), context, comparisonInfo)) { - this.reportErrorThatMemberIsNotSubtypeOfIndexer(memberSymbol, relevantSignature, member.ast(), context, comparisonInfo); - } - } - } - } - } - }; - - PullTypeResolver.prototype.determineRelevantIndexerForMember = function (member, numberIndexSignature, stringIndexSignature) { - if (numberIndexSignature && TypeScript.PullHelpers.isNameNumeric(member.name)) { - return numberIndexSignature; - } else if (stringIndexSignature) { - return stringIndexSignature; - } - - return null; - }; - - PullTypeResolver.prototype.reportErrorThatMemberIsNotSubtypeOfIndexer = function (member, indexSignature, astForError, context, comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(astForError); - if (indexSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); - } - } else { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.typeCheckIfTypeMemberPropertyOkToOverride = function (typeSymbol, extendedType, typeMember, extendedTypeMember, enclosingDecl, comparisonInfo) { - if (!typeSymbol.isClass()) { - return true; - } - - var typeMemberKind = typeMember.kind; - var extendedMemberKind = extendedTypeMember.kind; - - if (typeMemberKind === extendedMemberKind) { - return true; - } - - var errorCode; - if (typeMemberKind === 4096 /* Property */) { - if (typeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; - } - } else if (typeMemberKind === 65536 /* Method */) { - if (extendedTypeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; - } - } - - var message = TypeScript.getDiagnosticMessage(errorCode, [typeSymbol.toString(), typeMember.getScopedNameEx().toString(), extendedType.toString()]); - comparisonInfo.addMessage(message); - return false; - }; - - PullTypeResolver.prototype.typeCheckIfTypeExtendsType = function (classOrInterface, name, typeSymbol, extendedType, enclosingDecl, context) { - var typeMembers = typeSymbol.getMembers(); - - var comparisonInfo = new TypeComparisonInfo(); - var foundError = false; - var foundError1 = false; - var foundError2 = false; - - for (var i = 0; i < typeMembers.length; i++) { - var propName = typeMembers[i].name; - var extendedTypeProp = extendedType.findMember(propName, true); - if (extendedTypeProp) { - this.resolveDeclaredSymbol(extendedTypeProp, context); - foundError1 = !this.typeCheckIfTypeMemberPropertyOkToOverride(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, enclosingDecl, comparisonInfo); - - if (!foundError1) { - foundError2 = !this.sourcePropertyIsAssignableToTargetProperty(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, classOrInterface, context, comparisonInfo); - } - - if (foundError1 || foundError2) { - foundError = true; - break; - } - } - } - - if (!foundError && typeSymbol.hasOwnCallSignatures()) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.hasOwnConstructSignatures()) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.hasOwnIndexSignatures()) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.isClass()) { - var typeConstructorType = typeSymbol.getConstructorMethod().type; - var typeConstructorTypeMembers = typeConstructorType.getMembers(); - if (typeConstructorTypeMembers.length) { - var extendedConstructorType = extendedType.getConstructorMethod().type; - var comparisonInfoForPropTypeCheck = new TypeComparisonInfo(comparisonInfo); - - for (var i = 0; i < typeConstructorTypeMembers.length; i++) { - var propName = typeConstructorTypeMembers[i].name; - var extendedConstructorTypeProp = extendedConstructorType.findMember(propName, true); - if (extendedConstructorTypeProp) { - if (!extendedConstructorTypeProp.isResolved) { - this.resolveDeclaredSymbol(extendedConstructorTypeProp, context); - } - - if (!this.sourcePropertyIsAssignableToTargetProperty(typeConstructorType, extendedConstructorType, typeConstructorTypeMembers[i], extendedConstructorTypeProp, classOrInterface, context, comparisonInfo)) { - foundError = true; - break; - } - } - } - } - } - - if (foundError) { - var errorCode; - if (typeSymbol.isClass()) { - errorCode = TypeScript.DiagnosticCode.Class_0_cannot_extend_class_1_NL_2; - } else { - if (extendedType.isClass()) { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_class_1_NL_2; - } else { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_interface_1_NL_2; - } - } - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, errorCode, [typeSymbol.getScopedName(), extendedType.getScopedName(), comparisonInfo.message])); - } - }; - - PullTypeResolver.prototype.typeCheckIfClassImplementsType = function (classDecl, classSymbol, implementedType, enclosingDecl, context) { - var comparisonInfo = new TypeComparisonInfo(); - var foundError = !this.sourceMembersAreAssignableToTargetMembers(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - } - } - } - - if (foundError) { - var enclosingSymbol = this.getEnclosingSymbolForAST(classDecl); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(classDecl.identifier, TypeScript.DiagnosticCode.Class_0_declares_interface_1_but_does_not_implement_it_NL_2, [classSymbol.getScopedName(enclosingSymbol), implementedType.getScopedName(enclosingSymbol), comparisonInfo.message])); - } - }; - - PullTypeResolver.prototype.computeValueSymbolFromAST = function (valueDeclAST, context) { - var prevInTypeCheck = context.inTypeCheck; - context.inTypeCheck = false; - - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - if (valueDeclAST.kind() == 11 /* IdentifierName */) { - var valueSymbol = this.computeNameExpression(valueDeclAST, context); - } else { - TypeScript.Debug.assert(valueDeclAST.kind() == 121 /* QualifiedName */); - var qualifiedName = valueDeclAST; - - var lhs = this.computeValueSymbolFromAST(qualifiedName.left, context); - var valueSymbol = this.computeDottedNameExpressionFromLHS(lhs.symbol, qualifiedName.left, qualifiedName.right, context, false); - } - var valueSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - this.semanticInfoChain.setAliasSymbolForAST(valueDeclAST, typeSymbolAlias); - context.inTypeCheck = prevInTypeCheck; - - return { symbol: valueSymbol, alias: valueSymbolAlias }; - }; - - PullTypeResolver.prototype.hasClassTypeSymbolConflictAsValue = function (baseDeclAST, typeSymbol, enclosingDecl, context) { - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(baseDeclAST); - - var valueDeclAST = baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST; - var valueSymbolInfo = this.computeValueSymbolFromAST(valueDeclAST, context); - var valueSymbol = valueSymbolInfo.symbol; - var valueSymbolAlias = valueSymbolInfo.alias; - - if (typeSymbolAlias && valueSymbolAlias) { - return typeSymbolAlias !== valueSymbolAlias; - } - - if (!valueSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */)) { - return true; - } - - var associatedContainerType = valueSymbol.type ? valueSymbol.type.getAssociatedContainerType() : null; - - if (associatedContainerType) { - return associatedContainerType !== typeSymbol.getRootSymbol(); - } - - return true; - }; - - PullTypeResolver.prototype.typeCheckBase = function (classOrInterface, name, typeSymbol, baseDeclAST, isExtendedType, enclosingDecl, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - - var baseType = this.resolveTypeReference(baseDeclAST, context).type; - - if (!baseType) { - return; - } - - var typeDeclIsClass = typeSymbol.isClass(); - - if (!typeSymbol.isValidBaseKind(baseType, isExtendedType)) { - if (!baseType.isError()) { - if (isExtendedType) { - if (typeDeclIsClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_extend_another_class)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.An_interface_may_only_extend_another_class_or_interface)); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_implement_another_class_or_interface)); - } - } - return; - } else if (typeDeclIsClass && isExtendedType) { - if (this.hasClassTypeSymbolConflictAsValue(baseDeclAST, baseType, enclosingDecl, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1, [TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST), baseType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - } - } - - if (baseType.hasBase(typeSymbol)) { - typeSymbol.setHasBaseTypeConflict(); - baseType.setHasBaseTypeConflict(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, typeDeclIsClass ? TypeScript.DiagnosticCode.Class_0_is_recursively_referenced_as_a_base_type_of_itself : TypeScript.DiagnosticCode.Interface_0_is_recursively_referenced_as_a_base_type_of_itself, [typeSymbol.getScopedName()])); - return; - } - - if (isExtendedType) { - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfTypeExtendsType(classOrInterface, name, typeSymbol, baseType, enclosingDecl, context); - }); - } else { - TypeScript.Debug.assert(classOrInterface.kind() === 131 /* ClassDeclaration */); - - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfClassImplementsType(classOrInterface, typeSymbol, baseType, enclosingDecl, context); - }); - } - - this.checkSymbolPrivacy(typeSymbol, baseType, function (errorSymbol) { - return _this.baseListPrivacyErrorReporter(classOrInterface, typeSymbol, baseDeclAST, isExtendedType, errorSymbol, context); - }); - }; - - PullTypeResolver.prototype.typeCheckBases = function (classOrInterface, name, heritageClauses, typeSymbol, enclosingDecl, context) { - var _this = this; - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (!extendsClause && !implementsClause) { - return; - } - - if (extendsClause) { - for (var i = 0; i < extendsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, extendsClause.typeNames.nonSeparatorAt(i), true, enclosingDecl, context); - } - } - - if (typeSymbol.isClass()) { - if (implementsClause) { - for (var i = 0; i < implementsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, implementsClause.typeNames.nonSeparatorAt(i), false, enclosingDecl, context); - } - } - } else if (extendsClause && !typeSymbol.hasBaseTypeConflict() && typeSymbol.getExtendedTypes().length > 1) { - var firstInterfaceASTWithExtendsClause = TypeScript.ArrayUtilities.firstOrDefault(typeSymbol.getDeclarations(), function (decl) { - return decl.ast().heritageClauses !== null; - }).ast(); - if (classOrInterface === firstInterfaceASTWithExtendsClause) { - this.typeCheckCallBacks.push(function (context) { - _this.checkTypeCompatibilityBetweenBases(classOrInterface.identifier, typeSymbol, context); - }); - } - } - }; - - PullTypeResolver.prototype.checkTypeCompatibilityBetweenBases = function (name, typeSymbol, context) { - var derivedIndexSignatures = typeSymbol.getOwnIndexSignatures(); - - var inheritedMembersMap = TypeScript.createIntrinsicsObject(); - var inheritedIndexSignatures = new InheritedIndexSignatureInfo(); - - var typeHasOwnNumberIndexer = false; - var typeHasOwnStringIndexer = false; - - if (typeSymbol.hasOwnIndexSignatures()) { - var ownIndexSignatures = typeSymbol.getOwnIndexSignatures(); - for (var i = 0; i < ownIndexSignatures.length; i++) { - if (ownIndexSignatures[i].parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - typeHasOwnNumberIndexer = true; - } else { - typeHasOwnStringIndexer = true; - } - } - } - var baseTypes = typeSymbol.getExtendedTypes(); - for (var i = 0; i < baseTypes.length; i++) { - if (this.checkNamedPropertyIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedMembersMap, context) || this.checkIndexSignatureIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedIndexSignatures, typeHasOwnNumberIndexer, typeHasOwnStringIndexer, context)) { - return; - } - } - - if (this.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature(name, typeSymbol, inheritedIndexSignatures, context)) { - return; - } - - this.checkInheritedMembersAgainstInheritedIndexSignatures(name, typeSymbol, inheritedIndexSignatures, inheritedMembersMap, context); - }; - - PullTypeResolver.prototype.checkNamedPropertyIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, inheritedMembersMap, context) { - var baseMembers = baseTypeSymbol.getAllMembers(4096 /* Property */ | 65536 /* Method */, 0 /* all */); - for (var i = 0; i < baseMembers.length; i++) { - var member = baseMembers[i]; - var memberName = member.name; - - if (interfaceSymbol.findMember(memberName, false)) { - continue; - } - - this.resolveDeclaredSymbol(member, context); - - if (inheritedMembersMap[memberName]) { - var prevMember = inheritedMembersMap[memberName]; - if (prevMember.baseOrigin !== baseTypeSymbol && !this.propertiesAreIdenticalWithNewEnclosingTypes(baseTypeSymbol, prevMember.baseOrigin, member, prevMember.memberSymbol, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Named_properties_0_of_types_1_and_2_are_not_identical, [memberName, prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - inheritedMembersMap[memberName] = new MemberWithBaseOrigin(member, baseTypeSymbol); - } - } - - return false; - }; - - PullTypeResolver.prototype.checkIndexSignatureIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, allInheritedSignatures, derivedTypeHasOwnNumberSignature, derivedTypeHasOwnStringSignature, context) { - if (derivedTypeHasOwnNumberSignature && derivedTypeHasOwnStringSignature) { - return false; - } - - var indexSignaturesFromThisBaseType = baseTypeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignaturesFromThisBaseType.length; i++) { - var currentInheritedSignature = indexSignaturesFromThisBaseType[i]; - - var parameterTypeIsString = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.stringTypeSymbol; - var parameterTypeIsNumber = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - - if (parameterTypeIsString && derivedTypeHasOwnStringSignature || parameterTypeIsNumber && derivedTypeHasOwnNumberSignature) { - continue; - } - - if (parameterTypeIsString) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.stringSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_string_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - allInheritedSignatures.stringSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); - } - } else if (parameterTypeIsNumber) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.numberSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_number_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - allInheritedSignatures.numberSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); - } - } - } - - return false; - }; - - PullTypeResolver.prototype.checkInheritedMembersAgainstInheritedIndexSignatures = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, inheritedMembers, context) { - if (!inheritedIndexSignatures.stringSignatureWithBaseOrigin && !inheritedIndexSignatures.numberSignatureWithBaseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var stringSignature = inheritedIndexSignatures.stringSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature; - var numberSignature = inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature; - for (var memberName in inheritedMembers) { - var memberWithBaseOrigin = inheritedMembers[memberName]; - if (!memberWithBaseOrigin) { - continue; - } - - var relevantSignature = this.determineRelevantIndexerForMember(memberWithBaseOrigin.memberSymbol, numberSignature, stringSignature); - if (!relevantSignature) { - continue; - } - - var relevantSignatureIsNumberSignature = relevantSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - var signatureBaseOrigin = relevantSignatureIsNumberSignature ? inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin : inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin; - - if (signatureBaseOrigin === memberWithBaseOrigin.baseOrigin) { - continue; - } - - var memberIsSubtype = this.sourceIsAssignableToTarget(memberWithBaseOrigin.memberSymbol.type, relevantSignature.returnType, interfaceName, context, comparisonInfo); - - if (!memberIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - if (relevantSignatureIsNumberSignature) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - } else { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - } - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, context) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin === inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var signatureIsSubtype = this.sourceIsAssignableToTarget(inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature.returnType, inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature.returnType, interfaceName, context, comparisonInfo); - - if (!signatureIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2, [ - inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [ - interfaceSymbol.getDisplayName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.checkAssignability = function (ast, source, target, context) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(source, target, ast, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.isReference = function (ast, astSymbol) { - if (ast.kind() === 217 /* ParenthesizedExpression */) { - return this.isReference(ast.expression, astSymbol); - } - - if (ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */ && ast.kind() !== 221 /* ElementAccessExpression */) { - return false; - } - - if (ast.kind() === 11 /* IdentifierName */) { - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(4096 /* Enum */)) { - return false; - } - - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(102400 /* SomeInitializedModule */)) { - return false; - } - - if (astSymbol.kind === 32768 /* ConstructorMethod */ || astSymbol.kind === 16384 /* Function */) { - return false; - } - } - - if (ast.kind() === 212 /* MemberAccessExpression */ && astSymbol.kind === 67108864 /* EnumMember */) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.checkForSuperMemberAccess = function (expression, name, resolvedName, context) { - if (resolvedName) { - if (expression.kind() === 50 /* SuperKeyword */ && !resolvedName.isError() && resolvedName.kind !== 65536 /* Method */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword)); - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingDeclForAST = function (ast) { - return this.semanticInfoChain.getEnclosingDecl(ast); - }; - - PullTypeResolver.prototype.getEnclosingSymbolForAST = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - return enclosingDecl ? enclosingDecl.getSymbol() : null; - }; - - PullTypeResolver.prototype.checkForPrivateMemberAccess = function (name, expressionType, resolvedName, context) { - if (resolvedName) { - if (resolvedName.anyDeclHasFlag(2 /* Private */)) { - var memberContainer = resolvedName.getContainer(); - if (memberContainer && memberContainer.kind === 33554432 /* ConstructorType */) { - memberContainer = memberContainer.getAssociatedContainerType(); - } - - if (memberContainer && memberContainer.isClass()) { - var memberClass = memberContainer.getDeclarations()[0].ast(); - TypeScript.Debug.assert(memberClass); - - var containingClass = this.getEnclosingClassDeclaration(name); - - if (!containingClass || containingClass !== memberClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode._0_1_is_inaccessible, [memberContainer.toString(null, false), name.text()])); - return true; - } - } - } - } - - return false; - }; - - PullTypeResolver.prototype.instantiateType = function (type, typeParameterArgumentMap) { - if (type.isPrimitive()) { - return type; - } - - if (type.isError()) { - return type; - } - - if (typeParameterArgumentMap[type.pullSymbolID]) { - return typeParameterArgumentMap[type.pullSymbolID]; - } - - type._resolveDeclaredSymbol(); - if (type.isTypeParameter()) { - return this.instantiateTypeParameter(type, typeParameterArgumentMap); - } - - if (type.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); - } - - return type; - }; - - PullTypeResolver.prototype.instantiateTypeParameter = function (typeParameter, typeParameterArgumentMap) { - var constraint = typeParameter.getConstraint(); - if (!constraint) { - return typeParameter; - } - - var instantiatedConstraint = this.instantiateType(constraint, typeParameterArgumentMap); - - if (instantiatedConstraint == constraint) { - return typeParameter; - } - - var rootTypeParameter = typeParameter.getRootSymbol(); - var instantiation = rootTypeParameter.getSpecialization([instantiatedConstraint]); - if (instantiation) { - return instantiation; - } - - instantiation = new TypeScript.PullInstantiatedTypeParameterSymbol(rootTypeParameter, instantiatedConstraint); - return instantiation; - }; - - PullTypeResolver.prototype.instantiateSignature = function (signature, typeParameterArgumentMap) { - if (!signature.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return signature; - } - - var rootSignature = signature.getRootSymbol(); - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(this, signature, mutableTypeParameterMap); - - var instantiatedSignature = rootSignature.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiatedSignature) { - return instantiatedSignature; - } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(signature, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - instantiatedSignature = new TypeScript.PullInstantiatedSignatureSymbol(rootSignature, typeParameterArgumentMap); - - instantiatedSignature.returnType = this.instantiateType((rootSignature.returnType || this.semanticInfoChain.anyTypeSymbol), typeParameterArgumentMap); - instantiatedSignature.functionType = this.instantiateType(rootSignature.functionType, typeParameterArgumentMap); - - var parameters = rootSignature.parameters; - var parameter = null; - - if (parameters) { - for (var j = 0; j < parameters.length; j++) { - parameter = new TypeScript.PullSymbol(parameters[j].name, 2048 /* Parameter */); - parameter.setRootSymbol(parameters[j]); - - if (parameters[j].isOptional) { - parameter.isOptional = true; - } - if (parameters[j].isVarArg) { - parameter.isVarArg = true; - instantiatedSignature.hasVarArgs = true; - } - instantiatedSignature.addParameter(parameter, parameter.isOptional); - - parameter.type = this.instantiateType(parameters[j].type, typeParameterArgumentMap); - } - } - - return instantiatedSignature; - }; - PullTypeResolver.globalTypeCheckPhase = 0; - return PullTypeResolver; - })(); - TypeScript.PullTypeResolver = PullTypeResolver; - - var TypeComparisonInfo = (function () { - function TypeComparisonInfo(sourceComparisonInfo, useSameIndent) { - this.onlyCaptureFirstError = false; - this.flags = 0 /* SuccessfulComparison */; - this.message = ""; - this.stringConstantVal = null; - this.indent = 1; - if (sourceComparisonInfo) { - this.flags = sourceComparisonInfo.flags; - this.onlyCaptureFirstError = sourceComparisonInfo.onlyCaptureFirstError; - this.stringConstantVal = sourceComparisonInfo.stringConstantVal; - this.indent = sourceComparisonInfo.indent; - if (!useSameIndent) { - this.indent++; - } - } - } - TypeComparisonInfo.prototype.indentString = function () { - var result = ""; - - for (var i = 0; i < this.indent; i++) { - result += "\t"; - } - - return result; - }; - - TypeComparisonInfo.prototype.addMessage = function (message) { - if (!this.onlyCaptureFirstError && this.message) { - this.message = this.message + TypeScript.newLine() + this.indentString() + message; - } else { - this.message = this.indentString() + message; - } - }; - return TypeComparisonInfo; - })(); - TypeScript.TypeComparisonInfo = TypeComparisonInfo; - - function getPropertyAssignmentNameTextFromIdentifier(identifier) { - if (identifier.kind() === 11 /* IdentifierName */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 14 /* StringLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 13 /* NumericLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - TypeScript.getPropertyAssignmentNameTextFromIdentifier = getPropertyAssignmentNameTextFromIdentifier; - - function isTypesOnlyLocation(ast) { - while (ast && ast.parent) { - switch (ast.parent.kind()) { - case 244 /* TypeAnnotation */: - return true; - case 127 /* TypeQuery */: - return false; - case 125 /* ConstructorType */: - var constructorType = ast.parent; - if (constructorType.type === ast) { - return true; - } - break; - case 123 /* FunctionType */: - var functionType = ast.parent; - if (functionType.type === ast) { - return true; - } - break; - case 239 /* Constraint */: - var constraint = ast.parent; - if (constraint.type === ast) { - return true; - } - break; - case 220 /* CastExpression */: - var castExpression = ast.parent; - return castExpression.type === ast; - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - return true; - case 228 /* TypeArgumentList */: - return true; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 129 /* FunctionDeclaration */: - case 145 /* MethodSignature */: - case 212 /* MemberAccessExpression */: - case 242 /* Parameter */: - return false; - } - - ast = ast.parent; - } - - return false; - } - TypeScript.isTypesOnlyLocation = isTypesOnlyLocation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.declCacheHit = 0; - TypeScript.declCacheMiss = 0; - TypeScript.symbolCacheHit = 0; - TypeScript.symbolCacheMiss = 0; - - var sentinalEmptyArray = []; - - var SemanticInfoChain = (function () { - function SemanticInfoChain(compiler, logger) { - this.compiler = compiler; - this.logger = logger; - this.documents = []; - this.fileNameToDocument = TypeScript.createIntrinsicsObject(); - this.anyTypeDecl = null; - this.booleanTypeDecl = null; - this.numberTypeDecl = null; - this.stringTypeDecl = null; - this.nullTypeDecl = null; - this.undefinedTypeDecl = null; - this.voidTypeDecl = null; - this.undefinedValueDecl = null; - this.anyTypeSymbol = null; - this.booleanTypeSymbol = null; - this.numberTypeSymbol = null; - this.stringTypeSymbol = null; - this.nullTypeSymbol = null; - this.undefinedTypeSymbol = null; - this.voidTypeSymbol = null; - this.undefinedValueSymbol = null; - this.emptyTypeSymbol = null; - this.astSymbolMap = []; - this.astAliasSymbolMap = []; - this.astCallResolutionDataMap = []; - this.declSymbolMap = []; - this.declSignatureSymbolMap = []; - this.declCache = null; - this.symbolCache = null; - this.fileNameToDiagnostics = null; - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - var globalDecl = new TypeScript.RootPullDecl("", "", 0 /* Global */, 0 /* None */, this, false); - this.documents[0] = new TypeScript.Document(this.compiler, this, "", [], null, 0 /* None */, 0, false, null, globalDecl); - - this.anyTypeDecl = new TypeScript.NormalPullDecl("any", "any", 2 /* Primitive */, 0 /* None */, globalDecl); - this.booleanTypeDecl = new TypeScript.NormalPullDecl("boolean", "boolean", 2 /* Primitive */, 0 /* None */, globalDecl); - this.numberTypeDecl = new TypeScript.NormalPullDecl("number", "number", 2 /* Primitive */, 0 /* None */, globalDecl); - this.stringTypeDecl = new TypeScript.NormalPullDecl("string", "string", 2 /* Primitive */, 0 /* None */, globalDecl); - this.voidTypeDecl = new TypeScript.NormalPullDecl("void", "void", 2 /* Primitive */, 0 /* None */, globalDecl); - - this.nullTypeDecl = new TypeScript.RootPullDecl("null", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedTypeDecl = new TypeScript.RootPullDecl("undefined", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedValueDecl = new TypeScript.NormalPullDecl("undefined", "undefined", 512 /* Variable */, 8 /* Ambient */, globalDecl); - - this.invalidate(); - } - SemanticInfoChain.prototype.getDocument = function (fileName) { - var document = this.fileNameToDocument[fileName]; - return document || null; - }; - - SemanticInfoChain.prototype.lineMap = function (fileName) { - return this.getDocument(fileName).lineMap(); - }; - - SemanticInfoChain.prototype.fileNames = function () { - if (this._fileNames === null) { - this._fileNames = this.documents.slice(1).map(function (s) { - return s.fileName; - }); - } - - return this._fileNames; - }; - - SemanticInfoChain.prototype.bindPrimitiveSymbol = function (decl, newSymbol) { - newSymbol.addDeclaration(decl); - decl.setSymbol(newSymbol); - newSymbol.setResolved(); - - return newSymbol; - }; - - SemanticInfoChain.prototype.addPrimitiveTypeSymbol = function (decl) { - var newSymbol = new TypeScript.PullPrimitiveTypeSymbol(decl.name); - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.addPrimitiveValueSymbol = function (decl, type) { - var newSymbol = new TypeScript.PullSymbol(decl.name, 512 /* Variable */); - newSymbol.type = type; - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.resetGlobalSymbols = function () { - this.anyTypeSymbol = this.addPrimitiveTypeSymbol(this.anyTypeDecl); - this.booleanTypeSymbol = this.addPrimitiveTypeSymbol(this.booleanTypeDecl); - this.numberTypeSymbol = this.addPrimitiveTypeSymbol(this.numberTypeDecl); - this.stringTypeSymbol = this.addPrimitiveTypeSymbol(this.stringTypeDecl); - this.voidTypeSymbol = this.addPrimitiveTypeSymbol(this.voidTypeDecl); - this.nullTypeSymbol = this.addPrimitiveTypeSymbol(this.nullTypeDecl); - this.undefinedTypeSymbol = this.addPrimitiveTypeSymbol(this.undefinedTypeDecl); - this.undefinedValueSymbol = this.addPrimitiveValueSymbol(this.undefinedValueDecl, this.undefinedTypeSymbol); - - var emptyTypeDecl = new TypeScript.PullSynthesizedDecl("{}", "{}", 8388608 /* ObjectType */, 0 /* None */, null, this); - var emptyTypeSymbol = new TypeScript.PullTypeSymbol("{}", 8388608 /* ObjectType */); - emptyTypeDecl.setSymbol(emptyTypeSymbol); - emptyTypeSymbol.addDeclaration(emptyTypeDecl); - emptyTypeSymbol.setResolved(); - this.emptyTypeSymbol = emptyTypeSymbol; - }; - - SemanticInfoChain.prototype.addDocument = function (document) { - var fileName = document.fileName; - - var existingIndex = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (existingIndex < 0) { - this.documents.push(document); - } else { - this.documents[existingIndex] = document; - } - - this.fileNameToDocument[fileName] = document; - - this.invalidate(); - }; - - SemanticInfoChain.prototype.removeDocument = function (fileName) { - TypeScript.Debug.assert(fileName !== "", "Can't remove the semantic info for the global decl."); - var index = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (index > 0) { - this.fileNameToDocument[fileName] = undefined; - this.documents.splice(index, 1); - this.invalidate(); - } - }; - - SemanticInfoChain.prototype.getDeclPathCacheID = function (declPath, declKind) { - var cacheID = ""; - - for (var i = 0; i < declPath.length; i++) { - cacheID += "#" + declPath[i]; - } - - return cacheID + "#" + declKind.toString(); - }; - - SemanticInfoChain.prototype.findTopLevelSymbol = function (name, kind, doNotGoPastThisDecl) { - var cacheID = this.getDeclPathCacheID([name], kind); - - var symbol = this.symbolCache[cacheID]; - - if (!symbol) { - for (var i = 0, n = this.documents.length; i < n; i++) { - var topLevelDecl = this.documents[i].topLevelDecl(); - - var symbol = this.findTopLevelSymbolInDecl(topLevelDecl, name, kind, doNotGoPastThisDecl); - if (symbol) { - break; - } - - if (doNotGoPastThisDecl && topLevelDecl.name === doNotGoPastThisDecl.fileName()) { - return null; - } - } - - if (symbol) { - this.symbolCache[cacheID] = symbol; - } - } - - return symbol; - }; - - SemanticInfoChain.prototype.findTopLevelSymbolInDecl = function (topLevelDecl, name, kind, doNotGoPastThisDecl) { - var doNotGoPastThisPosition = doNotGoPastThisDecl && doNotGoPastThisDecl.fileName() === topLevelDecl.fileName() ? doNotGoPastThisDecl.ast().start() : -1; - - var foundDecls = topLevelDecl.searchChildDecls(name, kind); - - for (var j = 0; j < foundDecls.length; j++) { - var foundDecl = foundDecls[j]; - - if (doNotGoPastThisPosition !== -1 && foundDecl.ast() && foundDecl.ast().start() > doNotGoPastThisPosition) { - break; - } - - var symbol = foundDecls[j].getSymbol(); - if (symbol) { - return symbol; - } - } - - return null; - }; - - SemanticInfoChain.prototype.findExternalModule = function (id) { - id = TypeScript.normalizePath(id); - - var tsFile = id + ".ts"; - var tsCacheID = this.getDeclPathCacheID([tsFile], 32 /* DynamicModule */); - symbol = this.symbolCache[tsCacheID]; - if (symbol != undefined) { - return symbol; - } - - var dtsFile = id + ".d.ts"; - var dtsCacheID = this.getDeclPathCacheID([dtsFile], 32 /* DynamicModule */); - var symbol = this.symbolCache[dtsCacheID]; - if (symbol) { - return symbol; - } - - var dtsSymbol; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (topLevelDecl.isExternalModule()) { - var isTsFile = document.fileName === tsFile; - if (isTsFile || document.fileName === dtsFile) { - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - symbol = dynamicModuleDecl.getSymbol(); - - if (isTsFile) { - this.symbolCache[tsCacheID] = symbol; - - return symbol; - } else { - dtsSymbol = symbol; - } - } - } - } - - if (dtsSymbol) { - this.symbolCache[dtsCacheID] = symbol; - return dtsSymbol; - } - - this.symbolCache[dtsCacheID] = null; - this.symbolCache[tsCacheID] = null; - - return null; - }; - - SemanticInfoChain.prototype.findAmbientExternalModuleInGlobalContext = function (id) { - var cacheID = this.getDeclPathCacheID([id], 32 /* DynamicModule */); - - var symbol = this.symbolCache[cacheID]; - if (symbol == undefined) { - symbol = null; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (!topLevelDecl.isExternalModule()) { - var dynamicModules = topLevelDecl.searchChildDecls(id, 32 /* DynamicModule */); - if (dynamicModules.length) { - symbol = dynamicModules[0].getSymbol(); - break; - } - } - } - - this.symbolCache[cacheID] = symbol; - } - - return symbol; - }; - - SemanticInfoChain.prototype.findDecls = function (declPath, declKind) { - var cacheID = this.getDeclPathCacheID(declPath, declKind); - - if (declPath.length) { - var cachedDecls = this.declCache[cacheID]; - - if (cachedDecls && cachedDecls.length) { - TypeScript.declCacheHit++; - return cachedDecls; - } - } - - TypeScript.declCacheMiss++; - - var declsToSearch = this.topLevelDecls(); - - var decls = TypeScript.sentinelEmptyArray; - var path; - var foundDecls = TypeScript.sentinelEmptyArray; - - for (var i = 0; i < declPath.length; i++) { - path = declPath[i]; - decls = TypeScript.sentinelEmptyArray; - - var kind = (i === declPath.length - 1) ? declKind : 164 /* SomeContainer */; - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(path, kind); - - for (var k = 0; k < foundDecls.length; k++) { - if (decls === TypeScript.sentinelEmptyArray) { - decls = []; - } - decls[decls.length] = foundDecls[k]; - } - } - - declsToSearch = decls; - - if (!declsToSearch) { - break; - } - } - - if (decls.length) { - this.declCache[cacheID] = decls; - } - - return decls; - }; - - SemanticInfoChain.prototype.findDeclsFromPath = function (declPath, declKind) { - var declString = []; - - for (var i = 0, n = declPath.length; i < n; i++) { - if (declPath[i].kind & 1 /* Script */) { - continue; - } - - declString.push(declPath[i].name); - } - - return this.findDecls(declString, declKind); - }; - - SemanticInfoChain.prototype.findSymbol = function (declPath, declType) { - var cacheID = this.getDeclPathCacheID(declPath, declType); - - if (declPath.length) { - var cachedSymbol = this.symbolCache[cacheID]; - - if (cachedSymbol) { - TypeScript.symbolCacheHit++; - return cachedSymbol; - } - } - - TypeScript.symbolCacheMiss++; - - var decls = this.findDecls(declPath, declType); - var symbol = null; - - if (decls.length) { - var decl = decls[0]; - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - var valueDecl = decl.getValueDecl(); - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - } - symbol = decl.getSymbol(); - - if (symbol) { - for (var i = 1; i < decls.length; i++) { - decls[i].ensureSymbolIsBound(); - } - - this.symbolCache[cacheID] = symbol; - } - } - - return symbol; - }; - - SemanticInfoChain.prototype.cacheGlobalSymbol = function (symbol, kind) { - var cacheID1 = this.getDeclPathCacheID([symbol.name], kind); - var cacheID2 = this.getDeclPathCacheID([symbol.name], symbol.kind); - - if (!this.symbolCache[cacheID1]) { - this.symbolCache[cacheID1] = symbol; - } - - if (!this.symbolCache[cacheID2]) { - this.symbolCache[cacheID2] = symbol; - } - }; - - SemanticInfoChain.prototype.invalidate = function (oldSettings, newSettings) { - if (typeof oldSettings === "undefined") { oldSettings = null; } - if (typeof newSettings === "undefined") { newSettings = null; } - TypeScript.PullTypeResolver.globalTypeCheckPhase++; - - var cleanStart = new Date().getTime(); - - this.astSymbolMap.length = 0; - this.astAliasSymbolMap.length = 0; - this.astCallResolutionDataMap.length = 0; - - this.declCache = TypeScript.createIntrinsicsObject(); - this.symbolCache = TypeScript.createIntrinsicsObject(); - this.fileNameToDiagnostics = TypeScript.createIntrinsicsObject(); - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - - this.declSymbolMap.length = 0; - this.declSignatureSymbolMap.length = 0; - - if (oldSettings && newSettings) { - if (this.settingsChangeAffectsSyntax(oldSettings, newSettings)) { - for (var i = 1, n = this.documents.length; i < n; i++) { - this.documents[i].invalidate(); - } - } - } - - TypeScript.pullSymbolID = 0; - - this.resetGlobalSymbols(); - - var cleanEnd = new Date().getTime(); - }; - - SemanticInfoChain.prototype.settingsChangeAffectsSyntax = function (before, after) { - return before.allowAutomaticSemicolonInsertion() !== after.allowAutomaticSemicolonInsertion() || before.codeGenTarget() !== after.codeGenTarget() || before.propagateEnumConstants() !== after.propagateEnumConstants(); - }; - - SemanticInfoChain.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()] || null; - }; - - SemanticInfoChain.prototype.setAliasSymbolForAST = function (ast, symbol) { - this.astAliasSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getAliasSymbolForAST = function (ast) { - return this.astAliasSymbolMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.getCallResolutionDataForAST = function (ast) { - return this.astCallResolutionDataMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.setCallResolutionDataForAST = function (ast, callResolutionData) { - if (callResolutionData) { - this.astCallResolutionDataMap[ast.syntaxID()] = callResolutionData; - } - }; - - SemanticInfoChain.prototype.setSymbolForDecl = function (decl, symbol) { - this.declSymbolMap[decl.declID] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForDecl = function (decl) { - return this.declSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.setSignatureSymbolForDecl = function (decl, signatureSymbol) { - this.declSignatureSymbolMap[decl.declID] = signatureSymbol; - }; - - SemanticInfoChain.prototype.getSignatureSymbolForDecl = function (decl) { - return this.declSignatureSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.addDiagnostic = function (diagnostic) { - var fileName = diagnostic.fileName(); - var diagnostics = this.fileNameToDiagnostics[fileName]; - if (!diagnostics) { - diagnostics = []; - this.fileNameToDiagnostics[fileName] = diagnostics; - } - - diagnostics.push(diagnostic); - }; - - SemanticInfoChain.prototype.getDiagnostics = function (fileName) { - var diagnostics = this.fileNameToDiagnostics[fileName]; - return diagnostics || []; - }; - - SemanticInfoChain.prototype.getBinder = function () { - if (!this._binder) { - this._binder = new TypeScript.PullSymbolBinder(this); - } - - return this._binder; - }; - - SemanticInfoChain.prototype.getResolver = function () { - if (!this._resolver) { - this._resolver = new TypeScript.PullTypeResolver(this.compiler.compilationSettings(), this); - } - - return this._resolver; - }; - - SemanticInfoChain.prototype.addSyntheticIndexSignature = function (containingDecl, containingSymbol, ast, indexParamName, indexParamType, returnType) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var indexParameterSymbol = new TypeScript.PullSymbol(indexParamName, 2048 /* Parameter */); - indexParameterSymbol.type = indexParamType; - indexSignature.addParameter(indexParameterSymbol); - indexSignature.returnType = returnType; - indexSignature.setResolved(); - indexParameterSymbol.setResolved(); - - containingSymbol.addIndexSignature(indexSignature); - - var indexSigDecl = new TypeScript.PullSynthesizedDecl("", "", 4194304 /* IndexSignature */, 2048 /* Signature */, containingDecl, containingDecl.semanticInfoChain); - var indexParamDecl = new TypeScript.PullSynthesizedDecl(indexParamName, indexParamName, 2048 /* Parameter */, 0 /* None */, indexSigDecl, containingDecl.semanticInfoChain); - indexSigDecl.setSignatureSymbol(indexSignature); - indexParamDecl.setSymbol(indexParameterSymbol); - indexSignature.addDeclaration(indexSigDecl); - indexParameterSymbol.addDeclaration(indexParamDecl); - }; - - SemanticInfoChain.prototype.getDeclForAST = function (ast) { - var document = this.getDocument(ast.fileName()); - - if (document) { - return document._getDeclForAST(ast); - } - - return null; - }; - - SemanticInfoChain.prototype.getEnclosingDecl = function (ast) { - return this.getDocument(ast.fileName()).getEnclosingDecl(ast); - }; - - SemanticInfoChain.prototype.setDeclForAST = function (ast, decl) { - this.getDocument(decl.fileName())._setDeclForAST(ast, decl); - }; - - SemanticInfoChain.prototype.getASTForDecl = function (decl) { - var document = this.getDocument(decl.fileName()); - if (document) { - return document._getASTForDecl(decl); - } - - return null; - }; - - SemanticInfoChain.prototype.setASTForDecl = function (decl, ast) { - this.getDocument(decl.fileName())._setASTForDecl(decl, ast); - }; - - SemanticInfoChain.prototype.topLevelDecl = function (fileName) { - var document = this.getDocument(fileName); - if (document) { - return document.topLevelDecl(); - } - - return null; - }; - - SemanticInfoChain.prototype.topLevelDecls = function () { - if (!this._topLevelDecls) { - this._topLevelDecls = TypeScript.ArrayUtilities.select(this.documents, function (u) { - return u.topLevelDecl(); - }); - } - - return this._topLevelDecls; - }; - - SemanticInfoChain.prototype.addDiagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - this.addDiagnostic(this.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations)); - }; - - SemanticInfoChain.prototype.diagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - return new TypeScript.Diagnostic(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width(), diagnosticKey, _arguments, additionalLocations); - }; - - SemanticInfoChain.prototype.locationFromAST = function (ast) { - return new TypeScript.Location(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width()); - }; - - SemanticInfoChain.prototype.duplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - return this.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0, [identifier], additionalLocationAST ? [this.locationFromAST(additionalLocationAST)] : null); - }; - - SemanticInfoChain.prototype.addDuplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - this.addDiagnostic(this.duplicateIdentifierDiagnosticFromAST(ast, identifier, additionalLocationAST)); - }; - return SemanticInfoChain; - })(); - TypeScript.SemanticInfoChain = SemanticInfoChain; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DeclCollectionContext = (function () { - function DeclCollectionContext(document, semanticInfoChain, propagateEnumConstants) { - this.document = document; - this.semanticInfoChain = semanticInfoChain; - this.propagateEnumConstants = propagateEnumConstants; - this.isDeclareFile = false; - this.parentChain = []; - } - DeclCollectionContext.prototype.getParent = function () { - return this.parentChain ? this.parentChain[this.parentChain.length - 1] : null; - }; - - DeclCollectionContext.prototype.pushParent = function (parentDecl) { - if (parentDecl) { - this.parentChain[this.parentChain.length] = parentDecl; - } - }; - - DeclCollectionContext.prototype.popParent = function () { - this.parentChain.length--; - }; - return DeclCollectionContext; - })(); - - function moduleElementsHasExportAssignment(moduleElements) { - return moduleElements.any(function (m) { - return m.kind() === 134 /* ExportAssignment */; - }); - } - - function containingModuleHasExportAssignment(ast) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = ast; - return moduleElementsHasExportAssignment(moduleDecl.moduleElements); - } else if (ast.kind() === 120 /* SourceUnit */) { - var sourceUnit = ast; - return moduleElementsHasExportAssignment(sourceUnit.moduleElements); - } - - ast = ast.parent; - } - - return false; - } - - function isParsingAmbientModule(ast, context) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.hasModifier(ast.modifiers, 8 /* Ambient */)) { - return true; - } - } - - ast = ast.parent; - } - - return false; - } - - function preCollectImportDecls(ast, context) { - var importDecl = ast; - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (TypeScript.hasModifier(importDecl.modifiers, 1 /* Exported */) && !containingModuleHasExportAssignment(ast)) { - declFlags |= 1 /* Exported */; - } - - var decl = new TypeScript.NormalPullDecl(importDecl.identifier.valueText(), importDecl.identifier.text(), 128 /* TypeAlias */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - } - - function preCollectScriptDecls(sourceUnit, context) { - var fileName = sourceUnit.fileName(); - - var isExternalModule = context.document.isExternalModule(); - - var decl = new TypeScript.RootPullDecl(fileName, fileName, 1 /* Script */, 0 /* None */, context.semanticInfoChain, isExternalModule); - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.isDeclareFile = context.document.isDeclareFile(); - - context.pushParent(decl); - - if (isExternalModule) { - var declFlags = 1 /* Exported */; - if (TypeScript.isDTSFile(fileName)) { - declFlags |= 8 /* Ambient */; - } - - var moduleContainsExecutableCode = containsExecutableCode(sourceUnit.moduleElements); - var kind = 32 /* DynamicModule */; - var valueText = TypeScript.quoteStr(fileName); - - var decl = new TypeScript.NormalPullDecl(valueText, fileName, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - - if (!moduleElementsHasExportAssignment(sourceUnit.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, sourceUnit, context); - } - - context.pushParent(decl); - } - } - - function preCollectEnumDecls(enumDecl, context) { - var declFlags = 0 /* None */; - var enumName = enumDecl.identifier.valueText(); - - if ((TypeScript.hasModifier(enumDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(enumDecl, context)) && !containingModuleHasExportAssignment(enumDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(enumDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(enumDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - declFlags |= 4096 /* Enum */; - var kind = 64 /* Enum */; - - var enumDeclaration = new TypeScript.NormalPullDecl(enumName, enumDecl.identifier.text(), kind, declFlags, context.getParent()); - context.semanticInfoChain.setDeclForAST(enumDecl, enumDeclaration); - context.semanticInfoChain.setASTForDecl(enumDeclaration, enumDecl); - - var valueDecl = new TypeScript.NormalPullDecl(enumDeclaration.name, enumDeclaration.getDisplayName(), 512 /* Variable */, enumDeclaration.flags, context.getParent()); - enumDeclaration.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, enumDecl); - - context.pushParent(enumDeclaration); - } - - function createEnumElementDecls(propertyDecl, context) { - var parent = context.getParent(); - - var decl = new TypeScript.PullEnumElementDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function preCollectModuleDecls(moduleDecl, context) { - var declFlags = 0 /* None */; - - var moduleContainsExecutableCode = containsExecutableCode(moduleDecl.moduleElements); - - var isDynamic = moduleDecl.stringLiteral !== null; - - if ((TypeScript.hasModifier(moduleDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(moduleDecl, context)) && !containingModuleHasExportAssignment(moduleDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(moduleDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(moduleDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var kind = isDynamic ? 32 /* DynamicModule */ : 4 /* Container */; - - if (moduleDecl.stringLiteral) { - var valueText = TypeScript.quoteStr(moduleDecl.stringLiteral.valueText()); - var text = moduleDecl.stringLiteral.text(); - - var decl = new TypeScript.NormalPullDecl(valueText, text, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleDecl.stringLiteral, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleDecl.stringLiteral); - - if (!moduleElementsHasExportAssignment(moduleDecl.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleDecl.stringLiteral, context); - } - - context.pushParent(decl); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - var moduleName = moduleNames[i]; - - var specificFlags = declFlags; - if (i > 0) { - specificFlags |= 1 /* Exported */; - } - - var decl = new TypeScript.NormalPullDecl(moduleName.valueText(), moduleName.text(), kind, specificFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleName, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleName); - - if (moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleName, context); - } - - context.pushParent(decl); - } - } - } - - function createModuleVariableDecl(decl, moduleNameAST, context) { - decl.setFlags(decl.flags | getInitializationFlag(decl)); - - var valueDecl = new TypeScript.NormalPullDecl(decl.name, decl.getDisplayName(), 512 /* Variable */, decl.flags, context.getParent()); - decl.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, moduleNameAST); - } - - function containsExecutableCode(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = member; - - if (containsExecutableCode(moduleDecl.moduleElements)) { - return true; - } - } else if (member.kind() === 133 /* ImportDeclaration */) { - if (TypeScript.hasModifier(member.modifiers, 1 /* Exported */)) { - return true; - } - } else if (member.kind() !== 128 /* InterfaceDeclaration */ && member.kind() !== 134 /* ExportAssignment */) { - return true; - } - } - - return false; - } - - function preCollectClassDecls(classDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(classDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(classDecl, context)) && !containingModuleHasExportAssignment(classDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(classDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(classDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 8 /* Class */, declFlags, parent); - - var constructorDecl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 512 /* Variable */, declFlags | 16384 /* ClassConstructorVariable */, parent); - - decl.setValueDecl(constructorDecl); - - context.semanticInfoChain.setDeclForAST(classDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, classDecl); - context.semanticInfoChain.setASTForDecl(constructorDecl, classDecl); - - context.pushParent(decl); - } - - function preCollectObjectTypeDecls(objectType, context) { - if (objectType.parent.kind() === 128 /* InterfaceDeclaration */) { - return; - } - - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", 8388608 /* ObjectType */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(objectType, decl); - context.semanticInfoChain.setASTForDecl(decl, objectType); - - context.pushParent(decl); - } - - function preCollectInterfaceDecls(interfaceDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(interfaceDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(interfaceDecl, context)) && !containingModuleHasExportAssignment(interfaceDecl)) { - declFlags |= 1 /* Exported */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(interfaceDecl.identifier.valueText(), interfaceDecl.identifier.text(), 16 /* Interface */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(interfaceDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, interfaceDecl); - - context.pushParent(decl); - } - - function preCollectParameterDecl(argDecl, context) { - var declFlags = 0 /* None */; - - if (TypeScript.hasModifier(argDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (argDecl.questionToken !== null || argDecl.equalsValueClause !== null || argDecl.dotDotDotToken !== null) { - declFlags |= 128 /* Optional */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - if (argDecl.equalsValueClause) { - parent.flags |= 33554432 /* HasDefaultArgs */; - } - - if (parent.kind === 32768 /* ConstructorMethod */) { - decl.setFlag(67108864 /* ConstructorParameter */); - } - - var isPublicOrPrivate = TypeScript.hasModifier(argDecl.modifiers, 4 /* Public */ | 2 /* Private */); - var isInConstructor = parent.kind === 32768 /* ConstructorMethod */; - if (isPublicOrPrivate && isInConstructor) { - var parentsParent = context.parentChain[context.parentChain.length - 2]; - - var propDeclFlags = declFlags & ~128 /* Optional */; - var propDecl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 4096 /* Property */, propDeclFlags, parentsParent); - propDecl.setValueDecl(decl); - decl.setFlag(8388608 /* PropertyParameter */); - propDecl.setFlag(8388608 /* PropertyParameter */); - - if (parent.kind === 32768 /* ConstructorMethod */) { - propDecl.setFlag(67108864 /* ConstructorParameter */); - } - - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setASTForDecl(propDecl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, propDecl); - } else { - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, decl); - } - - parent.addVariableDeclToGroup(decl); - } - - function preCollectTypeParameterDecl(typeParameterDecl, context) { - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(typeParameterDecl.identifier.valueText(), typeParameterDecl.identifier.text(), 8192 /* TypeParameter */, declFlags, parent); - context.semanticInfoChain.setASTForDecl(decl, typeParameterDecl); - context.semanticInfoChain.setDeclForAST(typeParameterDecl, decl); - } - - function createPropertySignature(propertyDecl, context) { - var declFlags = 4 /* Public */; - var parent = context.getParent(); - var declType = 4096 /* Property */; - - if (propertyDecl.questionToken !== null) { - declFlags |= 128 /* Optional */; - } - - var decl = new TypeScript.NormalPullDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function createMemberVariableDeclaration(memberDecl, context) { - var declFlags = 0 /* None */; - var declType = 4096 /* Property */; - - if (TypeScript.hasModifier(memberDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (TypeScript.hasModifier(memberDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(memberDecl.variableDeclarator.propertyName.valueText(), memberDecl.variableDeclarator.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(memberDecl, decl); - context.semanticInfoChain.setDeclForAST(memberDecl.variableDeclarator, decl); - context.semanticInfoChain.setASTForDecl(decl, memberDecl); - } - - function createVariableDeclaration(varDecl, context) { - var declFlags = 0 /* None */; - var declType = 512 /* Variable */; - - var modifiers = TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl); - if ((TypeScript.hasModifier(modifiers, 1 /* Exported */) || isParsingAmbientModule(varDecl, context)) && !containingModuleHasExportAssignment(varDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(modifiers, 8 /* Ambient */) || isParsingAmbientModule(varDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(varDecl.propertyName.valueText(), varDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(varDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, varDecl); - - if (parent) { - parent.addVariableDeclToGroup(decl); - } - } - - function preCollectVarDecls(ast, context) { - if (ast.parent.kind() === 136 /* MemberVariableDeclaration */) { - return; - } - - var varDecl = ast; - createVariableDeclaration(varDecl, context); - } - - function createFunctionTypeDeclaration(functionTypeDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 16777216 /* FunctionType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(functionTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionTypeDeclAST); - - context.pushParent(decl); - } - - function createConstructorTypeDeclaration(constructorTypeDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 33554432 /* ConstructorType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorTypeDeclAST); - - context.pushParent(decl); - } - - function createFunctionDeclaration(funcDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 16384 /* Function */; - - if ((TypeScript.hasModifier(funcDeclAST.modifiers, 1 /* Exported */) || isParsingAmbientModule(funcDeclAST, context)) && !containingModuleHasExportAssignment(funcDeclAST)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(funcDeclAST.modifiers, 8 /* Ambient */) || isParsingAmbientModule(funcDeclAST, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - if (!funcDeclAST.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(funcDeclAST.identifier.valueText(), funcDeclAST.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDeclAST); - - context.pushParent(decl); - } - - function createAnyFunctionExpressionDeclaration(functionExpressionDeclAST, id, context, displayName) { - if (typeof displayName === "undefined") { displayName = null; } - var declFlags = 0 /* None */; - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */ || functionExpressionDeclAST.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - declFlags |= 8192 /* ArrowFunction */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var name = id ? id.text() : ""; - var displayNameText = displayName ? displayName.text() : ""; - var decl = new TypeScript.PullFunctionExpressionDecl(name, declFlags, parent, displayNameText); - context.semanticInfoChain.setDeclForAST(functionExpressionDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionExpressionDeclAST); - - context.pushParent(decl); - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrow = functionExpressionDeclAST; - var declFlags = 4 /* Public */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(simpleArrow.identifier.valueText(), simpleArrow.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - context.semanticInfoChain.setASTForDecl(decl, simpleArrow.identifier); - context.semanticInfoChain.setDeclForAST(simpleArrow.identifier, decl); - - parent.addVariableDeclToGroup(decl); - } - } - - function createMemberFunctionDeclaration(funcDecl, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - if (TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (!funcDecl.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(funcDecl.propertyName.valueText(), funcDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDecl); - - context.pushParent(decl); - } - - function createIndexSignatureDeclaration(indexSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 4194304 /* IndexSignature */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(indexSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, indexSignatureDeclAST); - - context.pushParent(decl); - } - - function createCallSignatureDeclaration(callSignature, context) { - var isChildOfObjectType = callSignature.parent && callSignature.parent.parent && callSignature.parent.kind() === 2 /* SeparatedList */ && callSignature.parent.parent.kind() === 122 /* ObjectType */; - - if (!isChildOfObjectType) { - return; - } - - var declFlags = 2048 /* Signature */; - var declType = 1048576 /* CallSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(callSignature, decl); - context.semanticInfoChain.setASTForDecl(decl, callSignature); - - context.pushParent(decl); - } - - function createMethodSignatureDeclaration(method, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - declFlags |= 4 /* Public */; - declFlags |= 2048 /* Signature */; - - if (method.questionToken !== null) { - declFlags |= 128 /* Optional */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(method.propertyName.valueText(), method.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(method, decl); - context.semanticInfoChain.setASTForDecl(decl, method); - - context.pushParent(decl); - } - - function createConstructSignatureDeclaration(constructSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 2097152 /* ConstructSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructSignatureDeclAST); - - context.pushParent(decl); - } - - function createClassConstructorDeclaration(constructorDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 32768 /* ConstructorMethod */; - - if (!constructorDeclAST.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - if (parent) { - var parentFlags = parent.flags; - - if (parentFlags & 1 /* Exported */) { - declFlags |= 1 /* Exported */; - } - } - - var decl = new TypeScript.NormalPullDecl(parent.name, parent.getDisplayName(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorDeclAST); - - context.pushParent(decl); - } - - function createGetAccessorDeclaration(getAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 262144 /* GetAccessor */; - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(getAccessorDeclAST.propertyName.valueText(), getAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(getAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, getAccessorDeclAST); - - context.pushParent(decl); - } - - function createFunctionExpressionDeclaration(expression, context) { - createAnyFunctionExpressionDeclaration(expression, expression.identifier, context); - } - - function createSetAccessorDeclaration(setAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 524288 /* SetAccessor */; - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(setAccessorDeclAST.propertyName.valueText(), setAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(setAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, setAccessorDeclAST); - - context.pushParent(decl); - } - - function preCollectCatchDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 268435456 /* CatchBlock */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - - var declFlags = 0 /* None */; - var declType = 1024 /* CatchVariable */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(ast.identifier.valueText(), ast.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast.identifier, decl); - context.semanticInfoChain.setASTForDecl(decl, ast.identifier); - - if (parent) { - parent.addVariableDeclToGroup(decl); - } - } - - function preCollectWithDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 134217728 /* WithBlock */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectObjectLiteralDecls(ast, context) { - var decl = new TypeScript.NormalPullDecl("", "", 256 /* ObjectLiteral */, 0 /* None */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectSimplePropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - var span = TypeScript.TextSpan.fromBounds(propertyAssignment.start(), propertyAssignment.end()); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - } - - function preCollectFunctionPropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - - createAnyFunctionExpressionDeclaration(propertyAssignment, propertyAssignment.propertyName, context, propertyAssignment.propertyName); - } - - function preCollectDecls(ast, context) { - switch (ast.kind()) { - case 120 /* SourceUnit */: - preCollectScriptDecls(ast, context); - break; - case 132 /* EnumDeclaration */: - preCollectEnumDecls(ast, context); - break; - case 243 /* EnumElement */: - createEnumElementDecls(ast, context); - break; - case 130 /* ModuleDeclaration */: - preCollectModuleDecls(ast, context); - break; - case 131 /* ClassDeclaration */: - preCollectClassDecls(ast, context); - break; - case 128 /* InterfaceDeclaration */: - preCollectInterfaceDecls(ast, context); - break; - case 122 /* ObjectType */: - preCollectObjectTypeDecls(ast, context); - break; - case 242 /* Parameter */: - preCollectParameterDecl(ast, context); - break; - case 136 /* MemberVariableDeclaration */: - createMemberVariableDeclaration(ast, context); - break; - case 141 /* PropertySignature */: - createPropertySignature(ast, context); - break; - case 225 /* VariableDeclarator */: - preCollectVarDecls(ast, context); - break; - case 137 /* ConstructorDeclaration */: - createClassConstructorDeclaration(ast, context); - break; - case 139 /* GetAccessor */: - createGetAccessorDeclaration(ast, context); - break; - case 140 /* SetAccessor */: - createSetAccessorDeclaration(ast, context); - break; - case 222 /* FunctionExpression */: - createFunctionExpressionDeclaration(ast, context); - break; - case 135 /* MemberFunctionDeclaration */: - createMemberFunctionDeclaration(ast, context); - break; - case 144 /* IndexSignature */: - createIndexSignatureDeclaration(ast, context); - break; - case 123 /* FunctionType */: - createFunctionTypeDeclaration(ast, context); - break; - case 125 /* ConstructorType */: - createConstructorTypeDeclaration(ast, context); - break; - case 142 /* CallSignature */: - createCallSignatureDeclaration(ast, context); - break; - case 143 /* ConstructSignature */: - createConstructSignatureDeclaration(ast, context); - break; - case 145 /* MethodSignature */: - createMethodSignatureDeclaration(ast, context); - break; - case 129 /* FunctionDeclaration */: - createFunctionDeclaration(ast, context); - break; - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - createAnyFunctionExpressionDeclaration(ast, null, context); - break; - case 133 /* ImportDeclaration */: - preCollectImportDecls(ast, context); - break; - case 238 /* TypeParameter */: - preCollectTypeParameterDecl(ast, context); - break; - case 236 /* CatchClause */: - preCollectCatchDecls(ast, context); - break; - case 163 /* WithStatement */: - preCollectWithDecls(ast, context); - break; - case 215 /* ObjectLiteralExpression */: - preCollectObjectLiteralDecls(ast, context); - break; - case 240 /* SimplePropertyAssignment */: - preCollectSimplePropertyAssignmentDecls(ast, context); - break; - case 241 /* FunctionPropertyAssignment */: - preCollectFunctionPropertyAssignmentDecls(ast, context); - break; - } - } - - function isContainer(decl) { - return decl.kind === 4 /* Container */ || decl.kind === 32 /* DynamicModule */ || decl.kind === 64 /* Enum */; - } - - function getInitializationFlag(decl) { - if (decl.kind & 4 /* Container */) { - return 32768 /* InitializedModule */; - } else if (decl.kind & 32 /* DynamicModule */) { - return 65536 /* InitializedDynamicModule */; - } - - return 0 /* None */; - } - - function hasInitializationFlag(decl) { - var kind = decl.kind; - - if (kind & 4 /* Container */) { - return (decl.flags & 32768 /* InitializedModule */) !== 0; - } else if (kind & 32 /* DynamicModule */) { - return (decl.flags & 65536 /* InitializedDynamicModule */) !== 0; - } - - return false; - } - - function postCollectDecls(ast, context) { - var currentDecl = context.getParent(); - - if (ast.kind() === 11 /* IdentifierName */ || ast.kind() === 14 /* StringLiteral */) { - if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - return; - } - } - - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDeclaration = ast; - if (moduleDeclaration.stringLiteral) { - TypeScript.Debug.assert(currentDecl.ast() === moduleDeclaration.stringLiteral); - context.popParent(); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDeclaration.name); - for (var i = moduleNames.length - 1; i >= 0; i--) { - var moduleName = moduleNames[i]; - TypeScript.Debug.assert(currentDecl.ast() === moduleName); - context.popParent(); - currentDecl = context.getParent(); - } - } - } - - if (ast.kind() === 132 /* EnumDeclaration */) { - computeEnumElementConstantValues(ast, currentDecl, context); - } - - while (currentDecl.getParentDecl() && currentDecl.ast() === ast) { - context.popParent(); - currentDecl = context.getParent(); - } - } - - function computeEnumElementConstantValues(ast, enumDecl, context) { - TypeScript.Debug.assert(enumDecl.kind === 64 /* Enum */); - - var isAmbientEnum = TypeScript.hasFlag(enumDecl.flags, 8 /* Ambient */); - var inConstantSection = !isAmbientEnum; - var currentConstantValue = 0; - var enumMemberDecls = enumDecl.getChildDecls(); - - for (var i = 0, n = ast.enumElements.nonSeparatorCount(); i < n; i++) { - var enumElement = ast.enumElements.nonSeparatorAt(i); - var enumElementDecl = TypeScript.ArrayUtilities.first(enumMemberDecls, function (d) { - return context.semanticInfoChain.getASTForDecl(d) === enumElement; - }); - - TypeScript.Debug.assert(enumElementDecl.kind === 67108864 /* EnumMember */); - - if (enumElement.equalsValueClause === null) { - if (inConstantSection) { - enumElementDecl.constantValue = currentConstantValue; - currentConstantValue++; - } - } else { - enumElementDecl.constantValue = computeEnumElementConstantValue(enumElement.equalsValueClause.value, enumMemberDecls, context); - if (enumElementDecl.constantValue !== null && !isAmbientEnum) { - inConstantSection = true; - currentConstantValue = enumElementDecl.constantValue + 1; - } else { - inConstantSection = false; - } - } - - TypeScript.Debug.assert(enumElementDecl.constantValue !== undefined); - } - } - - function computeEnumElementConstantValue(expression, enumMemberDecls, context) { - TypeScript.Debug.assert(expression); - - if (TypeScript.ASTHelpers.isIntegerLiteralAST(expression)) { - var token; - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - token = expression.operand; - break; - default: - token = expression; - } - - var value = token.value(); - return value && expression.kind() === 165 /* NegateExpression */ ? -value : value; - } else if (context.propagateEnumConstants) { - switch (expression.kind()) { - case 11 /* IdentifierName */: - var name = expression; - var matchingEnumElement = TypeScript.ArrayUtilities.firstOrDefault(enumMemberDecls, function (d) { - return d.name === name.valueText(); - }); - - return matchingEnumElement ? matchingEnumElement.constantValue : null; - - case 202 /* LeftShiftExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left << right; - - case 189 /* BitwiseOrExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left | right; - } - - return null; - } else { - return null; - } - } - - (function (DeclarationCreator) { - function create(document, semanticInfoChain, compilationSettings) { - var declCollectionContext = new DeclCollectionContext(document, semanticInfoChain, compilationSettings.propagateEnumConstants()); - - TypeScript.getAstWalkerFactory().simpleWalk(document.sourceUnit(), preCollectDecls, postCollectDecls, declCollectionContext); - - return declCollectionContext.getParent(); - } - DeclarationCreator.create = create; - })(TypeScript.DeclarationCreator || (TypeScript.DeclarationCreator = {})); - var DeclarationCreator = TypeScript.DeclarationCreator; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PullSymbolBinder = (function () { - function PullSymbolBinder(semanticInfoChain) { - this.semanticInfoChain = semanticInfoChain; - this.declsBeingBound = []; - this.inBindingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullSymbolBinder.prototype.getParent = function (decl, returnInstanceType) { - if (typeof returnInstanceType === "undefined") { returnInstanceType = false; } - var parentDecl = decl.getParentDecl(); - - if (parentDecl.kind === 1 /* Script */) { - return null; - } - - var parent = parentDecl.getSymbol(); - - if (!parent && parentDecl && !parentDecl.hasBeenBound()) { - this.bindDeclToPullSymbol(parentDecl); - } - - parent = parentDecl.getSymbol(); - if (parent) { - var parentDeclKind = parentDecl.kind; - if (parentDeclKind === 262144 /* GetAccessor */) { - parent = parent.getGetter(); - } else if (parentDeclKind === 524288 /* SetAccessor */) { - parent = parent.getSetter(); - } - } - - if (parent) { - if (returnInstanceType && parent.isType() && parent.isContainer()) { - var instanceSymbol = parent.getInstanceSymbol(); - - if (instanceSymbol) { - return instanceSymbol.type; - } - } - - return parent.type; - } - - return null; - }; - - PullSymbolBinder.prototype.findDeclsInContext = function (startingDecl, declKind, searchGlobally) { - if (!searchGlobally) { - var parentDecl = startingDecl.getParentDecl(); - return parentDecl.searchChildDecls(startingDecl.name, declKind); - } - - var contextSymbolPath = startingDecl.getParentPath(); - - if (contextSymbolPath.length) { - var copyOfContextSymbolPath = []; - - for (var i = 0; i < contextSymbolPath.length; i++) { - if (contextSymbolPath[i].kind & 1 /* Script */) { - continue; - } - copyOfContextSymbolPath[copyOfContextSymbolPath.length] = contextSymbolPath[i].name; - } - - return this.semanticInfoChain.findDecls(copyOfContextSymbolPath, declKind); - } - }; - - PullSymbolBinder.prototype.getExistingSymbol = function (decl, searchKind, parent) { - var lookingForValue = (searchKind & 68147712 /* SomeValue */) !== 0; - var lookingForType = (searchKind & 58728795 /* SomeType */) !== 0; - var lookingForContainer = (searchKind & 164 /* SomeContainer */) !== 0; - var name = decl.name; - if (parent) { - var isExported = (decl.flags & 1 /* Exported */) !== 0; - - var prevSymbol = null; - if (lookingForValue) { - prevSymbol = parent.findContainedNonMember(name); - } else if (lookingForType) { - prevSymbol = parent.findContainedNonMemberType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findContainedNonMemberContainer(name, searchKind); - } - var prevIsExported = !prevSymbol; - if (!prevSymbol) { - if (lookingForValue) { - prevSymbol = parent.findMember(name, false); - } else if (lookingForType) { - prevSymbol = parent.findNestedType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findNestedContainer(name, searchKind); - } - } - - if (isExported && prevIsExported) { - return prevSymbol; - } - if (prevSymbol) { - var prevDecls = prevSymbol.getDeclarations(); - var lastPrevDecl = prevDecls[prevDecls.length - 1]; - var parentDecl = decl.getParentDecl(); - var prevParentDecl = lastPrevDecl && lastPrevDecl.getParentDecl(); - if (parentDecl !== prevParentDecl) { - return null; - } - - return prevSymbol; - } - } else { - var parentDecl = decl.getParentDecl(); - if (parentDecl && parentDecl.kind === 1 /* Script */) { - return this.semanticInfoChain.findTopLevelSymbol(name, searchKind, decl); - } else { - var prevDecls = parentDecl && parentDecl.searchChildDecls(name, searchKind); - return prevDecls[0] && prevDecls[0].getSymbol(); - } - } - - return null; - }; - - PullSymbolBinder.prototype.checkThatExportsMatch = function (decl, prevSymbol, reportError) { - if (typeof reportError === "undefined") { reportError = true; } - var isExported = (decl.flags & 1 /* Exported */) !== 0; - var prevDecls = prevSymbol.getDeclarations(); - var prevIsExported = (prevDecls[prevDecls.length - 1].flags & 1 /* Exported */) !== 0; - if ((isExported !== prevIsExported) && !prevSymbol.isSignature() && (decl.kind & 7340032 /* SomeSignature */) === 0) { - if (reportError) { - var ast = this.semanticInfoChain.getASTForDecl(decl); - this.semanticInfoChain.addDiagnosticFromAST(ast, TypeScript.DiagnosticCode.All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported, [decl.getDisplayName()]); - } - return false; - } - - return true; - }; - - PullSymbolBinder.prototype.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList = function (signature, currentSignatures) { - var signatureDecl = signature.getDeclarations()[0]; - TypeScript.Debug.assert(signatureDecl); - var enclosingDecl = signatureDecl.getParentDecl(); - var indexToInsert = TypeScript.ArrayUtilities.indexOf(currentSignatures, function (someSignature) { - return someSignature.getDeclarations()[0].getParentDecl() !== enclosingDecl; - }); - return indexToInsert < 0 ? currentSignatures.length : indexToInsert; - }; - - PullSymbolBinder.prototype.bindEnumDeclarationToPullSymbol = function (enumContainerDecl) { - var enumName = enumContainerDecl.name; - - var enumContainerSymbol = null; - var enumInstanceSymbol = null; - var moduleInstanceTypeSymbol = null; - - var enumInstanceDecl = enumContainerDecl.getValueDecl(); - - var enumDeclKind = enumContainerDecl.kind; - - var parent = this.getParent(enumContainerDecl); - var parentInstanceSymbol = this.getParent(enumContainerDecl, true); - var parentDecl = enumContainerDecl.getParentDecl(); - var enumAST = this.semanticInfoChain.getASTForDecl(enumContainerDecl); - - var isExported = enumContainerDecl.flags & 1 /* Exported */; - - var createdNewSymbol = false; - - enumContainerSymbol = this.getExistingSymbol(enumContainerDecl, 64 /* Enum */, parent); - - if (enumContainerSymbol) { - if (enumContainerSymbol.kind !== enumDeclKind) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(enumAST.identifier, enumContainerDecl.getDisplayName(), enumContainerSymbol.getDeclarations()[0].ast()); - enumContainerSymbol = null; - } else if (!this.checkThatExportsMatch(enumContainerDecl, enumContainerSymbol)) { - enumContainerSymbol = null; - } - } - - if (enumContainerSymbol) { - enumInstanceSymbol = enumContainerSymbol.getInstanceSymbol(); - } else { - enumContainerSymbol = new TypeScript.PullContainerSymbol(enumName, enumDeclKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(enumContainerSymbol, 64 /* Enum */); - } - } - - enumContainerSymbol.addDeclaration(enumContainerDecl); - enumContainerDecl.setSymbol(enumContainerSymbol); - - this.semanticInfoChain.setSymbolForAST(enumAST.identifier, enumContainerSymbol); - this.semanticInfoChain.setSymbolForAST(enumAST, enumContainerSymbol); - - if (!enumInstanceSymbol) { - var variableSymbol = null; - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - } - } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - - if (parentDecl !== variableSymbolParentDecl) { - variableSymbol = null; - } - } - } - } else if (!(enumContainerDecl.flags & 1 /* Exported */)) { - var siblingDecls = parentDecl.getChildDecls(); - var augmentedDecl = null; - - for (var i = 0; i < siblingDecls.length; i++) { - if (siblingDecls[i] === enumContainerDecl) { - break; - } - - if ((siblingDecls[i].name === enumName) && (siblingDecls[i].kind & 68147712 /* SomeValue */)) { - augmentedDecl = siblingDecls[i]; - break; - } - } - - if (augmentedDecl) { - variableSymbol = augmentedDecl.getSymbol(); - - if (variableSymbol) { - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); - } - } - } - } - - if (variableSymbol) { - enumInstanceSymbol = variableSymbol; - moduleInstanceTypeSymbol = variableSymbol.type; - } else { - enumInstanceSymbol = new TypeScript.PullSymbol(enumName, 512 /* Variable */); - } - - enumContainerSymbol.setInstanceSymbol(enumInstanceSymbol); - - if (!moduleInstanceTypeSymbol) { - moduleInstanceTypeSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - enumInstanceSymbol.type = moduleInstanceTypeSymbol; - } - - moduleInstanceTypeSymbol.addDeclaration(enumContainerDecl); - - if (!moduleInstanceTypeSymbol.getAssociatedContainerType()) { - moduleInstanceTypeSymbol.setAssociatedContainerType(enumContainerSymbol); - } - } - - if (createdNewSymbol && parent) { - if (enumContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(enumContainerSymbol); - } else { - parent.addEnclosedNonMemberType(enumContainerSymbol); - } - } - - if (createdNewSymbol) { - this.bindEnumIndexerDeclsToPullSymbols(enumContainerSymbol); - } - var valueDecl = enumContainerDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - }; - - PullSymbolBinder.prototype.bindEnumIndexerDeclsToPullSymbols = function (enumContainerSymbol) { - var enumContainerInstanceTypeSymbol = enumContainerSymbol.getInstanceSymbol().type; - - var syntheticIndexerParameterSymbol = new TypeScript.PullSymbol("x", 2048 /* Parameter */); - syntheticIndexerParameterSymbol.type = this.semanticInfoChain.numberTypeSymbol; - syntheticIndexerParameterSymbol.setResolved(); - syntheticIndexerParameterSymbol.setIsSynthesized(); - - var syntheticIndexerSignatureSymbol = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - syntheticIndexerSignatureSymbol.addParameter(syntheticIndexerParameterSymbol); - syntheticIndexerSignatureSymbol.returnType = this.semanticInfoChain.stringTypeSymbol; - syntheticIndexerSignatureSymbol.setResolved(); - syntheticIndexerSignatureSymbol.setIsSynthesized(); - - enumContainerInstanceTypeSymbol.addIndexSignature(syntheticIndexerSignatureSymbol); - }; - - PullSymbolBinder.prototype.findExistingVariableSymbolForModuleValueDecl = function (decl) { - var isExported = TypeScript.hasFlag(decl.flags, 1 /* Exported */); - var modName = decl.name; - var parentInstanceSymbol = this.getParent(decl, true); - var parentDecl = decl.getParentDecl(); - - var variableSymbol = null; - - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); - } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); - } - } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - var isExportedOrHasTheSameParent = isExported || (parentDecl === variableSymbolParentDecl); - - var canReuseVariableSymbol = isExportedOrHasTheSameParent && this.checkThatExportsMatch(decl, variableSymbol, false); - - if (!canReuseVariableSymbol) { - variableSymbol = null; - } - } - } - } else if (!isExported) { - var siblingDecls = parentDecl.getChildDecls(); - - for (var i = 0; i < siblingDecls.length; i++) { - var sibling = siblingDecls[i]; - - var siblingIsSomeValue = TypeScript.hasFlag(sibling.kind, 68147712 /* SomeValue */); - var siblingIsFunctionOrHasImplictVarFlag = TypeScript.hasFlag(sibling.kind, 1032192 /* SomeFunction */) || TypeScript.hasFlag(sibling.flags, 118784 /* ImplicitVariable */); - - var isSiblingAnAugmentableVariable = sibling !== decl && sibling !== decl.getValueDecl() && sibling.name === modName && siblingIsSomeValue && siblingIsFunctionOrHasImplictVarFlag; - - if (isSiblingAnAugmentableVariable) { - if (sibling.hasSymbol()) { - variableSymbol = sibling.getSymbol(); - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); - } - - break; - } - } - } - } - return variableSymbol; - }; - - PullSymbolBinder.prototype.bindModuleDeclarationToPullSymbol = function (moduleContainerDecl) { - var modName = moduleContainerDecl.name; - - var moduleContainerTypeSymbol = null; - var moduleKind = moduleContainerDecl.kind; - - var parent = this.getParent(moduleContainerDecl); - var parentInstanceSymbol = this.getParent(moduleContainerDecl, true); - var parentDecl = moduleContainerDecl.getParentDecl(); - var moduleNameAST = this.semanticInfoChain.getASTForDecl(moduleContainerDecl); - var moduleDeclAST = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(moduleNameAST); - if (!moduleDeclAST) { - TypeScript.Debug.assert(moduleKind === 32 /* DynamicModule */); - TypeScript.Debug.assert(moduleNameAST.kind() === 120 /* SourceUnit */); - - moduleDeclAST = moduleNameAST; - } - - var isExported = TypeScript.hasFlag(moduleContainerDecl.flags, 1 /* Exported */); - var searchKind = 164 /* SomeContainer */; - var isInitializedModule = (moduleContainerDecl.flags & 102400 /* SomeInitializedModule */) !== 0; - - if (parent && moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_must_be_defined_in_global_context, null); - } - - var createdNewSymbol = false; - - moduleContainerTypeSymbol = this.getExistingSymbol(moduleContainerDecl, searchKind, parent); - - if (moduleContainerTypeSymbol) { - if (moduleContainerTypeSymbol.kind !== moduleKind) { - if (isInitializedModule) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(moduleNameAST, moduleContainerDecl.getDisplayName(), moduleContainerTypeSymbol.getDeclarations()[0].ast()); - } - - moduleContainerTypeSymbol = null; - } else if (moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_be_reopened); - } else if (!this.checkThatExportsMatch(moduleContainerDecl, moduleContainerTypeSymbol)) { - moduleContainerTypeSymbol = null; - } - } - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = new TypeScript.PullContainerSymbol(modName, moduleKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(moduleContainerTypeSymbol, searchKind); - } - } - - moduleContainerTypeSymbol.addDeclaration(moduleContainerDecl); - moduleContainerDecl.setSymbol(moduleContainerTypeSymbol); - - this.semanticInfoChain.setSymbolForAST(moduleNameAST, moduleContainerTypeSymbol); - this.semanticInfoChain.setSymbolForAST(moduleDeclAST, moduleContainerTypeSymbol); - - var currentModuleValueDecl = moduleContainerDecl.getValueDecl(); - - var moduleDeclarations = moduleContainerTypeSymbol.getDeclarations(); - - if (createdNewSymbol) { - if (parent) { - if (moduleContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(moduleContainerTypeSymbol); - } else { - parent.addEnclosedNonMemberContainer(moduleContainerTypeSymbol); - } - } - } - - if (currentModuleValueDecl) { - currentModuleValueDecl.ensureSymbolIsBound(); - - var instanceSymbol = null; - var instanceTypeSymbol = null; - if (currentModuleValueDecl.hasSymbol()) { - instanceSymbol = currentModuleValueDecl.getSymbol(); - } else { - instanceSymbol = new TypeScript.PullSymbol(modName, 512 /* Variable */); - currentModuleValueDecl.setSymbol(instanceSymbol); - if (!instanceSymbol.hasDeclaration(currentModuleValueDecl)) { - instanceSymbol.addDeclaration(currentModuleValueDecl); - } - } - - if (!instanceSymbol.type) { - instanceSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - } - - moduleContainerTypeSymbol.setInstanceSymbol(instanceSymbol); - - if (!instanceSymbol.type.getAssociatedContainerType()) { - instanceSymbol.type.setAssociatedContainerType(moduleContainerTypeSymbol); - } - } - }; - - PullSymbolBinder.prototype.bindImportDeclaration = function (importDeclaration) { - var declFlags = importDeclaration.flags; - var declKind = importDeclaration.kind; - var importDeclAST = this.semanticInfoChain.getASTForDecl(importDeclaration); - - var isExported = false; - var importSymbol = null; - var declName = importDeclaration.name; - var parentHadSymbol = false; - var parent = this.getParent(importDeclaration); - - importSymbol = this.getExistingSymbol(importDeclaration, 164 /* SomeContainer */, parent); - - if (importSymbol) { - parentHadSymbol = true; - } - - if (importSymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(importDeclAST, importDeclaration.getDisplayName(), importSymbol.getDeclarations()[0].ast()); - importSymbol = null; - } - - if (!importSymbol) { - importSymbol = new TypeScript.PullTypeAliasSymbol(declName); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(importSymbol, 164 /* SomeContainer */); - } - } - - importSymbol.addDeclaration(importDeclaration); - importDeclaration.setSymbol(importSymbol); - - this.semanticInfoChain.setSymbolForAST(importDeclAST, importSymbol); - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(importSymbol); - } else { - parent.addEnclosedNonMemberContainer(importSymbol); - } - } - }; - - PullSymbolBinder.prototype.ensurePriorDeclarationsAreBound = function (container, currentDecl) { - if (!container) { - return; - } - - var parentDecls = container.getDeclarations(); - for (var i = 0; i < parentDecls.length; ++i) { - var parentDecl = parentDecls[i]; - var childDecls = parentDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl === currentDecl) { - return; - } - - if (childDecl.name === currentDecl.name) { - childDecl.ensureSymbolIsBound(); - } - } - } - }; - - PullSymbolBinder.prototype.bindClassDeclarationToPullSymbol = function (classDecl) { - var className = classDecl.name; - var classSymbol = null; - - var constructorSymbol = null; - var constructorTypeSymbol = null; - - var classAST = this.semanticInfoChain.getASTForDecl(classDecl); - - var parent = this.getParent(classDecl); - - this.ensurePriorDeclarationsAreBound(parent, classDecl); - - var parentDecl = classDecl.getParentDecl(); - var isExported = classDecl.flags & 1 /* Exported */; - var isGeneric = false; - - classSymbol = this.getExistingSymbol(classDecl, 58728795 /* SomeType */, parent); - - if (classSymbol && classSymbol.kind === 16 /* Interface */) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(classAST.identifier, classDecl.getDisplayName(), classSymbol.getDeclarations()[0].ast()); - classSymbol = null; - } - - classSymbol = new TypeScript.PullTypeSymbol(className, 8 /* Class */); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(classSymbol, 8 /* Class */); - } - - classSymbol.addDeclaration(classDecl); - - classDecl.setSymbol(classSymbol); - - this.semanticInfoChain.setSymbolForAST(classAST.identifier, classSymbol); - this.semanticInfoChain.setSymbolForAST(classAST, classSymbol); - - if (parent) { - if (classDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(classSymbol); - } else { - parent.addEnclosedNonMemberType(classSymbol); - } - } - - var typeParameterDecls = classDecl.getTypeParameters(); - - for (var i = 0; i < typeParameterDecls.length; i++) { - var typeParameterSymbol = classSymbol.findTypeParameter(typeParameterDecls[i].name); - - if (typeParameterSymbol) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterSymbol.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameterSymbol.getName()]); - } - - typeParameterSymbol = new TypeScript.PullTypeParameterSymbol(typeParameterDecls[i].name); - - classSymbol.addTypeParameter(typeParameterSymbol); - typeParameterSymbol.addDeclaration(typeParameterDecls[i]); - typeParameterDecls[i].setSymbol(typeParameterSymbol); - } - - constructorSymbol = classSymbol.getConstructorMethod(); - constructorTypeSymbol = constructorSymbol ? constructorSymbol.type : null; - - if (!constructorSymbol) { - var siblingValueDecls = null; - if (parentDecl) { - siblingValueDecls = parentDecl.searchChildDecls(className, 68147712 /* SomeValue */); - - if (siblingValueDecls && siblingValueDecls[0] && siblingValueDecls[0].hasSymbol()) { - constructorSymbol = siblingValueDecls[0].getSymbol(); - } - } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(className, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - constructorSymbol.setIsSynthesized(); - constructorSymbol.type = constructorTypeSymbol; - } - - classSymbol.setConstructorMethod(constructorSymbol); - classSymbol.setHasDefaultConstructor(); - } - - if (constructorSymbol.getIsSynthesized()) { - constructorSymbol.addDeclaration(classDecl.getValueDecl()); - constructorTypeSymbol.addDeclaration(classDecl); - } else { - classSymbol.setHasDefaultConstructor(false); - } - - constructorTypeSymbol.setAssociatedContainerType(classSymbol); - - var valueDecl = classDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - - this.bindStaticPrototypePropertyOfClass(classAST, classSymbol, constructorTypeSymbol); - }; - - PullSymbolBinder.prototype.bindInterfaceDeclarationToPullSymbol = function (interfaceDecl) { - var interfaceName = interfaceDecl.name; - var interfaceSymbol = null; - - var interfaceAST = this.semanticInfoChain.getASTForDecl(interfaceDecl); - var createdNewSymbol = false; - var parent = this.getParent(interfaceDecl); - - var acceptableSharedKind = 16 /* Interface */; - - interfaceSymbol = this.getExistingSymbol(interfaceDecl, 58728795 /* SomeType */, parent); - - if (interfaceSymbol) { - if (!(interfaceSymbol.kind & acceptableSharedKind)) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(interfaceAST.identifier, interfaceDecl.getDisplayName(), interfaceSymbol.getDeclarations()[0].ast()); - interfaceSymbol = null; - } else if (!this.checkThatExportsMatch(interfaceDecl, interfaceSymbol)) { - interfaceSymbol = null; - } - } - - if (!interfaceSymbol) { - interfaceSymbol = new TypeScript.PullTypeSymbol(interfaceName, 16 /* Interface */); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(interfaceSymbol, acceptableSharedKind); - } - } - - interfaceSymbol.addDeclaration(interfaceDecl); - interfaceDecl.setSymbol(interfaceSymbol); - - if (createdNewSymbol) { - if (parent) { - if (interfaceDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(interfaceSymbol); - } else { - parent.addEnclosedNonMemberType(interfaceSymbol); - } - } - } - - var typeParameters = interfaceDecl.getTypeParameters(); - var typeParameter; - var typeParameterDecls = null; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = interfaceSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - interfaceSymbol.addTypeParameter(typeParameter); - } else { - typeParameterDecls = typeParameter.getDeclarations(); - - for (var j = 0; j < typeParameterDecls.length; j++) { - var typeParameterDeclParent = typeParameterDecls[j].getParentDecl(); - - if (typeParameterDeclParent && typeParameterDeclParent === interfaceDecl) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecls[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - - break; - } - } - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - }; - - PullSymbolBinder.prototype.bindObjectTypeDeclarationToPullSymbol = function (objectDecl) { - var objectSymbolAST = this.semanticInfoChain.getASTForDecl(objectDecl); - - var objectSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - - objectSymbol.addDeclaration(objectDecl); - objectDecl.setSymbol(objectSymbol); - - this.semanticInfoChain.setSymbolForAST(objectSymbolAST, objectSymbol); - - var childDecls = objectDecl.getChildDecls(); - - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); - } - }; - - PullSymbolBinder.prototype.bindConstructorTypeDeclarationToPullSymbol = function (constructorTypeDeclaration) { - var declKind = constructorTypeDeclaration.kind; - var declFlags = constructorTypeDeclaration.flags; - var constructorTypeAST = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - - var constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - - constructorTypeDeclaration.setSymbol(constructorTypeSymbol); - constructorTypeSymbol.addDeclaration(constructorTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(constructorTypeAST, constructorTypeSymbol); - - var signature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - if (TypeScript.lastParameterIsRest(funcDecl.parameterList)) { - signature.hasVarArgs = true; - } - - signature.addDeclaration(constructorTypeDeclaration); - constructorTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), constructorTypeSymbol, signature); - - var typeParameters = constructorTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructorTypeSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - constructorTypeSymbol.appendConstructSignature(signature); - }; - - PullSymbolBinder.prototype.bindVariableDeclarationToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var varDeclAST = this.semanticInfoChain.getASTForDecl(variableDeclaration); - var nameAST = varDeclAST.kind() === 131 /* ClassDeclaration */ ? varDeclAST.identifier : varDeclAST.kind() === 225 /* VariableDeclarator */ ? varDeclAST.propertyName : varDeclAST.kind() === 132 /* EnumDeclaration */ ? varDeclAST.identifier : varDeclAST; - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var variableSymbol = null; - - var declName = variableDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(variableDeclaration, true); - - var parentDecl = variableDeclaration.getParentDecl(); - - var isImplicit = (declFlags & 118784 /* ImplicitVariable */) !== 0; - var isModuleValue = (declFlags & (32768 /* InitializedModule */)) !== 0; - var isEnumValue = (declFlags & 4096 /* Enum */) !== 0; - var isClassConstructorVariable = (declFlags & 16384 /* ClassConstructorVariable */) !== 0; - variableSymbol = this.getExistingSymbol(variableDeclaration, 68147712 /* SomeValue */, parent); - - if (!variableSymbol && isModuleValue) { - variableSymbol = this.findExistingVariableSymbolForModuleValueDecl(variableDeclaration.getContainerDecl()); - } - - if (variableSymbol && !variableSymbol.isType()) { - parentHadSymbol = true; - } - - var decl; - var decls; - var ast; - var members; - - if (variableSymbol) { - var prevKind = variableSymbol.kind; - var prevIsEnum = variableSymbol.anyDeclHasFlag(4096 /* Enum */); - var prevIsClassConstructorVariable = variableSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */); - var prevIsModuleValue = variableSymbol.allDeclsHaveFlag(32768 /* InitializedModule */); - var prevIsImplicit = variableSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */); - var prevIsFunction = TypeScript.ArrayUtilities.any(variableSymbol.getDeclarations(), function (decl) { - return decl.kind === 16384 /* Function */; - }); - var prevIsAmbient = variableSymbol.allDeclsHaveFlag(8 /* Ambient */); - var isAmbientOrPrevIsAmbient = prevIsAmbient || (variableDeclaration.flags & 8 /* Ambient */) !== 0; - var prevDecl = variableSymbol.getDeclarations()[0]; - var prevParentDecl = prevDecl.getParentDecl(); - var bothAreGlobal = parentDecl && (parentDecl.kind === 1 /* Script */) && (prevParentDecl.kind === 1 /* Script */); - var shareParent = bothAreGlobal || prevDecl.getParentDecl() === variableDeclaration.getParentDecl(); - var prevIsParam = shareParent && prevKind === 2048 /* Parameter */ && declKind == 512 /* Variable */; - - var acceptableRedeclaration = prevIsParam || (isImplicit && ((!isEnumValue && !isClassConstructorVariable && prevIsFunction) || ((isModuleValue || isEnumValue) && (prevIsModuleValue || prevIsEnum)) || (isClassConstructorVariable && prevIsModuleValue && isAmbientOrPrevIsAmbient) || (isModuleValue && prevIsClassConstructorVariable))); - - if (acceptableRedeclaration && (prevIsClassConstructorVariable || prevIsFunction) && !isAmbientOrPrevIsAmbient) { - if (prevDecl.fileName() !== variableDeclaration.fileName()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(variableDeclaration, TypeScript.DiagnosticCode.Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2, [declName, declName, prevDecl.fileName()])); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } - } - - if (!acceptableRedeclaration || prevIsParam) { - if (!prevIsParam && (isImplicit || prevIsImplicit || TypeScript.hasFlag(prevKind, 1032192 /* SomeFunction */)) || !shareParent) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(nameAST, variableDeclaration.getDisplayName(), variableSymbol.getDeclarations()[0].ast()); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } else { - this.checkThatExportsMatch(variableDeclaration, variableSymbol); - variableSymbol = null; - parentHadSymbol = false; - } - } - - if (variableSymbol && !(variableSymbol.type && variableSymbol.type.isError()) && !this.checkThatExportsMatch(variableDeclaration, variableSymbol, !(isModuleValue && prevIsModuleValue))) { - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } - } - - if ((declFlags & 118784 /* ImplicitVariable */) === 0) { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - if (!parent && parentDecl.kind === 1 /* Script */) { - this.semanticInfoChain.cacheGlobalSymbol(variableSymbol, declKind); - } - } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - this.semanticInfoChain.setSymbolForAST(nameAST, variableSymbol); - this.semanticInfoChain.setSymbolForAST(varDeclAST, variableSymbol); - } else if (!parentHadSymbol) { - if (isClassConstructorVariable) { - var classTypeSymbol = variableSymbol; - - if (parent) { - members = parent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].kind === 8 /* Class */)) { - classTypeSymbol = members[i]; - break; - } - } - } - - if (!classTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - classTypeSymbol = containerDecl.getSymbol(); - if (!classTypeSymbol) { - classTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 58728795 /* SomeType */, variableDeclaration); - } - } - - if (classTypeSymbol && (classTypeSymbol.kind !== 8 /* Class */)) { - classTypeSymbol = null; - } - - if (classTypeSymbol && classTypeSymbol.isClass()) { - variableSymbol = classTypeSymbol.getConstructorMethod(); - variableDeclaration.setSymbol(variableSymbol); - - decls = classTypeSymbol.getDeclarations(); - - if (decls.length) { - decl = decls[decls.length - 1]; - ast = this.semanticInfoChain.getASTForDecl(decl); - } - } else { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; - } - } else if (declFlags & 102400 /* SomeInitializedModule */) { - var moduleContainerTypeSymbol = null; - var moduleParent = this.getParent(variableDeclaration); - - if (moduleParent) { - members = moduleParent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].isContainer())) { - moduleContainerTypeSymbol = members[i]; - break; - } - } - } - - if (!moduleContainerTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - moduleContainerTypeSymbol = containerDecl.getSymbol(); - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 164 /* SomeContainer */, variableDeclaration); - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 64 /* Enum */, variableDeclaration); - } - } - } - - if (moduleContainerTypeSymbol && (!moduleContainerTypeSymbol.isContainer())) { - moduleContainerTypeSymbol = null; - } - - if (moduleContainerTypeSymbol) { - variableSymbol = moduleContainerTypeSymbol.getInstanceSymbol(); - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - variableSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - } - - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); - } - variableDeclaration.setSymbol(variableSymbol); - } else { - TypeScript.Debug.assert(false, "Attempted to bind invalid implicit variable symbol"); - } - } - } else { - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); - } - variableDeclaration.setSymbol(variableSymbol); - } - - var containerDecl = variableDeclaration.getContainerDecl(); - if (variableSymbol && variableSymbol.type && containerDecl && !variableSymbol.type.hasDeclaration(containerDecl)) { - variableSymbol.type.addDeclaration(containerDecl); - } - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addMember(variableSymbol); - } else { - parent.addEnclosedNonMember(variableSymbol); - } - } - }; - - PullSymbolBinder.prototype.bindCatchVariableToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var identifier = this.semanticInfoChain.getASTForDecl(variableDeclaration); - - var declName = variableDeclaration.name; - - var variableSymbol = new TypeScript.PullSymbol(declName, declKind); - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; - - this.semanticInfoChain.setSymbolForAST(identifier, variableSymbol); - }; - - PullSymbolBinder.prototype.bindEnumMemberDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - var propDeclAST = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - var propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(propDeclAST.propertyName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); - } - - if (propertySymbol) { - parentHadSymbol = true; - } - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); - } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(propDeclAST.propertyName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(propDeclAST, propertySymbol); - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); - } - }; - - PullSymbolBinder.prototype.bindPropertyDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - - var ast = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - var astName = ast.kind() === 136 /* MemberVariableDeclaration */ ? ast.variableDeclarator.propertyName : ast.kind() === 141 /* PropertySignature */ ? ast.propertyName : ast.kind() === 242 /* Parameter */ ? ast.identifier : ast.propertyName; - - var isStatic = false; - var isOptional = false; - - var propertySymbol = null; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - if (TypeScript.hasFlag(declFlags, 128 /* Optional */)) { - isOptional = true; - } - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; - } - - propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(astName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); - } - - if (propertySymbol) { - parentHadSymbol = true; - } - - var classTypeSymbol; - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); - } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(astName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(ast, propertySymbol); - - if (isOptional) { - propertySymbol.isOptional = true; - } - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); - } - }; - - PullSymbolBinder.prototype.bindParameterSymbols = function (functionDeclaration, parameterList, funcType, signatureSymbol) { - var parameters = []; - var params = TypeScript.createIntrinsicsObject(); - var funcDecl = this.semanticInfoChain.getDeclForAST(functionDeclaration); - - if (parameterList) { - for (var i = 0, n = parameterList.length; i < n; i++) { - var argDecl = parameterList.astAt(i); - var id = parameterList.identifierAt(i); - var decl = this.semanticInfoChain.getDeclForAST(argDecl); - var isProperty = TypeScript.hasFlag(decl.flags, 8388608 /* PropertyParameter */); - var parameterSymbol = new TypeScript.PullSymbol(id.valueText(), 2048 /* Parameter */); - - if ((i === (n - 1)) && parameterList.lastParameterIsRest()) { - parameterSymbol.isVarArg = true; - } - - if (params[id.valueText()]) { - this.semanticInfoChain.addDiagnosticFromAST(argDecl, TypeScript.DiagnosticCode.Duplicate_identifier_0, [id.text()]); - } else { - params[id.valueText()] = true; - } - - if (decl) { - var isParameterOptional = false; - - if (isProperty) { - decl.ensureSymbolIsBound(); - var valDecl = decl.getValueDecl(); - - if (valDecl) { - isParameterOptional = TypeScript.hasFlag(valDecl.flags, 128 /* Optional */); - - valDecl.setSymbol(parameterSymbol); - parameterSymbol.addDeclaration(valDecl); - } - } else { - isParameterOptional = TypeScript.hasFlag(decl.flags, 128 /* Optional */); - - parameterSymbol.addDeclaration(decl); - decl.setSymbol(parameterSymbol); - } - - parameterSymbol.isOptional = isParameterOptional; - } - - signatureSymbol.addParameter(parameterSymbol, parameterSymbol.isOptional); - - if (signatureSymbol.isDefinition()) { - funcType.addEnclosedNonMember(parameterSymbol); - } - } - } - }; - - PullSymbolBinder.prototype.bindFunctionDeclarationToPullSymbol = function (functionDeclaration) { - var declKind = functionDeclaration.kind; - var declFlags = functionDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(functionDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = functionDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(functionDeclaration, true); - - var parentDecl = functionDeclaration.getParentDecl(); - var parentHadSymbol = false; - - var functionSymbol = null; - var functionTypeSymbol = null; - - functionSymbol = this.getExistingSymbol(functionDeclaration, 68147712 /* SomeValue */, parent); - - if (functionSymbol) { - var acceptableRedeclaration; - - if (functionSymbol.kind === 16384 /* Function */) { - acceptableRedeclaration = isSignature || functionSymbol.allDeclsHaveFlag(2048 /* Signature */); - } else { - var isCurrentDeclAmbient = TypeScript.hasFlag(functionDeclaration.flags, 8 /* Ambient */); - acceptableRedeclaration = TypeScript.ArrayUtilities.all(functionSymbol.getDeclarations(), function (decl) { - var isInitializedModuleOrAmbientDecl = TypeScript.hasFlag(decl.flags, 32768 /* InitializedModule */) && (isCurrentDeclAmbient || TypeScript.hasFlag(decl.flags, 8 /* Ambient */)); - var isSignature = TypeScript.hasFlag(decl.flags, 2048 /* Signature */); - return isInitializedModuleOrAmbientDecl || isSignature; - }); - } - - if (!acceptableRedeclaration) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.identifier, functionDeclaration.getDisplayName(), functionSymbol.getDeclarations()[0].ast()); - functionSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(funcName); - } - } - - if (functionSymbol) { - functionTypeSymbol = functionSymbol.type; - parentHadSymbol = true; - } - - if (!functionSymbol) { - functionSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - } - - if (!functionTypeSymbol) { - functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionSymbol.type = functionTypeSymbol; - functionTypeSymbol.setFunctionSymbol(functionSymbol); - } - - functionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionDeclaration); - functionTypeSymbol.addDeclaration(functionDeclaration); - - this.semanticInfoChain.setSymbolForAST(funcDeclAST.identifier, functionSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, functionSymbol); - - if (parent && !parentHadSymbol) { - if (isExported) { - parent.addMember(functionSymbol); - } else { - parent.addEnclosedNonMember(functionSymbol); - } - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(functionDeclaration); - functionDeclaration.setSignatureSymbol(signature); - - if (TypeScript.lastParameterIsRest(funcDeclAST.callSignature.parameterList)) { - signature.hasVarArgs = true; - } - - var funcDecl = this.semanticInfoChain.getASTForDecl(functionDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), functionTypeSymbol, signature); - - var typeParameters = functionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionExpressionToPullSymbol = function (functionExpressionDeclaration) { - var declKind = functionExpressionDeclaration.kind; - var declFlags = functionExpressionDeclaration.flags; - var ast = this.semanticInfoChain.getASTForDecl(functionExpressionDeclaration); - - var parameters = ast.kind() === 219 /* SimpleArrowFunctionExpression */ ? TypeScript.ASTHelpers.parametersFromIdentifier(ast.identifier) : TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(ast)); - var funcExpAST = ast; - - var functionName = declKind === 131072 /* FunctionExpression */ ? functionExpressionDeclaration.getFunctionExpressionName() : functionExpressionDeclaration.name; - var functionSymbol = new TypeScript.PullSymbol(functionName, declKind); - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionTypeSymbol.setFunctionSymbol(functionSymbol); - - functionSymbol.type = functionTypeSymbol; - - functionExpressionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionExpressionDeclaration); - functionTypeSymbol.addDeclaration(functionExpressionDeclaration); - - var name = funcExpAST.kind() === 222 /* FunctionExpression */ ? funcExpAST.identifier : funcExpAST.kind() === 241 /* FunctionPropertyAssignment */ ? funcExpAST.propertyName : null; - if (name) { - this.semanticInfoChain.setSymbolForAST(name, functionSymbol); - } - - this.semanticInfoChain.setSymbolForAST(funcExpAST, functionSymbol); - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, true); - - if (parameters.lastParameterIsRest()) { - signature.hasVarArgs = true; - } - - var typeParameters = functionExpressionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(functionExpressionDeclaration); - functionExpressionDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcExpAST, parameters, functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionTypeDeclarationToPullSymbol = function (functionTypeDeclaration) { - var declKind = functionTypeDeclaration.kind; - var declFlags = functionTypeDeclaration.flags; - var funcTypeAST = this.semanticInfoChain.getASTForDecl(functionTypeDeclaration); - - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - - functionTypeDeclaration.setSymbol(functionTypeSymbol); - functionTypeSymbol.addDeclaration(functionTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(funcTypeAST, functionTypeSymbol); - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - if (TypeScript.lastParameterIsRest(funcTypeAST.parameterList)) { - signature.hasVarArgs = true; - } - - var typeParameters = functionTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(functionTypeDeclaration); - functionTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcTypeAST, TypeScript.ASTHelpers.parametersFromParameterList(funcTypeAST.parameterList), functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindMethodDeclarationToPullSymbol = function (methodDeclaration) { - var declKind = methodDeclaration.kind; - var declFlags = methodDeclaration.flags; - var methodAST = this.semanticInfoChain.getASTForDecl(methodDeclaration); - - var isPrivate = (declFlags & 2 /* Private */) !== 0; - var isStatic = (declFlags & 16 /* Static */) !== 0; - var isOptional = (declFlags & 128 /* Optional */) !== 0; - - var methodName = methodDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(methodDeclaration, true); - var parentHadSymbol = false; - - var methodSymbol = null; - var methodTypeSymbol = null; - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; - } - - methodSymbol = parent.findMember(methodName, false); - - if (methodSymbol && (methodSymbol.kind !== 65536 /* Method */ || (!isSignature && !methodSymbol.allDeclsHaveFlag(2048 /* Signature */)))) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(methodAST, methodDeclaration.getDisplayName(), methodSymbol.getDeclarations()[0].ast()); - methodSymbol = null; - } - - if (methodSymbol) { - methodTypeSymbol = methodSymbol.type; - parentHadSymbol = true; - } - - if (!methodSymbol) { - methodSymbol = new TypeScript.PullSymbol(methodName, 65536 /* Method */); - } - - if (!methodTypeSymbol) { - methodTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - methodSymbol.type = methodTypeSymbol; - methodTypeSymbol.setFunctionSymbol(methodSymbol); - } - - methodDeclaration.setSymbol(methodSymbol); - methodSymbol.addDeclaration(methodDeclaration); - methodTypeSymbol.addDeclaration(methodDeclaration); - - var nameAST = methodAST.kind() === 135 /* MemberFunctionDeclaration */ ? methodAST.propertyName : methodAST.propertyName; - - TypeScript.Debug.assert(nameAST); - - this.semanticInfoChain.setSymbolForAST(nameAST, methodSymbol); - this.semanticInfoChain.setSymbolForAST(methodAST, methodSymbol); - - if (isOptional) { - methodSymbol.isOptional = true; - } - - if (!parentHadSymbol) { - parent.addMember(methodSymbol); - } - - var sigKind = 1048576 /* CallSignature */; - - var signature = new TypeScript.PullSignatureSymbol(sigKind, !isSignature); - - var parameterList = TypeScript.ASTHelpers.getParameterList(methodAST); - if (TypeScript.lastParameterIsRest(parameterList)) { - signature.hasVarArgs = true; - } - - var typeParameters = methodDeclaration.getTypeParameters(); - var typeParameter; - var typeParameterName; - var typeParameterAST; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterName = typeParameters[i].name; - typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameters[i]); - - typeParameter = signature.findTypeParameter(typeParameterName); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameterName); - signature.addTypeParameter(typeParameter); - } else { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(methodDeclaration); - methodDeclaration.setSignatureSymbol(signature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(methodDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), methodTypeSymbol, signature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(signature, methodTypeSymbol.getOwnCallSignatures()); - methodTypeSymbol.insertCallSignatureAtIndex(signature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindStaticPrototypePropertyOfClass = function (classAST, classTypeSymbol, constructorTypeSymbol) { - var prototypeStr = "prototype"; - - var prototypeSymbol = constructorTypeSymbol.findMember(prototypeStr, false); - if (prototypeSymbol && !prototypeSymbol.getIsSynthesized()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(prototypeSymbol.getDeclarations()[0], TypeScript.DiagnosticCode.Duplicate_identifier_0, [prototypeSymbol.getDisplayName()])); - } - - if (!prototypeSymbol || !prototypeSymbol.getIsSynthesized()) { - var prototypeDecl = new TypeScript.PullSynthesizedDecl(prototypeStr, prototypeStr, 4096 /* Property */, 4 /* Public */ | 16 /* Static */, constructorTypeSymbol.getDeclarations()[0], this.semanticInfoChain); - - prototypeSymbol = new TypeScript.PullSymbol(prototypeStr, 4096 /* Property */); - prototypeSymbol.setIsSynthesized(); - prototypeSymbol.addDeclaration(prototypeDecl); - prototypeSymbol.type = classTypeSymbol; - constructorTypeSymbol.addMember(prototypeSymbol); - - if (prototypeSymbol.type && prototypeSymbol.type.isGeneric()) { - var resolver = this.semanticInfoChain.getResolver(); - prototypeSymbol.type = resolver.instantiateTypeToAny(prototypeSymbol.type, new TypeScript.PullTypeResolutionContext(resolver)); - } - prototypeSymbol.setResolved(); - } - }; - - PullSymbolBinder.prototype.bindConstructorDeclarationToPullSymbol = function (constructorDeclaration) { - var declKind = constructorDeclaration.kind; - var declFlags = constructorDeclaration.flags; - var constructorAST = this.semanticInfoChain.getASTForDecl(constructorDeclaration); - - var constructorName = constructorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(constructorDeclaration, true); - - var parentHadSymbol = false; - - var constructorSymbol = parent.getConstructorMethod(); - var constructorTypeSymbol = null; - - if (constructorSymbol && (constructorSymbol.kind !== 32768 /* ConstructorMethod */ || (!isSignature && constructorSymbol.type && constructorSymbol.type.hasOwnConstructSignatures()))) { - var hasDefinitionSignature = false; - var constructorSigs = constructorSymbol.type.getOwnDeclaredConstructSignatures(); - - for (var i = 0; i < constructorSigs.length; i++) { - if (!constructorSigs[i].anyDeclHasFlag(2048 /* Signature */)) { - hasDefinitionSignature = true; - break; - } - } - - if (hasDefinitionSignature) { - this.semanticInfoChain.addDiagnosticFromAST(constructorAST, TypeScript.DiagnosticCode.Multiple_constructor_implementations_are_not_allowed); - - constructorSymbol = null; - } - } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(constructorName, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - } - - parent.setConstructorMethod(constructorSymbol); - constructorSymbol.type = constructorTypeSymbol; - - constructorDeclaration.setSymbol(constructorSymbol); - constructorSymbol.addDeclaration(constructorDeclaration); - constructorTypeSymbol.addDeclaration(constructorDeclaration); - constructorSymbol.setIsSynthesized(false); - this.semanticInfoChain.setSymbolForAST(constructorAST, constructorSymbol); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */, !isSignature); - constructSignature.returnType = parent; - constructSignature.addTypeParametersFromReturnType(); - - constructSignature.addDeclaration(constructorDeclaration); - constructorDeclaration.setSignatureSymbol(constructSignature); - - this.bindParameterSymbols(constructorAST, TypeScript.ASTHelpers.parametersFromParameterList(constructorAST.callSignature.parameterList), constructorTypeSymbol, constructSignature); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; - } - - constructorTypeSymbol.appendConstructSignature(constructSignature); - }; - - PullSymbolBinder.prototype.bindConstructSignatureDeclarationToPullSymbol = function (constructSignatureDeclaration) { - var parent = this.getParent(constructSignatureDeclaration, true); - var constructorAST = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; - } - - var typeParameters = constructSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - constructSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - constructSignature.addDeclaration(constructSignatureDeclaration); - constructSignatureDeclaration.setSignatureSymbol(constructSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), null, constructSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration), constructSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(constructSignature, parent.getOwnDeclaredConstructSignatures()); - parent.insertConstructSignatureAtIndex(constructSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindCallSignatureDeclarationToPullSymbol = function (callSignatureDeclaration) { - var parent = this.getParent(callSignatureDeclaration, true); - var callSignatureAST = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - - var callSignature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */); - - if (TypeScript.lastParameterIsRest(callSignatureAST.parameterList)) { - callSignature.hasVarArgs = true; - } - - var typeParameters = callSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = callSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - callSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - callSignature.addDeclaration(callSignatureDeclaration); - callSignatureDeclaration.setSignatureSymbol(callSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), null, callSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(callSignatureDeclaration), callSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(callSignature, parent.getOwnCallSignatures()); - parent.insertCallSignatureAtIndex(callSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindIndexSignatureDeclarationToPullSymbol = function (indexSignatureDeclaration) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - - indexSignature.addDeclaration(indexSignatureDeclaration); - indexSignatureDeclaration.setSignatureSymbol(indexSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter), null, indexSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration), indexSignature); - - var parent = this.getParent(indexSignatureDeclaration); - parent.addIndexSignature(indexSignature); - indexSignature.setContainer(parent); - }; - - PullSymbolBinder.prototype.bindGetAccessorDeclarationToPullSymbol = function (getAccessorDeclaration) { - var declKind = getAccessorDeclaration.kind; - var declFlags = getAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(getAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = getAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - var parent = this.getParent(getAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var getterSymbol = null; - var getterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; - } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, getAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - getterSymbol = accessorSymbol.getGetter(); - - if (getterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Getter_0_already_declared, [getAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - getterSymbol = null; - } - } - } - - if (accessorSymbol) { - parentHadSymbol = true; - } - - if (accessorSymbol && getterSymbol) { - getterTypeSymbol = getterSymbol.type; - } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); - } - - if (!getterSymbol) { - getterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - getterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - getterTypeSymbol.setFunctionSymbol(getterSymbol); - - getterSymbol.type = getterTypeSymbol; - - accessorSymbol.setGetter(getterSymbol); - } - - getAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(getAccessorDeclaration); - getterSymbol.addDeclaration(getAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, getterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(getAccessorDeclaration); - getAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), getterTypeSymbol, signature); - - getterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindSetAccessorDeclarationToPullSymbol = function (setAccessorDeclaration) { - var declKind = setAccessorDeclaration.kind; - var declFlags = setAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(setAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = setAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - var parent = this.getParent(setAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var setterSymbol = null; - var setterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; - } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, setAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - setterSymbol = accessorSymbol.getSetter(); - - if (setterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Setter_0_already_declared, [setAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - setterSymbol = null; - } - } - } - - if (accessorSymbol) { - parentHadSymbol = true; - - if (setterSymbol) { - setterTypeSymbol = setterSymbol.type; - } - } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); - } - - if (!setterSymbol) { - setterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - setterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - setterTypeSymbol.setFunctionSymbol(setterSymbol); - - setterSymbol.type = setterTypeSymbol; - - accessorSymbol.setSetter(setterSymbol); - } - - setAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(setAccessorDeclaration); - setterSymbol.addDeclaration(setAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, setterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(setAccessorDeclaration); - setAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), setterTypeSymbol, signature); - - setterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.getDeclsToBind = function (decl) { - var decls; - switch (decl.kind) { - case 64 /* Enum */: - case 32 /* DynamicModule */: - case 4 /* Container */: - case 16 /* Interface */: - decls = this.findDeclsInContext(decl, decl.kind, true); - break; - - case 512 /* Variable */: - case 16384 /* Function */: - case 65536 /* Method */: - case 32768 /* ConstructorMethod */: - decls = this.findDeclsInContext(decl, decl.kind, false); - break; - - default: - decls = [decl]; - } - TypeScript.Debug.assert(decls && decls.length > 0); - TypeScript.Debug.assert(TypeScript.ArrayUtilities.contains(decls, decl)); - return decls; - }; - - PullSymbolBinder.prototype.shouldBindDeclaration = function (decl) { - return !decl.hasBeenBound() && this.declsBeingBound.indexOf(decl.declID) < 0; - }; - - PullSymbolBinder.prototype.bindDeclToPullSymbol = function (decl) { - if (this.shouldBindDeclaration(decl)) { - this.bindAllDeclsToPullSymbol(decl); - } - }; - - PullSymbolBinder.prototype.bindAllDeclsToPullSymbol = function (askedDecl) { - var allDecls = this.getDeclsToBind(askedDecl); - for (var i = 0; i < allDecls.length; i++) { - var decl = allDecls[i]; - - if (this.shouldBindDeclaration(decl)) { - this.bindSingleDeclToPullSymbol(decl); - } - } - }; - - PullSymbolBinder.prototype.bindSingleDeclToPullSymbol = function (decl) { - this.declsBeingBound.push(decl.declID); - - switch (decl.kind) { - case 1 /* Script */: - var childDecls = decl.getChildDecls(); - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); - } - break; - - case 64 /* Enum */: - this.bindEnumDeclarationToPullSymbol(decl); - break; - - case 32 /* DynamicModule */: - case 4 /* Container */: - this.bindModuleDeclarationToPullSymbol(decl); - break; - - case 16 /* Interface */: - this.bindInterfaceDeclarationToPullSymbol(decl); - break; - - case 8 /* Class */: - this.bindClassDeclarationToPullSymbol(decl); - break; - - case 16384 /* Function */: - this.bindFunctionDeclarationToPullSymbol(decl); - break; - - case 512 /* Variable */: - this.bindVariableDeclarationToPullSymbol(decl); - break; - - case 1024 /* CatchVariable */: - this.bindCatchVariableToPullSymbol(decl); - break; - - case 67108864 /* EnumMember */: - this.bindEnumMemberDeclarationToPullSymbol(decl); - break; - - case 4096 /* Property */: - this.bindPropertyDeclarationToPullSymbol(decl); - break; - - case 65536 /* Method */: - this.bindMethodDeclarationToPullSymbol(decl); - break; - - case 32768 /* ConstructorMethod */: - this.bindConstructorDeclarationToPullSymbol(decl); - break; - - case 1048576 /* CallSignature */: - this.bindCallSignatureDeclarationToPullSymbol(decl); - break; - - case 2097152 /* ConstructSignature */: - this.bindConstructSignatureDeclarationToPullSymbol(decl); - break; - - case 4194304 /* IndexSignature */: - this.bindIndexSignatureDeclarationToPullSymbol(decl); - break; - - case 262144 /* GetAccessor */: - this.bindGetAccessorDeclarationToPullSymbol(decl); - break; - - case 524288 /* SetAccessor */: - this.bindSetAccessorDeclarationToPullSymbol(decl); - break; - - case 8388608 /* ObjectType */: - this.bindObjectTypeDeclarationToPullSymbol(decl); - break; - - case 16777216 /* FunctionType */: - this.bindFunctionTypeDeclarationToPullSymbol(decl); - break; - - case 33554432 /* ConstructorType */: - this.bindConstructorTypeDeclarationToPullSymbol(decl); - break; - - case 131072 /* FunctionExpression */: - this.bindFunctionExpressionToPullSymbol(decl); - break; - - case 128 /* TypeAlias */: - this.bindImportDeclaration(decl); - break; - - case 2048 /* Parameter */: - case 8192 /* TypeParameter */: - decl.getParentDecl().getSymbol(); - break; - - case 268435456 /* CatchBlock */: - case 134217728 /* WithBlock */: - break; - - default: - TypeScript.CompilerDiagnostics.assert(false, "Unrecognized type declaration"); - } - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(this.declsBeingBound) === decl.declID); - this.declsBeingBound.pop(); - }; - return PullSymbolBinder; - })(); - TypeScript.PullSymbolBinder = PullSymbolBinder; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullHelpers) { - function diagnosticFromDecl(decl, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - var ast = decl.ast(); - return decl.semanticInfoChain.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations); - } - PullHelpers.diagnosticFromDecl = diagnosticFromDecl; - - function resolveDeclaredSymbolToUseType(symbol) { - if (symbol.isSignature()) { - if (!symbol.returnType) { - symbol._resolveDeclaredSymbol(); - } - } else if (!symbol.type) { - symbol._resolveDeclaredSymbol(); - } - } - PullHelpers.resolveDeclaredSymbolToUseType = resolveDeclaredSymbolToUseType; - - function getSignatureForFuncDecl(functionDecl) { - var funcDecl = functionDecl.ast(); - var funcSymbol = functionDecl.getSymbol(); - - if (!funcSymbol) { - funcSymbol = functionDecl.getSignatureSymbol(); - } - - var functionSignature = null; - var typeSymbolWithAllSignatures = null; - if (funcSymbol.isSignature()) { - functionSignature = funcSymbol; - var parent = functionDecl.getParentDecl(); - typeSymbolWithAllSignatures = parent.getSymbol().type; - } else { - functionSignature = functionDecl.getSignatureSymbol(); - typeSymbolWithAllSignatures = funcSymbol.type; - } - var signatures; - - if (funcDecl.kind() === 137 /* ConstructorDeclaration */ || functionDecl.kind === 2097152 /* ConstructSignature */) { - signatures = typeSymbolWithAllSignatures.getConstructSignatures(); - } else if (functionDecl.kind === 4194304 /* IndexSignature */) { - signatures = typeSymbolWithAllSignatures.getIndexSignatures(); - } else { - signatures = typeSymbolWithAllSignatures.getCallSignatures(); - } - - return { - signature: functionSignature, - allSignatures: signatures - }; - } - PullHelpers.getSignatureForFuncDecl = getSignatureForFuncDecl; - - function getAccessorSymbol(getterOrSetter, semanticInfoChain) { - var functionDecl = semanticInfoChain.getDeclForAST(getterOrSetter); - var getterOrSetterSymbol = functionDecl.getSymbol(); - - return getterOrSetterSymbol; - } - PullHelpers.getAccessorSymbol = getAccessorSymbol; - - function getGetterAndSetterFunction(funcDecl, semanticInfoChain) { - var accessorSymbol = PullHelpers.getAccessorSymbol(funcDecl, semanticInfoChain); - var result = { - getter: null, - setter: null - }; - var getter = accessorSymbol.getGetter(); - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - result.getter = semanticInfoChain.getASTForDecl(getterDecl); - } - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - result.setter = semanticInfoChain.getASTForDecl(setterDecl); - } - - return result; - } - PullHelpers.getGetterAndSetterFunction = getGetterAndSetterFunction; - - function symbolIsEnum(source) { - return source && (source.kind & (64 /* Enum */ | 67108864 /* EnumMember */)) !== 0; - } - PullHelpers.symbolIsEnum = symbolIsEnum; - - function symbolIsModule(symbol) { - return symbol && (symbol.kind === 4 /* Container */ || isOneDeclarationOfKind(symbol, 4 /* Container */)); - } - PullHelpers.symbolIsModule = symbolIsModule; - - function isOneDeclarationOfKind(symbol, kind) { - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (decls[i].kind === kind) { - return true; - } - } - - return false; - } - - function isNameNumeric(name) { - return isFinite(+name); - } - PullHelpers.isNameNumeric = isNameNumeric; - - function typeSymbolsAreIdentical(a, b) { - if (a.isTypeReference() && !a.getIsSpecialized()) { - a = a.referencedTypeSymbol; - } - - if (b.isTypeReference() && !b.getIsSpecialized()) { - b = b.referencedTypeSymbol; - } - - return a === b; - } - PullHelpers.typeSymbolsAreIdentical = typeSymbolsAreIdentical; - - function getRootType(type) { - var rootType = type.getRootSymbol(); - - while (true) { - if (type === rootType) { - return type; - } - - type = rootType; - rootType = type.getRootSymbol(); - } - } - PullHelpers.getRootType = getRootType; - - function isSymbolLocal(symbol) { - var container = symbol.getContainer(); - if (container) { - var containerKind = container.kind; - if (containerKind & (1032192 /* SomeFunction */ | 16777216 /* FunctionType */)) { - return true; - } - - if (containerKind === 33554432 /* ConstructorType */ && !symbol.anyDeclHasFlag(16 /* Static */ | 1 /* Exported */)) { - return true; - } - } - - return false; - } - PullHelpers.isSymbolLocal = isSymbolLocal; - - function isExportedSymbolInClodule(symbol) { - var container = symbol.getContainer(); - return container && container.kind === 33554432 /* ConstructorType */ && symbolIsModule(container) && symbol.anyDeclHasFlag(1 /* Exported */); - } - PullHelpers.isExportedSymbolInClodule = isExportedSymbolInClodule; - - function isSymbolDeclaredInScopeChain(symbol, scopeSymbol) { - TypeScript.Debug.assert(symbol); - var symbolDeclarationScope = symbol.getContainer(); - - while (scopeSymbol) { - if (scopeSymbol === symbolDeclarationScope) { - return true; - } - - scopeSymbol = scopeSymbol.getContainer(); - } - - if (scopeSymbol === null && symbolDeclarationScope === null) { - return true; - } - - return false; - } - PullHelpers.isSymbolDeclaredInScopeChain = isSymbolDeclaredInScopeChain; - - - - function walkSignatureSymbol(signatureSymbol, walker) { - var continueWalk = true; - var parameters = signatureSymbol.parameters; - if (parameters) { - for (var i = 0; continueWalk && i < parameters.length; i++) { - continueWalk = walker.signatureParameterWalk(parameters[i]); - } - } - - if (continueWalk) { - continueWalk = walker.signatureReturnTypeWalk(signatureSymbol.returnType); - } - - return continueWalk; - } - - function walkPullTypeSymbolStructure(typeSymbol, walker) { - var continueWalk = true; - - var members = typeSymbol.getMembers(); - for (var i = 0; continueWalk && i < members.length; i++) { - continueWalk = walker.memberSymbolWalk(members[i]); - } - - if (continueWalk) { - var callSigantures = typeSymbol.getCallSignatures(); - for (var i = 0; continueWalk && i < callSigantures.length; i++) { - continueWalk = walker.callSignatureWalk(callSigantures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(callSigantures[i], walker); - } - } - } - - if (continueWalk) { - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; continueWalk && i < constructSignatures.length; i++) { - continueWalk = walker.constructSignatureWalk(constructSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(constructSignatures[i], walker); - } - } - } - - if (continueWalk) { - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; continueWalk && i < indexSignatures.length; i++) { - continueWalk = walker.indexSignatureWalk(indexSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(indexSignatures[i], walker); - } - } - } - } - PullHelpers.walkPullTypeSymbolStructure = walkPullTypeSymbolStructure; - - var OtherPullDeclsWalker = (function () { - function OtherPullDeclsWalker() { - this.currentlyWalkingOtherDecls = []; - } - OtherPullDeclsWalker.prototype.walkOtherPullDecls = function (currentDecl, otherDecls, callBack) { - if (otherDecls) { - var isAlreadyWalkingOtherDecl = TypeScript.ArrayUtilities.any(this.currentlyWalkingOtherDecls, function (inWalkingOtherDecl) { - return TypeScript.ArrayUtilities.contains(otherDecls, inWalkingOtherDecl); - }); - - if (!isAlreadyWalkingOtherDecl) { - this.currentlyWalkingOtherDecls.push(currentDecl); - for (var i = 0; i < otherDecls.length; i++) { - if (otherDecls[i] !== currentDecl) { - callBack(otherDecls[i]); - } - } - var currentlyWalkingOtherDeclsDecl = this.currentlyWalkingOtherDecls.pop(); - TypeScript.Debug.assert(currentlyWalkingOtherDeclsDecl == currentDecl); - } - } - }; - return OtherPullDeclsWalker; - })(); - PullHelpers.OtherPullDeclsWalker = OtherPullDeclsWalker; - })(TypeScript.PullHelpers || (TypeScript.PullHelpers = {})); - var PullHelpers = TypeScript.PullHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var WrapsTypeParameterCache = (function () { - function WrapsTypeParameterCache() { - this._wrapsTypeParameterCache = TypeScript.BitVector.getBitVector(true); - } - WrapsTypeParameterCache.prototype.getWrapsTypeParameter = function (typeParameterArgumentMap) { - var mapHasTypeParameterNotCached = false; - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - var cachedValue = this._wrapsTypeParameterCache.valueAt(typeParameterID); - if (cachedValue) { - return typeParameterID; - } - mapHasTypeParameterNotCached = mapHasTypeParameterNotCached || cachedValue === undefined; - } - } - - if (!mapHasTypeParameterNotCached) { - return 0; - } - - return undefined; - }; - - WrapsTypeParameterCache.prototype.setWrapsTypeParameter = function (typeParameterArgumentMap, wrappingTypeParameterID) { - if (wrappingTypeParameterID) { - this._wrapsTypeParameterCache.setValueAt(wrappingTypeParameterID, true); - } else { - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - this._wrapsTypeParameterCache.setValueAt(typeParameterID, false); - } - } - } - }; - return WrapsTypeParameterCache; - })(); - TypeScript.WrapsTypeParameterCache = WrapsTypeParameterCache; - - (function (PullInstantiationHelpers) { - var MutableTypeArgumentMap = (function () { - function MutableTypeArgumentMap(typeParameterArgumentMap) { - this.typeParameterArgumentMap = typeParameterArgumentMap; - this.createdDuplicateTypeArgumentMap = false; - } - MutableTypeArgumentMap.prototype.ensureTypeArgumentCopy = function () { - if (!this.createdDuplicateTypeArgumentMap) { - var passedInTypeArgumentMap = this.typeParameterArgumentMap; - this.typeParameterArgumentMap = []; - for (var typeParameterID in passedInTypeArgumentMap) { - if (passedInTypeArgumentMap.hasOwnProperty(typeParameterID)) { - this.typeParameterArgumentMap[typeParameterID] = passedInTypeArgumentMap[typeParameterID]; - } - } - this.createdDuplicateTypeArgumentMap = true; - } - }; - return MutableTypeArgumentMap; - })(); - PullInstantiationHelpers.MutableTypeArgumentMap = MutableTypeArgumentMap; - - function instantiateTypeArgument(resolver, symbol, mutableTypeParameterMap) { - if (symbol.getIsSpecialized()) { - var rootTypeArgumentMap = symbol.getTypeParameterArgumentMap(); - var newTypeArgumentMap = []; - var allowedTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - var typeArg = rootTypeArgumentMap[typeParameterID]; - if (typeArg) { - newTypeArgumentMap[typeParameterID] = resolver.instantiateType(typeArg, mutableTypeParameterMap.typeParameterArgumentMap); - } - } - - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - if (newTypeArgumentMap[typeParameterID] && mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] != newTypeArgumentMap[typeParameterID]) { - mutableTypeParameterMap.ensureTypeArgumentCopy(); - mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] = newTypeArgumentMap[typeParameterID]; - } - } - } - } - PullInstantiationHelpers.instantiateTypeArgument = instantiateTypeArgument; - - function cleanUpTypeArgumentMap(symbol, mutableTypeArgumentMap) { - var allowedToReferenceTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var typeParameterID in mutableTypeArgumentMap.typeParameterArgumentMap) { - if (mutableTypeArgumentMap.typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - if (!TypeScript.ArrayUtilities.any(allowedToReferenceTypeParameters, function (typeParameter) { - return typeParameter.pullSymbolID == typeParameterID; - })) { - mutableTypeArgumentMap.ensureTypeArgumentCopy(); - delete mutableTypeArgumentMap.typeParameterArgumentMap[typeParameterID]; - } - } - } - } - PullInstantiationHelpers.cleanUpTypeArgumentMap = cleanUpTypeArgumentMap; - - function getAllowedToReferenceTypeParametersFromDecl(decl) { - var allowedToReferenceTypeParameters = []; - - var allowedToUseDeclTypeParameters = false; - var getTypeParametersFromParentDecl = false; - - switch (decl.kind) { - case 65536 /* Method */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - allowedToUseDeclTypeParameters = true; - break; - } - - case 16777216 /* FunctionType */: - case 33554432 /* ConstructorType */: - case 2097152 /* ConstructSignature */: - case 1048576 /* CallSignature */: - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - allowedToUseDeclTypeParameters = true; - getTypeParametersFromParentDecl = true; - break; - - case 4096 /* Property */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - break; - } - - case 2048 /* Parameter */: - case 262144 /* GetAccessor */: - case 524288 /* SetAccessor */: - case 32768 /* ConstructorMethod */: - case 4194304 /* IndexSignature */: - case 8388608 /* ObjectType */: - case 256 /* ObjectLiteral */: - case 8192 /* TypeParameter */: - getTypeParametersFromParentDecl = true; - break; - - case 8 /* Class */: - case 16 /* Interface */: - allowedToUseDeclTypeParameters = true; - break; - } - - if (getTypeParametersFromParentDecl) { - allowedToReferenceTypeParameters = allowedToReferenceTypeParameters.concat(getAllowedToReferenceTypeParametersFromDecl(decl.getParentDecl())); - } - - if (allowedToUseDeclTypeParameters) { - var typeParameterDecls = decl.getTypeParameters(); - for (var i = 0; i < typeParameterDecls.length; i++) { - allowedToReferenceTypeParameters.push(typeParameterDecls[i].getSymbol()); - } - } - - return allowedToReferenceTypeParameters; - } - PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl = getAllowedToReferenceTypeParametersFromDecl; - - function createTypeParameterArgumentMap(typeParameters, typeArguments) { - return updateTypeParameterArgumentMap(typeParameters, typeArguments, {}); - } - PullInstantiationHelpers.createTypeParameterArgumentMap = createTypeParameterArgumentMap; - - function updateTypeParameterArgumentMap(typeParameters, typeArguments, typeParameterArgumentMap) { - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].getRootSymbol().pullSymbolID] = typeArguments[i]; - } - return typeParameterArgumentMap; - } - PullInstantiationHelpers.updateTypeParameterArgumentMap = updateTypeParameterArgumentMap; - - function updateMutableTypeParameterArgumentMap(typeParameters, typeArguments, mutableMap) { - for (var i = 0; i < typeParameters.length; i++) { - var typeParameterId = typeParameters[i].getRootSymbol().pullSymbolID; - if (mutableMap.typeParameterArgumentMap[typeParameterId] !== typeArguments[i]) { - mutableMap.ensureTypeArgumentCopy(); - mutableMap.typeParameterArgumentMap[typeParameterId] = typeArguments[i]; - } - } - } - PullInstantiationHelpers.updateMutableTypeParameterArgumentMap = updateMutableTypeParameterArgumentMap; - - function twoTypesAreInstantiationsOfSameNamedGenericType(type1, type2) { - var type1IsGeneric = type1.isGeneric() && type1.getTypeArguments() !== null; - var type2IsGeneric = type2.isGeneric() && type2.getTypeArguments() !== null; - - if (type1IsGeneric && type2IsGeneric) { - var type1Root = TypeScript.PullHelpers.getRootType(type1); - var type2Root = TypeScript.PullHelpers.getRootType(type2); - return type1Root === type2Root; - } - - return false; - } - PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType = twoTypesAreInstantiationsOfSameNamedGenericType; - })(TypeScript.PullInstantiationHelpers || (TypeScript.PullInstantiationHelpers = {})); - var PullInstantiationHelpers = TypeScript.PullInstantiationHelpers; -})(TypeScript || (TypeScript = {})); -if (Error) - Error.stackTraceLimit = 1000; - -var TypeScript; -(function (TypeScript) { - TypeScript.fileResolutionTime = 0; - TypeScript.fileResolutionIOTime = 0; - TypeScript.fileResolutionScanImportsTime = 0; - TypeScript.fileResolutionImportFileSearchTime = 0; - TypeScript.fileResolutionGetDefaultLibraryTime = 0; - TypeScript.sourceCharactersCompiled = 0; - TypeScript.syntaxTreeParseTime = 0; - TypeScript.syntaxDiagnosticsTime = 0; - TypeScript.astTranslationTime = 0; - TypeScript.typeCheckTime = 0; - - TypeScript.compilerResolvePathTime = 0; - TypeScript.compilerDirectoryNameTime = 0; - TypeScript.compilerDirectoryExistsTime = 0; - TypeScript.compilerFileExistsTime = 0; - - TypeScript.emitTime = 0; - TypeScript.emitWriteFileTime = 0; - - TypeScript.declarationEmitTime = 0; - TypeScript.declarationEmitIsExternallyVisibleTime = 0; - TypeScript.declarationEmitTypeSignatureTime = 0; - TypeScript.declarationEmitGetBoundDeclTypeTime = 0; - TypeScript.declarationEmitIsOverloadedCallSignatureTime = 0; - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime = 0; - TypeScript.declarationEmitGetBaseTypeTime = 0; - TypeScript.declarationEmitGetAccessorFunctionTime = 0; - TypeScript.declarationEmitGetTypeParameterSymbolTime = 0; - TypeScript.declarationEmitGetImportDeclarationSymbolTime = 0; - - TypeScript.ioHostResolvePathTime = 0; - TypeScript.ioHostDirectoryNameTime = 0; - TypeScript.ioHostCreateDirectoryStructureTime = 0; - TypeScript.ioHostWriteFileTime = 0; - - (function (EmitOutputResult) { - EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors"; - EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors"; - })(TypeScript.EmitOutputResult || (TypeScript.EmitOutputResult = {})); - var EmitOutputResult = TypeScript.EmitOutputResult; - - var EmitOutput = (function () { - function EmitOutput(emitOutputResult) { - if (typeof emitOutputResult === "undefined") { emitOutputResult = 0 /* Succeeded */; } - this.outputFiles = []; - this.emitOutputResult = emitOutputResult; - } - return EmitOutput; - })(); - TypeScript.EmitOutput = EmitOutput; - - (function (OutputFileType) { - OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; - OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; - OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; - })(TypeScript.OutputFileType || (TypeScript.OutputFileType = {})); - var OutputFileType = TypeScript.OutputFileType; - - var OutputFile = (function () { - function OutputFile(name, writeByteOrderMark, text, fileType, sourceMapEntries) { - if (typeof sourceMapEntries === "undefined") { sourceMapEntries = []; } - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.text = text; - this.fileType = fileType; - this.sourceMapEntries = sourceMapEntries; - } - return OutputFile; - })(); - TypeScript.OutputFile = OutputFile; - - var CompileResult = (function () { - function CompileResult() { - this.diagnostics = []; - this.outputFiles = []; - } - CompileResult.fromDiagnostics = function (diagnostics) { - var result = new CompileResult(); - result.diagnostics = diagnostics; - return result; - }; - - CompileResult.fromOutputFiles = function (outputFiles) { - var result = new CompileResult(); - result.outputFiles = outputFiles; - return result; - }; - return CompileResult; - })(); - TypeScript.CompileResult = CompileResult; - - var TypeScriptCompiler = (function () { - function TypeScriptCompiler(logger, _settings) { - if (typeof logger === "undefined") { logger = new TypeScript.NullLogger(); } - if (typeof _settings === "undefined") { _settings = TypeScript.ImmutableCompilationSettings.defaultSettings(); } - this.logger = logger; - this._settings = _settings; - this.semanticInfoChain = null; - this.semanticInfoChain = new TypeScript.SemanticInfoChain(this, logger); - } - TypeScriptCompiler.prototype.compilationSettings = function () { - return this._settings; - }; - - TypeScriptCompiler.prototype.setCompilationSettings = function (newSettings) { - var oldSettings = this._settings; - this._settings = newSettings; - - if (!compareDataObjects(oldSettings, newSettings)) { - this.semanticInfoChain.invalidate(oldSettings, newSettings); - } - }; - - TypeScriptCompiler.prototype.getDocument = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.semanticInfoChain.getDocument(fileName); - }; - - TypeScriptCompiler.prototype.cleanupSemanticCache = function () { - this.semanticInfoChain.invalidate(); - }; - - TypeScriptCompiler.prototype.addFile = function (fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - if (typeof referencedFiles === "undefined") { referencedFiles = []; } - fileName = TypeScript.switchToForwardSlashes(fileName); - - TypeScript.sourceCharactersCompiled += scriptSnapshot.getLength(); - - var document = TypeScript.Document.create(this, this.semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles); - - this.semanticInfoChain.addDocument(document); - }; - - TypeScriptCompiler.prototype.updateFile = function (fileName, scriptSnapshot, version, isOpen, textChangeRange) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - var updatedDocument = document.update(scriptSnapshot, version, isOpen, textChangeRange); - - this.semanticInfoChain.addDocument(updatedDocument); - }; - - TypeScriptCompiler.prototype.removeFile = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - this.semanticInfoChain.removeDocument(fileName); - }; - - TypeScriptCompiler.prototype.mapOutputFileName = function (document, emitOptions, extensionChanger) { - if (document.emitToOwnOutputFile()) { - var updatedFileName = document.fileName; - if (emitOptions.outputDirectory() !== "") { - updatedFileName = document.fileName.replace(emitOptions.commonDirectoryPath(), ""); - updatedFileName = emitOptions.outputDirectory() + updatedFileName; - } - return extensionChanger(updatedFileName, false); - } else { - return extensionChanger(emitOptions.sharedOutputFile(), true); - } - }; - - TypeScriptCompiler.prototype.writeByteOrderMarkForDocument = function (document) { - var printReason = false; - - if (document.emitToOwnOutputFile()) { - var result = document.byteOrderMark !== 0 /* None */; - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); - } - return result; - } else { - var fileNames = this.fileNames(); - - var result = false; - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = this.getDocument(fileNames[i]); - - if (document.isExternalModule()) { - continue; - } - - if (document.byteOrderMark !== 0 /* None */) { - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); - result = true; - } else { - return true; - } - } - } - - return result; - } - }; - - TypeScriptCompiler.mapToDTSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScript.getDeclareFilePath(fileName); - }; - - TypeScriptCompiler.prototype._shouldEmit = function (document) { - return !document.isDeclareFile(); - }; - - TypeScriptCompiler.prototype._shouldEmitDeclarations = function (document) { - if (!this.compilationSettings().generateDeclarationFiles()) { - return false; - } - - return this._shouldEmit(document); - }; - - TypeScriptCompiler.prototype.emitDocumentDeclarationsWorker = function (document, emitOptions, declarationEmitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmitDeclarations(document)); - - if (declarationEmitter) { - declarationEmitter.document = document; - } else { - var declareFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToDTSFileName); - declarationEmitter = new TypeScript.DeclarationEmitter(declareFileName, document, this, emitOptions, this.semanticInfoChain); - } - - declarationEmitter.emitDeclarations(sourceUnit); - return declarationEmitter; - }; - - TypeScriptCompiler.prototype._emitDocumentDeclarations = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmitDeclarations(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFile()); - } - } else { - sharedEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions, sharedEmitter); - } - } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAllDeclarations = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var sharedEmitter = null; - var fileNames = this.fileNames(); - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileNames[i]); - - sharedEmitter = this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, sharedEmitter); - } - - if (sharedEmitter) { - emitOutput.outputFiles.push(sharedEmitter.getOutputFile()); - } - - TypeScript.declarationEmitTime += new Date().getTime() - start; - - return emitOutput; - }; - - TypeScriptCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, null); - return emitOutput; - } else { - return this.emitAllDeclarations(resolvePath); - } - }; - - TypeScriptCompiler.prototype.canEmitDeclarations = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var document = this.getDocument(fileName); - return this._shouldEmitDeclarations(document); - }; - - TypeScriptCompiler.mapToFileNameExtension = function (extension, fileName, wholeFileNameReplaced) { - if (wholeFileNameReplaced) { - return fileName; - } else { - var splitFname = fileName.split("."); - splitFname.pop(); - return splitFname.join(".") + extension; - } - }; - - TypeScriptCompiler.mapToJSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScriptCompiler.mapToFileNameExtension(".js", fileName, wholeFileNameReplaced); - }; - - TypeScriptCompiler.prototype.emitDocumentWorker = function (document, emitOptions, emitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmit(document)); - - var typeScriptFileName = document.fileName; - if (!emitter) { - var javaScriptFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToJSFileName); - var outFile = new TypeScript.TextWriter(javaScriptFileName, this.writeByteOrderMarkForDocument(document), 0 /* JavaScript */); - - emitter = new TypeScript.Emitter(javaScriptFileName, outFile, emitOptions, this.semanticInfoChain); - - if (this.compilationSettings().mapSourceFiles()) { - var sourceMapFile = new TypeScript.TextWriter(javaScriptFileName + TypeScript.SourceMapper.MapFileExtension, false, 1 /* SourceMap */); - emitter.createSourceMapper(document, javaScriptFileName, outFile, sourceMapFile, emitOptions.resolvePath); - } - } else if (this.compilationSettings().mapSourceFiles()) { - emitter.setSourceMapperNewSourceFile(document); - } - - emitter.setDocument(document); - emitter.emitJavascript(sourceUnit, false); - - return emitter; - }; - - TypeScriptCompiler.prototype._emitDocument = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmit(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFiles()); - } - } else { - sharedEmitter = this.emitDocumentWorker(document, emitOptions, sharedEmitter); - } - } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAll = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var fileNames = this.fileNames(); - var sharedEmitter = null; - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileName); - - sharedEmitter = this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, sharedEmitter); - } - - if (sharedEmitter) { - emitOutput.outputFiles.push.apply(emitOutput.outputFiles, sharedEmitter.getOutputFiles()); - } - - TypeScript.emitTime += new Date().getTime() - start; - return emitOutput; - }; - - TypeScriptCompiler.prototype.emit = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, null); - return emitOutput; - } else { - return this.emitAll(resolvePath); - } - }; - - TypeScriptCompiler.prototype.compile = function (resolvePath, continueOnDiagnostics) { - if (typeof continueOnDiagnostics === "undefined") { continueOnDiagnostics = false; } - return new CompilerIterator(this, resolvePath, continueOnDiagnostics); - }; - - TypeScriptCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.getDocument(fileName).diagnostics(); - }; - - TypeScriptCompiler.prototype.getSyntaxTree = function (fileName) { - return this.getDocument(fileName).syntaxTree(); - }; - - TypeScriptCompiler.prototype.getSourceUnit = function (fileName) { - return this.getDocument(fileName).sourceUnit(); - }; - - TypeScriptCompiler.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - - var startTime = (new Date()).getTime(); - TypeScript.PullTypeResolver.typeCheck(this.compilationSettings(), this.semanticInfoChain, document); - var endTime = (new Date()).getTime(); - - TypeScript.typeCheckTime += endTime - startTime; - - var errors = this.semanticInfoChain.getDiagnostics(fileName); - - errors = TypeScript.ArrayUtilities.distinct(errors, TypeScript.Diagnostic.equals); - errors.sort(function (d1, d2) { - if (d1.fileName() < d2.fileName()) { - return -1; - } else if (d1.fileName() > d2.fileName()) { - return 1; - } - - if (d1.start() < d2.start()) { - return -1; - } else if (d1.start() > d2.start()) { - return 1; - } - - var code1 = TypeScript.diagnosticInformationMap[d1.diagnosticKey()].code; - var code2 = TypeScript.diagnosticInformationMap[d2.diagnosticKey()].code; - if (code1 < code2) { - return -1; - } else if (code1 > code2) { - return 1; - } - - return 0; - }); - - return errors; - }; - - TypeScriptCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - var emitDiagnostic = emitOptions.diagnostic(); - if (emitDiagnostic) { - return [emitDiagnostic]; - } - return TypeScript.sentinelEmptyArray; - }; - - TypeScriptCompiler.prototype.resolveAllFiles = function () { - var fileNames = this.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - this.getSemanticDiagnostics(fileNames[i]); - } - }; - - TypeScriptCompiler.prototype.getSymbolOfDeclaration = function (decl) { - if (!decl) { - return null; - } - - var resolver = this.semanticInfoChain.getResolver(); - var ast = this.semanticInfoChain.getASTForDecl(decl); - if (!ast) { - return null; - } - - var enclosingDecl = resolver.getEnclosingDecl(decl); - if (ast.kind() === 139 /* GetAccessor */ || ast.kind() === 140 /* SetAccessor */) { - return this.getSymbolOfDeclaration(enclosingDecl); - } - - return resolver.resolveAST(ast, false, new TypeScript.PullTypeResolutionContext(resolver)); - }; - - TypeScriptCompiler.prototype.extractResolutionContextFromAST = function (resolver, ast, document, propagateContextualTypes) { - var scriptName = document.fileName; - - var enclosingDecl = null; - var enclosingDeclAST = null; - var inContextuallyTypedAssignment = false; - var inWithBlock = false; - - var resolutionContext = new TypeScript.PullTypeResolutionContext(resolver); - - if (!ast) { - return null; - } - - var path = this.getASTPath(ast); - - for (var i = 0, n = path.length; i < n; i++) { - var current = path[i]; - - switch (current.kind()) { - case 222 /* FunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - if (propagateContextualTypes) { - resolver.resolveAST(current, true, resolutionContext); - } - break; - - case 136 /* MemberVariableDeclaration */: - var memberVariable = current; - inContextuallyTypedAssignment = memberVariable.variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, memberVariable, memberVariable.variableDeclarator.equalsValueClause); - break; - - case 225 /* VariableDeclarator */: - var variableDeclarator = current; - inContextuallyTypedAssignment = variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, variableDeclarator, variableDeclarator.equalsValueClause); - break; - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - if (propagateContextualTypes) { - var isNew = current.kind() === 216 /* ObjectCreationExpression */; - var callExpression = current; - var contextualType = null; - - if ((i + 2 < n) && callExpression.argumentList === path[i + 1] && callExpression.argumentList.arguments === path[i + 2]) { - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext, callResolutionResults); - } - - if (callResolutionResults.actualParametersContextTypeSymbols) { - var argExpression = path[i + 3]; - if (argExpression) { - for (var j = 0, m = callExpression.argumentList.arguments.nonSeparatorCount(); j < m; j++) { - if (callExpression.argumentList.arguments.nonSeparatorAt(j) === argExpression) { - var callContextualType = callResolutionResults.actualParametersContextTypeSymbols[j]; - if (callContextualType) { - contextualType = callContextualType; - break; - } - } - } - } - } - } else { - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext); - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 214 /* ArrayLiteralExpression */: - if (propagateContextualTypes) { - var contextualType = null; - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isArrayNamedTypeReference()) { - contextualType = currentContextualType.getElementType(); - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 215 /* ObjectLiteralExpression */: - if (propagateContextualTypes) { - var objectLiteralExpression = current; - var objectLiteralResolutionContext = new TypeScript.PullAdditionalObjectLiteralResolutionData(); - resolver.resolveObjectLiteralExpression(objectLiteralExpression, inContextuallyTypedAssignment, resolutionContext, objectLiteralResolutionContext); - - var memeberAST = (path[i + 1] && path[i + 1].kind() === 2 /* SeparatedList */) ? path[i + 2] : path[i + 1]; - if (memeberAST) { - var contextualType = null; - var memberDecls = objectLiteralExpression.propertyAssignments; - if (memberDecls && objectLiteralResolutionContext.membersContextTypeSymbols) { - for (var j = 0, m = memberDecls.nonSeparatorCount(); j < m; j++) { - if (memberDecls.nonSeparatorAt(j) === memeberAST) { - var memberContextualType = objectLiteralResolutionContext.membersContextTypeSymbols[j]; - if (memberContextualType) { - contextualType = memberContextualType; - break; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - } - - break; - - case 174 /* AssignmentExpression */: - if (propagateContextualTypes) { - var assignmentExpression = current; - var contextualType = null; - - if (path[i + 1] && path[i + 1] === assignmentExpression.right) { - var leftType = resolver.resolveAST(assignmentExpression.left, inContextuallyTypedAssignment, resolutionContext).type; - if (leftType) { - inContextuallyTypedAssignment = true; - contextualType = leftType; - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 220 /* CastExpression */: - var castExpression = current; - if (!(i + 1 < n && path[i + 1] === castExpression.type)) { - if (propagateContextualTypes) { - var contextualType = null; - var typeSymbol = resolver.resolveAST(castExpression, inContextuallyTypedAssignment, resolutionContext).type; - - if (typeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = typeSymbol; - } - - resolutionContext.pushNewContextualType(contextualType); - } - } - - break; - - case 150 /* ReturnStatement */: - if (propagateContextualTypes) { - var returnStatement = current; - var contextualType = null; - - if (enclosingDecl && (enclosingDecl.kind & 1032192 /* SomeFunction */)) { - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeSymbol = resolver.resolveTypeReference(typeAnnotation, resolutionContext); - if (returnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = returnTypeSymbol; - } - } else { - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = currentContextualTypeReturnTypeSymbol; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 122 /* ObjectType */: - if (propagateContextualTypes && TypeScript.isTypesOnlyLocation(current)) { - resolver.resolveAST(current, false, resolutionContext); - } - - break; - - case 163 /* WithStatement */: - inWithBlock = true; - break; - - case 146 /* Block */: - inContextuallyTypedAssignment = false; - break; - } - - var decl = this.semanticInfoChain.getDeclForAST(current); - if (decl) { - enclosingDecl = decl; - enclosingDeclAST = current; - } - } - - if (ast && ast.parent && ast.kind() === 11 /* IdentifierName */) { - if (ast.parent.kind() === 212 /* MemberAccessExpression */) { - if (ast.parent.name === ast) { - ast = ast.parent; - } - } else if (ast.parent.kind() === 121 /* QualifiedName */) { - if (ast.parent.right === ast) { - ast = ast.parent; - } - } - } - - return { - ast: ast, - enclosingDecl: enclosingDecl, - resolutionContext: resolutionContext, - inContextuallyTypedAssignment: inContextuallyTypedAssignment, - inWithBlock: inWithBlock - }; - }; - - TypeScriptCompiler.prototype.extractResolutionContextForVariable = function (inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, assigningAST, init) { - if (inContextuallyTypedAssignment) { - if (propagateContextualTypes) { - resolver.resolveAST(assigningAST, false, resolutionContext); - var varSymbol = this.semanticInfoChain.getSymbolForAST(assigningAST); - - var contextualType = null; - if (varSymbol && inContextuallyTypedAssignment) { - contextualType = varSymbol.type; - } - - resolutionContext.pushNewContextualType(contextualType); - - if (init) { - resolver.resolveAST(init, inContextuallyTypedAssignment, resolutionContext); - } - } - } - }; - - TypeScriptCompiler.prototype.getASTPath = function (ast) { - var result = []; - - while (ast) { - result.unshift(ast); - ast = ast.parent; - } - - return result; - }; - - TypeScriptCompiler.prototype.pullGetSymbolInformationFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - ast = context.ast; - var symbol = resolver.resolveAST(ast, context.inContextuallyTypedAssignment, context.resolutionContext); - - if (!symbol) { - TypeScript.Debug.assert(ast.kind() === 120 /* SourceUnit */, "No symbol was found for ast and ast was not source unit. Ast Kind: " + TypeScript.SyntaxKind[ast.kind()]); - return null; - } - - if (symbol.isTypeReference()) { - symbol = symbol.getReferencedTypeSymbol(); - } - - var aliasSymbol = this.semanticInfoChain.getAliasSymbolForAST(ast); - - return { - symbol: symbol, - aliasSymbol: aliasSymbol, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetCallInformationFromAST = function (ast, document) { - if (ast.kind() !== 213 /* InvocationExpression */ && ast.kind() !== 216 /* ObjectCreationExpression */) { - return null; - } - - var isNew = ast.kind() === 216 /* ObjectCreationExpression */; - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - - if (isNew) { - resolver.resolveObjectCreationExpression(ast, context.resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(ast, context.resolutionContext, callResolutionResults); - } - - return { - targetSymbol: callResolutionResults.targetSymbol, - resolvedSignatures: callResolutionResults.resolvedSignatures, - candidateSignature: callResolutionResults.candidateSignature, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl), - isConstructorCall: isNew - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleMemberSymbolsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var symbols = resolver.getVisibleMembersFromExpression(ast, context.enclosingDecl, context.resolutionContext); - if (!symbols) { - return null; - } - - return { - symbols: symbols, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleDeclsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, false); - if (!context || context.inWithBlock) { - return null; - } - - return resolver.getVisibleDecls(context.enclosingDecl); - }; - - TypeScriptCompiler.prototype.pullGetContextualMembersFromAST = function (ast, document) { - if (ast.kind() !== 215 /* ObjectLiteralExpression */) { - return null; - } - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var members = resolver.getVisibleContextSymbols(context.enclosingDecl, context.resolutionContext); - - return { - symbols: members, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var astForDecl = decl.ast(); - if (!astForDecl) { - return null; - } - - var astForDeclContext = this.extractResolutionContextFromAST(resolver, astForDecl, this.getDocument(astForDecl.fileName()), true); - if (!astForDeclContext) { - return null; - } - - var symbol = decl.getSymbol(); - resolver.resolveDeclaredSymbol(symbol, context.resolutionContext); - symbol.setUnresolved(); - - return { - symbol: symbol, - aliasSymbol: null, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.topLevelDeclaration = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.prototype.getDeclForAST = function (ast) { - return this.semanticInfoChain.getDeclForAST(ast); - }; - - TypeScriptCompiler.prototype.fileNames = function () { - return this.semanticInfoChain.fileNames(); - }; - - TypeScriptCompiler.prototype.topLevelDecl = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.getLocationText = function (location, resolvePath) { - return resolvePath(location.fileName()) + "(" + (location.line() + 1) + "," + (location.character() + 1) + ")"; - }; - - TypeScriptCompiler.getFullDiagnosticText = function (diagnostic, resolvePath) { - var result = ""; - if (diagnostic.fileName()) { - result += this.getLocationText(diagnostic, resolvePath) + ": "; - } - - result += diagnostic.message(); - - var additionalLocations = diagnostic.additionalLocations(); - if (additionalLocations.length > 0) { - result += " " + TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Additional_locations, null) + TypeScript.Environment.newLine; - - for (var i = 0, n = additionalLocations.length; i < n; i++) { - result += "\t" + this.getLocationText(additionalLocations[i], resolvePath) + TypeScript.Environment.newLine; - } - } else { - result += TypeScript.Environment.newLine; - } - - return result; - }; - return TypeScriptCompiler; - })(); - TypeScript.TypeScriptCompiler = TypeScriptCompiler; - - var CompilerPhase; - (function (CompilerPhase) { - CompilerPhase[CompilerPhase["Syntax"] = 0] = "Syntax"; - CompilerPhase[CompilerPhase["Semantics"] = 1] = "Semantics"; - CompilerPhase[CompilerPhase["EmitOptionsValidation"] = 2] = "EmitOptionsValidation"; - CompilerPhase[CompilerPhase["Emit"] = 3] = "Emit"; - CompilerPhase[CompilerPhase["DeclarationEmit"] = 4] = "DeclarationEmit"; - })(CompilerPhase || (CompilerPhase = {})); - - var CompilerIterator = (function () { - function CompilerIterator(compiler, resolvePath, continueOnDiagnostics, startingPhase) { - if (typeof startingPhase === "undefined") { startingPhase = 0 /* Syntax */; } - this.compiler = compiler; - this.resolvePath = resolvePath; - this.continueOnDiagnostics = continueOnDiagnostics; - this.index = -1; - this.fileNames = null; - this._current = null; - this._emitOptions = null; - this._sharedEmitter = null; - this._sharedDeclarationEmitter = null; - this.hadSyntacticDiagnostics = false; - this.hadSemanticDiagnostics = false; - this.hadEmitDiagnostics = false; - this.fileNames = compiler.fileNames(); - this.compilerPhase = startingPhase; - } - CompilerIterator.prototype.current = function () { - return this._current; - }; - - CompilerIterator.prototype.moveNext = function () { - this._current = null; - - while (this.moveNextInternal()) { - if (this._current) { - return true; - } - } - - return false; - }; - - CompilerIterator.prototype.moveNextInternal = function () { - this.index++; - - while (this.shouldMoveToNextPhase()) { - this.index = 0; - this.compilerPhase++; - } - - if (this.compilerPhase > 4 /* DeclarationEmit */) { - return false; - } - - switch (this.compilerPhase) { - case 0 /* Syntax */: - return this.moveNextSyntaxPhase(); - case 1 /* Semantics */: - return this.moveNextSemanticsPhase(); - case 2 /* EmitOptionsValidation */: - return this.moveNextEmitOptionsValidationPhase(); - case 3 /* Emit */: - return this.moveNextEmitPhase(); - case 4 /* DeclarationEmit */: - return this.moveNextDeclarationEmitPhase(); - } - }; - - CompilerIterator.prototype.shouldMoveToNextPhase = function () { - switch (this.compilerPhase) { - case 2 /* EmitOptionsValidation */: - return this.index === 1; - - case 0 /* Syntax */: - case 1 /* Semantics */: - return this.index === this.fileNames.length; - - case 3 /* Emit */: - case 4 /* DeclarationEmit */: - return this.index === (this.fileNames.length + 1); - } - - return false; - }; - - CompilerIterator.prototype.moveNextSyntaxPhase = function () { - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - - var diagnostics = this.compiler.getSyntacticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSyntacticDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics(diagnostics); - } - - return true; - }; - - CompilerIterator.prototype.moveNextSemanticsPhase = function () { - if (this.hadSyntacticDiagnostics) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - var diagnostics = this.compiler.getSemanticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSemanticDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics(diagnostics); - } - - return true; - }; - - CompilerIterator.prototype.moveNextEmitOptionsValidationPhase = function () { - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - - if (!this._emitOptions) { - this._emitOptions = new TypeScript.EmitOptions(this.compiler, this.resolvePath); - } - - if (this._emitOptions.diagnostic()) { - if (!this.continueOnDiagnostics) { - this.hadEmitDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics([this._emitOptions.diagnostic()]); - } - - return true; - }; - - CompilerIterator.prototype.moveNextEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(this._emitOptions); - - if (this.hadEmitDiagnostics) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedEmitter = this.compiler._emitDocument(document, this._emitOptions, function (outputFiles) { - _this._current = CompileResult.fromOutputFiles(outputFiles); - }, this._sharedEmitter); - return true; - } - - if (this.index === this.fileNames.length && this._sharedEmitter) { - this._current = CompileResult.fromOutputFiles(this._sharedEmitter.getOutputFiles()); - } - - return true; - }; - - CompilerIterator.prototype.moveNextDeclarationEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(!this.hadEmitDiagnostics); - if (this.hadSemanticDiagnostics) { - return false; - } - - if (!this.compiler.compilationSettings().generateDeclarationFiles()) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedDeclarationEmitter = this.compiler._emitDocumentDeclarations(document, this._emitOptions, function (file) { - _this._current = CompileResult.fromOutputFiles([file]); - }, this._sharedDeclarationEmitter); - return true; - } - - if (this.index === this.fileNames.length && this._sharedDeclarationEmitter) { - this._current = CompileResult.fromOutputFiles([this._sharedDeclarationEmitter.getOutputFile()]); - } - - return true; - }; - return CompilerIterator; - })(); - - function compareDataObjects(dst, src) { - for (var e in dst) { - if (typeof dst[e] === "object") { - if (!compareDataObjects(dst[e], src[e])) - return false; - } else if (typeof dst[e] !== "function") { - if (dst[e] !== src[e]) - return false; - } - } - return true; - } - TypeScript.compareDataObjects = compareDataObjects; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (GenerativeTypeClassification) { - GenerativeTypeClassification[GenerativeTypeClassification["Unknown"] = 0] = "Unknown"; - GenerativeTypeClassification[GenerativeTypeClassification["Open"] = 1] = "Open"; - GenerativeTypeClassification[GenerativeTypeClassification["Closed"] = 2] = "Closed"; - GenerativeTypeClassification[GenerativeTypeClassification["InfinitelyExpanding"] = 3] = "InfinitelyExpanding"; - })(TypeScript.GenerativeTypeClassification || (TypeScript.GenerativeTypeClassification = {})); - var GenerativeTypeClassification = TypeScript.GenerativeTypeClassification; - - var PullTypeReferenceSymbol = (function (_super) { - __extends(PullTypeReferenceSymbol, _super); - function PullTypeReferenceSymbol(referencedTypeSymbol) { - _super.call(this, referencedTypeSymbol.name, referencedTypeSymbol.kind); - this.referencedTypeSymbol = referencedTypeSymbol; - this.isResolved = true; - - TypeScript.Debug.assert(referencedTypeSymbol !== null, "Type root symbol may not be null"); - - this.setRootSymbol(referencedTypeSymbol); - - this.typeReference = this; - } - PullTypeReferenceSymbol.createTypeReference = function (type) { - if (type.isTypeReference()) { - return type; - } - - var typeReference = type.typeReference; - - if (!typeReference) { - typeReference = new PullTypeReferenceSymbol(type); - type.typeReference = typeReference; - } - - return typeReference; - }; - - PullTypeReferenceSymbol.prototype.isTypeReference = function () { - return true; - }; - - PullTypeReferenceSymbol.prototype.setResolved = function () { - }; - - PullTypeReferenceSymbol.prototype.setUnresolved = function () { - }; - PullTypeReferenceSymbol.prototype.invalidate = function () { - }; - - PullTypeReferenceSymbol.prototype.ensureReferencedTypeIsResolved = function () { - this._getResolver().resolveDeclaredSymbol(this.referencedTypeSymbol); - }; - - PullTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol; - }; - - PullTypeReferenceSymbol.prototype._getResolver = function () { - return this.referencedTypeSymbol._getResolver(); - }; - - PullTypeReferenceSymbol.prototype.hasMembers = function () { - return this.referencedTypeSymbol.hasMembers(); - }; - - PullTypeReferenceSymbol.prototype.setAssociatedContainerType = function (type) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setAssociatedContainerType"); - }; - - PullTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - return this.referencedTypeSymbol.getAssociatedContainerType(); - }; - - PullTypeReferenceSymbol.prototype.getFunctionSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getFunctionSymbol(); - }; - PullTypeReferenceSymbol.prototype.setFunctionSymbol = function (symbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setFunctionSymbol"); - }; - - PullTypeReferenceSymbol.prototype.addContainedNonMember = function (nonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addContainedNonMember"); - }; - PullTypeReferenceSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.findContainedNonMemberContainer(containerName, kind); - }; - - PullTypeReferenceSymbol.prototype.addMember = function (memberSymbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberType"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberContainer"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberType"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberContainer"); - }; - PullTypeReferenceSymbol.prototype.addTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addTypeParameter"); - }; - PullTypeReferenceSymbol.prototype.addConstructorTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addConstructorTypeParameter"); - }; - - PullTypeReferenceSymbol.prototype.findContainedNonMember = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMember(name); - }; - - PullTypeReferenceSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMemberType(typeName, kind); - }; - - PullTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getMembers(); - }; - - PullTypeReferenceSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ":setHasDefaultConstructor"); - }; - PullTypeReferenceSymbol.prototype.getHasDefaultConstructor = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getHasDefaultConstructor(); - }; - PullTypeReferenceSymbol.prototype.getConstructorMethod = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructorMethod(); - }; - PullTypeReferenceSymbol.prototype.setConstructorMethod = function (constructorMethod) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setConstructorMethod"); - }; - PullTypeReferenceSymbol.prototype.getTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeParameters(); - }; - - PullTypeReferenceSymbol.prototype.isGeneric = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isGeneric(); - }; - - PullTypeReferenceSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.addSpecialization(specializedVersionOfThisType, substitutingTypes); - }; - PullTypeReferenceSymbol.prototype.getSpecialization = function (substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getSpecialization(substitutingTypes); - }; - PullTypeReferenceSymbol.prototype.getKnownSpecializations = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getKnownSpecializations(); - }; - PullTypeReferenceSymbol.prototype.getTypeArguments = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArguments(); - }; - PullTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArgumentsOrTypeParameters(); - }; - - PullTypeReferenceSymbol.prototype.appendCallSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendCallSignature"); - }; - PullTypeReferenceSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertCallSignatureAtIndex"); - }; - PullTypeReferenceSymbol.prototype.appendConstructSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendConstructSignature"); - }; - PullTypeReferenceSymbol.prototype.insertConstructSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertConstructSignatureAtIndex"); - }; - PullTypeReferenceSymbol.prototype.addIndexSignature = function (indexSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addIndexSignature"); - }; - - PullTypeReferenceSymbol.prototype.hasOwnCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnCallSignatures(); - }; - PullTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getCallSignatures(); - }; - PullTypeReferenceSymbol.prototype.hasOwnConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnConstructSignatures(); - }; - PullTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructSignatures(); - }; - PullTypeReferenceSymbol.prototype.hasOwnIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnIndexSignatures(); - }; - PullTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getIndexSignatures(); - }; - - PullTypeReferenceSymbol.prototype.addImplementedType = function (implementedType) { - this.referencedTypeSymbol.addImplementedType(implementedType); - }; - PullTypeReferenceSymbol.prototype.getImplementedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getImplementedTypes(); - }; - PullTypeReferenceSymbol.prototype.addExtendedType = function (extendedType) { - this.referencedTypeSymbol.addExtendedType(extendedType); - }; - PullTypeReferenceSymbol.prototype.getExtendedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getExtendedTypes(); - }; - PullTypeReferenceSymbol.prototype.addTypeThatExtendsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExtendsThisType(type); - }; - PullTypeReferenceSymbol.prototype.getTypesThatExtendThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExtendThisType(); - }; - PullTypeReferenceSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExplicitlyImplementsThisType(type); - }; - PullTypeReferenceSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExplicitlyImplementThisType(); - }; - - PullTypeReferenceSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isValidBaseKind(baseType, isExtendedType); - }; - - PullTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findMember(name, lookInParent); - }; - PullTypeReferenceSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedType(name, kind); - }; - PullTypeReferenceSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedContainer(name, kind); - }; - PullTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - }; - - PullTypeReferenceSymbol.prototype.findTypeParameter = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findTypeParameter(name); - }; - - PullTypeReferenceSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - return this.referencedTypeSymbol.hasOnlyOverloadCallSignatures(); - }; - return PullTypeReferenceSymbol; - })(TypeScript.PullTypeSymbol); - TypeScript.PullTypeReferenceSymbol = PullTypeReferenceSymbol; - - TypeScript.nSpecializationsCreated = 0; - TypeScript.nSpecializedSignaturesCreated = 0; - TypeScript.nSpecializedTypeParameterCreated = 0; - - var PullInstantiatedTypeReferenceSymbol = (function (_super) { - __extends(PullInstantiatedTypeReferenceSymbol, _super); - function PullInstantiatedTypeReferenceSymbol(referencedTypeSymbol, _typeParameterArgumentMap, isInstanceReferenceType) { - _super.call(this, referencedTypeSymbol); - this.referencedTypeSymbol = referencedTypeSymbol; - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.isInstanceReferenceType = isInstanceReferenceType; - this._instantiatedMembers = null; - this._allInstantiatedMemberNameCache = null; - this._instantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - this._instantiatedCallSignatures = null; - this._instantiatedConstructSignatures = null; - this._instantiatedIndexSignatures = null; - this._typeArgumentReferences = undefined; - this._instantiatedConstructorMethod = null; - this._instantiatedAssociatedContainerType = null; - this._isArray = undefined; - this._generativeTypeClassification = []; - - TypeScript.nSpecializationsCreated++; - } - PullInstantiatedTypeReferenceSymbol.prototype.getIsSpecialized = function () { - return !this.isInstanceReferenceType; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - if (!this.isNamedTypeSymbol()) { - return 0 /* Unknown */; - } - - var generativeTypeClassification = this._generativeTypeClassification[enclosingType.pullSymbolID] || 0 /* Unknown */; - if (generativeTypeClassification === 0 /* Unknown */) { - var typeParameters = enclosingType.getTypeParameters(); - var enclosingTypeParameterMap = []; - for (var i = 0; i < typeParameters.length; i++) { - enclosingTypeParameterMap[typeParameters[i].pullSymbolID] = typeParameters[i]; - } - - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (typeArguments[i].wrapsSomeTypeParameter(enclosingTypeParameterMap, true)) { - generativeTypeClassification = 1 /* Open */; - break; - } - } - - if (generativeTypeClassification === 1 /* Open */) { - if (this.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType)) { - generativeTypeClassification = 3 /* InfinitelyExpanding */; - } - } else { - generativeTypeClassification = 2 /* Closed */; - } - - this._generativeTypeClassification[enclosingType.pullSymbolID] = generativeTypeClassification; - } - - return generativeTypeClassification; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArray === undefined) { - this._isArray = this.getRootSymbol().isArrayNamedTypeReference() || (this.getRootSymbol() === this._getResolver().getArrayNamedType()); - } - return this._isArray; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getElementType = function () { - if (!this.isArrayNamedTypeReference()) { - return null; - } - - var typeArguments = this.getTypeArguments(); - return typeArguments ? typeArguments[0] : null; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.getIsSpecialized()) { - return this; - } - - return this.referencedTypeSymbol; - }; - - PullInstantiatedTypeReferenceSymbol.create = function (resolver, type, typeParameterArgumentMap) { - TypeScript.Debug.assert(resolver); - - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(resolver, type, mutableTypeParameterMap); - - var rootType = type.getRootSymbol(); - var instantiation = rootType.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiation) { - return instantiation; - } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(type, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - var isInstanceReferenceType = (type.kind & 8216 /* SomeInstantiatableType */) != 0; - var resolvedTypeParameterArgumentMap = typeParameterArgumentMap; - if (isInstanceReferenceType) { - var typeParameters = rootType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - if (!TypeScript.PullHelpers.typeSymbolsAreIdentical(typeParameters[i], typeParameterArgumentMap[typeParameters[i].pullSymbolID])) { - isInstanceReferenceType = false; - break; - } - } - - if (isInstanceReferenceType) { - typeParameterArgumentMap = []; - } - } - - instantiation = new PullInstantiatedTypeReferenceSymbol(rootType, typeParameterArgumentMap, isInstanceReferenceType); - - rootType.addSpecialization(instantiation, resolvedTypeParameterArgumentMap); - - return instantiation; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.isGeneric = function () { - return this.getRootSymbol().isGeneric(); - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArguments = function () { - if (this.isInstanceReferenceType) { - return this.getTypeParameters(); - } - - if (this._typeArgumentReferences === undefined) { - var typeParameters = this.referencedTypeSymbol.getTypeParameters(); - - if (typeParameters.length) { - var typeArgument = null; - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArgument = this._typeParameterArgumentMap[typeParameters[i].pullSymbolID]; - - if (!typeArgument) { - TypeScript.Debug.fail("type argument count mismatch"); - } - - if (typeArgument) { - typeArguments[typeArguments.length] = typeArgument; - } - } - - this._typeArgumentReferences = typeArguments; - } else { - this._typeArgumentReferences = null; - } - } - - return this._typeArgumentReferences; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeArguments(); - }; - - PullInstantiatedTypeReferenceSymbol.prototype.populateInstantiatedMemberFromReferencedMember = function (referencedMember) { - var instantiatedMember; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(referencedMember); - - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - instantiatedMember = referencedMember; - } else { - instantiatedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - instantiatedMember.setRootSymbol(referencedMember); - instantiatedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - instantiatedMember.isOptional = referencedMember.isOptional; - } - this._instantiatedMemberNameCache[instantiatedMember.name] = instantiatedMember; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getMembers(); - } - - if (!this._instantiatedMembers) { - var referencedMembers = this.referencedTypeSymbol.getMembers(); - var referencedMember = null; - var instantiatedMember = null; - - this._instantiatedMembers = []; - - for (var i = 0; i < referencedMembers.length; i++) { - referencedMember = referencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (!this._instantiatedMemberNameCache[referencedMember.name]) { - this.populateInstantiatedMemberFromReferencedMember(referencedMember); - } - - this._instantiatedMembers[this._instantiatedMembers.length] = this._instantiatedMemberNameCache[referencedMember.name]; - } - } - - return this._instantiatedMembers; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.findMember(name, lookInParent); - } - - var memberSymbol = this._instantiatedMemberNameCache[name]; - - if (!memberSymbol) { - var referencedMemberSymbol = this.referencedTypeSymbol.findMember(name, lookInParent); - - if (referencedMemberSymbol) { - this.populateInstantiatedMemberFromReferencedMember(referencedMemberSymbol); - memberSymbol = this._instantiatedMemberNameCache[name]; - } else { - memberSymbol = null; - } - } - - return memberSymbol; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - } - - var requestedMembers = []; - var allReferencedMembers = this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - - if (!this._allInstantiatedMemberNameCache) { - this._allInstantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - - var members = this.getMembers(); - - for (var i = 0; i < members.length; i++) { - this._allInstantiatedMemberNameCache[members[i].name] = members[i]; - } - } - - var referencedMember = null; - var requestedMember = null; - - for (var i = 0; i < allReferencedMembers.length; i++) { - referencedMember = allReferencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (this._allInstantiatedMemberNameCache[referencedMember.name]) { - requestedMembers[requestedMembers.length] = this._allInstantiatedMemberNameCache[referencedMember.name]; - } else { - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._allInstantiatedMemberNameCache[referencedMember.name] = referencedMember; - requestedMembers[requestedMembers.length] = referencedMember; - } else { - requestedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - requestedMember.setRootSymbol(referencedMember); - - requestedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - requestedMember.isOptional = referencedMember.isOptional; - - this._allInstantiatedMemberNameCache[requestedMember.name] = requestedMember; - requestedMembers[requestedMembers.length] = requestedMember; - } - } - } - - return requestedMembers; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructorMethod = function () { - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructorMethod(); - } - - if (!this._instantiatedConstructorMethod) { - var referencedConstructorMethod = this.referencedTypeSymbol.getConstructorMethod(); - this._instantiatedConstructorMethod = new TypeScript.PullSymbol(referencedConstructorMethod.name, referencedConstructorMethod.kind); - this._instantiatedConstructorMethod.setRootSymbol(referencedConstructorMethod); - this._instantiatedConstructorMethod.setResolved(); - - this._instantiatedConstructorMethod.type = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedConstructorMethod.type, this._typeParameterArgumentMap); - } - - return this._instantiatedConstructorMethod; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - if (!this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAssociatedContainerType(); - } - - if (!this._instantiatedAssociatedContainerType) { - var referencedAssociatedContainerType = this.referencedTypeSymbol.getAssociatedContainerType(); - - if (referencedAssociatedContainerType) { - this._instantiatedAssociatedContainerType = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedAssociatedContainerType, this._typeParameterArgumentMap); - } - } - - return this._instantiatedAssociatedContainerType; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getCallSignatures(); - } - - if (this._instantiatedCallSignatures) { - return this._instantiatedCallSignatures; - } - - var referencedCallSignatures = this.referencedTypeSymbol.getCallSignatures(); - this._instantiatedCallSignatures = []; - - for (var i = 0; i < referencedCallSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedCallSignatures[i]); - - if (!referencedCallSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = referencedCallSignatures[i]; - } else { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = this._getResolver().instantiateSignature(referencedCallSignatures[i], this._typeParameterArgumentMap); - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedCallSignatures; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructSignatures(); - } - - if (this._instantiatedConstructSignatures) { - return this._instantiatedConstructSignatures; - } - - var referencedConstructSignatures = this.referencedTypeSymbol.getConstructSignatures(); - this._instantiatedConstructSignatures = []; - - for (var i = 0; i < referencedConstructSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedConstructSignatures[i]); - - if (!referencedConstructSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = referencedConstructSignatures[i]; - } else { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = this._getResolver().instantiateSignature(referencedConstructSignatures[i], this._typeParameterArgumentMap); - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedConstructSignatures; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getIndexSignatures(); - } - - if (this._instantiatedIndexSignatures) { - return this._instantiatedIndexSignatures; - } - - var referencedIndexSignatures = this.referencedTypeSymbol.getIndexSignatures(); - this._instantiatedIndexSignatures = []; - - for (var i = 0; i < referencedIndexSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedIndexSignatures[i]); - - if (!referencedIndexSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = referencedIndexSignatures[i]; - } else { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = this._getResolver().instantiateSignature(referencedIndexSignatures[i], this._typeParameterArgumentMap); - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedIndexSignatures; - }; - return PullInstantiatedTypeReferenceSymbol; - })(PullTypeReferenceSymbol); - TypeScript.PullInstantiatedTypeReferenceSymbol = PullInstantiatedTypeReferenceSymbol; - - var PullInstantiatedSignatureSymbol = (function (_super) { - __extends(PullInstantiatedSignatureSymbol, _super); - function PullInstantiatedSignatureSymbol(rootSignature, _typeParameterArgumentMap) { - _super.call(this, rootSignature.kind, rootSignature.isDefinition()); - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.setRootSymbol(rootSignature); - TypeScript.nSpecializedSignaturesCreated++; - - rootSignature.addSpecialization(this, _typeParameterArgumentMap); - } - PullInstantiatedSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; - }; - - PullInstantiatedSignatureSymbol.prototype.getIsSpecialized = function () { - return true; - }; - - PullInstantiatedSignatureSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - - PullInstantiatedSignatureSymbol.prototype.getTypeParameters = function () { - var _this = this; - if (!this._typeParameters) { - var rootSymbol = this.getRootSymbol(); - var typeParameters = rootSymbol.getTypeParameters(); - var hasInstantiatedTypeParametersOfThisSignature = TypeScript.ArrayUtilities.all(typeParameters, function (typeParameter) { - return _this._typeParameterArgumentMap[typeParameter.pullSymbolID] !== undefined; - }); - - if (!hasInstantiatedTypeParametersOfThisSignature && typeParameters.length) { - this._typeParameters = []; - for (var i = 0; i < typeParameters.length; i++) { - this._typeParameters[this._typeParameters.length] = this._getResolver().instantiateTypeParameter(typeParameters[i], this._typeParameterArgumentMap); - } - } else { - this._typeParameters = TypeScript.sentinelEmptyArray; - } - } - - return this._typeParameters; - }; - - PullInstantiatedSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - var rootSymbol = this.getRootSymbol(); - return rootSymbol.getAllowedToReferenceTypeParameters(); - }; - return PullInstantiatedSignatureSymbol; - })(TypeScript.PullSignatureSymbol); - TypeScript.PullInstantiatedSignatureSymbol = PullInstantiatedSignatureSymbol; - - var PullInstantiatedTypeParameterSymbol = (function (_super) { - __extends(PullInstantiatedTypeParameterSymbol, _super); - function PullInstantiatedTypeParameterSymbol(rootTypeParameter, constraintType) { - _super.call(this, rootTypeParameter.name); - TypeScript.nSpecializedTypeParameterCreated++; - - this.setRootSymbol(rootTypeParameter); - this.setConstraint(constraintType); - - rootTypeParameter.addSpecialization(this, [constraintType]); - } - PullInstantiatedTypeParameterSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - return PullInstantiatedTypeParameterSymbol; - })(TypeScript.PullTypeParameterSymbol); - TypeScript.PullInstantiatedTypeParameterSymbol = PullInstantiatedTypeParameterSymbol; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTreeToAstVisitor = (function () { - function SyntaxTreeToAstVisitor(fileName, lineMap, compilationSettings) { - this.fileName = fileName; - this.lineMap = lineMap; - this.compilationSettings = compilationSettings; - this.position = 0; - this.previousTokenTrailingComments = null; - } - SyntaxTreeToAstVisitor.visit = function (syntaxTree, fileName, compilationSettings, incrementalAST) { - var visitor = incrementalAST ? new SyntaxTreeToIncrementalAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings) : new SyntaxTreeToAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings); - return syntaxTree.sourceUnit().accept(visitor); - }; - - SyntaxTreeToAstVisitor.prototype.movePast = function (element) { - if (element !== null) { - this.position += element.fullWidth(); - } - }; - - SyntaxTreeToAstVisitor.prototype.moveTo = function (element1, element2) { - if (element2 !== null) { - this.position += TypeScript.Syntax.childOffset(element1, element2); - } - }; - - SyntaxTreeToAstVisitor.prototype.setCommentsAndSpan = function (ast, fullStart, node) { - var firstToken = node.firstToken(); - var lastToken = node.lastToken(); - - this.setSpan(ast, fullStart, node, firstToken, lastToken); - ast.setPreComments(this.convertTokenLeadingComments(firstToken, fullStart)); - ast.setPostComments(this.convertNodeTrailingComments(node, lastToken, fullStart)); - }; - - SyntaxTreeToAstVisitor.prototype.createTokenSpan = function (fullStart, element) { - if (element === null) { - return null; - } - - if (element.fullWidth() === 0) { - return new TypeScript.ASTSpan(-1, -1); - } - - var leadingTriviaWidth = element.leadingTriviaWidth(); - var trailingTriviaWidth = element.trailingTriviaWidth(); - - var start = fullStart + leadingTriviaWidth; - var end = fullStart + element.fullWidth() - trailingTriviaWidth; - - return new TypeScript.ASTSpan(start, end); - }; - - SyntaxTreeToAstVisitor.prototype.setSpan = function (span, fullStart, element, firstToken, lastToken) { - if (typeof firstToken === "undefined") { firstToken = element.firstToken(); } - if (typeof lastToken === "undefined") { lastToken = element.lastToken(); } - var leadingTriviaWidth = firstToken ? firstToken.leadingTriviaWidth() : 0; - var trailingTriviaWidth = lastToken ? lastToken.trailingTriviaWidth() : 0; - - var desiredMinChar = fullStart + leadingTriviaWidth; - var desiredLimChar = fullStart + element.fullWidth() - trailingTriviaWidth; - - this.setSpanExplicit(span, desiredMinChar, desiredLimChar); - - span._trailingTriviaWidth = trailingTriviaWidth; - }; - - SyntaxTreeToAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - span._start = start; - span._end = end; - }; - - SyntaxTreeToAstVisitor.prototype.visitSyntaxList = function (node) { - var start = this.position; - var array = new Array(node.childCount()); - - for (var i = 0, n = node.childCount(); i < n; i++) { - array[i] = node.childAt(i).accept(this); - } - - var result = new TypeScript.ISyntaxList2(this.fileName, array); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var start = this.position; - var array = new Array(list.nonSeparatorCount()); - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i % 2 === 0) { - array[i / 2] = list.childAt(i).accept(this); - this.previousTokenTrailingComments = null; - } else { - var separatorToken = list.childAt(i); - this.previousTokenTrailingComments = this.convertTokenTrailingComments(separatorToken, this.position + separatorToken.leadingTriviaWidth() + separatorToken.width()); - this.movePast(separatorToken); - } - } - - var result = new TypeScript.ISeparatedSyntaxList2(this.fileName, array, list.separatorCount()); - this.setSpan(result, start, list); - - result.setPostComments(this.previousTokenTrailingComments); - this.previousTokenTrailingComments = null; - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.convertComment = function (trivia, commentStartPosition, hasTrailingNewLine) { - var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth()); - - return comment; - }; - - SyntaxTreeToAstVisitor.prototype.convertComments = function (triviaList, commentStartPosition) { - var result = []; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment()) { - var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine(); - result.push(this.convertComment(trivia, commentStartPosition, hasTrailingNewLine)); - } - - commentStartPosition += trivia.fullWidth(); - } - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.mergeComments = function (comments1, comments2) { - if (comments1 === null) { - return comments2; - } - - if (comments2 === null) { - return comments1; - } - - return comments1.concat(comments2); - }; - - SyntaxTreeToAstVisitor.prototype.convertTokenLeadingComments = function (token, commentStartPosition) { - if (token === null) { - return null; - } - - var preComments = token.hasLeadingComment() ? this.convertComments(token.leadingTrivia(), commentStartPosition) : null; - - var previousTokenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; - - return this.mergeComments(previousTokenTrailingComments, preComments); - }; - - SyntaxTreeToAstVisitor.prototype.convertTokenTrailingComments = function (token, commentStartPosition) { - if (token === null || !token.hasTrailingComment() || token.hasTrailingNewLine()) { - return null; - } - - return this.convertComments(token.trailingTrivia(), commentStartPosition); - }; - - SyntaxTreeToAstVisitor.prototype.convertNodeTrailingComments = function (node, lastToken, nodeStart) { - if (lastToken === null || !lastToken.hasTrailingComment() || lastToken.hasTrailingNewLine()) { - return null; - } - - return this.convertComments(lastToken.trailingTrivia(), nodeStart + node.fullWidth() - lastToken.trailingTriviaWidth()); - }; - - SyntaxTreeToAstVisitor.prototype.visitIdentifier = function (token) { - return this.visitToken(token); - }; - - SyntaxTreeToAstVisitor.prototype.visitToken = function (token) { - var fullStart = this.position; - - var result = this.visitTokenWorker(token); - - this.movePast(token); - - var start = fullStart + token.leadingTriviaWidth(); - this.setSpanExplicit(result, start, start + token.width()); - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTokenWorker = function (token) { - switch (token.tokenKind) { - case 60 /* AnyKeyword */: - return new TypeScript.BuiltInType(60 /* AnyKeyword */, token.text(), token.valueText()); - case 61 /* BooleanKeyword */: - return new TypeScript.BuiltInType(61 /* BooleanKeyword */, token.text(), token.valueText()); - case 67 /* NumberKeyword */: - return new TypeScript.BuiltInType(67 /* NumberKeyword */, token.text(), token.valueText()); - case 69 /* StringKeyword */: - return new TypeScript.BuiltInType(69 /* StringKeyword */, token.text(), token.valueText()); - case 41 /* VoidKeyword */: - return new TypeScript.BuiltInType(41 /* VoidKeyword */, token.text(), token.valueText()); - case 35 /* ThisKeyword */: - return new TypeScript.ThisExpression(token.text(), token.valueText()); - case 50 /* SuperKeyword */: - return new TypeScript.SuperExpression(token.text(), token.valueText()); - case 37 /* TrueKeyword */: - return new TypeScript.LiteralExpression(37 /* TrueKeyword */, token.text(), token.valueText()); - case 24 /* FalseKeyword */: - return new TypeScript.LiteralExpression(24 /* FalseKeyword */, token.text(), token.valueText()); - case 32 /* NullKeyword */: - return new TypeScript.LiteralExpression(32 /* NullKeyword */, token.text(), token.valueText()); - case 14 /* StringLiteral */: - return new TypeScript.StringLiteral(token.text(), token.valueText()); - case 12 /* RegularExpressionLiteral */: - return new TypeScript.RegularExpressionLiteral(token.text(), token.valueText()); - case 13 /* NumericLiteral */: - var fullStart = this.position; - var preComments = this.convertTokenLeadingComments(token, fullStart); - - var result = new TypeScript.NumericLiteral(token.value(), token.text(), token.valueText()); - - result.setPreComments(preComments); - return result; - case 11 /* IdentifierName */: - return new TypeScript.Identifier(token.text()); - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SyntaxTreeToAstVisitor.prototype.visitSourceUnit = function (node) { - var start = this.position; - TypeScript.Debug.assert(start === 0); - - var bod = this.visitSyntaxList(node.moduleElements); - var comments = this.convertTokenLeadingComments(node.endOfFileToken, TypeScript.Syntax.childOffset(node, node.endOfFileToken)); - var result = new TypeScript.SourceUnit(bod, comments, this.fileName); - this.setSpanExplicit(result, start, start + node.fullWidth()); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExternalModuleReference = function (node) { - var start = this.position; - - this.moveTo(node, node.stringLiteral); - var stringLiteral = node.stringLiteral.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ExternalModuleReference(stringLiteral); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleNameModuleReference = function (node) { - var start = this.position; - var moduleName = node.moduleName.accept(this); - - var result = new TypeScript.ModuleNameModuleReference(moduleName); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitClassDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - this.movePast(node.openBraceToken); - var members = this.visitSyntaxList(node.classElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ClassDeclaration(modifiers, name, typeParameters, heritageClauses, members, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModifiers = function (modifiers) { - var result = null; - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result = result || []; - result.push(1 /* Exported */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result = result || []; - result.push(8 /* Ambient */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result = result || []; - result.push(16 /* Static */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result = result || []; - result.push(4 /* Public */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result = result || []; - result.push(2 /* Private */); - } - - return result || TypeScript.sentinelEmptyArray; - }; - - SyntaxTreeToAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - var body = this.visitObjectType(node.body); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.InterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, body); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitHeritageClause = function (node) { - var start = this.position; - - this.movePast(node.extendsOrImplementsKeyword); - var typeNames = this.visitSeparatedSyntaxList(node.typeNames); - - var result = new TypeScript.HeritageClause(node.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, typeNames); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleDeclaration = function (node) { - var start = this.position; - - var modifiers = this.visitModifiers(node.modifiers); - - this.moveTo(node, node.moduleKeyword); - this.movePast(node.moduleKeyword); - - var moduleName = node.name ? node.name.accept(this) : null; - var stringLiteral = node.stringLiteral ? node.stringLiteral.accept(this) : null; - - this.movePast(node.openBraceToken); - - var moduleElements = this.visitSyntaxList(node.moduleElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ModuleDeclaration(modifiers, moduleName, stringLiteral, moduleElements, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.FunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - this.movePast(node.openBraceToken); - - var enumElements = this.visitSeparatedSyntaxList(node.enumElements); - - this.movePast(node.closeBraceToken); - - var result = new TypeScript.EnumDeclaration(this.visitModifiers(node.modifiers), identifier, enumElements); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumElement = function (node) { - var start = this.position; - - var memberName = this.visitToken(node.propertyName); - - var value = node.equalsValueClause !== null ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.EnumElement(memberName, value); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitImportDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.equalsToken); - var alias = node.moduleReference.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ImportDeclaration(modifiers, name, alias); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExportAssignment = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExportAssignment(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclaration); - - var declaration = node.variableDeclaration.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.VariableStatement(modifiers, declaration); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarators); - var variableDecls = this.visitSeparatedSyntaxList(node.variableDeclarators); - - var result = new TypeScript.VariableDeclaration(variableDecls); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclarator = function (node) { - var start = this.position; - var propertyName = this.visitToken(node.propertyName); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.VariableDeclarator(propertyName, typeExpr, init); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEqualsValueClause = function (node) { - var start = this.position; - var afterEqualsComments = this.convertTokenTrailingComments(node.equalsToken, this.position + node.equalsToken.leadingTriviaWidth() + node.equalsToken.width()); - - this.movePast(node.equalsToken); - var value = node.value.accept(this); - value.setPreComments(this.mergeComments(afterEqualsComments, value.preComments())); - - var result = new TypeScript.EqualsValueClause(value); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var start = this.position; - - this.movePast(node.operatorToken); - var operand = node.operand.accept(this); - - var result = new TypeScript.PrefixUnaryExpression(node.kind(), operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var start = this.position; - var openStart = this.position + node.openBracketToken.leadingTriviaWidth(); - this.movePast(node.openBracketToken); - - var expressions = this.visitSeparatedSyntaxList(node.expressions); - - var closeStart = this.position + node.closeBracketToken.leadingTriviaWidth(); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayLiteralExpression(expressions); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitOmittedExpression = function (node) { - var start = this.position; - - var result = new TypeScript.OmittedExpression(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var start = this.position; - - var openParenToken = node.openParenToken; - var openParenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - - this.movePast(openParenToken); - - var expr = node.expression.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParenthesizedExpression(openParenTrailingComments, expr); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var start = this.position; - - var identifier = node.identifier.accept(this); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.SimpleArrowFunctionExpression(identifier, block, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var start = this.position; - - var callSignature = this.visitCallSignature(node.callSignature); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.ParenthesizedArrowFunctionExpression(callSignature, block, expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitType = function (type) { - return type ? type.accept(this) : null; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeQuery = function (node) { - var start = this.position; - this.movePast(node.typeOfKeyword); - var name = node.name.accept(this); - - var result = new TypeScript.TypeQuery(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitQualifiedName = function (node) { - var start = this.position; - var left = this.visitType(node.left); - this.movePast(node.dotToken); - var right = this.visitIdentifier(node.right); - - var result = new TypeScript.QualifiedName(left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeArgumentList = function (node) { - if (node === null) { - return null; - } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeArguments = this.visitSeparatedSyntaxList(node.typeArguments); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeArgumentList(typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorType = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.ConstructorType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionType = function (node) { - var start = this.position; - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.FunctionType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectType = function (node) { - var start = this.position; - - this.movePast(node.openBraceToken); - var typeMembers = this.visitSeparatedSyntaxList(node.typeMembers); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectType(typeMembers); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.type); - this.movePast(node.openBracketToken); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayType(underlying); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGenericType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.name); - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - var result = new TypeScript.GenericType(underlying, typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeAnnotation = function (node) { - if (!node) { - return null; - } - - var start = this.position; - this.movePast(node.colonToken); - var type = this.visitType(node.type); - - var result = new TypeScript.TypeAnnotation(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBlock = function (node) { - if (!node) { - return null; - } - - var start = this.position; - - this.movePast(node.openBraceToken); - var statements = this.visitSyntaxList(node.statements); - var closeBracePosition = this.position; - - var closeBraceLeadingComments = this.convertTokenLeadingComments(node.closeBraceToken, this.position); - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.Block(statements, closeBraceLeadingComments, closeBraceToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameter = function (node) { - var start = this.position; - - var dotDotDotToken = this.createTokenSpan(this.position, node.dotDotDotToken); - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? node.equalsValueClause.accept(this) : null; - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeExpr, init); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.dotToken); - var name = this.visitIdentifier(node.name); - - var result = new TypeScript.MemberAccessExpression(expression, name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var start = this.position; - - var operand = node.operand.accept(this); - this.movePast(node.operatorToken); - - var result = new TypeScript.PostfixUnaryExpression(node.kind() === 210 /* PostIncrementExpression */ ? 210 /* PostIncrementExpression */ : 211 /* PostDecrementExpression */, operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElementAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.openBracketToken); - var argumentExpression = node.argumentExpression.accept(this); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ElementAccessExpression(expression, argumentExpression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitInvocationExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.InvocationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArgumentList = function (node) { - if (node === null) { - return null; - } - - var start = this.position; - - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - this.movePast(node.openParenToken); - - var _arguments = this.visitSeparatedSyntaxList(node.arguments); - - if (node.arguments.fullWidth() === 0 && node.closeParenToken.fullWidth() === 0) { - var openParenTokenEnd = start + node.openParenToken.leadingTriviaWidth() + node.openParenToken.width(); - this.setSpanExplicit(_arguments, openParenTokenEnd, openParenTokenEnd + node.openParenToken.trailingTriviaWidth()); - } - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ArgumentList(typeArguments, _arguments, closeParenToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBinaryExpression = function (node) { - var start = this.position; - - var left = node.left.accept(this); - this.movePast(node.operatorToken); - var right = node.right.accept(this); - - var result = new TypeScript.BinaryExpression(node.kind(), left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConditionalExpression = function (node) { - var start = this.position; - - var condition = node.condition.accept(this); - this.movePast(node.questionToken); - var whenTrue = node.whenTrue.accept(this); - this.movePast(node.colonToken); - var whenFalse = node.whenFalse.accept(this); - - var result = new TypeScript.ConditionalExpression(condition, whenTrue, whenFalse); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructSignature = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.ConstructSignature(callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMethodSignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.MethodSignature(name, questionToken, callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexSignature = function (node) { - var start = this.position; - - this.movePast(node.openBracketToken); - - var parameter = node.parameter.accept(this); - - this.movePast(node.closeBracketToken); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.IndexSignature(parameter, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPropertySignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.PropertySignature(name, questionToken, typeExpr); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameterList = function (node) { - if (!node) { - return null; - } - - var start = this.position; - - var openParenToken = node.openParenToken; - - this.previousTokenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - var openParenTrailingComments = null; - if (node.parameters.childCount() === 0) { - openParenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; - } - - this.movePast(node.openParenToken); - var parameters = this.visitSeparatedSyntaxList(node.parameters); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParameterList(openParenTrailingComments, parameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCallSignature = function (node) { - var start = this.position; - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.CallSignature(typeParameters, parameters, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameterList = function (node) { - if (!node) { - return null; - } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeParameters = this.visitSeparatedSyntaxList(node.typeParameters); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeParameterList(typeParameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameter = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - var constraint = node.constraint ? node.constraint.accept(this) : null; - - var result = new TypeScript.TypeParameter(identifier, constraint); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstraint = function (node) { - var start = this.position; - this.movePast(node.extendsKeyword); - var type = this.visitType(node.type); - - var result = new TypeScript.Constraint(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIfStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var thenBod = node.statement.accept(this); - var elseBod = node.elseClause ? node.elseClause.accept(this) : null; - - var result = new TypeScript.IfStatement(condition, thenBod, elseBod); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElseClause = function (node) { - var start = this.position; - - this.movePast(node.elseKeyword); - var statement = node.statement.accept(this); - - var result = new TypeScript.ElseClause(statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExpressionStatement = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var expression = node.expression.accept(this); - - var semicolonPosition = this.position; - - var postComments = this.convertComments(node.semicolonToken.trailingTrivia(), this.position + node.semicolonToken.leadingTriviaWidth() + node.semicolonToken.width()); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExpressionStatement(expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.callSignature); - var callSignature = this.visitCallSignature(node.callSignature); - - var block = node.block ? node.block.accept(this) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.ConstructorDeclaration(callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexMemberDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.indexSignature); - var indexSignature = node.indexSignature.accept(this); - - this.movePast(node.semicolonToken); - - var result = new TypeScript.IndexMemberDeclaration(indexSignature); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.MemberFunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.GetAccessor(this.visitModifiers(node.modifiers), name, parameters, returnType, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.SetAccessor(this.visitModifiers(node.modifiers), name, parameters, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarator); - var variableDeclarator = node.variableDeclarator.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.MemberVariableDeclaration(modifiers, variableDeclarator); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitThrowStatement = function (node) { - var start = this.position; - - this.movePast(node.throwKeyword); - var expression = node.expression.accept(this); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ThrowStatement(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitReturnStatement = function (node) { - var start = this.position; - - this.movePast(node.returnKeyword); - var expression = node.expression ? node.expression.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ReturnStatement(expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.ObjectCreationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSwitchStatement = function (node) { - var start = this.position; - - this.movePast(node.switchKeyword); - this.movePast(node.openParenToken); - var expression = node.expression.accept(this); - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - this.movePast(node.openBraceToken); - var switchClauses = this.visitSyntaxList(node.switchClauses); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.SwitchStatement(expression, closeParenToken, switchClauses); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.caseKeyword); - var expression = node.expression.accept(this); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.CaseSwitchClause(expression, statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.defaultKeyword); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.DefaultSwitchClause(statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBreakStatement = function (node) { - var start = this.position; - - this.movePast(node.breakKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.BreakStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitContinueStatement = function (node) { - var start = this.position; - - this.movePast(node.continueKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ContinueStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var initializer = node.initializer ? node.initializer.accept(this) : null; - - this.movePast(node.firstSemicolonToken); - var cond = node.condition ? node.condition.accept(this) : null; - this.movePast(node.secondSemicolonToken); - var incr = node.incrementor ? node.incrementor.accept(this) : null; - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForStatement(variableDeclaration, initializer, cond, incr, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForInStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var left = node.left ? node.left.accept(this) : null; - - this.movePast(node.inKeyword); - var expression = node.expression.accept(this); - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForInStatement(variableDeclaration, left, expression, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWhileStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WhileStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWithStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WithStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCastExpression = function (node) { - var start = this.position; - - this.movePast(node.lessThanToken); - var castTerm = this.visitType(node.type); - this.movePast(node.greaterThanToken); - var expression = node.expression.accept(this); - - var result = new TypeScript.CastExpression(castTerm, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var start = this.position; - - var openStart = this.position + node.openBraceToken.leadingTriviaWidth(); - this.movePast(node.openBraceToken); - - var propertyAssignments = this.visitSeparatedSyntaxList(node.propertyAssignments); - - var closeStart = this.position + node.closeBraceToken.leadingTriviaWidth(); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectLiteralExpression(propertyAssignments); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var postComments = this.convertNodeTrailingComments(node, node.lastToken(), start); - - var propertyName = node.propertyName.accept(this); - - var afterColonComments = this.convertTokenTrailingComments(node.colonToken, this.position + node.colonToken.leadingTriviaWidth() + node.colonToken.width()); - - this.movePast(node.colonToken); - var expression = node.expression.accept(this); - expression.setPreComments(this.mergeComments(afterColonComments, expression.preComments())); - - var result = new TypeScript.SimplePropertyAssignment(propertyName, expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var start = this.position; - - var propertyName = node.propertyName.accept(this); - var callSignature = this.visitCallSignature(node.callSignature); - var block = this.visitBlock(node.block); - - var result = new TypeScript.FunctionPropertyAssignment(propertyName, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionExpression = function (node) { - var start = this.position; - - this.movePast(node.functionKeyword); - var name = node.identifier === null ? null : this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? node.block.accept(this) : null; - - var result = new TypeScript.FunctionExpression(name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEmptyStatement = function (node) { - var start = this.position; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.EmptyStatement(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTryStatement = function (node) { - var start = this.position; - - this.movePast(node.tryKeyword); - var tryBody = node.block.accept(this); - - var catchClause = null; - if (node.catchClause !== null) { - catchClause = node.catchClause.accept(this); - } - - var finallyBody = null; - if (node.finallyClause !== null) { - finallyBody = node.finallyClause.accept(this); - } - - var result = new TypeScript.TryStatement(tryBody, catchClause, finallyBody); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCatchClause = function (node) { - var start = this.position; - - this.movePast(node.catchKeyword); - this.movePast(node.openParenToken); - var identifier = this.visitIdentifier(node.identifier); - var typeAnnotation = this.visitTypeAnnotation(node.typeAnnotation); - this.movePast(node.closeParenToken); - var block = node.block.accept(this); - - var result = new TypeScript.CatchClause(identifier, typeAnnotation, block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFinallyClause = function (node) { - var start = this.position; - this.movePast(node.finallyKeyword); - var block = node.block.accept(this); - - var result = new TypeScript.FinallyClause(block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitLabeledStatement = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - this.movePast(node.colonToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.LabeledStatement(identifier, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDoStatement = function (node) { - var start = this.position; - - this.movePast(node.doKeyword); - var statement = node.statement.accept(this); - var whileKeyword = this.createTokenSpan(this.position, node.whileKeyword); - - this.movePast(node.whileKeyword); - this.movePast(node.openParenToken); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DoStatement(statement, whileKeyword, condition); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeOfExpression = function (node) { - var start = this.position; - - this.movePast(node.typeOfKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.TypeOfExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDeleteExpression = function (node) { - var start = this.position; - - this.movePast(node.deleteKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.DeleteExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVoidExpression = function (node) { - var start = this.position; - - this.movePast(node.voidKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.VoidExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDebuggerStatement = function (node) { - var start = this.position; - - this.movePast(node.debuggerKeyword); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DebuggerStatement(); - this.setSpan(result, start, node); - - return result; - }; - return SyntaxTreeToAstVisitor; - })(); - TypeScript.SyntaxTreeToAstVisitor = SyntaxTreeToAstVisitor; - - function applyDelta(ast, delta) { - if (ast) { - if (ast._start !== -1) { - ast._start += delta; - } - - if (ast._end !== -1) { - ast._end += delta; - } - } - } - - function applyDeltaToComments(comments, delta) { - if (comments && comments.length > 0) { - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; - applyDelta(comment, delta); - } - } - } - - var SyntaxTreeToIncrementalAstVisitor = (function (_super) { - __extends(SyntaxTreeToIncrementalAstVisitor, _super); - function SyntaxTreeToIncrementalAstVisitor() { - _super.apply(this, arguments); - } - SyntaxTreeToIncrementalAstVisitor.prototype.applyDelta = function (ast, delta) { - if (delta === 0) { - return; - } - - var pre = function (cur) { - applyDelta(cur, delta); - applyDeltaToComments(cur.preComments(), delta); - applyDeltaToComments(cur.postComments(), delta); - - switch (cur.kind()) { - case 146 /* Block */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 226 /* ArgumentList */: - applyDelta(cur.closeParenToken, delta); - break; - - case 130 /* ModuleDeclaration */: - applyDelta(cur.endingToken, delta); - break; - - case 131 /* ClassDeclaration */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 161 /* DoStatement */: - applyDelta(cur.whileKeyword, delta); - break; - - case 151 /* SwitchStatement */: - applyDelta(cur.closeParenToken, delta); - break; - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(ast, pre); - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - if (span._start !== -1) { - var delta = start - span._start; - this.applyDelta(span, delta); - - span._end = end; - } else { - _super.prototype.setSpanExplicit.call(this, span, start, end); - } - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.getAndMovePastAST = function (element) { - if (this.previousTokenTrailingComments !== null) { - return null; - } - - var result = element._ast; - if (!result) { - return null; - } - - var start = this.position; - this.movePast(element); - this.setSpan(result, start, element); - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setAST = function (element, ast) { - element._ast = ast; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); - } - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSeparatedSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); - } - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitToken = function (token) { - var result = this.getAndMovePastAST(token); - - if (!result) { - result = _super.prototype.visitToken.call(this, token); - this.setAST(token, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitClassDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitClassDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInterfaceDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitHeritageClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitHeritageClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitModuleDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitModuleDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitImportDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitImportDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExportAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExportAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPrefixUnaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayLiteralExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitOmittedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitOmittedExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimpleArrowFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedArrowFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitQualifiedName = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - var result = _super.prototype.visitQualifiedName.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGenericType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGenericType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBlock = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBlock.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParameter.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberAccessExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPostfixUnaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitElementAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitElementAccessExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInvocationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInvocationExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBinaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBinaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConditionalExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConditionalExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMethodSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMethodSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIndexSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIndexSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPropertySignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPropertySignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCallSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCallSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeParameter.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIfStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIfStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExpressionStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExpressionStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberFunctionDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGetAccessor.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSetAccessor.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitThrowStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitThrowStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitReturnStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitReturnStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectCreationExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSwitchStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSwitchStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCaseSwitchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDefaultSwitchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBreakStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBreakStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitContinueStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitContinueStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForInStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForInStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWhileStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWhileStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWithStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWithStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCastExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCastExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectLiteralExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimplePropertyAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionPropertyAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitEmptyStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitEmptyStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTryStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTryStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCatchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCatchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitLabeledStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitLabeledStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDoStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDoStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeOfExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeOfExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDeleteExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDeleteExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitVoidExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitVoidExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDebuggerStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDebuggerStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - return SyntaxTreeToIncrementalAstVisitor; - })(SyntaxTreeToAstVisitor); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ASTSpan = (function () { - function ASTSpan(_start, _end) { - this._start = _start; - this._end = _end; - } - ASTSpan.prototype.start = function () { - return this._start; - }; - - ASTSpan.prototype.end = function () { - return this._end; - }; - return ASTSpan; - })(); - TypeScript.ASTSpan = ASTSpan; - - var astID = 0; - - function structuralEqualsNotIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, false); - } - TypeScript.structuralEqualsNotIncludingPosition = structuralEqualsNotIncludingPosition; - - function structuralEqualsIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, true); - } - TypeScript.structuralEqualsIncludingPosition = structuralEqualsIncludingPosition; - - function commentStructuralEqualsNotIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, false); - } - - function commentStructuralEqualsIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, true); - } - - function structuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { - return true; - } - - return ast1 !== null && ast2 !== null && ast1.kind() === ast2.kind() && ast1.structuralEquals(ast2, includingPosition); - } - - function commentStructuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { - return true; - } - - return ast1 !== null && ast2 !== null && ast1.structuralEquals(ast2, includingPosition); - } - - function astArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? structuralEqualsIncludingPosition : structuralEqualsNotIncludingPosition); - } - - function commentArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? commentStructuralEqualsIncludingPosition : commentStructuralEqualsNotIncludingPosition); - } - - var AST = (function () { - function AST() { - this.parent = null; - this._start = -1; - this._end = -1; - this._trailingTriviaWidth = 0; - this._astID = astID++; - this._preComments = null; - this._postComments = null; - } - AST.prototype.syntaxID = function () { - return this._astID; - }; - - AST.prototype.start = function () { - return this._start; - }; - - AST.prototype.end = function () { - return this._end; - }; - - AST.prototype.trailingTriviaWidth = function () { - return this._trailingTriviaWidth; - }; - - AST.prototype.fileName = function () { - return this.parent.fileName(); - }; - - AST.prototype.kind = function () { - throw TypeScript.Errors.abstract(); - }; - - AST.prototype.preComments = function () { - return this._preComments; - }; - - AST.prototype.postComments = function () { - return this._postComments; - }; - - AST.prototype.setPreComments = function (comments) { - if (comments && comments.length) { - this._preComments = comments; - } else if (this._preComments) { - this._preComments = null; - } - }; - - AST.prototype.setPostComments = function (comments) { - if (comments && comments.length) { - this._postComments = comments; - } else if (this._postComments) { - this._postComments = null; - } - }; - - AST.prototype.width = function () { - return this.end() - this.start(); - }; - - AST.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { - return false; - } - } - - return commentArrayStructuralEquals(this.preComments(), ast.preComments(), includingPosition) && commentArrayStructuralEquals(this.postComments(), ast.postComments(), includingPosition); - }; - - AST.prototype.isExpression = function () { - return false; - }; - return AST; - })(); - TypeScript.AST = AST; - - var ISyntaxList2 = (function (_super) { - __extends(ISyntaxList2, _super); - function ISyntaxList2(_fileName, members) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; - } - } - ISyntaxList2.prototype.childCount = function () { - return this.members.length; - }; - - ISyntaxList2.prototype.childAt = function (index) { - return this.members[index]; - }; - - ISyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISyntaxList2.prototype.kind = function () { - return 1 /* List */; - }; - - ISyntaxList2.prototype.firstOrDefault = function (func) { - return TypeScript.ArrayUtilities.firstOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.lastOrDefault = function (func) { - return TypeScript.ArrayUtilities.lastOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.any = function (func) { - return TypeScript.ArrayUtilities.any(this.members, func); - }; - - ISyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISyntaxList2; - })(AST); - TypeScript.ISyntaxList2 = ISyntaxList2; - - var ISeparatedSyntaxList2 = (function (_super) { - __extends(ISeparatedSyntaxList2, _super); - function ISeparatedSyntaxList2(_fileName, members, _separatorCount) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - this._separatorCount = _separatorCount; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; - } - } - ISeparatedSyntaxList2.prototype.nonSeparatorCount = function () { - return this.members.length; - }; - - ISeparatedSyntaxList2.prototype.separatorCount = function () { - return this._separatorCount; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorAt = function (index) { - return this.members[index]; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorIndexOf = function (ast) { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i) === ast) { - return i; - } - } - - return -1; - }; - - ISeparatedSyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISeparatedSyntaxList2.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - ISeparatedSyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISeparatedSyntaxList2; - })(AST); - TypeScript.ISeparatedSyntaxList2 = ISeparatedSyntaxList2; - - var SourceUnit = (function (_super) { - __extends(SourceUnit, _super); - function SourceUnit(moduleElements, endOfFileTokenLeadingComments, _fileName) { - _super.call(this); - this.moduleElements = moduleElements; - this.endOfFileTokenLeadingComments = endOfFileTokenLeadingComments; - this._fileName = _fileName; - moduleElements && (moduleElements.parent = this); - } - SourceUnit.prototype.fileName = function () { - return this._fileName; - }; - - SourceUnit.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnit.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return SourceUnit; - })(AST); - TypeScript.SourceUnit = SourceUnit; - - var Identifier = (function (_super) { - __extends(Identifier, _super); - function Identifier(_text) { - _super.call(this); - this._text = _text; - this._valueText = null; - } - Identifier.prototype.text = function () { - return this._text; - }; - Identifier.prototype.valueText = function () { - if (!this._valueText) { - var text = this._text; - if (text === "__proto__") { - this._valueText = "#__proto__"; - } else { - this._valueText = TypeScript.Syntax.massageEscapes(text); - } - } - - return this._valueText; - }; - - Identifier.prototype.kind = function () { - return 11 /* IdentifierName */; - }; - - Identifier.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - Identifier.prototype.isExpression = function () { - return true; - }; - return Identifier; - })(AST); - TypeScript.Identifier = Identifier; - - var LiteralExpression = (function (_super) { - __extends(LiteralExpression, _super); - function LiteralExpression(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; - } - LiteralExpression.prototype.text = function () { - return this._text; - }; - - LiteralExpression.prototype.valueText = function () { - return this._valueText; - }; - - LiteralExpression.prototype.kind = function () { - return this._nodeType; - }; - - LiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - LiteralExpression.prototype.isExpression = function () { - return true; - }; - return LiteralExpression; - })(AST); - TypeScript.LiteralExpression = LiteralExpression; - - var ThisExpression = (function (_super) { - __extends(ThisExpression, _super); - function ThisExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - ThisExpression.prototype.text = function () { - return this._text; - }; - - ThisExpression.prototype.valueText = function () { - return this._valueText; - }; - - ThisExpression.prototype.kind = function () { - return 35 /* ThisKeyword */; - }; - - ThisExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - ThisExpression.prototype.isExpression = function () { - return true; - }; - return ThisExpression; - })(AST); - TypeScript.ThisExpression = ThisExpression; - - var SuperExpression = (function (_super) { - __extends(SuperExpression, _super); - function SuperExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - SuperExpression.prototype.text = function () { - return this._text; - }; - - SuperExpression.prototype.valueText = function () { - return this._valueText; - }; - - SuperExpression.prototype.kind = function () { - return 50 /* SuperKeyword */; - }; - - SuperExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - SuperExpression.prototype.isExpression = function () { - return true; - }; - return SuperExpression; - })(AST); - TypeScript.SuperExpression = SuperExpression; - - var NumericLiteral = (function (_super) { - __extends(NumericLiteral, _super); - function NumericLiteral(_value, _text, _valueText) { - _super.call(this); - this._value = _value; - this._text = _text; - this._valueText = _valueText; - } - NumericLiteral.prototype.text = function () { - return this._text; - }; - NumericLiteral.prototype.valueText = function () { - return this._valueText; - }; - NumericLiteral.prototype.value = function () { - return this._value; - }; - - NumericLiteral.prototype.kind = function () { - return 13 /* NumericLiteral */; - }; - - NumericLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && (this._value === ast._value || (isNaN(this._value) && isNaN(ast._value))) && this._text === ast._text; - }; - - NumericLiteral.prototype.isExpression = function () { - return true; - }; - return NumericLiteral; - })(AST); - TypeScript.NumericLiteral = NumericLiteral; - - var RegularExpressionLiteral = (function (_super) { - __extends(RegularExpressionLiteral, _super); - function RegularExpressionLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - RegularExpressionLiteral.prototype.text = function () { - return this._text; - }; - - RegularExpressionLiteral.prototype.valueText = function () { - return this._valueText; - }; - - RegularExpressionLiteral.prototype.kind = function () { - return 12 /* RegularExpressionLiteral */; - }; - - RegularExpressionLiteral.prototype.isExpression = function () { - return true; - }; - return RegularExpressionLiteral; - })(AST); - TypeScript.RegularExpressionLiteral = RegularExpressionLiteral; - - var StringLiteral = (function (_super) { - __extends(StringLiteral, _super); - function StringLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - this._valueText = _valueText === "__proto__" ? "#__proto__" : _valueText; - } - StringLiteral.prototype.text = function () { - return this._text; - }; - StringLiteral.prototype.valueText = function () { - return this._valueText; - }; - - StringLiteral.prototype.kind = function () { - return 14 /* StringLiteral */; - }; - - StringLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - StringLiteral.prototype.isExpression = function () { - return true; - }; - return StringLiteral; - })(AST); - TypeScript.StringLiteral = StringLiteral; - - var TypeAnnotation = (function (_super) { - __extends(TypeAnnotation, _super); - function TypeAnnotation(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - TypeAnnotation.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - return TypeAnnotation; - })(AST); - TypeScript.TypeAnnotation = TypeAnnotation; - - var BuiltInType = (function (_super) { - __extends(BuiltInType, _super); - function BuiltInType(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; - } - BuiltInType.prototype.text = function () { - return this._text; - }; - - BuiltInType.prototype.valueText = function () { - return this._valueText; - }; - - BuiltInType.prototype.kind = function () { - return this._nodeType; - }; - return BuiltInType; - })(AST); - TypeScript.BuiltInType = BuiltInType; - - var ExternalModuleReference = (function (_super) { - __extends(ExternalModuleReference, _super); - function ExternalModuleReference(stringLiteral) { - _super.call(this); - this.stringLiteral = stringLiteral; - stringLiteral && (stringLiteral.parent = this); - } - ExternalModuleReference.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - return ExternalModuleReference; - })(AST); - TypeScript.ExternalModuleReference = ExternalModuleReference; - - var ModuleNameModuleReference = (function (_super) { - __extends(ModuleNameModuleReference, _super); - function ModuleNameModuleReference(moduleName) { - _super.call(this); - this.moduleName = moduleName; - moduleName && (moduleName.parent = this); - } - ModuleNameModuleReference.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - return ModuleNameModuleReference; - })(AST); - TypeScript.ModuleNameModuleReference = ModuleNameModuleReference; - - var ImportDeclaration = (function (_super) { - __extends(ImportDeclaration, _super); - function ImportDeclaration(modifiers, identifier, moduleReference) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.moduleReference = moduleReference; - identifier && (identifier.parent = this); - moduleReference && (moduleReference.parent = this); - } - ImportDeclaration.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.moduleReference, ast.moduleReference, includingPosition); - }; - return ImportDeclaration; - })(AST); - TypeScript.ImportDeclaration = ImportDeclaration; - - var ExportAssignment = (function (_super) { - __extends(ExportAssignment, _super); - function ExportAssignment(identifier) { - _super.call(this); - this.identifier = identifier; - identifier && (identifier.parent = this); - } - ExportAssignment.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignment.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition); - }; - return ExportAssignment; - })(AST); - TypeScript.ExportAssignment = ExportAssignment; - - var TypeParameterList = (function (_super) { - __extends(TypeParameterList, _super); - function TypeParameterList(typeParameters) { - _super.call(this); - this.typeParameters = typeParameters; - typeParameters && (typeParameters.parent = this); - } - TypeParameterList.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - return TypeParameterList; - })(AST); - TypeScript.TypeParameterList = TypeParameterList; - - var ClassDeclaration = (function (_super) { - __extends(ClassDeclaration, _super); - function ClassDeclaration(modifiers, identifier, typeParameterList, heritageClauses, classElements, closeBraceToken) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - heritageClauses && (heritageClauses.parent = this); - classElements && (classElements.parent = this); - } - ClassDeclaration.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.classElements, ast.classElements, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return ClassDeclaration; - })(AST); - TypeScript.ClassDeclaration = ClassDeclaration; - - var InterfaceDeclaration = (function (_super) { - __extends(InterfaceDeclaration, _super); - function InterfaceDeclaration(modifiers, identifier, typeParameterList, heritageClauses, body) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - body && (body.parent = this); - heritageClauses && (heritageClauses.parent = this); - } - InterfaceDeclaration.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.body, ast.body, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return InterfaceDeclaration; - })(AST); - TypeScript.InterfaceDeclaration = InterfaceDeclaration; - - var HeritageClause = (function (_super) { - __extends(HeritageClause, _super); - function HeritageClause(_nodeType, typeNames) { - _super.call(this); - this._nodeType = _nodeType; - this.typeNames = typeNames; - typeNames && (typeNames.parent = this); - } - HeritageClause.prototype.kind = function () { - return this._nodeType; - }; - - HeritageClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeNames, ast.typeNames, includingPosition); - }; - return HeritageClause; - })(AST); - TypeScript.HeritageClause = HeritageClause; - - var ModuleDeclaration = (function (_super) { - __extends(ModuleDeclaration, _super); - function ModuleDeclaration(modifiers, name, stringLiteral, moduleElements, endingToken) { - _super.call(this); - this.modifiers = modifiers; - this.name = name; - this.stringLiteral = stringLiteral; - this.moduleElements = moduleElements; - this.endingToken = endingToken; - name && (name.parent = this); - stringLiteral && (stringLiteral.parent = this); - moduleElements && (moduleElements.parent = this); - } - ModuleDeclaration.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return ModuleDeclaration; - })(AST); - TypeScript.ModuleDeclaration = ModuleDeclaration; - - var FunctionDeclaration = (function (_super) { - __extends(FunctionDeclaration, _super); - function FunctionDeclaration(modifiers, identifier, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionDeclaration.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.callSignature, ast.callSignature, includingPosition); - }; - return FunctionDeclaration; - })(AST); - TypeScript.FunctionDeclaration = FunctionDeclaration; - - var VariableStatement = (function (_super) { - __extends(VariableStatement, _super); - function VariableStatement(modifiers, declaration) { - _super.call(this); - this.modifiers = modifiers; - this.declaration = declaration; - declaration && (declaration.parent = this); - } - VariableStatement.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declaration, ast.declaration, includingPosition); - }; - return VariableStatement; - })(AST); - TypeScript.VariableStatement = VariableStatement; - - var VariableDeclaration = (function (_super) { - __extends(VariableDeclaration, _super); - function VariableDeclaration(declarators) { - _super.call(this); - this.declarators = declarators; - declarators && (declarators.parent = this); - } - VariableDeclaration.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declarators, ast.declarators, includingPosition); - }; - return VariableDeclaration; - })(AST); - TypeScript.VariableDeclaration = VariableDeclaration; - - var VariableDeclarator = (function (_super) { - __extends(VariableDeclarator, _super); - function VariableDeclarator(propertyName, typeAnnotation, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - VariableDeclarator.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - return VariableDeclarator; - })(AST); - TypeScript.VariableDeclarator = VariableDeclarator; - - var EqualsValueClause = (function (_super) { - __extends(EqualsValueClause, _super); - function EqualsValueClause(value) { - _super.call(this); - this.value = value; - value && (value.parent = this); - } - EqualsValueClause.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - return EqualsValueClause; - })(AST); - TypeScript.EqualsValueClause = EqualsValueClause; - - var PrefixUnaryExpression = (function (_super) { - __extends(PrefixUnaryExpression, _super); - function PrefixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); - } - PrefixUnaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - PrefixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); - }; - - PrefixUnaryExpression.prototype.isExpression = function () { - return true; - }; - return PrefixUnaryExpression; - })(AST); - TypeScript.PrefixUnaryExpression = PrefixUnaryExpression; - - var ArrayLiteralExpression = (function (_super) { - __extends(ArrayLiteralExpression, _super); - function ArrayLiteralExpression(expressions) { - _super.call(this); - this.expressions = expressions; - expressions && (expressions.parent = this); - } - ArrayLiteralExpression.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expressions, ast.expressions, includingPosition); - }; - - ArrayLiteralExpression.prototype.isExpression = function () { - return true; - }; - return ArrayLiteralExpression; - })(AST); - TypeScript.ArrayLiteralExpression = ArrayLiteralExpression; - - var OmittedExpression = (function (_super) { - __extends(OmittedExpression, _super); - function OmittedExpression() { - _super.apply(this, arguments); - } - OmittedExpression.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - OmittedExpression.prototype.isExpression = function () { - return true; - }; - return OmittedExpression; - })(AST); - TypeScript.OmittedExpression = OmittedExpression; - - var ParenthesizedExpression = (function (_super) { - __extends(ParenthesizedExpression, _super); - function ParenthesizedExpression(openParenTrailingComments, expression) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.expression = expression; - expression && (expression.parent = this); - } - ParenthesizedExpression.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - ParenthesizedExpression.prototype.isExpression = function () { - return true; - }; - return ParenthesizedExpression; - })(AST); - TypeScript.ParenthesizedExpression = ParenthesizedExpression; - - var SimpleArrowFunctionExpression = (function (_super) { - __extends(SimpleArrowFunctionExpression, _super); - function SimpleArrowFunctionExpression(identifier, block, expression) { - _super.call(this); - this.identifier = identifier; - this.block = block; - this.expression = expression; - identifier && (identifier.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - SimpleArrowFunctionExpression.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpression.prototype.isExpression = function () { - return true; - }; - return SimpleArrowFunctionExpression; - })(AST); - TypeScript.SimpleArrowFunctionExpression = SimpleArrowFunctionExpression; - - var ParenthesizedArrowFunctionExpression = (function (_super) { - __extends(ParenthesizedArrowFunctionExpression, _super); - function ParenthesizedArrowFunctionExpression(callSignature, block, expression) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - this.expression = expression; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - ParenthesizedArrowFunctionExpression.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; - }; - - ParenthesizedArrowFunctionExpression.prototype.isExpression = function () { - return true; - }; - return ParenthesizedArrowFunctionExpression; - })(AST); - TypeScript.ParenthesizedArrowFunctionExpression = ParenthesizedArrowFunctionExpression; - - var QualifiedName = (function (_super) { - __extends(QualifiedName, _super); - function QualifiedName(left, right) { - _super.call(this); - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - QualifiedName.prototype.kind = function () { - return 121 /* QualifiedName */; - }; - - QualifiedName.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); - }; - return QualifiedName; - })(AST); - TypeScript.QualifiedName = QualifiedName; - - var ParameterList = (function (_super) { - __extends(ParameterList, _super); - function ParameterList(openParenTrailingComments, parameters) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.parameters = parameters; - parameters && (parameters.parent = this); - } - ParameterList.prototype.kind = function () { - return 227 /* ParameterList */; - }; - return ParameterList; - })(AST); - TypeScript.ParameterList = ParameterList; - - var ConstructorType = (function (_super) { - __extends(ConstructorType, _super); - function ConstructorType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - ConstructorType.prototype.kind = function () { - return 125 /* ConstructorType */; - }; - return ConstructorType; - })(AST); - TypeScript.ConstructorType = ConstructorType; - - var FunctionType = (function (_super) { - __extends(FunctionType, _super); - function FunctionType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - FunctionType.prototype.kind = function () { - return 123 /* FunctionType */; - }; - return FunctionType; - })(AST); - TypeScript.FunctionType = FunctionType; - - var ObjectType = (function (_super) { - __extends(ObjectType, _super); - function ObjectType(typeMembers) { - _super.call(this); - this.typeMembers = typeMembers; - typeMembers && (typeMembers.parent = this); - } - ObjectType.prototype.kind = function () { - return 122 /* ObjectType */; - }; - - ObjectType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeMembers, ast.typeMembers, includingPosition); - }; - return ObjectType; - })(AST); - TypeScript.ObjectType = ObjectType; - - var ArrayType = (function (_super) { - __extends(ArrayType, _super); - function ArrayType(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - ArrayType.prototype.kind = function () { - return 124 /* ArrayType */; - }; - - ArrayType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition); - }; - return ArrayType; - })(AST); - TypeScript.ArrayType = ArrayType; - - var TypeArgumentList = (function (_super) { - __extends(TypeArgumentList, _super); - function TypeArgumentList(typeArguments) { - _super.call(this); - this.typeArguments = typeArguments; - typeArguments && (typeArguments.parent = this); - } - TypeArgumentList.prototype.kind = function () { - return 228 /* TypeArgumentList */; - }; - return TypeArgumentList; - })(AST); - TypeScript.TypeArgumentList = TypeArgumentList; - - var GenericType = (function (_super) { - __extends(GenericType, _super); - function GenericType(name, typeArgumentList) { - _super.call(this); - this.name = name; - this.typeArgumentList = typeArgumentList; - name && (name.parent = this); - typeArgumentList && (typeArgumentList.parent = this); - } - GenericType.prototype.kind = function () { - return 126 /* GenericType */; - }; - - GenericType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.typeArgumentList, ast.typeArgumentList, includingPosition); - }; - return GenericType; - })(AST); - TypeScript.GenericType = GenericType; - - var TypeQuery = (function (_super) { - __extends(TypeQuery, _super); - function TypeQuery(name) { - _super.call(this); - this.name = name; - name && (name.parent = this); - } - TypeQuery.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuery.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); - }; - return TypeQuery; - })(AST); - TypeScript.TypeQuery = TypeQuery; - - var Block = (function (_super) { - __extends(Block, _super); - function Block(statements, closeBraceLeadingComments, closeBraceToken) { - _super.call(this); - this.statements = statements; - this.closeBraceLeadingComments = closeBraceLeadingComments; - this.closeBraceToken = closeBraceToken; - statements && (statements.parent = this); - } - Block.prototype.kind = function () { - return 146 /* Block */; - }; - - Block.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return Block; - })(AST); - TypeScript.Block = Block; - - var Parameter = (function (_super) { - __extends(Parameter, _super); - function Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - _super.call(this); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - Parameter.prototype.kind = function () { - return 242 /* Parameter */; - }; - return Parameter; - })(AST); - TypeScript.Parameter = Parameter; - - var MemberAccessExpression = (function (_super) { - __extends(MemberAccessExpression, _super); - function MemberAccessExpression(expression, name) { - _super.call(this); - this.expression = expression; - this.name = name; - expression && (expression.parent = this); - name && (name.parent = this); - } - MemberAccessExpression.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); - }; - - MemberAccessExpression.prototype.isExpression = function () { - return true; - }; - return MemberAccessExpression; - })(AST); - TypeScript.MemberAccessExpression = MemberAccessExpression; - - var PostfixUnaryExpression = (function (_super) { - __extends(PostfixUnaryExpression, _super); - function PostfixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); - } - PostfixUnaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - PostfixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); - }; - - PostfixUnaryExpression.prototype.isExpression = function () { - return true; - }; - return PostfixUnaryExpression; - })(AST); - TypeScript.PostfixUnaryExpression = PostfixUnaryExpression; - - var ElementAccessExpression = (function (_super) { - __extends(ElementAccessExpression, _super); - function ElementAccessExpression(expression, argumentExpression) { - _super.call(this); - this.expression = expression; - this.argumentExpression = argumentExpression; - expression && (expression.parent = this); - argumentExpression && (argumentExpression.parent = this); - } - ElementAccessExpression.prototype.kind = function () { - return 221 /* ElementAccessExpression */; - }; - - ElementAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentExpression, ast.argumentExpression, includingPosition); - }; - - ElementAccessExpression.prototype.isExpression = function () { - return true; - }; - return ElementAccessExpression; - })(AST); - TypeScript.ElementAccessExpression = ElementAccessExpression; - - var InvocationExpression = (function (_super) { - __extends(InvocationExpression, _super); - function InvocationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - InvocationExpression.prototype.kind = function () { - return 213 /* InvocationExpression */; - }; - - InvocationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); - }; - - InvocationExpression.prototype.isExpression = function () { - return true; - }; - return InvocationExpression; - })(AST); - TypeScript.InvocationExpression = InvocationExpression; - - var ArgumentList = (function (_super) { - __extends(ArgumentList, _super); - function ArgumentList(typeArgumentList, _arguments, closeParenToken) { - _super.call(this); - this.typeArgumentList = typeArgumentList; - this.closeParenToken = closeParenToken; - this.arguments = _arguments; - - typeArgumentList && (typeArgumentList.parent = this); - _arguments && (_arguments.parent = this); - } - ArgumentList.prototype.kind = function () { - return 226 /* ArgumentList */; - }; - return ArgumentList; - })(AST); - TypeScript.ArgumentList = ArgumentList; - - var BinaryExpression = (function (_super) { - __extends(BinaryExpression, _super); - function BinaryExpression(_nodeType, left, right) { - _super.call(this); - this._nodeType = _nodeType; - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - BinaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - BinaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); - }; - - BinaryExpression.prototype.isExpression = function () { - return true; - }; - return BinaryExpression; - })(AST); - TypeScript.BinaryExpression = BinaryExpression; - - var ConditionalExpression = (function (_super) { - __extends(ConditionalExpression, _super); - function ConditionalExpression(condition, whenTrue, whenFalse) { - _super.call(this); - this.condition = condition; - this.whenTrue = whenTrue; - this.whenFalse = whenFalse; - condition && (condition.parent = this); - whenTrue && (whenTrue.parent = this); - whenFalse && (whenFalse.parent = this); - } - ConditionalExpression.prototype.kind = function () { - return 186 /* ConditionalExpression */; - }; - - ConditionalExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.whenTrue, ast.whenTrue, includingPosition) && structuralEquals(this.whenFalse, ast.whenFalse, includingPosition); - }; - - ConditionalExpression.prototype.isExpression = function () { - return true; - }; - return ConditionalExpression; - })(AST); - TypeScript.ConditionalExpression = ConditionalExpression; - - var ConstructSignature = (function (_super) { - __extends(ConstructSignature, _super); - function ConstructSignature(callSignature) { - _super.call(this); - this.callSignature = callSignature; - callSignature && (callSignature.parent = this); - } - ConstructSignature.prototype.kind = function () { - return 143 /* ConstructSignature */; - }; - return ConstructSignature; - })(AST); - TypeScript.ConstructSignature = ConstructSignature; - - var MethodSignature = (function (_super) { - __extends(MethodSignature, _super); - function MethodSignature(propertyName, questionToken, callSignature) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - } - MethodSignature.prototype.kind = function () { - return 145 /* MethodSignature */; - }; - return MethodSignature; - })(AST); - TypeScript.MethodSignature = MethodSignature; - - var IndexSignature = (function (_super) { - __extends(IndexSignature, _super); - function IndexSignature(parameter, typeAnnotation) { - _super.call(this); - this.parameter = parameter; - this.typeAnnotation = typeAnnotation; - parameter && (parameter.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - IndexSignature.prototype.kind = function () { - return 144 /* IndexSignature */; - }; - return IndexSignature; - })(AST); - TypeScript.IndexSignature = IndexSignature; - - var PropertySignature = (function (_super) { - __extends(PropertySignature, _super); - function PropertySignature(propertyName, questionToken, typeAnnotation) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - PropertySignature.prototype.kind = function () { - return 141 /* PropertySignature */; - }; - return PropertySignature; - })(AST); - TypeScript.PropertySignature = PropertySignature; - - var CallSignature = (function (_super) { - __extends(CallSignature, _super); - function CallSignature(typeParameterList, parameterList, typeAnnotation) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - CallSignature.prototype.kind = function () { - return 142 /* CallSignature */; - }; - return CallSignature; - })(AST); - TypeScript.CallSignature = CallSignature; - - var TypeParameter = (function (_super) { - __extends(TypeParameter, _super); - function TypeParameter(identifier, constraint) { - _super.call(this); - this.identifier = identifier; - this.constraint = constraint; - identifier && (identifier.parent = this); - constraint && (constraint.parent = this); - } - TypeParameter.prototype.kind = function () { - return 238 /* TypeParameter */; - }; - - TypeParameter.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.constraint, ast.constraint, includingPosition); - }; - return TypeParameter; - })(AST); - TypeScript.TypeParameter = TypeParameter; - - var Constraint = (function (_super) { - __extends(Constraint, _super); - function Constraint(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - Constraint.prototype.kind = function () { - return 239 /* Constraint */; - }; - return Constraint; - })(AST); - TypeScript.Constraint = Constraint; - - var ElseClause = (function (_super) { - __extends(ElseClause, _super); - function ElseClause(statement) { - _super.call(this); - this.statement = statement; - statement && (statement.parent = this); - } - ElseClause.prototype.kind = function () { - return 235 /* ElseClause */; - }; - - ElseClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ElseClause; - })(AST); - TypeScript.ElseClause = ElseClause; - - var IfStatement = (function (_super) { - __extends(IfStatement, _super); - function IfStatement(condition, statement, elseClause) { - _super.call(this); - this.condition = condition; - this.statement = statement; - this.elseClause = elseClause; - condition && (condition.parent = this); - statement && (statement.parent = this); - elseClause && (elseClause.parent = this); - } - IfStatement.prototype.kind = function () { - return 147 /* IfStatement */; - }; - - IfStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.elseClause, ast.elseClause, includingPosition); - }; - return IfStatement; - })(AST); - TypeScript.IfStatement = IfStatement; - - var ExpressionStatement = (function (_super) { - __extends(ExpressionStatement, _super); - function ExpressionStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ExpressionStatement.prototype.kind = function () { - return 149 /* ExpressionStatement */; - }; - - ExpressionStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ExpressionStatement; - })(AST); - TypeScript.ExpressionStatement = ExpressionStatement; - - var ConstructorDeclaration = (function (_super) { - __extends(ConstructorDeclaration, _super); - function ConstructorDeclaration(callSignature, block) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - ConstructorDeclaration.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; - }; - return ConstructorDeclaration; - })(AST); - TypeScript.ConstructorDeclaration = ConstructorDeclaration; - - var MemberFunctionDeclaration = (function (_super) { - __extends(MemberFunctionDeclaration, _super); - function MemberFunctionDeclaration(modifiers, propertyName, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - MemberFunctionDeclaration.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; - }; - return MemberFunctionDeclaration; - })(AST); - TypeScript.MemberFunctionDeclaration = MemberFunctionDeclaration; - - var GetAccessor = (function (_super) { - __extends(GetAccessor, _super); - function GetAccessor(modifiers, propertyName, parameterList, typeAnnotation, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - GetAccessor.prototype.kind = function () { - return 139 /* GetAccessor */; - }; - return GetAccessor; - })(AST); - TypeScript.GetAccessor = GetAccessor; - - var SetAccessor = (function (_super) { - __extends(SetAccessor, _super); - function SetAccessor(modifiers, propertyName, parameterList, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - block && (block.parent = this); - } - SetAccessor.prototype.kind = function () { - return 140 /* SetAccessor */; - }; - return SetAccessor; - })(AST); - TypeScript.SetAccessor = SetAccessor; - - var MemberVariableDeclaration = (function (_super) { - __extends(MemberVariableDeclaration, _super); - function MemberVariableDeclaration(modifiers, variableDeclarator) { - _super.call(this); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - variableDeclarator && (variableDeclarator.parent = this); - } - MemberVariableDeclaration.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; - }; - return MemberVariableDeclaration; - })(AST); - TypeScript.MemberVariableDeclaration = MemberVariableDeclaration; - - var IndexMemberDeclaration = (function (_super) { - __extends(IndexMemberDeclaration, _super); - function IndexMemberDeclaration(indexSignature) { - _super.call(this); - this.indexSignature = indexSignature; - indexSignature && (indexSignature.parent = this); - } - IndexMemberDeclaration.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; - }; - return IndexMemberDeclaration; - })(AST); - TypeScript.IndexMemberDeclaration = IndexMemberDeclaration; - - var ThrowStatement = (function (_super) { - __extends(ThrowStatement, _super); - function ThrowStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ThrowStatement.prototype.kind = function () { - return 157 /* ThrowStatement */; - }; - - ThrowStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ThrowStatement; - })(AST); - TypeScript.ThrowStatement = ThrowStatement; - - var ReturnStatement = (function (_super) { - __extends(ReturnStatement, _super); - function ReturnStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ReturnStatement.prototype.kind = function () { - return 150 /* ReturnStatement */; - }; - - ReturnStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ReturnStatement; - })(AST); - TypeScript.ReturnStatement = ReturnStatement; - - var ObjectCreationExpression = (function (_super) { - __extends(ObjectCreationExpression, _super); - function ObjectCreationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - ObjectCreationExpression.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; - }; - - ObjectCreationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); - }; - - ObjectCreationExpression.prototype.isExpression = function () { - return true; - }; - return ObjectCreationExpression; - })(AST); - TypeScript.ObjectCreationExpression = ObjectCreationExpression; - - var SwitchStatement = (function (_super) { - __extends(SwitchStatement, _super); - function SwitchStatement(expression, closeParenToken, switchClauses) { - _super.call(this); - this.expression = expression; - this.closeParenToken = closeParenToken; - this.switchClauses = switchClauses; - expression && (expression.parent = this); - switchClauses && (switchClauses.parent = this); - } - SwitchStatement.prototype.kind = function () { - return 151 /* SwitchStatement */; - }; - - SwitchStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.switchClauses, ast.switchClauses, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return SwitchStatement; - })(AST); - TypeScript.SwitchStatement = SwitchStatement; - - var CaseSwitchClause = (function (_super) { - __extends(CaseSwitchClause, _super); - function CaseSwitchClause(expression, statements) { - _super.call(this); - this.expression = expression; - this.statements = statements; - expression && (expression.parent = this); - statements && (statements.parent = this); - } - CaseSwitchClause.prototype.kind = function () { - return 233 /* CaseSwitchClause */; - }; - - CaseSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return CaseSwitchClause; - })(AST); - TypeScript.CaseSwitchClause = CaseSwitchClause; - - var DefaultSwitchClause = (function (_super) { - __extends(DefaultSwitchClause, _super); - function DefaultSwitchClause(statements) { - _super.call(this); - this.statements = statements; - statements && (statements.parent = this); - } - DefaultSwitchClause.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; - }; - - DefaultSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return DefaultSwitchClause; - })(AST); - TypeScript.DefaultSwitchClause = DefaultSwitchClause; - - var BreakStatement = (function (_super) { - __extends(BreakStatement, _super); - function BreakStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - BreakStatement.prototype.kind = function () { - return 152 /* BreakStatement */; - }; - - BreakStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return BreakStatement; - })(AST); - TypeScript.BreakStatement = BreakStatement; - - var ContinueStatement = (function (_super) { - __extends(ContinueStatement, _super); - function ContinueStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - ContinueStatement.prototype.kind = function () { - return 153 /* ContinueStatement */; - }; - - ContinueStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return ContinueStatement; - })(AST); - TypeScript.ContinueStatement = ContinueStatement; - - var ForStatement = (function (_super) { - __extends(ForStatement, _super); - function ForStatement(variableDeclaration, initializer, condition, incrementor, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.condition = condition; - this.incrementor = incrementor; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - initializer && (initializer.parent = this); - condition && (condition.parent = this); - incrementor && (incrementor.parent = this); - statement && (statement.parent = this); - } - ForStatement.prototype.kind = function () { - return 154 /* ForStatement */; - }; - - ForStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.initializer, ast.initializer, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.incrementor, ast.incrementor, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ForStatement; - })(AST); - TypeScript.ForStatement = ForStatement; - - var ForInStatement = (function (_super) { - __extends(ForInStatement, _super); - function ForInStatement(variableDeclaration, left, expression, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.left = left; - this.expression = expression; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - left && (left.parent = this); - expression && (expression.parent = this); - statement && (statement.parent = this); - } - ForInStatement.prototype.kind = function () { - return 155 /* ForInStatement */; - }; - - ForInStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.variableDeclaration, ast.variableDeclaration, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ForInStatement; - })(AST); - TypeScript.ForInStatement = ForInStatement; - - var WhileStatement = (function (_super) { - __extends(WhileStatement, _super); - function WhileStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WhileStatement.prototype.kind = function () { - return 158 /* WhileStatement */; - }; - - WhileStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return WhileStatement; - })(AST); - TypeScript.WhileStatement = WhileStatement; - - var WithStatement = (function (_super) { - __extends(WithStatement, _super); - function WithStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WithStatement.prototype.kind = function () { - return 163 /* WithStatement */; - }; - - WithStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return WithStatement; - })(AST); - TypeScript.WithStatement = WithStatement; - - var EnumDeclaration = (function (_super) { - __extends(EnumDeclaration, _super); - function EnumDeclaration(modifiers, identifier, enumElements) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.enumElements = enumElements; - identifier && (identifier.parent = this); - enumElements && (enumElements.parent = this); - } - EnumDeclaration.prototype.kind = function () { - return 132 /* EnumDeclaration */; - }; - return EnumDeclaration; - })(AST); - TypeScript.EnumDeclaration = EnumDeclaration; - - var EnumElement = (function (_super) { - __extends(EnumElement, _super); - function EnumElement(propertyName, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - EnumElement.prototype.kind = function () { - return 243 /* EnumElement */; - }; - return EnumElement; - })(AST); - TypeScript.EnumElement = EnumElement; - - var CastExpression = (function (_super) { - __extends(CastExpression, _super); - function CastExpression(type, expression) { - _super.call(this); - this.type = type; - this.expression = expression; - type && (type.parent = this); - expression && (expression.parent = this); - } - CastExpression.prototype.kind = function () { - return 220 /* CastExpression */; - }; - - CastExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - CastExpression.prototype.isExpression = function () { - return true; - }; - return CastExpression; - })(AST); - TypeScript.CastExpression = CastExpression; - - var ObjectLiteralExpression = (function (_super) { - __extends(ObjectLiteralExpression, _super); - function ObjectLiteralExpression(propertyAssignments) { - _super.call(this); - this.propertyAssignments = propertyAssignments; - propertyAssignments && (propertyAssignments.parent = this); - } - ObjectLiteralExpression.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; - }; - - ObjectLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.propertyAssignments, ast.propertyAssignments, includingPosition); - }; - - ObjectLiteralExpression.prototype.isExpression = function () { - return true; - }; - return ObjectLiteralExpression; - })(AST); - TypeScript.ObjectLiteralExpression = ObjectLiteralExpression; - - var SimplePropertyAssignment = (function (_super) { - __extends(SimplePropertyAssignment, _super); - function SimplePropertyAssignment(propertyName, expression) { - _super.call(this); - this.propertyName = propertyName; - this.expression = expression; - propertyName && (propertyName.parent = this); - expression && (expression.parent = this); - } - SimplePropertyAssignment.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; - }; - return SimplePropertyAssignment; - })(AST); - TypeScript.SimplePropertyAssignment = SimplePropertyAssignment; - - var FunctionPropertyAssignment = (function (_super) { - __extends(FunctionPropertyAssignment, _super); - function FunctionPropertyAssignment(propertyName, callSignature, block) { - _super.call(this); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionPropertyAssignment.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; - }; - return FunctionPropertyAssignment; - })(AST); - TypeScript.FunctionPropertyAssignment = FunctionPropertyAssignment; - - var FunctionExpression = (function (_super) { - __extends(FunctionExpression, _super); - function FunctionExpression(identifier, callSignature, block) { - _super.call(this); - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionExpression.prototype.kind = function () { - return 222 /* FunctionExpression */; - }; - - FunctionExpression.prototype.isExpression = function () { - return true; - }; - return FunctionExpression; - })(AST); - TypeScript.FunctionExpression = FunctionExpression; - - var EmptyStatement = (function (_super) { - __extends(EmptyStatement, _super); - function EmptyStatement() { - _super.apply(this, arguments); - } - EmptyStatement.prototype.kind = function () { - return 156 /* EmptyStatement */; - }; - - EmptyStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return EmptyStatement; - })(AST); - TypeScript.EmptyStatement = EmptyStatement; - - var TryStatement = (function (_super) { - __extends(TryStatement, _super); - function TryStatement(block, catchClause, finallyClause) { - _super.call(this); - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - block && (block.parent = this); - catchClause && (catchClause.parent = this); - finallyClause && (finallyClause.parent = this); - } - TryStatement.prototype.kind = function () { - return 159 /* TryStatement */; - }; - - TryStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.catchClause, ast.catchClause, includingPosition) && structuralEquals(this.finallyClause, ast.finallyClause, includingPosition); - }; - return TryStatement; - })(AST); - TypeScript.TryStatement = TryStatement; - - var CatchClause = (function (_super) { - __extends(CatchClause, _super); - function CatchClause(identifier, typeAnnotation, block) { - _super.call(this); - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.block = block; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - CatchClause.prototype.kind = function () { - return 236 /* CatchClause */; - }; - - CatchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.typeAnnotation, ast.typeAnnotation, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); - }; - return CatchClause; - })(AST); - TypeScript.CatchClause = CatchClause; - - var FinallyClause = (function (_super) { - __extends(FinallyClause, _super); - function FinallyClause(block) { - _super.call(this); - this.block = block; - block && (block.parent = this); - } - FinallyClause.prototype.kind = function () { - return 237 /* FinallyClause */; - }; - - FinallyClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); - }; - return FinallyClause; - })(AST); - TypeScript.FinallyClause = FinallyClause; - - var LabeledStatement = (function (_super) { - __extends(LabeledStatement, _super); - function LabeledStatement(identifier, statement) { - _super.call(this); - this.identifier = identifier; - this.statement = statement; - identifier && (identifier.parent = this); - statement && (statement.parent = this); - } - LabeledStatement.prototype.kind = function () { - return 160 /* LabeledStatement */; - }; - - LabeledStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return LabeledStatement; - })(AST); - TypeScript.LabeledStatement = LabeledStatement; - - var DoStatement = (function (_super) { - __extends(DoStatement, _super); - function DoStatement(statement, whileKeyword, condition) { - _super.call(this); - this.statement = statement; - this.whileKeyword = whileKeyword; - this.condition = condition; - statement && (statement.parent = this); - condition && (condition.parent = this); - } - DoStatement.prototype.kind = function () { - return 161 /* DoStatement */; - }; - - DoStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition); - }; - return DoStatement; - })(AST); - TypeScript.DoStatement = DoStatement; - - var TypeOfExpression = (function (_super) { - __extends(TypeOfExpression, _super); - function TypeOfExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - TypeOfExpression.prototype.kind = function () { - return 171 /* TypeOfExpression */; - }; - - TypeOfExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - TypeOfExpression.prototype.isExpression = function () { - return true; - }; - return TypeOfExpression; - })(AST); - TypeScript.TypeOfExpression = TypeOfExpression; - - var DeleteExpression = (function (_super) { - __extends(DeleteExpression, _super); - function DeleteExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - DeleteExpression.prototype.kind = function () { - return 170 /* DeleteExpression */; - }; - - DeleteExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - DeleteExpression.prototype.isExpression = function () { - return true; - }; - return DeleteExpression; - })(AST); - TypeScript.DeleteExpression = DeleteExpression; - - var VoidExpression = (function (_super) { - __extends(VoidExpression, _super); - function VoidExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - VoidExpression.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - VoidExpression.prototype.isExpression = function () { - return true; - }; - return VoidExpression; - })(AST); - TypeScript.VoidExpression = VoidExpression; - - var DebuggerStatement = (function (_super) { - __extends(DebuggerStatement, _super); - function DebuggerStatement() { - _super.apply(this, arguments); - } - DebuggerStatement.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - return DebuggerStatement; - })(AST); - TypeScript.DebuggerStatement = DebuggerStatement; - - var Comment = (function () { - function Comment(_trivia, endsLine, _start, _end) { - this._trivia = _trivia; - this.endsLine = endsLine; - this._start = _start; - this._end = _end; - } - Comment.prototype.start = function () { - return this._start; - }; - - Comment.prototype.end = function () { - return this._end; - }; - - Comment.prototype.fullText = function () { - return this._trivia.fullText(); - }; - - Comment.prototype.kind = function () { - return this._trivia.kind(); - }; - - Comment.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { - return false; - } - } - - return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine; - }; - return Comment; - })(); - TypeScript.Comment = Comment; -})(TypeScript || (TypeScript = {})); -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement, fromIndex) { - "use strict"; - if (this == null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { - n = 0; - } else if (n != 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; -} - -if (!Array.prototype.filter) { - Array.prototype.filter = function (fun, thisp) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - if (fun.call(thisp, val, i, t)) - res.push(val); - } - } - - return res; - }; -} - -if (!Array.prototype.map) { - Array.prototype.map = function (callback, thisArg) { - var T = undefined, A, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } - - A = new Array(len); - - k = 0; - - while (k < len) { - var kValue, mappedValue; - - if (k in O) { - kValue = O[k]; - - mappedValue = callback.call(T, kValue, k, O); - - A[k] = mappedValue; - } - - k++; - } - - return A; - }; -} - -if (!Array.prototype.reduce) { - Array.prototype.reduce = function reduce(accumulator) { - if (this === null || this === undefined) - throw new TypeError("Object is null or undefined"); - var i = 0, l = this.length >> 0, curr; - - if (typeof accumulator !== "function") - throw new TypeError("First argument is not callable"); - - if (arguments.length < 2) { - if (l === 0) - throw new TypeError("Array length is 0 and no second argument"); - curr = this[0]; - i = 1; - } else - curr = arguments[1]; - - while (i < l) { - if (i in this) - curr = accumulator.call(undefined, curr, this[i], i, this); - ++i; - } - - return curr; - }; -} - -if (!Array.prototype.forEach) { - Array.prototype.forEach = function (callback, thisArg) { - var T, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } else { - T = undefined; - } - - k = 0; - - while (k < len) { - var kValue; - - if (k in O) { - kValue = O[k]; - - callback.call(T, kValue, k, O); - } - - k++; - } - }; -} - -if (!Date.now) { - Date.now = function () { - return (new Date()).getTime(); - }; -} - -if (!Array.prototype.some) { - Array.prototype.some = function (fun) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var thisp = arguments[1]; - for (var i = 0; i < len; i++) { - var idx = i.toString(); - if (idx in t && fun.call(thisp, t[i], i, t)) - return true; - } - - return false; - }; -} -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (EndOfLineState) { - EndOfLineState[EndOfLineState["Start"] = 0] = "Start"; - EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; - EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; - EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; - })(Services.EndOfLineState || (Services.EndOfLineState = {})); - var EndOfLineState = Services.EndOfLineState; - - (function (TokenClass) { - TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; - TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; - TokenClass[TokenClass["Operator"] = 2] = "Operator"; - TokenClass[TokenClass["Comment"] = 3] = "Comment"; - TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; - TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; - TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; - TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; - TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; - })(Services.TokenClass || (Services.TokenClass = {})); - var TokenClass = Services.TokenClass; - - var noRegexTable = []; - noRegexTable[11 /* IdentifierName */] = true; - noRegexTable[14 /* StringLiteral */] = true; - noRegexTable[13 /* NumericLiteral */] = true; - noRegexTable[12 /* RegularExpressionLiteral */] = true; - noRegexTable[35 /* ThisKeyword */] = true; - noRegexTable[93 /* PlusPlusToken */] = true; - noRegexTable[94 /* MinusMinusToken */] = true; - noRegexTable[73 /* CloseParenToken */] = true; - noRegexTable[75 /* CloseBracketToken */] = true; - noRegexTable[71 /* CloseBraceToken */] = true; - noRegexTable[37 /* TrueKeyword */] = true; - noRegexTable[24 /* FalseKeyword */] = true; - - var Classifier = (function () { - function Classifier(host) { - this.host = host; - this.characterWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - this.diagnostics = []; - } - Classifier.prototype.getClassificationsForLine = function (text, lexState) { - var offset = 0; - if (lexState !== 0 /* Start */) { - if (lexState === 3 /* InDoubleQuoteStringLiteral */) { - text = '"\\\n' + text; - } else if (lexState === 2 /* InSingleQuoteStringLiteral */) { - text = "'\\\n" + text; - } else if (lexState === 1 /* InMultiLineCommentTrivia */) { - text = "/*\n" + text; - } - - offset = 3; - } - - var result = new ClassificationResult(); - this.scanner = new TypeScript.Scanner("", TypeScript.SimpleText.fromString(text), 1 /* EcmaScript5 */, this.characterWindow); - - var lastTokenKind = 0 /* None */; - - while (this.scanner.absoluteIndex() < text.length) { - this.diagnostics.length = 0; - var token = this.scanner.scan(this.diagnostics, !noRegexTable[lastTokenKind]); - lastTokenKind = token.tokenKind; - - this.processToken(text, offset, token, result); - } - - return result; - }; - - Classifier.prototype.processToken = function (text, offset, token, result) { - this.processTriviaList(text, offset, token.leadingTrivia(), result); - this.addResult(text, offset, result, token.width(), token.tokenKind); - this.processTriviaList(text, offset, token.trailingTrivia(), result); - - if (this.scanner.absoluteIndex() >= text.length) { - if (this.diagnostics.length > 0) { - if (this.diagnostics[this.diagnostics.length - 1].diagnosticKey() === TypeScript.DiagnosticCode.AsteriskSlash_expected) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; - return; - } - } - - if (token.tokenKind === 14 /* StringLiteral */) { - var tokenText = token.text(); - if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { - var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; - return; - } - } - } - }; - - Classifier.prototype.processTriviaList = function (text, offset, triviaList, result) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - this.addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); - } - }; - - Classifier.prototype.addResult = function (text, offset, result, length, kind) { - if (length > 0) { - if (result.entries.length === 0) { - length -= offset; - } - - result.entries.push(new ClassificationInfo(length, this.classFromKind(kind))); - } - }; - - Classifier.prototype.classFromKind = function (kind) { - if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { - return 1 /* Keyword */; - } else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { - return 2 /* Operator */; - } else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return 0 /* Punctuation */; - } - - switch (kind) { - case 4 /* WhitespaceTrivia */: - return 4 /* Whitespace */; - case 6 /* MultiLineCommentTrivia */: - case 7 /* SingleLineCommentTrivia */: - return 3 /* Comment */; - case 13 /* NumericLiteral */: - return 6 /* NumberLiteral */; - case 14 /* StringLiteral */: - return 7 /* StringLiteral */; - case 12 /* RegularExpressionLiteral */: - return 8 /* RegExpLiteral */; - case 11 /* IdentifierName */: - default: - return 5 /* Identifier */; - } - }; - return Classifier; - })(); - Services.Classifier = Classifier; - - var ClassificationResult = (function () { - function ClassificationResult() { - this.finalLexState = 0 /* Start */; - this.entries = []; - } - return ClassificationResult; - })(); - Services.ClassificationResult = ClassificationResult; - - var ClassificationInfo = (function () { - function ClassificationInfo(length, classification) { - this.length = length; - this.classification = classification; - } - return ClassificationInfo; - })(); - Services.ClassificationInfo = ClassificationInfo; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - - - - - function logInternalError(logger, err) { - logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); - } - Services.logInternalError = logInternalError; - - var ReferenceEntry = (function () { - function ReferenceEntry(fileName, minChar, limChar, isWriteAccess) { - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.isWriteAccess = false; - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.isWriteAccess = isWriteAccess; - } - return ReferenceEntry; - })(); - Services.ReferenceEntry = ReferenceEntry; - - var NavigateToItem = (function () { - function NavigateToItem() { - this.name = ""; - this.kind = ""; - this.kindModifiers = ""; - this.matchKind = ""; - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.additionalSpans = null; - this.containerName = ""; - this.containerKind = ""; - } - return NavigateToItem; - })(); - Services.NavigateToItem = NavigateToItem; - - var TextEdit = (function () { - function TextEdit(minChar, limChar, text) { - this.minChar = minChar; - this.limChar = limChar; - this.text = text; - } - TextEdit.createInsert = function (pos, text) { - return new TextEdit(pos, pos, text); - }; - TextEdit.createDelete = function (minChar, limChar) { - return new TextEdit(minChar, limChar, ""); - }; - TextEdit.createReplace = function (minChar, limChar, text) { - return new TextEdit(minChar, limChar, text); - }; - return TextEdit; - })(); - Services.TextEdit = TextEdit; - - var EditorOptions = (function () { - function EditorOptions() { - this.IndentSize = 4; - this.TabSize = 4; - this.NewLineCharacter = "\r\n"; - this.ConvertTabsToSpaces = true; - } - EditorOptions.clone = function (objectToClone) { - var editorOptions = new EditorOptions(); - editorOptions.IndentSize = objectToClone.IndentSize; - editorOptions.TabSize = objectToClone.TabSize; - editorOptions.NewLineCharacter = objectToClone.NewLineCharacter; - editorOptions.ConvertTabsToSpaces = objectToClone.ConvertTabsToSpaces; - return editorOptions; - }; - return EditorOptions; - })(); - Services.EditorOptions = EditorOptions; - - var FormatCodeOptions = (function (_super) { - __extends(FormatCodeOptions, _super); - function FormatCodeOptions() { - _super.apply(this, arguments); - this.InsertSpaceAfterCommaDelimiter = true; - this.InsertSpaceAfterSemicolonInForStatements = true; - this.InsertSpaceBeforeAndAfterBinaryOperators = true; - this.InsertSpaceAfterKeywordsInControlFlowStatements = true; - this.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = false; - this.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = false; - this.PlaceOpenBraceOnNewLineForFunctions = false; - this.PlaceOpenBraceOnNewLineForControlBlocks = false; - } - FormatCodeOptions.clone = function (objectToClone) { - var formatCodeOptions = EditorOptions.clone(objectToClone); - formatCodeOptions.InsertSpaceAfterCommaDelimiter = objectToClone.InsertSpaceAfterCommaDelimiter; - formatCodeOptions.InsertSpaceAfterSemicolonInForStatements = objectToClone.InsertSpaceAfterSemicolonInForStatements; - formatCodeOptions.InsertSpaceBeforeAndAfterBinaryOperators = objectToClone.InsertSpaceBeforeAndAfterBinaryOperators; - formatCodeOptions.InsertSpaceAfterKeywordsInControlFlowStatements = objectToClone.InsertSpaceAfterKeywordsInControlFlowStatements; - formatCodeOptions.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = objectToClone.InsertSpaceAfterFunctionKeywordForAnonymousFunctions; - formatCodeOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = objectToClone.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis; - formatCodeOptions.PlaceOpenBraceOnNewLineForFunctions = objectToClone.PlaceOpenBraceOnNewLineForFunctions; - formatCodeOptions.PlaceOpenBraceOnNewLineForControlBlocks = objectToClone.PlaceOpenBraceOnNewLineForControlBlocks; - return formatCodeOptions; - }; - return FormatCodeOptions; - })(EditorOptions); - Services.FormatCodeOptions = FormatCodeOptions; - - var DefinitionInfo = (function () { - function DefinitionInfo(fileName, minChar, limChar, kind, name, containerKind, containerName) { - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.kind = kind; - this.name = name; - this.containerKind = containerKind; - this.containerName = containerName; - } - return DefinitionInfo; - })(); - Services.DefinitionInfo = DefinitionInfo; - - var TypeInfo = (function () { - function TypeInfo(memberName, docComment, fullSymbolName, kind, minChar, limChar) { - this.memberName = memberName; - this.docComment = docComment; - this.fullSymbolName = fullSymbolName; - this.kind = kind; - this.minChar = minChar; - this.limChar = limChar; - } - return TypeInfo; - })(); - Services.TypeInfo = TypeInfo; - - var SpanInfo = (function () { - function SpanInfo(minChar, limChar, text) { - if (typeof text === "undefined") { text = null; } - this.minChar = minChar; - this.limChar = limChar; - this.text = text; - } - return SpanInfo; - })(); - Services.SpanInfo = SpanInfo; - - var SignatureInfo = (function () { - function SignatureInfo() { - this.formal = []; - } - return SignatureInfo; - })(); - Services.SignatureInfo = SignatureInfo; - - var FormalSignatureItemInfo = (function () { - function FormalSignatureItemInfo() { - this.typeParameters = []; - this.parameters = []; - } - return FormalSignatureItemInfo; - })(); - Services.FormalSignatureItemInfo = FormalSignatureItemInfo; - - var FormalTypeParameterInfo = (function () { - function FormalTypeParameterInfo() { - } - return FormalTypeParameterInfo; - })(); - Services.FormalTypeParameterInfo = FormalTypeParameterInfo; - - var FormalParameterInfo = (function () { - function FormalParameterInfo() { - } - return FormalParameterInfo; - })(); - Services.FormalParameterInfo = FormalParameterInfo; - - var ActualSignatureInfo = (function () { - function ActualSignatureInfo() { - } - return ActualSignatureInfo; - })(); - Services.ActualSignatureInfo = ActualSignatureInfo; - - var CompletionInfo = (function () { - function CompletionInfo() { - this.maybeInaccurate = false; - this.isMemberCompletion = false; - this.entries = []; - } - return CompletionInfo; - })(); - Services.CompletionInfo = CompletionInfo; - - var ScriptElementKind = (function () { - function ScriptElementKind() { - } - ScriptElementKind.unknown = ""; - - ScriptElementKind.keyword = "keyword"; - - ScriptElementKind.scriptElement = "script"; - - ScriptElementKind.moduleElement = "module"; - - ScriptElementKind.classElement = "class"; - - ScriptElementKind.interfaceElement = "interface"; - - ScriptElementKind.enumElement = "enum"; - - ScriptElementKind.variableElement = "var"; - - ScriptElementKind.localVariableElement = "local var"; - - ScriptElementKind.functionElement = "function"; - - ScriptElementKind.localFunctionElement = "local function"; - - ScriptElementKind.memberFunctionElement = "method"; - - ScriptElementKind.memberGetAccessorElement = "getter"; - ScriptElementKind.memberSetAccessorElement = "setter"; - - ScriptElementKind.memberVariableElement = "property"; - - ScriptElementKind.constructorImplementationElement = "constructor"; - - ScriptElementKind.callSignatureElement = "call"; - - ScriptElementKind.indexSignatureElement = "index"; - - ScriptElementKind.constructSignatureElement = "construct"; - - ScriptElementKind.parameterElement = "parameter"; - - ScriptElementKind.typeParameterElement = "type parameter"; - - ScriptElementKind.primitiveType = "primitive type"; - return ScriptElementKind; - })(); - Services.ScriptElementKind = ScriptElementKind; - - var ScriptElementKindModifier = (function () { - function ScriptElementKindModifier() { - } - ScriptElementKindModifier.none = ""; - ScriptElementKindModifier.publicMemberModifier = "public"; - ScriptElementKindModifier.privateMemberModifier = "private"; - ScriptElementKindModifier.exportedModifier = "export"; - ScriptElementKindModifier.ambientModifier = "declare"; - ScriptElementKindModifier.staticModifier = "static"; - return ScriptElementKindModifier; - })(); - Services.ScriptElementKindModifier = ScriptElementKindModifier; - - var MatchKind = (function () { - function MatchKind() { - } - MatchKind.none = null; - MatchKind.exact = "exact"; - MatchKind.subString = "substring"; - MatchKind.prefix = "prefix"; - return MatchKind; - })(); - Services.MatchKind = MatchKind; - - var DiagnosticCategory = (function () { - function DiagnosticCategory() { - } - DiagnosticCategory.none = ""; - DiagnosticCategory.error = "error"; - DiagnosticCategory.warning = "warning"; - DiagnosticCategory.message = "message"; - return DiagnosticCategory; - })(); - Services.DiagnosticCategory = DiagnosticCategory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshot = (function () { - function TextSnapshot(snapshot) { - this.snapshot = snapshot; - this.lines = []; - } - TextSnapshot.prototype.getText = function (span) { - return this.snapshot.substr(span.start(), span.length(), false); - }; - - TextSnapshot.prototype.getLineNumberFromPosition = function (position) { - return this.snapshot.lineMap().getLineNumberFromPosition(position); - }; - - TextSnapshot.prototype.getLineFromPosition = function (position) { - var lineNumber = this.getLineNumberFromPosition(position); - return this.getLineFromLineNumber(lineNumber); - }; - - TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) { - var line = this.lines[lineNumber]; - if (line === undefined) { - line = this.getLineFromLineNumberWorker(lineNumber); - this.lines[lineNumber] = line; - } - return line; - }; - - TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) { - var lineMap = this.snapshot.lineMap().lineStarts(); - var lineMapIndex = lineNumber; - if (lineMapIndex < 0 || lineMapIndex >= lineMap.length) - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex])); - var start = lineMap[lineMapIndex]; - - var end; - var endIncludingLineBreak; - var lineBreak = ""; - if (lineMapIndex == lineMap.length) { - end = endIncludingLineBreak = this.snapshot.length(); - } else { - endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]); - for (var p = endIncludingLineBreak - 1; p >= start; p--) { - var c = this.snapshot.substr(p, 1, false); - - if (c != "\r" && c != "\n") { - break; - } - } - end = p + 1; - lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end, false); - } - var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak); - return result; - }; - return TextSnapshot; - })(); - Formatting.TextSnapshot = TextSnapshot; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshotLine = (function () { - function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) { - this._snapshot = _snapshot; - this._lineNumber = _lineNumber; - this._start = _start; - this._end = _end; - this._lineBreak = _lineBreak; - } - TextSnapshotLine.prototype.snapshot = function () { - return this._snapshot; - }; - - TextSnapshotLine.prototype.start = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._start); - }; - - TextSnapshotLine.prototype.startPosition = function () { - return this._start; - }; - - TextSnapshotLine.prototype.end = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end); - }; - - TextSnapshotLine.prototype.endPosition = function () { - return this._end; - }; - - TextSnapshotLine.prototype.endIncludingLineBreak = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length); - }; - - TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () { - return this._end + this._lineBreak.length; - }; - - TextSnapshotLine.prototype.length = function () { - return this._end - this._start; - }; - - TextSnapshotLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - - TextSnapshotLine.prototype.getText = function () { - return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end)); - }; - return TextSnapshotLine; - })(); - Formatting.TextSnapshotLine = TextSnapshotLine; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SnapshotPoint = (function () { - function SnapshotPoint(snapshot, position) { - this.snapshot = snapshot; - this.position = position; - } - SnapshotPoint.prototype.getContainingLine = function () { - return this.snapshot.getLineFromPosition(this.position); - }; - SnapshotPoint.prototype.add = function (offset) { - return new SnapshotPoint(this.snapshot, this.position + offset); - }; - return SnapshotPoint; - })(); - Formatting.SnapshotPoint = SnapshotPoint; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingContext = (function () { - function FormattingContext(snapshot, formattingRequestKind) { - this.snapshot = snapshot; - this.formattingRequestKind = formattingRequestKind; - this.currentTokenSpan = null; - this.nextTokenSpan = null; - this.contextNode = null; - this.currentTokenParent = null; - this.nextTokenParent = null; - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - TypeScript.Debug.assert(this.snapshot != null, "snapshot is null"); - } - FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) { - TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null"); - TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null"); - TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null"); - TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null"); - TypeScript.Debug.assert(commonParent != null, "commonParent is null"); - - this.currentTokenSpan = currentTokenSpan; - this.currentTokenParent = currentTokenParent; - this.nextTokenSpan = nextTokenSpan; - this.nextTokenParent = nextTokenParent; - this.contextNode = commonParent; - - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - }; - - FormattingContext.prototype.ContextNodeAllOnSameLine = function () { - if (this.contextNodeAllOnSameLine === null) { - this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); - } - - return this.contextNodeAllOnSameLine; - }; - - FormattingContext.prototype.NextNodeAllOnSameLine = function () { - if (this.nextNodeAllOnSameLine === null) { - this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); - } - - return this.nextNodeAllOnSameLine; - }; - - FormattingContext.prototype.TokensAreOnSameLine = function () { - if (this.tokensAreOnSameLine === null) { - var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start()); - var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start()); - - this.tokensAreOnSameLine = (startLine == endLine); - } - - return this.tokensAreOnSameLine; - }; - - FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { - if (this.contextNodeBlockIsOnOneLine === null) { - this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); - } - - return this.contextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { - if (this.nextNodeBlockIsOnOneLine === null) { - this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); - } - - return this.nextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NodeIsOnOneLine = function (node) { - var startLine = this.snapshot.getLineNumberFromPosition(node.start()); - var endLine = this.snapshot.getLineNumberFromPosition(node.end()); - - return startLine == endLine; - }; - - FormattingContext.prototype.BlockIsOnOneLine = function (node) { - var start = node.fullStart(); - var block = node.node(); - var openBracePosition = start + TypeScript.Syntax.childOffset(block, block.openBraceToken); - var closeBracePosition = start + TypeScript.Syntax.childOffset(block, block.closeBraceToken); - - var startLine = this.snapshot.getLineNumberFromPosition(openBracePosition); - var endLine = this.snapshot.getLineNumberFromPosition(closeBracePosition); - - return startLine == endLine; - }; - return FormattingContext; - })(); - Formatting.FormattingContext = FormattingContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingManager = (function () { - function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) { - this.syntaxTree = syntaxTree; - this.snapshot = snapshot; - this.rulesProvider = rulesProvider; - this.options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); - } - FormattingManager.prototype.formatSelection = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 1 /* FormatSelection */); - }; - - FormattingManager.prototype.formatDocument = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 0 /* FormatDocument */); - }; - - FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 5 /* FormatOnPaste */); - }; - - FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var semicolonPositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (semicolonPositionedToken.kind() === 78 /* SemicolonToken */) { - var current = semicolonPositionedToken; - while (current.parent() !== null && current.parent().end() === semicolonPositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); - } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 3 /* FormatOnSemicolon */); - } - - return []; - }; - - FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var closeBracePositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (closeBracePositionedToken.kind() === 71 /* CloseBraceToken */) { - var current = closeBracePositionedToken; - while (current.parent() !== null && current.parent().end() === closeBracePositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); - } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */); - } - - return []; - }; - - FormattingManager.prototype.formatOnEnter = function (caretPosition) { - var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); - - if (lineNumber > 0) { - var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1); - var currentLine = this.snapshot.getLineFromLineNumber(lineNumber); - var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition()); - - return this.formatSpan(span, 2 /* FormatOnEnter */); - } - - return []; - }; - - FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) { - var startLine = this.snapshot.getLineFromPosition(span.start()); - span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end()); - - var result = []; - - var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); - - formattingEdits.forEach(function (item) { - var edit = new TypeScript.Services.TextEdit(item.position, item.position + item.length, item.replaceWith); - result.push(edit); - }); - - return result; - }; - return FormattingManager; - })(); - Formatting.FormattingManager = FormattingManager; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (FormattingRequestKind) { - FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; - FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; - FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; - FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; - FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace"; - FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste"; - })(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {})); - var FormattingRequestKind = Formatting.FormattingRequestKind; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rule = (function () { - function Rule(Descriptor, Operation, Flag) { - if (typeof Flag === "undefined") { Flag = 0 /* None */; } - this.Descriptor = Descriptor; - this.Operation = Operation; - this.Flag = Flag; - } - Rule.prototype.toString = function () { - return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]"; - }; - return Rule; - })(); - Formatting.Rule = Rule; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleAction) { - RuleAction[RuleAction["Ignore"] = 0] = "Ignore"; - RuleAction[RuleAction["Space"] = 1] = "Space"; - RuleAction[RuleAction["NewLine"] = 2] = "NewLine"; - RuleAction[RuleAction["Delete"] = 3] = "Delete"; - })(Formatting.RuleAction || (Formatting.RuleAction = {})); - var RuleAction = Formatting.RuleAction; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleDescriptor = (function () { - function RuleDescriptor(LeftTokenRange, RightTokenRange) { - this.LeftTokenRange = LeftTokenRange; - this.RightTokenRange = RightTokenRange; - } - RuleDescriptor.prototype.toString = function () { - return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]"; - }; - - RuleDescriptor.create1 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create2 = function (left, right) { - return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create3 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right); - }; - - RuleDescriptor.create4 = function (left, right) { - return new RuleDescriptor(left, right); - }; - return RuleDescriptor; - })(); - Formatting.RuleDescriptor = RuleDescriptor; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleFlags) { - RuleFlags[RuleFlags["None"] = 0] = "None"; - RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; - })(Formatting.RuleFlags || (Formatting.RuleFlags = {})); - var RuleFlags = Formatting.RuleFlags; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperation = (function () { - function RuleOperation() { - this.Context = null; - this.Action = null; - } - RuleOperation.prototype.toString = function () { - return "[context=" + this.Context + "," + "action=" + this.Action + "]"; - }; - - RuleOperation.create1 = function (action) { - return RuleOperation.create2(Formatting.RuleOperationContext.Any, action); - }; - - RuleOperation.create2 = function (context, action) { - var result = new RuleOperation(); - result.Context = context; - result.Action = action; - return result; - }; - return RuleOperation; - })(); - Formatting.RuleOperation = RuleOperation; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperationContext = (function () { - function RuleOperationContext() { - var funcs = []; - for (var _i = 0; _i < (arguments.length - 0); _i++) { - funcs[_i] = arguments[_i + 0]; - } - this.customContextChecks = funcs; - } - RuleOperationContext.prototype.IsAny = function () { - { - return this == RuleOperationContext.Any; - } - }; - - RuleOperationContext.prototype.InContext = function (context) { - if (this.IsAny()) { - return true; - } - - for (var i = 0, len = this.customContextChecks.length; i < len; i++) { - if (!this.customContextChecks[i](context)) { - return false; - } - } - return true; - }; - RuleOperationContext.Any = new RuleOperationContext(); - return RuleOperationContext; - })(); - Formatting.RuleOperationContext = RuleOperationContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rules = (function () { - function Rules() { - this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */)); - this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(7 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */)); - - this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 106 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 105 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(106 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */)); - - this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 23 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 42 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 75 /* CloseBracketToken */, 79 /* CommaToken */, 78 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(75 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments; - this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([11 /* IdentifierName */, 6 /* MultiLineCommentTrivia */]); - this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 6 /* MultiLineCommentTrivia */, 22 /* DoKeyword */, 38 /* TryKeyword */, 25 /* FinallyKeyword */, 23 /* ElseKeyword */]); - this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */)); - - this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(93 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(94 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(93 /* PlusPlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(94 /* MinusMinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 79 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([40 /* VarKeyword */, 36 /* ThrowKeyword */, 31 /* NewKeyword */, 21 /* DeleteKeyword */, 33 /* ReturnKeyword */, 39 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */)); - this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(27 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */)); - this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(41 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */)); - - this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(33 /* ReturnKeyword */, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 22 /* DoKeyword */, 23 /* ElseKeyword */, 16 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */)); - - this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([38 /* TryKeyword */, 25 /* FinallyKeyword */]), 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([64 /* GetKeyword */, 68 /* SetKeyword */]), 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - - this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(62 /* ConstructorKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([65 /* ModuleKeyword */, 66 /* RequireKeyword */]), 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([44 /* ClassKeyword */, 63 /* DeclareKeyword */, 46 /* EnumKeyword */, 47 /* ExportKeyword */, 48 /* ExtendsKeyword */, 64 /* GetKeyword */, 51 /* ImplementsKeyword */, 49 /* ImportKeyword */, 52 /* InterfaceKeyword */, 65 /* ModuleKeyword */, 55 /* PrivateKeyword */, 57 /* PublicKeyword */, 68 /* SetKeyword */, 58 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([48 /* ExtendsKeyword */, 51 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(14 /* StringLiteral */, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */)); - - this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(85 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(77 /* DotDotDotToken */, 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - - this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseParenToken */, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([72 /* OpenParenToken */, 74 /* OpenBracketToken */, 81 /* GreaterThanToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - - this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */)); - - this.HighPriorityCommonRules = [ - this.IgnoreBeforeComment, this.IgnoreAfterLineComment, - this.NoSpaceBeforeColon, this.SpaceAfterColon, this.NoSpaceBeforeQMark, this.SpaceAfterQMark, - this.NoSpaceBeforeDot, this.NoSpaceAfterDot, - this.NoSpaceAfterUnaryPrefixOperator, - this.NoSpaceAfterUnaryPreincrementOperator, this.NoSpaceAfterUnaryPredecrementOperator, - this.NoSpaceBeforeUnaryPostincrementOperator, this.NoSpaceBeforeUnaryPostdecrementOperator, - this.SpaceAfterPostincrementWhenFollowedByAdd, - this.SpaceAfterAddWhenFollowedByUnaryPlus, this.SpaceAfterAddWhenFollowedByPreincrement, - this.SpaceAfterPostdecrementWhenFollowedBySubtract, - this.SpaceAfterSubtractWhenFollowedByUnaryMinus, this.SpaceAfterSubtractWhenFollowedByPredecrement, - this.NoSpaceAfterCloseBrace, - this.SpaceAfterOpenBrace, this.SpaceBeforeCloseBrace, this.NewLineBeforeCloseBraceInBlockContext, - this.SpaceAfterCloseBrace, this.SpaceBetweenCloseBraceAndElse, this.SpaceBetweenCloseBraceAndWhile, this.NoSpaceBetweenEmptyBraceBrackets, - this.SpaceAfterFunctionInFuncDecl, this.NewLineAfterOpenBraceInBlockContext, this.SpaceAfterGetSetInMember, - this.NoSpaceBetweenReturnAndSemicolon, - this.SpaceAfterCertainKeywords, - this.NoSpaceBeforeOpenParenInFuncCall, - this.SpaceBeforeBinaryKeywordOperator, this.SpaceAfterBinaryKeywordOperator, - this.SpaceAfterVoidOperator, - this.NoSpaceAfterConstructor, this.NoSpaceAfterModuleImport, - this.SpaceAfterCertainTypeScriptKeywords, this.SpaceBeforeCertainTypeScriptKeywords, - this.SpaceAfterModuleName, - this.SpaceAfterArrow, - this.NoSpaceAfterEllipsis, - this.NoSpaceAfterOptionalParameters, - this.NoSpaceBetweenEmptyInterfaceBraceBrackets, - this.NoSpaceBeforeOpenAngularBracket, - this.NoSpaceBetweenCloseParenAndAngularBracket, - this.NoSpaceAfterOpenAngularBracket, - this.NoSpaceBeforeCloseAngularBracket, - this.NoSpaceAfterCloseAngularBracket - ]; - - this.LowPriorityCommonRules = [ - this.NoSpaceBeforeSemicolon, - this.SpaceBeforeOpenBraceInControl, this.SpaceBeforeOpenBraceInFunction, this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, - this.NoSpaceBeforeComma, - this.NoSpaceBeforeOpenBracket, this.NoSpaceAfterOpenBracket, - this.NoSpaceBeforeCloseBracket, this.NoSpaceAfterCloseBracket, - this.SpaceAfterSemicolon, - this.NoSpaceBeforeOpenParenInFuncDecl, - this.SpaceBetweenStatements, this.SpaceAfterTryFinally - ]; - - this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - - this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */)); - this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */)); - - this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */)); - this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */)); - - this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenParenToken */, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */)); - } - Rules.prototype.getRuleName = function (rule) { - var o = this; - for (var name in o) { - if (o[name] === rule) { - return name; - } - } - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null)); - }; - - Rules.IsForContext = function (context) { - return context.contextNode.kind() === 154 /* ForStatement */; - }; - - Rules.IsNotForContext = function (context) { - return !Rules.IsForContext(context); - }; - - Rules.IsBinaryOpContext = function (context) { - switch (context.contextNode.kind()) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 186 /* ConditionalExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return true; - - case 133 /* ImportDeclaration */: - - case 225 /* VariableDeclarator */: - case 232 /* EqualsValueClause */: - return context.currentTokenSpan.kind() === 107 /* EqualsToken */ || context.nextTokenSpan.kind() === 107 /* EqualsToken */; - - case 155 /* ForInStatement */: - return context.currentTokenSpan.kind() === 29 /* InKeyword */ || context.nextTokenSpan.kind() === 29 /* InKeyword */; - } - return false; - }; - - Rules.IsNotBinaryOpContext = function (context) { - return !Rules.IsBinaryOpContext(context); - }; - - Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { - return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); - }; - - Rules.IsBeforeMultilineBlockContext = function (context) { - return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); - }; - - Rules.IsMultilineBlockContext = function (context) { - return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsSingleLineBlockContext = function (context) { - return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.contextNode); - }; - - Rules.IsBeforeBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.nextTokenParent); - }; - - Rules.NodeIsBlockContext = function (node) { - if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { - return true; - } - - switch (node.kind()) { - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - return true; - } - - return false; - }; - - Rules.IsFunctionDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 145 /* MethodSignature */: - case 142 /* CallSignature */: - case 222 /* FunctionExpression */: - case 137 /* ConstructorDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 128 /* InterfaceDeclaration */: - return true; - } - - return false; - }; - - Rules.IsTypeScriptDeclWithBlockContext = function (context) { - return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); - }; - - Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { - switch (node.kind()) { - case 131 /* ClassDeclaration */: - case 132 /* EnumDeclaration */: - case 122 /* ObjectType */: - case 130 /* ModuleDeclaration */: - return true; - } - - return false; - }; - - Rules.IsAfterCodeBlockContext = function (context) { - switch (context.currentTokenParent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: - return true; - } - return false; - }; - - Rules.IsControlDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 147 /* IfStatement */: - case 151 /* SwitchStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 159 /* TryStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 235 /* ElseClause */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - return true; - - default: - return false; - } - }; - - Rules.IsObjectContext = function (context) { - return context.contextNode.kind() === 215 /* ObjectLiteralExpression */; - }; - - Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind() === 213 /* InvocationExpression */; - }; - - Rules.IsNewContext = function (context) { - return context.contextNode.kind() === 216 /* ObjectCreationExpression */; - }; - - Rules.IsFunctionCallOrNewContext = function (context) { - return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); - }; - - Rules.IsSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine(); - }; - - Rules.IsNotFormatOnEnter = function (context) { - return context.formattingRequestKind != 2 /* FormatOnEnter */; - }; - - Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind() === 130 /* ModuleDeclaration */; - }; - - Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind() === 122 /* ObjectType */ && context.contextNode.parent().kind() !== 128 /* InterfaceDeclaration */; - }; - - Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) { - return ((tokenKind === 80 /* LessThanToken */ || tokenKind === 81 /* GreaterThanToken */) && (parentKind === 229 /* TypeParameterList */ || parentKind === 228 /* TypeArgumentList */)); - }; - - Rules.IsTypeArgumentOrParameterContext = function (context) { - return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind(), context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind(), context.nextTokenParent.kind()); - }; - - Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind() === 41 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */; - }; - return Rules; - })(); - Formatting.Rules = Rules; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesMap = (function () { - function RulesMap() { - this.map = []; - this.mapRowLength = 0; - } - RulesMap.create = function (rules) { - var result = new RulesMap(); - result.Initialize(rules); - return result; - }; - - RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 119 /* LastToken */ + 1; - this.map = new Array(this.mapRowLength * this.mapRowLength); - - var rulesBucketConstructionStateList = new Array(this.map.length); - - this.FillRules(rules, rulesBucketConstructionStateList); - return this.map; - }; - - RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { - var _this = this; - rules.forEach(function (rule) { - _this.FillRule(rule, rulesBucketConstructionStateList); - }); - }; - - RulesMap.prototype.GetRuleBucketIndex = function (row, column) { - var rulesBucketIndex = (row * this.mapRowLength) + column; - - return rulesBucketIndex; - }; - - RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { - var _this = this; - var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any; - - rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { - rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { - var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); - - var rulesBucket = _this.map[rulesBucketIndex]; - if (rulesBucket == undefined) { - rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); - } - - rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); - }); - }); - }; - - RulesMap.prototype.GetRule = function (context) { - var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind(), context.nextTokenSpan.kind()); - var bucket = this.map[bucketIndex]; - if (bucket != null) { - for (var i = 0, len = bucket.Rules().length; i < len; i++) { - var rule = bucket.Rules()[i]; - if (rule.Operation.Context.InContext(context)) - return rule; - } - } - return null; - }; - return RulesMap; - })(); - Formatting.RulesMap = RulesMap; - - var MaskBitSize = 5; - var Mask = 0x1f; - - (function (RulesPosition) { - RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; - RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; - RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; - RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; - RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; - RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; - })(Formatting.RulesPosition || (Formatting.RulesPosition = {})); - var RulesPosition = Formatting.RulesPosition; - - var RulesBucketConstructionState = (function () { - function RulesBucketConstructionState() { - this.rulesInsertionIndexBitmap = 0; - } - RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { - var index = 0; - - var pos = 0; - var indexBitmap = this.rulesInsertionIndexBitmap; - - while (pos <= maskPosition) { - index += (indexBitmap & Mask); - indexBitmap >>= MaskBitSize; - pos += MaskBitSize; - } - - return index; - }; - - RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { - var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; - value++; - TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); - - var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); - temp |= value << maskPosition; - - this.rulesInsertionIndexBitmap = temp; - }; - return RulesBucketConstructionState; - })(); - Formatting.RulesBucketConstructionState = RulesBucketConstructionState; - - var RulesBucket = (function () { - function RulesBucket() { - this.rules = []; - } - RulesBucket.prototype.Rules = function () { - return this.rules; - }; - - RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { - var position; - - if (rule.Operation.Action == 0 /* Ignore */) { - position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; - } else if (!rule.Operation.Context.IsAny()) { - position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; - } else { - position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; - } - - var state = constructionState[rulesBucketIndex]; - if (state === undefined) { - state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); - } - var index = state.GetInsertionIndex(position); - this.rules.splice(index, 0, rule); - state.IncreaseInsertionIndex(position); - }; - return RulesBucket; - })(); - Formatting.RulesBucket = RulesBucket; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesProvider = (function () { - function RulesProvider(logger) { - this.logger = logger; - this.globalRules = new Formatting.Rules(); - } - RulesProvider.prototype.getRuleName = function (rule) { - return this.globalRules.getRuleName(rule); - }; - - RulesProvider.prototype.getRuleByName = function (name) { - return this.globalRules[name]; - }; - - RulesProvider.prototype.getRulesMap = function () { - return this.rulesMap; - }; - - RulesProvider.prototype.ensureUpToDate = function (options) { - var _this = this; - if (this.options == null || !TypeScript.compareDataObjects(this.options, options)) { - var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { - return _this.createActiveRules(options); - }); - var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { - return Formatting.RulesMap.create(activeRules); - }); - - this.activeRules = activeRules; - this.rulesMap = rulesMap; - this.options = TypeScript.Services.FormatCodeOptions.clone(options); - } - }; - - RulesProvider.prototype.createActiveRules = function (options) { - var rules = this.globalRules.HighPriorityCommonRules.slice(0); - - if (options.InsertSpaceAfterCommaDelimiter) { - rules.push(this.globalRules.SpaceAfterComma); - } else { - rules.push(this.globalRules.NoSpaceAfterComma); - } - - if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { - rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); - } else { - rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); - } - - if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { - rules.push(this.globalRules.SpaceAfterKeywordInControl); - } else { - rules.push(this.globalRules.NoSpaceAfterKeywordInControl); - } - - if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { - rules.push(this.globalRules.SpaceAfterOpenParen); - rules.push(this.globalRules.SpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); - } else { - rules.push(this.globalRules.NoSpaceAfterOpenParen); - rules.push(this.globalRules.NoSpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); - } - - if (options.InsertSpaceAfterSemicolonInForStatements) { - rules.push(this.globalRules.SpaceAfterSemicolonInFor); - } else { - rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); - } - - if (options.InsertSpaceBeforeAndAfterBinaryOperators) { - rules.push(this.globalRules.SpaceBeforeBinaryOperator); - rules.push(this.globalRules.SpaceAfterBinaryOperator); - } else { - rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); - rules.push(this.globalRules.NoSpaceAfterBinaryOperator); - } - - if (options.PlaceOpenBraceOnNewLineForControlBlocks) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); - } - - if (options.PlaceOpenBraceOnNewLineForFunctions) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); - rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); - } - - rules = rules.concat(this.globalRules.LowPriorityCommonRules); - - return rules; - }; - return RulesProvider; - })(); - Formatting.RulesProvider = RulesProvider; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextEditInfo = (function () { - function TextEditInfo(position, length, replaceWith) { - this.position = position; - this.length = length; - this.replaceWith = replaceWith; - } - TextEditInfo.prototype.toString = function () { - return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]"; - }; - return TextEditInfo; - })(); - Formatting.TextEditInfo = TextEditInfo; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (Shared) { - var TokenRangeAccess = (function () { - function TokenRangeAccess(from, to, except) { - this.tokens = []; - for (var token = from; token <= to; token++) { - if (except.indexOf(token) < 0) { - this.tokens.push(token); - } - } - } - TokenRangeAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenRangeAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - - TokenRangeAccess.prototype.toString = function () { - return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]"; - }; - return TokenRangeAccess; - })(); - Shared.TokenRangeAccess = TokenRangeAccess; - - var TokenValuesAccess = (function () { - function TokenValuesAccess(tks) { - this.tokens = tks && tks.length ? tks : []; - } - TokenValuesAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenValuesAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - return TokenValuesAccess; - })(); - Shared.TokenValuesAccess = TokenValuesAccess; - - var TokenSingleValueAccess = (function () { - function TokenSingleValueAccess(token) { - this.token = token; - } - TokenSingleValueAccess.prototype.GetTokens = function () { - return [this.token]; - }; - - TokenSingleValueAccess.prototype.Contains = function (tokenValue) { - return tokenValue == this.token; - }; - - TokenSingleValueAccess.prototype.toString = function () { - return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]"; - }; - return TokenSingleValueAccess; - })(); - Shared.TokenSingleValueAccess = TokenSingleValueAccess; - - var TokenAllAccess = (function () { - function TokenAllAccess() { - } - TokenAllAccess.prototype.GetTokens = function () { - var result = []; - for (var token = 9 /* FirstToken */; token <= 119 /* LastToken */; token++) { - result.push(token); - } - return result; - }; - - TokenAllAccess.prototype.Contains = function (tokenValue) { - return true; - }; - - TokenAllAccess.prototype.toString = function () { - return "[allTokens]"; - }; - return TokenAllAccess; - })(); - Shared.TokenAllAccess = TokenAllAccess; - - var TokenRange = (function () { - function TokenRange(tokenAccess) { - this.tokenAccess = tokenAccess; - } - TokenRange.FromToken = function (token) { - return new TokenRange(new TokenSingleValueAccess(token)); - }; - - TokenRange.FromTokens = function (tokens) { - return new TokenRange(new TokenValuesAccess(tokens)); - }; - - TokenRange.FromRange = function (f, to, except) { - if (typeof except === "undefined") { except = []; } - return new TokenRange(new TokenRangeAccess(f, to, except)); - }; - - TokenRange.AllTokens = function () { - return new TokenRange(new TokenAllAccess()); - }; - - TokenRange.prototype.GetTokens = function () { - return this.tokenAccess.GetTokens(); - }; - - TokenRange.prototype.Contains = function (token) { - return this.tokenAccess.Contains(token); - }; - - TokenRange.prototype.toString = function () { - return this.tokenAccess.toString(); - }; - - TokenRange.Any = TokenRange.AllTokens(); - TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([6 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(15 /* FirstKeyword */, 69 /* LastKeyword */); - TokenRange.Operators = TokenRange.FromRange(78 /* SemicolonToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryOperators = TokenRange.FromRange(80 /* LessThanToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([29 /* InKeyword */, 30 /* InstanceOfKeyword */]); - TokenRange.ReservedKeywords = TokenRange.FromRange(51 /* FirstFutureReservedStrictKeyword */, 59 /* LastFutureReservedStrictKeyword */); - TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([93 /* PlusPlusToken */, 94 /* MinusMinusToken */, 102 /* TildeToken */, 101 /* ExclamationToken */]); - TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([13 /* NumericLiteral */, 11 /* IdentifierName */, 72 /* OpenParenToken */, 74 /* OpenBracketToken */, 70 /* OpenBraceToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.Comments = TokenRange.FromTokens([7 /* SingleLineCommentTrivia */, 6 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([11 /* IdentifierName */, 67 /* NumberKeyword */, 69 /* StringKeyword */, 61 /* BooleanKeyword */, 41 /* VoidKeyword */, 60 /* AnyKeyword */]); - return TokenRange; - })(); - Shared.TokenRange = TokenRange; - })(Formatting.Shared || (Formatting.Shared = {})); - var Shared = Formatting.Shared; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TokenSpan = (function (_super) { - __extends(TokenSpan, _super); - function TokenSpan(kind, start, length) { - _super.call(this, start, length); - this._kind = kind; - } - TokenSpan.prototype.kind = function () { - return this._kind; - }; - return TokenSpan; - })(TypeScript.TextSpan); - Formatting.TokenSpan = TokenSpan; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContext = (function () { - function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta); - } - IndentationNodeContext.prototype.parent = function () { - return this._parent; - }; - - IndentationNodeContext.prototype.node = function () { - return this._node; - }; - - IndentationNodeContext.prototype.fullStart = function () { - return this._fullStart; - }; - - IndentationNodeContext.prototype.fullWidth = function () { - return this._node.fullWidth(); - }; - - IndentationNodeContext.prototype.start = function () { - return this._fullStart + this._node.leadingTriviaWidth(); - }; - - IndentationNodeContext.prototype.end = function () { - return this._fullStart + this._node.leadingTriviaWidth() + this._node.width(); - }; - - IndentationNodeContext.prototype.indentationAmount = function () { - return this._indentationAmount; - }; - - IndentationNodeContext.prototype.childIndentationAmountDelta = function () { - return this._childIndentationAmountDelta; - }; - - IndentationNodeContext.prototype.depth = function () { - return this._depth; - }; - - IndentationNodeContext.prototype.kind = function () { - return this._node.kind(); - }; - - IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () { - if (this._hasSkippedOrMissingTokenChild === null) { - this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node); - } - return this._hasSkippedOrMissingTokenChild; - }; - - IndentationNodeContext.prototype.clone = function (pool) { - var parent = null; - if (this._parent) { - parent = this._parent.clone(pool); - } - return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta); - }; - - IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this._parent = parent; - this._node = node; - this._fullStart = fullStart; - this._indentationAmount = indentationAmount; - this._childIndentationAmountDelta = childIndentationAmountDelta; - this._hasSkippedOrMissingTokenChild = null; - - if (parent) { - this._depth = parent.depth() + 1; - } else { - this._depth = 0; - } - }; - return IndentationNodeContext; - })(); - Formatting.IndentationNodeContext = IndentationNodeContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContextPool = (function () { - function IndentationNodeContextPool() { - this.nodes = []; - } - IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) { - if (this.nodes.length > 0) { - var cachedNode = this.nodes.pop(); - cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - return cachedNode; - } - - return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - }; - - IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) { - if (typeof recursive === "undefined") { recursive = false; } - this.nodes.push(node); - - if (recursive) { - var parent = node.parent(); - if (parent) { - this.releaseNode(parent, recursive); - } - } - }; - return IndentationNodeContextPool; - })(); - Formatting.IndentationNodeContextPool = IndentationNodeContextPool; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationTrackingWalker = (function (_super) { - __extends(IndentationTrackingWalker, _super); - function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this); - this.options = options; - this._position = 0; - this._parent = null; - - this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool(); - - this._textSpan = textSpan; - this._snapshot = snapshot; - this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0); - - this._lastTriviaWasNewLine = indentFirstToken; - } - IndentationTrackingWalker.prototype.position = function () { - return this._position; - }; - - IndentationTrackingWalker.prototype.parent = function () { - return this._parent; - }; - - IndentationTrackingWalker.prototype.textSpan = function () { - return this._textSpan; - }; - - IndentationTrackingWalker.prototype.snapshot = function () { - return this._snapshot; - }; - - IndentationTrackingWalker.prototype.indentationNodeContextPool = function () { - return this._indentationNodeContextPool; - }; - - IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = true; - this.forceRecomputeIndentationOfParent(tokenStart, true); - }; - - IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = false; - this.forceRecomputeIndentationOfParent(tokenStart, false); - }; - - IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - throw TypeScript.Errors.abstract(); - }; - - IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) { - if (this._lastTriviaWasNewLine) { - var indentationAmount = this.getTokenIndentationAmount(token); - var commentIndentationAmount = this.getCommentIndentationAmount(token); - - this.indentToken(token, indentationAmount, commentIndentationAmount); - } - }; - - IndentationTrackingWalker.prototype.visitToken = function (token) { - var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth()); - - if (tokenSpan.intersectsWithTextSpan(this._textSpan)) { - this.visitTokenInSpan(token); - - var trivia = token.trailingTrivia(); - this._lastTriviaWasNewLine = token.hasTrailingNewLine() && trivia.syntaxTriviaAt(trivia.count() - 1).kind() == 5 /* NewLineTrivia */; - } - - this._position += token.fullWidth(); - }; - - IndentationTrackingWalker.prototype.visitNode = function (node) { - var nodeSpan = new TypeScript.TextSpan(this._position, node.fullWidth()); - - if (nodeSpan.intersectsWithTextSpan(this._textSpan)) { - var indentation = this.getNodeIndentation(node); - - var currentParent = this._parent; - this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); - - node.accept(this); - - this._indentationNodeContextPool.releaseNode(this._parent); - this._parent = currentParent; - } else { - this._position += node.fullWidth(); - } - }; - - IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) { - if (this._parent.node().firstToken() === token || token.kind() === 70 /* OpenBraceToken */ || token.kind() === 71 /* CloseBraceToken */ || token.kind() === 74 /* OpenBracketToken */ || token.kind() === 75 /* CloseBracketToken */ || (token.kind() === 42 /* WhileKeyword */ && this._parent.node().kind() == 161 /* DoStatement */)) { - return this._parent.indentationAmount(); - } - - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - }; - - IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) { - if (token.kind() === 71 /* CloseBraceToken */ || token.kind() === 75 /* CloseBracketToken */) { - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - } - return this._parent.indentationAmount(); - }; - - IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) { - var parent = this._parent; - - var parentIndentationAmount; - if (this._textSpan.containsPosition(parent.start())) { - parentIndentationAmount = parent.indentationAmount(); - } else { - if (parent.kind() === 146 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) { - parent = this._parent.parent(); - } - - var line = this._snapshot.getLineFromPosition(parent.start()).getText(); - var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line); - parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options); - } - var parentIndentationAmountDelta = parent.childIndentationAmountDelta(); - - var indentationAmount; - - var indentationAmountDelta; - var parentNode = parent.node(); - - switch (node.kind()) { - default: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = 0; - break; - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 122 /* ObjectType */: - case 132 /* EnumDeclaration */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 222 /* FunctionExpression */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 138 /* IndexMemberDeclaration */: - case 236 /* CatchClause */: - - case 214 /* ArrayLiteralExpression */: - case 124 /* ArrayType */: - case 221 /* ElementAccessExpression */: - case 144 /* IndexSignature */: - - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 150 /* ReturnStatement */: - case 157 /* ThrowStatement */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 224 /* VariableDeclaration */: - case 134 /* ExportAssignment */: - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = this.options.indentSpaces; - break; - - case 147 /* IfStatement */: - if (parent.kind() === 235 /* ElseClause */ && !parentNode.elseKeyword.hasTrailingNewLine() && !node.ifKeyword.hasLeadingNewLine()) { - indentationAmount = parentIndentationAmount; - } else { - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - } - indentationAmountDelta = this.options.indentSpaces; - break; - - case 235 /* ElseClause */: - indentationAmount = parentIndentationAmount; - indentationAmountDelta = this.options.indentSpaces; - break; - - case 146 /* Block */: - if (this.shouldIndentBlockInParent(parent)) { - indentationAmount = parentIndentationAmount + parentIndentationAmountDelta; - } else { - indentationAmount = parentIndentationAmount; - } - - indentationAmountDelta = this.options.indentSpaces; - break; - } - - if (parentNode) { - if (!newLineInsertedByFormatting) { - var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start()); - var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + node.leadingTriviaWidth()); - if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) { - indentationAmount = parentIndentationAmount; - indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta); - } - } - } - - return { - indentationAmount: indentationAmount, - indentationAmountDelta: indentationAmountDelta - }; - }; - - IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) { - switch (parent.kind()) { - case 120 /* SourceUnit */: - case 130 /* ModuleDeclaration */: - case 146 /* Block */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - default: - return false; - } - }; - - IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) { - var parent = this._parent; - if (parent.fullStart() === tokenStart) { - this._parent = parent.parent(); - var indentation = this.getNodeIndentation(parent.node(), newLineAdded); - parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta); - this._parent = parent; - } - }; - return IndentationTrackingWalker; - })(TypeScript.SyntaxWalker); - Formatting.IndentationTrackingWalker = IndentationTrackingWalker; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var MultipleTokenIndenter = (function (_super) { - __extends(MultipleTokenIndenter, _super); - function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this._edits = []; - } - MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0) { - return; - } - - if (this.parent().hasSkippedOrMissingTokenChild()) { - return; - } - - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (!this.textSpan().containsTextSpan(tokenSpan)) { - return; - } - - var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options); - - var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options); - - this.recordIndentationEditsForToken(token, indentationString, commentIndentationString); - }; - - MultipleTokenIndenter.prototype.edits = function () { - return this._edits; - }; - - MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) { - this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith)); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) { - var position = this.position(); - var indentNextTokenOrTrivia = true; - var leadingWhiteSpace = ""; - - var triviaList = token.leadingTrivia(); - if (triviaList) { - for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) { - continue; - } - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia); - indentNextTokenOrTrivia = false; - leadingWhiteSpace = ""; - break; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - if (indentNextTokenOrTrivia) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString); - indentNextTokenOrTrivia = false; - } - break; - - case 4 /* WhitespaceTrivia */: - var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1); - var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString; - if (indentNextTokenOrTrivia) { - if (!(nextTrivia && nextTrivia.isNewLine())) { - this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString); - } - indentNextTokenOrTrivia = false; - } - leadingWhiteSpace += trivia.fullText(); - break; - - case 5 /* NewLineTrivia */: - indentNextTokenOrTrivia = true; - leadingWhiteSpace = ""; - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - } - - if (token.kind() !== 10 /* EndOfFileToken */ && indentNextTokenOrTrivia) { - if (indentationString.length > 0) { - this.recordEdit(position, 0, indentationString); - } - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) { - if (indentationString.length > 0) { - this.recordEdit(fullStart, 0, indentationString); - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) { - var text = trivia.fullText(); - - if (indentationString === text) { - return; - } - - this.recordEdit(fullStart, text.length, indentationString); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) { - var position = fullStart; - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - if (segments.length <= 1) { - if (!firstLineAlreadyIndented) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); - } - return; - } - - var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options); - - var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options); - var startIndex = 0; - if (firstLineAlreadyIndented) { - startIndex = 1; - position += segments[0].length; - } - for (var i = startIndex; i < segments.length; i++) { - var segment = segments[i]; - this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment); - position += segment.length; - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment; - var finalColumns = indentationColumns + deltaFromFirstSegment; - if (finalColumns < 0) { - finalColumns = 0; - } - var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return; - } - - if (indentationString === segment.substring(0, firstNonWhitespacePosition)) { - return; - } - - this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString); - }; - return MultipleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.MultipleTokenIndenter = MultipleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SingleTokenIndenter = (function (_super) { - __extends(SingleTokenIndenter, _super); - function SingleTokenIndenter(indentationPosition, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, new TypeScript.TextSpan(indentationPosition, 1), sourceUnit, snapshot, indentFirstToken, options); - this.indentationAmount = null; - - this.indentationPosition = indentationPosition; - } - SingleTokenIndenter.getIndentationAmount = function (position, sourceUnit, snapshot, options) { - var walker = new SingleTokenIndenter(position, sourceUnit, snapshot, true, options); - sourceUnit.accept(walker); - return walker.indentationAmount; - }; - - SingleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0 || (this.indentationPosition - this.position() < token.leadingTriviaWidth())) { - this.indentationAmount = commentIndentationAmount; - } else { - this.indentationAmount = indentationAmount; - } - }; - return SingleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.SingleTokenIndenter = SingleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Formatter = (function (_super) { - __extends(Formatter, _super); - function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this.previousTokenSpan = null; - this.previousTokenParent = null; - this.scriptHasErrors = false; - - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - - this.rulesProvider = rulesProvider; - this.formattingRequestKind = formattingRequestKind; - this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind); - } - Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) { - var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind); - sourceUnit.accept(walker); - return walker.edits(); - }; - - Formatter.prototype.visitTokenInSpan = function (token) { - if (token.fullWidth() !== 0) { - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (this.textSpan().containsTextSpan(tokenSpan)) { - this.processToken(token); - } - } - - _super.prototype.visitTokenInSpan.call(this, token); - }; - - Formatter.prototype.processToken = function (token) { - var position = this.position(); - - if (token.leadingTriviaWidth() !== 0) { - this.processTrivia(token.leadingTrivia(), position); - position += token.leadingTriviaWidth(); - } - - var currentTokenSpan = new Formatting.TokenSpan(token.kind(), position, token.width()); - if (!this.parent().hasSkippedOrMissingTokenChild()) { - if (this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan)); - } - } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); - } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - position += token.width(); - - if (token.trailingTriviaWidth() !== 0) { - this.processTrivia(token.trailingTrivia(), position); - } - }; - - Formatter.prototype.processTrivia = function (triviaList, fullStart) { - var position = fullStart; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment() || trivia.isSkippedToken()) { - var currentTokenSpan = new Formatting.TokenSpan(trivia.kind(), position, trivia.fullWidth()); - if (this.textSpan().containsTextSpan(currentTokenSpan)) { - if (trivia.isComment() && this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan()); - this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan)); - } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); - } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - } - } - - position += trivia.fullWidth(); - } - }; - - Formatter.prototype.findCommonParents = function (parent1, parent2) { - var shallowParent; - var shallowParentDepth; - var deepParent; - var deepParentDepth; - - if (parent1.depth() < parent2.depth()) { - shallowParent = parent1; - shallowParentDepth = parent1.depth(); - deepParent = parent2; - deepParentDepth = parent2.depth(); - } else { - shallowParent = parent2; - shallowParentDepth = parent2.depth(); - deepParent = parent1; - deepParentDepth = parent1.depth(); - } - - TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth"); - - while (deepParentDepth > shallowParentDepth) { - deepParent = deepParent.parent(); - deepParentDepth--; - } - - TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth"); - - while (deepParent.node() && shallowParent.node()) { - if (deepParent.node() === shallowParent.node()) { - return deepParent; - } - deepParent = deepParent.parent(); - shallowParent = shallowParent.parent(); - } - - throw TypeScript.Errors.invalidOperation(); - }; - - Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) { - var token1Line = this.getLineNumber(t1); - var token2Line = this.getLineNumber(t2); - - var commonParent = this.findCommonParents(t1Parent, t2Parent); - - this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent); - - var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext); - - if (rule != null) { - this.RecordRuleEdits(rule, t1, t2); - - if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) { - this.forceSkipIndentingNextToken(t2.start()); - } - - if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) { - this.forceIndentNextToken(t2.start()); - } - } - - if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) { - this.trimWhitespaceInLineRange(token1Line, token2Line, t1); - } - }; - - Formatter.prototype.getLineNumber = function (span) { - return this.snapshot().getLineNumberFromPosition(span.start()); - }; - - Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) { - for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) { - var line = this.snapshot().getLineFromLineNumber(lineNumber); - - this.trimWhitespace(line, token); - } - }; - - Formatter.prototype.trimWhitespace = function (line, token) { - if (token && (token.kind() == 6 /* MultiLineCommentTrivia */ || token.kind() == 7 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition()) - return; - - var text = line.getText(); - var index = 0; - - for (index = text.length - 1; index >= 0; --index) { - if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) { - break; - } - } - - ++index; - - if (index < text.length) { - this.recordEdit(line.startPosition() + index, line.length() - index, ""); - } - }; - - Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) { - if (rule.Operation.Action == 0 /* Ignore */) { - return; - } - - var betweenSpan; - - switch (rule.Operation.Action) { - case 3 /* Delete */: - { - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 0) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), ""); - return; - } - } - break; - - case 2 /* NewLine */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - var doEdit = false; - var betweenText = this.snapshot().getText(betweenSpan); - - var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter); - if (lineFeedLoc < 0) { - doEdit = true; - } else { - lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1); - if (lineFeedLoc >= 0) { - doEdit = true; - } - } - - if (doEdit) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter); - return; - } - } - break; - - case 1 /* Space */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), " "); - return; - } - } - break; - } - }; - return Formatter; - })(Formatting.MultipleTokenIndenter); - Formatting.Formatter = Formatter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var debugObjectHost = this; - -var TypeScript; -(function (TypeScript) { - (function (Services) { - var CoreServices = (function () { - function CoreServices(host) { - this.host = host; - } - CoreServices.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - return TypeScript.preProcessFile(fileName, sourceText); - }; - - CoreServices.prototype.getDefaultCompilationSettings = function () { - var settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - return settings; - }; - - CoreServices.prototype.dumpMemory = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.dumpHeap) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.dumpHeap()'])); - } - - var objects = debugObjectHost.Debug.dumpHeap(2); - var totalSize = 0; - for (var i = 0; i < objects.length; i++) { - totalSize += objects[i].size; - } - - return "There are " + objects.length + " object(s) accessible from 'global', for a total of " + totalSize + " byte(s)."; - }; - - CoreServices.prototype.getMemoryInfo = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.getMemoryInfo) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.getMemoryInfo()'])); - } - - return debugObjectHost.Debug.getMemoryInfo(); - }; - - CoreServices.prototype.collectGarbage = function () { - if (!debugObjectHost || !debugObjectHost.CollectGarbage) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['collectGarbage()'])); - } - - debugObjectHost.CollectGarbage(); - }; - return CoreServices; - })(); - Services.CoreServices = CoreServices; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var HostFileInformation = (function () { - function HostFileInformation(fileName, host, version, isOpen, byteOrderMark) { - this.fileName = fileName; - this.host = host; - this.version = version; - this.isOpen = isOpen; - this.byteOrderMark = byteOrderMark; - this._sourceText = null; - } - HostFileInformation.prototype.getScriptSnapshot = function () { - if (this._sourceText === null) { - this._sourceText = this.host.getScriptSnapshot(this.fileName); - } - - return this._sourceText; - }; - return HostFileInformation; - })(); - - var HostCache = (function () { - function HostCache(host) { - this._fileNameToEntry = new TypeScript.StringHashTable(); - - var fileNames = host.getScriptFileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - this._fileNameToEntry.add(TypeScript.switchToForwardSlashes(fileName), new HostFileInformation(fileName, host, host.getScriptVersion(fileName), host.getScriptIsOpen(fileName), host.getScriptByteOrderMark(fileName))); - } - - var settings = host.getCompilationSettings(); - if (!settings) { - settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - } - - this._compilationSettings = TypeScript.ImmutableCompilationSettings.fromCompilationSettings(settings); - } - HostCache.prototype.compilationSettings = function () { - return this._compilationSettings; - }; - - HostCache.prototype.contains = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)) !== null; - }; - - HostCache.prototype.getHostFileName = function (fileName) { - var hostCacheEntry = this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)); - if (hostCacheEntry) { - return hostCacheEntry.fileName; - } - return fileName; - }; - - HostCache.prototype.getFileNames = function () { - return this._fileNameToEntry.getAllKeys(); - }; - - HostCache.prototype.getVersion = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).version; - }; - - HostCache.prototype.isOpen = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).isOpen; - }; - - HostCache.prototype.getByteOrderMark = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).byteOrderMark; - }; - - HostCache.prototype.getScriptSnapshot = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).getScriptSnapshot(); - }; - - HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (fileName, lastKnownVersion) { - var currentVersion = this.getVersion(fileName); - if (lastKnownVersion === currentVersion) { - return TypeScript.TextChangeRange.unchanged; - } - - var scriptSnapshot = this.getScriptSnapshot(fileName); - return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); - }; - return HostCache; - })(); - - var SyntaxTreeCache = (function () { - function SyntaxTreeCache(_host) { - this._host = _host; - this._currentFileName = ""; - this._currentFileVersion = -1; - this._currentFileSyntaxTree = null; - this._currentFileScriptSnapshot = null; - this._hostCache = new HostCache(_host); - } - SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (fileName) { - this._hostCache = new HostCache(this._host); - - var version = this._hostCache.getVersion(fileName); - var syntaxTree = null; - - if (this._currentFileSyntaxTree === null || this._currentFileName !== fileName) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.createSyntaxTree(fileName, scriptSnapshot); - } else if (this._currentFileVersion !== version) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.updateSyntaxTree(fileName, scriptSnapshot, this._currentFileSyntaxTree, this._currentFileVersion); - } - - if (syntaxTree !== null) { - this._currentFileScriptSnapshot = scriptSnapshot; - this._currentFileVersion = version; - this._currentFileName = fileName; - this._currentFileSyntaxTree = syntaxTree; - } - - return this._currentFileSyntaxTree; - }; - - SyntaxTreeCache.prototype.createSyntaxTree = function (fileName, scriptSnapshot) { - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var syntaxTree = TypeScript.Parser.parse(fileName, text, TypeScript.isDTSFile(fileName), TypeScript.getParseOptions(TypeScript.ImmutableCompilationSettings.defaultSettings())); - - return syntaxTree; - }; - - SyntaxTreeCache.prototype.updateSyntaxTree = function (fileName, scriptSnapshot, previousSyntaxTree, previousFileVersion) { - var editRange = this._hostCache.getScriptTextChangeRangeSinceVersion(fileName, previousFileVersion); - - if (editRange === null) { - return this.createSyntaxTree(fileName, scriptSnapshot); - } - - var nextSyntaxTree = TypeScript.Parser.incrementalParse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - - this.ensureInvariants(fileName, editRange, nextSyntaxTree, this._currentFileScriptSnapshot, scriptSnapshot); - - return nextSyntaxTree; - }; - - SyntaxTreeCache.prototype.ensureInvariants = function (fileName, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { - var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength(); - var actualNewLength = newScriptSnapshot.getLength(); - - function provideMoreDebugInfo() { - var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"]; - - var oldSpan = editRange.span(); - - function prettyPrintString(s) { - return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"'; - } - - debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n'); - debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end()))); - - var newSpan = editRange.newSpan(); - - debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n'); - debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end()))); - - return debugInformation.join(' '); - } - - TypeScript.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start()); - var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start()); - TypeScript.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!'); - - var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength()); - var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength()); - TypeScript.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!'); - - var normalTree = this.createSyntaxTree(fileName, newScriptSnapshot); - TypeScript.Debug.assert(normalTree.structuralEquals(incrementalTree), 'Expected equal incremental and normal trees'); - - var incrementalTreeText = incrementalTree.sourceUnit().fullText(); - var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength()); - TypeScript.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal'); - } - }; - return SyntaxTreeCache; - })(); - Services.SyntaxTreeCache = SyntaxTreeCache; - - var LanguageServiceCompiler = (function () { - function LanguageServiceCompiler(host) { - this.host = host; - this.compiler = null; - this.hostCache = null; - this.logger = this.host; - } - LanguageServiceCompiler.prototype.synchronizeHostData = function () { - var _this = this; - TypeScript.timeFunction(this.logger, "synchronizeHostData()", function () { - _this.synchronizeHostDataWorker(); - }); - }; - - LanguageServiceCompiler.prototype.synchronizeHostDataWorker = function () { - this.hostCache = new HostCache(this.host); - - var compilationSettings = this.hostCache.compilationSettings(); - - if (this.compiler === null) { - this.compiler = new TypeScript.TypeScriptCompiler(this.logger, compilationSettings); - } - - this.compiler.setCompilationSettings(compilationSettings); - - var compilerFileNames = this.compiler.fileNames(); - for (var i = 0, n = compilerFileNames.length; i < n; i++) { - var fileName = compilerFileNames[i]; - - if (!this.hostCache.contains(fileName)) { - this.compiler.removeFile(fileName); - } - } - - var cache = this.hostCache; - var hostFileNames = cache.getFileNames(); - for (var i = 0, n = hostFileNames.length; i < n; i++) { - var fileName = hostFileNames[i]; - - if (this.compiler.getDocument(fileName)) { - this.tryUpdateFile(this.compiler, fileName); - } else { - this.compiler.addFile(fileName, cache.getScriptSnapshot(fileName), cache.getByteOrderMark(fileName), cache.getVersion(fileName), cache.isOpen(fileName)); - } - } - }; - - LanguageServiceCompiler.prototype.tryUpdateFile = function (compiler, fileName) { - var document = this.compiler.getDocument(fileName); - - var version = this.hostCache.getVersion(fileName); - var isOpen = this.hostCache.isOpen(fileName); - if (document.version === version && document.isOpen === isOpen) { - return; - } - - var textChangeRange = null; - if (document.isOpen && isOpen) { - textChangeRange = this.hostCache.getScriptTextChangeRangeSinceVersion(fileName, document.version); - } - - compiler.updateFile(fileName, this.hostCache.getScriptSnapshot(fileName), version, isOpen, textChangeRange); - }; - - LanguageServiceCompiler.prototype.getScriptSnapshot = function (fileName) { - this.synchronizeHostData(); - return this.hostCache.getScriptSnapshot(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedHostFileName = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.hostCache.getHostFileName(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedTopLevelDeclaration = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.compilationSettings = function () { - this.synchronizeHostData(); - return this.compiler.compilationSettings(); - }; - - LanguageServiceCompiler.prototype.fileNames = function () { - this.synchronizeHostData(); - return this.compiler.fileNames(); - }; - - LanguageServiceCompiler.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageServiceCompiler.prototype.getDocument = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getDocument(fileName); - }; - - LanguageServiceCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getSemanticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - this.synchronizeHostData(); - return this.compiler.getCompilerOptionsDiagnostics(resolvePath); - }; - - LanguageServiceCompiler.prototype.getSymbolInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetSymbolInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getCallInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetCallInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleMemberSymbolsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleMemberSymbolsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleDeclsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleDeclsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getContextualMembersFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetContextualMembersFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetDeclInformation(decl, ast, document); - }; - - LanguageServiceCompiler.prototype.topLevelDeclaration = function (fileName) { - this.synchronizeHostData(); - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.getDeclForAST = function (ast) { - this.synchronizeHostData(); - return this.compiler.getDeclForAST(ast); - }; - - LanguageServiceCompiler.prototype.emit = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emit(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emitDeclarations(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.canEmitDeclarations = function (fileName) { - this.synchronizeHostData(); - return this.compiler.canEmitDeclarations(fileName); - }; - return LanguageServiceCompiler; - })(); - Services.LanguageServiceCompiler = LanguageServiceCompiler; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var CompletionHelpers = (function () { - function CompletionHelpers() { - } - CompletionHelpers.getSpan = function (ast) { - return new TypeScript.TextSpan(ast.start(), ast.width()); - }; - - CompletionHelpers.symbolDeclarationIntersectsPosition = function (symbol, fileName, position) { - var decl = symbol.getDeclarations()[0]; - if (decl.fileName() === fileName && this.getSpan(decl.ast()).intersectsWithPosition(position)) { - return true; - } - - return false; - }; - - CompletionHelpers.filterContextualMembersList = function (contextualMemberSymbols, existingMembers, fileName, position) { - if (!existingMembers || !existingMembers.symbols || existingMembers.symbols.length === 0) { - return contextualMemberSymbols; - } - - var existingMemberSymbols = existingMembers.symbols; - var existingMemberNames = TypeScript.createIntrinsicsObject(); - for (var i = 0, n = existingMemberSymbols.length; i < n; i++) { - if (this.symbolDeclarationIntersectsPosition(existingMemberSymbols[i], fileName, position)) { - continue; - } - - existingMemberNames[TypeScript.stripStartAndEndQuotes(existingMemberSymbols[i].getDisplayName())] = true; - } - - var filteredMembers = []; - for (var j = 0, m = contextualMemberSymbols.length; j < m; j++) { - var contextualMemberSymbol = contextualMemberSymbols[j]; - if (!existingMemberNames[TypeScript.stripStartAndEndQuotes(contextualMemberSymbol.getDisplayName())]) { - if (this.symbolDeclarationIntersectsPosition(contextualMemberSymbol, fileName, position)) { - continue; - } - filteredMembers.push(contextualMemberSymbol); - } - } - - return filteredMembers; - }; - - CompletionHelpers.isCompletionListBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position) || TypeScript.Syntax.isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) || CompletionHelpers.isIdentifierDefinitionLocation(sourceUnit, position) || CompletionHelpers.isRightOfIllegalDot(sourceUnit, position); - }; - - CompletionHelpers.getContainingObjectLiteralApplicableForCompletion = function (sourceUnit, position) { - var previousToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (previousToken) { - var parent = previousToken.parent(); - - switch (previousToken.kind()) { - case 70 /* OpenBraceToken */: - case 79 /* CommaToken */: - if (parent && parent.kind() === 2 /* SeparatedList */) { - parent = parent.parent(); - } - - if (parent && parent.kind() === 215 /* ObjectLiteralExpression */) { - return parent; - } - - break; - } - } - - return null; - }; - - CompletionHelpers.isIdentifierDefinitionLocation = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - var containingNodeKind = positionedToken.containingNode() && positionedToken.containingNode().kind(); - switch (positionedToken.kind()) { - case 79 /* CommaToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 224 /* VariableDeclaration */ || containingNodeKind === 132 /* EnumDeclaration */; - - case 72 /* OpenParenToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 236 /* CatchClause */; - - case 70 /* OpenBraceToken */: - return containingNodeKind === 132 /* EnumDeclaration */; - - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 77 /* DotDotDotToken */: - return containingNodeKind === 242 /* Parameter */; - - case 44 /* ClassKeyword */: - case 65 /* ModuleKeyword */: - case 46 /* EnumKeyword */: - case 52 /* InterfaceKeyword */: - case 27 /* FunctionKeyword */: - case 40 /* VarKeyword */: - case 64 /* GetKeyword */: - case 68 /* SetKeyword */: - return true; - } - - switch (positionedToken.token().text()) { - case "class": - case "interface": - case "enum": - case "module": - return true; - } - } - - return false; - }; - - CompletionHelpers.getNonIdentifierCompleteTokenOnLeft = function (sourceUnit, position) { - var positionedToken = sourceUnit.findCompleteTokenOnLeft(position, true); - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() == 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(true); - } - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() === 11 /* IdentifierName */) { - positionedToken = positionedToken.previousToken(true); - } - - return positionedToken; - }; - - CompletionHelpers.isRightOfIllegalDot = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - switch (positionedToken.kind()) { - case 76 /* DotToken */: - var leftOfDotPositionedToken = positionedToken.previousToken(true); - return leftOfDotPositionedToken && leftOfDotPositionedToken.kind() === 13 /* NumericLiteral */; - - case 13 /* NumericLiteral */: - var text = positionedToken.token().text(); - return text.charAt(text.length - 1) === "."; - } - } - - return false; - }; - - CompletionHelpers.getValidCompletionEntryDisplayName = function (displayName) { - if (displayName && displayName.length > 0) { - var firstChar = displayName.charCodeAt(0); - if (firstChar === 39 /* singleQuote */ || firstChar === 34 /* doubleQuote */) { - displayName = TypeScript.stripStartAndEndQuotes(displayName); - } - - if (TypeScript.Scanner.isValidIdentifier(TypeScript.SimpleText.fromString(displayName), 1 /* EcmaScript5 */)) { - return displayName; - } - } - - return null; - }; - return CompletionHelpers; - })(); - Services.CompletionHelpers = CompletionHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var KeywordCompletions = (function () { - function KeywordCompletions() { - } - KeywordCompletions.getKeywordCompltions = function () { - if (KeywordCompletions.keywordCompletions === null) { - var completions = []; - for (var i = 0, n = KeywordCompletions.keywords.length; i < n; i++) { - var keyword = KeywordCompletions.keywords[i]; - var entry = new Services.ResolvedCompletionEntry(keyword, Services.ScriptElementKind.keyword, Services.ScriptElementKindModifier.none, null, keyword, null); - completions.push(entry); - } - - KeywordCompletions.keywordCompletions = completions; - } - - return KeywordCompletions.keywordCompletions; - }; - KeywordCompletions.keywords = [ - "break", - "case", - "catch", - "class", - "constructor", - "continue", - "debugger", - "declare", - "default", - "delete", - "do", - "else", - "enum", - "export", - "extends", - "false", - "finally", - "for", - "function", - "get", - "if", - "implements", - "import", - "in", - "instanceof", - "interface", - "module", - "new", - "null", - "private", - "public", - "require", - "return", - "set", - "static", - "super", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "var", - "while", - "with" - ]; - - KeywordCompletions.keywordCompletions = null; - return KeywordCompletions; - })(); - Services.KeywordCompletions = KeywordCompletions; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var SignatureInfoHelpers = (function () { - function SignatureInfoHelpers() { - } - SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList = function (syntaxTree, position) { - var token = syntaxTree.sourceUnit().findTokenOnLeft(position, true); - - if (token && TypeScript.Syntax.hasAncestorOfKind(token, 229 /* TypeParameterList */)) { - return null; - } - - var stack = 0; - var argumentIndex = 0; - - whileLoop: - while (token) { - switch (token.kind()) { - case 80 /* LessThanToken */: - if (stack === 0) { - var lessThanToken = token; - token = token.previousToken(true); - if (!token || token.kind() !== 11 /* IdentifierName */) { - break whileLoop; - } - - return { - genericIdentifer: token, - lessThanToken: lessThanToken, - argumentIndex: argumentIndex - }; - } else if (stack < 0) { - break whileLoop; - } else { - stack--; - } - - break; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - stack++; - - case 81 /* GreaterThanToken */: - stack++; - break; - - case 79 /* CommaToken */: - if (stack == 0) { - argumentIndex++; - } - - break; - - case 71 /* CloseBraceToken */: - var unmatchedOpenBraceTokens = 0; - - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 71 /* CloseBraceToken */, 70 /* OpenBraceToken */); - if (!token) { - break whileLoop; - } - - break; - - case 85 /* EqualsGreaterThanToken */: - token = token.previousToken(true); - - if (token && token.kind() === 73 /* CloseParenToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 73 /* CloseParenToken */, 72 /* OpenParenToken */); - - if (token && token.kind() === 81 /* GreaterThanToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 81 /* GreaterThanToken */, 80 /* LessThanToken */); - } - - if (token && token.kind() === 31 /* NewKeyword */) { - token = token.previousToken(true); - } - - if (!token) { - break whileLoop; - } - } else { - break whileLoop; - } - - break; - - case 11 /* IdentifierName */: - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - case 61 /* BooleanKeyword */: - case 76 /* DotToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: - break; - - default: - break whileLoop; - } - - token = token.previousToken(true); - } - - return null; - }; - - SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol = function (symbol, signatures, enclosingScopeSymbol, compilerState) { - var signatureGroup = []; - - var hasOverloads = signatures.length > 1; - - for (var i = 0, n = signatures.length; i < n; i++) { - var signature = signatures[i]; - - if (hasOverloads && signature.isDefinition()) { - continue; - } - - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - var paramIndexInfo = []; - var functionName = signature.getScopedNameEx(enclosingScopeSymbol).toString(); - if (!functionName && (!symbol.isType() || symbol.isNamedTypeSymbol())) { - functionName = symbol.getScopedNameEx(enclosingScopeSymbol).toString(); - } - - var signatureMemberName = signature.getSignatureTypeNameEx(functionName, false, false, enclosingScopeSymbol, true, true); - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(signatureMemberName, paramIndexInfo); - signatureGroupInfo.docComment = signature.docComments(); - - var parameterMarkerIndex = 0; - - if (signature.isGeneric()) { - var typeParameters = signature.getTypeParameters(); - for (var j = 0, m = typeParameters.length; j < m; j++) { - var typeParameter = typeParameters[j]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - } - - var parameters = signature.parameters; - for (var j = 0, m = parameters.length; j < m; j++) { - var parameter = parameters[j]; - var signatureParameterInfo = new Services.FormalParameterInfo(); - signatureParameterInfo.isVariable = signature.hasVarArgs && (j === parameters.length - 1); - signatureParameterInfo.name = parameter.getDisplayName(); - signatureParameterInfo.docComment = parameter.docComments(); - signatureParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.parameters.push(signatureParameterInfo); - } - - signatureGroup.push(signatureGroupInfo); - } - - return signatureGroup; - }; - - SignatureInfoHelpers.getSignatureInfoFromGenericSymbol = function (symbol, enclosingScopeSymbol, compilerState) { - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - - var paramIndexInfo = []; - var symbolName = symbol.getScopedNameEx(enclosingScopeSymbol, false, true, false, true); - - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(symbolName, paramIndexInfo); - signatureGroupInfo.docComment = symbol.docComments(); - - var parameterMarkerIndex = 0; - - var typeSymbol = symbol.type; - - var typeParameters = typeSymbol.getTypeParameters(); - for (var i = 0, n = typeParameters.length; i < n; i++) { - var typeParameter = typeParameters[i]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * i]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * i + 1]; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - - return [signatureGroupInfo]; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromCallExpression = function (ast, caretPosition, typeParameterInformation) { - if (!ast) { - return null; - } - - var result = new Services.ActualSignatureInfo(); - - var parameterMinChar = caretPosition; - var parameterLimChar = caretPosition; - - if (ast.argumentList.typeArgumentList) { - parameterMinChar = Math.min(ast.argumentList.typeArgumentList.start()); - parameterLimChar = Math.max(Math.max(ast.argumentList.typeArgumentList.start(), ast.argumentList.typeArgumentList.end() + ast.argumentList.typeArgumentList.trailingTriviaWidth())); - } - - if (ast.argumentList.arguments) { - parameterMinChar = Math.min(parameterMinChar, ast.argumentList.arguments.start()); - parameterLimChar = Math.max(parameterLimChar, Math.max(ast.argumentList.arguments.start(), ast.argumentList.arguments.end() + ast.argumentList.arguments.trailingTriviaWidth())); - } - - result.parameterMinChar = parameterMinChar; - result.parameterLimChar = parameterLimChar; - result.currentParameterIsTypeParameter = false; - result.currentParameter = -1; - - if (typeParameterInformation) { - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - } else if (ast.argumentList.arguments && ast.argumentList.arguments.nonSeparatorCount() > 0) { - result.currentParameter = 0; - for (var index = 0; index < ast.argumentList.arguments.nonSeparatorCount(); index++) { - if (caretPosition > ast.argumentList.arguments.nonSeparatorAt(index).end() + ast.argumentList.arguments.nonSeparatorAt(index).trailingTriviaWidth()) { - result.currentParameter++; - } - } - } - - return result; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression = function (caretPosition, typeParameterInformation) { - var result = new Services.ActualSignatureInfo(); - - result.parameterMinChar = typeParameterInformation.lessThanToken.start(); - result.parameterLimChar = Math.max(typeParameterInformation.lessThanToken.fullEnd(), caretPosition); - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - - return result; - }; - - SignatureInfoHelpers.isSignatureHelpBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position); - }; - - SignatureInfoHelpers.isTargetOfObjectCreationExpression = function (positionedToken) { - var positionedParent = TypeScript.Syntax.getAncestorOfKind(positionedToken, 216 /* ObjectCreationExpression */); - if (positionedParent) { - var objectCreationExpression = positionedParent.element(); - var expressionRelativeStart = objectCreationExpression.newKeyword.fullWidth(); - var tokenRelativeStart = positionedToken.fullStart() - positionedParent.fullStart(); - return tokenRelativeStart >= expressionRelativeStart && tokenRelativeStart <= (expressionRelativeStart + objectCreationExpression.expression.fullWidth()); - } - - return false; - }; - - SignatureInfoHelpers.moveBackUpTillMatchingTokenKind = function (token, tokenKind, matchingTokenKind) { - if (!token || token.kind() !== tokenKind) { - throw TypeScript.Errors.invalidOperation(); - } - - token = token.previousToken(true); - - var stack = 0; - - while (token) { - if (token.kind() === matchingTokenKind) { - if (stack === 0) { - return token; - } else if (stack < 0) { - break; - } else { - stack--; - } - } else if (token.kind() === tokenKind) { - stack++; - } - - token = token.previousToken(true); - } - - return null; - }; - return SignatureInfoHelpers; - })(); - Services.SignatureInfoHelpers = SignatureInfoHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var ResolvedCompletionEntry = (function () { - function ResolvedCompletionEntry(name, kind, kindModifiers, type, fullSymbolName, docComment) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComment; - } - ResolvedCompletionEntry.prototype.isResolved = function () { - return true; - }; - return ResolvedCompletionEntry; - })(); - Services.ResolvedCompletionEntry = ResolvedCompletionEntry; - - var DeclReferenceCompletionEntry = (function () { - function DeclReferenceCompletionEntry(name, kind, kindModifiers, decl) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.decl = decl; - this.type = null; - this.fullSymbolName = null; - this.docComment = null; - this.hasBeenResolved = false; - } - DeclReferenceCompletionEntry.prototype.isResolved = function () { - return this.hasBeenResolved; - }; - - DeclReferenceCompletionEntry.prototype.resolve = function (type, fullSymbolName, docComments) { - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComments; - this.hasBeenResolved = true; - }; - return DeclReferenceCompletionEntry; - })(); - Services.DeclReferenceCompletionEntry = DeclReferenceCompletionEntry; - - var CompletionSession = (function () { - function CompletionSession(fileName, position, entries) { - this.fileName = fileName; - this.position = position; - this.entries = entries; - } - return CompletionSession; - })(); - Services.CompletionSession = CompletionSession; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var LanguageService = (function () { - function LanguageService(host) { - this.host = host; - this.activeCompletionSession = null; - this.logger = this.host; - this.compiler = new Services.LanguageServiceCompiler(this.host); - this._syntaxTreeCache = new Services.SyntaxTreeCache(this.host); - - if (!TypeScript.LocalizedDiagnosticMessages) { - TypeScript.LocalizedDiagnosticMessages = this.host.getLocalizedDiagnosticMessages(); - } - } - LanguageService.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageService.prototype.refresh = function () { - }; - - LanguageService.prototype.getSymbolInfoAtPosition = function (fileName, pos, requireName) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var topNode = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (topNode === null || (requireName && topNode.kind() !== 11 /* IdentifierName */)) { - this.logger.log("No name found at the given position"); - return null; - } - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(topNode, document); - if (symbolInfoAtPosition === null || (symbolInfoAtPosition.symbol === null && symbolInfoAtPosition.aliasSymbol)) { - this.logger.log("No symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; - } - - var symbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - var symbolName = symbol.getName(); - - if (requireName) { - var actualNameAtPosition = topNode.valueText(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; - } - } - - var containingASTOpt = this.getSymbolScopeAST(symbol, topNode); - - return { symbol: symbol, containingASTOpt: containingASTOpt }; - }; - - LanguageService.prototype.getReferencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var result = []; - var symbol = symbolAndContainingAST.symbol; - var symbolName = symbol.getName(); - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - if (containingASTOpt && fileName != tempFileName) { - continue; - } - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - if (filter.probablyContains(symbolName)) { - result = result.concat(this.getReferencesInFile(tempFileName, symbol, containingASTOpt)); - } - } - - return result; - }; - - LanguageService.prototype.getSymbolScopeAST = function (symbol, ast) { - if (symbol.kind === 8192 /* TypeParameter */ && symbol.getDeclarations().length > 0 && symbol.getDeclarations()[0].getParentDecl() && symbol.getDeclarations()[0].getParentDecl().kind === 65536 /* Method */) { - while (ast) { - if (ast.kind() === 129 /* FunctionDeclaration */ || ast.kind() === 135 /* MemberFunctionDeclaration */) { - return ast; - } - - ast = ast.parent; - } - } - - return null; - }; - - LanguageService.prototype.getOccurrencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var symbol = symbolAndContainingAST.symbol; - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - return this.getReferencesInFile(fileName, symbol, containingASTOpt); - }; - - LanguageService.prototype.getSingleNodeReferenceAtPosition = function (fileName, position) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (node === null || node.kind() !== 11 /* IdentifierName */) { - return []; - } - - var isWriteAccess = this.isWriteAccess(node); - return [new Services.ReferenceEntry(this._getHostFileName(fileName), node.start(), node.end(), isWriteAccess)]; - }; - - LanguageService.prototype.getImplementorsAtPosition = function (fileName, pos) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var result = []; - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log("No identifier at the specified location."); - return result; - } - - var actualNameAtPosition = ast.valueText(); - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(ast, document); - var symbol = symbolInfoAtPosition.symbol; - - if (symbol === null) { - this.logger.log("No symbol annotation on the identifier AST."); - return result; - } - - var symbolName = symbol.getName(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - return result; - } - - var typeSymbol = symbol.type; - var typesToSearch; - - if (typeSymbol.isClass() || typeSymbol.isInterface()) { - typesToSearch = typeSymbol.getTypesThatExtendThisType(); - } else if (symbol.kind == 4096 /* Property */ || symbol.kind == 16384 /* Function */ || typeSymbol.isMethod() || typeSymbol.isProperty()) { - var declaration = symbol.getDeclarations()[0]; - var classSymbol = declaration.getParentDecl().getSymbol().type; - - typesToSearch = []; - var extendingTypes = classSymbol.getTypesThatExtendThisType(); - var extendedTypes = classSymbol.getExtendedTypes(); - extendingTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - extendedTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - } - - if (typesToSearch) { - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - typesToSearch.forEach(function (typeToSearch) { - var symbolName = typeToSearch.getName(); - if (filter.probablyContains(symbolName)) { - result = result.concat(_this.getImplementorsInFile(tempFileName, typeToSearch)); - } - }); - } - } - return result; - }; - - LanguageService.prototype.getOverrides = function (container, memberSym) { - var result = []; - var members; - if (container.isClass()) { - members = container.getMembers(); - } else if (container.isInterface()) { - members = container.getMembers(); - } - - if (members == null) - return null; - - members.forEach(function (member) { - var typeMember = member; - if (typeMember.getName() === memberSym.getName()) { - result.push(typeMember); - } - }); - - return result; - }; - - LanguageService.prototype.getImplementorsInFile = function (fileName, symbol) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p); - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */) { - return; - } - var searchSymbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (searchSymbolInfoAtPosition !== null) { - var normalizedSymbol; - if (symbol.kind === 8 /* Class */ || symbol.kind === 16 /* Interface */) { - normalizedSymbol = searchSymbolInfoAtPosition.symbol.type; - } else { - var declaration = searchSymbolInfoAtPosition.symbol.getDeclarations()[0]; - normalizedSymbol = declaration.getSymbol(); - } - - if (normalizedSymbol === symbol) { - var isWriteAccess = _this.isWriteAccess(nameAST); - - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } - } - }); - } - - return result; - }; - - LanguageService.prototype.getReferencesInFile = function (fileName, symbol, containingASTOpt) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - if (containingASTOpt && (p < containingASTOpt.start() || p > containingASTOpt.end())) { - return; - } - - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p, false); - - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */ || (nameAST.end() - nameAST.start() !== symbolName.length)) { - return; - } - - var symbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (symbolInfoAtPosition !== null) { - var searchSymbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - - if (Services.FindReferenceHelpers.compareSymbolsForLexicalIdentity(searchSymbol, symbol)) { - var isWriteAccess = _this.isWriteAccess(nameAST); - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } - } - }); - } - - return result; - }; - - LanguageService.prototype.isWriteAccess = function (current) { - var parent = current.parent; - if (parent !== null) { - var parentNodeType = parent.kind(); - switch (parentNodeType) { - case 131 /* ClassDeclaration */: - return parent.identifier === current; - - case 128 /* InterfaceDeclaration */: - return parent.identifier === current; - - case 130 /* ModuleDeclaration */: - return parent.name === current || parent.stringLiteral === current; - - case 129 /* FunctionDeclaration */: - return parent.identifier === current; - - case 133 /* ImportDeclaration */: - return parent.identifier === current; - - case 225 /* VariableDeclarator */: - var varDeclarator = parent; - return !!(varDeclarator.equalsValueClause && varDeclarator.propertyName === current); - - case 242 /* Parameter */: - return true; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - return parent.left === current; - - case 168 /* PreIncrementExpression */: - case 210 /* PostIncrementExpression */: - return true; - - case 169 /* PreDecrementExpression */: - case 211 /* PostDecrementExpression */: - return true; - } - } - - return false; - }; - - LanguageService.prototype.isLetterOrDigit = function (char) { - return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */) || char === 95 /* _ */ || char === 36 /* $ */ || (char > 127 && TypeScript.Unicode.isIdentifierPart(char, 1 /* EcmaScript5 */)); - }; - - LanguageService.prototype.getPossibleSymbolReferencePositions = function (fileName, symbolName) { - var positions = []; - - if (!symbolName || !symbolName.length) { - return positions; - } - - var sourceText = this.compiler.getScriptSnapshot(fileName); - var sourceLength = sourceText.getLength(); - var text = sourceText.getText(0, sourceLength); - var symbolNameLength = symbolName.length; - - var position = text.indexOf(symbolName); - while (position >= 0) { - var endPosition = position + symbolNameLength; - - if ((position <= 0 || !this.isLetterOrDigit(text.charCodeAt(position - 1))) && (endPosition >= sourceLength || !this.isLetterOrDigit(text.charCodeAt(endPosition)))) { - positions.push(position); - } - - position = text.indexOf(symbolName, position + symbolNameLength + 1); - } - - return positions; - }; - - LanguageService.prototype.getSignatureAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - - if (Services.SignatureInfoHelpers.isSignatureHelpBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("position is not a valid singature help location"); - return null; - } - - var genericTypeArgumentListInfo = Services.SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList(document.syntaxTree(), position); - if (genericTypeArgumentListInfo) { - return this.getTypeParameterSignatureFromPartiallyWrittenExpression(document, position, genericTypeArgumentListInfo); - } - - var sourceUnit = document.sourceUnit(); - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (!node) { - return null; - } - - while (node) { - if (node.kind() === 213 /* InvocationExpression */ || node.kind() === 216 /* ObjectCreationExpression */ || (isSignatureHelpBlocker(node) && position > node.start())) { - break; - } - - node = node.parent; - } - - if (!node) { - return null; - } - - if (node.kind() !== 213 /* InvocationExpression */ && node.kind() !== 216 /* ObjectCreationExpression */) { - this.logger.log("No call expression or generic arguments found for the given position"); - return null; - } - - var callExpression = node; - var isNew = (callExpression.kind() === 216 /* ObjectCreationExpression */); - - if (isNew && callExpression.argumentList === null) { - this.logger.log("No signature help for a object creation expression without arguments"); - return null; - } - - TypeScript.Debug.assert(callExpression.argumentList.arguments !== null, "Expected call expression to have arguments, but it did not"); - - var argumentsStart = callExpression.expression.end() + callExpression.expression.trailingTriviaWidth(); - var argumentsEnd = callExpression.argumentList.arguments.end() + callExpression.argumentList.arguments.trailingTriviaWidth(); - - if (position <= argumentsStart || position > argumentsEnd) { - this.logger.log("Outside argument list"); - return null; - } - - var callSymbolInfo = this.compiler.getCallInformationFromAST(node, document); - if (!callSymbolInfo || !callSymbolInfo.targetSymbol || !callSymbolInfo.resolvedSignatures) { - this.logger.log("Could not find symbol for call expression"); - return null; - } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(callSymbolInfo.targetSymbol, callSymbolInfo.resolvedSignatures, callSymbolInfo.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromCallExpression(callExpression, position, genericTypeArgumentListInfo); - result.activeFormal = (callSymbolInfo.resolvedSignatures && callSymbolInfo.candidateSignature) ? callSymbolInfo.resolvedSignatures.indexOf(callSymbolInfo.candidateSignature) : -1; - - if (result.actual === null || result.formal === null || result.activeFormal === null) { - this.logger.log("Can't compute actual and/or formal signature of the call expression"); - return null; - } - - return result; - }; - - LanguageService.prototype.getTypeParameterSignatureFromPartiallyWrittenExpression = function (document, position, genericTypeArgumentListInfo) { - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, genericTypeArgumentListInfo.genericIdentifer.start()); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log(["getTypeParameterSignatureAtPosition: Unexpected ast found at position:", position, ast === null ? "ast was null" : "ast kind: " + TypeScript.SyntaxKind[ast.kind()]].join(' ')); - return null; - } - - var symbolInformation = this.compiler.getSymbolInformationFromAST(ast, document); - - if (!symbolInformation.symbol) { - return null; - } - - var isNew = Services.SignatureInfoHelpers.isTargetOfObjectCreationExpression(genericTypeArgumentListInfo.genericIdentifer); - - var typeSymbol = symbolInformation.symbol.type; - - if (typeSymbol.kind === 16777216 /* FunctionType */ || (isNew && typeSymbol.kind === 33554432 /* ConstructorType */)) { - var signatures = isNew ? typeSymbol.getConstructSignatures() : typeSymbol.getCallSignatures(); - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(symbolInformation.symbol, signatures, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } else if (typeSymbol.isGeneric()) { - if (typeSymbol.kind === 33554432 /* ConstructorType */) { - typeSymbol = typeSymbol.getAssociatedContainerType(); - } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromGenericSymbol(typeSymbol, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } - - return null; - }; - - LanguageService.prototype.getDefinitionAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolInfo = this.getSymbolInfoAtPosition(fileName, position, false); - if (symbolInfo === null || symbolInfo.symbol === null) { - return null; - } - - var symbol = symbolInfo.symbol; - - TypeScript.Debug.assert(symbol.kind !== 0 /* None */ && symbol.kind !== 0 /* Global */ && symbol.kind !== 1 /* Script */, "getDefinitionAtPosition - Invalid symbol kind"); - - if (symbol.kind === 2 /* Primitive */) { - return null; - } - - var declarations = symbol.getDeclarations(); - var symbolName = symbol.getDisplayName(); - var symbolKind = this.mapPullElementKind(symbol.kind, symbol); - var container = symbol.getContainer(); - var containerName = container ? container.fullName() : ""; - var containerKind = container ? this.mapPullElementKind(container.kind, container) : ""; - - var result = []; - - if (!this.tryAddDefinition(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddSignatures(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddConstructor(symbolKind, symbolName, containerKind, containerName, declarations, result)) { - this.addDeclarations(symbolKind, symbolName, containerKind, containerName, declarations, result); - } - - return result; - }; - - LanguageService.prototype.addDeclarations = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - for (var i = 0, n = declarations.length; i < n; i++) { - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, declarations[i], result); - } - }; - - LanguageService.prototype.addDeclaration = function (symbolKind, symbolName, containerKind, containerName, declaration, result) { - var ast = declaration.ast(); - result.push(new Services.DefinitionInfo(this._getHostFileName(declaration.fileName()), ast.start(), ast.end(), symbolKind, symbolName, containerKind, containerName)); - }; - - LanguageService.prototype.tryAddDefinition = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var definitionDeclaration = TypeScript.ArrayUtilities.firstOrDefault(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && signature.isDefinition(); - }); - - if (!definitionDeclaration) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, definitionDeclaration, result); - return true; - }; - - LanguageService.prototype.tryAddSignatures = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var signatureDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && !signature.isDefinition(); - }); - - if (signatureDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(signatureDeclarations), result); - return true; - }; - - LanguageService.prototype.tryAddConstructor = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var constructorDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - return d.kind === 32768 /* ConstructorMethod */; - }); - - if (constructorDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(constructorDeclarations), result); - return true; - }; - - LanguageService.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - TypeScript.Debug.assert(searchValue !== null && searchValue !== undefined, "The searchValue argument was not supplied or null"); - - var terms = searchValue.split(" "); - - var searchTerms = terms.map(function (t) { - return ({ caseSensitive: _this.hasAnyUpperCaseCharacter(t), term: t }); - }); - - var items = []; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - var declaration = this.compiler.getCachedTopLevelDeclaration(fileName); - this.findSearchValueInPullDecl(fileName, [declaration], items, searchTerms); - } - return items; - }; - - LanguageService.prototype.hasAnyUpperCaseCharacter = function (s) { - for (var i = 0; i < s.length; ++i) { - if (s.charAt(i).toLocaleLowerCase() !== s.charAt(i)) { - return true; - } - } - - return false; - }; - - LanguageService.prototype.findSearchValueInPullDecl = function (fileName, declarations, results, searchTerms, parentName, parentkindName) { - var item; - var declaration; - var declName; - var kindName; - var matchKind; - var fullName; - - for (var i = 0, declLength = declarations.length; i < declLength; ++i) { - declaration = declarations[i]; - declName = declaration.getDisplayName(); - kindName = this.mapPullElementKind(declaration.kind); - matchKind = null; - - for (var j = 0, termsLength = searchTerms.length; j < termsLength; ++j) { - var searchTerm = searchTerms[j]; - var declNameToSearch = searchTerm.caseSensitive ? declName : declName.toLocaleLowerCase(); - - var index = declNameToSearch.indexOf(searchTerm.term); - - if (index !== -1) { - if (index === 0) { - matchKind = declName.length === searchTerm.term.length ? Services.MatchKind.exact : Services.MatchKind.prefix; - } else { - matchKind = Services.MatchKind.subString; - } - } - } - - if (this.shouldIncludeDeclarationInNavigationItems(declaration)) { - fullName = parentName ? parentName + "." + declName : declName; - var ast = declaration.ast(); - if (matchKind) { - item = new Services.NavigateToItem(); - item.name = declName; - item.matchKind = matchKind; - item.kind = this.mapPullElementKind(declaration.kind); - item.kindModifiers = this.getScriptElementKindModifiersFromDecl(declaration); - item.fileName = this._getHostFileName(fileName); - item.minChar = ast.start(); - item.limChar = ast.end(); - item.containerName = parentName || ""; - item.containerKind = parentkindName || ""; - results.push(item); - } - } - if (this.isContainerDeclaration(declaration)) { - this.findSearchValueInPullDecl(fileName, declaration.getChildDecls(), results, searchTerms, fullName, kindName); - } - } - }; - - LanguageService.prototype.getScriptElementKindModifiersFromDecl = function (decl) { - var result = []; - var flags = decl.flags; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.isContainerDeclaration = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - case 4 /* Container */: - case 8 /* Class */: - case 16 /* Interface */: - case 32 /* DynamicModule */: - case 64 /* Enum */: - return true; - } - - return false; - }; - - LanguageService.prototype.shouldIncludeDeclarationInNavigationItems = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - return false; - case 512 /* Variable */: - case 4096 /* Property */: - return (declaration.flags & (16384 /* ClassConstructorVariable */ | 32768 /* InitializedModule */ | 65536 /* InitializedDynamicModule */ | 4096 /* Enum */)) === 0; - case 67108864 /* EnumMember */: - return true; - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - return declaration.name !== ""; - case 32768 /* ConstructorMethod */: - return false; - } - - if (this.isContainerDeclaration(declaration)) { - return true; - } - - return true; - }; - - LanguageService.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageService.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageService.prototype._getHostSpecificDiagnosticWithFileName = function (diagnostic) { - return new TypeScript.Diagnostic(this._getHostFileName(diagnostic.fileName()), diagnostic.lineMap(), diagnostic.start(), diagnostic.length(), diagnostic.diagnosticKey(), diagnostic.arguments(), diagnostic.additionalLocations()); - }; - - LanguageService.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); - }; - var compilerOptionsDiagnostics = this.compiler.getCompilerOptionsDiagnostics(resolvePath); - return compilerOptionsDiagnostics.map(function (d) { - return _this._getHostSpecificDiagnosticWithFileName(d); - }); - }; - - LanguageService.prototype._getHostFileName = function (fileName) { - if (fileName) { - return this.compiler.getCachedHostFileName(fileName); - } - return fileName; - }; - - LanguageService.prototype.getEmitOutput = function (fileName) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); - }; - - var document = this.compiler.getDocument(fileName); - var emitToSingleFile = document.emitToOwnOutputFile(); - - var syntacticDiagnostics = emitToSingleFile ? this.getSyntacticDiagnostics(fileName) : this.getAllSyntacticDiagnostics(); - if (this.containErrors(syntacticDiagnostics)) { - return new TypeScript.EmitOutput(1 /* FailedBecauseOfSyntaxErrors */); - } - - var semanticDiagnostics = emitToSingleFile ? this.getSemanticDiagnostics(fileName) : this.getAllSemanticDiagnostics(); - - var emitResult = this.compiler.emit(fileName, resolvePath); - if (emitResult.emitOutputResult == 0 /* Succeeded */) { - if (!this.containErrors(semanticDiagnostics)) { - var declarationEmitOutput = this.compiler.emitDeclarations(fileName, resolvePath); - emitResult.outputFiles.push.apply(emitResult.outputFiles, declarationEmitOutput.outputFiles); - TypeScript.Debug.assert(declarationEmitOutput.emitOutputResult == 0 /* Succeeded */); - } else if (this.compiler.canEmitDeclarations(fileName)) { - emitResult.emitOutputResult = 3 /* FailedToGenerateDeclarationsBecauseOfSemanticErrors */; - } - } - - return emitResult; - }; - - LanguageService.prototype.getAllSyntacticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().forEach(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSyntacticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.getAllSemanticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().map(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSemanticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.containErrors = function (diagnostics) { - if (diagnostics && diagnostics.length > 0) { - for (var i = 0; i < diagnostics.length; i++) { - var diagnosticInfo = diagnostics[i].info(); - if (diagnosticInfo.category === 1 /* Error */) { - return true; - } - } - } - - return false; - }; - - LanguageService.prototype.getFullNameOfSymbol = function (symbol, enclosingScopeSymbol) { - var container = symbol.getContainer(); - if (TypeScript.PullHelpers.isSymbolLocal(symbol) || symbol.kind == 2048 /* Parameter */) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - var symbolKind = symbol.kind; - if (symbol.kind == 2 /* Primitive */) { - return ""; - } - - if (symbolKind == 33554432 /* ConstructorType */) { - symbol = symbol.getAssociatedContainerType(); - } - - if (symbolKind != 4096 /* Property */ && symbolKind != 67108864 /* EnumMember */ && symbolKind != 65536 /* Method */ && symbolKind != 8192 /* TypeParameter */ && !symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - return symbol.fullName(enclosingScopeSymbol); - }; - - LanguageService.prototype.getTypeInfoEligiblePath = function (fileName, position, isConstructorValidPosition) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, false, true); - if (ast === null) { - return null; - } - - if (ast.kind() === 227 /* ParameterList */ && ast.parent.kind() === 142 /* CallSignature */ && ast.parent.parent.kind() === 137 /* ConstructorDeclaration */) { - ast = ast.parent.parent; - } - - switch (ast.kind()) { - default: - return null; - case 137 /* ConstructorDeclaration */: - var constructorAST = ast; - if (!isConstructorValidPosition || !(position >= constructorAST.start() && position <= constructorAST.start() + "constructor".length)) { - return null; - } else { - return ast; - } - - case 129 /* FunctionDeclaration */: - return null; - - case 212 /* MemberAccessExpression */: - case 121 /* QualifiedName */: - case 50 /* SuperKeyword */: - case 14 /* StringLiteral */: - case 35 /* ThisKeyword */: - case 11 /* IdentifierName */: - return ast; - } - }; - - LanguageService.prototype.getTypeAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, position, true); - if (!node) { - return null; - } - - var document = this.compiler.getDocument(fileName); - var ast; - var symbol; - var typeSymbol; - var enclosingScopeSymbol; - var _isCallExpression = false; - var resolvedSignatures; - var candidateSignature; - var isConstructorCall; - - if (TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(node)) { - var declarationInformation = this.compiler.getSymbolInformationFromAST(node, document); - if (!declarationInformation) { - return null; - } - - ast = declarationInformation.ast; - symbol = declarationInformation.symbol; - enclosingScopeSymbol = declarationInformation.enclosingScopeSymbol; - - if (node.kind() === 137 /* ConstructorDeclaration */ || node.kind() === 129 /* FunctionDeclaration */ || node.kind() === 218 /* ParenthesizedArrowFunctionExpression */ || node.kind() === 219 /* SimpleArrowFunctionExpression */ || node.kind() === 135 /* MemberFunctionDeclaration */ || TypeScript.ASTHelpers.isNameOfFunction(node) || TypeScript.ASTHelpers.isNameOfMemberFunction(node)) { - var funcDecl = node.kind() === 11 /* IdentifierName */ ? node.parent : node; - if (symbol && symbol.kind != 4096 /* Property */) { - var signatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.compiler.getDeclForAST(funcDecl)); - _isCallExpression = true; - candidateSignature = signatureInfo.signature; - resolvedSignatures = signatureInfo.allSignatures; - } - } - } else if (TypeScript.ASTHelpers.isCallExpression(node) || TypeScript.ASTHelpers.isCallExpressionTarget(node)) { - while (!TypeScript.ASTHelpers.isCallExpression(node)) { - node = node.parent; - } - - var callExpressionInformation = this.compiler.getCallInformationFromAST(node, document); - - if (!callExpressionInformation || !callExpressionInformation.targetSymbol) { - return null; - } - - ast = callExpressionInformation.ast; - symbol = callExpressionInformation.targetSymbol; - enclosingScopeSymbol = callExpressionInformation.enclosingScopeSymbol; - - var isPropertyOrVar = symbol.kind == 4096 /* Property */ || symbol.kind == 512 /* Variable */; - typeSymbol = symbol.type; - if (isPropertyOrVar) { - if (typeSymbol.getName() != "") { - symbol = typeSymbol; - } - isPropertyOrVar = (typeSymbol.kind != 16 /* Interface */ && typeSymbol.kind != 8388608 /* ObjectType */) || typeSymbol.getName() == ""; - } - - if (!isPropertyOrVar) { - _isCallExpression = true; - resolvedSignatures = callExpressionInformation.resolvedSignatures; - candidateSignature = callExpressionInformation.candidateSignature; - isConstructorCall = callExpressionInformation.isConstructorCall; - } - } else { - var symbolInformation = this.compiler.getSymbolInformationFromAST(node, document); - - if (!symbolInformation || !symbolInformation.symbol) { - return null; - } - - ast = symbolInformation.ast; - symbol = symbolInformation.symbol; - enclosingScopeSymbol = symbolInformation.enclosingScopeSymbol; - - if (symbol.kind === 65536 /* Method */ || symbol.kind == 16384 /* Function */) { - typeSymbol = symbol.type; - if (typeSymbol) { - _isCallExpression = true; - resolvedSignatures = typeSymbol.getCallSignatures(); - } - } - } - - if (resolvedSignatures && (!candidateSignature || candidateSignature.isDefinition())) { - for (var i = 0, len = resolvedSignatures.length; i < len; i++) { - if (len > 1 && resolvedSignatures[i].isDefinition()) { - continue; - } - - candidateSignature = resolvedSignatures[i]; - break; - } - } - - var memberName = _isCallExpression ? TypeScript.PullSignatureSymbol.getSignatureTypeMemberName(candidateSignature, resolvedSignatures, enclosingScopeSymbol) : symbol.getTypeNameEx(enclosingScopeSymbol, true); - var kind = this.mapPullElementKind(symbol.kind, symbol, !_isCallExpression, _isCallExpression, isConstructorCall); - - var docCommentSymbol = candidateSignature || symbol; - var docComment = docCommentSymbol.docComments(!_isCallExpression); - var symbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - var minChar = ast ? ast.start() : -1; - var limChar = ast ? ast.end() : -1; - - return new Services.TypeInfo(memberName, docComment, symbolName, kind, minChar, limChar); - }; - - LanguageService.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - if (Services.CompletionHelpers.isCompletionListBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("Returning an empty list because completion was blocked."); - return null; - } - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, true, true); - - if (node && node.kind() === 11 /* IdentifierName */ && node.start() === node.end()) { - node = node.parent; - } - - var isRightOfDot = false; - if (node && node.kind() === 212 /* MemberAccessExpression */ && node.expression.end() < position) { - isRightOfDot = true; - node = node.expression; - } else if (node && node.kind() === 121 /* QualifiedName */ && node.left.end() < position) { - isRightOfDot = true; - node = node.left; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 212 /* MemberAccessExpression */ && node.parent.name === node) { - isRightOfDot = true; - node = node.parent.expression; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 121 /* QualifiedName */ && node.parent.right === node) { - isRightOfDot = true; - node = node.parent.left; - } - - var entries = new TypeScript.IdentiferNameHashTable(); - - if (isRightOfDot) { - var members = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - if (!members) { - return null; - } - - isMemberCompletion = true; - this.getCompletionEntriesFromSymbols(members, entries); - } else { - var containingObjectLiteral = Services.CompletionHelpers.getContainingObjectLiteralApplicableForCompletion(document.syntaxTree().sourceUnit(), position); - - if (containingObjectLiteral) { - var searchPosition = Math.min(position, containingObjectLiteral.end()); - var path = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, searchPosition); - - while (node && node.kind() !== 215 /* ObjectLiteralExpression */) { - node = node.parent; - } - - if (!node || node.kind() !== 215 /* ObjectLiteralExpression */) { - return null; - } - - isMemberCompletion = true; - - var contextualMembers = this.compiler.getContextualMembersFromAST(node, document); - if (contextualMembers && contextualMembers.symbols && contextualMembers.symbols.length > 0) { - var existingMembers = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - - this.getCompletionEntriesFromSymbols({ - symbols: Services.CompletionHelpers.filterContextualMembersList(contextualMembers.symbols, existingMembers, fileName, position), - enclosingScopeSymbol: contextualMembers.enclosingScopeSymbol - }, entries); - } - } else { - isMemberCompletion = false; - var decls = this.compiler.getVisibleDeclsFromAST(node, document); - this.getCompletionEntriesFromDecls(decls, entries); - } - } - - if (!isMemberCompletion) { - this.getCompletionEntriesForKeywords(Services.KeywordCompletions.getKeywordCompltions(), entries); - } - - var completions = new Services.CompletionInfo(); - completions.isMemberCompletion = isMemberCompletion; - completions.entries = []; - entries.map(function (key, value) { - completions.entries.push({ - name: value.name, - kind: value.kind, - kindModifiers: value.kindModifiers - }); - }, null); - - this.activeCompletionSession = new Services.CompletionSession(fileName, position, entries); - - return completions; - }; - - LanguageService.prototype.getCompletionEntriesFromSymbols = function (symbolInfo, result) { - for (var i = 0, n = symbolInfo.symbols.length; i < n; i++) { - var symbol = symbolInfo.symbols[i]; - - var symbolDisplayName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(symbol.getDisplayName()); - if (!symbolDisplayName) { - continue; - } - - var symbolKind = symbol.kind; - - var exitingEntry = result.lookup(symbolDisplayName); - - if (exitingEntry && (symbolKind & 68147712 /* SomeValue */)) { - continue; - } - - var entry; - var kindName = this.mapPullElementKind(symbolKind, symbol, true); - var kindModifiersName = this.getScriptElementKindModifiers(symbol); - - if (symbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry = new Services.ResolvedCompletionEntry(symbolDisplayName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(symbolDisplayName, kindName, kindModifiersName, symbol.getDeclarations()[0]); - } - - result.addOrUpdate(symbolDisplayName, entry); - } - }; - - LanguageService.prototype.getCompletionEntriesFromDecls = function (decls, result) { - for (var i = 0, n = decls ? decls.length : 0; i < n; i++) { - var decl = decls[i]; - - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - if (!declDisplaylName) { - continue; - } - - var declKind = decl.kind; - - var exitingEntry = result.lookup(declDisplaylName); - - if (exitingEntry && (declKind & 68147712 /* SomeValue */)) { - continue; - } - - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - var entry = null; - - var symbol = decl.hasSymbol() && decl.getSymbol(); - - var enclosingDecl = decl.getEnclosingDecl(); - var enclosingScopeSymbol = (enclosingDecl && enclosingDecl.hasSymbol()) ? enclosingDecl.getSymbol() : null; - - if (symbol && symbol.isResolved && enclosingScopeSymbol && enclosingScopeSymbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, enclosingScopeSymbol); - entry = new Services.ResolvedCompletionEntry(declDisplaylName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); - } - - result.addOrUpdate(declDisplaylName, entry); - } - }; - - LanguageService.prototype.getResolvedCompletionEntryDetailsFromSymbol = function (symbol, enclosingScopeSymbol) { - var typeName = symbol.getTypeName(enclosingScopeSymbol, true); - var fullSymbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - - var type = symbol.type; - var symbolForDocComments = symbol; - if (type && type.hasOnlyOverloadCallSignatures()) { - symbolForDocComments = type.getCallSignatures()[0]; - } - - var docComments = symbolForDocComments.docComments(true); - return { - typeName: typeName, - fullSymbolName: fullSymbolName, - docComments: docComments - }; - }; - - LanguageService.prototype.getCompletionEntriesForKeywords = function (keywords, result) { - for (var i = 0, n = keywords.length; i < n; i++) { - var keyword = keywords[i]; - result.addOrUpdate(keyword.name, keyword); - } - }; - - LanguageService.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - if (!this.activeCompletionSession || this.activeCompletionSession.fileName !== fileName || this.activeCompletionSession.position !== position) { - return null; - } - - var entry = this.activeCompletionSession.entries.lookup(entryName); - if (!entry) { - return null; - } - - if (!entry.isResolved()) { - var decl = entry.decl; - - var document = this.compiler.getDocument(fileName); - if (decl.fileName() === TypeScript.switchToForwardSlashes(fileName)) { - decl = this.tryFindDeclFromPreviousCompilerVersion(decl); - - if (decl) { - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - var declKind = decl.kind; - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); - this.activeCompletionSession.entries.addOrUpdate(entryName, entry); - } - } - - if (decl) { - var node = TypeScript.ASTHelpers.getAstAtPosition(document.sourceUnit(), position); - var symbolInfo = this.compiler.pullGetDeclInformation(decl, node, document); - - if (!symbolInfo) { - return null; - } - - var symbol = symbolInfo.symbol; - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry.resolve(completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } - } - - return { - name: entry.name, - kind: entry.kind, - kindModifiers: entry.kindModifiers, - type: entry.type, - fullSymbolName: entry.fullSymbolName, - docComment: entry.docComment - }; - }; - - LanguageService.prototype.tryFindDeclFromPreviousCompilerVersion = function (invalidatedDecl) { - var fileName = invalidatedDecl.fileName(); - - var declsInPath = []; - var current = invalidatedDecl; - while (current) { - if (current.kind !== 1 /* Script */) { - declsInPath.unshift(current); - } - - current = current.getParentDecl(); - } - - var topLevelDecl = this.compiler.topLevelDeclaration(fileName); - if (!topLevelDecl) { - return null; - } - - var declsToSearch = [topLevelDecl]; - var foundDecls = []; - var keepSearching = (invalidatedDecl.kind & 4 /* Container */) || (invalidatedDecl.kind & 16 /* Interface */) || (invalidatedDecl.kind & 8 /* Class */) || (invalidatedDecl.kind & 64 /* Enum */); - - for (var i = 0; i < declsInPath.length; i++) { - var declInPath = declsInPath[i]; - var decls = []; - - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(declInPath.name, declInPath.kind); - - decls.push.apply(decls, foundDecls); - - if (foundDecls.length && !keepSearching) { - break; - } - } - - declsToSearch = decls; - - if (declsToSearch.length == 0) { - break; - } - } - - return declsToSearch.length === 0 ? null : declsToSearch[0]; - }; - - LanguageService.prototype.getModuleOrEnumKind = function (symbol) { - if (symbol) { - var declarations = symbol.getDeclarations(); - for (var i = 0; i < declarations.length; i++) { - var declKind = declarations[i].kind; - if (declKind == 4 /* Container */) { - return Services.ScriptElementKind.moduleElement; - } else if (declKind == 64 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } else if (declKind == 512 /* Variable */) { - var declFlags = declarations[i].flags; - if (declFlags & 32768 /* InitializedModule */) { - return Services.ScriptElementKind.moduleElement; - } else if (declFlags & 4096 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } - } - } - } - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.mapPullElementKind = function (kind, symbol, useConstructorAsClass, varIsFunction, functionIsConstructor) { - if (functionIsConstructor) { - return Services.ScriptElementKind.constructorImplementationElement; - } - - if (varIsFunction) { - switch (kind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - case 16 /* Interface */: - case 8 /* Class */: - case 2048 /* Parameter */: - return Services.ScriptElementKind.functionElement; - case 512 /* Variable */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberFunctionElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } else { - switch (kind) { - case 1 /* Script */: - return Services.ScriptElementKind.scriptElement; - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - return Services.ScriptElementKind.moduleElement; - case 16 /* Interface */: - return Services.ScriptElementKind.interfaceElement; - case 8 /* Class */: - return Services.ScriptElementKind.classElement; - case 64 /* Enum */: - return Services.ScriptElementKind.enumElement; - case 512 /* Variable */: - var scriptElementKind = this.getModuleOrEnumKind(symbol); - if (scriptElementKind != Services.ScriptElementKind.unknown) { - return scriptElementKind; - } - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localVariableElement : Services.ScriptElementKind.variableElement; - case 2048 /* Parameter */: - return Services.ScriptElementKind.parameterElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberVariableElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return useConstructorAsClass ? Services.ScriptElementKind.classElement : Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 67108864 /* EnumMember */: - return Services.ScriptElementKind.memberVariableElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } - - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.getScriptElementKindModifiers = function (symbol) { - var result = []; - - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - if (symbol.anyDeclHasFlag(8 /* Ambient */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - if (symbol.anyDeclHasFlag(4 /* Public */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - if (symbol.anyDeclHasFlag(2 /* Private */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - if (symbol.anyDeclHasFlag(16 /* Static */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getScriptElementKindModifiersFromFlags = function (flags) { - var result = []; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, startPos, false); - - if (!node) { - return null; - } - - while (node) { - if (TypeScript.ASTHelpers.isNameOfMemberAccessExpression(node) || TypeScript.ASTHelpers.isRightSideOfQualifiedName(node)) { - node = node.parent; - } else { - break; - } - } - - var spanInfo = new Services.SpanInfo(node.start(), node.end()); - return spanInfo; - }; - - LanguageService.prototype.getBreakpointStatementAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxtree = this.getSyntaxTree(fileName); - return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, pos); - }; - - LanguageService.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatSelection(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatDocument(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatOnPaste(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - - if (key === "}") { - return manager.formatOnClosingCurlyBrace(position); - } else if (key === ";") { - return manager.formatOnSemicolon(position); - } else if (key === "\n") { - return manager.formatOnEnter(position); - } - - return []; - }; - - LanguageService.prototype.getFormattingManager = function (fileName, options) { - if (this.formattingRulesProvider == null) { - this.formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(this.logger); - } - - this.formattingRulesProvider.ensureUpToDate(options); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - - var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, this.formattingRulesProvider, options); - - return manager; - }; - - LanguageService.prototype.getOutliningRegions = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.OutliningElementsCollector.collectElements(syntaxTree.sourceUnit()); - }; - - LanguageService.prototype.getIndentationAtPosition = function (fileName, position, editorOptions) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - var options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); - - return TypeScript.Services.Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); - }; - - LanguageService.prototype.getBraceMatchingAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.BraceMatcher.getMatchSpans(syntaxTree, position); - }; - - LanguageService.prototype.getScriptLexicalStructure = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - var items = []; - Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, fileName, syntaxTree.sourceUnit()); - - return items; - }; - - LanguageService.prototype.getSyntaxTree = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this._syntaxTreeCache.getCurrentFileSyntaxTree(fileName); - }; - return LanguageService; - })(); - Services.LanguageService = LanguageService; - - function isSignatureHelpBlocker(ast) { - if (ast) { - switch (ast.kind()) { - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 225 /* VariableDeclarator */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return true; - } - } - - return false; - } - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var FindReferenceHelpers = (function () { - function FindReferenceHelpers() { - } - FindReferenceHelpers.compareSymbolsForLexicalIdentity = function (firstSymbol, secondSymbol) { - if (!firstSymbol.isAlias() && firstSymbol.isContainer()) { - var containerForFirstSymbol = firstSymbol; - if (containerForFirstSymbol.getInstanceSymbol()) { - firstSymbol = containerForFirstSymbol.getInstanceSymbol(); - } - } - - if (!secondSymbol.isAlias() && secondSymbol.isContainer()) { - var containerForSecondSymbol = secondSymbol; - if (containerForSecondSymbol.getInstanceSymbol()) { - secondSymbol = containerForSecondSymbol.getInstanceSymbol(); - } - } - - if (firstSymbol.kind === secondSymbol.kind) { - if (firstSymbol === secondSymbol) { - return true; - } - - if (firstSymbol.kind === 512 /* Variable */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - return firstSymbolDecl.getParentDecl() === secondSymbolDecl.getParentDecl(); - } - - if (firstSymbol.kind === 4096 /* Property */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - var firstParentDecl = firstSymbolDecl.getParentDecl(); - var secondParentDecl = secondSymbolDecl.getParentDecl(); - - if (firstParentDecl.kind === 256 /* ObjectLiteral */ && secondParentDecl.kind === 256 /* ObjectLiteral */) { - return firstParentDecl.ast() === secondParentDecl.ast(); - } - } - - return false; - } else { - switch (firstSymbol.kind) { - case 8 /* Class */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } - case 4096 /* Property */: { - if (firstSymbol.isAccessor()) { - var getterSymbol = firstSymbol.getGetter(); - var setterSymbol = firstSymbol.getSetter(); - - if (getterSymbol && getterSymbol === secondSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === secondSymbol) { - return true; - } - } - return false; - } - case 16384 /* Function */: { - if (secondSymbol.isAccessor()) { - var getterSymbol = secondSymbol.getGetter(); - var setterSymbol = secondSymbol.getSetter(); - - if (getterSymbol && getterSymbol === firstSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === firstSymbol) { - return true; - } - } - return false; - } - case 32768 /* ConstructorMethod */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } - } - } - - return firstSymbol === secondSymbol; - }; - - FindReferenceHelpers.checkSymbolsForDeclarationEquality = function (firstSymbol, secondSymbol) { - var firstSymbolDeclarations = firstSymbol.getDeclarations(); - var secondSymbolDeclarations = secondSymbol.getDeclarations(); - for (var i = 0, iLen = firstSymbolDeclarations.length; i < iLen; i++) { - for (var j = 0, jLen = secondSymbolDeclarations.length; j < jLen; j++) { - if (this.declarationsAreSameOrParents(firstSymbolDeclarations[i], secondSymbolDeclarations[j])) { - return true; - } - } - } - return false; - }; - - FindReferenceHelpers.declarationsAreSameOrParents = function (firstDecl, secondDecl) { - var firstParent = firstDecl.getParentDecl(); - var secondParent = secondDecl.getParentDecl(); - if (firstDecl === secondDecl || firstDecl === secondParent || firstParent === secondDecl || firstParent === secondParent) { - return true; - } - return false; - }; - return FindReferenceHelpers; - })(); - Services.FindReferenceHelpers = FindReferenceHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - - - - - var ShimBase = (function () { - function ShimBase(factory) { - this.factory = factory; - factory.registerShim(this); - } - ShimBase.prototype.dispose = function (dummy) { - this.factory.unregisterShim(this); - }; - return ShimBase; - })(); - Services.ShimBase = ShimBase; - - var ScriptSnapshotShimAdapter = (function () { - function ScriptSnapshotShimAdapter(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - this.lineStartPositions = null; - } - ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { - return this.scriptSnapshotShim.getText(start, end); - }; - - ScriptSnapshotShimAdapter.prototype.getLength = function () { - return this.scriptSnapshotShim.getLength(); - }; - - ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { - if (this.lineStartPositions == null) { - this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); - } - - return this.lineStartPositions; - }; - - ScriptSnapshotShimAdapter.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); - if (encoded == null) { - return null; - } - - var decoded = JSON.parse(encoded); - return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); - }; - return ScriptSnapshotShimAdapter; - })(); - - var LanguageServiceShimHostAdapter = (function () { - function LanguageServiceShimHostAdapter(shimHost) { - this.shimHost = shimHost; - } - LanguageServiceShimHostAdapter.prototype.information = function () { - return this.shimHost.information(); - }; - - LanguageServiceShimHostAdapter.prototype.debug = function () { - return this.shimHost.debug(); - }; - - LanguageServiceShimHostAdapter.prototype.warning = function () { - return this.shimHost.warning(); - }; - - LanguageServiceShimHostAdapter.prototype.error = function () { - return this.shimHost.error(); - }; - - LanguageServiceShimHostAdapter.prototype.fatal = function () { - return this.shimHost.fatal(); - }; - - LanguageServiceShimHostAdapter.prototype.log = function (s) { - this.shimHost.log(s); - }; - - LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { - var settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson == null || settingsJson == "") { - return null; - } - var settings = JSON.parse(settingsJson); - return settings; - }; - - LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { - var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { - return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { - return this.shimHost.getScriptVersion(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { - return this.shimHost.getScriptIsOpen(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptByteOrderMark = function (fileName) { - return this.shimHost.getScriptByteOrderMark(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getDiagnosticsObject = function () { - return this.shimHost.getDiagnosticsObject(); - }; - - LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { - var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - }; - - LanguageServiceShimHostAdapter.prototype.resolveRelativePath = function (path, directory) { - return this.shimHost.resolveRelativePath(path, directory); - }; - - LanguageServiceShimHostAdapter.prototype.fileExists = function (path) { - return this.shimHost.fileExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.directoryExists = function (path) { - return this.shimHost.directoryExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.getParentDirectory = function (path) { - return this.shimHost.getParentDirectory(path); - }; - return LanguageServiceShimHostAdapter; - })(); - Services.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; - - function simpleForwardCall(logger, actionDescription, action) { - logger.log(actionDescription); - var start = Date.now(); - var result = action(); - var end = Date.now(); - logger.log(actionDescription + " completed in " + (end - start) + " msec"); - if (typeof (result) === "string") { - var str = result; - if (str.length > 128) { - str = str.substring(0, 128) + "..."; - } - logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); - } - return result; - } - Services.simpleForwardCall = simpleForwardCall; - - function forwardJSONCall(logger, actionDescription, action) { - try { - var result = simpleForwardCall(logger, actionDescription, action); - return JSON.stringify({ result: result }); - } catch (err) { - TypeScript.Services.logInternalError(logger, err); - err.description = actionDescription; - return JSON.stringify({ error: err }); - } - } - Services.forwardJSONCall = forwardJSONCall; - - var LanguageServiceShim = (function (_super) { - __extends(LanguageServiceShim, _super); - function LanguageServiceShim(factory, host, languageService) { - _super.call(this, factory); - this.host = host; - this.languageService = languageService; - this.logger = this.host; - } - LanguageServiceShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - LanguageServiceShim.prototype.dispose = function (dummy) { - this.logger.log("dispose()"); - this.languageService = null; - - if (debugObjectHost && debugObjectHost.CollectGarbage) { - debugObjectHost.CollectGarbage(); - this.logger.log("CollectGarbage()"); - } - - this.logger = null; - - _super.prototype.dispose.call(this, dummy); - }; - - LanguageServiceShim.prototype.refresh = function (throwOnError) { - var _this = this; - this.forwardJSONCall("refresh(" + throwOnError + ")", function () { - _this.languageService.refresh(); - return null; - }); - }; - - LanguageServiceShim.prototype.cleanupSemanticCache = function () { - var _this = this; - this.forwardJSONCall("cleanupSemanticCache()", function () { - _this.languageService.cleanupSemanticCache(); - return null; - }); - }; - - LanguageServiceShim.realizeDiagnosticCategory = function (category) { - switch (category) { - case 1 /* Error */: - return Services.DiagnosticCategory.error; - case 0 /* Warning */: - return Services.DiagnosticCategory.warning; - case 2 /* Message */: - return Services.DiagnosticCategory.message; - default: - return Services.DiagnosticCategory.none; - } - }; - - LanguageServiceShim.realizeDiagnostic = function (diagnostic) { - return { - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) - }; - }; - - LanguageServiceShim.prototype.realizeDiagnosticWithFileName = function (diagnostic) { - return { - fileName: diagnostic.fileName(), - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) - }; - }; - - LanguageServiceShim.prototype.getSyntacticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSyntacticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getSemanticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSemanticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSemanticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { - var errors = _this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(function (d) { - return _this.realizeDiagnosticWithFileName(d); - }); - }); - }; - - LanguageServiceShim.prototype.getTypeAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getTypeAtPosition(\"" + fileName + "\", " + position + ")", function () { - var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); - return typeInfo; - }); - }; - - LanguageServiceShim.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - var _this = this; - return this.forwardJSONCall("getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", function () { - var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getBreakpointStatementAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", function () { - var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getSignatureAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getSignatureAtPosition(\"" + fileName + "\", " + position + ")", function () { - var signatureInfo = _this.languageService.getSignatureAtPosition(fileName, position); - return signatureInfo; - }); - }; - - LanguageServiceShim.prototype.getDefinitionAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getDefinitionAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getBraceMatchingAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", function () { - var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position); - return textRanges; - }); - }; - - LanguageServiceShim.prototype.getIndentationAtPosition = function (fileName, position, options) { - var _this = this; - return this.forwardJSONCall("getIndentationAtPosition(\"" + fileName + "\", " + position + ")", function () { - var localOptions = JSON.parse(options); - var columnOffset = _this.languageService.getIndentationAtPosition(fileName, position, localOptions); - return { value: columnOffset }; - }); - }; - - LanguageServiceShim.prototype.getReferencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getReferencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getReferencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getOccurrencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getOccurrencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getImplementorsAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getImplementorsAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - var _this = this; - return this.forwardJSONCall("getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", function () { - var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); - return completion; - }); - }; - - LanguageServiceShim.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - var _this = this; - return this.forwardJSONCall("getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", function () { - var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName); - return details; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - return this.forwardJSONCall("getNavigateToItems(\"" + searchValue + "\")", function () { - var items = _this.languageService.getNavigateToItems(searchValue); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getScriptLexicalStructure = function (fileName) { - var _this = this; - return this.forwardJSONCall("getScriptLexicalStructure(\"" + fileName + "\")", function () { - var items = _this.languageService.getScriptLexicalStructure(fileName); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getOutliningRegions = function (fileName) { - var _this = this; - return this.forwardJSONCall("getOutliningRegions(\"" + fileName + "\")", function () { - var items = _this.languageService.getOutliningRegions(fileName); - return items; - }); - }; - - LanguageServiceShim.prototype.getEmitOutput = function (fileName) { - var _this = this; - return this.forwardJSONCall("getEmitOutput(\"" + fileName + "\")", function () { - var output = _this.languageService.getEmitOutput(fileName); - return output; - }); - }; - - LanguageServiceShim.prototype._navigateToItemsToString = function (items) { - var result = []; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - - result.push({ - name: item.name, - kind: item.kind, - kindModifiers: item.kindModifiers, - containerName: item.containerName, - containerKind: item.containerKind, - matchKind: item.matchKind, - fileName: item.fileName, - minChar: item.minChar, - limChar: item.limChar, - additionalSpans: item.additionalSpans ? item.additionalSpans.map(function (i) { - return { start: i.minChar, end: i.limChar }; - }) : undefined - }); - } - - return result; - }; - return LanguageServiceShim; - })(ShimBase); - Services.LanguageServiceShim = LanguageServiceShim; - - var ClassifierShim = (function (_super) { - __extends(ClassifierShim, _super); - function ClassifierShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.classifier = new TypeScript.Services.Classifier(this.host); - } - ClassifierShim.prototype.getClassificationsForLine = function (text, lexState) { - var classification = this.classifier.getClassificationsForLine(text, lexState); - var items = classification.entries; - var result = ""; - for (var i = 0; i < items.length; i++) { - result += items[i].length + "\n"; - result += items[i].classification + "\n"; - } - result += classification.finalLexState; - return result; - }; - return ClassifierShim; - })(ShimBase); - Services.ClassifierShim = ClassifierShim; - - var CoreServicesShim = (function (_super) { - __extends(CoreServicesShim, _super); - function CoreServicesShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.logger = this.host.logger; - this.services = new TypeScript.Services.CoreServices(this.host); - } - CoreServicesShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - CoreServicesShim.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - var _this = this; - return this.forwardJSONCall("getPreProcessedFileInfo(\"" + fileName + "\")", function () { - var result = _this.services.getPreProcessedFileInfo(fileName, sourceText); - return result; - }); - }; - - CoreServicesShim.prototype.getDefaultCompilationSettings = function () { - var _this = this; - return this.forwardJSONCall("getDefaultCompilationSettings()", function () { - var result = _this.services.getDefaultCompilationSettings(); - return result; - }); - }; - - CoreServicesShim.prototype.dumpMemory = function (dummy) { - var _this = this; - return this.forwardJSONCall("dumpMemory()", function () { - return _this.services.dumpMemory(); - }); - }; - - CoreServicesShim.prototype.getMemoryInfo = function (dummy) { - var _this = this; - return this.forwardJSONCall("getMemoryInfo()", function () { - var result = _this.services.getMemoryInfo(); - return result; - }); - }; - return CoreServicesShim; - })(ShimBase); - Services.CoreServicesShim = CoreServicesShim; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var OutliningElementsCollector = (function (_super) { - __extends(OutliningElementsCollector, _super); - function OutliningElementsCollector() { - _super.call(this, OutliningElementsCollector.MaximumDepth); - this.inObjectLiteralExpression = false; - this.elements = []; - } - OutliningElementsCollector.prototype.visitClassDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitClassDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitInterfaceDeclaration = function (node) { - this.addOutlineRange(node, node.body, node.body); - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitModuleDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitModuleDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitEnumDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitEnumDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionExpression = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionExpression.call(this, node); - }; - - OutliningElementsCollector.prototype.visitConstructorDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitConstructorDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitMemberFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitGetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitGetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitSetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitSetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - OutliningElementsCollector.prototype.addOutlineRange = function (node, startElement, endElement) { - if (startElement && endElement) { - var start = this.position() + TypeScript.Syntax.childOffset(node, startElement); - var end = this.position() + TypeScript.Syntax.childOffset(node, endElement) + endElement.leadingTriviaWidth() + endElement.width(); - - this.elements.push(TypeScript.TextSpan.fromBounds(start, end)); - } - }; - - OutliningElementsCollector.collectElements = function (node) { - var collector = new OutliningElementsCollector(); - node.accept(collector); - return collector.elements; - }; - OutliningElementsCollector.MaximumDepth = 10; - return OutliningElementsCollector; - })(TypeScript.DepthLimitedWalker); - Services.OutliningElementsCollector = OutliningElementsCollector; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var Indenter = (function () { - function Indenter() { - } - Indenter.getIndentation = function (node, soruceText, position, editorOptions) { - var indentation = 0; - var currentToken = node.findToken(position); - var currentNode = currentToken; - - if (currentToken.token().kind() === 10 /* EndOfFileToken */) { - currentNode = currentToken.previousToken(); - } else if (Indenter.belongsToBracket(soruceText, currentToken, position)) { - currentNode = currentToken.parent(); - } - - if (currentNode === null) { - return indentation; - } - - if (currentNode.kind() === 14 /* StringLiteral */ || currentNode.kind() === 12 /* RegularExpressionLiteral */) { - return indentation; - } - - var currentElement = currentNode.element(); - var parent = currentNode.parent(); - - while (parent !== null) { - if (parent.fullStart() !== currentNode.fullStart()) { - if (Indenter.isInContainerNode(parent.element(), currentElement)) { - indentation += editorOptions.IndentSize; - } else { - var listIndentation = Indenter.getCustomListIndentation(parent.element(), currentElement); - if (listIndentation !== -1) { - return indentation + listIndentation; - } - } - } - currentNode = parent; - currentElement = parent.element(); - parent = parent.parent(); - } - - return indentation; - }; - - Indenter.belongsToBracket = function (sourceText, token, position) { - switch (token.token().kind()) { - case 70 /* OpenBraceToken */: - case 71 /* CloseBraceToken */: - case 72 /* OpenParenToken */: - case 73 /* CloseParenToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: - if (position < token.start()) { - var text = sourceText.getText(position, token.start()); - for (var i = 0; i < text.length; i++) { - if (TypeScript.CharacterInfo.isLineTerminator(text.charCodeAt(i))) { - return false; - } - } - } - return true; - } - return false; - }; - - Indenter.isInContainerNode = function (parent, element) { - switch (parent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 133 /* ImportDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - case 122 /* ObjectType */: - return true; - - case 128 /* InterfaceDeclaration */: - return element.kind() !== 122 /* ObjectType */; - - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 147 /* IfStatement */: - case 235 /* ElseClause */: - return element.kind() !== 146 /* Block */; - - case 159 /* TryStatement */: - return false; - default: - return parent.isNode() && parent.isStatement(); - } - }; - - Indenter.getCustomListIndentation = function (list, element) { - switch (list.kind()) { - case 2 /* SeparatedList */: - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (child !== null && child === element) - return Indenter.getListItemIndentation(list, i - 1); - } - break; - - case 226 /* ArgumentList */: - var argumentList = list; - var _arguments = argumentList.arguments; - if (_arguments !== null && argumentList.closeParenToken === element) { - return Indenter.getListItemIndentation(_arguments, _arguments.childCount() - 1); - } - break; - - case 227 /* ParameterList */: - var parameterList = list; - var parameters = parameterList.parameters; - if (parameters !== null && parameterList.closeParenToken === element) { - return Indenter.getListItemIndentation(parameters, parameters.childCount() - 1); - } - break; - - case 228 /* TypeArgumentList */: - var typeArgumentList = list; - var typeArguments = typeArgumentList.typeArguments; - if (typeArguments !== null && typeArgumentList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeArguments, typeArguments.childCount() - 1); - } - break; - - case 229 /* TypeParameterList */: - var typeParameterList = list; - var typeParameters = typeParameterList.typeParameters; - if (typeParameters !== null && typeParameterList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeParameters, typeParameters.childCount() - 1); - } - break; - } - return -1; - }; - - Indenter.getListItemIndentation = function (list, elementIndex) { - for (var i = elementIndex; i > 0; i--) { - var child = list.childAt(i); - var previousChild = list.childAt(i - 1); - if ((child !== null && child.leadingTrivia().hasNewLine()) || (previousChild !== null && previousChild.trailingTrivia().hasNewLine())) { - return child.leadingTriviaWidth(); - } - } - return -1; - }; - return Indenter; - })(); - Services.Indenter = Indenter; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Breakpoints) { - function createBreakpointSpanInfo(parentElement) { - var childElements = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - childElements[_i] = arguments[_i + 1]; - } - if (!parentElement) { - return null; - } - - if (childElements.length == 0) { - return new Services.SpanInfo(parentElement.start(), parentElement.end()); - } - - var start; - var end; - for (var i = 0; i < childElements.length; i++) { - var element = childElements[i]; - if (element) { - if (start == undefined) { - start = parentElement.childStart(element); - } - end = parentElement.childEnd(element); - } - } - - return new Services.SpanInfo(start, end); - } - - function createBreakpointSpanInfoWithLimChar(startElement, limChar) { - return new Services.SpanInfo(startElement.start(), limChar); - } - - var BreakpointResolver = (function () { - function BreakpointResolver(posLine, lineMap) { - this.posLine = posLine; - this.lineMap = lineMap; - } - BreakpointResolver.prototype.breakpointSpanOfToken = function (positionedToken) { - switch (positionedToken.token().tokenKind) { - case 70 /* OpenBraceToken */: - return this.breakpointSpanOfOpenBrace(positionedToken); - - case 71 /* CloseBraceToken */: - return this.breakpointSpanOfCloseBrace(positionedToken); - - case 79 /* CommaToken */: - return this.breakpointSpanOfComma(positionedToken); - - case 78 /* SemicolonToken */: - case 10 /* EndOfFileToken */: - return this.breakpointSpanIfStartsOnSameLine(positionedToken.previousToken()); - - case 73 /* CloseParenToken */: - return this.breakpointSpanOfCloseParen(positionedToken); - - case 22 /* DoKeyword */: - var parentElement = positionedToken.parent(); - if (parentElement && parentElement.kind() == 161 /* DoStatement */) { - return this.breakpointSpanIfStartsOnSameLine(positionedToken.nextToken()); - } - break; - } - - return this.breakpointSpanOfContainingNode(positionedToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfOpenBrace = function (openBraceToken) { - var container = openBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container && container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfFirstStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(container)); - } else { - return this.breakpointSpanOf(container); - } - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstEnumElement(container); - } else { - return this.breakpointSpanOf(container); - } - - case 147 /* IfStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 236 /* CatchClause */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(container); - } - - case 161 /* DoStatement */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 154 /* ForStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(openBraceToken.previousToken()); - } - - case 235 /* ElseClause */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 237 /* FinallyClause */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementOfFirstCaseClause(container); - } else { - return this.breakpointSpanOf(container); - } - } - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfCloseBrace = function (closeBraceToken) { - var container = closeBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfLastStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - var moduleSyntax = container.node(); - if (moduleSyntax.moduleElements && moduleSyntax.moduleElements.childCount() > 0) { - return createBreakpointSpanInfo(closeBraceToken); - } else { - return null; - } - - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfLastStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - return this.breakpointSpanOfLastStatementOfLastCaseClause(container); - } - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfComma = function (commaToken) { - var commaParent = commaToken.parent(); - if (commaParent && commaParent.element().isSeparatedList()) { - var grandParent = commaParent.parent(); - if (grandParent) { - switch (grandParent.kind()) { - case 224 /* VariableDeclaration */: - case 132 /* EnumDeclaration */: - case 227 /* ParameterList */: - var index = commaParent.childIndex(commaToken.token()); - - if (index > 0) { - var child = commaParent.childAt(index - 1); - return this.breakpointSpanOf(child); - } - - if (grandParent.kind() == 132 /* EnumDeclaration */) { - return null; - } - break; - } - } - } - - return this.breakpointSpanOfContainingNode(commaToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfCloseParen = function (closeParenToken) { - var closeParenParent = closeParenToken.parent(); - if (closeParenParent) { - switch (closeParenParent.kind()) { - case 154 /* ForStatement */: - case 227 /* ParameterList */: - return this.breakpointSpanOf(closeParenToken.previousToken()); - } - } - - return this.breakpointSpanOfContainingNode(closeParenToken); - }; - - BreakpointResolver.prototype.canHaveBreakpointInBlock = function (blockNode) { - if (!blockNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(blockNode)) { - return false; - } - - var blockSyntax = blockNode.node(); - return blockSyntax.statements && blockSyntax.statements.childCount() != 0; - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; - } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; - } - - var firstStatement = statementsNode.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - return null; - } else { - return this.breakpointSpanOf(firstStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; - } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; - } - - var lastStatement = statementsNode.childAt(statementsNode.childCount() - 1); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; - } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; - } - - var firstStatement = positionedList.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - - return null; - } else { - return this.breakpointSpanOf(firstStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfLastChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; - } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; - } - var lastStatement = positionedList.childAt(0); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfNode = function (positionedNode) { - var node = positionedNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - return this.breakpointSpanOfDeclarationWithElements(positionedNode); - - case 225 /* VariableDeclarator */: - return this.breakpointSpanOfVariableDeclarator(positionedNode); - - case 224 /* VariableDeclaration */: - return this.breakpointSpanOfVariableDeclaration(positionedNode); - - case 148 /* VariableStatement */: - return this.breakpointSpanOfVariableStatement(positionedNode); - - case 242 /* Parameter */: - return this.breakpointSpanOfParameter(positionedNode); - - case 136 /* MemberVariableDeclaration */: - return this.breakpointSpanOfMemberVariableDeclaration(positionedNode); - - case 133 /* ImportDeclaration */: - return this.breakpointSpanOfImportDeclaration(positionedNode); - - case 132 /* EnumDeclaration */: - return this.breakpointSpanOfEnumDeclaration(positionedNode); - - case 243 /* EnumElement */: - return this.breakpointSpanOfEnumElement(positionedNode); - - case 147 /* IfStatement */: - return this.breakpointSpanOfIfStatement(positionedNode); - case 235 /* ElseClause */: - return this.breakpointSpanOfElseClause(positionedNode); - case 155 /* ForInStatement */: - return this.breakpointSpanOfForInStatement(positionedNode); - case 154 /* ForStatement */: - return this.breakpointSpanOfForStatement(positionedNode); - case 158 /* WhileStatement */: - return this.breakpointSpanOfWhileStatement(positionedNode); - case 161 /* DoStatement */: - return this.breakpointSpanOfDoStatement(positionedNode); - case 151 /* SwitchStatement */: - return this.breakpointSpanOfSwitchStatement(positionedNode); - case 233 /* CaseSwitchClause */: - return this.breakpointSpanOfCaseSwitchClause(positionedNode); - case 234 /* DefaultSwitchClause */: - return this.breakpointSpanOfDefaultSwitchClause(positionedNode); - case 163 /* WithStatement */: - return this.breakpointSpanOfWithStatement(positionedNode); - case 159 /* TryStatement */: - return this.breakpointSpanOfTryStatement(positionedNode); - case 236 /* CatchClause */: - return this.breakpointSpanOfCatchClause(positionedNode); - case 237 /* FinallyClause */: - return this.breakpointSpanOfFinallyClause(positionedNode); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.breakpointSpanOfParenthesizedArrowFunctionExpression(positionedNode); - - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfSimpleArrowFunctionExpression(positionedNode); - - default: - if (node.isStatement()) { - return this.breakpointSpanOfStatement(positionedNode); - } else { - return this.breakpointOfExpression(positionedNode); - } - } - }; - - BreakpointResolver.prototype.isExpressionOfArrowExpressions = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent) { - if (expressionParent.kind() == 218 /* ParenthesizedArrowFunctionExpression */) { - var expression = expressionNode.element(); - var parenthesizedArrowExpression = expressionParent.element(); - var expressionOfParenthesizedArrowExpression = expressionParent.getPositionedChild(parenthesizedArrowExpression.expression); - return expressionOfParenthesizedArrowExpression && expressionOfParenthesizedArrowExpression.element() == expression; - } else if (expressionParent.kind() == 219 /* SimpleArrowFunctionExpression */) { - var expression = expressionNode.element(); - var simpleArrowExpression = expressionParent.element(); - var expressionOfSimpleArrowExpression = expressionParent.getPositionedChild(simpleArrowExpression.expression); - return expressionOfSimpleArrowExpression && expressionOfSimpleArrowExpression.element() == expression; - } else if (expressionParent.kind() == 173 /* CommaExpression */) { - return this.isExpressionOfArrowExpressions(expressionParent); - } - } - return false; - }; - - BreakpointResolver.prototype.isInitializerOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var initializer = expressionParent.getPositionedChild(forStatement.initializer); - return initializer && initializer.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isInitializerOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.isConditionOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var condition = expressionParent.getPositionedChild(forStatement.condition); - return condition && condition.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isConditionOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.isIncrememtorOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var incrementor = expressionParent.getPositionedChild(forStatement.incrementor); - return incrementor && incrementor.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isIncrememtorOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.breakpointOfLeftOfCommaExpression = function (commaExpressionNode) { - var commaExpression = commaExpressionNode.node(); - return this.breakpointSpanOf(commaExpressionNode.getPositionedChild(commaExpression.left)); - }; - - BreakpointResolver.prototype.breakpointOfExpression = function (expressionNode) { - if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); - } - return createBreakpointSpanInfo(expressionNode); - } - - if (this.isExpressionOfArrowExpressions(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); - } - return createBreakpointSpanInfo(expressionNode); - } - - if (expressionNode.kind() == 134 /* ExportAssignment */) { - var exportAssignmentSyntax = expressionNode.node(); - return createBreakpointSpanInfo(expressionNode, exportAssignmentSyntax.exportKeyword, exportAssignmentSyntax.equalsToken, exportAssignmentSyntax.identifier); - } - - return this.breakpointSpanOfContainingNode(expressionNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfStatement = function (statementNode) { - var statement = statementNode.node(); - if (statement.kind() == 156 /* EmptyStatement */) { - return null; - } - - var containingNode = statementNode.containingNode(); - if (containingNode && containingNode.node().isStatement()) { - var useNodeForBreakpoint = false; - switch (containingNode.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 146 /* Block */: - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 146 /* Block */: - useNodeForBreakpoint = true; - } - - if (!useNodeForBreakpoint) { - return this.breakpointSpanOfContainingNode(statementNode); - } - } - - switch (statement.kind()) { - case 149 /* ExpressionStatement */: - var expressionSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(expressionSyntax.expression)); - - case 150 /* ReturnStatement */: - var returnStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, returnStatementSyntax.returnKeyword, returnStatementSyntax.expression); - - case 157 /* ThrowStatement */: - var throwStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, throwStatementSyntax.throwKeyword, throwStatementSyntax.expression); - - case 152 /* BreakStatement */: - var breakStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, breakStatementSyntax.breakKeyword, breakStatementSyntax.identifier); - - case 153 /* ContinueStatement */: - var continueStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, continueStatementSyntax.continueKeyword, continueStatementSyntax.identifier); - - case 162 /* DebuggerStatement */: - var debuggerStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(debuggerStatementSyntax.debuggerKeyword)); - - case 160 /* LabeledStatement */: - var labeledStatementSyntax = statement; - return this.breakpointSpanOf(statementNode.getPositionedChild(labeledStatementSyntax.statement)); - } - - return null; - }; - - BreakpointResolver.prototype.getSyntaxListOfDeclarationWithElements = function (positionedNode) { - var node = positionedNode.node(); - var elementsList; - var block; - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - elementsList = node.moduleElements; - break; - - case 131 /* ClassDeclaration */: - elementsList = node.classElements; - break; - - case 129 /* FunctionDeclaration */: - block = node.block; - break; - - case 137 /* ConstructorDeclaration */: - block = node.block; - break; - - case 135 /* MemberFunctionDeclaration */: - block = node.block; - break; - - case 139 /* GetAccessor */: - block = node.block; - break; - - case 140 /* SetAccessor */: - block = node.block; - break; - - case 222 /* FunctionExpression */: - block = node.block; - break; - - case 218 /* ParenthesizedArrowFunctionExpression */: - block = node.block; - break; - - case 219 /* SimpleArrowFunctionExpression */: - block = node.block; - break; - - default: - throw TypeScript.Errors.argument('positionNode', 'unknown node kind in getSyntaxListOfDeclarationWithElements'); - } - - var parentElement = positionedNode; - if (block) { - parentElement = positionedNode.getPositionedChild(block); - elementsList = block.statements; - } - - return parentElement.getPositionedChild(elementsList); - }; - - BreakpointResolver.prototype.canHaveBreakpointInDeclaration = function (positionedNode) { - return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfDeclarationWithElements = function (positionedNode) { - if (!this.canHaveBreakpointInDeclaration(positionedNode)) { - return null; - } - - var node = positionedNode.node(); - var moduleSyntax = positionedNode.node(); - if ((node.isModuleElement() && positionedNode.containingNode().kind() != 120 /* SourceUnit */) || node.isClassElement() || (moduleSyntax.kind() == 130 /* ModuleDeclaration */ && moduleSyntax.name && moduleSyntax.name.kind() == 121 /* QualifiedName */)) { - return createBreakpointSpanInfo(positionedNode); - } else { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(positionedNode)); - } - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclarator = function (varDeclaratorNode) { - if (!varDeclaratorNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclaratorNode)) { - return false; - } - - var varDeclaratorSyntax = varDeclaratorNode.node(); - return !!varDeclaratorSyntax.equalsValueClause; - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclarator = function (varDeclaratorNode) { - if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return null; - } - - var container = varDeclaratorNode.containingNode(); - if (container && container.kind() == 224 /* VariableDeclaration */) { - var parentDeclaratorsList = varDeclaratorNode.parent(); - - if (parentDeclaratorsList && parentDeclaratorsList.list().childAt(0) == varDeclaratorNode.node()) { - return this.breakpointSpanOfVariableDeclaration(container); - } - - if (this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return createBreakpointSpanInfo(varDeclaratorNode); - } else { - return null; - } - } else if (container) { - return this.breakpointSpanOfMemberVariableDeclaration(container); - } - - return null; - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclaration = function (varDeclarationNode) { - if (!varDeclarationNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclarationNode)) { - return false; - } - - var varDeclarationSyntax = varDeclarationNode.node(); - var containerChildren = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - if (!containerChildren || containerChildren.childCount() == 0) { - return false; - } - - var child = containerChildren.childAt(0); - if (child && child.element().isNode()) { - return this.canHaveBreakpointInVariableDeclarator(containerChildren.childAt(0)); - } - - return false; - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclaration = function (varDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { - return null; - } - - var container = varDeclarationNode.containingNode(); - var varDeclarationSyntax = varDeclarationNode.node(); - var varDeclarators = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - var varDeclaratorsCount = varDeclarators.childCount(); - - if (container && container.kind() == 148 /* VariableStatement */) { - return this.breakpointSpanOfVariableStatement(container); - } - - if (this.canHaveBreakpointInVariableDeclaration(varDeclarationNode)) { - return createBreakpointSpanInfoWithLimChar(varDeclarationNode, varDeclarators.childEndAt(0)); - } else { - return null; - } - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableStatement = function (varStatementNode) { - if (!varStatementNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varStatementNode)) { - return false; - } - - var variableStatement = varStatementNode.node(); - return this.canHaveBreakpointInVariableDeclaration(varStatementNode.getPositionedChild(variableStatement.variableDeclaration)); - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableStatement = function (varStatementNode) { - if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { - return null; - } - - var variableStatement = varStatementNode.node(); - var variableDeclaration = varStatementNode.getPositionedChild(variableStatement.variableDeclaration); - var varDeclarationSyntax = variableDeclaration.node(); - var varDeclarators = variableDeclaration.getPositionedChild(varDeclarationSyntax.variableDeclarators); - return createBreakpointSpanInfoWithLimChar(varStatementNode, varDeclarators.childEndAt(0)); - }; - - BreakpointResolver.prototype.breakpointSpanOfParameter = function (parameterNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(parameterNode)) { - return null; - } - - var parameterSyntax = parameterNode.node(); - if (parameterSyntax.dotDotDotToken || parameterSyntax.equalsValueClause || parameterSyntax.modifiers.childCount() > 0) { - return createBreakpointSpanInfo(parameterNode); - } else { - return null; - } - }; - - BreakpointResolver.prototype.breakpointSpanOfMemberVariableDeclaration = function (memberVarDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { - return null; - } - - var memberVariableDeclaration = memberVarDeclarationNode.node(); - if (this.canHaveBreakpointInVariableDeclarator(memberVarDeclarationNode.getPositionedChild(memberVariableDeclaration.variableDeclarator))) { - return createBreakpointSpanInfo(memberVarDeclarationNode, memberVariableDeclaration.modifiers, memberVariableDeclaration.variableDeclarator); - } else { - return null; - } - }; - - BreakpointResolver.prototype.breakpointSpanOfImportDeclaration = function (importDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { - return null; - } - - var importSyntax = importDeclarationNode.node(); - return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumDeclaration = function (enumDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { - return null; - } - - return createBreakpointSpanInfo(enumDeclarationNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstEnumElement = function (enumDeclarationNode) { - var enumDeclarationSyntax = enumDeclarationNode.node(); - var enumElements = enumDeclarationNode.getPositionedChild(enumDeclarationSyntax.enumElements); - if (enumElements && enumElements.childCount()) { - return this.breakpointSpanOf(enumElements.childAt(0)); - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumElement = function (enumElementNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { - return null; - } - - return createBreakpointSpanInfo(enumElementNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfIfStatement = function (ifStatementNode) { - var ifStatement = ifStatementNode.node(); - return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfElseClause = function (elseClauseNode) { - var elseClause = elseClauseNode.node(); - return this.breakpointSpanOf(elseClauseNode.getPositionedChild(elseClause.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfForInStatement = function (forInStatementNode) { - var forInStatement = forInStatementNode.node(); - return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfForStatement = function (forStatementNode) { - var forStatement = forStatementNode.node(); - return this.breakpointSpanOf(forStatementNode.getPositionedChild(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWhileStatement = function (whileStatementNode) { - var whileStatement = whileStatementNode.node(); - return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfDoStatement = function (doStatementNode) { - var doStatement = doStatementNode.node(); - return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfSwitchStatement = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementOfFirstCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { - return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { - return null; - } - - var firstCaseClause = switchClauses.childAt(0); - var statements = null; - if (firstCaseClause && firstCaseClause.kind() == 233 /* CaseSwitchClause */) { - var caseClause = firstCaseClause.node(); - statements = caseClause.statements; - } else if (firstCaseClause && firstCaseClause.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = firstCaseClause.node(); - statements = defaultClause.statements; - } else { - return null; - } - - return this.breakpointSpanOfFirstChildOfSyntaxList(firstCaseClause.getPositionedChild(statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementOfLastCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { - return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { - return null; - } - - var lastClauseNode = switchClauses.childAt(switchClauses.childCount() - 1); - var statements = null; - if (lastClauseNode && lastClauseNode.kind() == 233 /* CaseSwitchClause */) { - var caseClause = lastClauseNode.node(); - statements = caseClause.statements; - } else if (lastClauseNode && lastClauseNode.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = lastClauseNode.node(); - statements = defaultClause.statements; - } else { - return null; - } - - return this.breakpointSpanOfLastChildOfSyntaxList(lastClauseNode.getPositionedChild(statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCaseSwitchClause = function (caseClauseNode) { - var caseSwitchClause = caseClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(caseClauseNode.getPositionedChild(caseSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfDefaultSwitchClause = function (defaultSwithClauseNode) { - var defaultSwitchClause = defaultSwithClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwithClauseNode.getPositionedChild(defaultSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWithStatement = function (withStatementNode) { - var withStatement = withStatementNode.node(); - return this.breakpointSpanOf(withStatementNode.getPositionedChild(withStatement.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfTryStatement = function (tryStatementNode) { - var tryStatement = tryStatementNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(tryStatementNode.getPositionedChild(tryStatement.block)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCatchClause = function (catchClauseNode) { - var catchClause = catchClauseNode.node(); - return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFinallyClause = function (finallyClauseNode) { - var finallyClause = finallyClauseNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(finallyClauseNode.getPositionedChild(finallyClause.block)); - }; - - BreakpointResolver.prototype.breakpointSpanOfParenthesizedArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfSimpleArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfContainingNode = function (positionedElement) { - return this.breakpointSpanOf(positionedElement.containingNode()); - }; - - BreakpointResolver.prototype.breakpointSpanIfStartsOnSameLine = function (positionedElement) { - if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(positionedElement.start())) { - return this.breakpointSpanOf(positionedElement); - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOf = function (positionedElement) { - if (!positionedElement) { - return null; - } - - for (var containingNode = positionedElement.containingNode(); containingNode != null; containingNode = containingNode.containingNode()) { - if (containingNode.kind() == 244 /* TypeAnnotation */) { - return this.breakpointSpanIfStartsOnSameLine(containingNode); - } - } - - var element = positionedElement.element(); - - if (element.isNode()) { - return this.breakpointSpanOfNode(positionedElement); - } - - if (element.isToken()) { - return this.breakpointSpanOfToken(positionedElement); - } - - return this.breakpointSpanOfContainingNode(positionedElement); - }; - return BreakpointResolver; - })(); - - function getBreakpointLocation(syntaxTree, askedPos) { - if (TypeScript.isDTSFile(syntaxTree.fileName())) { - return null; - } - - var sourceUnit = syntaxTree.sourceUnit(); - var positionedToken = sourceUnit.findToken(askedPos); - - var lineMap = syntaxTree.lineMap(); - var posLine = lineMap.getLineNumberFromPosition(askedPos); - var tokenStartLine = lineMap.getLineNumberFromPosition(positionedToken.start()); - if (posLine < tokenStartLine) { - return null; - } - - var breakpointResolver = new BreakpointResolver(posLine, lineMap); - return breakpointResolver.breakpointSpanOf(positionedToken); - } - Breakpoints.getBreakpointLocation = getBreakpointLocation; - })(Services.Breakpoints || (Services.Breakpoints = {})); - var Breakpoints = Services.Breakpoints; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var GetScriptLexicalStructureWalker = (function (_super) { - __extends(GetScriptLexicalStructureWalker, _super); - function GetScriptLexicalStructureWalker(fileName) { - _super.call(this); - this.fileName = fileName; - this.nameStack = []; - this.kindStack = []; - this.currentMemberVariableDeclaration = null; - this.currentVariableStatement = null; - this.currentInterfaceDeclaration = null; - this.parentScopes = []; - this.currentScope = this.createScope(); - } - GetScriptLexicalStructureWalker.prototype.createScope = function () { - return { - items: TypeScript.createIntrinsicsObject(), - childScopes: TypeScript.createIntrinsicsObject(), - childScopeNames: [], - itemNames: [] - }; - }; - - GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { - TypeScript.Debug.assert(containerName, "No scope name provided"); - - var key = kind + "+" + containerName; - this.nameStack.push(containerName); - this.kindStack.push(kind); - - var parentScope = this.currentScope; - this.parentScopes.push(parentScope); - - var scope = parentScope.childScopes[key]; - if (!scope) { - scope = this.createScope(); - parentScope.childScopes[key] = scope; - parentScope.childScopeNames.push(key); - } - - this.currentScope = scope; - return parentScope; - }; - - GetScriptLexicalStructureWalker.prototype.popScope = function () { - TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); - this.currentScope = this.parentScopes.pop(); - this.kindStack.pop(); - this.nameStack.pop(); - }; - - GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { - var _this = this; - if (typeof scope === "undefined") { scope = this.currentScope; } - scope.itemNames.forEach(function (item) { - items.push(scope.items[item]); - }); - - scope.childScopeNames.forEach(function (childScope) { - _this.collectItems(items, scope.childScopes[childScope]); - }); - }; - - GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { - var visitor = new GetScriptLexicalStructureWalker(fileName); - unit.accept(visitor); - visitor.collectItems(items); - }; - - GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { - var key = kind + "+" + name; - - if (this.currentScope.items[key] !== undefined) { - this.addAdditionalSpan(node, key); - return; - } - - var item = new Services.NavigateToItem(); - item.name = name; - item.kind = kind; - item.matchKind = Services.MatchKind.exact; - item.fileName = this.fileName; - item.kindModifiers = this.getKindModifiers(modifiers); - item.minChar = this.position() + node.leadingTriviaWidth(); - item.limChar = item.minChar + node.width(); - item.containerName = this.nameStack.join("."); - item.containerKind = this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack); - - this.currentScope.items[key] = item; - this.currentScope.itemNames.push(key); - }; - - GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { - var item = this.currentScope.items[key]; - TypeScript.Debug.assert(item !== undefined); - - var start = this.position() + node.leadingTriviaWidth(); - var span = new Services.SpanInfo(start, start + node.width()); - - if (item.additionalSpans) { - item.additionalSpans.push(span); - } else { - item.additionalSpans = [span]; - } - }; - - GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { - var result = []; - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { - var names = this.getModuleNames(node); - this.visitModuleDeclarationWorker(node, names, 0); - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { - if (nameIndex === names.length) { - _super.prototype.visitModuleDeclaration.call(this, node); - } else { - var modifiers = nameIndex === 0 ? node.modifiers : TypeScript.Syntax.list([TypeScript.Syntax.token(47 /* ExportKeyword */)]); - var name = names[nameIndex]; - if (name) { - var kind = Services.ScriptElementKind.moduleElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.visitModuleDeclarationWorker(node, names, nameIndex + 1); - - this.popScope(); - } - } - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { - var result = []; - - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } else { - this.getModuleNamesHelper(node.name, result); - } - - return result; - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { - if (name.kind() === 121 /* QualifiedName */) { - var qualifiedName = name; - this.getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } else { - result.push(name.text()); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.classElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitClassDeclaration.call(this, node); - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.interfaceElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.currentInterfaceDeclaration = node; - _super.prototype.visitInterfaceDeclaration.call(this, node); - this.currentInterfaceDeclaration = null; - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { - if (this.currentInterfaceDeclaration === null) { - this.skip(node); - } else { - _super.prototype.visitObjectType.call(this, node); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.enumElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitEnumDeclaration.call(this, node); - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructorImplementationElement, "constructor"); - - var parameters = node.callSignature.parameterList.parameters; - if (parameters) { - for (var i = 0, n = parameters.nonSeparatorCount(); i < n; i++) { - var parameter = parameters.nonSeparatorAt(i); - - TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); - - if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { - this.createItem(node, parameter.modifiers, Services.ScriptElementKind.memberVariableElement, parameter.identifier.text()); - } - } - } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.currentMemberVariableDeclaration = node; - _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.currentMemberVariableDeclaration = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableStatement = function (node) { - this.currentVariableStatement = node; - _super.prototype.visitVariableStatement.call(this, node); - this.currentVariableStatement = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { - var modifiers = this.currentMemberVariableDeclaration ? this.currentMemberVariableDeclaration.modifiers : TypeScript.Syntax.emptyList; - var kind = this.currentMemberVariableDeclaration ? Services.ScriptElementKind.memberVariableElement : Services.ScriptElementKind.variableElement; - this.createItem(node, modifiers, kind, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.indexSignatureElement, "[]"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.callSignatureElement, "()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructSignatureElement, "new()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { - if (node.identifier.width() > 0) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.functionElement, node.identifier.text()); - } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { - this.skip(node); - }; - return GetScriptLexicalStructureWalker; - })(TypeScript.PositionTrackingWalker); - Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - function copyDataObject(dst, src) { - for (var e in dst) { - if (typeof dst[e] == "object") { - copyDataObject(dst[e], src[e]); - } else if (typeof dst[e] != "function") { - dst[e] = src[e]; - } - } - return dst; - } - Services.copyDataObject = copyDataObject; - - var TypeScriptServicesFactory = (function () { - function TypeScriptServicesFactory() { - this._shims = []; - } - TypeScriptServicesFactory.prototype.createPullLanguageService = function (host) { - try { - return new TypeScript.Services.LanguageService(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { - try { - var hostAdapter = new Services.LanguageServiceShimHostAdapter(host); - var pullLanguageService = this.createPullLanguageService(hostAdapter); - return new Services.LanguageServiceShim(this, host, pullLanguageService); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifier = function (host) { - try { - return new TypeScript.Services.Classifier(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifierShim = function (host) { - try { - return new Services.ClassifierShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServices = function (host) { - try { - return new TypeScript.Services.CoreServices(host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { - try { - return new Services.CoreServicesShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.close = function () { - this._shims = []; - }; - - TypeScriptServicesFactory.prototype.registerShim = function (shim) { - this._shims.push(shim); - }; - - TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { - for (var i = 0, n = this._shims.length; i < n; i++) { - if (this._shims[i] === shim) { - delete this._shims[i]; - return; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - return TypeScriptServicesFactory; - })(); - Services.TypeScriptServicesFactory = TypeScriptServicesFactory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var BraceMatcher = (function () { - function BraceMatcher() { - } - BraceMatcher.getMatchSpans = function (syntaxTree, position) { - var result = []; - - var currentToken = syntaxTree.sourceUnit().findToken(position); - - BraceMatcher.getMatchingCloseBrace(currentToken, position, result); - BraceMatcher.getMatchingOpenBrace(currentToken, position, result); - - return result; - }; - - BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { - if (currentToken.start() === position) { - var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); - if (closingBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart(); - for (var i = 0, n = parentElement.childCount(); i < n; i++) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === closingBraceKind) { - var range1 = new TypeScript.TextSpan(position, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition + element.leadingTriviaWidth(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition += element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { - if (currentToken.fullStart() === position) { - currentToken = currentToken.previousToken(); - } - - if (currentToken !== null && currentToken.start() === (position - 1)) { - var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); - if (openBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart() + parentElement.fullWidth(); - for (var i = parentElement.childCount() - 1; i >= 0; i--) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === openBraceKind) { - var range1 = new TypeScript.TextSpan(position - 1, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition - element.trailingTriviaWidth() - element.width(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition -= element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 70 /* OpenBraceToken */: - return 71 /* CloseBraceToken */; - case 72 /* OpenParenToken */: - return 73 /* CloseParenToken */; - case 74 /* OpenBracketToken */: - return 75 /* CloseBracketToken */; - case 80 /* LessThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; - } - return null; - }; - - BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 71 /* CloseBraceToken */: - return 70 /* OpenBraceToken */; - case 73 /* CloseParenToken */: - return 72 /* OpenParenToken */; - case 75 /* CloseBracketToken */: - return 74 /* OpenBracketToken */; - case 81 /* GreaterThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; - } - return null; - }; - return BraceMatcher; - })(); - Services.BraceMatcher = BraceMatcher; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); - -; browserify_shim__define__module__export__(typeof TypeScript != "undefined" ? TypeScript : window.TypeScript); - -}).call(global, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; }); - -},{}],42:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// StringSet -// -//-------------------------------------------------------------------------- -/** -* Set that only accept string as value -*/ -var StringSet = (function () { - /** - * constructor - * @param array an array of string that will be added to the set - */ - function StringSet(array) { - this.map = Object.create(null); - if (array) { - for (var i = 0, l = array.length; i < l; i++) { - this.add(array[i]); - } - } - } - /** - * add a value to the set - * @param value - */ - StringSet.prototype.add = function (value) { - this.map[value] = true; - }; - - /** - * remove a value from the set - * @param value - */ - StringSet.prototype.remove = function (value) { - delete this.map[value]; - }; - - /** - * return true if the set contains the given value - * @param value - */ - StringSet.prototype.has = function (value) { - return !!this.map[value]; - }; - - Object.defineProperty(StringSet.prototype, "values", { - /** - * return an array containing the values of the set - */ - get: function () { - return Object.keys(this.map); - }, - enumerable: true, - configurable: true - }); - return StringSet; -})(); -exports.StringSet = StringSet; - -; - -/** -* Map that only accept string as key -*/ -var StringMap = (function () { - /** - * constructor - * @param obj initial values to set in the map each properties - * of the object will be treaded as a pair key/value - */ - function StringMap(obj) { - var _this = this; - this.map = Object.create(null); - this.mascot = {}; - if (obj) { - Object.keys(obj).forEach(function (key) { - return _this.map[key] = obj[key]; - }); - } - } - /** - * set a value in the map - * @param key the key - * @param value the value - */ - StringMap.prototype.set = function (key, value) { - this.map[key] = (typeof value === 'undefined' ? this.mascot : value); - }; - - /** - * retrive a value associated to the given key - * @param key the key to retrieve the value associated with - */ - StringMap.prototype.get = function (key) { - var value = this.map[key]; - return value === this.mascot ? undefined : value; - }; - - /** - * delete an entry corresponding to the given key - * @param key - */ - StringMap.prototype.delete = function (key) { - return delete this.map[key]; - }; - - /** - * return true if the map contains the given key - * @param key - */ - StringMap.prototype.has = function (key) { - return typeof this.map[key] !== 'undefined'; - }; - - /** - * clear the map - */ - StringMap.prototype.clear = function () { - this.map = Object.create(null); - }; - - Object.defineProperty(StringMap.prototype, "keys", { - /** - * return an array containing the keys of the map - */ - get: function () { - return Object.keys(this.map); - }, - enumerable: true, - configurable: true - }); - - Object.defineProperty(StringMap.prototype, "values", { - /** - * return an array containing the values of the map - */ - get: function () { - var _this = this; - return Object.keys(this.map).map(function (key) { - return _this.map[key]; - }); - }, - enumerable: true, - configurable: true - }); - - Object.defineProperty(StringMap.prototype, "entries", { - /** - * return an array containing the entries of the map - */ - get: function () { - var _this = this; - return Object.keys(this.map).map(function (key) { - return { - key: key, - value: _this.map[key] - }; - }); - }, - enumerable: true, - configurable: true - }); - - /** - * return an object representation - */ - StringMap.prototype.toObject = function () { - var _this = this; - return Object.keys(this.map).reduce(function (obj, key) { - obj[key] = _this.map[key]; - return obj; - }, {}); - }; - - /** - * return a clone of the map - */ - StringMap.prototype.clone = function () { - return new StringMap(this.toObject()); - }; - return StringMap; -})(); -exports.StringMap = StringMap; - -},{}],43:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/** -* An Enum representing the different kind of hint -*/ -(function (CompletionKind) { - /** - * the completion entry correspond to a class name - */ - CompletionKind[CompletionKind["CLASS"] = 0] = "CLASS"; - - /** - * the completion entry correspond to an interface name - */ - CompletionKind[CompletionKind["INTERFACE"] = 1] = "INTERFACE"; - - /** - * the completion entry correspond to an enum name - */ - CompletionKind[CompletionKind["ENUM"] = 2] = "ENUM"; - - /** - * the completion entry correspond to a module name - */ - CompletionKind[CompletionKind["MODULE"] = 3] = "MODULE"; - - /** - * the completion entry correspond to a variable name - */ - CompletionKind[CompletionKind["VARIABLE"] = 4] = "VARIABLE"; - - /** - * the completion entry correspond to a mehtod name - */ - CompletionKind[CompletionKind["METHOD"] = 5] = "METHOD"; - - /** - * the completion entry correspond to a function - */ - CompletionKind[CompletionKind["FUNCTION"] = 6] = "FUNCTION"; - - /** - * the completion entry correspond to a keyword - */ - CompletionKind[CompletionKind["KEYWORD"] = 7] = "KEYWORD"; - - /** - * Any other type - */ - CompletionKind[CompletionKind["DEFAULT"] = 8] = "DEFAULT"; -})(exports.CompletionKind || (exports.CompletionKind = {})); -var CompletionKind = exports.CompletionKind; - - - - -},{}],44:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//-------------------------------------------------------------------------- -// -// Change record -// -//-------------------------------------------------------------------------- -/** -* enum representing the kind change possible in the fileSysem -*/ -(function (FileChangeKind) { - /** - * a file has been added - */ - FileChangeKind[FileChangeKind["ADD"] = 0] = "ADD"; - - /** - * a file has been updated - */ - FileChangeKind[FileChangeKind["UPDATE"] = 1] = "UPDATE"; - - /** - * a file has been deleted - */ - FileChangeKind[FileChangeKind["DELETE"] = 2] = "DELETE"; - - /** - * the project files has been reset - */ - FileChangeKind[FileChangeKind["RESET"] = 3] = "RESET"; -})(exports.FileChangeKind || (exports.FileChangeKind = {})); -var FileChangeKind = exports.FileChangeKind; - - -},{}],45:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// Immediate -// -//-------------------------------------------------------------------------- -/** -* a setImmediate shim -*/ -var immediateImpl; - -if (typeof window.setImmediate !== 'undefined') { - immediateImpl = window; -} else { - var setImmediateQueue = [], canceledImmediate = {}, sentinel = 'immediate' + String(Math.random()), uidHelper = 0; - - window.addEventListener('message', function (event) { - if (event.data === sentinel) { - var queue = setImmediateQueue, canceled = canceledImmediate; - - setImmediateQueue = []; - canceledImmediate = {}; - queue.forEach(function (task) { - if (!canceled[task.handle]) { - task.callBack.apply(null, task.parameters); - } - }); - } - }); - - immediateImpl = { - setImmediate: function (expression) { - var args = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - args[_i] = arguments[_i + 1]; - } - uidHelper++; - setImmediateQueue.push({ - handle: uidHelper, - callBack: typeof expression === 'string' ? new Function(expression) : expression, - parameters: args - }); - window.postMessage(sentinel, '*'); - return uidHelper; - }, - clearImmediate: function (handle) { - canceledImmediate[handle] = true; - } - }; - - Object.freeze(immediateImpl); -} - -module.exports = immediateImpl; - -},{}],46:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// Logger -// -//-------------------------------------------------------------------------- -/** -* hold the configured log level -*/ -var currentLogLevel = 1 /* error */; - -/** -* return true if the logging level is superior or equal to information -*/ -function information() { - return currentLogLevel >= 4 /* information */; -} -exports.information = information; - -/** -* return true if the logging level is superior or equal to debug -*/ -function debug() { - return currentLogLevel >= 3 /* debug */; -} -exports.debug = debug; - -/** -* return true if the logging level is superior or equal to warning -*/ -function warning() { - return currentLogLevel >= 2 /* warning */; -} -exports.warning = warning; - -/** -* return true if the logging level is superior or equal to error -*/ -function error() { - return currentLogLevel >= 1 /* error */; -} -exports.error = error; - -/** -* return true if the logging level is superior or equal to fatal -*/ -function fatal() { - return currentLogLevel >= 0 /* fatal */; -} -exports.fatal = fatal; - -/** -* log the given string -*/ -function log(s) { - console.log(s); -} -exports.log = log; - -/** -* Logging level -*/ -(function (Level) { - Level[Level["fatal"] = 0] = "fatal"; - Level[Level["error"] = 1] = "error"; - Level[Level["warning"] = 2] = "warning"; - Level[Level["debug"] = 3] = "debug"; - Level[Level["information"] = 4] = "information"; -})(exports.Level || (exports.Level = {})); -var Level = exports.Level; - -/** -* set the current log level, accepted level are : -* 'information', -* 'debug', -* 'warning', -* 'error', -* 'fatal' -*/ -function setLogLevel(level) { - currentLogLevel = Level[level]; -} -exports.setLogLevel = setLogLevel; - -/** -* base class reusing the logger for typescript -*/ -var LogingClass = (function () { - function LogingClass() { - this.information = exports.information; - this.debug = exports.debug; - this.warning = exports.warning; - this.error = exports.error; - this.fatal = exports.fatal; - this.log = exports.log; - } - return LogingClass; -})(); -exports.LogingClass = LogingClass; - -},{}],47:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; - -var Signal = (function () { - function Signal() { - /** - * list of listeners that have been suscribed to this signal - */ - this.listeners = []; - /** - * Priorities corresponding to the listeners - */ - this.priorities = []; - } - /** - * Subscribes a listener for the signal. - * - * @params listener the callback to call when events are dispatched - * @params priority an optional priority for this signal - */ - Signal.prototype.add = function (listener, priority) { - if (typeof priority === "undefined") { priority = 0; } - var index = this.listeners.indexOf(listener); - if (index !== -1) { - this.priorities[index] = priority; - return; - } - for (var i = 0, l = this.priorities.length; i < l; i++) { - if (this.priorities[i] < priority) { - this.priorities.splice(i, 0, priority); - this.listeners.splice(i, 0, listener); - return; - } - } - this.priorities.push(priority); - this.listeners.push(listener); - }; - - /** - * unsubscribe a listener for the signal - * - * @params listener the previously subscribed listener - */ - Signal.prototype.remove = function (listener) { - var index = this.listeners.indexOf(listener); - if (index >= 0) { - this.priorities.splice(index, 1); - this.listeners.splice(index, 1); - } - }; - - /** - * dispatch an event - * - * @params parameter the parameter attached to the event dispatching - */ - Signal.prototype.dispatch = function (parameter) { - var hasBeenCanceled = this.listeners.every(function (listener) { - var result = listener(parameter); - return result !== false; - }); - - return hasBeenCanceled; - }; - - /** - * Remove all listener from the signal - */ - Signal.prototype.clear = function () { - this.listeners = []; - this.priorities = []; - }; - - /** - * @return true if the listener has been subsribed to this signal - */ - Signal.prototype.hasListeners = function () { - return this.listeners.length > 0; - }; - return Signal; -})(); -exports.Signal = Signal; - -},{}],48:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -/** -* helper function that valid a config file -* @param config the config object to validate -*/ -function validateTypeScriptProjectConfig(config) { - if (!config) { - return false; - } - if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { - return false; - } - if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { - return false; - } - if (config.sourceRoot && typeof config.sourceRoot !== 'string') { - return false; - } - if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { - return typeof pattern === 'string'; - })) { - return false; - } - - return true; -} -exports.validateTypeScriptProjectConfig = validateTypeScriptProjectConfig; - -/** -* Default configuration for typescript project -*/ -exports.typeScriptProjectConfigDefault = { - noLib: false, - target: 'es3', - module: 'none', - noImplicitAny: false -}; - -},{}],49:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var path = _dereq_('path'); - -/** -* assign all properties of a list of object to an object -* @param target the object that will receive properties -* @param items items which properties will be assigned to a target -*/ -function assign(target) { - var items = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - items[_i] = arguments[_i + 1]; - } - return items.reduce(function (target, source) { - return Object.keys(source).reduce(function (target, key) { - target[key] = source[key]; - return target; - }, target); - }, target); -} -exports.assign = assign; - -/** -* clone an object (shallow) -* @param target the object to clone -*/ -function clone(target) { - return exports.assign(Array.isArray(target) ? [] : {}, target); -} -exports.clone = clone; - -/** -* clone an object (deep) -* -* @param target the object to clone -*/ -function deepClone(target) { - return Object.keys(target).reduce(function (result, key) { - var value = target[key]; - if (typeof value === 'object') { - value = exports.deepClone(value); - } - result[key] = value; - return result; - }, Array.isArray(target) ? [] : {}); -} -exports.deepClone = deepClone; - -/** -* retrieve all enumerable properties of an object in the prototype chain -* -* @param target the object to which we will retrieve properties -*/ -function getEnumerablePropertyNames(target) { - var result = []; - for (var key in target) { - result.push(key); - } - return result; -} -exports.getEnumerablePropertyNames = getEnumerablePropertyNames; - -/** -* merge multiple array in one -* -* @param array an array of array to be flattened -*/ -function mergeAll(array) { - var results = []; - array.forEach(function (subArray) { - Array.prototype.push.apply(results, subArray); - }); - - return results; -} -exports.mergeAll = mergeAll; -; - -/** -* browserify path.resolve is buggy on windows -*/ -function pathResolve(from, to) { - var result = path.resolve(from, to); - var index = result.indexOf(from[0]); - return result.slice(index); -} -exports.pathResolve = pathResolve; - -},{"path":39}],50:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// WorkerBridge -// -//-------------------------------------------------------------------------- -var utils = _dereq_('./utils'); -var collections = _dereq_('./collections'); -var signal = _dereq_('./signal'); -var Promise = _dereq_('bluebird'); - -/** -* list of operations that can be requested -*/ -var Operation; -(function (Operation) { - Operation[Operation["REQUEST"] = 0] = "REQUEST"; - Operation[Operation["RESPONSE"] = 1] = "RESPONSE"; - Operation[Operation["ERROR"] = 2] = "ERROR"; - Operation[Operation["EXPOSE"] = 3] = "EXPOSE"; - Operation[Operation["SIGNAL"] = 4] = "SIGNAL"; -})(Operation || (Operation = {})); - -/** -* type of function exposed -*/ -var Type; -(function (Type) { - Type[Type["FUNCTION"] = 0] = "FUNCTION"; - Type[Type["SIGNAL"] = 1] = "SIGNAL"; -})(Type || (Type = {})); - -/** -* create a descriptor for a map of exposed services -* -* @param services -* @param observables -* @param baseKeys -*/ -function createProxyDescriptor(services, signals, baseKeys) { - if (typeof baseKeys === "undefined") { baseKeys = []; } - if (baseKeys.length > 5) { - return {}; - } - return utils.getEnumerablePropertyNames(services).reduce(function (descriptor, key) { - var value = services[key], keys = baseKeys.concat(key); - if (typeof value === 'function') { - descriptor[key] = 0 /* FUNCTION */; - } else if (typeof value === 'object') { - if (value instanceof signal.Signal) { - descriptor[key] = 1 /* SIGNAL */; - signals[keys.join('.')] = value; - } else if (!Array.isArray(value)) { - descriptor[key] = createProxyDescriptor(value, signals, keys); - } - } - return descriptor; - }, {}); -} - -var uidHelper = 0; - -/** -* create a query factory for a proxied service method -*/ -function newQuery(chain, sendMessage, resolverMap) { - return function () { - var args = []; - for (var _i = 0; _i < (arguments.length - 0); _i++) { - args[_i] = arguments[_i + 0]; - } - var uid = 'operation' + (uidHelper++); - sendMessage({ - operation: 0 /* REQUEST */, - chain: chain, - args: args, - uid: uid - }); - return new Promise(function (resolve, reject) { - resolverMap.set(uid, { - resolve: resolve, - reject: reject - }); - }); - }; -} - -/** -* create proxy from proxy descriptor -*/ -function createProxy(descriptor, sendMessage, resolverMap, baseKeys) { - if (typeof baseKeys === "undefined") { baseKeys = []; } - return Object.keys(descriptor).reduce(function (proxy, key) { - var value = descriptor[key], keys = baseKeys.concat(key); - if (value === 0 /* FUNCTION */) { - proxy[key] = newQuery(keys, sendMessage, resolverMap); - } else if (value === 1 /* SIGNAL */) { - proxy[key] = new signal.Signal(); - } else if (typeof value === 'object') { - proxy[key] = createProxy(descriptor[key], sendMessage, resolverMap, keys); - } - return proxy; - }, {}); -} - -/** -* a simple bridge that will expose services from the 2 sides of a web worker -*/ -var WorkerBridge = (function () { - function WorkerBridge(/** - * target - */ - target) { - var _this = this; - this.target = target; - /** - * stack of deferred bound to a requres - */ - this.resolverMap = new collections.StringMap(); - /** - * message handler - */ - this.messageHandler = function (message) { - var data = message.data; - switch (data.operation) { - case 3 /* EXPOSE */: - _this.proxy = createProxy(data.descriptor, function (args) { - return _this.target.postMessage(args); - }, _this.resolverMap); - - _this.initResolver.resolve(_this.proxy); - break; - - case 0 /* REQUEST */: - new Promise(function (resolve) { - var chain = data.chain.slice(), thisObject = null, method = _this.services; - while (chain.length) { - thisObject = method; - method = method[chain.shift()]; - } - resolve(method.apply(thisObject, data.args)); - }).then(function (result) { - _this.target.postMessage({ - operation: 1 /* RESPONSE */, - chain: data.chain, - result: result, - uid: data.uid - }); - }, function (error) { - _this.target.postMessage({ - operation: 2 /* ERROR */, - chain: data.chain, - errorMessage: error instanceof Error ? error.message : error, - uid: data.uid - }); - }); - - break; - - case 1 /* RESPONSE */: - var responseDeferred = _this.resolverMap.get(data.uid); - responseDeferred.resolve(data.result); - _this.resolverMap.delete(data.uid); - break; - - case 2 /* ERROR */: - var errorDeferred = _this.resolverMap.get(data.uid); - errorDeferred.reject(new Error(data.errorMessage)); - _this.resolverMap.delete(data.uid); - break; - - default: - var chain = data.chain.slice(), signal = _this.proxy; - while (chain.length) { - signal = signal[chain.shift()]; - } - signal.dispatch(data.value); - } - }; - } - /** - * initialize te bridge, return a promise that resolve to the created proxy - * @param services the exposed services - */ - WorkerBridge.prototype.init = function (services) { - var _this = this; - this.services = services; - return new Promise(function (resolve, reject) { - var target = _this.target; - target.onmessage = _this.messageHandler; - - var signals = {}; - target.postMessage({ - operation: 3 /* EXPOSE */, - descriptor: createProxyDescriptor(services, signals) - }); - - _this.signals = Object.keys(signals).map(function (key) { - var signal = signals[key]; - var handler = function (value) { - target.postMessage({ - operation: 4 /* SIGNAL */, - chain: key.split('.'), - value: value - }); - }; - signal.add(handler); - return { - signal: signal, - handler: handler - }; - }); - - _this.initResolver = { resolve: resolve, reject: reject }; - }); - }; - - /** - * dispose the bridge - */ - WorkerBridge.prototype.dispose = function () { - this.signals.forEach(function (signalDesc) { - return signalDesc.signal.remove(signalDesc.handler); - }); - this.target.onmessage = null; - }; - return WorkerBridge; -})(); - -module.exports = WorkerBridge; - -},{"./collections":42,"./signal":47,"./utils":49,"bluebird":3}],51:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; - - -/** -* enum listing the change kind that occur in a working set -*/ -(function (WorkingSetChangeKind) { - WorkingSetChangeKind[WorkingSetChangeKind["ADD"] = 0] = "ADD"; - WorkingSetChangeKind[WorkingSetChangeKind["REMOVE"] = 1] = "REMOVE"; -})(exports.WorkingSetChangeKind || (exports.WorkingSetChangeKind = {})); -var WorkingSetChangeKind = exports.WorkingSetChangeKind; - - - -},{}],52:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -var ServiceConsumer = _dereq_('./serviceConsumer'); -var completion = _dereq_('../commons/completion'); -var CompletionKind = completion.CompletionKind; - -var HINT_TEMPLATE = [ - '', - ' ', - ' {{match}}{{suffix}}', - ' ', - '' -].join('\n'); - -/** -* basic implementation -*/ -var CodeHintProvider = (function (_super) { - __extends(CodeHintProvider, _super); - function CodeHintProvider() { - _super.apply(this, arguments); - } - /** - * return true if hints can be calculated for te current editor - * - * @param editor the editor - * @param implicitChar determine whether the hinting request is explicit or implicit, - * null if implicit, contains the last character inserted - */ - CodeHintProvider.prototype.hasHints = function (editor, implicitChar) { - //TODO we should find a better test here that limits more the implicit request - if (!implicitChar || /[\w.\($_]/.test(implicitChar)) { - this.editor = editor; - return true; - } - return false; - }; - - CodeHintProvider.prototype.getHints = function (implicitChar) { - var currentFileName = this.editor.document.file.fullPath, position = this.editor.getCursorPos(), deferred = $.Deferred(); - if (!this.hasHints(this.editor, implicitChar)) { - deferred.resolve({ - hints: [], - selectInitial: false - }); - } else { - this.getService().then(function (service) { - service.getCompletionAtPosition(currentFileName, position).then(function (result) { - deferred.resolve({ - hints: result.entries.map(function (entry) { - var text = entry.name, match, suffix, classType = ''; - - switch (entry.kind) { - case 7 /* KEYWORD */: - switch (entry.name) { - case 'static': - case 'public': - case 'private': - case 'export': - case 'get': - case 'set': - classType = 'cm-qualifier'; - break; - case 'class': - case 'function': - case 'module': - case 'var': - classType = 'cm-def'; - break; - default: - classType = 'cm-keyword'; - break; - } - break; - case 5 /* METHOD */: - case 6 /* FUNCTION */: - text += entry.type ? entry.type : ''; - break; - default: - text += entry.type ? ' - ' + entry.type : ''; - break; - } - - // highlight the matched portion of each hint - if (result.match) { - match = text.slice(0, result.match.length); - suffix = text.slice(result.match.length); - } else { - match = ''; - suffix = text; - } - - var jqueryObj = $(Mustache.render(HINT_TEMPLATE, { - match: match, - suffix: suffix, - classType: classType - })); - jqueryObj.data('entry', entry); - jqueryObj.data('match', result.match); - return jqueryObj; - }), - selectInitial: !!implicitChar - }); - }).catch(function (error) { - return deferred.reject(error); - }); - }); - } - return deferred; - }; - - CodeHintProvider.prototype.insertHint = function ($hintObj) { - var entry = $hintObj.data('entry'), match = $hintObj.data('match'), position = this.editor.getCursorPos(), startPos = !match ? position : { - line: position.line, - ch: position.ch - match.length - }; - - this.editor.document.replaceRange(entry.name, startPos, position); - }; - return CodeHintProvider; -})(ServiceConsumer); - -module.exports = CodeHintProvider; - -},{"../commons/completion":43,"./serviceConsumer":63}],53:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -//-------------------------------------------------------------------------- -// -// TypeScriptProject -// -//-------------------------------------------------------------------------- -var BRACKETS_CONFIG_FILE_NAME = '.brackets.json'; - -function isBracketsPreferenceFile(path) { - return path && path.substr(path.lastIndexOf('/') + 1, path.length) === BRACKETS_CONFIG_FILE_NAME; -} - -/** -* brackets Error message type -*/ -var Type = { - /** Unambiguous error, such as a syntax error */ - ERROR: 'problem_type_error', - /** Maintainability issue, probable error / bad smell, etc. */ - WARNING: 'problem_type_warning', - /** Inspector unable to continue, code too complex for static analysis, etc. Not counted in error/warning tally. */ - META: 'problem_type_meta' -}; - -/** -* TypeScript Inspection Provider -*/ -var TypeScriptConfigErrorReporter = (function () { - function TypeScriptConfigErrorReporter() { - /** - * name of the error reporter - */ - this.name = 'TypeScript Configuration'; - } - /** - * scan file - */ - TypeScriptConfigErrorReporter.prototype.scanFile = function (content, path) { - if (!isBracketsPreferenceFile(path)) { - return null; - } - var data; - try { - data = JSON.parse(content); - } catch (e) { - return { - errors: [], - aborted: true - }; - } - - var typescript = data.typescript; - if (!data.typescript) { - return { - errors: [], - aborted: false - }; - } - - var errors = []; - if (typescript.projects && typescript.sources) { - errors.push('You cannot have sources and projects at the same level'); - } - - validateSection(null, typescript, !typescript.projects, errors); - - if (typescript.projects) { - if (typeof typescript.projects !== 'object') { - errors.push('invalid section projects, it must be an object'); - } - Object.keys(typescript.projects).forEach(function (key) { - validateSection(key + ': ', typescript.projects[key], true, errors); - }); - } - - return { - errors: errors.map(function (message) { - return ({ - message: message, - type: Type.ERROR, - pos: { line: -1, ch: -1 } - }); - }), - aborted: false - }; - }; - return TypeScriptConfigErrorReporter; -})(); - -function validateSection(sectionName, config, mustHaveSources, errors) { - var prefix = sectionName ? sectionName + ': ' : ''; - if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { - errors.push(prefix + 'the target section has invalid value authorized values are \'es3\' or \'es5\''); - } - if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { - errors.push(prefix + 'the module section has invalid value authorized values are \'none\', \'amd\' or \'commonjs\''); - } - if (config.sourceRoot && typeof config.sourceRoot !== 'string') { - errors.push(prefix + 'the sourceRoot section must be a string'); - } - if (mustHaveSources) { - if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { - return typeof pattern === 'string'; - })) { - errors.push(prefix + 'invalid sources section it must be an array of string'); - } - } -} - -module.exports = TypeScriptConfigErrorReporter; - -},{}],54:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -var ServiceConsumer = _dereq_('./serviceConsumer'); -var immediate = _dereq_('../commons/immediate'); - -//-------------------------------------------------------------------------- -// -// TypeScriptProject -// -//-------------------------------------------------------------------------- -/** -* TypeScript Inspection Provider -*/ -var TypeScriptErrorReporter = (function (_super) { - __extends(TypeScriptErrorReporter, _super); - function TypeScriptErrorReporter() { - _super.apply(this, arguments); - /** - * name of the error reporter - */ - this.name = 'TypeScript'; - } - /** - * scan file - */ - TypeScriptErrorReporter.prototype.scanFileAsync = function (content, path) { - var _this = this; - return $.Deferred(function (deferred) { - immediate.setImmediate(function () { - _this.getService().then(function (service) { - service.getErrorsForFile(path).then(function (result) { - deferred.resolve(result); - }, function () { - deferred.resolve({ - errors: [], - aborted: false - }); - }); - }); - }); - }).promise(); - }; - return TypeScriptErrorReporter; -})(ServiceConsumer); - -module.exports = TypeScriptErrorReporter; - -},{"../commons/immediate":45,"./serviceConsumer":63}],55:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var collections = _dereq_('../commons/collections'); -var signal = _dereq_('../commons/signal'); -var Promise = _dereq_('bluebird'); -var fs = _dereq_('../commons/fileSystem'); - -/** -* IFileSystem implementations -*/ -var FileSystem = (function () { - //------------------------------- - // constructor - //------------------------------- - /** - * @param nativeFileSystem brackets FileSystem module - * @param projectManager brackets ProjectManager Module - */ - function FileSystem(nativeFileSystem, projectManager) { - var _this = this; - this.nativeFileSystem = nativeFileSystem; - this.projectManager = projectManager; - //------------------------------- - // Variables - //------------------------------- - /** - * map path to native files - */ - this.filesContent = new collections.StringMap(); - /** - * cache of the paths list - */ - this.filesPath = []; - /** - * boolean containing the initialization state of the wrapper - */ - this.initialized = false; - /** - * a stack containing all the call that have been performed before initiliazation - */ - this.initializationStack = []; - this._projectFilesChanged = new signal.Signal(); - //------------------------------- - // Events handler - //------------------------------- - /** - * handle project workspaces changes - */ - this.changesHandler = function (event, file) { - if (!file) { - // a refresh event - var oldPathsSet = new collections.StringSet(), oldFilesContent = _this.filesContent.clone(), oldPaths = _this.filesPath.map(function (path) { - oldPathsSet.add(path); - return path; - }); - - _this.initialized = false; - _this.filesContent.clear(); - _this.filesPath.length = 0; - - _this.projectManager.getAllFiles().then(function (files) { - var fileAdded = [], fileDeleted = [], fileUpdated = [], newPathsSet = new collections.StringSet(), promises = []; - - _this.filesPath = (files || []).map(function (file) { - if (!oldPathsSet.has(file.fullPath)) { - fileAdded.push(file.fullPath); - } - if (oldFilesContent.has(file.fullPath)) { - promises.push(new Promise(function (resolve, reject) { - file.read({}, function (err, content) { - if (!err) { - _this.filesContent.set(file.fullPath, content); - } - if (err || content !== oldFilesContent.get(file.fullPath)) { - fileUpdated.push(file.fullPath); - } - resolve(true); - }); - })); - } - newPathsSet.add(file.fullPath); - return file.fullPath; - }); - - oldPaths.forEach(function (path) { - if (!newPathsSet.has(path)) { - fileDeleted.push(path); - } - }); - - Promise.all(promises).then(function () { - var changes = []; - - fileDeleted.forEach(function (path) { - changes.push({ - kind: 2 /* DELETE */, - fileName: path - }); - }); - - fileAdded.forEach(function (path) { - changes.push({ - kind: 0 /* ADD */, - fileName: path - }); - }); - - fileUpdated.forEach(function (path) { - changes.push({ - kind: 1 /* UPDATE */, - fileName: path - }); - }); - - if (changes.length > 0) { - _this._projectFilesChanged.dispatch(changes); - } - _this.initialized = true; - _this.resolveInitializationStack(); - }); - }, function () { - _this.reset(); - }); - } else if (file.isFile) { - //file have been updated simply dispatch an update event and update the cache if necessary - var dispatchUpdate = function () { - _this._projectFilesChanged.dispatch([{ - kind: 1 /* UPDATE */, - fileName: file.fullPath - }]); - }; - - if (_this.filesContent.has(file.fullPath)) { - // if the file content has been cached update the cache - _this.filesContent.delete(file.fullPath); - _this.readFile(file.fullPath).then(function (content) { - _this.filesContent.set(file.fullPath, content); - }).catch().then(dispatchUpdate); - } else { - dispatchUpdate(); - } - } else if (file.isDirectory) { - // a directory content has been changed need to make diff between cache an directory - var directory = file; - - directory.getContents(function (err, files) { - if (err) { - // an err occured reset - _this.reset(); - } - var oldFiles = {}, newFiles = {}; - - //collect all the paths in the cache - _this.filesPath.forEach(function (path) { - var index = path.indexOf(directory.fullPath); - if (index !== -1) { - var index2 = path.indexOf('/', index + directory.fullPath.length); - if (index2 === -1) { - oldFiles[path] = [path]; - } else { - //in case of subdir regroup the files by subdir - var dirPath = path.substring(0, index2 + 1); - if (!oldFiles[dirPath]) { - oldFiles[dirPath] = [path]; - } else { - oldFiles[dirPath].push(path); - } - } - } - }); - - files.forEach(function (file) { - newFiles[file.fullPath] = file; - }); - - var changes = [], path; - for (path in oldFiles) { - if (!newFiles.hasOwnProperty(path) && oldFiles.hasOwnProperty(path)) { - //for each files that has been deleted add a DELETE record - oldFiles[path].forEach(function (path) { - var index = _this.filesPath.indexOf(path); - if (index !== -1) { - _this.filesPath.splice(index, 1); - _this.filesContent.delete(path); - changes.push({ - kind: 2 /* DELETE */, - fileName: path - }); - } - }); - } - } - - var promises = []; - for (path in newFiles) { - if (newFiles.hasOwnProperty(path) && !oldFiles.hasOwnProperty(path)) { - //if a file has been added just add a ADD record - if (newFiles[path].isFile) { - _this.filesPath.push(path); - changes.push({ - kind: 0 /* ADD */, - fileName: path - }); - } else { - var newDir = newFiles[path]; - - //if a dir has been added collect each files in this directory then for each one add an 'ADD' record - promises.push(_this.getDirectoryFiles(newDir).then(function (files) { - files.forEach(function (file) { - _this.filesPath.push(file.fullPath); - changes.push({ - kind: 0 /* ADD */, - fileName: file.fullPath - }); - }); - })); - } - } - } - ; - - Promise.all(promises).then(function () { - if (changes.length > 0) { - _this._projectFilesChanged.dispatch(changes); - } - }, function () { - //in case of error reset - _this.reset(); - }); - }); - } - }; - /** - * handle file renaming event - */ - this.renameHandler = function (event, oldPath, newPath) { - var isDirectory = oldPath[oldPath.length - 1] === '/'; - var changes; - if (isDirectory) { - changes = []; - _this.filesPath.concat().forEach(function (path) { - var index = path.indexOf(oldPath); - if (index === 0) { - changes = changes.concat(_this.fileRenamedHandler(path, path.replace(oldPath, newPath))); - } - }); - } else { - changes = _this.fileRenamedHandler(oldPath, newPath); - } - if (changes.length > 0) { - _this._projectFilesChanged.dispatch(changes); - } - }; - nativeFileSystem.on('change', this.changesHandler); - nativeFileSystem.on('rename', this.renameHandler); - this.init(); - } - //------------------------------- - // IFileSystem implementation - //------------------------------- - /** - * return a promise resolving to the project root folder path - */ - FileSystem.prototype.getProjectRoot = function () { - return Promise.cast(this.projectManager.getProjectRoot().fullPath); - }; - - Object.defineProperty(FileSystem.prototype, "projectFilesChanged", { - /** - * a signal dispatching fine grained change reflecting the change that happens in the working set - */ - get: function () { - return this._projectFilesChanged; - }, - enumerable: true, - configurable: true - }); - - /** - * return a promise that resolve with an array of string containing all the files of the projects - */ - FileSystem.prototype.getProjectFiles = function () { - var _this = this; - return new Promise(function (resolve) { - _this.addToInitializatioStack(function () { - return resolve(_this.filesPath); - }); - }); - }; - - /** - * read a file, return a promise with that resolve to the file content - * - * @param path the file to read - */ - FileSystem.prototype.readFile = function (path) { - var _this = this; - return new Promise(function (resolve, reject) { - _this.addToInitializatioStack(function () { - if (_this.filesContent.has(path)) { - resolve(_this.filesContent.get(path)); - } else { - var file = _this.nativeFileSystem.getFileForPath(path); - if (file.isDirectory) { - reject('not found'); - return; - } - file.read({}, function (err, content) { - if (err) { - reject(err); - } else { - content = content && _this.normalizeText(content); - _this.filesContent.set(path, content); - resolve(content); - } - }); - } - }); - }); - }; - - /** - * reset the wrapper and dispatch a refresh event - */ - FileSystem.prototype.reset = function () { - this.initialized = false; - this.filesContent.clear(); - this.filesPath.length = 0; - this.init(); - this._projectFilesChanged.dispatch([{ - kind: 3 /* RESET */, - fileName: null - }]); - }; - - /** - * clean the wrapper for disposal - */ - FileSystem.prototype.dispose = function () { - this.nativeFileSystem.off('change', this.changesHandler); - this.nativeFileSystem.off('rename', this.renameHandler); - this._projectFilesChanged.clear(); - }; - - //------------------------------- - // privates methods - //------------------------------- - /** - * initialize the wrapper - */ - FileSystem.prototype.init = function () { - var _this = this; - this.projectManager.getAllFiles().then(function (files) { - _this.filesPath = files ? files.map(function (file) { - return file.fullPath; - }) : []; - _this.initialized = true; - _this.resolveInitializationStack(); - }); - }; - - /** - * execute an operation if initialized, add to initialization stack if not - */ - FileSystem.prototype.addToInitializatioStack = function (callback) { - if (this.initialized) { - callback(); - } else { - this.initializationStack.push(callback); - } - }; - - FileSystem.prototype.resolveInitializationStack = function () { - this.initializationStack.forEach(function (callback) { - return callback(); - }); - this.initializationStack.length = 0; - }; - - /** - * retrieves all files contained in a directory (and in subdirectory) - */ - FileSystem.prototype.getDirectoryFiles = function (directory) { - return new Promise(function (resolve, reject) { - var files = []; - directory.visit(function (entry) { - if (entry.isFile) { - files.push(entry); - } - return true; - }, {}, function (err) { - resolve(files); - }); - }); - }; - - /** - * normalize text to be conform to codemirro - * @param text - */ - FileSystem.prototype.normalizeText = function (text) { - return text.replace(/\r\n/g, '\n'); - }; - - /** - * dispatch events when a file has been renamed - */ - FileSystem.prototype.fileRenamedHandler = function (oldPath, newPath) { - var index = this.filesPath.indexOf(oldPath); - if (index !== -1) { - this.filesPath.splice(index, 1); - this.filesPath.push(newPath); - if (this.filesContent.has(oldPath)) { - var content = this.filesContent.get(oldPath); - this.filesContent.delete(oldPath); - this.filesContent.set(newPath, content); - } - return [ - { - kind: 2 /* DELETE */, - fileName: oldPath - }, { - kind: 0 /* ADD */, - fileName: newPath - }]; - } - return []; - }; - return FileSystem; -})(); - -module.exports = FileSystem; - -},{"../commons/collections":42,"../commons/fileSystem":44,"../commons/signal":47,"bluebird":3}],56:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ServiceConsumer = _dereq_('./serviceConsumer'); - -var EditorManager = brackets.getModule('editor/EditorManager'), Editor = brackets.getModule('editor/Editor').Editor; - -var FormattingManager = (function (_super) { - __extends(FormattingManager, _super); - function FormattingManager() { - _super.apply(this, arguments); - var _this = this; - this.format = function () { - var editor = EditorManager.getCurrentFullEditor(); - if (!editor) { - return; - } - var useTabs = Editor.getUseTabChar(); - - var options = { - IndentSize: Editor.getSpaceUnits(), - TabSize: Editor.getTabSize(), - NewLineCharacter: '\n', - ConvertTabsToSpaces: !useTabs, - InsertSpaceAfterSemicolonInForStatements: true, - InsertSpaceAfterCommaDelimiter: true, - InsertSpaceBeforeAndAfterBinaryOperators: true, - InsertSpaceAfterKeywordsInControlFlowStatements: true, - InsertSpaceAfterFunctionKeywordForAnonymousFunctions: true, - InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, - PlaceOpenBraceOnNewLineForFunctions: false, - PlaceOpenBraceOnNewLineForControlBlocks: false - }; - var currentRange = editor.getSelection(true), startPos = currentRange ? currentRange.start : undefined, endPos = currentRange ? currentRange.end : undefined; - - if (startPos && endPos && startPos.line === endPos.line && startPos.ch === endPos.ch) { - startPos = endPos = undefined; - } - - _this.getService().then(function (service) { - service.getFormatingForFile(editor.document.file.fullPath, options, startPos, endPos).then(function (textEdits) { - if (EditorManager.getCurrentFullEditor() !== editor) { - return; - } - editor.document.setText(textEdits.reduce(function (text, edit) { - return text.substr(0, edit.minChar) + edit.text + text.substr(edit.limChar); - }, editor.document.getText())); - }); - }); - }; - } - FormattingManager.FORMAT_COMMAND_ID = 'fdecampred.brackets-typescript.format'; - - FormattingManager.FORMAT_LABEL = 'Format'; - return FormattingManager; -})(ServiceConsumer); - -module.exports = FormattingManager; - -},{"./serviceConsumer":63}],57:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var logger = _dereq_('../commons/logger'); -var FileSystem = _dereq_('./fileSystem'); -var WorkingSet = _dereq_('./workingSet'); -var TypeScriptPreferencesManager = _dereq_('./preferencesManager'); -var WorkerBridge = _dereq_('../commons/workerBridge'); -var TypeScriptErrorReporter = _dereq_('./errorReporter'); -var TypeScriptConfigErrorReporter = _dereq_('./configErrorReporter'); -var TypeScriptQuickEditProvider = _dereq_('./quickEdit'); -var TypeScriptQuickJumpProvider = _dereq_('./quickJump'); -var TypeScriptQuickFindDefitionProvider = _dereq_('./quickFindDefinition'); -var CodeHintProvider = _dereq_('./codeHintProvider'); -var FormattingManager = _dereq_('./formattingManager'); -var typeScriptModeFactory = _dereq_('./mode'); - -//-------------------------------------------------------------------------- -// -// Main entry point of the extension -// -//-------------------------------------------------------------------------- -// brackets dependency -var LanguageManager = brackets.getModule('language/LanguageManager'), BracketsFileSystem = brackets.getModule('filesystem/FileSystem'), DocumentManager = brackets.getModule('document/DocumentManager'), ProjectManager = brackets.getModule('project/ProjectManager'), CodeHintManager = brackets.getModule('editor/CodeHintManager'), CodeInspection = brackets.getModule('language/CodeInspection'), EditorManager = brackets.getModule('editor/EditorManager'), QuickOpen = brackets.getModule('search/QuickOpen'), PreferencesManager = brackets.getModule('preferences/PreferencesManager'), CommandManager = brackets.getModule('command/CommandManager'), CodeMirror = brackets.getModule('thirdparty/CodeMirror2/lib/codemirror'), Menus = brackets.getModule('command/Menus'); - -var tsErrorReporter, quickEditProvider, codeHintProvider, quickJumpProvider, quickFindDefinitionProvider, formattingManager; - -var fileSystem, workingSet, worker, preferencesManager, bridge; - -function init(config) { - logger.setLogLevel(config.logLevel); - CodeMirror.defineMode('typescript', typeScriptModeFactory); - - //Register the language extension - LanguageManager.defineLanguage('typescript', { - name: 'TypeScript', - mode: 'typescript', - fileExtensions: ['ts'], - blockComment: ['/*', '*/'], - lineComment: ['//'] - }); - - // Register code hint - codeHintProvider = new CodeHintProvider(); - CodeHintManager.registerHintProvider(codeHintProvider, ['typescript'], 0); - - // Register quickEdit - quickEditProvider = new TypeScriptQuickEditProvider(); - EditorManager.registerInlineEditProvider(quickEditProvider.typeScriptInlineEditorProvider); - - //Register quickJump - quickJumpProvider = new TypeScriptQuickJumpProvider(); - EditorManager.registerJumpToDefProvider(quickJumpProvider.handleJumpToDefinition); - - //Register error provider - tsErrorReporter = new TypeScriptErrorReporter(); - CodeInspection.register('typescript', tsErrorReporter); - CodeInspection.register('json', new TypeScriptConfigErrorReporter()); - - //Register quickFindDefinitionProvider - quickFindDefinitionProvider = new TypeScriptQuickFindDefitionProvider(); - QuickOpen.addQuickOpenPlugin(quickFindDefinitionProvider); - - //Register formatting command - formattingManager = new FormattingManager(); - CommandManager.register(FormattingManager.FORMAT_LABEL, FormattingManager.FORMAT_COMMAND_ID, formattingManager.format); - var contextMenu = Menus.getContextMenu(Menus.ContextMenuIds.EDITOR_MENU); - contextMenu.addMenuItem(FormattingManager.FORMAT_COMMAND_ID); - - initServices(config.workerLocation, config.typeScriptLocation, config.logLevel); - - $(ProjectManager).on('beforeProjectClose beforeAppClose', disposeServices); - $(ProjectManager).on('projectOpen', function () { - return initServices(config.workerLocation, config.typeScriptLocation, config.logLevel); - }); -} - -function disposeServices() { - bridge.dispose(); - worker.terminate(); - fileSystem.dispose(); - workingSet.dispose(); - preferencesManager.dispose(); - - formattingManager.reset(); - tsErrorReporter.reset(); - codeHintProvider.reset(); - quickEditProvider.reset(); - quickJumpProvider.reset(); - quickFindDefinitionProvider.reset(); -} - -function initServices(workerLocation, typeScriptLocation, logLevel) { - fileSystem = new FileSystem(BracketsFileSystem, ProjectManager); - workingSet = new WorkingSet(DocumentManager, EditorManager); - worker = new Worker(workerLocation); - bridge = new WorkerBridge(worker); - preferencesManager = new TypeScriptPreferencesManager(PreferencesManager); - - bridge.init({ - console: console, - workingSet: workingSet, - fileSystem: fileSystem, - preferencesManager: preferencesManager, - getTypeScriptLocation: function () { - return typeScriptLocation; - }, - getLogLevel: function () { - return logLevel; - } - }).then(function (proxy) { - tsErrorReporter.setService(proxy.errorService); - codeHintProvider.setService(proxy.completionService); - quickEditProvider.setService(proxy.definitionService); - quickJumpProvider.setService(proxy.definitionService); - quickFindDefinitionProvider.setService(proxy.lexicalStructureService); - formattingManager.setService(proxy.formattingService); - }); -} - -module.exports = init; - -},{"../commons/logger":46,"../commons/workerBridge":50,"./codeHintProvider":52,"./configErrorReporter":53,"./errorReporter":54,"./fileSystem":55,"./formattingManager":56,"./mode":58,"./preferencesManager":59,"./quickEdit":60,"./quickFindDefinition":61,"./quickJump":62,"./workingSet":64}],58:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var TypeScript = _dereq_('typescriptServices'); - -var FormattingOptions = (function () { - function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { - this.useTabs = useTabs; - this.spacesPerTab = spacesPerTab; - this.indentSpaces = indentSpaces; - this.newLineCharacter = newLineCharacter; - } - FormattingOptions.defaultOptions = new FormattingOptions(false, /*spacesPerTab:*/ 4, /*indentSpaces:*/ 4, '\r\n'); - return FormattingOptions; -})(); - -var logger = _dereq_('../commons/logger'); -var Services = TypeScript.Services; -var Formatting = TypeScript.Services.Formatting; - -var Token = (function () { - function Token() { - } - return Token; -})(); - -var LineDescriptor = (function () { - function LineDescriptor() { - this.eolState = 0 /* Start */; - this.text = ''; - } - LineDescriptor.prototype.clone = function () { - var clone = new LineDescriptor(); - clone.tokenMap = this.tokenMap; - clone.eolState = this.eolState; - clone.text = this.text; - return clone; - }; - return LineDescriptor; -})(); - -var TypeScriptMode = (function () { - function TypeScriptMode(options) { - this.lineComment = '//'; - this.blockCommentStart = '/*'; - this.blockCommentEnd = '*/'; - this.electricChars = ':{}[]()'; - this.options = options; - } - TypeScriptMode.prototype.startState = function () { - return new LineDescriptor(); - }; - - TypeScriptMode.prototype.copyState = function (lineDescriptor) { - return lineDescriptor.clone(); - }; - - TypeScriptMode.prototype.token = function (stream, lineDescriptor) { - if (stream.sol()) { - this.initializeLineDescriptor(lineDescriptor, stream.string); - } - - var token = lineDescriptor.tokenMap[stream.pos]; - if (token) { - var textBefore = stream.string.substr(0, stream.pos); - for (var i = 0; i < token.length; i++) { - stream.next(); - } - return getStyleForToken(token, textBefore); - } else { - stream.skipToEnd(); - } - - return null; - }; - - TypeScriptMode.prototype.indent = function (lineDescriptor, textAfter) { - if (lineDescriptor.eolState !== 0 /* Start */) { - //strange bug preven CodeMirror.Pass - return CodeMirror.Pass; - } - var text = lineDescriptor.text + '\n' + (textAfter || 'fakeIdent'), position = textAfter ? text.length : text.length - 9, syntaxTree = this.getSyntaxTree(text), options = new FormattingOptions(!this.options.indentWithTabs, this.options.tabSize, this.options.indentUnit, '\n'), textSnapshot = new Formatting.TextSnapshot(TypeScript.SimpleText.fromString(text)), indent = Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); - - if (indent === null) { - //strange bug preven CodeMirror.Pass - return CodeMirror.Pass; - } - return indent; - }; - - TypeScriptMode.prototype.initializeLineDescriptor = function (lineDescriptor, text) { - var classificationResult = getClassificationsForLine(text, lineDescriptor.eolState), tokens = classificationResult.tokens; - - if (lineDescriptor.text) { - lineDescriptor.text += '\n'; - } - lineDescriptor.text += text; - lineDescriptor.eolState = classificationResult.eolState; - lineDescriptor.tokenMap = {}; - - for (var i = 0, l = tokens.length; i < l; i++) { - lineDescriptor.tokenMap[tokens[i].position] = tokens[i]; - } - }; - - TypeScriptMode.prototype.getSyntaxTree = function (text) { - return TypeScript.Parser.parse('script', TypeScript.SimpleText.fromString(text), false, new TypeScript.ParseOptions(TypeScript.LanguageVersion.EcmaScript5, true)); - }; - return TypeScriptMode; -})(); - -var classifier = new Services.TypeScriptServicesFactory().createClassifier(new logger.LogingClass()); - -function getClassificationsForLine(text, eolState) { - var classificationResult = classifier.getClassificationsForLine(text, eolState), currentPosition = 0, tokens = []; - - for (var i = 0, l = classificationResult.entries.length; i < l; i++) { - var entry = classificationResult.entries[i]; - var token = { - string: text.substr(currentPosition, entry.length), - length: entry.length, - classification: entry.classification, - position: currentPosition - }; - tokens.push(token); - currentPosition += entry.length; - } - - return { - tokens: tokens, - eolState: classificationResult.finalLexState - }; -} - -function getStyleForToken(token, textBefore) { - var TokenClass = Services.TokenClass; - switch (token.classification) { - case 6 /* NumberLiteral */: - return 'number'; - case 7 /* StringLiteral */: - return 'string'; - case 8 /* RegExpLiteral */: - return 'string-2'; - case 2 /* Operator */: - return 'operator'; - case 3 /* Comment */: - return 'comment'; - case 1 /* Keyword */: - switch (token.string) { - case 'string': - case 'number': - case 'void': - case 'bool': - case 'boolean': - return 'variable-2'; - case 'static': - case 'public': - case 'private': - case 'export': - case 'get': - case 'set': - return 'qualifier'; - case 'class': - case 'function': - case 'module': - case 'var': - return 'def'; - default: - return 'keyword'; - } - - case 5 /* Identifier */: - // Show types (indentifiers in PascalCase) as variable-2, other types (camelCase) as variable - if (token.string.charAt(0).toLowerCase() !== token.string.charAt(0)) { - return 'variable-2'; - } else { - return 'variable'; - } - case 0 /* Punctuation */: - return 'bracket'; - case 4 /* Whitespace */: - default: - return null; - } -} - -function typeScriptModeFactory(options, spec) { - return new TypeScriptMode(options); -} - -module.exports = typeScriptModeFactory; - -},{"../commons/logger":46,"typescriptServices":"rW6mcW"}],59:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var Promise = _dereq_('bluebird'); - -var tsUtils = _dereq_('../commons/typeScriptUtils'); -var utils = _dereq_('../commons/utils'); -var logger = _dereq_('../commons/logger'); -var collections = _dereq_('../commons/collections'); -var signal = _dereq_('../commons/signal'); - -/** -* Implementation of the ITypescriptPreferenceManager -*/ -var TypescriptPreferenceManager = (function () { - /** - * @prama prefManager brackets PreferenceManager module - */ - function TypescriptPreferenceManager(prefManager) { - var _this = this; - this.prefManager = prefManager; - this.configChanged = new signal.Signal(); - /** - * handle change in preferences - */ - this.preferenceChangedHandler = function (e, data) { - if (data && Array.isArray(data.ids) && data.ids.indexOf('typescript') !== -1) { - _this.projectConfigs = null; - _this.configChanged.dispatch(); - } - }; - this.prefManager.on('change', this.preferenceChangedHandler); - } - /** - * @return a Promise resolving to and map projectId <=> project config - * corresponding to the typescript section in project preference - */ - TypescriptPreferenceManager.prototype.getProjectsConfig = function () { - if (!this.projectConfigs) { - this.projectConfigs = this.retriveProjectsConfig(); - } - return Promise.cast(this.projectConfigs.toObject()); - }; - - /** - * A signal notifying when preferences might have changed - */ - TypescriptPreferenceManager.prototype.dispose = function () { - this.configChanged.clear(); - }; - - /** - * retrieve project configs from preferences - */ - TypescriptPreferenceManager.prototype.retriveProjectsConfig = function () { - var result = new collections.StringMap(); - - var data = this.prefManager.get('typescript', this.prefManager.CURRENT_PROJECT); - if (!data) { - return result; - } - - var configs; - - if (data.hasOwnProperty('projects')) { - var projects = data.projects; - delete data.projects; - if (typeof projects !== 'object') { - return result; - } - configs = Object.keys(projects).reduce(function (configs, id) { - var project = projects[id]; - if (typeof project === 'object') { - configs[id] = utils.assign({}, data, project); - } - return configs; - }, {}); - } else { - configs = { - default: data - }; - } - - Object.keys(configs).forEach(function (projectId) { - var config = utils.assign({}, tsUtils.typeScriptProjectConfigDefault, configs[projectId]); - if (!tsUtils.validateTypeScriptProjectConfig(config)) { - if (logger.warning()) { - logger.log('invalid config file for brackets-typescript config file'); - } - } else { - result.set(projectId, config); - } - }); - - return result; - }; - return TypescriptPreferenceManager; -})(); - -module.exports = TypescriptPreferenceManager; - -},{"../commons/collections":42,"../commons/logger":46,"../commons/signal":47,"../commons/typeScriptUtils":48,"../commons/utils":49,"bluebird":3}],60:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -var ServiceConsumer = _dereq_('./serviceConsumer'); - -var DocumentManager = brackets.getModule('document/DocumentManager'), MultiRangeInlineEditor = brackets.getModule('editor/MultiRangeInlineEditor').MultiRangeInlineEditor; - -var TypeScriptQuickEditProvider = (function (_super) { - __extends(TypeScriptQuickEditProvider, _super); - function TypeScriptQuickEditProvider() { - _super.apply(this, arguments); - var _this = this; - this.typeScriptInlineEditorProvider = function (hostEditor, pos) { - if (hostEditor.getModeForSelection() !== 'typescript') { - return null; - } - - var sel = hostEditor.getSelection(false); - if (sel.start.line !== sel.end.line) { - return null; - } - var deferred = $.Deferred(); - _this.getService().then(function (service) { - var fileName = hostEditor.document.file.fullPath; - service.getDefinitionForFile(fileName, pos).then(function (definitions) { - if (!definitions || definitions.length === 0) { - deferred.reject(); - } - - definitions.filter(function (definition) { - return definition.fileName !== fileName || definition.lineStart !== pos.line; - }); - if (definitions.length === 0) { - deferred.reject(); - } - - var promises = [], ranges = []; - - definitions.forEach(function (definition) { - promises.push(DocumentManager.getDocumentForPath(definition.fileName).then(function (doc) { - ranges.push({ - document: doc, - name: definition.name, - lineStart: definition.lineStart, - lineEnd: definition.lineEnd, - fileName: definition.fileName - }); - })); - }); - - return $.when.apply($, promises).then(function () { - var inlineEditor = new MultiRangeInlineEditor(ranges); - inlineEditor.load(hostEditor); - deferred.resolve(inlineEditor); - }); - }).catch(function (e) { - deferred.reject(); - }); - }); - return deferred.promise(); - }; - } - return TypeScriptQuickEditProvider; -})(ServiceConsumer); - -module.exports = TypeScriptQuickEditProvider; - -},{"./serviceConsumer":63}],61:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -var ServiceConsumer = _dereq_('./serviceConsumer'); - -var EditorManager = brackets.getModule('editor/EditorManager'), QuickOpen = brackets.getModule('search/QuickOpen'); - -var Session = (function () { - function Session(items) { - this.items = items; - } - return Session; -})(); - -var TypeScriptQuickFindDefitionProvider = (function (_super) { - __extends(TypeScriptQuickFindDefitionProvider, _super); - function TypeScriptQuickFindDefitionProvider() { - _super.apply(this, arguments); - var _this = this; - this.name = 'TypeScriptQuickFindDefitionProvider'; - this.languageIds = ['typescript']; - this.label = 'TypeScript'; - this.search = function (request, stringMatcher) { - request = request.slice(request.indexOf('@') + 1, request.length); - return _this.getSession().then(function (session) { - return session.items.filter(function (item) { - return !!stringMatcher.match(item.name, request); - }); - }); - }; - this.done = function () { - _this.session = null; - }; - this.itemSelect = function (item) { - _this.itemFocus(item); - }; - this.itemFocus = function (item) { - _this.setCurrentPosition(item.position); - }; - } - TypeScriptQuickFindDefitionProvider.prototype.match = function (query) { - return query.indexOf('@') === 0; - }; - - TypeScriptQuickFindDefitionProvider.prototype.resultsFormatter = function (item) { - var displayName = QuickOpen.highlightMatch(item.name); - displayName = item.containerName ? item.containerName + '.' + displayName : displayName; - return '
  • ' + displayName + '
  • '; - }; - - TypeScriptQuickFindDefitionProvider.prototype.getSession = function () { - var _this = this; - return $.Deferred(function (deferred) { - if (_this.session) { - deferred.resolve(_this.session); - } else { - _this.getService().then(function (lexicalStructureService) { - var editor = EditorManager.getActiveEditor(), currentFile = editor.document.file.fullPath; - lexicalStructureService.getLexicalStructureForFile(currentFile).then(function (items) { - _this.session = new Session(items); - deferred.resolve(_this.session); - }); - }); - } - }).promise(); - }; - - TypeScriptQuickFindDefitionProvider.prototype.setCurrentPosition = function (pos) { - EditorManager.getActiveEditor().setCursorPos(pos.line, pos.ch, true, true); - }; - return TypeScriptQuickFindDefitionProvider; -})(ServiceConsumer); - -module.exports = TypeScriptQuickFindDefitionProvider; - -},{"./serviceConsumer":63}],62:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -//TODO that part of the application is not well tested and just 'work' it needs to be refactored -var ServiceConsumer = _dereq_('./serviceConsumer'); - -var EditorManager = brackets.getModule('editor/EditorManager'), Commands = brackets.getModule('command/Commands'), CommandManager = brackets.getModule('command/CommandManager'); - -var TypeScriptQuickJumpProvider = (function (_super) { - __extends(TypeScriptQuickJumpProvider, _super); - function TypeScriptQuickJumpProvider() { - _super.apply(this, arguments); - var _this = this; - this.handleJumpToDefinition = function () { - var editor = EditorManager.getFocusedEditor(); - - if (!editor || editor.getModeForSelection() !== 'typescript') { - return null; - } - - var pos = editor.getCursorPos(), fileName = editor.document.file.fullPath, deferred = $.Deferred(); - - _this.getService().then(function (service) { - service.getDefinitionForFile(fileName, pos).then(function (definitions) { - if (!definitions || definitions.length === 0) { - deferred.reject(); - } - - definitions.filter(function (definition) { - return definition.fileName !== fileName || definition.lineStart !== pos.line; - }); - if (definitions.length === 0) { - deferred.reject(); - } - if (editor === EditorManager.getFocusedEditor()) { - if (editor.getCursorPos().line === pos.line) { - var def = definitions[0]; - if (def.fileName === fileName) { - editor.setCursorPos(def.lineStart, def.charStart, true, true); - deferred.resolve(true); - } else { - CommandManager.execute(Commands.FILE_OPEN, { fullPath: def.fileName }).then(function () { - var editor = EditorManager.getFocusedEditor(); - editor.setCursorPos(def.lineStart, def.charStart, true, true); - deferred.resolve(true); - }, function () { - return deferred.reject(); - }); - } - return; - } - } - deferred.reject(); - }, function () { - return deferred.reject(); - }); - }); - return deferred.promise(); - }; - } - return TypeScriptQuickJumpProvider; -})(ServiceConsumer); - -module.exports = TypeScriptQuickJumpProvider; - -},{"./serviceConsumer":63}],63:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var Promise = _dereq_('bluebird'); - -/** -* a class implementing logic to stack operations until a service -* has been injected -*/ -var ServiceConsumer = (function () { - /** - * constructor - */ - function ServiceConsumer() { - this.reset(); - } - /** - * inject the service - * - * @param service the injected service - */ - ServiceConsumer.prototype.setService = function (service) { - this.serviceResolver(service); - }; - - /** - * @return a promise that will be resolved when the service get injected - */ - ServiceConsumer.prototype.getService = function () { - return this.promise; - }; - - /** - * reset the injection - */ - ServiceConsumer.prototype.reset = function () { - var _this = this; - this.promise = new Promise(function (resolve) { - return _this.serviceResolver = resolve; - }); - }; - return ServiceConsumer; -})(); - -module.exports = ServiceConsumer; - -},{"bluebird":3}],64:[function(_dereq_,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var signal = _dereq_('../commons/signal'); -var collections = _dereq_('../commons/collections'); -var ws = _dereq_('../commons/workingSet'); -var Promise = _dereq_('bluebird'); - -/** -* implementation of the IWorkingSet -*/ -var WorkingSet = (function () { - //------------------------------- - // constructor - //------------------------------- - function WorkingSet(documentManager, editorManager) { - var _this = this; - this.documentManager = documentManager; - this.editorManager = editorManager; - //------------------------------- - // Variables - //------------------------------- - /** - * internal signal for workingSetChanged - */ - this._workingSetChanged = new signal.Signal(); - /** - * internal signal for documentEdited - */ - this._documentEdited = new signal.Signal(); - /** - * Set of file path in the working set - */ - this.filesSet = new collections.StringSet(); - //------------------------------- - // Events Handler - //------------------------------- - /** - * handle 'workingSetAdd' event - */ - this.workingSetAddHandler = function (event, file) { - _this.filesSet.add(file.fullPath); - _this.workingSetChanged.dispatch({ - kind: 0 /* ADD */, - paths: [file.fullPath] - }); - }; - /** - * handle 'workingSetAddList' event - */ - this.workingSetAddListHandler = function (event) { - var files = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - files[_i] = arguments[_i + 1]; - } - var paths = files.map(function (file) { - _this.filesSet.add(file.fullPath); - return file.fullPath; - }); - if (paths.length > 0) { - _this.workingSetChanged.dispatch({ - kind: 0 /* ADD */, - paths: paths - }); - } - }; - /** - * handle 'workingSetRemove' event - */ - this.workingSetRemoveHandler = function (event, file) { - _this.filesSet.remove(file.fullPath); - _this.workingSetChanged.dispatch({ - kind: 1 /* REMOVE */, - paths: [file.fullPath] - }); - }; - /** - * handle 'workingSetRemoveList' event - */ - this.workingSetRemoveListHandler = function (event) { - var files = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - files[_i] = arguments[_i + 1]; - } - var paths = files.map(function (file) { - _this.filesSet.remove(file.fullPath); - return file.fullPath; - }); - if (paths.length > 0) { - _this.workingSetChanged.dispatch({ - kind: 1 /* REMOVE */, - paths: paths - }); - } - }; - /** - * handle 'change' on document - */ - this.documentChangesHandler = function (event, document, changes) { - var changeList = changes.map(function (change) { - return ({ - from: change.from, - to: change.to, - text: change.text && change.text.join('\n'), - removed: change.removed ? change.removed.join('\n') : '' - }); - }); - - if (changeList.length > 0) { - _this.documentEdited.dispatch({ - path: document.file.fullPath, - changeList: changeList, - documentText: document.getText() - }); - } - }; - /** - * handle active editor change - */ - this.activeEditorChangeHandler = function (event, current, previous) { - _this.setActiveEditor(current); - }; - $(documentManager).on('workingSetAdd', this.workingSetAddHandler); - $(documentManager).on('workingSetAddList', this.workingSetAddListHandler); - $(documentManager).on('workingSetRemove', this.workingSetRemoveHandler); - $(documentManager).on('workingSetRemoveList', this.workingSetRemoveListHandler); - - $(editorManager).on('activeEditorChange', this.activeEditorChangeHandler); - - this.setFiles(documentManager.getWorkingSet().map(function (file) { - return file.fullPath; - })); - this.setActiveEditor(editorManager.getActiveEditor()); - } - //------------------------------- - // IWorkingSet implementations - //------------------------------- - /** - * list of files in the working set - */ - WorkingSet.prototype.getFiles = function () { - return Promise.cast(this.filesSet.values); - }; - - Object.defineProperty(WorkingSet.prototype, "workingSetChanged", { - /** - * a signal dispatching events when change occured in the working set - */ - get: function () { - return this._workingSetChanged; - }, - enumerable: true, - configurable: true - }); - - Object.defineProperty(WorkingSet.prototype, "documentEdited", { - /** - * a signal that provide fine grained change over edited document - */ - get: function () { - return this._documentEdited; - }, - enumerable: true, - configurable: true - }); - - /** - * dispose the working set - */ - WorkingSet.prototype.dispose = function () { - $(this.documentManager).off('workingSetAdd', this.workingSetAddHandler); - $(this.documentManager).off('workingSetAddList', this.workingSetAddListHandler); - $(this.documentManager).off('workingSetRemove', this.workingSetRemoveHandler); - $(this.documentManager).off('workingSetRemoveList', this.workingSetRemoveListHandler); - $(this.editorManager).off('activeEditorChange', this.activeEditorChangeHandler); - this.setFiles(null); - this.setActiveEditor(null); - }; - - //------------------------------- - // Privates methods - //------------------------------- - /** - * set working set files - */ - WorkingSet.prototype.setFiles = function (files) { - var _this = this; - this.filesSet.values.forEach(function (path) { - return _this.filesSet.remove(path); - }); - if (files) { - files.forEach(function (path) { - return _this.filesSet.add(path); - }); - } - }; - - /** - * attach events to the activeEditor - */ - WorkingSet.prototype.setActiveEditor = function (editor) { - if (this.currentDocument) { - $(this.currentDocument).off('change', this.documentChangesHandler); - } - this.currentDocument = editor && editor.document; - if (this.currentDocument) { - $(this.currentDocument).on('change', this.documentChangesHandler); - } - }; - return WorkingSet; -})(); - -module.exports = WorkingSet; +module.exports = WorkingSet; -},{"../commons/collections":42,"../commons/signal":47,"../commons/workingSet":51,"bluebird":3}]},{},[57]) -(57) +},{"../commons/collections":40,"../commons/signal":45,"../commons/workingSet":49,"bluebird":5}]},{},[55]) +(55) }); \ No newline at end of file diff --git a/bin/worker.js b/bin/worker.js index 1dd8575..6fca0a8 100644 --- a/bin/worker.js +++ b/bin/worker.js @@ -1,198 +1,297 @@ -require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; } - ret.setHowMany(1); - ret.setUnwrap(); - ret.init(); - return promise; + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; } -Promise.any = function Promise$Any(promises) { - return Promise$_Any(promises, false); +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); }; -Promise.prototype.any = function Promise$any() { - return Promise$_Any(this, true); -}; +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; -}; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); -},{"./some_promise_array.js":33}],2:[function(require,module,exports){ -/** - * Copyright (c) 2014 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions:

    - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -var schedule = require("./schedule.js"); -var Queue = require("./queue.js"); -var errorObj = require("./util.js").errorObj; -var tryCatch1 = require("./util.js").tryCatch1; -var process = require("./global.js").process; + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } -function Async() { - this._isTickUsed = false; - this._length = 0; - this._lateBuffer = new Queue(); - this._functionBuffer = new Queue(25000 * 3); - var self = this; - this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { - self._consumeFunctionBuffer(); - }; -} + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } -Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { - return this._length > 0; -}; + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) -Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { - if (process !== void 0 && - process.domain != null && - !fn.domain) { - fn = process.domain.bind(fn); - } - this._lateBuffer.push(fn, receiver, arg); - this._queueTick(); -}; + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); -Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { - if (process !== void 0 && - process.domain != null && - !fn.domain) { - fn = process.domain.bind(fn); - } - var functionBuffer = this._functionBuffer; - functionBuffer.push(fn, receiver, arg); - this._length = functionBuffer.length(); - this._queueTick(); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; }; -Async.prototype._consumeFunctionBuffer = -function Async$_consumeFunctionBuffer() { - var functionBuffer = this._functionBuffer; - while(functionBuffer.length() > 0) { - var fn = functionBuffer.shift(); - var receiver = functionBuffer.shift(); - var arg = functionBuffer.shift(); - fn.call(receiver, arg); - } - this._reset(); - this._consumeLateBuffer(); +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; }; -Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { - var buffer = this._lateBuffer; - while(buffer.length() > 0) { - var fn = buffer.shift(); - var receiver = buffer.shift(); - var arg = buffer.shift(); - var res = tryCatch1(fn, receiver, arg); - if (res === errorObj) { - this._queueTick(); - if (fn.domain != null) { - fn.domain.emit("error", res.e); - } - else { - throw res.e; - } - } - } +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; }; -Async.prototype._queueTick = function Async$_queue() { - if (!this._isTickUsed) { - schedule(this.consumeFunctionBuffer); - this._isTickUsed = true; +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); } + return p; + }).join('/')); }; -Async.prototype._reset = function Async$_reset() { - this._isTickUsed = false; - this._length = 0; -}; -module.exports = new Async(); +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); -},{"./global.js":15,"./queue.js":26,"./schedule.js":29,"./util.js":37}],3:[function(require,module,exports){ -/** - * Copyright (c) 2014 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions:

    - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ -"use strict"; -var Promise = require("./promise.js")(); -module.exports = Promise; -},{"./promise.js":19}],4:[function(require,module,exports){ + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require("tWU75n")) +},{"tWU75n":2}],2:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; + +process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' + && window.setImmediate; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) }; + } + + if (canPost) { + var queue = []; + window.addEventListener('message', function (ev) { + var source = ev.source; + if ((source === window || source === null) && ev.data === 'process-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; + } + + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}],3:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -216,38 +315,38 @@ module.exports = Promise; * */ "use strict"; -module.exports = function(Promise) { -Promise.prototype.call = function Promise$call(propertyName) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} +module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { - return this._then(function(obj) { - return obj[propertyName].apply(obj, args); - }, - void 0, - void 0, - void 0, - void 0 +var SomePromiseArray = require("./some_promise_array.js")(PromiseArray); +function Promise$_Any(promises, useBound) { + var ret = Promise$_CreatePromiseArray( + promises, + SomePromiseArray, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 ); + var promise = ret.promise(); + if (promise.isRejected()) { + return promise; + } + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; +} + +Promise.any = function Promise$Any(promises) { + return Promise$_Any(promises, false); }; -function Promise$getter(obj) { - var prop = typeof this === "string" - ? this - : ("" + this); - return obj[prop]; -} -Promise.prototype.get = function Promise$get(propertyName) { - return this._then( - Promise$getter, - void 0, - void 0, - propertyName, - void 0 - ); +Promise.prototype.any = function Promise$any() { + return Promise$_Any(this, true); }; + }; -},{}],5:[function(require,module,exports){ +},{"./some_promise_array.js":35}],4:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -271,32 +370,226 @@ Promise.prototype.get = function Promise$get(propertyName) { * */ "use strict"; -module.exports = function(Promise, INTERNAL) { -var errors = require("./errors.js"); -var async = require("./async.js"); -var CancellationError = errors.CancellationError; +var schedule = require("./schedule.js"); +var Queue = require("./queue.js"); +var errorObj = require("./util.js").errorObj; +var tryCatch1 = require("./util.js").tryCatch1; +var process = require("./global.js").process; -Promise.prototype._cancel = function Promise$_cancel() { - if (!this.isCancellable()) return this; - var parent; - var promiseToReject = this; - while ((parent = promiseToReject._cancellationParent) !== void 0 && - parent.isCancellable()) { - promiseToReject = parent; - } - var err = new CancellationError(); - promiseToReject._attachExtraTrace(err); - promiseToReject._rejectUnchecked(err); -}; +function Async() { + this._isTickUsed = false; + this._length = 0; + this._lateBuffer = new Queue(); + this._functionBuffer = new Queue(25000 * 3); + var self = this; + this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { + self._consumeFunctionBuffer(); + }; +} -Promise.prototype.cancel = function Promise$cancel() { - if (!this.isCancellable()) return this; - async.invokeLater(this._cancel, this, void 0); - return this; +Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { + return this._length > 0; }; -Promise.prototype.cancellable = function Promise$cancellable() { - if (this._cancellable()) return this; +Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { + if (process !== void 0 && + process.domain != null && + !fn.domain) { + fn = process.domain.bind(fn); + } + this._lateBuffer.push(fn, receiver, arg); + this._queueTick(); +}; + +Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { + if (process !== void 0 && + process.domain != null && + !fn.domain) { + fn = process.domain.bind(fn); + } + var functionBuffer = this._functionBuffer; + functionBuffer.push(fn, receiver, arg); + this._length = functionBuffer.length(); + this._queueTick(); +}; + +Async.prototype._consumeFunctionBuffer = +function Async$_consumeFunctionBuffer() { + var functionBuffer = this._functionBuffer; + while(functionBuffer.length() > 0) { + var fn = functionBuffer.shift(); + var receiver = functionBuffer.shift(); + var arg = functionBuffer.shift(); + fn.call(receiver, arg); + } + this._reset(); + this._consumeLateBuffer(); +}; + +Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { + var buffer = this._lateBuffer; + while(buffer.length() > 0) { + var fn = buffer.shift(); + var receiver = buffer.shift(); + var arg = buffer.shift(); + var res = tryCatch1(fn, receiver, arg); + if (res === errorObj) { + this._queueTick(); + if (fn.domain != null) { + fn.domain.emit("error", res.e); + } + else { + throw res.e; + } + } + } +}; + +Async.prototype._queueTick = function Async$_queue() { + if (!this._isTickUsed) { + schedule(this.consumeFunctionBuffer); + this._isTickUsed = true; + } +}; + +Async.prototype._reset = function Async$_reset() { + this._isTickUsed = false; + this._length = 0; +}; + +module.exports = new Async(); + +},{"./global.js":17,"./queue.js":28,"./schedule.js":31,"./util.js":39}],5:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

    + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var Promise = require("./promise.js")(); +module.exports = Promise; +},{"./promise.js":21}],6:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

    + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { +Promise.prototype.call = function Promise$call(propertyName) { + var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} + + return this._then(function(obj) { + return obj[propertyName].apply(obj, args); + }, + void 0, + void 0, + void 0, + void 0 + ); +}; + +function Promise$getter(obj) { + var prop = typeof this === "string" + ? this + : ("" + this); + return obj[prop]; +} +Promise.prototype.get = function Promise$get(propertyName) { + return this._then( + Promise$getter, + void 0, + void 0, + propertyName, + void 0 + ); +}; +}; + +},{}],7:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

    + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var errors = require("./errors.js"); +var async = require("./async.js"); +var CancellationError = errors.CancellationError; + +Promise.prototype._cancel = function Promise$_cancel() { + if (!this.isCancellable()) return this; + var parent; + var promiseToReject = this; + while ((parent = promiseToReject._cancellationParent) !== void 0 && + parent.isCancellable()) { + promiseToReject = parent; + } + var err = new CancellationError(); + promiseToReject._attachExtraTrace(err); + promiseToReject._rejectUnchecked(err); +}; + +Promise.prototype.cancel = function Promise$cancel() { + if (!this.isCancellable()) return this; + async.invokeLater(this._cancel, this, void 0); + return this; +}; + +Promise.prototype.cancellable = function Promise$cancellable() { + if (this._cancellable()) return this; this._setCancellable(); this._cancellationParent = void 0; return this; @@ -322,7 +615,7 @@ function Promise$fork(didFulfill, didReject, didProgress) { }; }; -},{"./async.js":2,"./errors.js":9}],6:[function(require,module,exports){ +},{"./async.js":4,"./errors.js":11}],8:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -546,7 +839,7 @@ var captureStackTrace = (function stackDetection() { return CapturedTrace; }; -},{"./es5.js":11,"./util.js":37}],7:[function(require,module,exports){ +},{"./es5.js":13,"./util.js":39}],9:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -642,7 +935,7 @@ CatchFilter.prototype.doFilter = function CatchFilter$_doFilter(e) { return CatchFilter; }; -},{"./errors.js":9,"./es5.js":11,"./util.js":37}],8:[function(require,module,exports){ +},{"./errors.js":11,"./es5.js":13,"./util.js":39}],10:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -723,7 +1016,7 @@ function Promise$thenThrow(reason) { }; }; -},{"./util.js":37}],9:[function(require,module,exports){ +},{"./util.js":39}],11:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -839,7 +1132,7 @@ module.exports = { canAttach: canAttach }; -},{"./es5.js":11,"./global.js":15,"./util.js":37}],10:[function(require,module,exports){ +},{"./es5.js":13,"./global.js":17,"./util.js":39}],12:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -879,7 +1172,7 @@ function apiRejection(msg) { return apiRejection; }; -},{"./errors.js":9}],11:[function(require,module,exports){ +},{"./errors.js":11}],13:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -923,7 +1216,7 @@ else { var str = {}.toString; var proto = {}.constructor.prototype; - function ObjectKeys(o) { + var ObjectKeys = function ObjectKeys(o) { var ret = []; for (var key in o) { if (has.call(o, key)) { @@ -933,16 +1226,16 @@ else { return ret; } - function ObjectDefineProperty(o, key, desc) { + var ObjectDefineProperty = function ObjectDefineProperty(o, key, desc) { o[key] = desc.value; return o; } - function ObjectFreeze(obj) { + var ObjectFreeze = function ObjectFreeze(obj) { return obj; } - function ObjectGetPrototypeOf(obj) { + var ObjectGetPrototypeOf = function ObjectGetPrototypeOf(obj) { try { return Object(obj).constructor.prototype; } @@ -951,7 +1244,7 @@ else { } } - function ArrayIsArray(obj) { + var ArrayIsArray = function ArrayIsArray(obj) { try { return str.call(obj) === "[object Array]"; } @@ -970,7 +1263,7 @@ else { }; } -},{}],12:[function(require,module,exports){ +},{}],14:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1023,7 +1316,7 @@ Promise.prototype.filter = function Promise$filter(fn) { }; }; -},{"./util.js":37}],13:[function(require,module,exports){ +},{"./util.js":39}],15:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1148,7 +1441,7 @@ Promise.prototype.tap = function Promise$tap(handler) { }; }; -},{"./util.js":37}],14:[function(require,module,exports){ +},{"./util.js":39}],16:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1206,8 +1499,9 @@ Promise.spawn = function Promise$Spawn(generatorFunction) { }; }; -},{"./errors.js":9,"./promise_spawn.js":22,"./util.js":37}],15:[function(require,module,exports){ -(function (global){/** +},{"./errors.js":11,"./promise_spawn.js":24,"./util.js":39}],17:[function(require,module,exports){ +(function (global){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1238,8 +1532,9 @@ module.exports = (function() { try {return self;} catch(e) {} })(); + }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],16:[function(require,module,exports){ +},{}],18:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1417,7 +1712,7 @@ Promise.map = function Promise$Map(promises, fn, ref) { }; }; -},{"./errors.js":9,"./util.js":37}],17:[function(require,module,exports){ +},{"./errors.js":11,"./util.js":39}],19:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1483,7 +1778,7 @@ Promise.prototype.nodeify = function Promise$nodeify(nodeback) { }; }; -},{"./async.js":2,"./util.js":37}],18:[function(require,module,exports){ +},{"./async.js":4,"./util.js":39}],20:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -1596,8 +1891,9 @@ function Promise$_progressUnchecked(progressValue) { }; }; -},{"./async.js":2,"./errors.js":9,"./util.js":37}],19:[function(require,module,exports){ -(function (process){/** +},{"./async.js":4,"./errors.js":11,"./util.js":39}],21:[function(require,module,exports){ +(function (process){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -2729,8 +3025,9 @@ Promise.prototype = Promise.prototype; return Promise; }; -}).call(this,require("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./any.js":1,"./async.js":2,"./call_get.js":4,"./cancel.js":5,"./captured_trace.js":6,"./catch_filter.js":7,"./direct_resolve.js":8,"./errors.js":9,"./errors_api_rejection":10,"./filter.js":12,"./finally.js":13,"./generators.js":14,"./global.js":15,"./map.js":16,"./nodeify.js":17,"./progress.js":18,"./promise_array.js":20,"./promise_resolver.js":21,"./promisify.js":23,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":32,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./util.js":37,"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],20:[function(require,module,exports){ + +}).call(this,require("tWU75n")) +},{"./any.js":3,"./async.js":4,"./call_get.js":6,"./cancel.js":7,"./captured_trace.js":8,"./catch_filter.js":9,"./direct_resolve.js":10,"./errors.js":11,"./errors_api_rejection":12,"./filter.js":14,"./finally.js":15,"./generators.js":16,"./global.js":17,"./map.js":18,"./nodeify.js":19,"./progress.js":20,"./promise_array.js":22,"./promise_resolver.js":23,"./promisify.js":25,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":34,"./synchronous_inspection.js":36,"./thenables.js":37,"./timers.js":38,"./util.js":39,"tWU75n":2}],22:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -2965,7 +3262,7 @@ function PromiseArray$_promiseRejected(reason, index) { return PromiseArray; }; -},{"./async.js":2,"./errors.js":9,"./util.js":37}],21:[function(require,module,exports){ +},{"./async.js":4,"./errors.js":11,"./util.js":39}],23:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3072,6 +3369,9 @@ PromiseResolver.prototype.toString = function PromiseResolver$toString() { PromiseResolver.prototype.resolve = PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { var promise = this.promise; + if ((promise === void 0) || (promise._tryFollow === void 0)) { + throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead."); + } if (promise._tryFollow(value)) { return; } @@ -3080,6 +3380,9 @@ PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { PromiseResolver.prototype.reject = function PromiseResolver$reject(reason) { var promise = this.promise; + if ((promise === void 0) || (promise._attachExtraTrace === void 0)) { + throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead."); + } errors.markAsOriginatingFromRejection(reason); var trace = errors.canAttach(reason) ? reason : new Error(reason + ""); promise._attachExtraTrace(trace); @@ -3119,7 +3422,7 @@ function PromiseResolver$_setCarriedStackTrace(trace) { module.exports = PromiseResolver; -},{"./async.js":2,"./errors.js":9,"./es5.js":11,"./util.js":37}],22:[function(require,module,exports){ +},{"./async.js":4,"./errors.js":11,"./es5.js":13,"./util.js":39}],24:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3251,7 +3554,7 @@ PromiseSpawn.addYieldHandler = function PromiseSpawn$AddYieldHandler(fn) { return PromiseSpawn; }; -},{"./errors.js":9,"./util.js":37}],23:[function(require,module,exports){ +},{"./errors.js":11,"./util.js":39}],25:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3386,9 +3689,8 @@ function parameterCount(fn) { return 0; } +var rident = /^[a-z$_][a-z$_0-9]*$/i; function propertyAccess(id) { - var rident = /^[a-z$_][a-z$_0-9]*$/i; - if (rident.test(id)) { return "." + id; } @@ -3424,6 +3726,10 @@ function makeNodePromisifiedEval(callback, receiver, originalName, fn) { "break;"; } + if (!rident.test(callbackName)) { + callbackName = "promisified"; + } + function generateArgumentSwitchCase() { var ret = ""; for(var i = 0; i < argumentOrder.length; ++i) { @@ -3543,7 +3849,7 @@ Promise.promisifyAll = function Promise$PromisifyAll(target) { }; -},{"./errors":9,"./es5.js":11,"./promise_resolver.js":21,"./util.js":37}],24:[function(require,module,exports){ +},{"./errors":11,"./es5.js":13,"./promise_resolver.js":23,"./util.js":39}],26:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3622,7 +3928,7 @@ PromiseArray.PropertiesPromiseArray = PropertiesPromiseArray; return PropertiesPromiseArray; }; -},{"./es5.js":11,"./util.js":37}],25:[function(require,module,exports){ +},{"./es5.js":13,"./util.js":39}],27:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3688,7 +3994,7 @@ Promise.props = function Promise$Props(promises) { }; }; -},{"./errors_api_rejection":10,"./properties_promise_array.js":24,"./util.js":37}],26:[function(require,module,exports){ +},{"./errors_api_rejection":12,"./properties_promise_array.js":26,"./util.js":39}],28:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3825,7 +4131,7 @@ Queue.prototype._resizeTo = function Queue$_resizeTo(capacity) { module.exports = Queue; -},{}],27:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -3911,7 +4217,7 @@ Promise.prototype.race = function Promise$race() { }; -},{"./errors_api_rejection.js":10,"./util.js":37}],28:[function(require,module,exports){ +},{"./errors_api_rejection.js":12,"./util.js":39}],30:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4074,8 +4380,9 @@ Promise.prototype.reduce = function Promise$reduce(fn, initialValue) { }; }; -},{}],29:[function(require,module,exports){ -(function (process){/** +},{}],31:[function(require,module,exports){ +(function (process){ +/** * Copyright (c) 2014 Petka Antonov * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -4196,8 +4503,9 @@ else { } module.exports = schedule; -}).call(this,require("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./global.js":15,"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],30:[function(require,module,exports){ + +}).call(this,require("tWU75n")) +},{"./global.js":17,"tWU75n":2}],32:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4246,7 +4554,7 @@ Promise.prototype.settle = function Promise$settle() { }; }; -},{"./settled_promise_array.js":31}],31:[function(require,module,exports){ +},{"./settled_promise_array.js":33}],33:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4308,7 +4616,7 @@ function SettledPromiseArray$_promiseRejected(reason, index) { return SettledPromiseArray; }; -},{"./util.js":37}],32:[function(require,module,exports){ +},{"./util.js":39}],34:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4366,7 +4674,7 @@ Promise.prototype.some = function Promise$some(count) { }; -},{"./some_promise_array.js":33}],33:[function(require,module,exports){ +},{"./some_promise_array.js":35}],35:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4499,7 +4807,7 @@ function SomePromiseArray$_canPossiblyFulfill() { return SomePromiseArray; }; -},{"./errors.js":9,"./util.js":37}],34:[function(require,module,exports){ +},{"./errors.js":11,"./util.js":39}],36:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4580,7 +4888,7 @@ Promise.prototype.inspect = function Promise$inspect() { Promise.PromiseInspection = PromiseInspection; }; -},{}],35:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4717,7 +5025,7 @@ function Promise$_doThenable(x, then, originalPromise) { Promise._cast = Promise$_Cast; }; -},{"./errors.js":9,"./util.js":37}],36:[function(require,module,exports){ +},{"./errors.js":11,"./util.js":39}],38:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -4822,7 +5130,7 @@ Promise.prototype.timeout = function Promise$timeout(ms, message) { }; -},{"./errors.js":9,"./errors_api_rejection":10,"./global.js":15,"./util.js":37}],37:[function(require,module,exports){ +},{"./errors.js":11,"./errors_api_rejection":12,"./global.js":17,"./util.js":39}],39:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * @@ -5017,444 +5325,164 @@ var ret = { module.exports = ret; -},{"./es5.js":11,"./global.js":15}],38:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; +},{"./es5.js":13,"./global.js":17}],40:[function(require,module,exports){ +(function (process){ +;(function (require, exports, module, platform) { -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; +if (module) module.exports = minimatch +else exports.minimatch = minimatch - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; +if (!require) { + require = function (id) { + switch (id) { + case "sigmund": return function sigmund (obj) { + return JSON.stringify(obj) + } + case "path": return { basename: function (f) { + f = f.split(/[\/\\]/) + var e = f.pop() + if (!e) e = f.pop() + return e + }} + case "lru-cache": return function LRUCache () { + // not quite an LRU, but still space-limited. + var cache = {} + var cnt = 0 + this.set = function (k, v) { + cnt ++ + if (cnt >= 100) cache = {} + cache[k] = v + } + this.get = function (k) { return cache[k] } + } } + } +} - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); +minimatch.Minimatch = Minimatch - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } +var LRU = require("lru-cache") + , cache = minimatch.cache = new LRU({max: 100}) + , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} + , sigmund = require("sigmund") - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); +var path = require("path") + // any single thing other than / + // don't need to escape / when using new RegExp() + , qmark = "[^/]" -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; + // * => any number of characters + , star = qmark + "*?" -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} + // ** when dots are allowed. Anything goes, except .. and . + // not (^ or / followed by one or two dots followed by $ or /), + // followed by anything, any number of times. + , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; + // not a ^ or / followed by a dot, + // followed by anything, any number of times. + , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" -},{}],39:[function(require,module,exports){ -(function (process){// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // characters that need to be escaped in RegExp. + , reSpecials = charSet("().*{}+?[]^$\\!") -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split("").reduce(function (set, c) { + set[c] = true + return set + }, {}) +} - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } +// normalizes slashes. +var slashSplit = /\/+/ - return parts; +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } } -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } + var orig = minimatch - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) } - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; + return m +} -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; +function minimatch (p, pattern, options) { + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") } - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - + if (!options) options = {} -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === "#") { + return false + } - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } + // "" only matches "" + if (pattern.trim() === "") return p === "" - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } + return new Minimatch(pattern, options).match(p) +} - if (start > end) return []; - return arr.slice(start, end - start + 1); +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options, cache) } - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } + if (typeof pattern !== "string") { + throw new TypeError("glob pattern string required") } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); + if (!options) options = {} + pattern = pattern.trim() + + // windows: need to use /, not \ + // On other platforms, \ is a valid (albeit bad) filename char. + if (platform === "win32") { + pattern = pattern.split("\\").join("/") } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; -}).call(this,require("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38}],40:[function(require,module,exports){ -(function (process){;(function (require, exports, module, platform) { - -if (module) module.exports = minimatch -else exports.minimatch = minimatch - -if (!require) { - require = function (id) { - switch (id) { - case "sigmund": return function sigmund (obj) { - return JSON.stringify(obj) - } - case "path": return { basename: function (f) { - f = f.split(/[\/\\]/) - var e = f.pop() - if (!e) e = f.pop() - return e - }} - case "lru-cache": return function LRUCache () { - // not quite an LRU, but still space-limited. - var cache = {} - var cnt = 0 - this.set = function (k, v) { - cnt ++ - if (cnt >= 100) cache = {} - cache[k] = v - } - this.get = function (k) { return cache[k] } - } - } - } -} - -minimatch.Minimatch = Minimatch - -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU({max: 100}) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - , sigmund = require("sigmund") - -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" - - // * => any number of characters - , star = qmark + "*?" - - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" - - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" - - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split("").reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - - -function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - return false - } - - // "" only matches "" - if (pattern.trim() === "") return p === "" - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) - } - - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - pattern = pattern.split("\\").join("/") - } - - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + sigmund(options) - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) + // lru storage. + // these things aren't particularly big, but walking down the string + // and turning it into a regexp can get pretty costly. + var cacheKey = pattern + "\n" + sigmund(options) + var cached = minimatch.cache.get(cacheKey) + if (cached) return cached + minimatch.cache.set(cacheKey, this) this.options = options this.set = [] @@ -6354,8 +6382,9 @@ function regExpEscape (s) { typeof module === "object" ? module : null, typeof process === "object" ? process.platform : "win32" ) -}).call(this,require("/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/kapit/Documents/workspaces/typescript/brackets-typescript/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":38,"lru-cache":41,"path":39,"sigmund":42}],41:[function(require,module,exports){ + +}).call(this,require("tWU75n")) +},{"lru-cache":41,"path":1,"sigmund":42,"tWU75n":2}],41:[function(require,module,exports){ ;(function () { // closure for web browsers if (typeof module === 'object' && module.exports) { @@ -6650,72303 +6679,2623 @@ function sigmund (subject, maxSessions) { // vim: set softtabstop=4 shiftwidth=4: -},{}],"typescriptServices":[function(require,module,exports){ -module.exports=require('rW6mcW'); -},{}],"rW6mcW":[function(require,module,exports){ -var global=self;(function browserifyShim(module, exports, define, browserify_shim__define__module__export__) { -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ - -/*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- - -The TypeScript software is based on or incorporates material and code from the projects listed below -(collectively "Third Party Code"). Microsoft is not the original author of the -Third Party Code. The original copyright notice and the license, under which -Microsoft received such Third Party Code, are set forth below. Such license and -notices are provided for informational purposes only. Microsoft licenses the Third -Party Code to you under the terms of the Apache 2.0 License. -All Third Party Code licensed by Microsoft under the Apache License, Version 2.0 (the "License"); you -may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 +},{}],43:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// StringSet +// +//-------------------------------------------------------------------------- +/** +* Set that only accept string as value +*/ +var StringSet = (function () { + /** + * constructor + * @param array an array of string that will be added to the set + */ + function StringSet(array) { + this.map = Object.create(null); + if (array) { + for (var i = 0, l = array.length; i < l; i++) { + this.add(array[i]); + } + } + } + /** + * add a value to the set + * @param value + */ + StringSet.prototype.add = function (value) { + this.map[value] = true; + }; -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR -CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + /** + * remove a value from the set + * @param value + */ + StringSet.prototype.remove = function (value) { + delete this.map[value]; + }; -See the Apache Version 2.0 License for specific language governing permissions and -limitations under the License. ---------------------------------------------- -Third Party Code Components --------------------------------------------- ----- Mozilla Developer Code--------- -The following Mozilla Developer Code is under Public Domain as updated after Aug. 20, 2012, see, https://developer.mozilla.org/en-US/docs/Project:Copyrights -1. Array filter Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter -Any copyright is dedicated to the Public Domain. + /** + * return true if the set contains the given value + * @param value + */ + StringSet.prototype.has = function (value) { + return !!this.map[value]; + }; -2. Array forEach Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach -Any copyright is dedicated to the Public Domain. + Object.defineProperty(StringSet.prototype, "values", { + /** + * return an array containing the values of the set + */ + get: function () { + return Object.keys(this.map); + }, + enumerable: true, + configurable: true + }); + return StringSet; +})(); +exports.StringSet = StringSet; + +; + +/** +* Map that only accept string as key +*/ +var StringMap = (function () { + /** + * constructor + * @param obj initial values to set in the map each properties + * of the object will be treaded as a pair key/value + */ + function StringMap(obj) { + var _this = this; + this.map = Object.create(null); + this.mascot = {}; + if (obj) { + Object.keys(obj).forEach(function (key) { + return _this.map[key] = obj[key]; + }); + } + } + /** + * set a value in the map + * @param key the key + * @param value the value + */ + StringMap.prototype.set = function (key, value) { + this.map[key] = (typeof value === 'undefined' ? this.mascot : value); + }; -3. Array indexOf Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf -Any copyright is dedicated to the Public Domain. + /** + * retrive a value associated to the given key + * @param key the key to retrieve the value associated with + */ + StringMap.prototype.get = function (key) { + var value = this.map[key]; + return value === this.mascot ? undefined : value; + }; -4. Array map Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map -Any copyright is dedicated to the Public Domain. + /** + * delete an entry corresponding to the given key + * @param key + */ + StringMap.prototype.delete = function (key) { + return delete this.map[key]; + }; -5. Array Reduce Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce -Any copyright is dedicated to the Public Domain. + /** + * return true if the map contains the given key + * @param key + */ + StringMap.prototype.has = function (key) { + return typeof this.map[key] !== 'undefined'; + }; -6. String Trim Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim -Any copyright is dedicated to the Public Domain. + /** + * clear the map + */ + StringMap.prototype.clear = function () { + this.map = Object.create(null); + }; -7. Date now Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now -Any copyright is dedicated to the Public Domain. + Object.defineProperty(StringMap.prototype, "keys", { + /** + * return an array containing the keys of the map + */ + get: function () { + return Object.keys(this.map); + }, + enumerable: true, + configurable: true + }); + + Object.defineProperty(StringMap.prototype, "values", { + /** + * return an array containing the values of the map + */ + get: function () { + var _this = this; + return Object.keys(this.map).map(function (key) { + return _this.map[key]; + }); + }, + enumerable: true, + configurable: true + }); -------------JSON2 Script------------------------ -json2.js 2012-10-08 -Public Domain. -NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -See, http://www.JSON.org/js.html + Object.defineProperty(StringMap.prototype, "entries", { + /** + * return an array containing the entries of the map + */ + get: function () { + var _this = this; + return Object.keys(this.map).map(function (key) { + return { + key: key, + value: _this.map[key] + }; + }); + }, + enumerable: true, + configurable: true + }); + + /** + * return an object representation + */ + StringMap.prototype.toObject = function () { + var _this = this; + return Object.keys(this.map).reduce(function (obj, key) { + obj[key] = _this.map[key]; + return obj; + }, {}); + }; ---------------r.js---------------------- -Copyright (c) 2010-2011 Dojo Foundation. All Rights Reserved. -Originally License under MIT License -------------------------------------------------------------------------- -Provided for Informational Purposes Only -MIT License + /** + * return a clone of the map + */ + StringMap.prototype.clone = function () { + return new StringMap(this.toObject()); + }; + return StringMap; +})(); +exports.StringMap = StringMap; + +},{}],44:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/** +* An Enum representing the different kind of hint +*/ +(function (CompletionKind) { + /** + * the completion entry correspond to a class name + */ + CompletionKind[CompletionKind["CLASS"] = 0] = "CLASS"; + + /** + * the completion entry correspond to an interface name + */ + CompletionKind[CompletionKind["INTERFACE"] = 1] = "INTERFACE"; + + /** + * the completion entry correspond to an enum name + */ + CompletionKind[CompletionKind["ENUM"] = 2] = "ENUM"; + + /** + * the completion entry correspond to a module name + */ + CompletionKind[CompletionKind["MODULE"] = 3] = "MODULE"; + + /** + * the completion entry correspond to a variable name + */ + CompletionKind[CompletionKind["VARIABLE"] = 4] = "VARIABLE"; + + /** + * the completion entry correspond to a mehtod name + */ + CompletionKind[CompletionKind["METHOD"] = 5] = "METHOD"; + + /** + * the completion entry correspond to a function + */ + CompletionKind[CompletionKind["FUNCTION"] = 6] = "FUNCTION"; + + /** + * the completion entry correspond to a keyword + */ + CompletionKind[CompletionKind["KEYWORD"] = 7] = "KEYWORD"; + + /** + * Any other type + */ + CompletionKind[CompletionKind["DEFAULT"] = 8] = "DEFAULT"; +})(exports.CompletionKind || (exports.CompletionKind = {})); +var CompletionKind = exports.CompletionKind; -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------------- + +},{}],45:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//-------------------------------------------------------------------------- +// +// Change record +// +//-------------------------------------------------------------------------- +/** +* enum representing the kind change possible in the fileSysem +*/ +(function (FileChangeKind) { + /** + * a file has been added + */ + FileChangeKind[FileChangeKind["ADD"] = 0] = "ADD"; + + /** + * a file has been updated + */ + FileChangeKind[FileChangeKind["UPDATE"] = 1] = "UPDATE"; + + /** + * a file has been deleted + */ + FileChangeKind[FileChangeKind["DELETE"] = 2] = "DELETE"; + + /** + * the project files has been reset + */ + FileChangeKind[FileChangeKind["RESET"] = 3] = "RESET"; +})(exports.FileChangeKind || (exports.FileChangeKind = {})); +var FileChangeKind = exports.FileChangeKind; -------------- End of ThirdPartyNotices --------------------------------------------------- */ -var TypeScript; -(function (TypeScript) { - TypeScript.DiagnosticCode = { - error_TS_0_1: "error TS{0}: {1}", - warning_TS_0_1: "warning TS{0}: {1}", - Unrecognized_escape_sequence: "Unrecognized escape sequence.", - Unexpected_character_0: "Unexpected character {0}.", - Missing_close_quote_character: "Missing close quote character.", - Identifier_expected: "Identifier expected.", - _0_keyword_expected: "'{0}' keyword expected.", - _0_expected: "'{0}' expected.", - Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.", - Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.", - Unexpected_token_0_expected: "Unexpected token; '{0}' expected.", - Trailing_separator_not_allowed: "Trailing separator not allowed.", - AsteriskSlash_expected: "'*/' expected.", - public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.", - Unexpected_token: "Unexpected token.", - Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.", - Rest_parameter_must_be_last_in_list: "Rest parameter must be last in list.", - Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.", - Required_parameter_cannot_follow_optional_parameter: "Required parameter cannot follow optional parameter.", - Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.", - Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.", - Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.", - Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.", - Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.", - Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.", - Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.", - extends_clause_already_seen: "'extends' clause already seen.", - extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.", - Classes_can_only_extend_a_single_class: "Classes can only extend a single class.", - implements_clause_already_seen: "'implements' clause already seen.", - Accessibility_modifier_already_seen: "Accessibility modifier already seen.", - _0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.", - _0_modifier_already_seen: "'{0}' modifier already seen.", - _0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.", - Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.", - super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.", - Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.", - Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.", - Implementations_are_not_allowed_in_ambient_contexts: "Implementations are not allowed in ambient contexts.", - declare_modifier_not_allowed_for_code_already_in_an_ambient_context: "'declare' modifier not allowed for code already in an ambient context.", - Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.", - Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration: "Parameter property declarations can only be used in a non-ambient constructor declaration.", - Function_implementation_expected: "Function implementation expected.", - Constructor_implementation_expected: "Constructor implementation expected.", - Function_overload_name_must_be_0: "Function overload name must be '{0}'.", - _0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.", - declare_modifier_cannot_appear_on_an_interface_declaration: "'declare' modifier cannot appear on an interface declaration.", - declare_modifier_required_for_top_level_element: "'declare' modifier required for top level element.", - Rest_parameter_cannot_be_optional: "Rest parameter cannot be optional.", - Rest_parameter_cannot_have_an_initializer: "Rest parameter cannot have an initializer.", - set_accessor_must_have_one_and_only_one_parameter: "'set' accessor must have one and only one parameter.", - set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.", - set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.", - set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.", - get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.", - Modifiers_cannot_appear_here: "Modifiers cannot appear here.", - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.", - Class_name_cannot_be_0: "Class name cannot be '{0}'.", - Interface_name_cannot_be_0: "Interface name cannot be '{0}'.", - Enum_name_cannot_be_0: "Enum name cannot be '{0}'.", - Module_name_cannot_be_0: "Module name cannot be '{0}'.", - Enum_member_must_have_initializer: "Enum member must have initializer.", - Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.", - Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.", - Module_cannot_have_multiple_export_assignments: "Module cannot have multiple export assignments.", - Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.", - module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement", - constructor_function_accessor_or_variable: "constructor, function, accessor or variable", - statement: "statement", - case_or_default_clause: "case or default clause", - identifier: "identifier", - call_construct_index_property_or_function_signature: "call, construct, index, property or function signature", - expression: "expression", - type_name: "type name", - property_or_accessor: "property or accessor", - parameter: "parameter", - type: "type", - type_parameter: "type parameter", - declare_modifier_not_allowed_on_import_declaration: "'declare' modifier not allowed on import declaration.", - Function_overload_must_be_static: "Function overload must be static.", - Function_overload_must_not_be_static: "Function overload must not be static.", - Parameter_property_declarations_cannot_be_used_in_a_constructor_overload: "Parameter property declarations cannot be used in a constructor overload.", - Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.", - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.", - Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.", - _0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.", - _0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.", - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.", - Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.", - Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.", - Duplicate_identifier_0: "Duplicate identifier '{0}'.", - The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", - The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", - super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.", - The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.", - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?", - Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.", - Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.", - Value_of_type_0_is_not_indexable_by_type_1: "Value of type '{0}' is not indexable by type '{1}'.", - Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.", - Operator_0_cannot_be_applied_to_types_1_and_2_3: "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}", - Cannot_convert_0_to_1: "Cannot convert '{0}' to '{1}'.", - Cannot_convert_0_to_1_NL_2: "Cannot convert '{0}' to '{1}':{NL}{2}", - Expected_var_class_interface_or_module: "Expected var, class, interface, or module.", - Operator_0_cannot_be_applied_to_type_1: "Operator '{0}' cannot be applied to type '{1}'.", - Getter_0_already_declared: "Getter '{0}' already declared.", - Setter_0_already_declared: "Setter '{0}' already declared.", - Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.", - Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.", - Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.", - Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.", - Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.", - Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.", - Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.", - Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.", - Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.", - Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.", - Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.", - Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.", - Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.", - Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.", - Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.", - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.", - Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.", - Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.", - Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.", - Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.", - Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}", - Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.", - Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.", - Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.", - Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.", - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.", - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.", - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.", - Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.", - Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.", - Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.", - Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.", - Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.", - Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.", - Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.", - Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.", - Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.", - Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.", - Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.", - Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.", - Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.", - Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.", - Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.", - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", - A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.", - Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.", - Unable_to_resolve_external_module_0: "Unable to resolve external module '{0}'.", - Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.", - A_class_may_only_extend_another_class: "A class may only extend another class.", - A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.", - An_interface_may_only_extend_another_class_or_interface: "An interface may only extend another class or interface.", - Unable_to_resolve_type: "Unable to resolve type.", - Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.", - Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.", - Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.", - Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.", - Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}", - Invalid_new_expression: "Invalid 'new' expression.", - Call_signatures_used_in_a_new_expression_must_have_a_void_return_type: "Call signatures used in a 'new' expression must have a 'void' return type.", - Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.", - Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2: "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.", - Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.", - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.", - Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.", - Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).", - Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.", - Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.", - The_property_0_does_not_exist_on_value_of_type_1: "The property '{0}' does not exist on value of type '{1}'.", - Could_not_find_symbol_0: "Could not find symbol '{0}'.", - get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.", - this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.", - Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.", - Class_0_is_recursively_referenced_as_a_base_type_of_itself: "Class '{0}' is recursively referenced as a base type of itself.", - Interface_0_is_recursively_referenced_as_a_base_type_of_itself: "Interface '{0}' is recursively referenced as a base type of itself.", - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.", - super_cannot_be_referenced_in_non_derived_classes: "'super' cannot be referenced in non-derived classes.", - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.", - Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.", - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.", - _0_1_is_inaccessible: "'{0}.{1}' is inaccessible.", - this_cannot_be_referenced_within_module_bodies: "'this' cannot be referenced within module bodies.", - Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.", - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type: "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.", - Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.", - Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.", - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.", - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.", - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.", - Setters_cannot_return_a_value: "Setters cannot return a value.", - Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.", - Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.", - Type_0_does_not_have_type_parameters: "Type '{0}' does not have type parameters.", - Getters_must_return_a_value: "Getters must return a value.", - Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.", - Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.", - Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.", - Cannot_resolve_return_type_reference: "Cannot resolve return type reference.", - Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.", - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.", - All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.", - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.", - Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}", - Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}", - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.", - this_cannot_be_referenced_in_static_initializers_in_a_class_body: "'this' cannot be referenced in static initializers in a class body.", - Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}", - Duplicate_overload_signature_for_0: "Duplicate overload signature for '{0}'.", - Duplicate_constructor_overload_signature: "Duplicate constructor overload signature.", - Duplicate_overload_call_signature: "Duplicate overload call signature.", - Duplicate_overload_construct_signature: "Duplicate overload construct signature.", - Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.", - Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}", - Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.", - Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.", - Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.", - Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.", - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.", - this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.", - Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.", - Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.", - Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.", - A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.", - Rest_parameters_must_be_array_types: "Rest parameters must be array types.", - Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.", - Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.", - Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.", - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}", - All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.", - All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}", - Generic_type_references_must_include_all_type_arguments: "Generic type references must include all type arguments.", - Default_arguments_are_only_allowed_in_implementation: "Default arguments are only allowed in implementation.", - Overloads_cannot_differ_only_by_return_type: "Overloads cannot differ only by return type.", - Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.", - Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.", - Could_not_find_symbol_0_in_module_1: "Could not find symbol '{0}' in module '{1}'.", - Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.", - Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.", - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.", - Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.", - Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.", - Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}", - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.", - Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.", - All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.", - super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.", - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.", - Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.", - Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.", - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.", - Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions: "Could not find the best common type of types of all return statement expressions.", - Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.", - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.", - continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.", - break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.", - Jump_target_not_found: "Jump target not found.", - Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.", - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.", - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.", - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.", - TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.", - TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}", - TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.", - TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.", - TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.", - TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.", - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.", - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.", - Type_of_conditional_0_must_be_identical_to_1_or_2: "Type of conditional '{0}' must be identical to '{1}' or '{2}'.", - Type_of_conditional_0_must_be_identical_to_1_2_or_3: "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.", - Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.", - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.", - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.", - Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.", - Duplicate_string_index_signature: "Duplicate string index signature.", - Duplicate_number_index_signature: "Duplicate number index signature.", - All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.", - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.", - Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.", - Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.", - Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}", - Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.", - Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.", - Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.", - Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.", - Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.", - Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.", - Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.", - Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.", - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}", - Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.", - Type_reference_must_refer_to_type: "Type reference must refer to type.", - In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.", - _0_overload_s: " (+ {0} overload(s))", - Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.", - Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.", - Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}", - Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.", - Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.", - Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.", - Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}", - Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}", - Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}", - Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.", - Current_host_does_not_support_0_option: "Current host does not support '{0}' option.", - ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'", - Module_code_generation_0_not_supported: "Module code generation '{0}' not supported.", - Could_not_find_file_0: "Could not find file: '{0}'.", - A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.", - Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.", - Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.", - Emit_Error_0: "Emit Error: {0}.", - Cannot_read_file_0_1: "Cannot read file '{0}': {1}", - Unsupported_file_encoding: "Unsupported file encoding.", - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form or -. For example '{0}' or '{1}'.", - Unsupported_locale_0: "Unsupported locale: '{0}'.", - Execution_Failed_NL: "Execution Failed.{NL}", - Invalid_call_to_up: "Invalid call to 'up'", - Invalid_call_to_down: "Invalid call to 'down'", - Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.", - Unknown_option_0: "Unknown option '{0}'", - Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.", - Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}", - Could_not_delete_file_0: "Could not delete file '{0}'", - Could_not_create_directory_0: "Could not create directory '{0}'", - Error_while_executing_file_0: "Error while executing file '{0}': ", - Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.", - Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.", - Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.", - Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.", - Option_0_specified_without_1: "Option '{0}' specified without '{1}'", - codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.", - Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.", - Generates_corresponding_0_file: "Generates corresponding {0} file.", - Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.", - Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.", - Watch_input_files: "Watch input files.", - Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.", - Do_not_emit_comments_to_output: "Do not emit comments to output.", - Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.", - Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'", - Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'", - Print_this_message: "Print this message.", - Print_the_compiler_s_version_0: "Print the compiler's version: {0}", - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.", - Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'", - Syntax_0: "Syntax: {0}", - options: "options", - file1: "file", - Examples: "Examples:", - Options: "Options:", - Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.", - Version_0: "Version {0}", - Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.", - NL_Recompiling_0: "{NL}Recompiling ({0}):", - STRING: "STRING", - KIND: "KIND", - file2: "FILE", - VERSION: "VERSION", - LOCATION: "LOCATION", - DIRECTORY: "DIRECTORY", - NUMBER: "NUMBER", - Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.", - Additional_locations: "Additional locations:", - This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.", - Unknown_rule: "Unknown rule.", - Invalid_line_number_0: "Invalid line number ({0})", - Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.", - Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.", - Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.", - Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.", - Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.", - new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.", - _0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.", - Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.", - Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.", - Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.", - Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.", - Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.", - _0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.", - Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.", - Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening." - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ArrayUtilities = (function () { - function ArrayUtilities() { - } - ArrayUtilities.isArray = function (value) { - return Object.prototype.toString.apply(value, []) === '[object Array]'; - }; + +},{}],46:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// Logger +// +//-------------------------------------------------------------------------- +/** +* hold the configured log level +*/ +var currentLogLevel = 1 /* error */; + +/** +* return true if the logging level is superior or equal to information +*/ +function information() { + return currentLogLevel >= 4 /* information */; +} +exports.information = information; - ArrayUtilities.sequenceEquals = function (array1, array2, equals) { - if (array1 === array2) { - return true; - } +/** +* return true if the logging level is superior or equal to debug +*/ +function debug() { + return currentLogLevel >= 3 /* debug */; +} +exports.debug = debug; - if (array1 === null || array2 === null) { - return false; - } +/** +* return true if the logging level is superior or equal to warning +*/ +function warning() { + return currentLogLevel >= 2 /* warning */; +} +exports.warning = warning; - if (array1.length !== array2.length) { - return false; - } +/** +* return true if the logging level is superior or equal to error +*/ +function error() { + return currentLogLevel >= 1 /* error */; +} +exports.error = error; - for (var i = 0, n = array1.length; i < n; i++) { - if (!equals(array1[i], array2[i])) { - return false; - } - } +/** +* return true if the logging level is superior or equal to fatal +*/ +function fatal() { + return currentLogLevel >= 0 /* fatal */; +} +exports.fatal = fatal; - return true; - }; +/** +* log the given string +*/ +function log(s) { + console.log(s); +} +exports.log = log; + +/** +* Logging level +*/ +(function (Level) { + Level[Level["fatal"] = 0] = "fatal"; + Level[Level["error"] = 1] = "error"; + Level[Level["warning"] = 2] = "warning"; + Level[Level["debug"] = 3] = "debug"; + Level[Level["information"] = 4] = "information"; +})(exports.Level || (exports.Level = {})); +var Level = exports.Level; + +/** +* set the current log level, accepted level are : +* 'information', +* 'debug', +* 'warning', +* 'error', +* 'fatal' +*/ +function setLogLevel(level) { + currentLogLevel = Level[level]; +} +exports.setLogLevel = setLogLevel; + +/** +* base class reusing the logger for typescript +*/ +var LogingClass = (function () { + function LogingClass() { + this.information = exports.information; + this.debug = exports.debug; + this.warning = exports.warning; + this.error = exports.error; + this.fatal = exports.fatal; + this.log = exports.log; + } + return LogingClass; +})(); +exports.LogingClass = LogingClass; + +},{}],47:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var Promise = require('bluebird'); + +/** +* A simple Promise Queue +*/ +var PromiseQueue = (function () { + function PromiseQueue() { + var _this = this; + /** + * true if the queue has been initialized + */ + this.initialized = false; + this.promise = new Promise(function (resolve) { + _this.initializer = resolve; + }); + } + /** + * initialize the queue subsequent call reset the queue + * + * @param val the value passed as initialial result + */ + PromiseQueue.prototype.init = function (val) { + if (this.initialized) { + this.promise = Promise.cast(val); + } else { + this.initialized = true; + this.initializer(val); + return this.promise; + } + }; - ArrayUtilities.contains = function (array, value) { - for (var i = 0; i < array.length; i++) { - if (array[i] === value) { - return true; - } + /** + * enqueue an action + */ + PromiseQueue.prototype.then = function (action) { + return this.promise = this.promise.then(function () { + return action(); + }, function () { + return action(); + }); + }; + return PromiseQueue; +})(); + +module.exports = PromiseQueue; + +},{"bluebird":5}],48:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; + +var Signal = (function () { + function Signal() { + /** + * list of listeners that have been suscribed to this signal + */ + this.listeners = []; + /** + * Priorities corresponding to the listeners + */ + this.priorities = []; + } + /** + * Subscribes a listener for the signal. + * + * @params listener the callback to call when events are dispatched + * @params priority an optional priority for this signal + */ + Signal.prototype.add = function (listener, priority) { + if (typeof priority === "undefined") { priority = 0; } + var index = this.listeners.indexOf(listener); + if (index !== -1) { + this.priorities[index] = priority; + return; + } + for (var i = 0, l = this.priorities.length; i < l; i++) { + if (this.priorities[i] < priority) { + this.priorities.splice(i, 0, priority); + this.listeners.splice(i, 0, listener); + return; } + } + this.priorities.push(priority); + this.listeners.push(listener); + }; - return false; - }; + /** + * unsubscribe a listener for the signal + * + * @params listener the previously subscribed listener + */ + Signal.prototype.remove = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) { + this.priorities.splice(index, 1); + this.listeners.splice(index, 1); + } + }; - ArrayUtilities.groupBy = function (array, func) { - var result = {}; + /** + * dispatch an event + * + * @params parameter the parameter attached to the event dispatching + */ + Signal.prototype.dispatch = function (parameter) { + var hasBeenCanceled = this.listeners.every(function (listener) { + var result = listener(parameter); + return result !== false; + }); - for (var i = 0, n = array.length; i < n; i++) { - var v = array[i]; - var k = func(v); + return hasBeenCanceled; + }; - var list = result[k] || []; - list.push(v); - result[k] = list; - } + /** + * Remove all listener from the signal + */ + Signal.prototype.clear = function () { + this.listeners = []; + this.priorities = []; + }; - return result; - }; + /** + * @return true if the listener has been subsribed to this signal + */ + Signal.prototype.hasListeners = function () { + return this.listeners.length > 0; + }; + return Signal; +})(); +exports.Signal = Signal; + +},{}],49:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +/** +* helper function that valid a config file +* @param config the config object to validate +*/ +function validateTypeScriptProjectConfig(config) { + if (!config) { + return false; + } + if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { + return false; + } + if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { + return false; + } + if (config.sourceRoot && typeof config.sourceRoot !== 'string') { + return false; + } + if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { + return typeof pattern === 'string'; + })) { + return false; + } - ArrayUtilities.distinct = function (array, equalsFn) { - var result = []; + return true; +} +exports.validateTypeScriptProjectConfig = validateTypeScriptProjectConfig; + +/** +* Default configuration for typescript project +*/ +exports.typeScriptProjectConfigDefault = { + noLib: false, + target: 'es3', + module: 'none', + noImplicitAny: false +}; + +},{}],50:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var path = require('path'); + +/** +* assign all properties of a list of object to an object +* @param target the object that will receive properties +* @param items items which properties will be assigned to a target +*/ +function assign(target) { + var items = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + items[_i] = arguments[_i + 1]; + } + return items.reduce(function (target, source) { + return Object.keys(source).reduce(function (target, key) { + target[key] = source[key]; + return target; + }, target); + }, target); +} +exports.assign = assign; + +/** +* clone an object (shallow) +* @param target the object to clone +*/ +function clone(target) { + return exports.assign(Array.isArray(target) ? [] : {}, target); +} +exports.clone = clone; + +/** +* clone an object (deep) +* +* @param target the object to clone +*/ +function deepClone(target) { + return Object.keys(target).reduce(function (result, key) { + var value = target[key]; + if (typeof value === 'object') { + value = exports.deepClone(value); + } + result[key] = value; + return result; + }, Array.isArray(target) ? [] : {}); +} +exports.deepClone = deepClone; + +/** +* retrieve all enumerable properties of an object in the prototype chain +* +* @param target the object to which we will retrieve properties +*/ +function getEnumerablePropertyNames(target) { + var result = []; + for (var key in target) { + result.push(key); + } + return result; +} +exports.getEnumerablePropertyNames = getEnumerablePropertyNames; + +/** +* merge multiple array in one +* +* @param array an array of array to be flattened +*/ +function mergeAll(array) { + var results = []; + array.forEach(function (subArray) { + Array.prototype.push.apply(results, subArray); + }); + + return results; +} +exports.mergeAll = mergeAll; +; + +/** +* browserify path.resolve is buggy on windows +*/ +function pathResolve(from, to) { + var result = path.resolve(from, to); + var index = result.indexOf(from[0]); + return result.slice(index); +} +exports.pathResolve = pathResolve; + +},{"path":1}],51:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +//-------------------------------------------------------------------------- +// +// WorkerBridge +// +//-------------------------------------------------------------------------- +var utils = require('./utils'); +var collections = require('./collections'); +var signal = require('./signal'); +var Promise = require('bluebird'); + +/** +* list of operations that can be requested +*/ +var Operation; +(function (Operation) { + Operation[Operation["REQUEST"] = 0] = "REQUEST"; + Operation[Operation["RESPONSE"] = 1] = "RESPONSE"; + Operation[Operation["ERROR"] = 2] = "ERROR"; + Operation[Operation["EXPOSE"] = 3] = "EXPOSE"; + Operation[Operation["SIGNAL"] = 4] = "SIGNAL"; +})(Operation || (Operation = {})); + +/** +* type of function exposed +*/ +var Type; +(function (Type) { + Type[Type["FUNCTION"] = 0] = "FUNCTION"; + Type[Type["SIGNAL"] = 1] = "SIGNAL"; +})(Type || (Type = {})); + +/** +* create a descriptor for a map of exposed services +* +* @param services +* @param observables +* @param baseKeys +*/ +function createProxyDescriptor(services, signals, baseKeys) { + if (typeof baseKeys === "undefined") { baseKeys = []; } + if (baseKeys.length > 5) { + return {}; + } + return utils.getEnumerablePropertyNames(services).reduce(function (descriptor, key) { + var value = services[key], keys = baseKeys.concat(key); + if (typeof value === 'function') { + descriptor[key] = 0 /* FUNCTION */; + } else if (typeof value === 'object') { + if (value instanceof signal.Signal) { + descriptor[key] = 1 /* SIGNAL */; + signals[keys.join('.')] = value; + } else if (!Array.isArray(value)) { + descriptor[key] = createProxyDescriptor(value, signals, keys); + } + } + return descriptor; + }, {}); +} - for (var i = 0, n = array.length; i < n; i++) { - var current = array[i]; - for (var j = 0; j < result.length; j++) { - if (equalsFn(result[j], current)) { - break; - } - } +var uidHelper = 0; + +/** +* create a query factory for a proxied service method +*/ +function newQuery(chain, sendMessage, resolverMap) { + return function () { + var args = []; + for (var _i = 0; _i < (arguments.length - 0); _i++) { + args[_i] = arguments[_i + 0]; + } + var uid = 'operation' + (uidHelper++); + sendMessage({ + operation: 0 /* REQUEST */, + chain: chain, + args: args, + uid: uid + }); + return new Promise(function (resolve, reject) { + resolverMap.set(uid, { + resolve: resolve, + reject: reject + }); + }); + }; +} - if (j === result.length) { - result.push(current); - } - } +/** +* create proxy from proxy descriptor +*/ +function createProxy(descriptor, sendMessage, resolverMap, baseKeys) { + if (typeof baseKeys === "undefined") { baseKeys = []; } + return Object.keys(descriptor).reduce(function (proxy, key) { + var value = descriptor[key], keys = baseKeys.concat(key); + if (value === 0 /* FUNCTION */) { + proxy[key] = newQuery(keys, sendMessage, resolverMap); + } else if (value === 1 /* SIGNAL */) { + proxy[key] = new signal.Signal(); + } else if (typeof value === 'object') { + proxy[key] = createProxy(descriptor[key], sendMessage, resolverMap, keys); + } + return proxy; + }, {}); +} - return result; - }; +/** +* a simple bridge that will expose services from the 2 sides of a web worker +*/ +var WorkerBridge = (function () { + function WorkerBridge(/** + * target + */ + target) { + var _this = this; + this.target = target; + /** + * stack of deferred bound to a requres + */ + this.resolverMap = new collections.StringMap(); + /** + * message handler + */ + this.messageHandler = function (message) { + var data = message.data; + switch (data.operation) { + case 3 /* EXPOSE */: + _this.proxy = createProxy(data.descriptor, function (args) { + return _this.target.postMessage(args); + }, _this.resolverMap); + + _this.initResolver.resolve(_this.proxy); + break; - ArrayUtilities.min = function (array, func) { - var min = func(array[0]); + case 0 /* REQUEST */: + new Promise(function (resolve) { + var chain = data.chain.slice(), thisObject = null, method = _this.services; + while (chain.length) { + thisObject = method; + method = method[chain.shift()]; + } + resolve(method.apply(thisObject, data.args)); + }).then(function (result) { + _this.target.postMessage({ + operation: 1 /* RESPONSE */, + chain: data.chain, + result: result, + uid: data.uid + }); + }, function (error) { + _this.target.postMessage({ + operation: 2 /* ERROR */, + chain: data.chain, + errorMessage: error instanceof Error ? error.message : error, + uid: data.uid + }); + }); - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next < min) { - min = next; - } - } + break; - return min; - }; + case 1 /* RESPONSE */: + var responseDeferred = _this.resolverMap.get(data.uid); + responseDeferred.resolve(data.result); + _this.resolverMap.delete(data.uid); + break; - ArrayUtilities.max = function (array, func) { - var max = func(array[0]); + case 2 /* ERROR */: + var errorDeferred = _this.resolverMap.get(data.uid); + errorDeferred.reject(new Error(data.errorMessage)); + _this.resolverMap.delete(data.uid); + break; - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next > max) { - max = next; - } + default: + var chain = data.chain.slice(), signal = _this.proxy; + while (chain.length) { + signal = signal[chain.shift()]; + } + signal.dispatch(data.value); } - - return max; }; + } + /** + * initialize te bridge, return a promise that resolve to the created proxy + * @param services the exposed services + */ + WorkerBridge.prototype.init = function (services) { + var _this = this; + this.services = services; + return new Promise(function (resolve, reject) { + var target = _this.target; + target.onmessage = _this.messageHandler; - ArrayUtilities.last = function (array) { - if (array.length === 0) { - throw TypeScript.Errors.argumentOutOfRange('array'); - } + var signals = {}; + target.postMessage({ + operation: 3 /* EXPOSE */, + descriptor: createProxyDescriptor(services, signals) + }); - return array[array.length - 1]; - }; + _this.signals = Object.keys(signals).map(function (key) { + var signal = signals[key]; + var handler = function (value) { + target.postMessage({ + operation: 4 /* SIGNAL */, + chain: key.split('.'), + value: value + }); + }; + signal.add(handler); + return { + signal: signal, + handler: handler + }; + }); - ArrayUtilities.lastOrDefault = function (array, predicate) { - for (var i = array.length - 1; i >= 0; i--) { - var v = array[i]; - if (predicate(v, i)) { - return v; - } - } + _this.initResolver = { resolve: resolve, reject: reject }; + }); + }; - return null; - }; + /** + * dispose the bridge + */ + WorkerBridge.prototype.dispose = function () { + this.signals.forEach(function (signalDesc) { + return signalDesc.signal.remove(signalDesc.handler); + }); + this.target.onmessage = null; + }; + return WorkerBridge; +})(); - ArrayUtilities.firstOrDefault = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (func(value, i)) { - return value; - } +module.exports = WorkerBridge; + +},{"./collections":43,"./signal":48,"./utils":50,"bluebird":5}],52:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; + + +/** +* enum listing the change kind that occur in a working set +*/ +(function (WorkingSetChangeKind) { + WorkingSetChangeKind[WorkingSetChangeKind["ADD"] = 0] = "ADD"; + WorkingSetChangeKind[WorkingSetChangeKind["REMOVE"] = 1] = "REMOVE"; +})(exports.WorkingSetChangeKind || (exports.WorkingSetChangeKind = {})); +var WorkingSetChangeKind = exports.WorkingSetChangeKind; + + + +},{}],53:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var completion = require('../commons/completion'); +var logger = require('../commons/logger'); + +var ScriptElementKind = ts.ScriptElementKind; + +/** +* implementation of the ICompletionService +*/ +var CompletionService = (function () { + /** + * @param projectManager the Project manager used by the service to retrieve project + */ + function CompletionService(projectManager) { + this.projectManager = projectManager; + } + /** + * Retrieve completion proposal at a given point in a given file + * @param fileName the absolute path of the file + * @param position in the file where you want to retrieve completion proposal + * + * @return a promise resolving to a list of proposals + */ + CompletionService.prototype.getCompletionAtPosition = function (fileName, position) { + var _this = this; + return this.projectManager.getProjectForFile(fileName).then(function (project) { + var documentRegistry = project.getDocumentRegistry(), languageService = project.getLanguageService(), languageServiceHost = project.getLanguageServiceHost(), index = languageServiceHost.getIndexFromPos(fileName, position), completionInfo = languageService.getCompletionsAtPosition(fileName, index, true), typeScriptEntries = completionInfo && completionInfo.entries; + + if (!typeScriptEntries) { + return { entries: [], match: '' }; + } + + var sourceUnit = documentRegistry.acquireDocument(fileName, languageServiceHost.getCompilationSettings(), languageServiceHost.getScriptSnapshot(fileName), languageServiceHost.getScriptVersion(fileName), languageServiceHost.getScriptIsOpen(fileName), project.getReferencedOrImportedFiles(fileName)).getSourceUnit(), currentToken = TypeScript.Syntax.findTokenOnLeft(sourceUnit, index), match; + + if (currentToken && _this.isValidTokenKind(currentToken.kind())) { + match = currentToken.fullText(); + if (currentToken.leadingTrivia()) { + match = match.substr(currentToken.leadingTriviaWidth()); + } + + if (currentToken.trailingTrivia()) { + match = match.substr(0, match.length - currentToken.trailingTriviaWidth()); + } + + typeScriptEntries = typeScriptEntries.filter(function (entry) { + return entry.name && entry.name.toLowerCase().indexOf(match.toLowerCase()) === 0; + }); } - return null; - }; + typeScriptEntries.sort(function (entry1, entry2) { + var match1 = entry1 ? entry1.name.indexOf(match) : -1, match2 = entry2 ? entry2.name.indexOf(match) : -1; + if (match1 === 0 && match2 !== 0) { + return -1; + } else if (match2 === 0 && match1 !== 0) { + return 1; + } else { + var name1 = entry1 && entry1.name.toLowerCase(), name2 = entry2 && entry2.name.toLowerCase(); - ArrayUtilities.first = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (!func || func(value, i)) { - return value; + if (name1 < name2) { + return -1; + } else if (name1 > name2) { + return 1; + } else { + return 0; + } } - } - - throw TypeScript.Errors.invalidOperation(); - }; + }); - ArrayUtilities.sum = function (array, func) { - var result = 0; + var completionEntries = typeScriptEntries.map(function (typeScriptEntry) { + var entryInfo = languageService.getCompletionEntryDetails(fileName, index, typeScriptEntry.name), completionEntry = { + name: typeScriptEntry.name, + kind: 8 /* DEFAULT */, + type: entryInfo && entryInfo.type, + doc: entryInfo && entryInfo.docComment + }; - for (var i = 0, n = array.length; i < n; i++) { - result += func(array[i]); - } + switch (typeScriptEntry.kind) { + case ScriptElementKind.unknown: + case ScriptElementKind.primitiveType: + case ScriptElementKind.scriptElement: + break; + case ScriptElementKind.keyword: + completionEntry.kind = 7 /* KEYWORD */; + break; - return result; - }; + case ScriptElementKind.classElement: + completionEntry.kind = 0 /* CLASS */; + break; + case ScriptElementKind.interfaceElement: + completionEntry.kind = 1 /* INTERFACE */; + break; + case ScriptElementKind.enumElement: + completionEntry.kind = 2 /* ENUM */; + break; + case ScriptElementKind.moduleElement: + completionEntry.kind = 3 /* MODULE */; + break; - ArrayUtilities.select = function (values, func) { - var result = new Array(values.length); + case ScriptElementKind.memberVariableElement: + case ScriptElementKind.variableElement: + case ScriptElementKind.localVariableElement: + case ScriptElementKind.parameterElement: + completionEntry.kind = 4 /* VARIABLE */; + break; - for (var i = 0; i < values.length; i++) { - result[i] = func(values[i]); - } + case ScriptElementKind.memberFunctionElement: + case ScriptElementKind.functionElement: + case ScriptElementKind.localFunctionElement: + completionEntry.kind = 6 /* FUNCTION */; + break; - return result; - }; + case ScriptElementKind.typeParameterElement: + case ScriptElementKind.constructorImplementationElement: + case ScriptElementKind.constructSignatureElement: + case ScriptElementKind.callSignatureElement: + case ScriptElementKind.indexSignatureElement: + case ScriptElementKind.memberGetAccessorElement: + case ScriptElementKind.memberSetAccessorElement: + if (logger.information()) { + logger.log('un handled ScriptElementKind in completion list: ' + typeScriptEntry.kind); + } + break; + } - ArrayUtilities.where = function (values, func) { - var result = new Array(); + return completionEntry; + }); - for (var i = 0; i < values.length; i++) { - if (func(values[i])) { - result.push(values[i]); - } - } + return { + entries: completionEntries, + match: match + }; + }).catch(function () { + return ({ + entries: [], + match: '' + }); + }); + }; - return result; - }; + /** + * helper method return true if the token correspond to an 'completable' token + */ + CompletionService.prototype.isValidTokenKind = function (tokenKind) { + return tokenKind === 11 /* IdentifierName */ || (tokenKind >= 15 /* BreakKeyword */ && tokenKind < 70 /* OpenBraceToken */); + }; + return CompletionService; +})(); - ArrayUtilities.any = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (func(array[i])) { - return true; - } +module.exports = CompletionService; + +},{"../commons/completion":44,"../commons/logger":46}],54:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +/** +* implementation of the IDefinitionService +*/ +var DefinitionService = (function () { + /** + * @param projectManager the Project manager used by the service to retrieve project + */ + function DefinitionService(projectManager) { + this.projectManager = projectManager; + } + /** + * retrieve definition info of a symbol at a given position in a given file + * @param fileName the absolute path of the file + * @param position in the file where you want to retrieve definition info + * + * @return a promise resolving to a list of definition info + */ + DefinitionService.prototype.getDefinitionForFile = function (fileName, position) { + return this.projectManager.getProjectForFile(fileName).then(function (project) { + var languageService = project.getLanguageService(), languageServiceHost = project.getLanguageServiceHost(), index = languageServiceHost.getIndexFromPos(fileName, position); + if (index < 0) { + return []; } + return languageService.getDefinitionAtPosition(fileName, index).map(function (definition) { + var startPos = languageServiceHost.indexToPosition(definition.fileName, definition.minChar), endPos = languageServiceHost.indexToPosition(definition.fileName, definition.limChar); + return { + name: (definition.containerName ? (definition.containerName + '.') : '') + definition.name, + lineStart: startPos.line, + charStart: startPos.ch, + lineEnd: endPos.line, + charEnd: endPos.ch, + fileName: definition.fileName + }; + }); + }).catch(function () { + return []; + }); + }; + return DefinitionService; +})(); - return false; - }; +module.exports = DefinitionService; + +},{}],55:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +/** +* brackets Error message type +*/ +var Type = { + /** Unambiguous error, such as a syntax error */ + ERROR: 'problem_type_error', + /** Maintainability issue, probable error / bad smell, etc. */ + WARNING: 'problem_type_warning', + /** Inspector unable to continue, code too complex for static analysis, etc. Not counted in error/warning tally. */ + META: 'problem_type_meta' +}; - ArrayUtilities.all = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (!func(array[i])) { - return false; - } +/** +* implementation of the IErrorService +*/ +var ErrorService = (function () { + /** + * @param projectManager the Project manager used by the service to retrieve project + */ + function ErrorService(projectManager) { + this.projectManager = projectManager; + } + /** + * Retrieve a list of errors for a given file + * @param fileName the absolute path of the file + * + * @return a promise resolving to a list of errors + */ + ErrorService.prototype.getErrorsForFile = function (fileName) { + var _this = this; + return this.projectManager.getProjectForFile(fileName).then(function (project) { + var languageService = project.getLanguageService(), syntacticDiagnostics = languageService.getSyntacticDiagnostics(fileName), errors = _this.diagnosticToError(project.getLanguageServiceHost(), syntacticDiagnostics); + + if (errors.length === 0) { + var semanticDiagnostic = languageService.getSemanticDiagnostics(fileName); + errors = _this.diagnosticToError(project.getLanguageServiceHost(), semanticDiagnostic); } - return true; - }; - - ArrayUtilities.binarySearch = function (array, value) { - var low = 0; - var high = array.length - 1; + return { + errors: errors, + aborted: false + }; + }).catch(function () { + return { + errors: [], + aborted: false + }; + }); + }; - while (low <= high) { - var middle = low + ((high - low) >> 1); - var midValue = array[middle]; + /** + * convert TypeScript Diagnostic to brackets error format + * @param diagnostics + */ + ErrorService.prototype.diagnosticToError = function (languageServiceHost, diagnostics) { + if (!diagnostics) { + return []; + } + return diagnostics.map(function (diagnostic) { + var type; - if (midValue === value) { - return middle; - } else if (midValue > value) { - high = middle - 1; - } else { - low = middle + 1; - } + switch (diagnostic.category) { + case 1 /* Error */: + type = Type.ERROR; + break; + case 0 /* Warning */: + type = Type.WARNING; + break; + case 3 /* NoPrefix */: + type = Type.ERROR; + break; + case 2 /* Message */: + type = Type.META; + break; } - return ~low; - }; + return { + pos: languageServiceHost.indexToPosition(diagnostic.file.filename, diagnostic.start), + endpos: languageServiceHost.indexToPosition(diagnostic.file.filename, diagnostic.start + diagnostic.length), + message: diagnostic.messageText, + type: type + }; + }); + }; + return ErrorService; +})(); - ArrayUtilities.createArray = function (length, defaultValue) { - var result = new Array(length); - for (var i = 0; i < length; i++) { - result[i] = defaultValue; - } +module.exports = ErrorService; + +},{}],56:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var FormattingService = (function () { + /** + * @param projectManager the Project manager used by the service to retrieve project + */ + function FormattingService(projectManager) { + this.projectManager = projectManager; + } + /** + * Retrieve formating information for a givent file + * @param fileName the absolute path of the file + * @param options formation options + * @param startPos an option start position for the formating range + * @param endPos an optional end position for the formating range + * + * @return a promise resolving to a formating range info + */ + FormattingService.prototype.getFormatingForFile = function (fileName, options, startPos, endPos) { + return this.projectManager.getProjectForFile(fileName).then(function (project) { + var languageServiceHost = project.getLanguageServiceHost(), languageService = project.getLanguageService(), minChar, limChar; + + if (!startPos || !endPos) { + minChar = 0; + limChar = project.getLanguageServiceHost().getScriptContent(fileName).length - 1; + } else { + minChar = languageServiceHost.getIndexFromPos(fileName, startPos); + limChar = languageServiceHost.getIndexFromPos(fileName, endPos); + } + + var result = languageService.getFormattingEditsForRange(fileName, minChar, limChar, options); + + return result && result.reverse(); + }); + }; + return FormattingService; +})(); - return result; - }; +module.exports = FormattingService; + +},{}],57:[function(require,module,exports){ +(function (global){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +// inject global in the worker +importScripts('../../third_party/typescript/typescriptServices.js'); +global.window = self; + +var TypeScriptProjectManager = require('./projectManager'); +var TypeScriptProject = require('./project'); +var ErrorService = require('./errorService'); +var DefinitionService = require('./definitionService'); +var CompletionService = require('./completionService'); +var FormattingService = require('./formattingService'); +var LexicalStructureService = require('./lexicalStructureService'); +var WorkerBridge = require('../commons/workerBridge'); +var logger = require('../commons/logger'); + +//instantiate the different service +var projectManager = new TypeScriptProjectManager(), errorService = new ErrorService(projectManager), completionService = new CompletionService(projectManager), definitionService = new DefinitionService(projectManager), lexicalStructureService = new LexicalStructureService(projectManager), formattingService = new FormattingService(projectManager), bridge = new WorkerBridge(self); + +//expose the worker services +bridge.init({ + errorService: errorService, + completionService: completionService, + definitionService: definitionService, + lexicalStructureService: lexicalStructureService, + formattingService: formattingService +}).then(function (proxy) { + //inject main services into worker components + proxy.getTypeScriptLocation().then(function (location) { + proxy.getLogLevel().then(function (logLevel) { + self.console = proxy.console; + logger.setLogLevel(logLevel); + projectManager.init(location, proxy.preferencesManager, proxy.fileSystem, proxy.workingSet, TypeScriptProject.newProject).then(function () { + if (logger.information()) { + logger.log('TSWorker : initilialization complete'); + } + }); + }); + }); +}); + +}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../commons/logger":46,"../commons/workerBridge":51,"./completionService":53,"./definitionService":54,"./errorService":55,"./formattingService":56,"./lexicalStructureService":59,"./project":60,"./projectManager":61}],58:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var logger = require('../commons/logger'); +var collections = require('../commons/collections'); +var path = require('path'); +var utils = require('../commons/utils'); - ArrayUtilities.grow = function (array, length, defaultValue) { - var count = length - array.length; - for (var i = 0; i < count; i++) { - array.push(defaultValue); - } - }; +var cancellationToken = { + isCancellationRequested: function () { + return false; + } +}; - ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) { - for (var i = 0; i < length; i++) { - destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]; - } - }; +/** +* ILanguage Service host implementation +*/ +var LanguageServiceHost = (function (_super) { + __extends(LanguageServiceHost, _super); + function LanguageServiceHost() { + _super.apply(this, arguments); + /** + * a map associating file absolute path to ScriptInfo + */ + this.fileNameToScript = new collections.StringMap(); + } + /** + * add a script to the host + * + * @param fileName the absolute path of the file + * @param content the file content + */ + LanguageServiceHost.prototype.addScript = function (fileName, content) { + var script = new ScriptInfo(fileName, content); + this.fileNameToScript.set(fileName, script); + }; - ArrayUtilities.indexOf = function (array, predicate) { - for (var i = 0, n = array.length; i < n; i++) { - if (predicate(array[i])) { - return i; - } - } + /** + * remove a script from the host + * + * @param fileName the absolute path of the file + */ + LanguageServiceHost.prototype.removeScript = function (fileName) { + this.fileNameToScript.delete(fileName); + }; - return -1; - }; - return ArrayUtilities; - })(); - TypeScript.ArrayUtilities = ArrayUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitVector) { - var pool = []; - var Constants; - (function (Constants) { - Constants[Constants["MaxBitsPerEncodedNumber"] = 30] = "MaxBitsPerEncodedNumber"; - Constants[Constants["BitsPerEncodedBiStateValue"] = 1] = "BitsPerEncodedBiStateValue"; + /** + * remove all script from the host + * + * @param fileName the absolute path of the file + */ + LanguageServiceHost.prototype.removeAll = function () { + this.fileNameToScript.clear(); + }; - Constants[Constants["BitsPerEncodedTriStateValue"] = 2] = "BitsPerEncodedTriStateValue"; + /** + * update a script + * + * @param fileName the absolute path of the file + * @param content the new file content + */ + LanguageServiceHost.prototype.updateScript = function (fileName, content) { + var script = this.fileNameToScript.get(fileName); + if (script) { + script.updateContent(content); + return; + } + throw new Error('No script with name \'' + fileName + '\''); + }; - Constants[Constants["BiStateEncodedTrue"] = 1] = "BiStateEncodedTrue"; - Constants[Constants["BiStateClearBitsMask"] = 1] = "BiStateClearBitsMask"; + /** + * edit a script + * + * @param fileName the absolute path of the file + * @param minChar the index in the file content where the edition begins + * @param limChar the index in the file content where the edition ends + * @param newText the text inserted + */ + LanguageServiceHost.prototype.editScript = function (fileName, minChar, limChar, newText) { + var script = this.fileNameToScript.get(fileName); + if (script) { + script.editContent(minChar, limChar, newText); + return; + } - Constants[Constants["TriStateEncodedFalse"] = 1] = "TriStateEncodedFalse"; - Constants[Constants["TriStateEncodedTrue"] = 2] = "TriStateEncodedTrue"; - Constants[Constants["TriStateClearBitsMask"] = 3] = "TriStateClearBitsMask"; - })(Constants || (Constants = {})); + throw new Error('No script with name \'' + fileName + '\''); + }; - var BitVectorImpl = (function () { - function BitVectorImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.bits = []; - } - BitVectorImpl.prototype.computeTriStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; + /** + * set 'open' status of a script + * + * @param fileName the absolute path of the file + * @param isOpen open status + */ + LanguageServiceHost.prototype.setScriptIsOpen = function (fileName, isOpen) { + var script = this.fileNameToScript.get(fileName); + if (script) { + script.isOpen = isOpen; + return; + } - return (index / encodedValuesPerNumber) >>> 0; - }; + throw new Error('No script with name \'' + fileName + '\''); + }; - BitVectorImpl.prototype.computeBiStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; + /** + * the the language service host compilation settings + * + * @param the settings to be applied to the host + */ + LanguageServiceHost.prototype.setCompilationSettings = function (settings) { + this.compilationSettings = Object.freeze(utils.clone(settings)); + }; - return (index / encodedValuesPerNumber) >>> 0; - }; + /** + * retrieve the content of a given script + * + * @param fileName the absolute path of the file + */ + LanguageServiceHost.prototype.getScriptContent = function (fileName) { + var script = this.fileNameToScript.get(fileName); + if (script) { + return script.content; + } + return null; + }; - BitVectorImpl.prototype.computeTriStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; + /** + * return an index from a positon in line/char + * + * @param path the path of the file + * @param position the position + */ + LanguageServiceHost.prototype.getIndexFromPos = function (fileName, position) { + var script = this.fileNameToScript.get(fileName); + if (script) { + return script.getPositionFromLine(position.line, position.ch); + } + return -1; + }; - return (index % encodedValuesPerNumber) * 2 /* BitsPerEncodedTriStateValue */; + /** + * return a positon in line/char from an index + * @param path the path of the file + * @param index the index + */ + LanguageServiceHost.prototype.indexToPosition = function (fileName, index) { + var script = this.fileNameToScript.get(fileName); + if (script) { + var tsPosition = script.getLineAndColForPositon(index); + return { + ch: tsPosition.character, + line: tsPosition.line }; + } + return null; + }; - BitVectorImpl.prototype.computeBiStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; - - return (index % encodedValuesPerNumber) * 1 /* BitsPerEncodedBiStateValue */; - }; + ////////////////////////////////////////////////////////////////////// + // ILanguageServiceShimHost implementation + // + LanguageServiceHost.prototype.getCompilationSettings = function () { + return this.compilationSettings; + }; - BitVectorImpl.prototype.valueAt = function (index) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return undefined; - } + LanguageServiceHost.prototype.getScriptFileNames = function () { + return this.fileNameToScript.keys; + }; - var bitIndex = this.computeTriStateEncodedValueIndex(index); - if (encoded & (2 /* TriStateEncodedTrue */ << bitIndex)) { - return true; - } else if (encoded & (1 /* TriStateEncodedFalse */ << bitIndex)) { - return false; - } else { - return undefined; - } - } else { - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return false; - } + LanguageServiceHost.prototype.getScriptSnapshot = function (fileName) { + var script = this.fileNameToScript.get(fileName); + if (script) { + return new ScriptSnapshot(script); + } + return null; + }; - var bitIndex = this.computeBiStateEncodedValueIndex(index); - if (encoded & (1 /* BiStateEncodedTrue */ << bitIndex)) { - return true; - } else { - return false; - } - } - }; + LanguageServiceHost.prototype.getScriptVersion = function (fileName) { + var script = this.fileNameToScript.get(fileName); + if (script) { + return script.version; + } + return 0; + }; - BitVectorImpl.prototype.setValueAt = function (index, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - TypeScript.Debug.assert(value === true || value === false || value === undefined, "value must only be true, false or undefined."); + LanguageServiceHost.prototype.getScriptIsOpen = function (fileName) { + var script = this.fileNameToScript.get(fileName); + if (script) { + return script.isOpen; + } + return false; + }; - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === undefined) { - return; - } + LanguageServiceHost.prototype.getLocalizedDiagnosticMessages = function () { + return ''; + }; - encoded = 0; - } + LanguageServiceHost.prototype.fileExists = function (s) { + return this.fileNameToScript.has(s); + }; - var bitIndex = this.computeTriStateEncodedValueIndex(index); - - var clearMask = ~(3 /* TriStateClearBitsMask */ << bitIndex); - encoded = encoded & clearMask; + LanguageServiceHost.prototype.directoryExists = function (s) { + return true; + }; - if (value === true) { - encoded = encoded | (2 /* TriStateEncodedTrue */ << bitIndex); - } else if (value === false) { - encoded = encoded | (1 /* TriStateEncodedFalse */ << bitIndex); - } + LanguageServiceHost.prototype.resolveRelativePath = function (fileName, directory) { + return utils.pathResolve(directory, fileName); + }; - this.bits[arrayIndex] = encoded; - } else { - TypeScript.Debug.assert(value === true || value === false, "value must only be true or false."); + LanguageServiceHost.prototype.getParentDirectory = function (fileName) { + return path.dirname(fileName); + }; - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === false) { - return; - } + LanguageServiceHost.prototype.getCancellationToken = function () { + return cancellationToken; + }; + return LanguageServiceHost; +})(logger.LogingClass); + +/** +* Manage a script in the language service host +*/ +var ScriptInfo = (function () { + /** + * @param fileName the absolute path of the file + * @param content the content of the file + * @param isOpen the open status of the script + */ + function ScriptInfo(fileName, content, isOpen) { + if (typeof isOpen === "undefined") { isOpen = false; } + this.version = 1; + this.editRanges = []; + this.lineMap = null; + this.fileName = fileName; + this.content = content; + this.isOpen = isOpen; + this.setContent(content); + } + /** + * update the content of the script + * + * @param newContent the new script content + */ + ScriptInfo.prototype.updateContent = function (newContent) { + this.setContent(newContent); + this.editRanges = []; + this.version++; + }; - encoded = 0; - } + /** + * edit the script content + * + * @param minChar the index in the file content where the edition begins + * @param limChar the index in the file content where the edition ends + * @param newText the text inserted + */ + ScriptInfo.prototype.editContent = function (minChar, limChar, newText) { + // Apply edits + var prefix = this.content.substring(0, minChar); + var middle = newText; + var suffix = this.content.substring(limChar); + this.setContent(prefix + middle + suffix); + + // Store edit range + new length of script + this.editRanges.push(new TypeScript.TextChangeRange(TypeScript.TextSpan.fromBounds(minChar, limChar), newText.length)); + + // Update version # + this.version++; + }; - var bitIndex = this.computeBiStateEncodedValueIndex(index); + /** + * return an index position from line an character position + * + * @param line line number + * @param character charecter poisiton in the line + */ + ScriptInfo.prototype.getPositionFromLine = function (line, character) { + return this.lineMap.getPosition(line, character); + }; - encoded = encoded & ~(1 /* BiStateClearBitsMask */ << bitIndex); + /** + * return line and chararacter position from index position + * + * @param position + */ + ScriptInfo.prototype.getLineAndColForPositon = function (position) { + var lineAndChar = { line: -1, character: -1 }; + this.lineMap.fillLineAndCharacterFromPosition(position, lineAndChar); + return lineAndChar; + }; - if (value) { - encoded = encoded | (1 /* BiStateEncodedTrue */ << bitIndex); - } + /** + * set the script content + */ + ScriptInfo.prototype.setContent = function (content) { + this.content = content; + this.lineMap = TypeScript.LineMap1.fromString(content); + }; + return ScriptInfo; +})(); - this.bits[arrayIndex] = encoded; - } - }; +/** +* ScriptSnapshot implementation +* Simply a proxy over ScriptInfo +*/ +var ScriptSnapshot = (function () { + function ScriptSnapshot(scriptInfo) { + this.lineMap = null; + this.scriptInfo = scriptInfo; + this.textSnapshot = scriptInfo.content; + this.version = scriptInfo.version; + this.editRanges = scriptInfo.editRanges.slice(0); + } + ScriptSnapshot.prototype.getText = function (start, end) { + return this.textSnapshot.substring(start, end); + }; - BitVectorImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - this.bits.length = 0; - pool.push(this); - }; - return BitVectorImpl; - })(); + ScriptSnapshot.prototype.getLength = function () { + return this.textSnapshot.length; + }; - function getBitVector(allowUndefinedValues) { - if (pool.length === 0) { - return new BitVectorImpl(allowUndefinedValues); - } + ScriptSnapshot.prototype.getLineStartPositions = function () { + if (this.lineMap === null) { + this.lineMap = TypeScript.LineMap1.fromString(this.textSnapshot); + } + return this.lineMap.lineStarts(); + }; - var vector = pool.pop(); - vector.isReleased = false; - vector.allowUndefinedValues = allowUndefinedValues; + ScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + if (scriptVersion === this.version) { + // No edits! + return TypeScript.TextChangeRange.unchanged; + } + var initialEditRangeIndex = this.editRanges.length - (this.version - scriptVersion); - return vector; + if (initialEditRangeIndex < 0) { + return null; } - BitVector.getBitVector = getBitVector; - })(TypeScript.BitVector || (TypeScript.BitVector = {})); - var BitVector = TypeScript.BitVector; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitMatrix) { - var pool = []; - var BitMatrixImpl = (function () { - function BitMatrixImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.vectors = []; - } - BitMatrixImpl.prototype.valueAt = function (x, y) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - return this.allowUndefinedValues ? undefined : false; - } + var entries = this.editRanges.slice(initialEditRangeIndex); + return TypeScript.TextChangeRange.collapseChangesAcrossMultipleVersions(entries); + }; + return ScriptSnapshot; +})(); - return vector.valueAt(y); - }; +module.exports = LanguageServiceHost; + +},{"../commons/collections":43,"../commons/logger":46,"../commons/utils":50,"path":1}],59:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +/** +* ILexical structure implementation +*/ +var LexicalStructureService = (function () { + /** + * @param projectManager the Project manager used by the service to retrieve project + */ + function LexicalStructureService(projectManager) { + this.projectManager = projectManager; + } + /** + * retrieve Lexical structure for a given file + * + * @param fileName absolute path of the file + * + * @return a Promise that resolve to a list of LexicalStructureItem + */ + LexicalStructureService.prototype.getLexicalStructureForFile = function (fileName) { + return this.projectManager.getProjectForFile(fileName).then(function (project) { + var languageServiceHost = project.getLanguageServiceHost(); + var items = project.getLanguageService().getScriptLexicalStructure(fileName) || []; + return items.map(function (item) { + return ({ + name: item.name, + containerName: item.containerName, + position: languageServiceHost.indexToPosition(fileName, item.minChar) + }); + }); + }); + }; + return LexicalStructureService; +})(); - BitMatrixImpl.prototype.setValueAt = function (x, y, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - if (value === undefined) { - return; +module.exports = LexicalStructureService; + +},{}],60:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var path = require('path'); +var minimatch = require('minimatch'); +var Promise = require('bluebird'); +var PromiseQueue = require('../commons/promiseQueue'); +var Services = TypeScript.Services; + +var collections = require('../commons/collections'); +var fs = require('../commons/fileSystem'); +var ws = require('../commons/workingSet'); +var logger = require('../commons/logger'); + +var utils = require('../commons/utils'); + +var LanguageServiceHost = require('./languageServiceHost'); + +//-------------------------------------------------------------------------- +// +// TypeScriptProject +// +//-------------------------------------------------------------------------- +/** +* class representing a typescript project, responsible of synchronizing +* languageServiceHost with the file system +*/ +var TypeScriptProject = (function () { + //------------------------------- + // constructor + //------------------------------- + /** + * @param baseDirectory the baseDirectory of the project + * @param config the project config file + * @param fileSystem the fileSystem wrapper used by the project + * @param workingSet the working set wrapper used by the project + * @param defaultLibLocation the location of the default compiler 'lib.d.ts' file + */ + function TypeScriptProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation) { + var _this = this; + this.baseDirectory = baseDirectory; + this.config = config; + this.fileSystem = fileSystem; + this.workingSet = workingSet; + this.defaultLibLocation = defaultLibLocation; + /** + * a promise queue used to run in sequence file based operation + */ + this.queue = new PromiseQueue(); + //------------------------------- + // Events Handler + //------------------------------- + /** + * handle changes in the fileSystem + */ + this.filesChangeHandler = function (changeRecords) { + _this.queue.then(function () { + changeRecords.forEach(function (record) { + switch (record.kind) { + case 0 /* ADD */: + if (_this.isProjectSourceFile(record.fileName) || _this.references.has(record.fileName)) { + _this.addFile(record.fileName); + } + break; + case 2 /* DELETE */: + if (_this.projectFilesSet.has(record.fileName)) { + _this.removeFile(record.fileName); + } + break; + case 1 /* UPDATE */: + if (_this.projectFilesSet.has(record.fileName)) { + _this.updateFile(record.fileName); + } + break; } - - vector = TypeScript.BitVector.getBitVector(this.allowUndefinedValues); - this.vectors[x] = vector; + }); + }); + }; + /** + * handle changes in the workingSet + */ + this.workingSetChangedHandler = function (changeRecord) { + _this.queue.then(function () { + switch (changeRecord.kind) { + case 0 /* ADD */: + changeRecord.paths.forEach(function (fileName) { + if (_this.projectFilesSet.has(fileName)) { + _this.languageServiceHost.setScriptIsOpen(fileName, true); + } + }); + break; + case 1 /* REMOVE */: + changeRecord.paths.forEach(function (fileName) { + if (_this.projectFilesSet.has(fileName)) { + _this.languageServiceHost.setScriptIsOpen(fileName, false); + _this.updateFile(fileName); + } + }); + break; } + }); + }; + /** + * handle document edition + */ + this.documentEditedHandler = function (record) { + _this.queue.then(function () { + if (_this.projectFilesSet.has(record.path)) { + var mustUpdate = false, oldPaths = new collections.StringSet(_this.getReferencedOrImportedFiles(record.path)), lastChange; + record.changeList.some(function (change) { + lastChange = change; + if (!change.from || !change.to) { + mustUpdate = true; + } else { + var minChar = _this.languageServiceHost.getIndexFromPos(record.path, change.from), limChar = _this.languageServiceHost.getIndexFromPos(record.path, change.to); - vector.setValueAt(y, value); - }; - - BitMatrixImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - - for (var name in this.vectors) { - if (this.vectors.hasOwnProperty(name)) { - var vector = this.vectors[name]; - vector.release(); + _this.languageServiceHost.editScript(record.path, minChar, limChar, change.text); + } + return mustUpdate; + }); + if (mustUpdate || _this.languageServiceHost.getScriptContent(record.path) !== record.documentText) { + if (logger.warning()) { + if (mustUpdate) { + logger.log('TypeScriptProject: inconsistent change descriptor: ' + JSON.stringify(lastChange)); + } else { + logger.log('TypeScriptProject: text different before and after change'); + } + } + _this.languageServiceHost.updateScript(record.path, record.documentText); } - } - - this.vectors.length = 0; - pool.push(this); - }; - return BitMatrixImpl; - })(); - - function getBitMatrix(allowUndefinedValues) { - if (pool.length === 0) { - return new BitMatrixImpl(allowUndefinedValues); - } - var matrix = pool.pop(); - matrix.isReleased = false; - matrix.allowUndefinedValues = allowUndefinedValues; + _this.updateReferences(record.path, oldPaths); + } + }); + }; + } + //------------------------------- + // public methods + //------------------------------- + /** + * Initialize the project an his component + */ + TypeScriptProject.prototype.init = function () { + var _this = this; + this.projectFilesSet = new collections.StringSet(); + this.references = new collections.StringMap(); + this.workingSet.workingSetChanged.add(this.workingSetChangedHandler); + this.workingSet.documentEdited.add(this.documentEditedHandler); + this.fileSystem.projectFilesChanged.add(this.filesChangeHandler); + + return this.queue.init(this.getTypeScriptInfosForPath(this.config.typescriptPath).then(function (typeScriptInfo) { + _this.libLocation = typeScriptInfo.libLocation; + _this.coreService = typeScriptInfo.factory.createCoreServicesShim(new logger.LogingClass()); + _this.languageServiceHost = new LanguageServiceHost(); + _this.languageServiceHost.setCompilationSettings(_this.createCompilationSettings()); + _this.documentRegistry = ts.createDocumentRegistry(); + _this.languageService = ts.createLanguageService(_this.languageServiceHost, _this.documentRegistry); + + return _this.collectFiles(); + }).then(function () { + _this.updateWorkingSet(); + })); + }; - return matrix; + /** + * update a project with a new config + */ + TypeScriptProject.prototype.update = function (config) { + var _this = this; + if (this.config.typescriptPath !== config.typescriptPath) { + return this.init(); } - BitMatrix.getBitMatrix = getBitMatrix; - })(TypeScript.BitMatrix || (TypeScript.BitMatrix = {})); - var BitMatrix = TypeScript.BitMatrix; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Constants) { - Constants[Constants["Max31BitInteger"] = 1073741823] = "Max31BitInteger"; - Constants[Constants["Min31BitInteger"] = -1073741824] = "Min31BitInteger"; - })(TypeScript.Constants || (TypeScript.Constants = {})); - var Constants = TypeScript.Constants; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (AssertionLevel) { - AssertionLevel[AssertionLevel["None"] = 0] = "None"; - AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; - AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; - AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; - })(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {})); - var AssertionLevel = TypeScript.AssertionLevel; - var Debug = (function () { - function Debug() { + if (!this.config.noLib && config.noLib) { + this.removeFile(this.libLocation); } - Debug.shouldAssert = function (level) { - return this.currentAssertionLevel >= level; - }; - Debug.assert = function (expression, message, verboseDebugInfo) { - if (typeof message === "undefined") { message = ""; } - if (typeof verboseDebugInfo === "undefined") { verboseDebugInfo = null; } - if (!expression) { - var verboseDebugString = ""; - if (verboseDebugInfo) { - verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo(); + var pojectSources = this.projectFilesSet.values.filter(function (fileName) { + return _this.isProjectSourceFile(fileName); + }); + this.config = config; + return this.queue.then(function () { + _this.languageServiceHost.setCompilationSettings(_this.createCompilationSettings()); + var promises = []; + pojectSources.forEach(function (fileName) { + if (!_this.isProjectSourceFile(fileName)) { + _this.removeFile(fileName); } + }); - throw new Error("Debug Failure. False expression: " + message + verboseDebugString); - } - }; - - Debug.fail = function (message) { - Debug.assert(false, message); - }; - Debug.currentAssertionLevel = 0 /* None */; - return Debug; - })(); - TypeScript.Debug = Debug; -})(TypeScript || (TypeScript = {})); -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TypeScript; -(function (TypeScript) { - TypeScript.LocalizedDiagnosticMessages = null; - - var Location = (function () { - function Location(fileName, lineMap, start, length) { - this._fileName = fileName; - this._lineMap = lineMap; - this._start = start; - this._length = length; - } - Location.prototype.fileName = function () { - return this._fileName; - }; + return Promise.all(promises).then(function () { + return _this.collectFiles(); + }).then(function () { + return _this.updateWorkingSet(); + }); + }); + }; - Location.prototype.lineMap = function () { - return this._lineMap; - }; + /** + * dispose the project + */ + TypeScriptProject.prototype.dispose = function () { + this.workingSet.workingSetChanged.remove(this.workingSetChangedHandler); + this.workingSet.documentEdited.remove(this.documentEditedHandler); + this.fileSystem.projectFilesChanged.remove(this.filesChangeHandler); + }; - Location.prototype.line = function () { - return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0; - }; + //------------------------------- + // exposed services + //------------------------------- + TypeScriptProject.prototype.getDocumentRegistry = function () { + return this.documentRegistry; + }; - Location.prototype.character = function () { - return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0; - }; + /** + * return the language service host of the project + */ + TypeScriptProject.prototype.getLanguageServiceHost = function () { + return this.languageServiceHost; + }; - Location.prototype.start = function () { - return this._start; - }; + /** + * return the core service used by the project + */ + TypeScriptProject.prototype.getCoreService = function () { + return this.coreService; + }; - Location.prototype.length = function () { - return this._length; - }; + /** + * return the languageService used by the project + */ + TypeScriptProject.prototype.getLanguageService = function () { + return this.languageService; + }; - Location.equals = function (location1, location2) { - return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length; - }; - return Location; - })(); - TypeScript.Location = Location; + //------------------------------- + // exposed files informations + //------------------------------- + /** + * return the set of files contained in the project + */ + TypeScriptProject.prototype.getProjectFilesSet = function () { + return new collections.StringSet(this.projectFilesSet.values); + }; - var Diagnostic = (function (_super) { - __extends(Diagnostic, _super); - function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - _super.call(this, fileName, lineMap, start, length); - this._diagnosticKey = diagnosticKey; - this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null; - this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null; + /** + * for a given path, give the relation between the project an the associated file + * @param path + */ + TypeScriptProject.prototype.getProjectFileKind = function (fileName) { + if (this.projectFilesSet.has(fileName)) { + return this.isProjectSourceFile(fileName) ? 1 /* SOURCE */ : 2 /* REFERENCE */; + } else { + return 0 /* NONE */; } - Diagnostic.prototype.toJSON = function (key) { - var result = {}; - result.start = this.start(); - result.length = this.length(); - - result.diagnosticCode = this._diagnosticKey; - - var _arguments = this.arguments(); - if (_arguments && _arguments.length > 0) { - result.arguments = _arguments; - } - - return result; - }; - - Diagnostic.prototype.diagnosticKey = function () { - return this._diagnosticKey; - }; - - Diagnostic.prototype.arguments = function () { - return this._arguments; - }; - - Diagnostic.prototype.text = function () { - return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.message = function () { - return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.additionalLocations = function () { - return this._additionalLocations || []; - }; + }; - Diagnostic.equals = function (diagnostic1, diagnostic2) { - return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { - return v1 === v2; + //------------------------------- + // private methods + //------------------------------- + /** + * Retrieve a ServiceFactory from a given typeScriptService file path + * @param typescriptPath + */ + TypeScriptProject.prototype.getTypeScriptInfosForPath = function (typescriptPath) { + var _this = this; + if (!typescriptPath) { + return Promise.cast({ + factory: new Services.TypeScriptServicesFactory(), + libLocation: this.defaultLibLocation }); - }; - - Diagnostic.prototype.info = function () { - return getDiagnosticInfoFromKey(this.diagnosticKey()); - }; - return Diagnostic; - })(Location); - TypeScript.Diagnostic = Diagnostic; - - function newLine() { - return TypeScript.Environment ? TypeScript.Environment.newLine : "\r\n"; - } - TypeScript.newLine = newLine; + } else { + var typescriptServicesFile = path.join(typescriptPath, 'typescriptServices.js'); - function getLargestIndex(diagnostic) { - var largest = -1; - var regex = /\{(\d+)\}/g; + return this.fileSystem.readFile(typescriptServicesFile).then(function (code) { + var func = new Function('var TypeScript;' + code + ';return TypeScript;'), typeScript = func(); - var match; - while (match = regex.exec(diagnostic)) { - var val = parseInt(match[1]); - if (!isNaN(val) && val > largest) { - largest = val; - } + return { + factory: new typeScript.Services.TypeScriptServicesFactory(), + libLocation: path.join(typescriptPath, 'lib.d.ts') + }; + }).catch(function () { + if (logger.error()) { + logger.log('could not retrieve typescript compiler at path: ' + typescriptPath); + } + return { + factory: new Services.TypeScriptServicesFactory(), + libLocation: _this.defaultLibLocation + }; + }); } + }; - return largest; - } + /** + * create Typescript compilation settings from config file + */ + TypeScriptProject.prototype.createCompilationSettings = function () { + var compilationSettings = {}, moduleType = this.config.module.toLowerCase(); - function getDiagnosticInfoFromKey(diagnosticKey) { - var result = TypeScript.diagnosticInformationMap[diagnosticKey]; - TypeScript.Debug.assert(result); - return result; - } + compilationSettings.noLib = this.config.noLib; + compilationSettings.noImplicitAny = this.config.noImplicitAny; + compilationSettings.sourceRoot = this.config.sourceRoot; - function getLocalizedText(diagnosticKey, args) { - if (TypeScript.LocalizedDiagnosticMessages) { - } + compilationSettings.target = this.config.target.toLowerCase() === 'es3' ? 0 /* ES3 */ : 1 /* ES5 */; - var diagnosticMessageText = TypeScript.LocalizedDiagnosticMessages ? TypeScript.LocalizedDiagnosticMessages[diagnosticKey] : diagnosticKey; - TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null); + compilationSettings.module = moduleType === 'none' ? 0 /* None */ : moduleType === 'amd' ? 2 /* AMD */ : 1 /* CommonJS */; - var actualCount = args ? args.length : 0; + return compilationSettings; + }; - var expectedCount = 1 + getLargestIndex(diagnosticKey); + /** + * update the languageService host script 'open' status + * according to file in the working set + */ + TypeScriptProject.prototype.updateWorkingSet = function () { + var _this = this; + this.workingSet.getFiles().then(function (files) { + return files.forEach(function (fileName) { + if (_this.projectFilesSet.has(fileName)) { + _this.languageServiceHost.setScriptIsOpen(fileName, true); + } + }); + }); + }; - if (expectedCount !== actualCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount])); - } + //------------------------------- + // Project Files Management + //------------------------------- + /** + * retrieve files content for path match described in the config + */ + TypeScriptProject.prototype.collectFiles = function () { + var _this = this; + return this.fileSystem.getProjectFiles().then(function (files) { + var promises = []; + files.forEach(function (fileName) { + if (_this.isProjectSourceFile(fileName) && !_this.projectFilesSet.has(fileName)) { + console.log(fileName); + promises.push(_this.addFile(fileName, false)); + } + }); - var valueCount = 1 + getLargestIndex(diagnosticMessageText); - if (valueCount !== expectedCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount])); - } + if (!_this.config.noLib && !_this.projectFilesSet.has(_this.libLocation)) { + promises.push(_this.addFile(_this.libLocation)); + } - diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) { - return typeof args[num] !== 'undefined' ? args[num] : match; + return Promise.all(promises); }); + }; - diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) { - return TypeScript.newLine(); + /** + * return true a if a given file path match the config + * @param path + */ + TypeScriptProject.prototype.isProjectSourceFile = function (fileName) { + var relativeFileName = path.relative(this.baseDirectory, fileName); + return this.config.sources.some(function (pattern) { + return minimatch(relativeFileName, pattern) || minimatch(fileName, pattern); }); + }; - return diagnosticMessageText; - } - TypeScript.getLocalizedText = getLocalizedText; - - function getDiagnosticMessage(diagnosticKey, args) { - var diagnostic = getDiagnosticInfoFromKey(diagnosticKey); - var diagnosticMessageText = getLocalizedText(diagnosticKey, args); - - var message; - if (diagnostic.category === 1 /* Error */) { - message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else if (diagnostic.category === 0 /* Warning */) { - message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else { - message = diagnosticMessageText; + /** + * add a file to the project and all file that this file reference + * @param path + */ + TypeScriptProject.prototype.addFile = function (fileName, notify) { + var _this = this; + if (typeof notify === "undefined") { notify = true; } + if (!this.projectFilesSet.has(fileName)) { + this.projectFilesSet.add(fileName); + return this.fileSystem.readFile(fileName).then(function (content) { + var promises = []; + _this.languageServiceHost.addScript(fileName, content); + _this.getReferencedOrImportedFiles(fileName).forEach(function (referencedFile) { + promises.push(_this.addFile(referencedFile)); + _this.addReference(fileName, referencedFile); + }); + return Promise.all(promises); + }, function () { + _this.projectFilesSet.remove(fileName); + }); } + return null; + }; - return message; - } - TypeScript.getDiagnosticMessage = getDiagnosticMessage; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Errors = (function () { - function Errors() { + /** + * remove a file from the project + * @param path + */ + TypeScriptProject.prototype.removeFile = function (fileName) { + var _this = this; + if (this.projectFilesSet.has(fileName)) { + this.getReferencedOrImportedFiles(fileName).forEach(function (referencedPath) { + _this.removeReference(fileName, referencedPath); + }); + this.projectFilesSet.remove(fileName); + this.languageServiceHost.removeScript(fileName); } - Errors.argument = function (argument, message) { - return new Error("Invalid argument: " + argument + ". " + message); - }; - - Errors.argumentOutOfRange = function (argument) { - return new Error("Argument out of range: " + argument); - }; - - Errors.argumentNull = function (argument) { - return new Error("Argument null: " + argument); - }; - - Errors.abstract = function () { - return new Error("Operation not implemented properly by subclass."); - }; + }; - Errors.notYetImplemented = function () { - return new Error("Not yet implemented."); - }; + /** + * update a project file + * @param path + */ + TypeScriptProject.prototype.updateFile = function (fileName) { + var _this = this; + this.fileSystem.readFile(fileName).then(function (content) { + var oldPaths = new collections.StringSet(_this.getReferencedOrImportedFiles(fileName)); + _this.languageServiceHost.updateScript(fileName, content); + _this.updateReferences(fileName, oldPaths); + }); + }; - Errors.invalidOperation = function (message) { - return new Error("Invalid operation: " + message); - }; - return Errors; - })(); - TypeScript.Errors = Errors; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Hash = (function () { - function Hash() { + //------------------------------- + // References + //------------------------------- + /** + * for a given file retrives the file referenced or imported by this file + * @param path + */ + TypeScriptProject.prototype.getReferencedOrImportedFiles = function (fileName) { + if (!this.projectFilesSet.has(fileName)) { + return []; } - Hash.computeFnv1aCharArrayHashCode = function (text, start, len) { - var hashCode = Hash.FNV_BASE; - var end = start + len; - - for (var i = start; i < end; i++) { - hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); - } + var script = this.languageServiceHost.getScriptSnapshot(fileName), preProcessedFileInfoString = this.coreService.getPreProcessedFileInfo(fileName, script), preProcessedFileInfo = JSON.parse(preProcessedFileInfoString).result, dir = path.dirname(fileName); - return hashCode; - }; + return preProcessedFileInfo.referencedFiles.map(function (fileReference) { + return utils.pathResolve(dir, fileReference.path); + }).concat(preProcessedFileInfo.importedFiles.map(function (fileReference) { + return utils.pathResolve(dir, fileReference.path + '.ts'); + })); + }; - Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) { - var hash = 0; + /** + * add a reference + * + * @param fileName the path of the file referencing anothe file + * @param referencedPath the path of the file referenced + */ + TypeScriptProject.prototype.addReference = function (fileName, referencedPath) { + if (!this.references.has(referencedPath)) { + this.references.set(referencedPath, new collections.StringSet()); + } + this.references.get(referencedPath).add(fileName); + }; - for (var i = 0; i < len; i++) { - var ch = key[start + i]; + /** + * remove a reference + * + * @param fileName the path of the file referencing anothe file + * @param referencedPath the path of the file referenced + */ + TypeScriptProject.prototype.removeReference = function (fileName, referencedPath) { + var fileRefs = this.references.get(referencedPath); + if (!fileRefs) { + this.removeFile(referencedPath); + } + fileRefs.remove(fileName); + if (fileRefs.values.length === 0) { + this.references.delete(referencedPath); + this.removeFile(referencedPath); + } + }; - hash = ((((hash << 5) - hash) | 0) + ch) | 0; + /** + * update file references after an update + * + * @param fileName the absolute path of the file + * @param oldFileReferences list of file this file referenced before being updated + */ + TypeScriptProject.prototype.updateReferences = function (fileName, oldFileReferences) { + var _this = this; + this.getReferencedOrImportedFiles(fileName).forEach(function (referencedPath) { + oldFileReferences.remove(referencedPath); + if (!_this.projectFilesSet.has(referencedPath)) { + _this.addFile(referencedPath); + _this.addReference(fileName, referencedPath); } + }); - return hash & 0x7FFFFFFF; - }; - - Hash.computeSimple31BitStringHashCode = function (key) { - var hash = 0; - - var start = 0; - var len = key.length; - - for (var i = 0; i < len; i++) { - var ch = key.charCodeAt(start + i); + oldFileReferences.values.forEach(function (referencedPath) { + return _this.removeReference(fileName, referencedPath); + }); + }; + return TypeScriptProject; +})(); - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } +var TypeScriptProject; +(function (TypeScriptProject) { + /** + * enum describing the type of file ib a project + */ + (function (ProjectFileKind) { + /** + * the file is not a part of the project + */ + ProjectFileKind[ProjectFileKind["NONE"] = 0] = "NONE"; + + /** + * the file is a source file of the project + */ + ProjectFileKind[ProjectFileKind["SOURCE"] = 1] = "SOURCE"; + + /** + * the file is referenced by a source file of the project + */ + ProjectFileKind[ProjectFileKind["REFERENCE"] = 2] = "REFERENCE"; + })(TypeScriptProject.ProjectFileKind || (TypeScriptProject.ProjectFileKind = {})); + var ProjectFileKind = TypeScriptProject.ProjectFileKind; + + /** + * default Project factory + * @param baseDirectory the baseDirectory of the project + * @param config the project config file + * @param fileSystem the fileSystem wrapper used by the project + * @param workingSet the working set wrapper used by the project + * @param defaultLibLocation the location of the default compiler 'lib.d.ts' file + */ + function newProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation) { + return new TypeScriptProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation); + } + TypeScriptProject.newProject = newProject; +})(TypeScriptProject || (TypeScriptProject = {})); + +module.exports = TypeScriptProject; + +},{"../commons/collections":43,"../commons/fileSystem":45,"../commons/logger":46,"../commons/promiseQueue":47,"../commons/utils":50,"../commons/workingSet":52,"./languageServiceHost":58,"bluebird":5,"minimatch":40,"path":1}],61:[function(require,module,exports){ +// Copyright 2013-2014 François de Campredon +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +'use strict'; +var Promise = require('bluebird'); +var path = require('path'); +var PromiseQueue = require('../commons/promiseQueue'); + +var collections = require('../commons/collections'); +var tsUtils = require('../commons/typeScriptUtils'); +var utils = require('../commons/utils'); +var logger = require('../commons/logger'); +var TypeScriptProject = require('./project'); + +//-------------------------------------------------------------------------- +// +// TypeScriptProjectManager +// +//-------------------------------------------------------------------------- +/** +* The main facade class of the extentions, responsible to create, destroy, update +* projects by observing preferenreces. +*/ +var TypeScriptProjectManager = (function () { + function TypeScriptProjectManager() { + var _this = this; + /** + * a map containing the projects + */ + this.projectMap = new collections.StringMap(); + /** + * a promise queue used to insure async task are run sequentialy + */ + this.queue = new PromiseQueue(); + //------------------------------- + // Events Handler + //------------------------------- + /** + * handle changes in the preferences, update / delete / create project accordingly + */ + this.configChangeHandler = function () { + _this.queue.then(function () { + _this.preferenceManager.getProjectsConfig().then(function (configs) { + var promises = []; + _this.projectMap.entries.forEach(function (entry) { + var projectId = entry.key, project = entry.value, config = configs[projectId]; + if (!config) { + project.dispose(); + _this.projectMap.delete(projectId); + } else { + promises.push(project.update(config)); + } + }); - return hash & 0x7FFFFFFF; + Object.keys(configs).forEach(function (projectId) { + if (!_this.projectMap.has(projectId)) { + promises.push(_this.createProjectFromConfig(projectId, configs[projectId])); + } + }); + }); + }); }; + } + //------------------------------- + // Public methods + //------------------------------- + /** + * initialize the project manager + * + * @param defaultTypeScriptLocation location of the default typescript compiler lib.d.ts file + * @param preferenceManager preferences manager used to retrieve project config + * @param fileSystem editor filesystem manager + * @param workingSet editor workingset manager + * @param projectFactory a factory used to create project + */ + TypeScriptProjectManager.prototype.init = function (defaultTypeScriptLocation, preferenceManager, fileSystem, workingSet, projectFactory) { + var _this = this; + this.defaultTypeScriptLocation = defaultTypeScriptLocation; + this.preferenceManager = preferenceManager; + this.workingSet = workingSet; + this.fileSystem = fileSystem; + this.projectFactory = projectFactory; + + this.preferenceManager.configChanged.add(this.configChangeHandler); + + return this.queue.init(this.fileSystem.getProjectRoot().then(function (projectRootDir) { + _this.projectRootDir = projectRootDir; + return _this.createProjects(); + })); + }; - Hash.computeMurmur2StringHashCode = function (key, seed) { - var m = 0x5bd1e995; - var r = 24; - - var numberOfCharsLeft = key.length; - var h = Math.abs(seed ^ numberOfCharsLeft); - - var index = 0; - while (numberOfCharsLeft >= 2) { - var c1 = key.charCodeAt(index); - var c2 = key.charCodeAt(index + 1); - - var k = Math.abs(c1 | (c2 << 16)); - - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); - k ^= k >> r; - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); + /** + * dispose the project manager + */ + TypeScriptProjectManager.prototype.dispose = function () { + var _this = this; + this.preferenceManager.configChanged.remove(this.configChangeHandler); + this.queue.then(function () { + return _this.disposeProjects(); + }); + }; - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= k; + /** + * this method will try to find a project referencing the given path + * it will by priority try to retrive project that have that file as part of 'direct source' + * before returning projects that just have 'reference' to this file + * + * @param fileName the path of the typesrcript file for which project are looked fo + */ + TypeScriptProjectManager.prototype.getProjectForFile = function (fileName) { + var _this = this; + return this.queue.then(function () { + var projects = _this.projectMap.values, project = null; - index += 2; - numberOfCharsLeft -= 2; - } + //first we check for a project that have tha file as source + projects.some(function (tsProject) { + if (tsProject.getProjectFileKind(fileName) === 1 /* SOURCE */) { + project = tsProject; + return true; + } + }); - if (numberOfCharsLeft === 1) { - h ^= key.charCodeAt(index); - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + //then we check if a project has a file referencing the given file + if (!project) { + projects.some(function (tsProject) { + if (tsProject.getProjectFileKind(fileName) === 2 /* REFERENCE */) { + project = tsProject; + return true; + } + }); } - h ^= h >> 13; - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= h >> 15; - - return h; - }; - - Hash.getPrime = function (min) { - for (var i = 0; i < Hash.primes.length; i++) { - var num = Hash.primes[i]; - if (num >= min) { - return num; + //then we check if the current temp project has the file + if (!project) { + if (_this.tempProject && _this.tempProject.getProjectFilesSet().has(fileName)) { + project = _this.tempProject; + } else if (_this.tempProject) { + _this.tempProject.dispose(); + _this.tempProject = null; } } - throw TypeScript.Errors.notYetImplemented(); - }; - - Hash.expandPrime = function (oldSize) { - var num = oldSize << 1; - if (num > 2146435069 && 2146435069 > oldSize) { - return 2146435069; + //then if still no project found we create the temp project + if (!project) { + var config = utils.clone(tsUtils.typeScriptProjectConfigDefault); + config.target = 'es5'; + config.sources = [fileName]; + _this.tempProject = project = _this.projectFactory(_this.projectRootDir, config, _this.fileSystem, _this.workingSet, path.join(_this.defaultTypeScriptLocation, 'lib.d.ts')); + return _this.tempProject.init().then(function () { + return _this.tempProject; + }); } - return Hash.getPrime(num); - }; - Hash.combine = function (value, currentHash) { - return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; - }; - Hash.FNV_BASE = 2166136261; - Hash.FNV_PRIME = 16777619; + return project; + }); + }; - Hash.primes = [ - 3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, - 631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419, - 10103, 12143, 14591, 17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431, - 90523, 108631, 130363, 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, - 672827, 807403, 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, - 4166287, 4999559, 5999471, 7199369]; - return Hash; - })(); - TypeScript.Hash = Hash; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultHashTableCapacity = 1024; + //------------------------------- + // Private methods + //------------------------------- + /** + * create projects from project configs retrieved by the preferenceManager + */ + TypeScriptProjectManager.prototype.createProjects = function () { + var _this = this; + return this.preferenceManager.getProjectsConfig().then(function (configs) { + return Promise.all(Object.keys(configs).map(function (projectId) { + return _this.createProjectFromConfig(projectId, configs[projectId]); + })); + }); + }; - var HashTableEntry = (function () { - function HashTableEntry(Key, Value, HashCode, Next) { - this.Key = Key; - this.Value = Value; - this.HashCode = HashCode; - this.Next = Next; - } - return HashTableEntry; - })(); + /** + * dispose every projects created by the ProjectManager + */ + TypeScriptProjectManager.prototype.disposeProjects = function () { + var projectMap = this.projectMap; + projectMap.keys.forEach(function (path) { + projectMap.get(path).dispose(); + }); + this.projectMap.clear(); + if (this.tempProject) { + this.tempProject.dispose(); + this.tempProject = null; + } + }; - var HashTable = (function () { - function HashTable(capacity, hash) { - this.hash = hash; - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); + /** + * for given config and projectId create a project + * + * @param projectId the id of the project + * @param config the project config + */ + TypeScriptProjectManager.prototype.createProjectFromConfig = function (projectId, config) { + var _this = this; + var project = this.projectFactory(this.projectRootDir, config, this.fileSystem, this.workingSet, path.join(this.defaultTypeScriptLocation, 'lib.d.ts')); + return project.init().then(function () { + _this.projectMap.set(projectId, project); + }, function () { + if (logger.fatal()) { + logger.log('could not create project:' + projectId); } - HashTable.prototype.set = function (key, value) { - this.addOrSet(key, value, false); - }; - - HashTable.prototype.add = function (key, value) { - this.addOrSet(key, value, true); - }; - - HashTable.prototype.containsKey = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - return entry !== null; - }; - - HashTable.prototype.get = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - - return entry === null ? null : entry.Value; - }; - - HashTable.prototype.computeHashCode = function (key) { - var hashCode = this.hash === null ? key.hashCode : this.hash(key); - - hashCode = hashCode & 0x7FFFFFFF; - TypeScript.Debug.assert(hashCode >= 0); - - return hashCode; - }; - - HashTable.prototype.addOrSet = function (key, value, throwOnExistingEntry) { - var hashCode = this.computeHashCode(key); - - var entry = this.findEntry(key, hashCode); - if (entry !== null) { - if (throwOnExistingEntry) { - throw TypeScript.Errors.argument('key', "Key was already in table."); - } - - entry.Key = key; - entry.Value = value; - return; - } - - return this.addEntry(key, value, hashCode); - }; - - HashTable.prototype.findEntry = function (key, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && key === e.Key) { - return e; - } - } + }); + }; + return TypeScriptProjectManager; +})(); - return null; - }; - - HashTable.prototype.addEntry = function (key, value, hashCode) { - var index = hashCode % this.entries.length; - - var e = new HashTableEntry(key, value, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count >= (this.entries.length / 2)) { - this.grow(); - } - - this.count++; - return e.Key; - }; - - HashTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - return HashTable; - })(); - Collections.HashTable = HashTable; - - function createHashTable(capacity, hash) { - if (typeof capacity === "undefined") { capacity = Collections.DefaultHashTableCapacity; } - if (typeof hash === "undefined") { hash = null; } - return new HashTable(capacity, hash); - } - Collections.createHashTable = createHashTable; - - var currentHashCode = 1; - function identityHashCode(value) { - if (value.__hash === undefined) { - value.__hash = currentHashCode; - currentHashCode++; - } - - return value.__hash; - } - Collections.identityHashCode = identityHashCode; - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - TypeScript.nodeMakeDirectoryTime = 0; - TypeScript.nodeCreateBufferTime = 0; - TypeScript.nodeWriteFileSyncTime = 0; - - (function (ByteOrderMark) { - ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; - ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; - ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; - ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; - })(TypeScript.ByteOrderMark || (TypeScript.ByteOrderMark = {})); - var ByteOrderMark = TypeScript.ByteOrderMark; - - var FileInformation = (function () { - function FileInformation(contents, byteOrderMark) { - this.contents = contents; - this.byteOrderMark = byteOrderMark; - } - return FileInformation; - })(); - TypeScript.FileInformation = FileInformation; - - TypeScript.Environment = (function () { - function getWindowsScriptHostEnvironment() { - try { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - } catch (e) { - return null; - } - - var streamObjectPool = []; - - function getStreamObject() { - if (streamObjectPool.length > 0) { - return streamObjectPool.pop(); - } else { - return new ActiveXObject("ADODB.Stream"); - } - } - - function releaseStreamObject(obj) { - streamObjectPool.push(obj); - } - - var args = []; - for (var i = 0; i < WScript.Arguments.length; i++) { - args[i] = WScript.Arguments.Item(i); - } - - return { - newLine: "\r\n", - currentDirectory: function () { - return WScript.CreateObject("WScript.Shell").CurrentDirectory; - }, - supportsCodePage: function () { - return WScript.ReadFile; - }, - readFile: function (path, codepage) { - try { - if (codepage !== null && this.supportsCodePage()) { - try { - var contents = WScript.ReadFile(path, codepage); - return new FileInformation(contents, 0 /* None */); - } catch (e) { - } - } - - var streamObj = getStreamObject(); - streamObj.Open(); - streamObj.Type = 2; - - streamObj.Charset = 'x-ansi'; - - streamObj.LoadFromFile(path); - var bomChar = streamObj.ReadText(2); - - streamObj.Position = 0; - - var byteOrderMark = 0 /* None */; - - if (bomChar.charCodeAt(0) === 0xFE && bomChar.charCodeAt(1) === 0xFF) { - streamObj.Charset = 'unicode'; - byteOrderMark = 2 /* Utf16BigEndian */; - } else if (bomChar.charCodeAt(0) === 0xFF && bomChar.charCodeAt(1) === 0xFE) { - streamObj.Charset = 'unicode'; - byteOrderMark = 3 /* Utf16LittleEndian */; - } else if (bomChar.charCodeAt(0) === 0xEF && bomChar.charCodeAt(1) === 0xBB) { - streamObj.Charset = 'utf-8'; - byteOrderMark = 1 /* Utf8 */; - } else { - streamObj.Charset = 'utf-8'; - } - - var contents = streamObj.ReadText(-1); - streamObj.Close(); - releaseStreamObject(streamObj); - return new FileInformation(contents, byteOrderMark); - } catch (err) { - var message; - if (err.number === -2147024809) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unsupported_file_encoding, null); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Cannot_read_file_0_1, [path, err.message]); - } - - throw new Error(message); - } - }, - writeFile: function (path, contents, writeByteOrderMark) { - var textStream = getStreamObject(); - textStream.Charset = 'utf-8'; - textStream.Open(); - textStream.WriteText(contents, 0); - - if (!writeByteOrderMark) { - textStream.Position = 3; - } else { - textStream.Position = 0; - } - - var fileStream = getStreamObject(); - fileStream.Type = 1; - fileStream.Open(); - - textStream.CopyTo(fileStream); - - fileStream.Flush(); - fileStream.SaveToFile(path, 2); - fileStream.Close(); - - textStream.Flush(); - textStream.Close(); - }, - fileExists: function (path) { - return fso.FileExists(path); - }, - deleteFile: function (path) { - if (fso.FileExists(path)) { - fso.DeleteFile(path, true); - } - }, - directoryExists: function (path) { - return fso.FolderExists(path); - }, - listFiles: function (path, spec, options) { - options = options || {}; - function filesInFolder(folder, root) { - var paths = []; - var fc; - - if (options.recursive) { - fc = new Enumerator(folder.subfolders); - - for (; !fc.atEnd(); fc.moveNext()) { - paths = paths.concat(filesInFolder(fc.item(), root + "\\" + fc.item().Name)); - } - } - - fc = new Enumerator(folder.files); - - for (; !fc.atEnd(); fc.moveNext()) { - if (!spec || fc.item().Name.match(spec)) { - paths.push(root + "\\" + fc.item().Name); - } - } - - return paths; - } - - var folder = fso.GetFolder(path); - var paths = []; - - return filesInFolder(folder, path); - }, - arguments: args, - standardOut: WScript.StdOut - }; - } - ; - - function getNodeEnvironment() { - var _fs = require('fs'); - var _path = require('path'); - var _module = require('module'); - var _os = require('os'); - - return { - newLine: _os.EOL, - currentDirectory: function () { - return process.cwd(); - }, - supportsCodePage: function () { - return false; - }, - readFile: function (file, codepage) { - if (codepage !== null) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.codepage_option_not_supported_on_current_platform, null)); - } - - var buffer = _fs.readFileSync(file); - switch (buffer[0]) { - case 0xFE: - if (buffer[1] === 0xFF) { - var i = 0; - while ((i + 1) < buffer.length) { - var temp = buffer[i]; - buffer[i] = buffer[i + 1]; - buffer[i + 1] = temp; - i += 2; - } - return new FileInformation(buffer.toString("ucs2", 2), 2 /* Utf16BigEndian */); - } - break; - case 0xFF: - if (buffer[1] === 0xFE) { - return new FileInformation(buffer.toString("ucs2", 2), 3 /* Utf16LittleEndian */); - } - break; - case 0xEF: - if (buffer[1] === 0xBB) { - return new FileInformation(buffer.toString("utf8", 3), 1 /* Utf8 */); - } - } - - return new FileInformation(buffer.toString("utf8", 0), 0 /* None */); - }, - writeFile: function (path, contents, writeByteOrderMark) { - function mkdirRecursiveSync(path) { - var stats = _fs.statSync(path); - if (stats.isFile()) { - throw "\"" + path + "\" exists but isn't a directory."; - } else if (stats.isDirectory()) { - return; - } else { - mkdirRecursiveSync(_path.dirname(path)); - _fs.mkdirSync(path, 509); - } - } - var start = new Date().getTime(); - mkdirRecursiveSync(_path.dirname(path)); - TypeScript.nodeMakeDirectoryTime += new Date().getTime() - start; - - if (writeByteOrderMark) { - contents = '\uFEFF' + contents; - } - - var start = new Date().getTime(); - - var chunkLength = 4 * 1024; - var fileDescriptor = _fs.openSync(path, "w"); - try { - for (var index = 0; index < contents.length; index += chunkLength) { - var bufferStart = new Date().getTime(); - var buffer = new Buffer(contents.substr(index, chunkLength), "utf8"); - TypeScript.nodeCreateBufferTime += new Date().getTime() - bufferStart; - - _fs.writeSync(fileDescriptor, buffer, 0, buffer.length, null); - } - } finally { - _fs.closeSync(fileDescriptor); - } - - TypeScript.nodeWriteFileSyncTime += new Date().getTime() - start; - }, - fileExists: function (path) { - return _fs.existsSync(path); - }, - deleteFile: function (path) { - try { - _fs.unlinkSync(path); - } catch (e) { - } - }, - directoryExists: function (path) { - return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); - }, - listFiles: function dir(path, spec, options) { - options = options || {}; - - function filesInFolder(folder) { - var paths = []; - - var files = _fs.readdirSync(folder); - for (var i = 0; i < files.length; i++) { - var stat = _fs.statSync(folder + "\\" + files[i]); - if (options.recursive && stat.isDirectory()) { - paths = paths.concat(filesInFolder(folder + "\\" + files[i])); - } else if (stat.isFile() && (!spec || files[i].match(spec))) { - paths.push(folder + "\\" + files[i]); - } - } - - return paths; - } - - return filesInFolder(path); - }, - arguments: process.argv.slice(2), - standardOut: { - Write: function (str) { - process.stdout.write(str); - }, - WriteLine: function (str) { - process.stdout.write(str + '\n'); - }, - Close: function () { - } - } - }; - } - ; - - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { - return getWindowsScriptHostEnvironment(); - } else if (typeof module !== 'undefined' && module.exports) { - return getNodeEnvironment(); - } else { - return null; - } - })(); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (IntegerUtilities) { - function integerDivide(numerator, denominator) { - return (numerator / denominator) >> 0; - } - IntegerUtilities.integerDivide = integerDivide; - - function integerMultiplyLow32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0; - return resultLow32; - } - IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits; - - function integerMultiplyHigh32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultHigh32 = n1High16 * n2High16 + ((((n1Low16 * n2Low16) >>> 17) + n1Low16 * n2High16) >>> 15); - return resultHigh32; - } - IntegerUtilities.integerMultiplyHigh32Bits = integerMultiplyHigh32Bits; - - function isInteger(text) { - return /^[0-9]+$/.test(text); - } - IntegerUtilities.isInteger = isInteger; - - function isHexInteger(text) { - return /^0(x|X)[0-9a-fA-F]+$/.test(text); - } - IntegerUtilities.isHexInteger = isHexInteger; - })(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {})); - var IntegerUtilities = TypeScript.IntegerUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineMap = (function () { - function LineMap(_computeLineStarts, length) { - this._computeLineStarts = _computeLineStarts; - this.length = length; - this._lineStarts = null; - } - LineMap.prototype.toJSON = function (key) { - return { lineStarts: this.lineStarts(), length: this.length }; - }; - - LineMap.prototype.equals = function (other) { - return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { - return v1 === v2; - }); - }; - - LineMap.prototype.lineStarts = function () { - if (this._lineStarts === null) { - this._lineStarts = this._computeLineStarts(); - } - - return this._lineStarts; - }; - - LineMap.prototype.lineCount = function () { - return this.lineStarts().length; - }; - - LineMap.prototype.getPosition = function (line, character) { - return this.lineStarts()[line] + character; - }; - - LineMap.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - LineMap.prototype.getLineStartPosition = function (lineNumber) { - return this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - lineAndCharacter.line = lineNumber; - lineAndCharacter.character = position - this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.getLineAndCharacterFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]); - }; - LineMap.empty = new LineMap(function () { - return [0]; - }, 0); - return LineMap; - })(); - TypeScript.LineMap = LineMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineAndCharacter = (function () { - function LineAndCharacter(line, character) { - this._line = 0; - this._character = 0; - if (line < 0) { - throw TypeScript.Errors.argumentOutOfRange("line"); - } - - if (character < 0) { - throw TypeScript.Errors.argumentOutOfRange("character"); - } - - this._line = line; - this._character = character; - } - LineAndCharacter.prototype.line = function () { - return this._line; - }; - - LineAndCharacter.prototype.character = function () { - return this._character; - }; - return LineAndCharacter; - })(); - TypeScript.LineAndCharacter = LineAndCharacter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MathPrototype = (function () { - function MathPrototype() { - } - MathPrototype.max = function (a, b) { - return a >= b ? a : b; - }; - - MathPrototype.min = function (a, b) { - return a <= b ? a : b; - }; - return MathPrototype; - })(); - TypeScript.MathPrototype = MathPrototype; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultStringTableCapacity = 256; - - var StringTableEntry = (function () { - function StringTableEntry(Text, HashCode, Next) { - this.Text = Text; - this.HashCode = HashCode; - this.Next = Next; - } - return StringTableEntry; - })(); - - var StringTable = (function () { - function StringTable(capacity) { - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); - } - StringTable.prototype.addCharArray = function (key, start, len) { - var hashCode = TypeScript.Hash.computeSimple31BitCharArrayHashCode(key, start, len) & 0x7FFFFFFF; - - var entry = this.findCharArrayEntry(key, start, len, hashCode); - if (entry !== null) { - return entry.Text; - } - - var slice = key.slice(start, start + len); - return this.addEntry(TypeScript.StringUtilities.fromCharCodeArray(slice), hashCode); - }; - - StringTable.prototype.findCharArrayEntry = function (key, start, len, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && StringTable.textCharArrayEquals(e.Text, key, start, len)) { - return e; - } - } - - return null; - }; - - StringTable.prototype.addEntry = function (text, hashCode) { - var index = hashCode % this.entries.length; - - var e = new StringTableEntry(text, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count === this.entries.length) { - this.grow(); - } - - this.count++; - return e.Text; - }; - - StringTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - - StringTable.textCharArrayEquals = function (text, array, start, length) { - if (text.length !== length) { - return false; - } - - var s = start; - for (var i = 0; i < length; i++) { - if (text.charCodeAt(i) !== array[s]) { - return false; - } - - s++; - } - - return true; - }; - return StringTable; - })(); - Collections.StringTable = StringTable; - - Collections.DefaultStringTable = new StringTable(Collections.DefaultStringTableCapacity); - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var StringUtilities = (function () { - function StringUtilities() { - } - StringUtilities.isString = function (value) { - return Object.prototype.toString.apply(value, []) === '[object String]'; - }; - - StringUtilities.fromCharCodeArray = function (array) { - return String.fromCharCode.apply(null, array); - }; - - StringUtilities.endsWith = function (string, value) { - return string.substring(string.length - value.length, string.length) === value; - }; - - StringUtilities.startsWith = function (string, value) { - return string.substr(0, value.length) === value; - }; - - StringUtilities.copyTo = function (source, sourceIndex, destination, destinationIndex, count) { - for (var i = 0; i < count; i++) { - destination[destinationIndex + i] = source.charCodeAt(sourceIndex + i); - } - }; - - StringUtilities.repeat = function (value, count) { - return Array(count + 1).join(value); - }; - - StringUtilities.stringEquals = function (val1, val2) { - return val1 === val2; - }; - return StringUtilities; - })(); - TypeScript.StringUtilities = StringUtilities; -})(TypeScript || (TypeScript = {})); -var global = Function("return this").call(null); - -var TypeScript; -(function (TypeScript) { - var Clock; - (function (Clock) { - Clock.now; - Clock.resolution; - - if (typeof WScript !== "undefined" && typeof global['WScript'].InitializeProjection !== "undefined") { - global['WScript'].InitializeProjection(); - - Clock.now = function () { - return TestUtilities.QueryPerformanceCounter(); - }; - - Clock.resolution = TestUtilities.QueryPerformanceFrequency(); - } else { - Clock.now = function () { - return Date.now(); - }; - - Clock.resolution = 1000; - } - })(Clock || (Clock = {})); - - var Timer = (function () { - function Timer() { - this.time = 0; - } - Timer.prototype.start = function () { - this.time = 0; - this.startTime = Clock.now(); - }; - - Timer.prototype.end = function () { - this.time = (Clock.now() - this.startTime); - }; - return Timer; - })(); - TypeScript.Timer = Timer; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (DiagnosticCategory) { - DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; - DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; - DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; - })(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {})); - var DiagnosticCategory = TypeScript.DiagnosticCategory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.diagnosticInformationMap = { - "error TS{0}: {1}": { - "code": 0, - "category": 3 /* NoPrefix */ - }, - "warning TS{0}: {1}": { - "code": 1, - "category": 3 /* NoPrefix */ - }, - "Unrecognized escape sequence.": { - "code": 1000, - "category": 1 /* Error */ - }, - "Unexpected character {0}.": { - "code": 1001, - "category": 1 /* Error */ - }, - "Missing close quote character.": { - "code": 1002, - "category": 1 /* Error */ - }, - "Identifier expected.": { - "code": 1003, - "category": 1 /* Error */ - }, - "'{0}' keyword expected.": { - "code": 1004, - "category": 1 /* Error */ - }, - "'{0}' expected.": { - "code": 1005, - "category": 1 /* Error */ - }, - "Identifier expected; '{0}' is a keyword.": { - "code": 1006, - "category": 1 /* Error */ - }, - "Automatic semicolon insertion not allowed.": { - "code": 1007, - "category": 1 /* Error */ - }, - "Unexpected token; '{0}' expected.": { - "code": 1008, - "category": 1 /* Error */ - }, - "Trailing separator not allowed.": { - "code": 1009, - "category": 1 /* Error */ - }, - "'*/' expected.": { - "code": 1010, - "category": 1 /* Error */ - }, - "'public' or 'private' modifier must precede 'static'.": { - "code": 1011, - "category": 1 /* Error */ - }, - "Unexpected token.": { - "code": 1012, - "category": 1 /* Error */ - }, - "Catch clause parameter cannot have a type annotation.": { - "code": 1013, - "category": 1 /* Error */ - }, - "Rest parameter must be last in list.": { - "code": 1014, - "category": 1 /* Error */ - }, - "Parameter cannot have question mark and initializer.": { - "code": 1015, - "category": 1 /* Error */ - }, - "Required parameter cannot follow optional parameter.": { - "code": 1016, - "category": 1 /* Error */ - }, - "Index signatures cannot have rest parameters.": { - "code": 1017, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have accessibility modifiers.": { - "code": 1018, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have a question mark.": { - "code": 1019, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have an initializer.": { - "code": 1020, - "category": 1 /* Error */ - }, - "Index signature must have a type annotation.": { - "code": 1021, - "category": 1 /* Error */ - }, - "Index signature parameter must have a type annotation.": { - "code": 1022, - "category": 1 /* Error */ - }, - "Index signature parameter type must be 'string' or 'number'.": { - "code": 1023, - "category": 1 /* Error */ - }, - "'extends' clause already seen.": { - "code": 1024, - "category": 1 /* Error */ - }, - "'extends' clause must precede 'implements' clause.": { - "code": 1025, - "category": 1 /* Error */ - }, - "Classes can only extend a single class.": { - "code": 1026, - "category": 1 /* Error */ - }, - "'implements' clause already seen.": { - "code": 1027, - "category": 1 /* Error */ - }, - "Accessibility modifier already seen.": { - "code": 1028, - "category": 1 /* Error */ - }, - "'{0}' modifier must precede '{1}' modifier.": { - "code": 1029, - "category": 1 /* Error */ - }, - "'{0}' modifier already seen.": { - "code": 1030, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a class element.": { - "code": 1031, - "category": 1 /* Error */ - }, - "Interface declaration cannot have 'implements' clause.": { - "code": 1032, - "category": 1 /* Error */ - }, - "'super' invocation cannot have type arguments.": { - "code": 1034, - "category": 1 /* Error */ - }, - "Only ambient modules can use quoted names.": { - "code": 1035, - "category": 1 /* Error */ - }, - "Statements are not allowed in ambient contexts.": { - "code": 1036, - "category": 1 /* Error */ - }, - "Implementations are not allowed in ambient contexts.": { - "code": 1037, - "category": 1 /* Error */ - }, - "'declare' modifier not allowed for code already in an ambient context.": { - "code": 1038, - "category": 1 /* Error */ - }, - "Initializers are not allowed in ambient contexts.": { - "code": 1039, - "category": 1 /* Error */ - }, - "Parameter property declarations can only be used in a non-ambient constructor declaration.": { - "code": 1040, - "category": 1 /* Error */ - }, - "Function implementation expected.": { - "code": 1041, - "category": 1 /* Error */ - }, - "Constructor implementation expected.": { - "code": 1042, - "category": 1 /* Error */ - }, - "Function overload name must be '{0}'.": { - "code": 1043, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a module element.": { - "code": 1044, - "category": 1 /* Error */ - }, - "'declare' modifier cannot appear on an interface declaration.": { - "code": 1045, - "category": 1 /* Error */ - }, - "'declare' modifier required for top level element.": { - "code": 1046, - "category": 1 /* Error */ - }, - "Rest parameter cannot be optional.": { - "code": 1047, - "category": 1 /* Error */ - }, - "Rest parameter cannot have an initializer.": { - "code": 1048, - "category": 1 /* Error */ - }, - "'set' accessor must have one and only one parameter.": { - "code": 1049, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot be optional.": { - "code": 1051, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot have an initializer.": { - "code": 1052, - "category": 1 /* Error */ - }, - "'set' accessor cannot have rest parameter.": { - "code": 1053, - "category": 1 /* Error */ - }, - "'get' accessor cannot have parameters.": { - "code": 1054, - "category": 1 /* Error */ - }, - "Modifiers cannot appear here.": { - "code": 1055, - "category": 1 /* Error */ - }, - "Accessors are only available when targeting ECMAScript 5 and higher.": { - "code": 1056, - "category": 1 /* Error */ - }, - "Class name cannot be '{0}'.": { - "code": 1057, - "category": 1 /* Error */ - }, - "Interface name cannot be '{0}'.": { - "code": 1058, - "category": 1 /* Error */ - }, - "Enum name cannot be '{0}'.": { - "code": 1059, - "category": 1 /* Error */ - }, - "Module name cannot be '{0}'.": { - "code": 1060, - "category": 1 /* Error */ - }, - "Enum member must have initializer.": { - "code": 1061, - "category": 1 /* Error */ - }, - "Export assignment cannot be used in internal modules.": { - "code": 1063, - "category": 1 /* Error */ - }, - "Export assignment not allowed in module with exported element.": { - "code": 1064, - "category": 1 /* Error */ - }, - "Module cannot have multiple export assignments.": { - "code": 1065, - "category": 1 /* Error */ - }, - "Ambient enum elements can only have integer literal initializers.": { - "code": 1066, - "category": 1 /* Error */ - }, - "module, class, interface, enum, import or statement": { - "code": 1067, - "category": 3 /* NoPrefix */ - }, - "constructor, function, accessor or variable": { - "code": 1068, - "category": 3 /* NoPrefix */ - }, - "statement": { - "code": 1069, - "category": 3 /* NoPrefix */ - }, - "case or default clause": { - "code": 1070, - "category": 3 /* NoPrefix */ - }, - "identifier": { - "code": 1071, - "category": 3 /* NoPrefix */ - }, - "call, construct, index, property or function signature": { - "code": 1072, - "category": 3 /* NoPrefix */ - }, - "expression": { - "code": 1073, - "category": 3 /* NoPrefix */ - }, - "type name": { - "code": 1074, - "category": 3 /* NoPrefix */ - }, - "property or accessor": { - "code": 1075, - "category": 3 /* NoPrefix */ - }, - "parameter": { - "code": 1076, - "category": 3 /* NoPrefix */ - }, - "type": { - "code": 1077, - "category": 3 /* NoPrefix */ - }, - "type parameter": { - "code": 1078, - "category": 3 /* NoPrefix */ - }, - "'declare' modifier not allowed on import declaration.": { - "code": 1079, - "category": 1 /* Error */ - }, - "Function overload must be static.": { - "code": 1080, - "category": 1 /* Error */ - }, - "Function overload must not be static.": { - "code": 1081, - "category": 1 /* Error */ - }, - "Parameter property declarations cannot be used in a constructor overload.": { - "code": 1083, - "category": 1 /* Error */ - }, - "Invalid 'reference' directive syntax.": { - "code": 1084, - "category": 1 /* Error */ - }, - "Octal literals are not available when targeting ECMAScript 5 and higher.": { - "code": 1085, - "category": 1 /* Error */ - }, - "Accessors are not allowed in ambient contexts.": { - "code": 1086, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a constructor declaration.": { - "code": 1089, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a parameter.": { - "code": 1090, - "category": 1 /* Error */ - }, - "Only a single variable declaration is allowed in a 'for...in' statement.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type parameters cannot appear on a constructor declaration.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type annotation cannot appear on a constructor declaration.": { - "code": 1092, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'.": { - "code": 2000, - "category": 1 /* Error */ - }, - "The name '{0}' does not exist in the current scope.": { - "code": 2001, - "category": 1 /* Error */ - }, - "The name '{0}' does not refer to a value.": { - "code": 2002, - "category": 1 /* Error */ - }, - "'super' can only be used inside a class instance method.": { - "code": 2003, - "category": 1 /* Error */ - }, - "The left-hand side of an assignment expression must be a variable, property or indexer.": { - "code": 2004, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable. Did you mean to include 'new'?": { - "code": 2161, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable.": { - "code": 2006, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not newable.": { - "code": 2007, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not indexable by type '{1}'.": { - "code": 2008, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { - "code": 2009, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}": { - "code": 2010, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}'.": { - "code": 2011, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}':{NL}{2}": { - "code": 2012, - "category": 1 /* Error */ - }, - "Expected var, class, interface, or module.": { - "code": 2013, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to type '{1}'.": { - "code": 2014, - "category": 1 /* Error */ - }, - "Getter '{0}' already declared.": { - "code": 2015, - "category": 1 /* Error */ - }, - "Setter '{0}' already declared.": { - "code": 2016, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends private class '{1}'.": { - "code": 2018, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements private interface '{1}'.": { - "code": 2019, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends private interface '{1}'.": { - "code": 2020, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends class from inaccessible module {1}.": { - "code": 2021, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements interface from inaccessible module {1}.": { - "code": 2022, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends interface from inaccessible module {1}.": { - "code": 2023, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2024, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2025, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2026, - "category": 1 /* Error */ - }, - "Exported variable '{0}' has or is using private type '{1}'.": { - "code": 2027, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2028, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2029, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2030, - "category": 1 /* Error */ - }, - "Exported variable '{0}' is using inaccessible module {1}.": { - "code": 2031, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { - "code": 2032, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { - "code": 2033, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { - "code": 2034, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2035, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2036, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2037, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2038, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2039, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2040, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { - "code": 2041, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { - "code": 2042, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { - "code": 2043, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2044, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2045, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2046, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2047, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2048, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2049, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class has or is using private type '{0}'.": { - "code": 2050, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class has or is using private type '{0}'.": { - "code": 2051, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface has or is using private type '{0}'.": { - "code": 2052, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface has or is using private type '{0}'.": { - "code": 2053, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface has or is using private type '{0}'.": { - "code": 2054, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class has or is using private type '{0}'.": { - "code": 2055, - "category": 1 /* Error */ - }, - "Return type of public method from exported class has or is using private type '{0}'.": { - "code": 2056, - "category": 1 /* Error */ - }, - "Return type of method from exported interface has or is using private type '{0}'.": { - "code": 2057, - "category": 1 /* Error */ - }, - "Return type of exported function has or is using private type '{0}'.": { - "code": 2058, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class is using inaccessible module {0}.": { - "code": 2059, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class is using inaccessible module {0}.": { - "code": 2060, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface is using inaccessible module {0}.": { - "code": 2061, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface is using inaccessible module {0}.": { - "code": 2062, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface is using inaccessible module {0}.": { - "code": 2063, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class is using inaccessible module {0}.": { - "code": 2064, - "category": 1 /* Error */ - }, - "Return type of public method from exported class is using inaccessible module {0}.": { - "code": 2065, - "category": 1 /* Error */ - }, - "Return type of method from exported interface is using inaccessible module {0}.": { - "code": 2066, - "category": 1 /* Error */ - }, - "Return type of exported function is using inaccessible module {0}.": { - "code": 2067, - "category": 1 /* Error */ - }, - "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { - "code": 2068, - "category": 1 /* Error */ - }, - "A parameter list must follow a generic type argument list. '(' expected.": { - "code": 2069, - "category": 1 /* Error */ - }, - "Multiple constructor implementations are not allowed.": { - "code": 2070, - "category": 1 /* Error */ - }, - "Unable to resolve external module '{0}'.": { - "code": 2071, - "category": 1 /* Error */ - }, - "Module cannot be aliased to a non-module type.": { - "code": 2072, - "category": 1 /* Error */ - }, - "A class may only extend another class.": { - "code": 2073, - "category": 1 /* Error */ - }, - "A class may only implement another class or interface.": { - "code": 2074, - "category": 1 /* Error */ - }, - "An interface may only extend another class or interface.": { - "code": 2075, - "category": 1 /* Error */ - }, - "Unable to resolve type.": { - "code": 2077, - "category": 1 /* Error */ - }, - "Unable to resolve type of '{0}'.": { - "code": 2078, - "category": 1 /* Error */ - }, - "Unable to resolve type parameter constraint.": { - "code": 2079, - "category": 1 /* Error */ - }, - "Type parameter constraint cannot be a primitive type.": { - "code": 2080, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target.": { - "code": 2081, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target:{NL}{0}": { - "code": 2082, - "category": 1 /* Error */ - }, - "Invalid 'new' expression.": { - "code": 2083, - "category": 1 /* Error */ - }, - "Call signatures used in a 'new' expression must have a 'void' return type.": { - "code": 2084, - "category": 1 /* Error */ - }, - "Could not select overload for 'new' expression.": { - "code": 2085, - "category": 1 /* Error */ - }, - "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.": { - "code": 2086, - "category": 1 /* Error */ - }, - "Could not select overload for 'call' expression.": { - "code": 2087, - "category": 1 /* Error */ - }, - "Cannot invoke an expression whose type lacks a call signature.": { - "code": 2088, - "category": 1 /* Error */ - }, - "Calls to 'super' are only valid inside a class.": { - "code": 2089, - "category": 1 /* Error */ - }, - "Generic type '{0}' requires {1} type argument(s).": { - "code": 2090, - "category": 1 /* Error */ - }, - "Type of array literal cannot be determined. Best common type could not be found for array elements.": { - "code": 2092, - "category": 1 /* Error */ - }, - "Could not find enclosing symbol for dotted name '{0}'.": { - "code": 2093, - "category": 1 /* Error */ - }, - "The property '{0}' does not exist on value of type '{1}'.": { - "code": 2094, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}'.": { - "code": 2095, - "category": 1 /* Error */ - }, - "'get' and 'set' accessor must have the same type.": { - "code": 2096, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in current location.": { - "code": 2097, - "category": 1 /* Error */ - }, - "Static members cannot reference class type parameters.": { - "code": 2099, - "category": 1 /* Error */ - }, - "Class '{0}' is recursively referenced as a base type of itself.": { - "code": 2100, - "category": 1 /* Error */ - }, - "Interface '{0}' is recursively referenced as a base type of itself.": { - "code": 2101, - "category": 1 /* Error */ - }, - "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { - "code": 2102, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in non-derived classes.": { - "code": 2103, - "category": 1 /* Error */ - }, - "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { - "code": 2104, - "category": 1 /* Error */ - }, - "Constructors for derived classes must contain a 'super' call.": { - "code": 2105, - "category": 1 /* Error */ - }, - "Super calls are not permitted outside constructors or in nested functions inside constructors.": { - "code": 2106, - "category": 1 /* Error */ - }, - "'{0}.{1}' is inaccessible.": { - "code": 2107, - "category": 1 /* Error */ - }, - "'this' cannot be referenced within module bodies.": { - "code": 2108, - "category": 1 /* Error */ - }, - "Invalid '+' expression - types not known to support the addition operator.": { - "code": 2111, - "category": 1 /* Error */ - }, - "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2112, - "category": 1 /* Error */ - }, - "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2113, - "category": 1 /* Error */ - }, - "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.": { - "code": 2114, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement cannot use a type annotation.": { - "code": 2115, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { - "code": 2116, - "category": 1 /* Error */ - }, - "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { - "code": 2117, - "category": 1 /* Error */ - }, - "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { - "code": 2118, - "category": 1 /* Error */ - }, - "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { - "code": 2119, - "category": 1 /* Error */ - }, - "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { - "code": 2120, - "category": 1 /* Error */ - }, - "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { - "code": 2121, - "category": 1 /* Error */ - }, - "Setters cannot return a value.": { - "code": 2122, - "category": 1 /* Error */ - }, - "Tried to query type of uninitialized module '{0}'.": { - "code": 2123, - "category": 1 /* Error */ - }, - "Tried to set variable type to uninitialized module type '{0}'.": { - "code": 2124, - "category": 1 /* Error */ - }, - "Type '{0}' does not have type parameters.": { - "code": 2125, - "category": 1 /* Error */ - }, - "Getters must return a value.": { - "code": 2126, - "category": 1 /* Error */ - }, - "Getter and setter accessors do not agree in visibility.": { - "code": 2127, - "category": 1 /* Error */ - }, - "Invalid left-hand side of assignment expression.": { - "code": 2130, - "category": 1 /* Error */ - }, - "Function declared a non-void return type, but has no return expression.": { - "code": 2131, - "category": 1 /* Error */ - }, - "Cannot resolve return type reference.": { - "code": 2132, - "category": 1 /* Error */ - }, - "Constructors cannot have a return type of 'void'.": { - "code": 2133, - "category": 1 /* Error */ - }, - "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { - "code": 2134, - "category": 1 /* Error */ - }, - "All symbols within a with block will be resolved to 'any'.": { - "code": 2135, - "category": 1 /* Error */ - }, - "Import declarations in an internal module cannot reference an external module.": { - "code": 2136, - "category": 1 /* Error */ - }, - "Class {0} declares interface {1} but does not implement it:{NL}{2}": { - "code": 2137, - "category": 1 /* Error */ - }, - "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { - "code": 2138, - "category": 1 /* Error */ - }, - "The operand of an increment or decrement operator must be a variable, property or indexer.": { - "code": 2139, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in static initializers in a class body.": { - "code": 2140, - "category": 1 /* Error */ - }, - "Class '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2141, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2142, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend interface '{1}':{NL}{2}": { - "code": 2143, - "category": 1 /* Error */ - }, - "Duplicate overload signature for '{0}'.": { - "code": 2144, - "category": 1 /* Error */ - }, - "Duplicate constructor overload signature.": { - "code": 2145, - "category": 1 /* Error */ - }, - "Duplicate overload call signature.": { - "code": 2146, - "category": 1 /* Error */ - }, - "Duplicate overload construct signature.": { - "code": 2147, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition.": { - "code": 2148, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition:{NL}{0}": { - "code": 2149, - "category": 1 /* Error */ - }, - "Overload signatures must all be public or private.": { - "code": 2150, - "category": 1 /* Error */ - }, - "Overload signatures must all be exported or not exported.": { - "code": 2151, - "category": 1 /* Error */ - }, - "Overload signatures must all be ambient or non-ambient.": { - "code": 2152, - "category": 1 /* Error */ - }, - "Overload signatures must all be optional or required.": { - "code": 2153, - "category": 1 /* Error */ - }, - "Specialized overload signature is not assignable to any non-specialized signature.": { - "code": 2154, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in constructor arguments.": { - "code": 2155, - "category": 1 /* Error */ - }, - "Instance member cannot be accessed off a class.": { - "code": 2157, - "category": 1 /* Error */ - }, - "Untyped function calls may not accept type arguments.": { - "code": 2158, - "category": 1 /* Error */ - }, - "Non-generic functions may not accept type arguments.": { - "code": 2159, - "category": 1 /* Error */ - }, - "A generic type may not reference itself with a wrapped form of its own type parameters.": { - "code": 2160, - "category": 1 /* Error */ - }, - "Rest parameters must be array types.": { - "code": 2162, - "category": 1 /* Error */ - }, - "Overload signature implementation cannot use specialized type.": { - "code": 2163, - "category": 1 /* Error */ - }, - "Export assignments may only be used at the top-level of external modules.": { - "code": 2164, - "category": 1 /* Error */ - }, - "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2165, - "category": 1 /* Error */ - }, - "Only public methods of the base class are accessible via the 'super' keyword.": { - "code": 2166, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { - "code": 2167, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { - "code": 2168, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}'.": { - "code": 2169, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { - "code": 2170, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}'.": { - "code": 2171, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}':{NL}{1}": { - "code": 2172, - "category": 1 /* Error */ - }, - "Generic type references must include all type arguments.": { - "code": 2173, - "category": 1 /* Error */ - }, - "Default arguments are only allowed in implementation.": { - "code": 2174, - "category": 1 /* Error */ - }, - "Overloads cannot differ only by return type.": { - "code": 2175, - "category": 1 /* Error */ - }, - "Function expression declared a non-void return type, but has no return expression.": { - "code": 2176, - "category": 1 /* Error */ - }, - "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2177, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}' in module '{1}'.": { - "code": 2178, - "category": 1 /* Error */ - }, - "Unable to resolve module reference '{0}'.": { - "code": 2179, - "category": 1 /* Error */ - }, - "Could not find module '{0}' in module '{1}'.": { - "code": 2180, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { - "code": 2181, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { - "code": 2182, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { - "code": 2183, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { - "code": 2184, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { - "code": 2185, - "category": 1 /* Error */ - }, - "Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { - "code": 2186, - "category": 1 /* Error */ - }, - "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { - "code": 2187, - "category": 1 /* Error */ - }, - "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { - "code": 2188, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { - "code": 2189, - "category": 1 /* Error */ - }, - "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { - "code": 2190, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot be reopened.": { - "code": 2191, - "category": 1 /* Error */ - }, - "All declarations of merged declaration '{0}' must be exported or not exported.": { - "code": 2192, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in constructor arguments.": { - "code": 2193, - "category": 1 /* Error */ - }, - "Return type of constructor signature must be assignable to the instance type of the class.": { - "code": 2194, - "category": 1 /* Error */ - }, - "Ambient external module declaration must be defined in global context.": { - "code": 2195, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot specify relative module name.": { - "code": 2196, - "category": 1 /* Error */ - }, - "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { - "code": 2197, - "category": 1 /* Error */ - }, - "Could not find the best common type of types of all return statement expressions.": { - "code": 2198, - "category": 1 /* Error */ - }, - "Import declaration cannot refer to external module reference when --noResolve option is set.": { - "code": 2199, - "category": 1 /* Error */ - }, - "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { - "code": 2200, - "category": 1 /* Error */ - }, - "'continue' statement can only be used within an enclosing iteration statement.": { - "code": 2201, - "category": 1 /* Error */ - }, - "'break' statement can only be used within an enclosing iteration or switch statement.": { - "code": 2202, - "category": 1 /* Error */ - }, - "Jump target not found.": { - "code": 2203, - "category": 1 /* Error */ - }, - "Jump target cannot cross function boundary.": { - "code": 2204, - "category": 1 /* Error */ - }, - "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { - "code": 2205, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { - "code": 2206, - "category": 1 /* Error */ - }, - "Expression resolves to '_super' that compiler uses to capture base class reference.": { - "code": 2207, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2208, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2209, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2210, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2211, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2212, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2213, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2214, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2215, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2216, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2217, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2218, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2219, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class has or is using private type '{1}'.": { - "code": 2220, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2221, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class is using inaccessible module {1}.": { - "code": 2222, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2223, - "category": 1 /* Error */ - }, - "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { - "code": 2224, - "category": 1 /* Error */ - }, - "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { - "code": 2225, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}' or '{2}'.": { - "code": 2226, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.": { - "code": 2227, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { - "code": 2228, - "category": 1 /* Error */ - }, - "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { - "code": 2229, - "category": 1 /* Error */ - }, - "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { - "code": 2230, - "category": 1 /* Error */ - }, - "Parameter '{0}' cannot be referenced in its initializer.": { - "code": 2231, - "category": 1 /* Error */ - }, - "Duplicate string index signature.": { - "code": 2232, - "category": 1 /* Error */ - }, - "Duplicate number index signature.": { - "code": 2233, - "category": 1 /* Error */ - }, - "All declarations of an interface must have identical type parameters.": { - "code": 2234, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { - "code": 2235, - "category": 1 /* Error */ - }, - "Type '{0}' is missing property '{1}' from type '{2}'.": { - "code": 4000, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { - "code": 4001, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { - "code": 4002, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4003, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4004, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define property '{2}' as private.": { - "code": 4005, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4006, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4007, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a call signature, but type '{1}' lacks one.": { - "code": 4008, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4009, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4010, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a construct signature, but type '{1}' lacks one.": { - "code": 4011, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4012, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4013, - "category": 3 /* NoPrefix */ - }, - "Call signature expects {0} or fewer parameters.": { - "code": 4014, - "category": 3 /* NoPrefix */ - }, - "Could not apply type '{0}' to argument {1} which is of type '{2}'.": { - "code": 4015, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4016, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4017, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { - "code": 4018, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { - "code": 4019, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { - "code": 4020, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { - "code": 4021, - "category": 3 /* NoPrefix */ - }, - "Type reference cannot refer to container '{0}'.": { - "code": 4022, - "category": 1 /* Error */ - }, - "Type reference must refer to type.": { - "code": 4023, - "category": 1 /* Error */ - }, - "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { - "code": 4024, - "category": 1 /* Error */ - }, - " (+ {0} overload(s))": { - "code": 4025, - "category": 2 /* Message */ - }, - "Variable declaration cannot have the same name as an import declaration.": { - "code": 4026, - "category": 1 /* Error */ - }, - "Signature expected {0} type arguments, got {1} instead.": { - "code": 4027, - "category": 1 /* Error */ - }, - "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { - "code": 4028, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { - "code": 4029, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { - "code": 4030, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { - "code": 4031, - "category": 3 /* NoPrefix */ - }, - "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { - "code": 4032, - "category": 3 /* NoPrefix */ - }, - "Types of string indexer of types '{0}' and '{1}' are not identical.": { - "code": 4033, - "category": 3 /* NoPrefix */ - }, - "Types of number indexer of types '{0}' and '{1}' are not identical.": { - "code": 4034, - "category": 3 /* NoPrefix */ - }, - "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { - "code": 4035, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { - "code": 4036, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { - "code": 4037, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4038, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4039, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define static property '{2}' as private.": { - "code": 4040, - "category": 3 /* NoPrefix */ - }, - "Current host does not support '{0}' option.": { - "code": 5001, - "category": 1 /* Error */ - }, - "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { - "code": 5002, - "category": 1 /* Error */ - }, - "Module code generation '{0}' not supported.": { - "code": 5003, - "category": 1 /* Error */ - }, - "Could not find file: '{0}'.": { - "code": 5004, - "category": 1 /* Error */ - }, - "A file cannot have a reference to itself.": { - "code": 5006, - "category": 1 /* Error */ - }, - "Cannot resolve referenced file: '{0}'.": { - "code": 5007, - "category": 1 /* Error */ - }, - "Cannot find the common subdirectory path for the input files.": { - "code": 5009, - "category": 1 /* Error */ - }, - "Emit Error: {0}.": { - "code": 5011, - "category": 1 /* Error */ - }, - "Cannot read file '{0}': {1}": { - "code": 5012, - "category": 1 /* Error */ - }, - "Unsupported file encoding.": { - "code": 5013, - "category": 3 /* NoPrefix */ - }, - "Locale must be of the form or -. For example '{0}' or '{1}'.": { - "code": 5014, - "category": 1 /* Error */ - }, - "Unsupported locale: '{0}'.": { - "code": 5015, - "category": 1 /* Error */ - }, - "Execution Failed.{NL}": { - "code": 5016, - "category": 1 /* Error */ - }, - "Invalid call to 'up'": { - "code": 5019, - "category": 1 /* Error */ - }, - "Invalid call to 'down'": { - "code": 5020, - "category": 1 /* Error */ - }, - "Base64 value '{0}' finished with a continuation bit.": { - "code": 5021, - "category": 1 /* Error */ - }, - "Unknown option '{0}'": { - "code": 5023, - "category": 1 /* Error */ - }, - "Expected {0} arguments to message, got {1} instead.": { - "code": 5024, - "category": 1 /* Error */ - }, - "Expected the message '{0}' to have {1} arguments, but it had {2}": { - "code": 5025, - "category": 1 /* Error */ - }, - "Could not delete file '{0}'": { - "code": 5034, - "category": 1 /* Error */ - }, - "Could not create directory '{0}'": { - "code": 5035, - "category": 1 /* Error */ - }, - "Error while executing file '{0}': ": { - "code": 5036, - "category": 1 /* Error */ - }, - "Cannot compile external modules unless the '--module' flag is provided.": { - "code": 5037, - "category": 1 /* Error */ - }, - "Option mapRoot cannot be specified without specifying sourcemap option.": { - "code": 5038, - "category": 1 /* Error */ - }, - "Option sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5039, - "category": 1 /* Error */ - }, - "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5040, - "category": 1 /* Error */ - }, - "Option '{0}' specified without '{1}'": { - "code": 5041, - "category": 1 /* Error */ - }, - "'codepage' option not supported on current platform.": { - "code": 5042, - "category": 1 /* Error */ - }, - "Concatenate and emit output to single file.": { - "code": 6001, - "category": 2 /* Message */ - }, - "Generates corresponding {0} file.": { - "code": 6002, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate map files instead of generated locations.": { - "code": 6003, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate TypeScript files instead of source locations.": { - "code": 6004, - "category": 2 /* Message */ - }, - "Watch input files.": { - "code": 6005, - "category": 2 /* Message */ - }, - "Redirect output structure to the directory.": { - "code": 6006, - "category": 2 /* Message */ - }, - "Do not emit comments to output.": { - "code": 6009, - "category": 2 /* Message */ - }, - "Skip resolution and preprocessing.": { - "code": 6010, - "category": 2 /* Message */ - }, - "Specify ECMAScript target version: '{0}' (default), or '{1}'": { - "code": 6015, - "category": 2 /* Message */ - }, - "Specify module code generation: '{0}' or '{1}'": { - "code": 6016, - "category": 2 /* Message */ - }, - "Print this message.": { - "code": 6017, - "category": 2 /* Message */ - }, - "Print the compiler's version: {0}": { - "code": 6019, - "category": 2 /* Message */ - }, - "Allow use of deprecated '{0}' keyword when referencing an external module.": { - "code": 6021, - "category": 2 /* Message */ - }, - "Specify locale for errors and messages. For example '{0}' or '{1}'": { - "code": 6022, - "category": 2 /* Message */ - }, - "Syntax: {0}": { - "code": 6023, - "category": 2 /* Message */ - }, - "options": { - "code": 6024, - "category": 2 /* Message */ - }, - "file1": { - "code": 6025, - "category": 2 /* Message */ - }, - "Examples:": { - "code": 6026, - "category": 2 /* Message */ - }, - "Options:": { - "code": 6027, - "category": 2 /* Message */ - }, - "Insert command line options and files from a file.": { - "code": 6030, - "category": 2 /* Message */ - }, - "Version {0}": { - "code": 6029, - "category": 2 /* Message */ - }, - "Use the '{0}' flag to see options.": { - "code": 6031, - "category": 2 /* Message */ - }, - "{NL}Recompiling ({0}):": { - "code": 6032, - "category": 2 /* Message */ - }, - "STRING": { - "code": 6033, - "category": 2 /* Message */ - }, - "KIND": { - "code": 6034, - "category": 2 /* Message */ - }, - "file2": { - "code": 6035, - "category": 2 /* Message */ - }, - "VERSION": { - "code": 6036, - "category": 2 /* Message */ - }, - "LOCATION": { - "code": 6037, - "category": 2 /* Message */ - }, - "DIRECTORY": { - "code": 6038, - "category": 2 /* Message */ - }, - "NUMBER": { - "code": 6039, - "category": 2 /* Message */ - }, - "Specify the codepage to use when opening source files.": { - "code": 6040, - "category": 2 /* Message */ - }, - "Additional locations:": { - "code": 6041, - "category": 2 /* Message */ - }, - "This version of the Javascript runtime does not support the '{0}' function.": { - "code": 7000, - "category": 1 /* Error */ - }, - "Unknown rule.": { - "code": 7002, - "category": 1 /* Error */ - }, - "Invalid line number ({0})": { - "code": 7003, - "category": 1 /* Error */ - }, - "Warn on expressions and declarations with an implied 'any' type.": { - "code": 7004, - "category": 2 /* Message */ - }, - "Variable '{0}' implicitly has an 'any' type.": { - "code": 7005, - "category": 1 /* Error */ - }, - "Parameter '{0}' of '{1}' implicitly has an 'any' type.": { - "code": 7006, - "category": 1 /* Error */ - }, - "Parameter '{0}' of function type implicitly has an 'any' type.": { - "code": 7007, - "category": 1 /* Error */ - }, - "Member '{0}' of object type implicitly has an 'any' type.": { - "code": 7008, - "category": 1 /* Error */ - }, - "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { - "code": 7009, - "category": 1 /* Error */ - }, - "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7010, - "category": 1 /* Error */ - }, - "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7011, - "category": 1 /* Error */ - }, - "Parameter '{0}' of lambda function implicitly has an 'any' type.": { - "code": 7012, - "category": 1 /* Error */ - }, - "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7013, - "category": 1 /* Error */ - }, - "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7014, - "category": 1 /* Error */ - }, - "Array Literal implicitly has an 'any' type from widening.": { - "code": 7015, - "category": 1 /* Error */ - }, - "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { - "code": 7016, - "category": 1 /* Error */ - }, - "Index signature of object type implicitly has an 'any' type.": { - "code": 7017, - "category": 1 /* Error */ - }, - "Object literal's property '{0}' implicitly has an 'any' type from widening.": { - "code": 7018, - "category": 1 /* Error */ - } - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CharacterCodes) { - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; - - CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; - - CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; - - CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; - - CharacterCodes[CharacterCodes["_"] = 95] = "_"; - CharacterCodes[CharacterCodes["$"] = 36] = "$"; - - CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; - CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; - CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; - - CharacterCodes[CharacterCodes["a"] = 97] = "a"; - CharacterCodes[CharacterCodes["b"] = 98] = "b"; - CharacterCodes[CharacterCodes["c"] = 99] = "c"; - CharacterCodes[CharacterCodes["d"] = 100] = "d"; - CharacterCodes[CharacterCodes["e"] = 101] = "e"; - CharacterCodes[CharacterCodes["f"] = 102] = "f"; - CharacterCodes[CharacterCodes["g"] = 103] = "g"; - CharacterCodes[CharacterCodes["h"] = 104] = "h"; - CharacterCodes[CharacterCodes["i"] = 105] = "i"; - CharacterCodes[CharacterCodes["k"] = 107] = "k"; - CharacterCodes[CharacterCodes["l"] = 108] = "l"; - CharacterCodes[CharacterCodes["m"] = 109] = "m"; - CharacterCodes[CharacterCodes["n"] = 110] = "n"; - CharacterCodes[CharacterCodes["o"] = 111] = "o"; - CharacterCodes[CharacterCodes["p"] = 112] = "p"; - CharacterCodes[CharacterCodes["q"] = 113] = "q"; - CharacterCodes[CharacterCodes["r"] = 114] = "r"; - CharacterCodes[CharacterCodes["s"] = 115] = "s"; - CharacterCodes[CharacterCodes["t"] = 116] = "t"; - CharacterCodes[CharacterCodes["u"] = 117] = "u"; - CharacterCodes[CharacterCodes["v"] = 118] = "v"; - CharacterCodes[CharacterCodes["w"] = 119] = "w"; - CharacterCodes[CharacterCodes["x"] = 120] = "x"; - CharacterCodes[CharacterCodes["y"] = 121] = "y"; - CharacterCodes[CharacterCodes["z"] = 122] = "z"; - - CharacterCodes[CharacterCodes["A"] = 65] = "A"; - CharacterCodes[CharacterCodes["E"] = 69] = "E"; - CharacterCodes[CharacterCodes["F"] = 70] = "F"; - CharacterCodes[CharacterCodes["X"] = 88] = "X"; - CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; - - CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 64] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; - CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; - CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; - CharacterCodes[CharacterCodes["question"] = 63] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; - - CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; - })(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {})); - var CharacterCodes = TypeScript.CharacterCodes; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - (function (ScriptSnapshot) { - var StringScriptSnapshot = (function () { - function StringScriptSnapshot(text) { - this.text = text; - this._lineStartPositions = null; - } - StringScriptSnapshot.prototype.getText = function (start, end) { - return this.text.substring(start, end); - }; - - StringScriptSnapshot.prototype.getLength = function () { - return this.text.length; - }; - - StringScriptSnapshot.prototype.getLineStartPositions = function () { - if (!this._lineStartPositions) { - this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text); - } - - return this._lineStartPositions; - }; - - StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - throw TypeScript.Errors.notYetImplemented(); - }; - return StringScriptSnapshot; - })(); - - function fromString(text) { - return new StringScriptSnapshot(text); - } - ScriptSnapshot.fromString = fromString; - })(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {})); - var ScriptSnapshot = TypeScript.ScriptSnapshot; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LineMap1) { - function fromSimpleText(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return text.charCodeAt(index); - }, length: text.length() }); - }, text.length()); - } - LineMap1.fromSimpleText = fromSimpleText; - - function fromScriptSnapshot(scriptSnapshot) { - return new TypeScript.LineMap(function () { - return scriptSnapshot.getLineStartPositions(); - }, scriptSnapshot.getLength()); - } - LineMap1.fromScriptSnapshot = fromScriptSnapshot; - - function fromString(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts(text); - }, text.length); - } - LineMap1.fromString = fromString; - })(TypeScript.LineMap1 || (TypeScript.LineMap1 = {})); - var LineMap1 = TypeScript.LineMap1; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextFactory) { - function getStartAndLengthOfLineBreakEndingAt(text, index, info) { - var c = text.charCodeAt(index); - if (c === 10 /* lineFeed */) { - if (index > 0 && text.charCodeAt(index - 1) === 13 /* carriageReturn */) { - info.startPosition = index - 1; - info.length = 2; - } else { - info.startPosition = index; - info.length = 1; - } - } else if (TypeScript.TextUtilities.isAnyLineBreakCharacter(c)) { - info.startPosition = index; - info.length = 1; - } else { - info.startPosition = index + 1; - info.length = 0; - } - } - - var LinebreakInfo = (function () { - function LinebreakInfo(startPosition, length) { - this.startPosition = startPosition; - this.length = length; - } - return LinebreakInfo; - })(); - - var TextLine = (function () { - function TextLine(text, body, lineBreakLength, lineNumber) { - this._text = null; - this._textSpan = null; - if (text === null) { - throw TypeScript.Errors.argumentNull('text'); - } - TypeScript.Debug.assert(lineBreakLength >= 0); - TypeScript.Debug.assert(lineNumber >= 0); - this._text = text; - this._textSpan = body; - this._lineBreakLength = lineBreakLength; - this._lineNumber = lineNumber; - } - TextLine.prototype.start = function () { - return this._textSpan.start(); - }; - - TextLine.prototype.end = function () { - return this._textSpan.end(); - }; - - TextLine.prototype.endIncludingLineBreak = function () { - return this.end() + this._lineBreakLength; - }; - - TextLine.prototype.extent = function () { - return this._textSpan; - }; - - TextLine.prototype.extentIncludingLineBreak = function () { - return TypeScript.TextSpan.fromBounds(this.start(), this.endIncludingLineBreak()); - }; - - TextLine.prototype.toString = function () { - return this._text.toString(this._textSpan); - }; - - TextLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - return TextLine; - })(); - - var TextBase = (function () { - function TextBase() { - this.linebreakInfo = new LinebreakInfo(0, 0); - this.lastLineFoundForPosition = null; - } - TextBase.prototype.length = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.charCodeAt = function (position) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - TextBase.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this, span); - }; - - TextBase.prototype.substr = function (start, length, intern) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.lineCount = function () { - return this._lineStarts().length; - }; - - TextBase.prototype.lines = function () { - var lines = []; - - var length = this.lineCount(); - for (var i = 0; i < length; ++i) { - lines[i] = this.getLineFromLineNumber(i); - } - - return lines; - }; - - TextBase.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this._lineStarts(); - }, this.length()); - }; - - TextBase.prototype._lineStarts = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.getLineFromLineNumber = function (lineNumber) { - var lineStarts = this._lineStarts(); - - if (lineNumber < 0 || lineNumber >= lineStarts.length) { - throw TypeScript.Errors.argumentOutOfRange("lineNumber"); - } - - var first = lineStarts[lineNumber]; - if (lineNumber === lineStarts.length - 1) { - return new TextLine(this, new TypeScript.TextSpan(first, this.length() - first), 0, lineNumber); - } else { - getStartAndLengthOfLineBreakEndingAt(this, lineStarts[lineNumber + 1] - 1, this.linebreakInfo); - return new TextLine(this, new TypeScript.TextSpan(first, this.linebreakInfo.startPosition - first), this.linebreakInfo.length, lineNumber); - } - }; - - TextBase.prototype.getLineFromPosition = function (position) { - var lastFound = this.lastLineFoundForPosition; - if (lastFound !== null && lastFound.start() <= position && lastFound.endIncludingLineBreak() > position) { - return lastFound; - } - - var lineNumber = this.getLineNumberFromPosition(position); - - var result = this.getLineFromLineNumber(lineNumber); - this.lastLineFoundForPosition = result; - return result; - }; - - TextBase.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length()) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this._lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - TextBase.prototype.getLinePosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this._lineStarts()[lineNumber]); - }; - return TextBase; - })(); - - var SubText = (function (_super) { - __extends(SubText, _super); - function SubText(text, span) { - _super.call(this); - this._lazyLineStarts = null; - - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SubText.prototype.length = function () { - return this.span.length(); - }; - - SubText.prototype.charCodeAt = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.text.charCodeAt(this.span.start() + position); - }; - - SubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SubText.prototype.substr = function (start, length, intern) { - var startInOriginalText = this.span.start() + start; - return this.text.substr(startInOriginalText, length, intern); - }; - - SubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SubText.prototype._lineStarts = function () { - var _this = this; - if (!this._lazyLineStarts) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return _this.charCodeAt(index); - }, length: this.length() }); - } - - return this._lazyLineStarts; - }; - return SubText; - })(TextBase); - - var StringText = (function (_super) { - __extends(StringText, _super); - function StringText(data) { - _super.call(this); - this.source = null; - this._lazyLineStarts = null; - - if (data === null) { - throw TypeScript.Errors.argumentNull("data"); - } - - this.source = data; - } - StringText.prototype.length = function () { - return this.source.length; - }; - - StringText.prototype.charCodeAt = function (position) { - if (position < 0 || position >= this.source.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.source.charCodeAt(position); - }; - - StringText.prototype.substr = function (start, length, intern) { - return this.source.substr(start, length); - }; - - StringText.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - if (span === null) { - span = new TypeScript.TextSpan(0, this.length()); - } - - this.checkSubSpan(span); - - if (span.start() === 0 && span.length() === this.length()) { - return this.source; - } - - return this.source.substr(span.start(), span.length()); - }; - - StringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.source, sourceIndex, destination, destinationIndex, count); - }; - - StringText.prototype._lineStarts = function () { - if (this._lazyLineStarts === null) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts(this.source); - } - - return this._lazyLineStarts; - }; - return StringText; - })(TextBase); - - function createText(value) { - return new StringText(value); - } - TextFactory.createText = createText; - })(TypeScript.TextFactory || (TypeScript.TextFactory = {})); - var TextFactory = TypeScript.TextFactory; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (SimpleText) { - var SimpleSubText = (function () { - function SimpleSubText(text, span) { - this.text = null; - this.span = null; - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SimpleSubText.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - SimpleSubText.prototype.checkSubPosition = function (position) { - if (position < 0 || position >= this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - }; - - SimpleSubText.prototype.length = function () { - return this.span.length(); - }; - - SimpleSubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SimpleSubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SimpleSubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SimpleSubText.prototype.substr = function (start, length, intern) { - var span = this.getCompositeSpan(start, length); - return this.text.substr(span.start(), span.length(), intern); - }; - - SimpleSubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SimpleSubText.prototype.charCodeAt = function (index) { - this.checkSubPosition(index); - return this.text.charCodeAt(this.span.start() + index); - }; - - SimpleSubText.prototype.lineMap = function () { - return TypeScript.LineMap1.fromSimpleText(this); - }; - return SimpleSubText; - })(); - - var SimpleStringText = (function () { - function SimpleStringText(value) { - this.value = value; - this._lineMap = null; - } - SimpleStringText.prototype.length = function () { - return this.value.length; - }; - - SimpleStringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.value, sourceIndex, destination, destinationIndex, count); - }; - - SimpleStringText.prototype.substr = function (start, length, intern) { - if (intern) { - var array = length <= SimpleStringText.charArray.length ? SimpleStringText.charArray : TypeScript.ArrayUtilities.createArray(length, 0); - this.copyTo(start, array, 0, length); - return TypeScript.Collections.DefaultStringTable.addCharArray(array, 0, length); - } - - return this.value.substr(start, length); - }; - - SimpleStringText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleStringText.prototype.charCodeAt = function (index) { - return this.value.charCodeAt(index); - }; - - SimpleStringText.prototype.lineMap = function () { - if (!this._lineMap) { - this._lineMap = TypeScript.LineMap1.fromString(this.value); - } - - return this._lineMap; - }; - SimpleStringText.charArray = TypeScript.ArrayUtilities.createArray(1024, 0); - return SimpleStringText; - })(); - - var SimpleScriptSnapshotText = (function () { - function SimpleScriptSnapshotText(scriptSnapshot) { - this.scriptSnapshot = scriptSnapshot; - } - SimpleScriptSnapshotText.prototype.charCodeAt = function (index) { - return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0); - }; - - SimpleScriptSnapshotText.prototype.length = function () { - return this.scriptSnapshot.getLength(); - }; - - SimpleScriptSnapshotText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var text = this.scriptSnapshot.getText(sourceIndex, sourceIndex + count); - TypeScript.StringUtilities.copyTo(text, 0, destination, destinationIndex, count); - }; - - SimpleScriptSnapshotText.prototype.substr = function (start, length, intern) { - return this.scriptSnapshot.getText(start, start + length); - }; - - SimpleScriptSnapshotText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleScriptSnapshotText.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this.scriptSnapshot.getLineStartPositions(); - }, this.length()); - }; - return SimpleScriptSnapshotText; - })(); - - function fromString(value) { - return new SimpleStringText(value); - } - SimpleText.fromString = fromString; - - function fromScriptSnapshot(scriptSnapshot) { - return new SimpleScriptSnapshotText(scriptSnapshot); - } - SimpleText.fromScriptSnapshot = fromScriptSnapshot; - })(TypeScript.SimpleText || (TypeScript.SimpleText = {})); - var SimpleText = TypeScript.SimpleText; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextUtilities) { - function parseLineStarts(text) { - var length = text.length; - - if (0 === length) { - var result = new Array(); - result.push(0); - return result; - } - - var position = 0; - var index = 0; - var arrayBuilder = new Array(); - var lineNumber = 0; - - while (index < length) { - var c = text.charCodeAt(index); - var lineBreakLength; - - if (c > 13 /* carriageReturn */ && c <= 127) { - index++; - continue; - } else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) { - lineBreakLength = 2; - } else if (c === 10 /* lineFeed */) { - lineBreakLength = 1; - } else { - lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index); - } - - if (0 === lineBreakLength) { - index++; - } else { - arrayBuilder.push(position); - index += lineBreakLength; - position = index; - lineNumber++; - } - } - - arrayBuilder.push(position); - - return arrayBuilder; - } - TextUtilities.parseLineStarts = parseLineStarts; - - function getLengthOfLineBreakSlow(text, index, c) { - if (c === 13 /* carriageReturn */) { - var next = index + 1; - return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1; - } else if (isAnyLineBreakCharacter(c)) { - return 1; - } else { - return 0; - } - } - TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow; - - function getLengthOfLineBreak(text, index) { - var c = text.charCodeAt(index); - - if (c > 13 /* carriageReturn */ && c <= 127) { - return 0; - } - - return getLengthOfLineBreakSlow(text, index, c); - } - TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak; - - function isAnyLineBreakCharacter(c) { - return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */; - } - TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter; - })(TypeScript.TextUtilities || (TypeScript.TextUtilities = {})); - var TextUtilities = TypeScript.TextUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextSpan = (function () { - function TextSpan(start, length) { - if (start < 0) { - TypeScript.Errors.argument("start"); - } - - if (length < 0) { - TypeScript.Errors.argument("length"); - } - - this._start = start; - this._length = length; - } - TextSpan.prototype.start = function () { - return this._start; - }; - - TextSpan.prototype.length = function () { - return this._length; - }; - - TextSpan.prototype.end = function () { - return this._start + this._length; - }; - - TextSpan.prototype.isEmpty = function () { - return this._length === 0; - }; - - TextSpan.prototype.containsPosition = function (position) { - return position >= this._start && position < this.end(); - }; - - TextSpan.prototype.containsTextSpan = function (span) { - return span._start >= this._start && span.end() <= this.end(); - }; - - TextSpan.prototype.overlapsWith = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - return overlapStart < overlapEnd; - }; - - TextSpan.prototype.overlap = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (overlapStart < overlapEnd) { - return TextSpan.fromBounds(overlapStart, overlapEnd); - } - - return null; - }; - - TextSpan.prototype.intersectsWithTextSpan = function (span) { - return span._start <= this.end() && span.end() >= this._start; - }; - - TextSpan.prototype.intersectsWith = function (start, length) { - var end = start + length; - return start <= this.end() && end >= this._start; - }; - - TextSpan.prototype.intersectsWithPosition = function (position) { - return position <= this.end() && position >= this._start; - }; - - TextSpan.prototype.intersection = function (span) { - var intersectStart = TypeScript.MathPrototype.max(this._start, span._start); - var intersectEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (intersectStart <= intersectEnd) { - return TextSpan.fromBounds(intersectStart, intersectEnd); - } - - return null; - }; - - TextSpan.fromBounds = function (start, end) { - TypeScript.Debug.assert(start >= 0); - TypeScript.Debug.assert(end - start >= 0); - return new TextSpan(start, end - start); - }; - return TextSpan; - })(); - TypeScript.TextSpan = TextSpan; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextChangeRange = (function () { - function TextChangeRange(span, newLength) { - if (newLength < 0) { - throw TypeScript.Errors.argumentOutOfRange("newLength"); - } - - this._span = span; - this._newLength = newLength; - } - TextChangeRange.prototype.span = function () { - return this._span; - }; - - TextChangeRange.prototype.newLength = function () { - return this._newLength; - }; - - TextChangeRange.prototype.newSpan = function () { - return new TypeScript.TextSpan(this.span().start(), this.newLength()); - }; - - TextChangeRange.prototype.isUnchanged = function () { - return this.span().isEmpty() && this.newLength() === 0; - }; - - TextChangeRange.collapseChangesFromSingleVersion = function (changes) { - var diff = 0; - var start = 1073741823 /* Max31BitInteger */; - var end = 0; - - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - diff += change.newLength() - change.span().length(); - - if (change.span().start() < start) { - start = change.span().start(); - } - - if (change.span().end() > end) { - end = change.span().end(); - } - } - - if (start > end) { - return null; - } - - var combined = TypeScript.TextSpan.fromBounds(start, end); - var newLen = combined.length() + diff; - - return new TextChangeRange(combined, newLen); - }; - - TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) { - if (changes.length === 0) { - return TextChangeRange.unchanged; - } - - if (changes.length === 1) { - return changes[0]; - } - - var change0 = changes[0]; - - var oldStartN = change0.span().start(); - var oldEndN = change0.span().end(); - var newEndN = oldStartN + change0.newLength(); - - for (var i = 1; i < changes.length; i++) { - var nextChange = changes[i]; - - var oldStart1 = oldStartN; - var oldEnd1 = oldEndN; - var newEnd1 = newEndN; - - var oldStart2 = nextChange.span().start(); - var oldEnd2 = nextChange.span().end(); - var newEnd2 = oldStart2 + nextChange.newLength(); - - oldStartN = TypeScript.MathPrototype.min(oldStart1, oldStart2); - oldEndN = TypeScript.MathPrototype.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); - newEndN = TypeScript.MathPrototype.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); - } - - return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN); - }; - TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0); - return TextChangeRange; - })(); - TypeScript.TextChangeRange = TextChangeRange; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CharacterInfo = (function () { - function CharacterInfo() { - } - CharacterInfo.isDecimalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 57 /* _9 */; - }; - CharacterInfo.isOctalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 55 /* _7 */; - }; - - CharacterInfo.isHexDigit = function (c) { - return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */); - }; - - CharacterInfo.hexValue = function (c) { - return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10; - }; - - CharacterInfo.isWhitespace = function (ch) { - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - return true; - } - - return false; - }; - - CharacterInfo.isLineTerminator = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - } - - return false; - }; - return CharacterInfo; - })(); - TypeScript.CharacterInfo = CharacterInfo; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxConstants) { - SyntaxConstants[SyntaxConstants["TriviaNewLineMask"] = 0x00000001] = "TriviaNewLineMask"; - SyntaxConstants[SyntaxConstants["TriviaCommentMask"] = 0x00000002] = "TriviaCommentMask"; - SyntaxConstants[SyntaxConstants["TriviaFullWidthShift"] = 2] = "TriviaFullWidthShift"; - - SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed"; - SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask"; - SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask"; - SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift"; - - SyntaxConstants[SyntaxConstants["IsVariableWidthKeyword"] = 1 << 31] = "IsVariableWidthKeyword"; - })(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {})); - var SyntaxConstants = TypeScript.SyntaxConstants; -})(TypeScript || (TypeScript = {})); -var FormattingOptions = (function () { - function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { - this.useTabs = useTabs; - this.spacesPerTab = spacesPerTab; - this.indentSpaces = indentSpaces; - this.newLineCharacter = newLineCharacter; - } - FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n"); - return FormattingOptions; -})(); -var TypeScript; -(function (TypeScript) { - (function (Indentation) { - function columnForEndOfToken(token, syntaxInformationMap, options) { - return columnForStartOfToken(token, syntaxInformationMap, options) + token.width(); - } - Indentation.columnForEndOfToken = columnForEndOfToken; - - function columnForStartOfToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - var current = token; - while (current !== firstTokenInLine) { - current = syntaxInformationMap.previousToken(current); - - if (current === firstTokenInLine) { - leadingTextInReverse.push(current.trailingTrivia().fullText()); - leadingTextInReverse.push(current.text()); - } else { - leadingTextInReverse.push(current.fullText()); - } - } - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfToken = columnForStartOfToken; - - function columnForStartOfFirstTokenInLineContainingToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfFirstTokenInLineContainingToken = columnForStartOfFirstTokenInLineContainingToken; - - function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) { - var leadingTrivia = firstTokenInLine.leadingTrivia(); - - for (var i = leadingTrivia.count() - 1; i >= 0; i--) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.kind() === 5 /* NewLineTrivia */) { - break; - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments)); - - if (lineSegments.length > 0) { - break; - } - } - - leadingTextInReverse.push(trivia.fullText()); - } - } - - function columnForLeadingTextInReverse(leadingTextInReverse, options) { - var column = 0; - - for (var i = leadingTextInReverse.length - 1; i >= 0; i--) { - var text = leadingTextInReverse[i]; - column = columnForPositionInStringWorker(text, text.length, column, options); - } - - return column; - } - - function columnForPositionInString(input, position, options) { - return columnForPositionInStringWorker(input, position, 0, options); - } - Indentation.columnForPositionInString = columnForPositionInString; - - function columnForPositionInStringWorker(input, position, startColumn, options) { - var column = startColumn; - var spacesPerTab = options.spacesPerTab; - - for (var j = 0; j < position; j++) { - var ch = input.charCodeAt(j); - - if (ch === 9 /* tab */) { - column += spacesPerTab - column % spacesPerTab; - } else { - column++; - } - } - - return column; - } - - function indentationString(column, options) { - var numberOfTabs = 0; - var numberOfSpaces = TypeScript.MathPrototype.max(0, column); - - if (options.useTabs) { - numberOfTabs = Math.floor(column / options.spacesPerTab); - numberOfSpaces -= numberOfTabs * options.spacesPerTab; - } - - return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces); - } - Indentation.indentationString = indentationString; - - function indentationTrivia(column, options) { - return TypeScript.Syntax.whitespace(this.indentationString(column, options)); - } - Indentation.indentationTrivia = indentationTrivia; - - function firstNonWhitespacePosition(value) { - for (var i = 0; i < value.length; i++) { - var ch = value.charCodeAt(i); - if (!TypeScript.CharacterInfo.isWhitespace(ch)) { - return i; - } - } - - return value.length; - } - Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; - })(TypeScript.Indentation || (TypeScript.Indentation = {})); - var Indentation = TypeScript.Indentation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LanguageVersion) { - LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; - LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; - })(TypeScript.LanguageVersion || (TypeScript.LanguageVersion = {})); - var LanguageVersion = TypeScript.LanguageVersion; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ParseOptions = (function () { - function ParseOptions(languageVersion, allowAutomaticSemicolonInsertion) { - this._languageVersion = languageVersion; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - } - ParseOptions.prototype.toJSON = function (key) { - return { allowAutomaticSemicolonInsertion: this._allowAutomaticSemicolonInsertion }; - }; - - ParseOptions.prototype.languageVersion = function () { - return this._languageVersion; - }; - - ParseOptions.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - return ParseOptions; - })(); - TypeScript.ParseOptions = ParseOptions; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionedElement = (function () { - function PositionedElement(parent, element, fullStart) { - this._parent = parent; - this._element = element; - this._fullStart = fullStart; - } - PositionedElement.create = function (parent, element, fullStart) { - if (element === null) { - return null; - } - - if (element.isNode()) { - return new PositionedNode(parent, element, fullStart); - } else if (element.isToken()) { - return new PositionedToken(parent, element, fullStart); - } else if (element.isList()) { - return new PositionedList(parent, element, fullStart); - } else if (element.isSeparatedList()) { - return new PositionedSeparatedList(parent, element, fullStart); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - PositionedElement.prototype.parent = function () { - return this._parent; - }; - - PositionedElement.prototype.parentElement = function () { - return this._parent && this._parent._element; - }; - - PositionedElement.prototype.element = function () { - return this._element; - }; - - PositionedElement.prototype.kind = function () { - return this.element().kind(); - }; - - PositionedElement.prototype.childIndex = function (child) { - return TypeScript.Syntax.childIndex(this.element(), child); - }; - - PositionedElement.prototype.childCount = function () { - return this.element().childCount(); - }; - - PositionedElement.prototype.childAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - return PositionedElement.create(this, this.element().childAt(index), this.fullStart() + offset); - }; - - PositionedElement.prototype.childStart = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEnd = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.childStartAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEndAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.getPositionedChild = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return PositionedElement.create(this, child, this.fullStart() + offset); - }; - - PositionedElement.prototype.fullStart = function () { - return this._fullStart; - }; - - PositionedElement.prototype.fullEnd = function () { - return this.fullStart() + this.element().fullWidth(); - }; - - PositionedElement.prototype.fullWidth = function () { - return this.element().fullWidth(); - }; - - PositionedElement.prototype.start = function () { - return this.fullStart() + this.element().leadingTriviaWidth(); - }; - - PositionedElement.prototype.end = function () { - return this.fullStart() + this.element().leadingTriviaWidth() + this.element().width(); - }; - - PositionedElement.prototype.root = function () { - var current = this; - while (current.parent() !== null) { - current = current.parent(); - } - - return current; - }; - - PositionedElement.prototype.containingNode = function () { - var current = this.parent(); - - while (current !== null && !current.element().isNode()) { - current = current.parent(); - } - - return current; - }; - return PositionedElement; - })(); - TypeScript.PositionedElement = PositionedElement; - - var PositionedNodeOrToken = (function (_super) { - __extends(PositionedNodeOrToken, _super); - function PositionedNodeOrToken(parent, nodeOrToken, fullStart) { - _super.call(this, parent, nodeOrToken, fullStart); - } - PositionedNodeOrToken.prototype.nodeOrToken = function () { - return this.element(); - }; - return PositionedNodeOrToken; - })(PositionedElement); - TypeScript.PositionedNodeOrToken = PositionedNodeOrToken; - - var PositionedNode = (function (_super) { - __extends(PositionedNode, _super); - function PositionedNode(parent, node, fullStart) { - _super.call(this, parent, node, fullStart); - } - PositionedNode.prototype.node = function () { - return this.element(); - }; - return PositionedNode; - })(PositionedNodeOrToken); - TypeScript.PositionedNode = PositionedNode; - - var PositionedToken = (function (_super) { - __extends(PositionedToken, _super); - function PositionedToken(parent, token, fullStart) { - _super.call(this, parent, token, fullStart); - } - PositionedToken.prototype.token = function () { - return this.element(); - }; - - PositionedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var triviaList = this.token().leadingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var currentTriviaEndPosition = this.start(); - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), currentTriviaEndPosition - trivia.fullWidth()); - } - - currentTriviaEndPosition -= trivia.fullWidth(); - } - } - - var start = this.fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - var triviaList = this.token().trailingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var fullStart = this.end(); - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), fullStart); - } - - fullStart += trivia.fullWidth(); - } - } - - return this.root().node().findToken(this.fullEnd(), includeSkippedTokens); - }; - return PositionedToken; - })(PositionedNodeOrToken); - TypeScript.PositionedToken = PositionedToken; - - var PositionedList = (function (_super) { - __extends(PositionedList, _super); - function PositionedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedList.prototype.list = function () { - return this.element(); - }; - return PositionedList; - })(PositionedElement); - TypeScript.PositionedList = PositionedList; - - var PositionedSeparatedList = (function (_super) { - __extends(PositionedSeparatedList, _super); - function PositionedSeparatedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedSeparatedList.prototype.list = function () { - return this.element(); - }; - return PositionedSeparatedList; - })(PositionedElement); - TypeScript.PositionedSeparatedList = PositionedSeparatedList; - - var PositionedSkippedToken = (function (_super) { - __extends(PositionedSkippedToken, _super); - function PositionedSkippedToken(parentToken, token, fullStart) { - _super.call(this, parentToken.parent(), token, fullStart); - this._parentToken = parentToken; - } - PositionedSkippedToken.prototype.parentToken = function () { - return this._parentToken; - }; - - PositionedSkippedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var start = this.fullStart(); - - if (includeSkippedTokens) { - var previousToken; - - if (start >= this.parentToken().end()) { - previousToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - - return this.parentToken(); - } else { - previousToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - } - } - - var start = this.parentToken().fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedSkippedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - if (includeSkippedTokens) { - var end = this.end(); - var nextToken; - - if (end <= this.parentToken().start()) { - nextToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - - return this.parentToken(); - } else { - nextToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - } - } - - return this.root().node().findToken(this.parentToken().fullEnd(), includeSkippedTokens); - }; - return PositionedSkippedToken; - })(PositionedToken); - TypeScript.PositionedSkippedToken = PositionedSkippedToken; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxKind) { - SyntaxKind[SyntaxKind["None"] = 0] = "None"; - SyntaxKind[SyntaxKind["List"] = 1] = "List"; - SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList"; - SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList"; - - SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia"; - SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia"; - SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia"; - SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia"; - SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia"; - - SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken"; - SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken"; - - SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName"; - - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral"; - - SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword"; - - SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword"; - - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword"; - - SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword"; - - SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken"; - SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken"; - - SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit"; - - SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName"; - - SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType"; - SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType"; - SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType"; - SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery"; - - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment"; - - SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration"; - SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration"; - SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration"; - SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration"; - - SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor"; - - SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature"; - SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature"; - SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; - - SyntaxKind[SyntaxKind["Block"] = 146] = "Block"; - SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; - SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement"; - - SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression"; - SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression"; - SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression"; - SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression"; - SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression"; - SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression"; - SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression"; - SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression"; - SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression"; - SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression"; - SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression"; - SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression"; - SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression"; - SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression"; - SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression"; - SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression"; - SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression"; - SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression"; - SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression"; - SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression"; - SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression"; - SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression"; - SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression"; - SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression"; - SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression"; - SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression"; - SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression"; - SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression"; - SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression"; - SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression"; - SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression"; - SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression"; - SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression"; - SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression"; - SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression"; - SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression"; - SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression"; - SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression"; - SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression"; - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression"; - SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression"; - SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression"; - - SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator"; - - SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList"; - SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList"; - SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList"; - SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList"; - - SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause"; - SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause"; - SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause"; - SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause"; - SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause"; - SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause"; - SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause"; - - SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter"; - SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint"; - - SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment"; - - SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment"; - - SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter"; - SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement"; - SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation"; - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference"; - SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference"; - SyntaxKind[SyntaxKind["Last"] = SyntaxKind.ModuleNameModuleReference] = "Last"; - - SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; - SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword"; - - SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword"; - SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword"; - - SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword"; - - SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken"; - - SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; - SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation"; - - SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth"; - SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth"; - - SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia"; - SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia"; - })(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {})); - var SyntaxKind = TypeScript.SyntaxKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - var textToKeywordKind = { - "any": 60 /* AnyKeyword */, - "boolean": 61 /* BooleanKeyword */, - "break": 15 /* BreakKeyword */, - "case": 16 /* CaseKeyword */, - "catch": 17 /* CatchKeyword */, - "class": 44 /* ClassKeyword */, - "continue": 18 /* ContinueKeyword */, - "const": 45 /* ConstKeyword */, - "constructor": 62 /* ConstructorKeyword */, - "debugger": 19 /* DebuggerKeyword */, - "declare": 63 /* DeclareKeyword */, - "default": 20 /* DefaultKeyword */, - "delete": 21 /* DeleteKeyword */, - "do": 22 /* DoKeyword */, - "else": 23 /* ElseKeyword */, - "enum": 46 /* EnumKeyword */, - "export": 47 /* ExportKeyword */, - "extends": 48 /* ExtendsKeyword */, - "false": 24 /* FalseKeyword */, - "finally": 25 /* FinallyKeyword */, - "for": 26 /* ForKeyword */, - "function": 27 /* FunctionKeyword */, - "get": 64 /* GetKeyword */, - "if": 28 /* IfKeyword */, - "implements": 51 /* ImplementsKeyword */, - "import": 49 /* ImportKeyword */, - "in": 29 /* InKeyword */, - "instanceof": 30 /* InstanceOfKeyword */, - "interface": 52 /* InterfaceKeyword */, - "let": 53 /* LetKeyword */, - "module": 65 /* ModuleKeyword */, - "new": 31 /* NewKeyword */, - "null": 32 /* NullKeyword */, - "number": 67 /* NumberKeyword */, - "package": 54 /* PackageKeyword */, - "private": 55 /* PrivateKeyword */, - "protected": 56 /* ProtectedKeyword */, - "public": 57 /* PublicKeyword */, - "require": 66 /* RequireKeyword */, - "return": 33 /* ReturnKeyword */, - "set": 68 /* SetKeyword */, - "static": 58 /* StaticKeyword */, - "string": 69 /* StringKeyword */, - "super": 50 /* SuperKeyword */, - "switch": 34 /* SwitchKeyword */, - "this": 35 /* ThisKeyword */, - "throw": 36 /* ThrowKeyword */, - "true": 37 /* TrueKeyword */, - "try": 38 /* TryKeyword */, - "typeof": 39 /* TypeOfKeyword */, - "var": 40 /* VarKeyword */, - "void": 41 /* VoidKeyword */, - "while": 42 /* WhileKeyword */, - "with": 43 /* WithKeyword */, - "yield": 59 /* YieldKeyword */, - "{": 70 /* OpenBraceToken */, - "}": 71 /* CloseBraceToken */, - "(": 72 /* OpenParenToken */, - ")": 73 /* CloseParenToken */, - "[": 74 /* OpenBracketToken */, - "]": 75 /* CloseBracketToken */, - ".": 76 /* DotToken */, - "...": 77 /* DotDotDotToken */, - ";": 78 /* SemicolonToken */, - ",": 79 /* CommaToken */, - "<": 80 /* LessThanToken */, - ">": 81 /* GreaterThanToken */, - "<=": 82 /* LessThanEqualsToken */, - ">=": 83 /* GreaterThanEqualsToken */, - "==": 84 /* EqualsEqualsToken */, - "=>": 85 /* EqualsGreaterThanToken */, - "!=": 86 /* ExclamationEqualsToken */, - "===": 87 /* EqualsEqualsEqualsToken */, - "!==": 88 /* ExclamationEqualsEqualsToken */, - "+": 89 /* PlusToken */, - "-": 90 /* MinusToken */, - "*": 91 /* AsteriskToken */, - "%": 92 /* PercentToken */, - "++": 93 /* PlusPlusToken */, - "--": 94 /* MinusMinusToken */, - "<<": 95 /* LessThanLessThanToken */, - ">>": 96 /* GreaterThanGreaterThanToken */, - ">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 98 /* AmpersandToken */, - "|": 99 /* BarToken */, - "^": 100 /* CaretToken */, - "!": 101 /* ExclamationToken */, - "~": 102 /* TildeToken */, - "&&": 103 /* AmpersandAmpersandToken */, - "||": 104 /* BarBarToken */, - "?": 105 /* QuestionToken */, - ":": 106 /* ColonToken */, - "=": 107 /* EqualsToken */, - "+=": 108 /* PlusEqualsToken */, - "-=": 109 /* MinusEqualsToken */, - "*=": 110 /* AsteriskEqualsToken */, - "%=": 111 /* PercentEqualsToken */, - "<<=": 112 /* LessThanLessThanEqualsToken */, - ">>=": 113 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 115 /* AmpersandEqualsToken */, - "|=": 116 /* BarEqualsToken */, - "^=": 117 /* CaretEqualsToken */, - "/": 118 /* SlashToken */, - "/=": 119 /* SlashEqualsToken */ - }; - - var kindToText = new Array(); - - for (var name in textToKeywordKind) { - if (textToKeywordKind.hasOwnProperty(name)) { - kindToText[textToKeywordKind[name]] = name; - } - } - - kindToText[62 /* ConstructorKeyword */] = "constructor"; - - function getTokenKind(text) { - if (textToKeywordKind.hasOwnProperty(text)) { - return textToKeywordKind[text]; - } - - return 0 /* None */; - } - SyntaxFacts.getTokenKind = getTokenKind; - - function getText(kind) { - var result = kindToText[kind]; - return result !== undefined ? result : null; - } - SyntaxFacts.getText = getText; - - function isTokenKind(kind) { - return kind >= 9 /* FirstToken */ && kind <= 119 /* LastToken */; - } - SyntaxFacts.isTokenKind = isTokenKind; - - function isAnyKeyword(kind) { - return kind >= 15 /* FirstKeyword */ && kind <= 69 /* LastKeyword */; - } - SyntaxFacts.isAnyKeyword = isAnyKeyword; - - function isStandardKeyword(kind) { - return kind >= 15 /* FirstStandardKeyword */ && kind <= 43 /* LastStandardKeyword */; - } - SyntaxFacts.isStandardKeyword = isStandardKeyword; - - function isFutureReservedKeyword(kind) { - return kind >= 44 /* FirstFutureReservedKeyword */ && kind <= 50 /* LastFutureReservedKeyword */; - } - SyntaxFacts.isFutureReservedKeyword = isFutureReservedKeyword; - - function isFutureReservedStrictKeyword(kind) { - return kind >= 51 /* FirstFutureReservedStrictKeyword */ && kind <= 59 /* LastFutureReservedStrictKeyword */; - } - SyntaxFacts.isFutureReservedStrictKeyword = isFutureReservedStrictKeyword; - - function isAnyPunctuation(kind) { - return kind >= 70 /* FirstPunctuation */ && kind <= 119 /* LastPunctuation */; - } - SyntaxFacts.isAnyPunctuation = isAnyPunctuation; - - function isPrefixUnaryExpressionOperatorToken(tokenKind) { - return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken; - - function isBinaryExpressionOperatorToken(tokenKind) { - return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken; - - function getPrefixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 89 /* PlusToken */: - return 164 /* PlusExpression */; - case 90 /* MinusToken */: - return 165 /* NegateExpression */; - case 102 /* TildeToken */: - return 166 /* BitwiseNotExpression */; - case 101 /* ExclamationToken */: - return 167 /* LogicalNotExpression */; - case 93 /* PlusPlusToken */: - return 168 /* PreIncrementExpression */; - case 94 /* MinusMinusToken */: - return 169 /* PreDecrementExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken; - - function getPostfixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 93 /* PlusPlusToken */: - return 210 /* PostIncrementExpression */; - case 94 /* MinusMinusToken */: - return 211 /* PostDecrementExpression */; - default: - return 0 /* None */; - } - } - SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken; - - function getBinaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 91 /* AsteriskToken */: - return 205 /* MultiplyExpression */; - - case 118 /* SlashToken */: - return 206 /* DivideExpression */; - - case 92 /* PercentToken */: - return 207 /* ModuloExpression */; - - case 89 /* PlusToken */: - return 208 /* AddExpression */; - - case 90 /* MinusToken */: - return 209 /* SubtractExpression */; - - case 95 /* LessThanLessThanToken */: - return 202 /* LeftShiftExpression */; - - case 96 /* GreaterThanGreaterThanToken */: - return 203 /* SignedRightShiftExpression */; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - return 204 /* UnsignedRightShiftExpression */; - - case 80 /* LessThanToken */: - return 196 /* LessThanExpression */; - - case 81 /* GreaterThanToken */: - return 197 /* GreaterThanExpression */; - - case 82 /* LessThanEqualsToken */: - return 198 /* LessThanOrEqualExpression */; - - case 83 /* GreaterThanEqualsToken */: - return 199 /* GreaterThanOrEqualExpression */; - - case 30 /* InstanceOfKeyword */: - return 200 /* InstanceOfExpression */; - - case 29 /* InKeyword */: - return 201 /* InExpression */; - - case 84 /* EqualsEqualsToken */: - return 192 /* EqualsWithTypeConversionExpression */; - - case 86 /* ExclamationEqualsToken */: - return 193 /* NotEqualsWithTypeConversionExpression */; - - case 87 /* EqualsEqualsEqualsToken */: - return 194 /* EqualsExpression */; - - case 88 /* ExclamationEqualsEqualsToken */: - return 195 /* NotEqualsExpression */; - - case 98 /* AmpersandToken */: - return 191 /* BitwiseAndExpression */; - - case 100 /* CaretToken */: - return 190 /* BitwiseExclusiveOrExpression */; - - case 99 /* BarToken */: - return 189 /* BitwiseOrExpression */; - - case 103 /* AmpersandAmpersandToken */: - return 188 /* LogicalAndExpression */; - - case 104 /* BarBarToken */: - return 187 /* LogicalOrExpression */; - - case 116 /* BarEqualsToken */: - return 182 /* OrAssignmentExpression */; - - case 115 /* AmpersandEqualsToken */: - return 180 /* AndAssignmentExpression */; - - case 117 /* CaretEqualsToken */: - return 181 /* ExclusiveOrAssignmentExpression */; - - case 112 /* LessThanLessThanEqualsToken */: - return 183 /* LeftShiftAssignmentExpression */; - - case 113 /* GreaterThanGreaterThanEqualsToken */: - return 184 /* SignedRightShiftAssignmentExpression */; - - case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - return 185 /* UnsignedRightShiftAssignmentExpression */; - - case 108 /* PlusEqualsToken */: - return 175 /* AddAssignmentExpression */; - - case 109 /* MinusEqualsToken */: - return 176 /* SubtractAssignmentExpression */; - - case 110 /* AsteriskEqualsToken */: - return 177 /* MultiplyAssignmentExpression */; - - case 119 /* SlashEqualsToken */: - return 178 /* DivideAssignmentExpression */; - - case 111 /* PercentEqualsToken */: - return 179 /* ModuloAssignmentExpression */; - - case 107 /* EqualsToken */: - return 174 /* AssignmentExpression */; - - case 79 /* CommaToken */: - return 173 /* CommaExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken; - - function getOperatorTokenFromBinaryExpression(tokenKind) { - switch (tokenKind) { - case 205 /* MultiplyExpression */: - return 91 /* AsteriskToken */; - - case 206 /* DivideExpression */: - return 118 /* SlashToken */; - - case 207 /* ModuloExpression */: - return 92 /* PercentToken */; - - case 208 /* AddExpression */: - return 89 /* PlusToken */; - - case 209 /* SubtractExpression */: - return 90 /* MinusToken */; - - case 202 /* LeftShiftExpression */: - return 95 /* LessThanLessThanToken */; - - case 203 /* SignedRightShiftExpression */: - return 96 /* GreaterThanGreaterThanToken */; - - case 204 /* UnsignedRightShiftExpression */: - return 97 /* GreaterThanGreaterThanGreaterThanToken */; - - case 196 /* LessThanExpression */: - return 80 /* LessThanToken */; - - case 197 /* GreaterThanExpression */: - return 81 /* GreaterThanToken */; - - case 198 /* LessThanOrEqualExpression */: - return 82 /* LessThanEqualsToken */; - - case 199 /* GreaterThanOrEqualExpression */: - return 83 /* GreaterThanEqualsToken */; - - case 200 /* InstanceOfExpression */: - return 30 /* InstanceOfKeyword */; - - case 201 /* InExpression */: - return 29 /* InKeyword */; - - case 192 /* EqualsWithTypeConversionExpression */: - return 84 /* EqualsEqualsToken */; - - case 193 /* NotEqualsWithTypeConversionExpression */: - return 86 /* ExclamationEqualsToken */; - - case 194 /* EqualsExpression */: - return 87 /* EqualsEqualsEqualsToken */; - - case 195 /* NotEqualsExpression */: - return 88 /* ExclamationEqualsEqualsToken */; - - case 191 /* BitwiseAndExpression */: - return 98 /* AmpersandToken */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 100 /* CaretToken */; - - case 189 /* BitwiseOrExpression */: - return 99 /* BarToken */; - - case 188 /* LogicalAndExpression */: - return 103 /* AmpersandAmpersandToken */; - - case 187 /* LogicalOrExpression */: - return 104 /* BarBarToken */; - - case 182 /* OrAssignmentExpression */: - return 116 /* BarEqualsToken */; - - case 180 /* AndAssignmentExpression */: - return 115 /* AmpersandEqualsToken */; - - case 181 /* ExclusiveOrAssignmentExpression */: - return 117 /* CaretEqualsToken */; - - case 183 /* LeftShiftAssignmentExpression */: - return 112 /* LessThanLessThanEqualsToken */; - - case 184 /* SignedRightShiftAssignmentExpression */: - return 113 /* GreaterThanGreaterThanEqualsToken */; - - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; - - case 175 /* AddAssignmentExpression */: - return 108 /* PlusEqualsToken */; - - case 176 /* SubtractAssignmentExpression */: - return 109 /* MinusEqualsToken */; - - case 177 /* MultiplyAssignmentExpression */: - return 110 /* AsteriskEqualsToken */; - - case 178 /* DivideAssignmentExpression */: - return 119 /* SlashEqualsToken */; - - case 179 /* ModuloAssignmentExpression */: - return 111 /* PercentEqualsToken */; - - case 174 /* AssignmentExpression */: - return 107 /* EqualsToken */; - - case 173 /* CommaExpression */: - return 79 /* CommaToken */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression; - - function isAnyDivideToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideToken = isAnyDivideToken; - - function isAnyDivideOrRegularExpressionToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - case 12 /* RegularExpressionLiteral */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideOrRegularExpressionToken = isAnyDivideOrRegularExpressionToken; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isNumericLiteralStart = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - - for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) { - if (character >= 97 /* a */ && character <= 122 /* z */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if ((character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) { - isIdentifierPartCharacter[character] = true; - isNumericLiteralStart[character] = true; - } - } - - isNumericLiteralStart[46 /* dot */] = true; - - for (var keywordKind = 15 /* FirstKeyword */; keywordKind <= 69 /* LastKeyword */; keywordKind++) { - var keyword = TypeScript.SyntaxFacts.getText(keywordKind); - isKeywordStartCharacter[keyword.charCodeAt(0)] = true; - } - - var Scanner = (function () { - function Scanner(fileName, text, languageVersion, window) { - if (typeof window === "undefined") { window = TypeScript.ArrayUtilities.createArray(2048, 0); } - this.slidingWindow = new TypeScript.SlidingWindow(this, window, 0, text.length()); - this.fileName = fileName; - this.text = text; - this._languageVersion = languageVersion; - } - Scanner.prototype.languageVersion = function () { - return this._languageVersion; - }; - - Scanner.prototype.fetchMoreItems = function (argument, sourceIndex, window, destinationIndex, spaceAvailable) { - var charactersRemaining = this.text.length() - sourceIndex; - var amountToRead = TypeScript.MathPrototype.min(charactersRemaining, spaceAvailable); - this.text.copyTo(sourceIndex, window, destinationIndex, amountToRead); - return amountToRead; - }; - - Scanner.prototype.currentCharCode = function () { - return this.slidingWindow.currentItem(null); - }; - - Scanner.prototype.absoluteIndex = function () { - return this.slidingWindow.absoluteIndex(); - }; - - Scanner.prototype.setAbsoluteIndex = function (index) { - this.slidingWindow.setAbsoluteIndex(index); - }; - - Scanner.prototype.scan = function (diagnostics, allowRegularExpression) { - var diagnosticsLength = diagnostics.length; - var fullStart = this.slidingWindow.absoluteIndex(); - var leadingTriviaInfo = this.scanTriviaInfo(diagnostics, false); - - var start = this.slidingWindow.absoluteIndex(); - var kindAndFlags = this.scanSyntaxToken(diagnostics, allowRegularExpression); - var end = this.slidingWindow.absoluteIndex(); - - var trailingTriviaInfo = this.scanTriviaInfo(diagnostics, true); - var fullEnd = this.slidingWindow.absoluteIndex(); - - var isVariableWidthKeyword = (kindAndFlags & -2147483648 /* IsVariableWidthKeyword */) !== 0; - var kind = kindAndFlags & ~-2147483648 /* IsVariableWidthKeyword */; - - var token = this.createToken(fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword); - - return diagnosticsLength !== diagnostics.length ? TypeScript.Syntax.realizeToken(token) : token; - }; - - Scanner.prototype.createToken = function (fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword) { - if (!isVariableWidthKeyword && kind >= 15 /* FirstFixedWidth */) { - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.FixedWidthTokenWithNoTrivia(kind); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } else { - var width = end - start; - - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithNoTrivia(fullText, kind); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } - }; - - Scanner.scanTrivia = function (text, start, length, isTrailing) { - var scanner = new Scanner(null, text.subText(new TypeScript.TextSpan(start, length)), 1 /* EcmaScript5 */, Scanner.triviaWindow); - return scanner.scanTrivia(text, start, isTrailing); - }; - - Scanner.prototype.scanTrivia = function (underlyingText, underlyingTextStart, isTrailing) { - var trivia = new Array(); - - while (true) { - if (!this.slidingWindow.isAtEndOfSource()) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - trivia.push(this.scanWhitespaceTrivia(underlyingText, underlyingTextStart)); - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - trivia.push(this.scanSingleLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - if (ch2 === 42 /* asterisk */) { - trivia.push(this.scanMultiLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - throw TypeScript.Errors.invalidOperation(); - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - trivia.push(this.scanLineTerminatorSequenceTrivia(ch)); - - if (!isTrailing) { - continue; - } - - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - return TypeScript.Syntax.triviaList(trivia); - } - }; - - Scanner.prototype.scanTriviaInfo = function (diagnostics, isTrailing) { - var width = 0; - var hasCommentOrNewLine = 0; - - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanSingleLineCommentTriviaLength(); - continue; - } - - if (ch2 === 42 /* asterisk */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanMultiLineCommentTriviaLength(diagnostics); - continue; - } - - break; - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - hasCommentOrNewLine |= 1 /* TriviaNewLineMask */; - width += this.scanLineTerminatorSequenceLength(ch); - - if (!isTrailing) { - continue; - } - - break; - } - - return (width << 2 /* TriviaFullWidthShift */) | hasCommentOrNewLine; - } - }; - - Scanner.prototype.isNewLineCharacter = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - default: - return false; - } - }; - - Scanner.prototype.scanWhitespaceTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - - var width = 0; - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - } - - break; - } - - return TypeScript.Syntax.deferredTrivia(4 /* WhitespaceTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.slidingWindow.absoluteIndex(); - var width = this.scanSingleLineCommentTriviaLength(); - - return TypeScript.Syntax.deferredTrivia(7 /* SingleLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTriviaLength = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource() || this.isNewLineCharacter(this.currentCharCode())) { - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanMultiLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - var width = this.scanMultiLineCommentTriviaLength(null); - - return TypeScript.Syntax.deferredTrivia(6 /* MultiLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanMultiLineCommentTriviaLength = function (diagnostics) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource()) { - if (diagnostics !== null) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), this.slidingWindow.absoluteIndex(), 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null)); - } - - return width; - } - - var ch = this.currentCharCode(); - if (ch === 42 /* asterisk */ && this.slidingWindow.peekItemN(1) === 47 /* slash */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - width += 2; - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanLineTerminatorSequenceTrivia = function (ch) { - var absoluteStartIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - var width = this.scanLineTerminatorSequenceLength(ch); - - var text = this.substring(absoluteStartIndex, absoluteStartIndex + width, false); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(absoluteStartIndex); - - return TypeScript.Syntax.trivia(5 /* NewLineTrivia */, text); - }; - - Scanner.prototype.scanLineTerminatorSequenceLength = function (ch) { - this.slidingWindow.moveToNextItem(); - - if (ch === 13 /* carriageReturn */ && this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - return 2; - } else { - return 1; - } - }; - - Scanner.prototype.scanSyntaxToken = function (diagnostics, allowRegularExpression) { - if (this.slidingWindow.isAtEndOfSource()) { - return 10 /* EndOfFileToken */; - } - - var character = this.currentCharCode(); - - switch (character) { - case 34 /* doubleQuote */: - case 39 /* singleQuote */: - return this.scanStringLiteral(diagnostics); - - case 47 /* slash */: - return this.scanSlashToken(allowRegularExpression); - - case 46 /* dot */: - return this.scanDotToken(diagnostics); - - case 45 /* minus */: - return this.scanMinusToken(); - - case 33 /* exclamation */: - return this.scanExclamationToken(); - - case 61 /* equals */: - return this.scanEqualsToken(); - - case 124 /* bar */: - return this.scanBarToken(); - - case 42 /* asterisk */: - return this.scanAsteriskToken(); - - case 43 /* plus */: - return this.scanPlusToken(); - - case 37 /* percent */: - return this.scanPercentToken(); - - case 38 /* ampersand */: - return this.scanAmpersandToken(); - - case 94 /* caret */: - return this.scanCaretToken(); - - case 60 /* lessThan */: - return this.scanLessThanToken(); - - case 62 /* greaterThan */: - return this.advanceAndSetTokenKind(81 /* GreaterThanToken */); - - case 44 /* comma */: - return this.advanceAndSetTokenKind(79 /* CommaToken */); - - case 58 /* colon */: - return this.advanceAndSetTokenKind(106 /* ColonToken */); - - case 59 /* semicolon */: - return this.advanceAndSetTokenKind(78 /* SemicolonToken */); - - case 126 /* tilde */: - return this.advanceAndSetTokenKind(102 /* TildeToken */); - - case 40 /* openParen */: - return this.advanceAndSetTokenKind(72 /* OpenParenToken */); - - case 41 /* closeParen */: - return this.advanceAndSetTokenKind(73 /* CloseParenToken */); - - case 123 /* openBrace */: - return this.advanceAndSetTokenKind(70 /* OpenBraceToken */); - - case 125 /* closeBrace */: - return this.advanceAndSetTokenKind(71 /* CloseBraceToken */); - - case 91 /* openBracket */: - return this.advanceAndSetTokenKind(74 /* OpenBracketToken */); - - case 93 /* closeBracket */: - return this.advanceAndSetTokenKind(75 /* CloseBracketToken */); - - case 63 /* question */: - return this.advanceAndSetTokenKind(105 /* QuestionToken */); - } - - if (isNumericLiteralStart[character]) { - return this.scanNumericLiteral(diagnostics); - } - - if (isIdentifierStartCharacter[character]) { - var result = this.tryFastScanIdentifierOrKeyword(character); - if (result !== 0 /* None */) { - return result; - } - } - - if (this.isIdentifierStart(this.peekCharOrUnicodeEscape())) { - return this.slowScanIdentifierOrKeyword(diagnostics); - } - - return this.scanDefaultCharacter(character, diagnostics); - }; - - Scanner.prototype.isIdentifierStart = function (interpretedChar) { - if (isIdentifierStartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.isIdentifierPart = function (interpretedChar) { - if (isIdentifierPartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.tryFastScanIdentifierOrKeyword = function (firstCharacter) { - var slidingWindow = this.slidingWindow; - var window = slidingWindow.window; - - var startIndex = slidingWindow.currentRelativeItemIndex; - var endIndex = slidingWindow.windowCount; - var currentIndex = startIndex; - var character = 0; - - while (currentIndex < endIndex) { - character = window[currentIndex]; - if (!isIdentifierPartCharacter[character]) { - break; - } - - currentIndex++; - } - - if (currentIndex === endIndex) { - return 0 /* None */; - } else if (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */) { - return 0 /* None */; - } else { - var kind; - var identifierLength = currentIndex - startIndex; - if (isKeywordStartCharacter[firstCharacter]) { - kind = TypeScript.ScannerUtilities.identifierKind(window, startIndex, identifierLength); - } else { - kind = 11 /* IdentifierName */; - } - - slidingWindow.setAbsoluteIndex(slidingWindow.absoluteIndex() + identifierLength); - - return kind; - } - }; - - Scanner.prototype.slowScanIdentifierOrKeyword = function (diagnostics) { - var startIndex = this.slidingWindow.absoluteIndex(); - var sawUnicodeEscape = false; - - do { - var unicodeEscape = this.scanCharOrUnicodeEscape(diagnostics); - sawUnicodeEscape = sawUnicodeEscape || unicodeEscape; - } while(this.isIdentifierPart(this.peekCharOrUnicodeEscape())); - - var length = this.slidingWindow.absoluteIndex() - startIndex; - var text = this.text.substr(startIndex, length, false); - var valueText = TypeScript.Syntax.massageEscapes(text); - - var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText); - if (keywordKind >= 15 /* FirstKeyword */ && keywordKind <= 69 /* LastKeyword */) { - if (sawUnicodeEscape) { - return keywordKind | -2147483648 /* IsVariableWidthKeyword */; - } else { - return keywordKind; - } - } - - return 11 /* IdentifierName */; - }; - - Scanner.prototype.scanNumericLiteral = function (diagnostics) { - if (this.isHexNumericLiteral()) { - this.scanHexNumericLiteral(); - } else if (this.isOctalNumericLiteral()) { - this.scanOctalNumericLiteral(diagnostics); - } else { - this.scanDecimalNumericLiteral(); - } - - return 13 /* NumericLiteral */; - }; - - Scanner.prototype.isOctalNumericLiteral = function () { - return this.currentCharCode() === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(this.slidingWindow.peekItemN(1)); - }; - - Scanner.prototype.scanOctalNumericLiteral = function (diagnostics) { - var position = this.absoluteIndex(); - - while (TypeScript.CharacterInfo.isOctalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - - if (this.languageVersion() >= 1 /* EcmaScript5 */) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, this.absoluteIndex() - position, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null)); - } - }; - - Scanner.prototype.scanDecimalDigits = function () { - while (TypeScript.CharacterInfo.isDecimalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.scanDecimalNumericLiteral = function () { - this.scanDecimalDigits(); - - if (this.currentCharCode() === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - } - - this.scanDecimalDigits(); - - var ch = this.currentCharCode(); - if (ch === 101 /* e */ || ch === 69 /* E */) { - var nextChar1 = this.slidingWindow.peekItemN(1); - - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) { - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) { - var nextChar2 = this.slidingWindow.peekItemN(2); - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } - } - } - }; - - Scanner.prototype.scanHexNumericLiteral = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - while (TypeScript.CharacterInfo.isHexDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.isHexNumericLiteral = function () { - if (this.currentCharCode() === 48 /* _0 */) { - var ch = this.slidingWindow.peekItemN(1); - - if (ch === 120 /* x */ || ch === 88 /* X */) { - ch = this.slidingWindow.peekItemN(2); - - return TypeScript.CharacterInfo.isHexDigit(ch); - } - } - - return false; - }; - - Scanner.prototype.advanceAndSetTokenKind = function (kind) { - this.slidingWindow.moveToNextItem(); - return kind; - }; - - Scanner.prototype.scanLessThanToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 82 /* LessThanEqualsToken */; - } else if (this.currentCharCode() === 60 /* lessThan */) { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 112 /* LessThanLessThanEqualsToken */; - } else { - return 95 /* LessThanLessThanToken */; - } - } else { - return 80 /* LessThanToken */; - } - }; - - Scanner.prototype.scanBarToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 116 /* BarEqualsToken */; - } else if (this.currentCharCode() === 124 /* bar */) { - this.slidingWindow.moveToNextItem(); - return 104 /* BarBarToken */; - } else { - return 99 /* BarToken */; - } - }; - - Scanner.prototype.scanCaretToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 117 /* CaretEqualsToken */; - } else { - return 100 /* CaretToken */; - } - }; - - Scanner.prototype.scanAmpersandToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 115 /* AmpersandEqualsToken */; - } else if (this.currentCharCode() === 38 /* ampersand */) { - this.slidingWindow.moveToNextItem(); - return 103 /* AmpersandAmpersandToken */; - } else { - return 98 /* AmpersandToken */; - } - }; - - Scanner.prototype.scanPercentToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 111 /* PercentEqualsToken */; - } else { - return 92 /* PercentToken */; - } - }; - - Scanner.prototype.scanMinusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 109 /* MinusEqualsToken */; - } else if (character === 45 /* minus */) { - this.slidingWindow.moveToNextItem(); - return 94 /* MinusMinusToken */; - } else { - return 90 /* MinusToken */; - } - }; - - Scanner.prototype.scanPlusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 108 /* PlusEqualsToken */; - } else if (character === 43 /* plus */) { - this.slidingWindow.moveToNextItem(); - return 93 /* PlusPlusToken */; - } else { - return 89 /* PlusToken */; - } - }; - - Scanner.prototype.scanAsteriskToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 110 /* AsteriskEqualsToken */; - } else { - return 91 /* AsteriskToken */; - } - }; - - Scanner.prototype.scanEqualsToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 87 /* EqualsEqualsEqualsToken */; - } else { - return 84 /* EqualsEqualsToken */; - } - } else if (character === 62 /* greaterThan */) { - this.slidingWindow.moveToNextItem(); - return 85 /* EqualsGreaterThanToken */; - } else { - return 107 /* EqualsToken */; - } - }; - - Scanner.prototype.isDotPrefixedNumericLiteral = function () { - if (this.currentCharCode() === 46 /* dot */) { - var ch = this.slidingWindow.peekItemN(1); - return TypeScript.CharacterInfo.isDecimalDigit(ch); - } - - return false; - }; - - Scanner.prototype.scanDotToken = function (diagnostics) { - if (this.isDotPrefixedNumericLiteral()) { - return this.scanNumericLiteral(diagnostics); - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 46 /* dot */ && this.slidingWindow.peekItemN(1) === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - return 77 /* DotDotDotToken */; - } else { - return 76 /* DotToken */; - } - }; - - Scanner.prototype.scanSlashToken = function (allowRegularExpression) { - if (allowRegularExpression) { - var result = this.tryScanRegularExpressionToken(); - if (result !== 0 /* None */) { - return result; - } - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 119 /* SlashEqualsToken */; - } else { - return 118 /* SlashToken */; - } - }; - - Scanner.prototype.tryScanRegularExpressionToken = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var inEscape = false; - var inCharacterClass = false; - while (true) { - var ch = this.currentCharCode(); - - if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 0 /* None */; - } - - this.slidingWindow.moveToNextItem(); - if (inEscape) { - inEscape = false; - continue; - } - - switch (ch) { - case 92 /* backslash */: - inEscape = true; - continue; - - case 91 /* openBracket */: - inCharacterClass = true; - continue; - - case 93 /* closeBracket */: - inCharacterClass = false; - continue; - - case 47 /* slash */: - if (inCharacterClass) { - continue; - } - - break; - - default: - continue; - } - - break; - } - - while (isIdentifierPartCharacter[this.currentCharCode()]) { - this.slidingWindow.moveToNextItem(); - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 12 /* RegularExpressionLiteral */; - }; - - Scanner.prototype.scanExclamationToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 88 /* ExclamationEqualsEqualsToken */; - } else { - return 86 /* ExclamationEqualsToken */; - } - } else { - return 101 /* ExclamationToken */; - } - }; - - Scanner.prototype.scanDefaultCharacter = function (character, diagnostics) { - var position = this.slidingWindow.absoluteIndex(); - this.slidingWindow.moveToNextItem(); - - var text = String.fromCharCode(character); - var messageText = this.getErrorMessageText(text); - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText])); - - return 9 /* ErrorToken */; - }; - - Scanner.prototype.getErrorMessageText = function (text) { - if (text === "\\") { - return '"\\"'; - } - - return JSON.stringify(text); - }; - - Scanner.prototype.skipEscapeSequence = function (diagnostics) { - var rewindPoint = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var ch = this.currentCharCode(); - this.slidingWindow.moveToNextItem(); - switch (ch) { - case 120 /* x */: - case 117 /* u */: - this.slidingWindow.rewindToPinnedIndex(rewindPoint); - var value = this.scanUnicodeOrHexEscape(diagnostics); - break; - - case 13 /* carriageReturn */: - if (this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - } - break; - - default: - break; - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint); - }; - - Scanner.prototype.scanStringLiteral = function (diagnostics) { - var quoteCharacter = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - while (true) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - this.skipEscapeSequence(diagnostics); - } else if (ch === quoteCharacter) { - this.slidingWindow.moveToNextItem(); - break; - } else if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), TypeScript.MathPrototype.min(this.slidingWindow.absoluteIndex(), this.text.length()), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null)); - break; - } else { - this.slidingWindow.moveToNextItem(); - } - } - - return 14 /* StringLiteral */; - }; - - Scanner.prototype.isUnicodeEscape = function (character) { - if (character === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - return true; - } - } - - return false; - }; - - Scanner.prototype.peekCharOrUnicodeEscape = function () { - var character = this.currentCharCode(); - if (this.isUnicodeEscape(character)) { - return this.peekUnicodeOrHexEscape(); - } else { - return character; - } - }; - - Scanner.prototype.peekUnicodeOrHexEscape = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var ch = this.scanUnicodeOrHexEscape(null); - - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - - return ch; - }; - - Scanner.prototype.scanCharOrUnicodeEscape = function (errors) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - this.scanUnicodeOrHexEscape(errors); - return true; - } - } - - this.slidingWindow.moveToNextItem(); - return false; - }; - - Scanner.prototype.scanUnicodeOrHexEscape = function (errors) { - var start = this.slidingWindow.absoluteIndex(); - var character = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - character = this.currentCharCode(); - - var intChar = 0; - this.slidingWindow.moveToNextItem(); - - var count = character === 117 /* u */ ? 4 : 2; - - for (var i = 0; i < count; i++) { - var ch2 = this.currentCharCode(); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - if (errors !== null) { - var end = this.slidingWindow.absoluteIndex(); - var info = this.createIllegalEscapeDiagnostic(start, end); - errors.push(info); - } - - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - this.slidingWindow.moveToNextItem(); - } - - return intChar; - }; - - Scanner.prototype.substring = function (start, end, intern) { - var length = end - start; - var offset = start - this.slidingWindow.windowAbsoluteStartIndex; - - if (intern) { - return TypeScript.Collections.DefaultStringTable.addCharArray(this.slidingWindow.window, offset, length); - } else { - return TypeScript.StringUtilities.fromCharCodeArray(this.slidingWindow.window.slice(offset, offset + length)); - } - }; - - Scanner.prototype.createIllegalEscapeDiagnostic = function (start, end) { - return new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), start, end - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null); - }; - - Scanner.isValidIdentifier = function (text, languageVersion) { - var scanner = new Scanner(null, text, languageVersion, Scanner.triviaWindow); - var errors = new Array(); - var token = scanner.scan(errors, false); - - return errors.length === 0 && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && token.width() === text.length(); - }; - Scanner.triviaWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - return Scanner; - })(); - TypeScript.Scanner = Scanner; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ScannerUtilities = (function () { - function ScannerUtilities() { - } - ScannerUtilities.identifierKind = function (array, startIndex, length) { - switch (length) { - case 2: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - switch (array[startIndex + 1]) { - case 102 /* f */: - return 28 /* IfKeyword */; - case 110 /* n */: - return 29 /* InKeyword */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 3: - switch (array[startIndex]) { - case 102 /* f */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */; - case 118 /* v */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */; - case 97 /* a */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */; - case 103 /* g */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 4: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - switch (array[startIndex + 1]) { - case 108 /* l */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 1]) { - case 104 /* h */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 118 /* v */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 5: - switch (array[startIndex]) { - case 98 /* b */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 2] === 97 /* a */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */; - case 111 /* o */: - return (array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 114 /* r */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */; - case 121 /* y */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 6: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - switch (array[startIndex + 1]) { - case 119 /* w */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 99 /* c */ && array[startIndex + 5] === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 2]) { - case 97 /* a */: - return (array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 3] === 105 /* i */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 116 /* t */: - return (array[startIndex + 1] === 121 /* y */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 111 /* o */ && array[startIndex + 5] === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - return (array[startIndex + 1] === 109 /* m */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 100 /* d */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 109 /* m */ && array[startIndex + 3] === 98 /* b */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 7: - switch (array[startIndex]) { - case 100 /* d */: - switch (array[startIndex + 1]) { - case 101 /* e */: - switch (array[startIndex + 2]) { - case 102 /* f */: - return (array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 117 /* u */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - return (array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 100 /* d */ && array[startIndex + 6] === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 99 /* c */ && array[startIndex + 3] === 107 /* k */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 118 /* v */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 116 /* t */ && array[startIndex + 6] === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 98 /* b */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 97 /* a */ && array[startIndex + 6] === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 113 /* q */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 8: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */; - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 103 /* g */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */; - case 102 /* f */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 105 /* i */ && array[startIndex + 6] === 111 /* o */ && array[startIndex + 7] === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 9: - switch (array[startIndex]) { - case 105 /* i */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 102 /* f */ && array[startIndex + 6] === 97 /* a */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 99 /* c */ && array[startIndex + 6] === 116 /* t */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 10: - switch (array[startIndex]) { - case 105 /* i */: - switch (array[startIndex + 1]) { - case 110 /* n */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 99 /* c */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 111 /* o */ && array[startIndex + 9] === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 109 /* m */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 110 /* n */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 11: - return (array[startIndex] === 99 /* c */ && array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 111 /* o */ && array[startIndex + 10] === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - }; - return ScannerUtilities; - })(); - TypeScript.ScannerUtilities = ScannerUtilities; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySeparatedSyntaxList = (function () { - function EmptySeparatedSyntaxList() { - } - EmptySeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - EmptySeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isList = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - EmptySeparatedSyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySeparatedSyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySeparatedSyntaxList.prototype.width = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - - EmptySeparatedSyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - return EmptySeparatedSyntaxList; - })(); - - Syntax.emptySeparatedList = new EmptySeparatedSyntaxList(); - - var SingletonSeparatedSyntaxList = (function () { - function SingletonSeparatedSyntaxList(item) { - this.item = item; - } - SingletonSeparatedSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - SingletonSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - SingletonSeparatedSyntaxList.prototype.childCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - SingletonSeparatedSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - SingletonSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - SingletonSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSeparatedSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSeparatedSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSeparatedSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSeparatedSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedSeparatedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSeparatedSyntaxList; - })(); - - var NormalSeparatedSyntaxList = (function () { - function NormalSeparatedSyntaxList(elements) { - this._data = 0; - this.elements = elements; - } - NormalSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - NormalSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - NormalSeparatedSyntaxList.prototype.toJSON = function (key) { - return this.elements; - }; - - NormalSeparatedSyntaxList.prototype.childCount = function () { - return this.elements.length; - }; - NormalSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length + 1, 2); - }; - NormalSeparatedSyntaxList.prototype.separatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length, 2); - }; - - NormalSeparatedSyntaxList.prototype.toArray = function () { - return this.elements.slice(0); - }; - - NormalSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - var result = []; - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - result.push(this.nonSeparatorAt(i)); - } - - return result; - }; - - NormalSeparatedSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[index]; - }; - - NormalSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - var value = index * 2; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.separatorAt = function (index) { - var value = index * 2 + 1; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.firstToken = function () { - var token; - for (var i = 0, n = this.elements.length; i < n; i++) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.firstToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.lastToken = function () { - var token; - for (var i = this.elements.length - 1; i >= 0; i--) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.lastToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i).isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSeparatedSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSeparatedSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - fullWidth += childWidth; - - isIncrementallyUnusable = isIncrementallyUnusable || element.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSeparatedSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedSeparatedList(parent, this, fullStart); - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - element.collectTextElements(elements); - } - }; - - NormalSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.elements); - } else { - array.splice.apply(array, [index, 0].concat(this.elements)); - } - }; - return NormalSeparatedSyntaxList; - })(); - - function separatedList(nodes) { - return separatedListAndValidate(nodes, false); - } - Syntax.separatedList = separatedList; - - function separatedListAndValidate(nodes, validate) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptySeparatedList; - } - - if (validate) { - for (var i = 0; i < nodes.length; i++) { - var item = nodes[i]; - - if (i % 2 === 1) { - } - } - } - - if (nodes.length === 1) { - return new SingletonSeparatedSyntaxList(nodes[0]); - } - - return new NormalSeparatedSyntaxList(nodes); - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SlidingWindow = (function () { - function SlidingWindow(source, window, defaultValue, sourceLength) { - if (typeof sourceLength === "undefined") { sourceLength = -1; } - this.source = source; - this.window = window; - this.defaultValue = defaultValue; - this.sourceLength = sourceLength; - this.windowCount = 0; - this.windowAbsoluteStartIndex = 0; - this.currentRelativeItemIndex = 0; - this._pinCount = 0; - this.firstPinnedAbsoluteIndex = -1; - } - SlidingWindow.prototype.windowAbsoluteEndIndex = function () { - return this.windowAbsoluteStartIndex + this.windowCount; - }; - - SlidingWindow.prototype.addMoreItemsToWindow = function (argument) { - if (this.sourceLength >= 0 && this.absoluteIndex() >= this.sourceLength) { - return false; - } - - if (this.windowCount >= this.window.length) { - this.tryShiftOrGrowWindow(); - } - - var spaceAvailable = this.window.length - this.windowCount; - var amountFetched = this.source.fetchMoreItems(argument, this.windowAbsoluteEndIndex(), this.window, this.windowCount, spaceAvailable); - - this.windowCount += amountFetched; - return amountFetched > 0; - }; - - SlidingWindow.prototype.tryShiftOrGrowWindow = function () { - var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1); - - var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex; - - if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) { - var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex; - - var shiftCount = this.windowCount - shiftStartIndex; - - if (shiftCount > 0) { - TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount); - } - - this.windowAbsoluteStartIndex += shiftStartIndex; - - this.windowCount -= shiftStartIndex; - - this.currentRelativeItemIndex -= shiftStartIndex; - } else { - TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue); - } - }; - - SlidingWindow.prototype.absoluteIndex = function () { - return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.isAtEndOfSource = function () { - return this.absoluteIndex() >= this.sourceLength; - }; - - SlidingWindow.prototype.getAndPinAbsoluteIndex = function () { - var absoluteIndex = this.absoluteIndex(); - var pinCount = this._pinCount++; - if (pinCount === 0) { - this.firstPinnedAbsoluteIndex = absoluteIndex; - } - - return absoluteIndex; - }; - - SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) { - this._pinCount--; - if (this._pinCount === 0) { - this.firstPinnedAbsoluteIndex = -1; - } - }; - - SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) { - var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex; - - this.currentRelativeItemIndex = relativeIndex; - }; - - SlidingWindow.prototype.currentItem = function (argument) { - if (this.currentRelativeItemIndex >= this.windowCount) { - if (!this.addMoreItemsToWindow(argument)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex]; - }; - - SlidingWindow.prototype.peekItemN = function (n) { - while (this.currentRelativeItemIndex + n >= this.windowCount) { - if (!this.addMoreItemsToWindow(null)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex + n]; - }; - - SlidingWindow.prototype.moveToNextItem = function () { - this.currentRelativeItemIndex++; - }; - - SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () { - this.windowCount = this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.setAbsoluteIndex = function (absoluteIndex) { - if (this.absoluteIndex() === absoluteIndex) { - return; - } - - if (this._pinCount > 0) { - } - - if (absoluteIndex >= this.windowAbsoluteStartIndex && absoluteIndex < this.windowAbsoluteEndIndex()) { - this.currentRelativeItemIndex = (absoluteIndex - this.windowAbsoluteStartIndex); - } else { - this.windowAbsoluteStartIndex = absoluteIndex; - - this.windowCount = 0; - - this.currentRelativeItemIndex = 0; - } - }; - - SlidingWindow.prototype.pinCount = function () { - return this._pinCount; - }; - return SlidingWindow; - })(); - TypeScript.SlidingWindow = SlidingWindow; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function emptySourceUnit() { - return Syntax.normalModeFactory.sourceUnit(Syntax.emptyList, Syntax.token(10 /* EndOfFileToken */, { text: "" })); - } - Syntax.emptySourceUnit = emptySourceUnit; - - function getStandaloneExpression(positionedToken) { - var token = positionedToken.token(); - if (positionedToken !== null && positionedToken.kind() === 11 /* IdentifierName */) { - var parentPositionedNode = positionedToken.containingNode(); - var parentNode = parentPositionedNode.node(); - - if (parentNode.kind() === 121 /* QualifiedName */ && parentNode.right === token) { - return parentPositionedNode; - } else if (parentNode.kind() === 212 /* MemberAccessExpression */ && parentNode.name === token) { - return parentPositionedNode; - } - } - - return positionedToken; - } - Syntax.getStandaloneExpression = getStandaloneExpression; - - function isInModuleOrTypeContext(positionedToken) { - if (positionedToken !== null) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var parent = positionedNodeOrToken.containingNode(); - - if (parent !== null) { - switch (parent.kind()) { - case 246 /* ModuleNameModuleReference */: - return true; - case 121 /* QualifiedName */: - return true; - default: - return isInTypeOnlyContext(positionedToken); - } - } - } - - return false; - } - Syntax.isInModuleOrTypeContext = isInModuleOrTypeContext; - - function isInTypeOnlyContext(positionedToken) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var positionedParent = positionedNodeOrToken.containingNode(); - - var parent = positionedParent.node(); - var nodeOrToken = positionedNodeOrToken.nodeOrToken(); - - if (parent !== null) { - switch (parent.kind()) { - case 124 /* ArrayType */: - return parent.type === nodeOrToken; - case 220 /* CastExpression */: - return parent.type === nodeOrToken; - case 244 /* TypeAnnotation */: - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - case 228 /* TypeArgumentList */: - return true; - } - } - - return false; - } - Syntax.isInTypeOnlyContext = isInTypeOnlyContext; - - function childOffset(parent, child) { - var offset = 0; - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return offset; - } - - if (current !== null) { - offset += current.fullWidth(); - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childOffset = childOffset; - - function childOffsetAt(parent, index) { - var offset = 0; - for (var i = 0; i < index; i++) { - var current = parent.childAt(i); - if (current !== null) { - offset += current.fullWidth(); - } - } - - return offset; - } - Syntax.childOffsetAt = childOffsetAt; - - function childIndex(parent, child) { - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return i; - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childIndex = childIndex; - - function nodeStructuralEquals(node1, node2) { - if (node1 === null) { - return node2 === null; - } - - return node1.structuralEquals(node2); - } - Syntax.nodeStructuralEquals = nodeStructuralEquals; - - function nodeOrTokenStructuralEquals(node1, node2) { - if (node1 === node2) { - return true; - } - - if (node1 === null || node2 === null) { - return false; - } - - if (node1.isToken()) { - return node2.isToken() ? tokenStructuralEquals(node1, node2) : false; - } - - return node2.isNode() ? nodeStructuralEquals(node1, node2) : false; - } - Syntax.nodeOrTokenStructuralEquals = nodeOrTokenStructuralEquals; - - function tokenStructuralEquals(token1, token2) { - if (token1 === token2) { - return true; - } - - if (token1 === null || token2 === null) { - return false; - } - - return token1.kind() === token2.kind() && token1.width() === token2.width() && token1.fullWidth() === token2.fullWidth() && token1.text() === token2.text() && Syntax.triviaListStructuralEquals(token1.leadingTrivia(), token2.leadingTrivia()) && Syntax.triviaListStructuralEquals(token1.trailingTrivia(), token2.trailingTrivia()); - } - Syntax.tokenStructuralEquals = tokenStructuralEquals; - - function triviaListStructuralEquals(triviaList1, triviaList2) { - if (triviaList1.count() !== triviaList2.count()) { - return false; - } - - for (var i = 0, n = triviaList1.count(); i < n; i++) { - if (!Syntax.triviaStructuralEquals(triviaList1.syntaxTriviaAt(i), triviaList2.syntaxTriviaAt(i))) { - return false; - } - } - - return true; - } - Syntax.triviaListStructuralEquals = triviaListStructuralEquals; - - function triviaStructuralEquals(trivia1, trivia2) { - return trivia1.kind() === trivia2.kind() && trivia1.fullWidth() === trivia2.fullWidth() && trivia1.fullText() === trivia2.fullText(); - } - Syntax.triviaStructuralEquals = triviaStructuralEquals; - - function listStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var child1 = list1.childAt(i); - var child2 = list2.childAt(i); - - if (!Syntax.nodeOrTokenStructuralEquals(child1, child2)) { - return false; - } - } - - return true; - } - Syntax.listStructuralEquals = listStructuralEquals; - - function separatedListStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var element1 = list1.childAt(i); - var element2 = list2.childAt(i); - if (!Syntax.nodeOrTokenStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - } - Syntax.separatedListStructuralEquals = separatedListStructuralEquals; - - function elementStructuralEquals(element1, element2) { - if (element1 === element2) { - return true; - } - - if (element1 === null || element2 === null) { - return false; - } - - if (element2.kind() !== element2.kind()) { - return false; - } - - if (element1.isToken()) { - return tokenStructuralEquals(element1, element2); - } else if (element1.isNode()) { - return nodeStructuralEquals(element1, element2); - } else if (element1.isList()) { - return listStructuralEquals(element1, element2); - } else if (element1.isSeparatedList()) { - return separatedListStructuralEquals(element1, element2); - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.elementStructuralEquals = elementStructuralEquals; - - function identifierName(text, info) { - if (typeof info === "undefined") { info = null; } - return Syntax.identifier(text); - } - Syntax.identifierName = identifierName; - - function trueExpression() { - return Syntax.token(37 /* TrueKeyword */); - } - Syntax.trueExpression = trueExpression; - - function falseExpression() { - return Syntax.token(24 /* FalseKeyword */); - } - Syntax.falseExpression = falseExpression; - - function numericLiteralExpression(text) { - return Syntax.token(13 /* NumericLiteral */, { text: text }); - } - Syntax.numericLiteralExpression = numericLiteralExpression; - - function stringLiteralExpression(text) { - return Syntax.token(14 /* StringLiteral */, { text: text }); - } - Syntax.stringLiteralExpression = stringLiteralExpression; - - function isSuperInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperInvocationExpression = isSuperInvocationExpression; - - function isSuperInvocationExpressionStatement(node) { - return node.kind() === 149 /* ExpressionStatement */ && isSuperInvocationExpression(node.expression); - } - Syntax.isSuperInvocationExpressionStatement = isSuperInvocationExpressionStatement; - - function isSuperMemberAccessExpression(node) { - return node.kind() === 212 /* MemberAccessExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperMemberAccessExpression = isSuperMemberAccessExpression; - - function isSuperMemberAccessInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && isSuperMemberAccessExpression(node.expression); - } - Syntax.isSuperMemberAccessInvocationExpression = isSuperMemberAccessInvocationExpression; - - function assignmentExpression(left, token, right) { - return Syntax.normalModeFactory.binaryExpression(174 /* AssignmentExpression */, left, token, right); - } - Syntax.assignmentExpression = assignmentExpression; - - function nodeHasSkippedOrMissingTokens(node) { - for (var i = 0; i < node.childCount(); i++) { - var child = node.childAt(i); - if (child !== null && child.isToken()) { - var token = child; - - if (token.hasSkippedToken() || (token.width() === 0 && token.kind() !== 10 /* EndOfFileToken */)) { - return true; - } - } - } - return false; - } - Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens; - - function isUnterminatedStringLiteral(token) { - if (token && token.kind() === 14 /* StringLiteral */) { - var text = token.text(); - return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0); - } - - return false; - } - Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral; - - function isUnterminatedMultilineCommentTrivia(trivia) { - if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var text = trivia.fullText(); - return text.length < 4 || text.substring(text.length - 2) !== "*/"; - } - return false; - } - Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia; - - function isEntirelyInsideCommentTrivia(trivia, fullStart, position) { - if (trivia && trivia.isComment() && position > fullStart) { - var end = fullStart + trivia.fullWidth(); - if (position < end) { - return true; - } else if (position === end) { - return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia); - } - } - - return false; - } - Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia; - - function isEntirelyInsideComment(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - var fullStart = positionedToken.fullStart(); - var triviaList = null; - var lastTriviaBeforeToken = null; - - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - if (positionedToken.token().hasLeadingTrivia()) { - triviaList = positionedToken.token().leadingTrivia(); - } else { - positionedToken = positionedToken.previousToken(); - if (positionedToken) { - if (positionedToken && positionedToken.token().hasTrailingTrivia()) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - } - } else { - if (position <= (fullStart + positionedToken.token().leadingTriviaWidth())) { - triviaList = positionedToken.token().leadingTrivia(); - } else if (position >= (fullStart + positionedToken.token().width())) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - - if (triviaList) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (position <= fullStart) { - break; - } else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) { - lastTriviaBeforeToken = trivia; - break; - } - - fullStart += trivia.fullWidth(); - } - } - - return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position); - } - Syntax.isEntirelyInsideComment = isEntirelyInsideComment; - - function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - - if (positionedToken) { - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(); - return positionedToken && positionedToken.token().trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken.token()); - } else if (position > positionedToken.start()) { - return (position < positionedToken.end() && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= positionedToken.end() && isUnterminatedStringLiteral(positionedToken.token())); - } - } - - return false; - } - Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral; - - function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullStart; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullStart = positionedToken.fullStart(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullStart); - } - - fullStart += triviaWidth; - } - } - - return null; - } - - function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullEnd; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullEnd = positionedToken.fullStart() + triviaList.fullWidth(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullEnd = positionedToken.fullEnd(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullEnd) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullEnd - triviaWidth); - } - - fullEnd -= triviaWidth; - } - } - - return null; - } - - function findSkippedTokenInLeadingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, true); - } - Syntax.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList; - - function findSkippedTokenInTrailingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, false); - } - Syntax.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList; - - function findSkippedTokenInPositionedToken(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken; - - function findSkippedTokenOnLeft(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft; - - function getAncestorOfKind(positionedToken, kind) { - while (positionedToken && positionedToken.parent()) { - if (positionedToken.parent().kind() === kind) { - return positionedToken.parent(); - } - - positionedToken = positionedToken.parent(); - } - - return null; - } - Syntax.getAncestorOfKind = getAncestorOfKind; - - function hasAncestorOfKind(positionedToken, kind) { - return Syntax.getAncestorOfKind(positionedToken, kind) !== null; - } - Syntax.hasAncestorOfKind = hasAncestorOfKind; - - function isIntegerLiteral(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.isToken() && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - Syntax.isIntegerLiteral = isIntegerLiteral; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var NormalModeFactory = (function () { - function NormalModeFactory() { - } - NormalModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, false); - }; - NormalModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, false); - }; - NormalModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, false); - }; - NormalModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - NormalModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, false); - }; - NormalModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, false); - }; - NormalModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, false); - }; - NormalModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, false); - }; - NormalModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, false); - }; - NormalModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, false); - }; - NormalModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, false); - }; - NormalModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(false); - }; - NormalModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, false); - }; - NormalModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, false); - }; - NormalModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, false); - }; - NormalModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, false); - }; - NormalModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, false); - }; - NormalModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, false); - }; - NormalModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, false); - }; - NormalModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, false); - }; - NormalModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, false); - }; - NormalModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, false); - }; - NormalModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, false); - }; - NormalModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, false); - }; - NormalModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, false); - }; - NormalModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, false); - }; - NormalModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, false); - }; - NormalModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, false); - }; - NormalModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, false); - }; - NormalModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, false); - }; - NormalModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, false); - }; - NormalModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, false); - }; - NormalModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, false); - }; - NormalModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, false); - }; - NormalModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, false); - }; - NormalModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, false); - }; - NormalModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, false); - }; - NormalModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, false); - }; - NormalModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, false); - }; - NormalModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, false); - }; - NormalModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, false); - }; - NormalModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, false); - }; - NormalModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, false); - }; - NormalModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, false); - }; - NormalModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, false); - }; - NormalModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, false); - }; - NormalModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, false); - }; - NormalModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, false); - }; - NormalModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, false); - }; - NormalModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, false); - }; - NormalModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, false); - }; - NormalModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, false); - }; - NormalModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, false); - }; - NormalModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, false); - }; - NormalModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, false); - }; - NormalModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, false); - }; - NormalModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, false); - }; - NormalModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, false); - }; - NormalModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, false); - }; - NormalModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, false); - }; - NormalModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, false); - }; - NormalModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, false); - }; - return NormalModeFactory; - })(); - Syntax.NormalModeFactory = NormalModeFactory; - - var StrictModeFactory = (function () { - function StrictModeFactory() { - } - StrictModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, true); - }; - StrictModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, true); - }; - StrictModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, true); - }; - StrictModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, true); - }; - StrictModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, true); - }; - StrictModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, true); - }; - StrictModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, true); - }; - StrictModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, true); - }; - StrictModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, true); - }; - StrictModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, true); - }; - StrictModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, true); - }; - StrictModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(true); - }; - StrictModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, true); - }; - StrictModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, true); - }; - StrictModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, true); - }; - StrictModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, true); - }; - StrictModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, true); - }; - StrictModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, true); - }; - StrictModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, true); - }; - StrictModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, true); - }; - StrictModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, true); - }; - StrictModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, true); - }; - StrictModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, true); - }; - StrictModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, true); - }; - StrictModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, true); - }; - StrictModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, true); - }; - StrictModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, true); - }; - StrictModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, true); - }; - StrictModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, true); - }; - StrictModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, true); - }; - StrictModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, true); - }; - StrictModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, true); - }; - StrictModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, true); - }; - StrictModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, true); - }; - StrictModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, true); - }; - StrictModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, true); - }; - StrictModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, true); - }; - StrictModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, true); - }; - StrictModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, true); - }; - StrictModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, true); - }; - StrictModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, true); - }; - StrictModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, true); - }; - StrictModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, true); - }; - StrictModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, true); - }; - StrictModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, true); - }; - StrictModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, true); - }; - StrictModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, true); - }; - StrictModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, true); - }; - StrictModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, true); - }; - StrictModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, true); - }; - StrictModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, true); - }; - StrictModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, true); - }; - StrictModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, true); - }; - StrictModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, true); - }; - StrictModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, true); - }; - StrictModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, true); - }; - StrictModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, true); - }; - StrictModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, true); - }; - StrictModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, true); - }; - StrictModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, true); - }; - StrictModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, true); - }; - StrictModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, true); - }; - return StrictModeFactory; - })(); - Syntax.StrictModeFactory = StrictModeFactory; - - Syntax.normalModeFactory = new NormalModeFactory(); - Syntax.strictModeFactory = new StrictModeFactory(); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - function isDirectivePrologueElement(node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - var expression = expressionStatement.expression; - - if (expression.kind() === 14 /* StringLiteral */) { - return true; - } - } - - return false; - } - SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement; - - function isUseStrictDirective(node) { - var expressionStatement = node; - var stringLiteral = expressionStatement.expression; - - var text = stringLiteral.text(); - return text === '"use strict"' || text === "'use strict'"; - } - SyntaxFacts.isUseStrictDirective = isUseStrictDirective; - - function isIdentifierNameOrAnyKeyword(token) { - var tokenKind = token.tokenKind; - return tokenKind === 11 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind); - } - SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySyntaxList = (function () { - function EmptySyntaxList() { - } - EmptySyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - EmptySyntaxList.prototype.isNode = function () { - return false; - }; - EmptySyntaxList.prototype.isToken = function () { - return false; - }; - EmptySyntaxList.prototype.isList = function () { - return true; - }; - EmptySyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - EmptySyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.width = function () { - return 0; - }; - - EmptySyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - return EmptySyntaxList; - })(); - Syntax.EmptySyntaxList = EmptySyntaxList; - - Syntax.emptyList = new EmptySyntaxList(); - - var SingletonSyntaxList = (function () { - function SingletonSyntaxList(item) { - this.item = item; - } - SingletonSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - SingletonSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSyntaxList.prototype.isList = function () { - return true; - }; - SingletonSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - SingletonSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxList.prototype.childCount = function () { - return 1; - }; - - SingletonSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSyntaxList; - })(); - - var NormalSyntaxList = (function () { - function NormalSyntaxList(nodeOrTokens) { - this._data = 0; - this.nodeOrTokens = nodeOrTokens; - } - NormalSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - NormalSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSyntaxList.prototype.isList = function () { - return true; - }; - NormalSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - NormalSyntaxList.prototype.toJSON = function (key) { - return this.nodeOrTokens; - }; - - NormalSyntaxList.prototype.childCount = function () { - return this.nodeOrTokens.length; - }; - - NormalSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.nodeOrTokens.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.nodeOrTokens[index]; - }; - - NormalSyntaxList.prototype.toArray = function () { - return this.nodeOrTokens.slice(0); - }; - - NormalSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var element = this.nodeOrTokens[i]; - element.collectTextElements(elements); - } - }; - - NormalSyntaxList.prototype.firstToken = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var token = this.nodeOrTokens[i].firstToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.lastToken = function () { - for (var i = this.nodeOrTokens.length - 1; i >= 0; i--) { - var token = this.nodeOrTokens[i].lastToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.fullText = function () { - var elements = new Array(); - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - if (this.nodeOrTokens[i].isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var node = this.nodeOrTokens[i]; - fullWidth += node.fullWidth(); - isIncrementallyUnusable = isIncrementallyUnusable || node.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedList(parent, this, fullStart); - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var nodeOrToken = this.nodeOrTokens[i]; - - var childWidth = nodeOrToken.fullWidth(); - if (position < childWidth) { - return nodeOrToken.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.nodeOrTokens); - } else { - array.splice.apply(array, [index, 0].concat(this.nodeOrTokens)); - } - }; - return NormalSyntaxList; - })(); - - function list(nodes) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptyList; - } - - if (nodes.length === 1) { - var item = nodes[0]; - return new SingletonSyntaxList(item); - } - - return new NormalSyntaxList(nodes); - } - Syntax.list = list; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNode = (function () { - function SyntaxNode(parsedInStrictMode) { - this._data = parsedInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0; - } - SyntaxNode.prototype.isNode = function () { - return true; - }; - SyntaxNode.prototype.isToken = function () { - return false; - }; - SyntaxNode.prototype.isList = function () { - return false; - }; - SyntaxNode.prototype.isSeparatedList = function () { - return false; - }; - - SyntaxNode.prototype.kind = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childCount = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childAt = function (slot) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.firstToken = function () { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.firstToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.lastToken = function () { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.lastToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.insertChildrenInto = function (array, index) { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.isNode() || element.isToken()) { - array.splice(index, 0, element); - } else if (element.isList()) { - element.insertChildrenInto(array, index); - } else if (element.isSeparatedList()) { - element.insertChildrenInto(array, index); - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - } - }; - - SyntaxNode.prototype.leadingTrivia = function () { - var firstToken = this.firstToken(); - return firstToken ? firstToken.leadingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.trailingTrivia = function () { - var lastToken = this.lastToken(); - return lastToken ? lastToken.trailingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.toJSON = function (key) { - var result = { - kind: TypeScript.SyntaxKind[this.kind()], - fullWidth: this.fullWidth() - }; - - if (this.isIncrementallyUnusable()) { - result.isIncrementallyUnusable = true; - } - - if (this.parsedInStrictMode()) { - result.parsedInStrictMode = true; - } - - var thisAsIndexable = this; - for (var i = 0, n = this.childCount(); i < n; i++) { - var value = this.childAt(i); - - if (value) { - for (var name in this) { - if (value === thisAsIndexable[name]) { - result[name] = value; - break; - } - } - } - } - - return result; - }; - - SyntaxNode.prototype.accept = function (visitor) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - SyntaxNode.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - element.collectTextElements(elements); - } - } - }; - - SyntaxNode.prototype.replaceToken = function (token1, token2) { - if (token1 === token2) { - return this; - } - - return this.accept(new TypeScript.SyntaxTokenReplacer(token1, token2)); - }; - - SyntaxNode.prototype.withLeadingTrivia = function (trivia) { - return this.replaceToken(this.firstToken(), this.firstToken().withLeadingTrivia(trivia)); - }; - - SyntaxNode.prototype.withTrailingTrivia = function (trivia) { - return this.replaceToken(this.lastToken(), this.lastToken().withTrailingTrivia(trivia)); - }; - - SyntaxNode.prototype.hasLeadingTrivia = function () { - return this.lastToken().hasLeadingTrivia(); - }; - - SyntaxNode.prototype.hasTrailingTrivia = function () { - return this.lastToken().hasTrailingTrivia(); - }; - - SyntaxNode.prototype.isTypeScriptSpecific = function () { - return false; - }; - - SyntaxNode.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - SyntaxNode.prototype.parsedInStrictMode = function () { - return (this.data() & 4 /* NodeParsedInStrictModeMask */) !== 0; - }; - - SyntaxNode.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - SyntaxNode.prototype.computeData = function () { - var slotCount = this.childCount(); - - var fullWidth = 0; - var childWidth = 0; - - var isIncrementallyUnusable = ((this._data & 2 /* NodeIncrementallyUnusableMask */) !== 0) || slotCount === 0; - - for (var i = 0, n = slotCount; i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - childWidth = element.fullWidth(); - fullWidth += childWidth; - - if (!isIncrementallyUnusable) { - isIncrementallyUnusable = element.isIncrementallyUnusable(); - } - } - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - SyntaxNode.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data |= this.computeData(); - } - - return this._data; - }; - - SyntaxNode.prototype.findToken = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var endOfFileToken = this.tryGetEndOfFileAt(position); - if (endOfFileToken !== null) { - return endOfFileToken; - } - - if (position < 0 || position >= this.fullWidth()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var positionedToken = this.findTokenInternal(null, position, 0); - - if (includeSkippedTokens) { - return TypeScript.Syntax.findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken; - } - - return positionedToken; - }; - - SyntaxNode.prototype.tryGetEndOfFileAt = function (position) { - if (this.kind() === 120 /* SourceUnit */ && position === this.fullWidth()) { - var sourceUnit = this; - return new TypeScript.PositionedToken(new TypeScript.PositionedNode(null, sourceUnit, 0), sourceUnit.endOfFileToken, sourceUnit.moduleElements.fullWidth()); - } - - return null; - }; - - SyntaxNode.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedNode(parent, this, fullStart); - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - var childWidth = element.fullWidth(); - - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - - SyntaxNode.prototype.findTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - var start = positionedToken.start(); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (position > start) { - return positionedToken; - } - - if (positionedToken.fullStart() === 0) { - return null; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.findCompleteTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (positionedToken.token().width() > 0 && position >= positionedToken.end()) { - return positionedToken; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.isModuleElement = function () { - return false; - }; - - SyntaxNode.prototype.isClassElement = function () { - return false; - }; - - SyntaxNode.prototype.isTypeMember = function () { - return false; - }; - - SyntaxNode.prototype.isStatement = function () { - return false; - }; - - SyntaxNode.prototype.isExpression = function () { - return false; - }; - - SyntaxNode.prototype.isSwitchClause = function () { - return false; - }; - - SyntaxNode.prototype.structuralEquals = function (node) { - if (this === node) { - return true; - } - if (node === null) { - return false; - } - if (this.kind() !== node.kind()) { - return false; - } - - for (var i = 0, n = this.childCount(); i < n; i++) { - var element1 = this.childAt(i); - var element2 = node.childAt(i); - - if (!TypeScript.Syntax.elementStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - }; - - SyntaxNode.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - SyntaxNode.prototype.leadingTriviaWidth = function () { - var firstToken = this.firstToken(); - return firstToken === null ? 0 : firstToken.leadingTriviaWidth(); - }; - - SyntaxNode.prototype.trailingTriviaWidth = function () { - var lastToken = this.lastToken(); - return lastToken === null ? 0 : lastToken.trailingTriviaWidth(); - }; - return SyntaxNode; - })(); - TypeScript.SyntaxNode = SyntaxNode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceUnitSyntax = (function (_super) { - __extends(SourceUnitSyntax, _super); - function SourceUnitSyntax(moduleElements, endOfFileToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleElements = moduleElements; - this.endOfFileToken = endOfFileToken; - } - SourceUnitSyntax.prototype.accept = function (visitor) { - return visitor.visitSourceUnit(this); - }; - - SourceUnitSyntax.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnitSyntax.prototype.childCount = function () { - return 2; - }; - - SourceUnitSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleElements; - case 1: - return this.endOfFileToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SourceUnitSyntax.prototype.update = function (moduleElements, endOfFileToken) { - if (this.moduleElements === moduleElements && this.endOfFileToken === endOfFileToken) { - return this; - } - - return new SourceUnitSyntax(moduleElements, endOfFileToken, this.parsedInStrictMode()); - }; - - SourceUnitSyntax.create = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.create1 = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(moduleElements, this.endOfFileToken); - }; - - SourceUnitSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - SourceUnitSyntax.prototype.withEndOfFileToken = function (endOfFileToken) { - return this.update(this.moduleElements, endOfFileToken); - }; - - SourceUnitSyntax.prototype.isTypeScriptSpecific = function () { - if (this.moduleElements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SourceUnitSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SourceUnitSyntax = SourceUnitSyntax; - - var ExternalModuleReferenceSyntax = (function (_super) { - __extends(ExternalModuleReferenceSyntax, _super); - function ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.requireKeyword = requireKeyword; - this.openParenToken = openParenToken; - this.stringLiteral = stringLiteral; - this.closeParenToken = closeParenToken; - } - ExternalModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitExternalModuleReference(this); - }; - - ExternalModuleReferenceSyntax.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - - ExternalModuleReferenceSyntax.prototype.childCount = function () { - return 4; - }; - - ExternalModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.requireKeyword; - case 1: - return this.openParenToken; - case 2: - return this.stringLiteral; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExternalModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ExternalModuleReferenceSyntax.prototype.update = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - if (this.requireKeyword === requireKeyword && this.openParenToken === openParenToken && this.stringLiteral === stringLiteral && this.closeParenToken === closeParenToken) { - return this; - } - - return new ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, this.parsedInStrictMode()); - }; - - ExternalModuleReferenceSyntax.create1 = function (stringLiteral) { - return new ExternalModuleReferenceSyntax(TypeScript.Syntax.token(66 /* RequireKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), stringLiteral, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ExternalModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withRequireKeyword = function (requireKeyword) { - return this.update(requireKeyword, this.openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.requireKeyword, openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.requireKeyword, this.openParenToken, stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.requireKeyword, this.openParenToken, this.stringLiteral, closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExternalModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax; - - var ModuleNameModuleReferenceSyntax = (function (_super) { - __extends(ModuleNameModuleReferenceSyntax, _super); - function ModuleNameModuleReferenceSyntax(moduleName, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleName = moduleName; - } - ModuleNameModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleNameModuleReference(this); - }; - - ModuleNameModuleReferenceSyntax.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - - ModuleNameModuleReferenceSyntax.prototype.childCount = function () { - return 1; - }; - - ModuleNameModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleName; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleNameModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ModuleNameModuleReferenceSyntax.prototype.update = function (moduleName) { - if (this.moduleName === moduleName) { - return this; - } - - return new ModuleNameModuleReferenceSyntax(moduleName, this.parsedInStrictMode()); - }; - - ModuleNameModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withModuleName = function (moduleName) { - return this.update(moduleName); - }; - - ModuleNameModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleNameModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax; - - var ImportDeclarationSyntax = (function (_super) { - __extends(ImportDeclarationSyntax, _super); - function ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.importKeyword = importKeyword; - this.identifier = identifier; - this.equalsToken = equalsToken; - this.moduleReference = moduleReference; - this.semicolonToken = semicolonToken; - } - ImportDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitImportDeclaration(this); - }; - - ImportDeclarationSyntax.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - ImportDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.importKeyword; - case 2: - return this.identifier; - case 3: - return this.equalsToken; - case 4: - return this.moduleReference; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ImportDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ImportDeclarationSyntax.prototype.update = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - if (this.modifiers === modifiers && this.importKeyword === importKeyword && this.identifier === identifier && this.equalsToken === equalsToken && this.moduleReference === moduleReference && this.semicolonToken === semicolonToken) { - return this; - } - - return new ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, this.parsedInStrictMode()); - }; - - ImportDeclarationSyntax.create = function (importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - - ImportDeclarationSyntax.create1 = function (identifier, moduleReference) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(49 /* ImportKeyword */), identifier, TypeScript.Syntax.token(107 /* EqualsToken */), moduleReference, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ImportDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ImportDeclarationSyntax.prototype.withImportKeyword = function (importKeyword) { - return this.update(this.modifiers, importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.importKeyword, identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModuleReference = function (moduleReference) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, semicolonToken); - }; - - ImportDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ImportDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ImportDeclarationSyntax = ImportDeclarationSyntax; - - var ExportAssignmentSyntax = (function (_super) { - __extends(ExportAssignmentSyntax, _super); - function ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.exportKeyword = exportKeyword; - this.equalsToken = equalsToken; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ExportAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitExportAssignment(this); - }; - - ExportAssignmentSyntax.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignmentSyntax.prototype.childCount = function () { - return 4; - }; - - ExportAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.exportKeyword; - case 1: - return this.equalsToken; - case 2: - return this.identifier; - case 3: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExportAssignmentSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExportAssignmentSyntax.prototype.update = function (exportKeyword, equalsToken, identifier, semicolonToken) { - if (this.exportKeyword === exportKeyword && this.equalsToken === equalsToken && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ExportAssignmentSyntax.create1 = function (identifier) { - return new ExportAssignmentSyntax(TypeScript.Syntax.token(47 /* ExportKeyword */), TypeScript.Syntax.token(107 /* EqualsToken */), identifier, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExportAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withExportKeyword = function (exportKeyword) { - return this.update(exportKeyword, this.equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.exportKeyword, equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.exportKeyword, this.equalsToken, identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.exportKeyword, this.equalsToken, this.identifier, semicolonToken); - }; - - ExportAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExportAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExportAssignmentSyntax = ExportAssignmentSyntax; - - var ClassDeclarationSyntax = (function (_super) { - __extends(ClassDeclarationSyntax, _super); - function ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.classKeyword = classKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.openBraceToken = openBraceToken; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - } - ClassDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitClassDeclaration(this); - }; - - ClassDeclarationSyntax.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclarationSyntax.prototype.childCount = function () { - return 8; - }; - - ClassDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.classKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.openBraceToken; - case 6: - return this.classElements; - case 7: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ClassDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ClassDeclarationSyntax.prototype.update = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - if (this.modifiers === modifiers && this.classKeyword === classKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.openBraceToken === openBraceToken && this.classElements === classElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ClassDeclarationSyntax.create = function (classKeyword, identifier, openBraceToken, closeBraceToken) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, classKeyword, identifier, null, TypeScript.Syntax.emptyList, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ClassDeclarationSyntax.create1 = function (identifier) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(44 /* ClassKeyword */), identifier, null, TypeScript.Syntax.emptyList, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ClassDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ClassDeclarationSyntax.prototype.withClassKeyword = function (classKeyword) { - return this.update(this.modifiers, classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.classKeyword, identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.classKeyword, this.identifier, typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - ClassDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElements = function (classElements) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElement = function (classElement) { - return this.withClassElements(TypeScript.Syntax.list([classElement])); - }; - - ClassDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ClassDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ClassDeclarationSyntax = ClassDeclarationSyntax; - - var InterfaceDeclarationSyntax = (function (_super) { - __extends(InterfaceDeclarationSyntax, _super); - function InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.interfaceKeyword = interfaceKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - } - InterfaceDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitInterfaceDeclaration(this); - }; - - InterfaceDeclarationSyntax.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - InterfaceDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.interfaceKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.body; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InterfaceDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - InterfaceDeclarationSyntax.prototype.update = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - if (this.modifiers === modifiers && this.interfaceKeyword === interfaceKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.body === body) { - return this; - } - - return new InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, this.parsedInStrictMode()); - }; - - InterfaceDeclarationSyntax.create = function (interfaceKeyword, identifier, body) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, interfaceKeyword, identifier, null, TypeScript.Syntax.emptyList, body, false); - }; - - InterfaceDeclarationSyntax.create1 = function (identifier) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(52 /* InterfaceKeyword */), identifier, null, TypeScript.Syntax.emptyList, ObjectTypeSyntax.create1(), false); - }; - - InterfaceDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - InterfaceDeclarationSyntax.prototype.withInterfaceKeyword = function (interfaceKeyword) { - return this.update(this.modifiers, interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.interfaceKeyword, identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - InterfaceDeclarationSyntax.prototype.withBody = function (body) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, body); - }; - - InterfaceDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return InterfaceDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax; - - var HeritageClauseSyntax = (function (_super) { - __extends(HeritageClauseSyntax, _super); - function HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsOrImplementsKeyword = extendsOrImplementsKeyword; - this.typeNames = typeNames; - - this._kind = kind; - } - HeritageClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitHeritageClause(this); - }; - - HeritageClauseSyntax.prototype.childCount = function () { - return 2; - }; - - HeritageClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsOrImplementsKeyword; - case 1: - return this.typeNames; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - HeritageClauseSyntax.prototype.kind = function () { - return this._kind; - }; - - HeritageClauseSyntax.prototype.update = function (kind, extendsOrImplementsKeyword, typeNames) { - if (this._kind === kind && this.extendsOrImplementsKeyword === extendsOrImplementsKeyword && this.typeNames === typeNames) { - return this; - } - - return new HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, this.parsedInStrictMode()); - }; - - HeritageClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withExtendsOrImplementsKeyword = function (extendsOrImplementsKeyword) { - return this.update(this._kind, extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeNames = function (typeNames) { - return this.update(this._kind, this.extendsOrImplementsKeyword, typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeName = function (typeName) { - return this.withTypeNames(TypeScript.Syntax.separatedList([typeName])); - }; - - HeritageClauseSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return HeritageClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.HeritageClauseSyntax = HeritageClauseSyntax; - - var ModuleDeclarationSyntax = (function (_super) { - __extends(ModuleDeclarationSyntax, _super); - function ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.moduleKeyword = moduleKeyword; - this.name = name; - this.stringLiteral = stringLiteral; - this.openBraceToken = openBraceToken; - this.moduleElements = moduleElements; - this.closeBraceToken = closeBraceToken; - } - ModuleDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleDeclaration(this); - }; - - ModuleDeclarationSyntax.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclarationSyntax.prototype.childCount = function () { - return 7; - }; - - ModuleDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.moduleKeyword; - case 2: - return this.name; - case 3: - return this.stringLiteral; - case 4: - return this.openBraceToken; - case 5: - return this.moduleElements; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ModuleDeclarationSyntax.prototype.update = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - if (this.modifiers === modifiers && this.moduleKeyword === moduleKeyword && this.name === name && this.stringLiteral === stringLiteral && this.openBraceToken === openBraceToken && this.moduleElements === moduleElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ModuleDeclarationSyntax.create = function (moduleKeyword, openBraceToken, closeBraceToken) { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, moduleKeyword, null, null, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ModuleDeclarationSyntax.create1 = function () { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(65 /* ModuleKeyword */), null, null, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ModuleDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ModuleDeclarationSyntax.prototype.withModuleKeyword = function (moduleKeyword) { - return this.update(this.modifiers, moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withName = function (name) { - return this.update(this.modifiers, this.moduleKeyword, name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.modifiers, this.moduleKeyword, this.name, stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - ModuleDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleDeclarationSyntax = ModuleDeclarationSyntax; - - var FunctionDeclarationSyntax = (function (_super) { - __extends(FunctionDeclarationSyntax, _super); - function FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - FunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionDeclaration(this); - }; - - FunctionDeclarationSyntax.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - FunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.functionKeyword; - case 2: - return this.identifier; - case 3: - return this.callSignature; - case 4: - return this.block; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionDeclarationSyntax.prototype.isStatement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.update = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - FunctionDeclarationSyntax.create = function (functionKeyword, identifier, callSignature) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, functionKeyword, identifier, callSignature, null, null, false); - }; - - FunctionDeclarationSyntax.create1 = function (identifier) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(27 /* FunctionKeyword */), identifier, CallSignatureSyntax.create1(), null, null, false); - }; - - FunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - FunctionDeclarationSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(this.modifiers, functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.functionKeyword, identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block !== null && this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionDeclarationSyntax = FunctionDeclarationSyntax; - - var VariableStatementSyntax = (function (_super) { - __extends(VariableStatementSyntax, _super); - function VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclaration = variableDeclaration; - this.semicolonToken = semicolonToken; - } - VariableStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableStatement(this); - }; - - VariableStatementSyntax.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatementSyntax.prototype.childCount = function () { - return 3; - }; - - VariableStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclaration; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableStatementSyntax.prototype.isStatement = function () { - return true; - }; - - VariableStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - VariableStatementSyntax.prototype.update = function (modifiers, variableDeclaration, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclaration === variableDeclaration && this.semicolonToken === semicolonToken) { - return this; - } - - return new VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, this.parsedInStrictMode()); - }; - - VariableStatementSyntax.create = function (variableDeclaration, semicolonToken) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, semicolonToken, false); - }; - - VariableStatementSyntax.create1 = function (variableDeclaration) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - VariableStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - VariableStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.modifiers, variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclaration, semicolonToken); - }; - - VariableStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableStatementSyntax = VariableStatementSyntax; - - var VariableDeclarationSyntax = (function (_super) { - __extends(VariableDeclarationSyntax, _super); - function VariableDeclarationSyntax(varKeyword, variableDeclarators, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.varKeyword = varKeyword; - this.variableDeclarators = variableDeclarators; - } - VariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclaration(this); - }; - - VariableDeclarationSyntax.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclarationSyntax.prototype.childCount = function () { - return 2; - }; - - VariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.varKeyword; - case 1: - return this.variableDeclarators; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclarationSyntax.prototype.update = function (varKeyword, variableDeclarators) { - if (this.varKeyword === varKeyword && this.variableDeclarators === variableDeclarators) { - return this; - } - - return new VariableDeclarationSyntax(varKeyword, variableDeclarators, this.parsedInStrictMode()); - }; - - VariableDeclarationSyntax.create1 = function (variableDeclarators) { - return new VariableDeclarationSyntax(TypeScript.Syntax.token(40 /* VarKeyword */), variableDeclarators, false); - }; - - VariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withVarKeyword = function (varKeyword) { - return this.update(varKeyword, this.variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarators = function (variableDeclarators) { - return this.update(this.varKeyword, variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.withVariableDeclarators(TypeScript.Syntax.separatedList([variableDeclarator])); - }; - - VariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclarators.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclarationSyntax = VariableDeclarationSyntax; - - var VariableDeclaratorSyntax = (function (_super) { - __extends(VariableDeclaratorSyntax, _super); - function VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - VariableDeclaratorSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclarator(this); - }; - - VariableDeclaratorSyntax.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - - VariableDeclaratorSyntax.prototype.childCount = function () { - return 3; - }; - - VariableDeclaratorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.typeAnnotation; - case 2: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclaratorSyntax.prototype.update = function (propertyName, typeAnnotation, equalsValueClause) { - if (this.propertyName === propertyName && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - VariableDeclaratorSyntax.create = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.create1 = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, this.typeAnnotation, equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclaratorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclaratorSyntax = VariableDeclaratorSyntax; - - var EqualsValueClauseSyntax = (function (_super) { - __extends(EqualsValueClauseSyntax, _super); - function EqualsValueClauseSyntax(equalsToken, value, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.equalsToken = equalsToken; - this.value = value; - } - EqualsValueClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitEqualsValueClause(this); - }; - - EqualsValueClauseSyntax.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - - EqualsValueClauseSyntax.prototype.childCount = function () { - return 2; - }; - - EqualsValueClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.equalsToken; - case 1: - return this.value; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EqualsValueClauseSyntax.prototype.update = function (equalsToken, value) { - if (this.equalsToken === equalsToken && this.value === value) { - return this; - } - - return new EqualsValueClauseSyntax(equalsToken, value, this.parsedInStrictMode()); - }; - - EqualsValueClauseSyntax.create1 = function (value) { - return new EqualsValueClauseSyntax(TypeScript.Syntax.token(107 /* EqualsToken */), value, false); - }; - - EqualsValueClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(equalsToken, this.value); - }; - - EqualsValueClauseSyntax.prototype.withValue = function (value) { - return this.update(this.equalsToken, value); - }; - - EqualsValueClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.value.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EqualsValueClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EqualsValueClauseSyntax = EqualsValueClauseSyntax; - - var PrefixUnaryExpressionSyntax = (function (_super) { - __extends(PrefixUnaryExpressionSyntax, _super); - function PrefixUnaryExpressionSyntax(kind, operatorToken, operand, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operatorToken = operatorToken; - this.operand = operand; - - this._kind = kind; - } - PrefixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPrefixUnaryExpression(this); - }; - - PrefixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PrefixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operatorToken; - case 1: - return this.operand; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PrefixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PrefixUnaryExpressionSyntax.prototype.update = function (kind, operatorToken, operand) { - if (this._kind === kind && this.operatorToken === operatorToken && this.operand === operand) { - return this; - } - - return new PrefixUnaryExpressionSyntax(kind, operatorToken, operand, this.parsedInStrictMode()); - }; - - PrefixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, this.operatorToken, operand); - }; - - PrefixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PrefixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax; - - var ArrayLiteralExpressionSyntax = (function (_super) { - __extends(ArrayLiteralExpressionSyntax, _super); - function ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.expressions = expressions; - this.closeBracketToken = closeBracketToken; - } - ArrayLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayLiteralExpression(this); - }; - - ArrayLiteralExpressionSyntax.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.expressions; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.update = function (openBracketToken, expressions, closeBracketToken) { - if (this.openBracketToken === openBracketToken && this.expressions === expressions && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayLiteralExpressionSyntax.create = function (openBracketToken, closeBracketToken) { - return new ArrayLiteralExpressionSyntax(openBracketToken, TypeScript.Syntax.emptySeparatedList, closeBracketToken, false); - }; - - ArrayLiteralExpressionSyntax.create1 = function () { - return new ArrayLiteralExpressionSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpressions = function (expressions) { - return this.update(this.openBracketToken, expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpression = function (expression) { - return this.withExpressions(TypeScript.Syntax.separatedList([expression])); - }; - - ArrayLiteralExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.expressions, closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expressions.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArrayLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax; - - var OmittedExpressionSyntax = (function (_super) { - __extends(OmittedExpressionSyntax, _super); - function OmittedExpressionSyntax(parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - } - OmittedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitOmittedExpression(this); - }; - - OmittedExpressionSyntax.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpressionSyntax.prototype.childCount = function () { - return 0; - }; - - OmittedExpressionSyntax.prototype.childAt = function (slot) { - throw TypeScript.Errors.invalidOperation(); - }; - - OmittedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - OmittedExpressionSyntax.prototype.update = function () { - return this; - }; - - OmittedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return OmittedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.OmittedExpressionSyntax = OmittedExpressionSyntax; - - var ParenthesizedExpressionSyntax = (function (_super) { - __extends(ParenthesizedExpressionSyntax, _super); - function ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - } - ParenthesizedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedExpression(this); - }; - - ParenthesizedExpressionSyntax.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ParenthesizedExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.expression; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.update = function (openParenToken, expression, closeParenToken) { - if (this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, this.parsedInStrictMode()); - }; - - ParenthesizedExpressionSyntax.create1 = function (expression) { - return new ParenthesizedExpressionSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParenthesizedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.openParenToken, expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.expression, closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParenthesizedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax; - - var SimpleArrowFunctionExpressionSyntax = (function (_super) { - __extends(SimpleArrowFunctionExpressionSyntax, _super); - function SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - SimpleArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitSimpleArrowFunctionExpression(this); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.update = function (identifier, equalsGreaterThanToken, block, expression) { - if (this.identifier === identifier && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - SimpleArrowFunctionExpressionSyntax.create = function (identifier, equalsGreaterThanToken) { - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.create1 = function (identifier) { - return new SimpleArrowFunctionExpressionSyntax(identifier, TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.identifier, equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.identifier, this.equalsGreaterThanToken, block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.identifier, this.equalsGreaterThanToken, this.block, expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SimpleArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax; - - var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) { - __extends(ParenthesizedArrowFunctionExpressionSyntax, _super); - function ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.callSignature = callSignature; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - ParenthesizedArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedArrowFunctionExpression(this); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.callSignature; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.update = function (callSignature, equalsGreaterThanToken, block, expression) { - if (this.callSignature === callSignature && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create = function (callSignature, equalsGreaterThanToken) { - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create1 = function () { - return new ParenthesizedArrowFunctionExpressionSyntax(CallSignatureSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(callSignature, this.equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.callSignature, equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.callSignature, this.equalsGreaterThanToken, block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.callSignature, this.equalsGreaterThanToken, this.block, expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ParenthesizedArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax; - - var QualifiedNameSyntax = (function (_super) { - __extends(QualifiedNameSyntax, _super); - function QualifiedNameSyntax(left, dotToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.dotToken = dotToken; - this.right = right; - } - QualifiedNameSyntax.prototype.accept = function (visitor) { - return visitor.visitQualifiedName(this); - }; - - QualifiedNameSyntax.prototype.kind = function () { - return 121 /* QualifiedName */; - }; - - QualifiedNameSyntax.prototype.childCount = function () { - return 3; - }; - - QualifiedNameSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.dotToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - QualifiedNameSyntax.prototype.isName = function () { - return true; - }; - - QualifiedNameSyntax.prototype.isType = function () { - return true; - }; - - QualifiedNameSyntax.prototype.update = function (left, dotToken, right) { - if (this.left === left && this.dotToken === dotToken && this.right === right) { - return this; - } - - return new QualifiedNameSyntax(left, dotToken, right, this.parsedInStrictMode()); - }; - - QualifiedNameSyntax.create1 = function (left, right) { - return new QualifiedNameSyntax(left, TypeScript.Syntax.token(76 /* DotToken */), right, false); - }; - - QualifiedNameSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withLeft = function (left) { - return this.update(left, this.dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.left, dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withRight = function (right) { - return this.update(this.left, this.dotToken, right); - }; - - QualifiedNameSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return QualifiedNameSyntax; - })(TypeScript.SyntaxNode); - TypeScript.QualifiedNameSyntax = QualifiedNameSyntax; - - var TypeArgumentListSyntax = (function (_super) { - __extends(TypeArgumentListSyntax, _super); - function TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeArguments = typeArguments; - this.greaterThanToken = greaterThanToken; - } - TypeArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeArgumentList(this); - }; - - TypeArgumentListSyntax.prototype.kind = function () { - return 228 /* TypeArgumentList */; - }; - - TypeArgumentListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeArguments; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeArgumentListSyntax.prototype.update = function (lessThanToken, typeArguments, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeArguments === typeArguments && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeArgumentListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeArgumentListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeArgumentListSyntax.create1 = function () { - return new TypeArgumentListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArguments = function (typeArguments) { - return this.update(this.lessThanToken, typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArgument = function (typeArgument) { - return this.withTypeArguments(TypeScript.Syntax.separatedList([typeArgument])); - }; - - TypeArgumentListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeArguments, greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeArgumentListSyntax = TypeArgumentListSyntax; - - var ConstructorTypeSyntax = (function (_super) { - __extends(ConstructorTypeSyntax, _super); - function ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - ConstructorTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorType(this); - }; - - ConstructorTypeSyntax.prototype.kind = function () { - return 125 /* ConstructorType */; - }; - - ConstructorTypeSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.typeParameterList; - case 2: - return this.parameterList; - case 3: - return this.equalsGreaterThanToken; - case 4: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorTypeSyntax.prototype.isType = function () { - return true; - }; - - ConstructorTypeSyntax.prototype.update = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.newKeyword === newKeyword && this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - ConstructorTypeSyntax.create = function (newKeyword, parameterList, equalsGreaterThanToken, type) { - return new ConstructorTypeSyntax(newKeyword, null, parameterList, equalsGreaterThanToken, type, false); - }; - - ConstructorTypeSyntax.create1 = function (type) { - return new ConstructorTypeSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - ConstructorTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.newKeyword, typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.newKeyword, this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withType = function (type) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - ConstructorTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorTypeSyntax = ConstructorTypeSyntax; - - var FunctionTypeSyntax = (function (_super) { - __extends(FunctionTypeSyntax, _super); - function FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - FunctionTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionType(this); - }; - - FunctionTypeSyntax.prototype.kind = function () { - return 123 /* FunctionType */; - }; - - FunctionTypeSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.equalsGreaterThanToken; - case 3: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionTypeSyntax.prototype.isType = function () { - return true; - }; - - FunctionTypeSyntax.prototype.update = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - FunctionTypeSyntax.create = function (parameterList, equalsGreaterThanToken, type) { - return new FunctionTypeSyntax(null, parameterList, equalsGreaterThanToken, type, false); - }; - - FunctionTypeSyntax.create1 = function (type) { - return new FunctionTypeSyntax(null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - FunctionTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withType = function (type) { - return this.update(this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - FunctionTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return FunctionTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionTypeSyntax = FunctionTypeSyntax; - - var ObjectTypeSyntax = (function (_super) { - __extends(ObjectTypeSyntax, _super); - function ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.typeMembers = typeMembers; - this.closeBraceToken = closeBraceToken; - } - ObjectTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectType(this); - }; - - ObjectTypeSyntax.prototype.kind = function () { - return 122 /* ObjectType */; - }; - - ObjectTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.typeMembers; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectTypeSyntax.prototype.isType = function () { - return true; - }; - - ObjectTypeSyntax.prototype.update = function (openBraceToken, typeMembers, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.typeMembers === typeMembers && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectTypeSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectTypeSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectTypeSyntax.create1 = function () { - return new ObjectTypeSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMembers = function (typeMembers) { - return this.update(this.openBraceToken, typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMember = function (typeMember) { - return this.withTypeMembers(TypeScript.Syntax.separatedList([typeMember])); - }; - - ObjectTypeSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.typeMembers, closeBraceToken); - }; - - ObjectTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ObjectTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectTypeSyntax = ObjectTypeSyntax; - - var ArrayTypeSyntax = (function (_super) { - __extends(ArrayTypeSyntax, _super); - function ArrayTypeSyntax(type, openBracketToken, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.type = type; - this.openBracketToken = openBracketToken; - this.closeBracketToken = closeBracketToken; - } - ArrayTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayType(this); - }; - - ArrayTypeSyntax.prototype.kind = function () { - return 124 /* ArrayType */; - }; - - ArrayTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.type; - case 1: - return this.openBracketToken; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayTypeSyntax.prototype.isType = function () { - return true; - }; - - ArrayTypeSyntax.prototype.update = function (type, openBracketToken, closeBracketToken) { - if (this.type === type && this.openBracketToken === openBracketToken && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayTypeSyntax(type, openBracketToken, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayTypeSyntax.create1 = function (type) { - return new ArrayTypeSyntax(type, TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withType = function (type) { - return this.update(type, this.openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.type, openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.type, this.openBracketToken, closeBracketToken); - }; - - ArrayTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ArrayTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayTypeSyntax = ArrayTypeSyntax; - - var GenericTypeSyntax = (function (_super) { - __extends(GenericTypeSyntax, _super); - function GenericTypeSyntax(name, typeArgumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.name = name; - this.typeArgumentList = typeArgumentList; - } - GenericTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitGenericType(this); - }; - - GenericTypeSyntax.prototype.kind = function () { - return 126 /* GenericType */; - }; - - GenericTypeSyntax.prototype.childCount = function () { - return 2; - }; - - GenericTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.name; - case 1: - return this.typeArgumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GenericTypeSyntax.prototype.isType = function () { - return true; - }; - - GenericTypeSyntax.prototype.update = function (name, typeArgumentList) { - if (this.name === name && this.typeArgumentList === typeArgumentList) { - return this; - } - - return new GenericTypeSyntax(name, typeArgumentList, this.parsedInStrictMode()); - }; - - GenericTypeSyntax.create1 = function (name) { - return new GenericTypeSyntax(name, TypeArgumentListSyntax.create1(), false); - }; - - GenericTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withName = function (name) { - return this.update(name, this.typeArgumentList); - }; - - GenericTypeSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(this.name, typeArgumentList); - }; - - GenericTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return GenericTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GenericTypeSyntax = GenericTypeSyntax; - - var TypeQuerySyntax = (function (_super) { - __extends(TypeQuerySyntax, _super); - function TypeQuerySyntax(typeOfKeyword, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.name = name; - } - TypeQuerySyntax.prototype.accept = function (visitor) { - return visitor.visitTypeQuery(this); - }; - - TypeQuerySyntax.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuerySyntax.prototype.childCount = function () { - return 2; - }; - - TypeQuerySyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeQuerySyntax.prototype.isType = function () { - return true; - }; - - TypeQuerySyntax.prototype.update = function (typeOfKeyword, name) { - if (this.typeOfKeyword === typeOfKeyword && this.name === name) { - return this; - } - - return new TypeQuerySyntax(typeOfKeyword, name, this.parsedInStrictMode()); - }; - - TypeQuerySyntax.create1 = function (name) { - return new TypeQuerySyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), name, false); - }; - - TypeQuerySyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.name); - }; - - TypeQuerySyntax.prototype.withName = function (name) { - return this.update(this.typeOfKeyword, name); - }; - - TypeQuerySyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeQuerySyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeQuerySyntax = TypeQuerySyntax; - - var TypeAnnotationSyntax = (function (_super) { - __extends(TypeAnnotationSyntax, _super); - function TypeAnnotationSyntax(colonToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.colonToken = colonToken; - this.type = type; - } - TypeAnnotationSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeAnnotation(this); - }; - - TypeAnnotationSyntax.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - - TypeAnnotationSyntax.prototype.childCount = function () { - return 2; - }; - - TypeAnnotationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.colonToken; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeAnnotationSyntax.prototype.update = function (colonToken, type) { - if (this.colonToken === colonToken && this.type === type) { - return this; - } - - return new TypeAnnotationSyntax(colonToken, type, this.parsedInStrictMode()); - }; - - TypeAnnotationSyntax.create1 = function (type) { - return new TypeAnnotationSyntax(TypeScript.Syntax.token(106 /* ColonToken */), type, false); - }; - - TypeAnnotationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withColonToken = function (colonToken) { - return this.update(colonToken, this.type); - }; - - TypeAnnotationSyntax.prototype.withType = function (type) { - return this.update(this.colonToken, type); - }; - - TypeAnnotationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeAnnotationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeAnnotationSyntax = TypeAnnotationSyntax; - - var BlockSyntax = (function (_super) { - __extends(BlockSyntax, _super); - function BlockSyntax(openBraceToken, statements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.statements = statements; - this.closeBraceToken = closeBraceToken; - } - BlockSyntax.prototype.accept = function (visitor) { - return visitor.visitBlock(this); - }; - - BlockSyntax.prototype.kind = function () { - return 146 /* Block */; - }; - - BlockSyntax.prototype.childCount = function () { - return 3; - }; - - BlockSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.statements; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BlockSyntax.prototype.isStatement = function () { - return true; - }; - - BlockSyntax.prototype.isModuleElement = function () { - return true; - }; - - BlockSyntax.prototype.update = function (openBraceToken, statements, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.statements === statements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new BlockSyntax(openBraceToken, statements, closeBraceToken, this.parsedInStrictMode()); - }; - - BlockSyntax.create = function (openBraceToken, closeBraceToken) { - return new BlockSyntax(openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - BlockSyntax.create1 = function () { - return new BlockSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - BlockSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatements = function (statements) { - return this.update(this.openBraceToken, statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - BlockSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.statements, closeBraceToken); - }; - - BlockSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BlockSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BlockSyntax = BlockSyntax; - - var ParameterSyntax = (function (_super) { - __extends(ParameterSyntax, _super); - function ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - ParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitParameter(this); - }; - - ParameterSyntax.prototype.kind = function () { - return 242 /* Parameter */; - }; - - ParameterSyntax.prototype.childCount = function () { - return 6; - }; - - ParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.dotDotDotToken; - case 1: - return this.modifiers; - case 2: - return this.identifier; - case 3: - return this.questionToken; - case 4: - return this.typeAnnotation; - case 5: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterSyntax.prototype.update = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - if (this.dotDotDotToken === dotDotDotToken && this.modifiers === modifiers && this.identifier === identifier && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - ParameterSyntax.create = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.create1 = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withDotDotDotToken = function (dotDotDotToken) { - return this.update(dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifiers = function (modifiers) { - return this.update(this.dotDotDotToken, modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.dotDotDotToken, this.modifiers, identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, equalsValueClause); - }; - - ParameterSyntax.prototype.isTypeScriptSpecific = function () { - if (this.dotDotDotToken !== null) { - return true; - } - if (this.modifiers.isTypeScriptSpecific()) { - return true; - } - if (this.questionToken !== null) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null) { - return true; - } - return false; - }; - return ParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterSyntax = ParameterSyntax; - - var MemberAccessExpressionSyntax = (function (_super) { - __extends(MemberAccessExpressionSyntax, _super); - function MemberAccessExpressionSyntax(expression, dotToken, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.dotToken = dotToken; - this.name = name; - } - MemberAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberAccessExpression(this); - }; - - MemberAccessExpressionSyntax.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - MemberAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.dotToken; - case 2: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.update = function (expression, dotToken, name) { - if (this.expression === expression && this.dotToken === dotToken && this.name === name) { - return this; - } - - return new MemberAccessExpressionSyntax(expression, dotToken, name, this.parsedInStrictMode()); - }; - - MemberAccessExpressionSyntax.create1 = function (expression, name) { - return new MemberAccessExpressionSyntax(expression, TypeScript.Syntax.token(76 /* DotToken */), name, false); - }; - - MemberAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.expression, dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withName = function (name) { - return this.update(this.expression, this.dotToken, name); - }; - - MemberAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MemberAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax; - - var PostfixUnaryExpressionSyntax = (function (_super) { - __extends(PostfixUnaryExpressionSyntax, _super); - function PostfixUnaryExpressionSyntax(kind, operand, operatorToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operand = operand; - this.operatorToken = operatorToken; - - this._kind = kind; - } - PostfixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPostfixUnaryExpression(this); - }; - - PostfixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PostfixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operand; - case 1: - return this.operatorToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PostfixUnaryExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PostfixUnaryExpressionSyntax.prototype.update = function (kind, operand, operatorToken) { - if (this._kind === kind && this.operand === operand && this.operatorToken === operatorToken) { - return this; - } - - return new PostfixUnaryExpressionSyntax(kind, operand, operatorToken, this.parsedInStrictMode()); - }; - - PostfixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.operand, operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PostfixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax; - - var ElementAccessExpressionSyntax = (function (_super) { - __extends(ElementAccessExpressionSyntax, _super); - function ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.openBracketToken = openBracketToken; - this.argumentExpression = argumentExpression; - this.closeBracketToken = closeBracketToken; - } - ElementAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitElementAccessExpression(this); - }; - - ElementAccessExpressionSyntax.prototype.kind = function () { - return 221 /* ElementAccessExpression */; - }; - - ElementAccessExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ElementAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.openBracketToken; - case 2: - return this.argumentExpression; - case 3: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElementAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.update = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - if (this.expression === expression && this.openBracketToken === openBracketToken && this.argumentExpression === argumentExpression && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, this.parsedInStrictMode()); - }; - - ElementAccessExpressionSyntax.create1 = function (expression, argumentExpression) { - return new ElementAccessExpressionSyntax(expression, TypeScript.Syntax.token(74 /* OpenBracketToken */), argumentExpression, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ElementAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.expression, openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withArgumentExpression = function (argumentExpression) { - return this.update(this.expression, this.openBracketToken, argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.expression, this.openBracketToken, this.argumentExpression, closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentExpression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElementAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax; - - var InvocationExpressionSyntax = (function (_super) { - __extends(InvocationExpressionSyntax, _super); - function InvocationExpressionSyntax(expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.argumentList = argumentList; - } - InvocationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitInvocationExpression(this); - }; - - InvocationExpressionSyntax.prototype.kind = function () { - return 213 /* InvocationExpression */; - }; - - InvocationExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - InvocationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InvocationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.update = function (expression, argumentList) { - if (this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new InvocationExpressionSyntax(expression, argumentList, this.parsedInStrictMode()); - }; - - InvocationExpressionSyntax.create1 = function (expression) { - return new InvocationExpressionSyntax(expression, ArgumentListSyntax.create1(), false); - }; - - InvocationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.argumentList); - }; - - InvocationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.expression, argumentList); - }; - - InvocationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return InvocationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InvocationExpressionSyntax = InvocationExpressionSyntax; - - var ArgumentListSyntax = (function (_super) { - __extends(ArgumentListSyntax, _super); - function ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeArgumentList = typeArgumentList; - this.openParenToken = openParenToken; - this.closeParenToken = closeParenToken; - - this.arguments = _arguments; - } - ArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitArgumentList(this); - }; - - ArgumentListSyntax.prototype.kind = function () { - return 226 /* ArgumentList */; - }; - - ArgumentListSyntax.prototype.childCount = function () { - return 4; - }; - - ArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeArgumentList; - case 1: - return this.openParenToken; - case 2: - return this.arguments; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArgumentListSyntax.prototype.update = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - if (this.typeArgumentList === typeArgumentList && this.openParenToken === openParenToken && this.arguments === _arguments && this.closeParenToken === closeParenToken) { - return this; - } - - return new ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, this.parsedInStrictMode()); - }; - - ArgumentListSyntax.create = function (openParenToken, closeParenToken) { - return new ArgumentListSyntax(null, openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ArgumentListSyntax.create1 = function () { - return new ArgumentListSyntax(null, TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(typeArgumentList, this.openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.typeArgumentList, openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArguments = function (_arguments) { - return this.update(this.typeArgumentList, this.openParenToken, _arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArgument = function (_argument) { - return this.withArguments(TypeScript.Syntax.separatedList([_argument])); - }; - - ArgumentListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.typeArgumentList, this.openParenToken, this.arguments, closeParenToken); - }; - - ArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeArgumentList !== null && this.typeArgumentList.isTypeScriptSpecific()) { - return true; - } - if (this.arguments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArgumentListSyntax = ArgumentListSyntax; - - var BinaryExpressionSyntax = (function (_super) { - __extends(BinaryExpressionSyntax, _super); - function BinaryExpressionSyntax(kind, left, operatorToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.operatorToken = operatorToken; - this.right = right; - - this._kind = kind; - } - BinaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitBinaryExpression(this); - }; - - BinaryExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - BinaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.operatorToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BinaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - BinaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - BinaryExpressionSyntax.prototype.update = function (kind, left, operatorToken, right) { - if (this._kind === kind && this.left === left && this.operatorToken === operatorToken && this.right === right) { - return this; - } - - return new BinaryExpressionSyntax(kind, left, operatorToken, right, this.parsedInStrictMode()); - }; - - BinaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withLeft = function (left) { - return this.update(this._kind, left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.left, operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withRight = function (right) { - return this.update(this._kind, this.left, this.operatorToken, right); - }; - - BinaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.left.isTypeScriptSpecific()) { - return true; - } - if (this.right.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BinaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BinaryExpressionSyntax = BinaryExpressionSyntax; - - var ConditionalExpressionSyntax = (function (_super) { - __extends(ConditionalExpressionSyntax, _super); - function ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.condition = condition; - this.questionToken = questionToken; - this.whenTrue = whenTrue; - this.colonToken = colonToken; - this.whenFalse = whenFalse; - } - ConditionalExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitConditionalExpression(this); - }; - - ConditionalExpressionSyntax.prototype.kind = function () { - return 186 /* ConditionalExpression */; - }; - - ConditionalExpressionSyntax.prototype.childCount = function () { - return 5; - }; - - ConditionalExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.condition; - case 1: - return this.questionToken; - case 2: - return this.whenTrue; - case 3: - return this.colonToken; - case 4: - return this.whenFalse; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConditionalExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ConditionalExpressionSyntax.prototype.update = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - if (this.condition === condition && this.questionToken === questionToken && this.whenTrue === whenTrue && this.colonToken === colonToken && this.whenFalse === whenFalse) { - return this; - } - - return new ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, this.parsedInStrictMode()); - }; - - ConditionalExpressionSyntax.create1 = function (condition, whenTrue, whenFalse) { - return new ConditionalExpressionSyntax(condition, TypeScript.Syntax.token(105 /* QuestionToken */), whenTrue, TypeScript.Syntax.token(106 /* ColonToken */), whenFalse, false); - }; - - ConditionalExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withCondition = function (condition) { - return this.update(condition, this.questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.condition, questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenTrue = function (whenTrue) { - return this.update(this.condition, this.questionToken, whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.condition, this.questionToken, this.whenTrue, colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenFalse = function (whenFalse) { - return this.update(this.condition, this.questionToken, this.whenTrue, this.colonToken, whenFalse); - }; - - ConditionalExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.whenTrue.isTypeScriptSpecific()) { - return true; - } - if (this.whenFalse.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ConditionalExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConditionalExpressionSyntax = ConditionalExpressionSyntax; - - var ConstructSignatureSyntax = (function (_super) { - __extends(ConstructSignatureSyntax, _super); - function ConstructSignatureSyntax(newKeyword, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.callSignature = callSignature; - } - ConstructSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructSignature(this); - }; - - ConstructSignatureSyntax.prototype.kind = function () { - return 143 /* ConstructSignature */; - }; - - ConstructSignatureSyntax.prototype.childCount = function () { - return 2; - }; - - ConstructSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - ConstructSignatureSyntax.prototype.update = function (newKeyword, callSignature) { - if (this.newKeyword === newKeyword && this.callSignature === callSignature) { - return this; - } - - return new ConstructSignatureSyntax(newKeyword, callSignature, this.parsedInStrictMode()); - }; - - ConstructSignatureSyntax.create1 = function () { - return new ConstructSignatureSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), CallSignatureSyntax.create1(), false); - }; - - ConstructSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.callSignature); - }; - - ConstructSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.newKeyword, callSignature); - }; - - ConstructSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructSignatureSyntax = ConstructSignatureSyntax; - - var MethodSignatureSyntax = (function (_super) { - __extends(MethodSignatureSyntax, _super); - function MethodSignatureSyntax(propertyName, questionToken, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - } - MethodSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitMethodSignature(this); - }; - - MethodSignatureSyntax.prototype.kind = function () { - return 145 /* MethodSignature */; - }; - - MethodSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - MethodSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MethodSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - MethodSignatureSyntax.prototype.update = function (propertyName, questionToken, callSignature) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.callSignature === callSignature) { - return this; - } - - return new MethodSignatureSyntax(propertyName, questionToken, callSignature, this.parsedInStrictMode()); - }; - - MethodSignatureSyntax.create = function (propertyName, callSignature) { - return new MethodSignatureSyntax(propertyName, null, callSignature, false); - }; - - MethodSignatureSyntax.create1 = function (propertyName) { - return new MethodSignatureSyntax(propertyName, null, CallSignatureSyntax.create1(), false); - }; - - MethodSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, this.questionToken, callSignature); - }; - - MethodSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MethodSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MethodSignatureSyntax = MethodSignatureSyntax; - - var IndexSignatureSyntax = (function (_super) { - __extends(IndexSignatureSyntax, _super); - function IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.parameter = parameter; - this.closeBracketToken = closeBracketToken; - this.typeAnnotation = typeAnnotation; - } - IndexSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexSignature(this); - }; - - IndexSignatureSyntax.prototype.kind = function () { - return 144 /* IndexSignature */; - }; - - IndexSignatureSyntax.prototype.childCount = function () { - return 4; - }; - - IndexSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.parameter; - case 2: - return this.closeBracketToken; - case 3: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - IndexSignatureSyntax.prototype.update = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - if (this.openBracketToken === openBracketToken && this.parameter === parameter && this.closeBracketToken === closeBracketToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, this.parsedInStrictMode()); - }; - - IndexSignatureSyntax.create = function (openBracketToken, parameter, closeBracketToken) { - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, null, false); - }; - - IndexSignatureSyntax.create1 = function (parameter) { - return new IndexSignatureSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), parameter, TypeScript.Syntax.token(75 /* CloseBracketToken */), null, false); - }; - - IndexSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withParameter = function (parameter) { - return this.update(this.openBracketToken, parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.parameter, closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.openBracketToken, this.parameter, this.closeBracketToken, typeAnnotation); - }; - - IndexSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexSignatureSyntax = IndexSignatureSyntax; - - var PropertySignatureSyntax = (function (_super) { - __extends(PropertySignatureSyntax, _super); - function PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - } - PropertySignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitPropertySignature(this); - }; - - PropertySignatureSyntax.prototype.kind = function () { - return 141 /* PropertySignature */; - }; - - PropertySignatureSyntax.prototype.childCount = function () { - return 3; - }; - - PropertySignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PropertySignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - PropertySignatureSyntax.prototype.update = function (propertyName, questionToken, typeAnnotation) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, this.parsedInStrictMode()); - }; - - PropertySignatureSyntax.create = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.create1 = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, this.questionToken, typeAnnotation); - }; - - PropertySignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return PropertySignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PropertySignatureSyntax = PropertySignatureSyntax; - - var CallSignatureSyntax = (function (_super) { - __extends(CallSignatureSyntax, _super); - function CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - } - CallSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitCallSignature(this); - }; - - CallSignatureSyntax.prototype.kind = function () { - return 142 /* CallSignature */; - }; - - CallSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - CallSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CallSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - CallSignatureSyntax.prototype.update = function (typeParameterList, parameterList, typeAnnotation) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, this.parsedInStrictMode()); - }; - - CallSignatureSyntax.create = function (parameterList) { - return new CallSignatureSyntax(null, parameterList, null, false); - }; - - CallSignatureSyntax.create1 = function () { - return new CallSignatureSyntax(null, ParameterListSyntax.create1(), null, false); - }; - - CallSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.typeParameterList, this.parameterList, typeAnnotation); - }; - - CallSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeParameterList !== null) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - return false; - }; - return CallSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CallSignatureSyntax = CallSignatureSyntax; - - var ParameterListSyntax = (function (_super) { - __extends(ParameterListSyntax, _super); - function ParameterListSyntax(openParenToken, parameters, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.parameters = parameters; - this.closeParenToken = closeParenToken; - } - ParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitParameterList(this); - }; - - ParameterListSyntax.prototype.kind = function () { - return 227 /* ParameterList */; - }; - - ParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - ParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.parameters; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterListSyntax.prototype.update = function (openParenToken, parameters, closeParenToken) { - if (this.openParenToken === openParenToken && this.parameters === parameters && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParameterListSyntax(openParenToken, parameters, closeParenToken, this.parsedInStrictMode()); - }; - - ParameterListSyntax.create = function (openParenToken, closeParenToken) { - return new ParameterListSyntax(openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ParameterListSyntax.create1 = function () { - return new ParameterListSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameters = function (parameters) { - return this.update(this.openParenToken, parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameter = function (parameter) { - return this.withParameters(TypeScript.Syntax.separatedList([parameter])); - }; - - ParameterListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.parameters, closeParenToken); - }; - - ParameterListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.parameters.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterListSyntax = ParameterListSyntax; - - var TypeParameterListSyntax = (function (_super) { - __extends(TypeParameterListSyntax, _super); - function TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeParameters = typeParameters; - this.greaterThanToken = greaterThanToken; - } - TypeParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameterList(this); - }; - - TypeParameterListSyntax.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - - TypeParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeParameters; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterListSyntax.prototype.update = function (lessThanToken, typeParameters, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeParameters === typeParameters && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeParameterListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeParameterListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeParameterListSyntax.create1 = function () { - return new TypeParameterListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameters = function (typeParameters) { - return this.update(this.lessThanToken, typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameter = function (typeParameter) { - return this.withTypeParameters(TypeScript.Syntax.separatedList([typeParameter])); - }; - - TypeParameterListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeParameters, greaterThanToken); - }; - - TypeParameterListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterListSyntax = TypeParameterListSyntax; - - var TypeParameterSyntax = (function (_super) { - __extends(TypeParameterSyntax, _super); - function TypeParameterSyntax(identifier, constraint, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.constraint = constraint; - } - TypeParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameter(this); - }; - - TypeParameterSyntax.prototype.kind = function () { - return 238 /* TypeParameter */; - }; - - TypeParameterSyntax.prototype.childCount = function () { - return 2; - }; - - TypeParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.constraint; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterSyntax.prototype.update = function (identifier, constraint) { - if (this.identifier === identifier && this.constraint === constraint) { - return this; - } - - return new TypeParameterSyntax(identifier, constraint, this.parsedInStrictMode()); - }; - - TypeParameterSyntax.create = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.create1 = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.constraint); - }; - - TypeParameterSyntax.prototype.withConstraint = function (constraint) { - return this.update(this.identifier, constraint); - }; - - TypeParameterSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterSyntax = TypeParameterSyntax; - - var ConstraintSyntax = (function (_super) { - __extends(ConstraintSyntax, _super); - function ConstraintSyntax(extendsKeyword, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsKeyword = extendsKeyword; - this.type = type; - } - ConstraintSyntax.prototype.accept = function (visitor) { - return visitor.visitConstraint(this); - }; - - ConstraintSyntax.prototype.kind = function () { - return 239 /* Constraint */; - }; - - ConstraintSyntax.prototype.childCount = function () { - return 2; - }; - - ConstraintSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsKeyword; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstraintSyntax.prototype.update = function (extendsKeyword, type) { - if (this.extendsKeyword === extendsKeyword && this.type === type) { - return this; - } - - return new ConstraintSyntax(extendsKeyword, type, this.parsedInStrictMode()); - }; - - ConstraintSyntax.create1 = function (type) { - return new ConstraintSyntax(TypeScript.Syntax.token(48 /* ExtendsKeyword */), type, false); - }; - - ConstraintSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withExtendsKeyword = function (extendsKeyword) { - return this.update(extendsKeyword, this.type); - }; - - ConstraintSyntax.prototype.withType = function (type) { - return this.update(this.extendsKeyword, type); - }; - - ConstraintSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstraintSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstraintSyntax = ConstraintSyntax; - - var ElseClauseSyntax = (function (_super) { - __extends(ElseClauseSyntax, _super); - function ElseClauseSyntax(elseKeyword, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.elseKeyword = elseKeyword; - this.statement = statement; - } - ElseClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitElseClause(this); - }; - - ElseClauseSyntax.prototype.kind = function () { - return 235 /* ElseClause */; - }; - - ElseClauseSyntax.prototype.childCount = function () { - return 2; - }; - - ElseClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.elseKeyword; - case 1: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElseClauseSyntax.prototype.update = function (elseKeyword, statement) { - if (this.elseKeyword === elseKeyword && this.statement === statement) { - return this; - } - - return new ElseClauseSyntax(elseKeyword, statement, this.parsedInStrictMode()); - }; - - ElseClauseSyntax.create1 = function (statement) { - return new ElseClauseSyntax(TypeScript.Syntax.token(23 /* ElseKeyword */), statement, false); - }; - - ElseClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withElseKeyword = function (elseKeyword) { - return this.update(elseKeyword, this.statement); - }; - - ElseClauseSyntax.prototype.withStatement = function (statement) { - return this.update(this.elseKeyword, statement); - }; - - ElseClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElseClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElseClauseSyntax = ElseClauseSyntax; - - var IfStatementSyntax = (function (_super) { - __extends(IfStatementSyntax, _super); - function IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.ifKeyword = ifKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - this.elseClause = elseClause; - } - IfStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitIfStatement(this); - }; - - IfStatementSyntax.prototype.kind = function () { - return 147 /* IfStatement */; - }; - - IfStatementSyntax.prototype.childCount = function () { - return 6; - }; - - IfStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.ifKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - case 5: - return this.elseClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IfStatementSyntax.prototype.isStatement = function () { - return true; - }; - - IfStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - IfStatementSyntax.prototype.update = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - if (this.ifKeyword === ifKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement && this.elseClause === elseClause) { - return this; - } - - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, this.parsedInStrictMode()); - }; - - IfStatementSyntax.create = function (ifKeyword, openParenToken, condition, closeParenToken, statement) { - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, null, false); - }; - - IfStatementSyntax.create1 = function (condition, statement) { - return new IfStatementSyntax(TypeScript.Syntax.token(28 /* IfKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, null, false); - }; - - IfStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withIfKeyword = function (ifKeyword) { - return this.update(ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.ifKeyword, openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.ifKeyword, this.openParenToken, condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withElseClause = function (elseClause) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, elseClause); - }; - - IfStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.elseClause !== null && this.elseClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return IfStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IfStatementSyntax = IfStatementSyntax; - - var ExpressionStatementSyntax = (function (_super) { - __extends(ExpressionStatementSyntax, _super); - function ExpressionStatementSyntax(expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ExpressionStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitExpressionStatement(this); - }; - - ExpressionStatementSyntax.prototype.kind = function () { - return 149 /* ExpressionStatement */; - }; - - ExpressionStatementSyntax.prototype.childCount = function () { - return 2; - }; - - ExpressionStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExpressionStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.update = function (expression, semicolonToken) { - if (this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExpressionStatementSyntax(expression, semicolonToken, this.parsedInStrictMode()); - }; - - ExpressionStatementSyntax.create1 = function (expression) { - return new ExpressionStatementSyntax(expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExpressionStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.semicolonToken); - }; - - ExpressionStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.expression, semicolonToken); - }; - - ExpressionStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ExpressionStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExpressionStatementSyntax = ExpressionStatementSyntax; - - var ConstructorDeclarationSyntax = (function (_super) { - __extends(ConstructorDeclarationSyntax, _super); - function ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.constructorKeyword = constructorKeyword; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - ConstructorDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorDeclaration(this); - }; - - ConstructorDeclarationSyntax.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; - }; - - ConstructorDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.constructorKeyword; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - ConstructorDeclarationSyntax.prototype.update = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.constructorKeyword === constructorKeyword && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - ConstructorDeclarationSyntax.create = function (constructorKeyword, callSignature) { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, constructorKeyword, callSignature, null, null, false); - }; - - ConstructorDeclarationSyntax.create1 = function () { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(62 /* ConstructorKeyword */), CallSignatureSyntax.create1(), null, null, false); - }; - - ConstructorDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ConstructorDeclarationSyntax.prototype.withConstructorKeyword = function (constructorKeyword) { - return this.update(this.modifiers, constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.constructorKeyword, callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, this.block, semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax; - - var MemberFunctionDeclarationSyntax = (function (_super) { - __extends(MemberFunctionDeclarationSyntax, _super); - function MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - MemberFunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberFunctionDeclaration(this); - }; - - MemberFunctionDeclarationSyntax.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; - }; - - MemberFunctionDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - MemberFunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.propertyName; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberFunctionDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.update = function (modifiers, propertyName, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.propertyName === propertyName && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - MemberFunctionDeclarationSyntax.create = function (propertyName, callSignature) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, callSignature, null, null, false); - }; - - MemberFunctionDeclarationSyntax.create1 = function (propertyName) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, CallSignatureSyntax.create1(), null, null, false); - }; - - MemberFunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberFunctionDeclarationSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.propertyName, callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.propertyName, this.callSignature, block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.propertyName, this.callSignature, this.block, semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberFunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax; - - var GetAccessorSyntax = (function (_super) { - __extends(GetAccessorSyntax, _super); - function GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.getKeyword = getKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - } - GetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitGetAccessor(this); - }; - - GetAccessorSyntax.prototype.kind = function () { - return 139 /* GetAccessor */; - }; - - GetAccessorSyntax.prototype.childCount = function () { - return 6; - }; - - GetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.getKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.typeAnnotation; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - GetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - GetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - GetAccessorSyntax.prototype.update = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - if (this.modifiers === modifiers && this.getKeyword === getKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation && this.block === block) { - return this; - } - - return new GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, this.parsedInStrictMode()); - }; - - GetAccessorSyntax.create = function (getKeyword, propertyName, parameterList, block) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, getKeyword, propertyName, parameterList, null, block, false); - }; - - GetAccessorSyntax.create1 = function (propertyName) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(64 /* GetKeyword */), propertyName, ParameterListSyntax.create1(), null, BlockSyntax.create1(), false); - }; - - GetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - GetAccessorSyntax.prototype.withGetKeyword = function (getKeyword) { - return this.update(this.modifiers, getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.getKeyword, propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, block); - }; - - GetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return GetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GetAccessorSyntax = GetAccessorSyntax; - - var SetAccessorSyntax = (function (_super) { - __extends(SetAccessorSyntax, _super); - function SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.setKeyword = setKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - } - SetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitSetAccessor(this); - }; - - SetAccessorSyntax.prototype.kind = function () { - return 140 /* SetAccessor */; - }; - - SetAccessorSyntax.prototype.childCount = function () { - return 5; - }; - - SetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.setKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - SetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - SetAccessorSyntax.prototype.update = function (modifiers, setKeyword, propertyName, parameterList, block) { - if (this.modifiers === modifiers && this.setKeyword === setKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.block === block) { - return this; - } - - return new SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, this.parsedInStrictMode()); - }; - - SetAccessorSyntax.create = function (setKeyword, propertyName, parameterList, block) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, setKeyword, propertyName, parameterList, block, false); - }; - - SetAccessorSyntax.create1 = function (propertyName) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(68 /* SetKeyword */), propertyName, ParameterListSyntax.create1(), BlockSyntax.create1(), false); - }; - - SetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - SetAccessorSyntax.prototype.withSetKeyword = function (setKeyword) { - return this.update(this.modifiers, setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.setKeyword, propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, this.parameterList, block); - }; - - SetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SetAccessorSyntax = SetAccessorSyntax; - - var MemberVariableDeclarationSyntax = (function (_super) { - __extends(MemberVariableDeclarationSyntax, _super); - function MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - this.semicolonToken = semicolonToken; - } - MemberVariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberVariableDeclaration(this); - }; - - MemberVariableDeclarationSyntax.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; - }; - - MemberVariableDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - MemberVariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclarator; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberVariableDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.update = function (modifiers, variableDeclarator, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclarator === variableDeclarator && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, this.parsedInStrictMode()); - }; - - MemberVariableDeclarationSyntax.create = function (variableDeclarator, semicolonToken) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, semicolonToken, false); - }; - - MemberVariableDeclarationSyntax.create1 = function (variableDeclarator) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - MemberVariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberVariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.update(this.modifiers, variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclarator, semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberVariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax; - - var IndexMemberDeclarationSyntax = (function (_super) { - __extends(IndexMemberDeclarationSyntax, _super); - function IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.indexSignature = indexSignature; - this.semicolonToken = semicolonToken; - } - IndexMemberDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexMemberDeclaration(this); - }; - - IndexMemberDeclarationSyntax.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; - }; - - IndexMemberDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - IndexMemberDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.indexSignature; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexMemberDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - IndexMemberDeclarationSyntax.prototype.update = function (modifiers, indexSignature, semicolonToken) { - if (this.modifiers === modifiers && this.indexSignature === indexSignature && this.semicolonToken === semicolonToken) { - return this; - } - - return new IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, this.parsedInStrictMode()); - }; - - IndexMemberDeclarationSyntax.create = function (indexSignature, semicolonToken) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, semicolonToken, false); - }; - - IndexMemberDeclarationSyntax.create1 = function (indexSignature) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - IndexMemberDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - IndexMemberDeclarationSyntax.prototype.withIndexSignature = function (indexSignature) { - return this.update(this.modifiers, indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.indexSignature, semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexMemberDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax; - - var ThrowStatementSyntax = (function (_super) { - __extends(ThrowStatementSyntax, _super); - function ThrowStatementSyntax(throwKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.throwKeyword = throwKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ThrowStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitThrowStatement(this); - }; - - ThrowStatementSyntax.prototype.kind = function () { - return 157 /* ThrowStatement */; - }; - - ThrowStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ThrowStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.throwKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ThrowStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.update = function (throwKeyword, expression, semicolonToken) { - if (this.throwKeyword === throwKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ThrowStatementSyntax(throwKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ThrowStatementSyntax.create1 = function (expression) { - return new ThrowStatementSyntax(TypeScript.Syntax.token(36 /* ThrowKeyword */), expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ThrowStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withThrowKeyword = function (throwKeyword) { - return this.update(throwKeyword, this.expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.throwKeyword, expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.throwKeyword, this.expression, semicolonToken); - }; - - ThrowStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ThrowStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ThrowStatementSyntax = ThrowStatementSyntax; - - var ReturnStatementSyntax = (function (_super) { - __extends(ReturnStatementSyntax, _super); - function ReturnStatementSyntax(returnKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.returnKeyword = returnKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ReturnStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitReturnStatement(this); - }; - - ReturnStatementSyntax.prototype.kind = function () { - return 150 /* ReturnStatement */; - }; - - ReturnStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ReturnStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.returnKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ReturnStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.update = function (returnKeyword, expression, semicolonToken) { - if (this.returnKeyword === returnKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ReturnStatementSyntax(returnKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ReturnStatementSyntax.create = function (returnKeyword, semicolonToken) { - return new ReturnStatementSyntax(returnKeyword, null, semicolonToken, false); - }; - - ReturnStatementSyntax.create1 = function () { - return new ReturnStatementSyntax(TypeScript.Syntax.token(33 /* ReturnKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ReturnStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withReturnKeyword = function (returnKeyword) { - return this.update(returnKeyword, this.expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.returnKeyword, expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.returnKeyword, this.expression, semicolonToken); - }; - - ReturnStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression !== null && this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ReturnStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ReturnStatementSyntax = ReturnStatementSyntax; - - var ObjectCreationExpressionSyntax = (function (_super) { - __extends(ObjectCreationExpressionSyntax, _super); - function ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.expression = expression; - this.argumentList = argumentList; - } - ObjectCreationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectCreationExpression(this); - }; - - ObjectCreationExpressionSyntax.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; - }; - - ObjectCreationExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectCreationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.expression; - case 2: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectCreationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.update = function (newKeyword, expression, argumentList) { - if (this.newKeyword === newKeyword && this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, this.parsedInStrictMode()); - }; - - ObjectCreationExpressionSyntax.create = function (newKeyword, expression) { - return new ObjectCreationExpressionSyntax(newKeyword, expression, null, false); - }; - - ObjectCreationExpressionSyntax.create1 = function (expression) { - return new ObjectCreationExpressionSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), expression, null, false); - }; - - ObjectCreationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.newKeyword, expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.newKeyword, this.expression, argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList !== null && this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectCreationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax; - - var SwitchStatementSyntax = (function (_super) { - __extends(SwitchStatementSyntax, _super); - function SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.switchKeyword = switchKeyword; - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.openBraceToken = openBraceToken; - this.switchClauses = switchClauses; - this.closeBraceToken = closeBraceToken; - } - SwitchStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitSwitchStatement(this); - }; - - SwitchStatementSyntax.prototype.kind = function () { - return 151 /* SwitchStatement */; - }; - - SwitchStatementSyntax.prototype.childCount = function () { - return 7; - }; - - SwitchStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.switchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.expression; - case 3: - return this.closeParenToken; - case 4: - return this.openBraceToken; - case 5: - return this.switchClauses; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SwitchStatementSyntax.prototype.isStatement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.update = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - if (this.switchKeyword === switchKeyword && this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken && this.openBraceToken === openBraceToken && this.switchClauses === switchClauses && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, this.parsedInStrictMode()); - }; - - SwitchStatementSyntax.create = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, closeBraceToken) { - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - SwitchStatementSyntax.create1 = function (expression) { - return new SwitchStatementSyntax(TypeScript.Syntax.token(34 /* SwitchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - SwitchStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withSwitchKeyword = function (switchKeyword) { - return this.update(switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.switchKeyword, openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.switchKeyword, this.openParenToken, expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClauses = function (switchClauses) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClause = function (switchClause) { - return this.withSwitchClauses(TypeScript.Syntax.list([switchClause])); - }; - - SwitchStatementSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, closeBraceToken); - }; - - SwitchStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.switchClauses.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SwitchStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SwitchStatementSyntax = SwitchStatementSyntax; - - var CaseSwitchClauseSyntax = (function (_super) { - __extends(CaseSwitchClauseSyntax, _super); - function CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.caseKeyword = caseKeyword; - this.expression = expression; - this.colonToken = colonToken; - this.statements = statements; - } - CaseSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCaseSwitchClause(this); - }; - - CaseSwitchClauseSyntax.prototype.kind = function () { - return 233 /* CaseSwitchClause */; - }; - - CaseSwitchClauseSyntax.prototype.childCount = function () { - return 4; - }; - - CaseSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.caseKeyword; - case 1: - return this.expression; - case 2: - return this.colonToken; - case 3: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CaseSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - CaseSwitchClauseSyntax.prototype.update = function (caseKeyword, expression, colonToken, statements) { - if (this.caseKeyword === caseKeyword && this.expression === expression && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, this.parsedInStrictMode()); - }; - - CaseSwitchClauseSyntax.create = function (caseKeyword, expression, colonToken) { - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.create1 = function (expression) { - return new CaseSwitchClauseSyntax(TypeScript.Syntax.token(16 /* CaseKeyword */), expression, TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withCaseKeyword = function (caseKeyword) { - return this.update(caseKeyword, this.expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withExpression = function (expression) { - return this.update(this.caseKeyword, expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.caseKeyword, this.expression, colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.caseKeyword, this.expression, this.colonToken, statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - CaseSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CaseSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax; - - var DefaultSwitchClauseSyntax = (function (_super) { - __extends(DefaultSwitchClauseSyntax, _super); - function DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.defaultKeyword = defaultKeyword; - this.colonToken = colonToken; - this.statements = statements; - } - DefaultSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitDefaultSwitchClause(this); - }; - - DefaultSwitchClauseSyntax.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; - }; - - DefaultSwitchClauseSyntax.prototype.childCount = function () { - return 3; - }; - - DefaultSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.defaultKeyword; - case 1: - return this.colonToken; - case 2: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DefaultSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - DefaultSwitchClauseSyntax.prototype.update = function (defaultKeyword, colonToken, statements) { - if (this.defaultKeyword === defaultKeyword && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, this.parsedInStrictMode()); - }; - - DefaultSwitchClauseSyntax.create = function (defaultKeyword, colonToken) { - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.create1 = function () { - return new DefaultSwitchClauseSyntax(TypeScript.Syntax.token(20 /* DefaultKeyword */), TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withDefaultKeyword = function (defaultKeyword) { - return this.update(defaultKeyword, this.colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.defaultKeyword, colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.defaultKeyword, this.colonToken, statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - DefaultSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DefaultSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax; - - var BreakStatementSyntax = (function (_super) { - __extends(BreakStatementSyntax, _super); - function BreakStatementSyntax(breakKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.breakKeyword = breakKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - BreakStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitBreakStatement(this); - }; - - BreakStatementSyntax.prototype.kind = function () { - return 152 /* BreakStatement */; - }; - - BreakStatementSyntax.prototype.childCount = function () { - return 3; - }; - - BreakStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.breakKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BreakStatementSyntax.prototype.isStatement = function () { - return true; - }; - - BreakStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - BreakStatementSyntax.prototype.update = function (breakKeyword, identifier, semicolonToken) { - if (this.breakKeyword === breakKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new BreakStatementSyntax(breakKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - BreakStatementSyntax.create = function (breakKeyword, semicolonToken) { - return new BreakStatementSyntax(breakKeyword, null, semicolonToken, false); - }; - - BreakStatementSyntax.create1 = function () { - return new BreakStatementSyntax(TypeScript.Syntax.token(15 /* BreakKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - BreakStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withBreakKeyword = function (breakKeyword) { - return this.update(breakKeyword, this.identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.breakKeyword, identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.breakKeyword, this.identifier, semicolonToken); - }; - - BreakStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return BreakStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BreakStatementSyntax = BreakStatementSyntax; - - var ContinueStatementSyntax = (function (_super) { - __extends(ContinueStatementSyntax, _super); - function ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.continueKeyword = continueKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ContinueStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitContinueStatement(this); - }; - - ContinueStatementSyntax.prototype.kind = function () { - return 153 /* ContinueStatement */; - }; - - ContinueStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ContinueStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.continueKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ContinueStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.update = function (continueKeyword, identifier, semicolonToken) { - if (this.continueKeyword === continueKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ContinueStatementSyntax.create = function (continueKeyword, semicolonToken) { - return new ContinueStatementSyntax(continueKeyword, null, semicolonToken, false); - }; - - ContinueStatementSyntax.create1 = function () { - return new ContinueStatementSyntax(TypeScript.Syntax.token(18 /* ContinueKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ContinueStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withContinueKeyword = function (continueKeyword) { - return this.update(continueKeyword, this.identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.continueKeyword, identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.continueKeyword, this.identifier, semicolonToken); - }; - - ContinueStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return ContinueStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ContinueStatementSyntax = ContinueStatementSyntax; - - var ForStatementSyntax = (function (_super) { - __extends(ForStatementSyntax, _super); - function ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.firstSemicolonToken = firstSemicolonToken; - this.condition = condition; - this.secondSemicolonToken = secondSemicolonToken; - this.incrementor = incrementor; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForStatement(this); - }; - - ForStatementSyntax.prototype.kind = function () { - return 154 /* ForStatement */; - }; - - ForStatementSyntax.prototype.childCount = function () { - return 10; - }; - - ForStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.initializer; - case 4: - return this.firstSemicolonToken; - case 5: - return this.condition; - case 6: - return this.secondSemicolonToken; - case 7: - return this.incrementor; - case 8: - return this.closeParenToken; - case 9: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.initializer === initializer && this.firstSemicolonToken === firstSemicolonToken && this.condition === condition && this.secondSemicolonToken === secondSemicolonToken && this.incrementor === incrementor && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForStatementSyntax.create = function (forKeyword, openParenToken, firstSemicolonToken, secondSemicolonToken, closeParenToken, statement) { - return new ForStatementSyntax(forKeyword, openParenToken, null, null, firstSemicolonToken, null, secondSemicolonToken, null, closeParenToken, statement, false); - }; - - ForStatementSyntax.create1 = function (statement) { - return new ForStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withInitializer = function (initializer) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withFirstSemicolonToken = function (firstSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withSecondSemicolonToken = function (secondSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withIncrementor = function (incrementor) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, statement); - }; - - ForStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.initializer !== null && this.initializer.isTypeScriptSpecific()) { - return true; - } - if (this.condition !== null && this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.incrementor !== null && this.incrementor.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForStatementSyntax = ForStatementSyntax; - - var ForInStatementSyntax = (function (_super) { - __extends(ForInStatementSyntax, _super); - function ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.left = left; - this.inKeyword = inKeyword; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForInStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForInStatement(this); - }; - - ForInStatementSyntax.prototype.kind = function () { - return 155 /* ForInStatement */; - }; - - ForInStatementSyntax.prototype.childCount = function () { - return 8; - }; - - ForInStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.left; - case 4: - return this.inKeyword; - case 5: - return this.expression; - case 6: - return this.closeParenToken; - case 7: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForInStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForInStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.left === left && this.inKeyword === inKeyword && this.expression === expression && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForInStatementSyntax.create = function (forKeyword, openParenToken, inKeyword, expression, closeParenToken, statement) { - return new ForInStatementSyntax(forKeyword, openParenToken, null, null, inKeyword, expression, closeParenToken, statement, false); - }; - - ForInStatementSyntax.create1 = function (expression, statement) { - return new ForInStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(29 /* InKeyword */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForInStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withLeft = function (left) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withInKeyword = function (inKeyword) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, statement); - }; - - ForInStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.left !== null && this.left.isTypeScriptSpecific()) { - return true; - } - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForInStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForInStatementSyntax = ForInStatementSyntax; - - var WhileStatementSyntax = (function (_super) { - __extends(WhileStatementSyntax, _super); - function WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WhileStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWhileStatement(this); - }; - - WhileStatementSyntax.prototype.kind = function () { - return 158 /* WhileStatement */; - }; - - WhileStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WhileStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.whileKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WhileStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WhileStatementSyntax.prototype.update = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WhileStatementSyntax.create1 = function (condition, statement) { - return new WhileStatementSyntax(TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WhileStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WhileStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WhileStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WhileStatementSyntax = WhileStatementSyntax; - - var WithStatementSyntax = (function (_super) { - __extends(WithStatementSyntax, _super); - function WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.withKeyword = withKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WithStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWithStatement(this); - }; - - WithStatementSyntax.prototype.kind = function () { - return 163 /* WithStatement */; - }; - - WithStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WithStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.withKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WithStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WithStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WithStatementSyntax.prototype.update = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.withKeyword === withKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WithStatementSyntax.create1 = function (condition, statement) { - return new WithStatementSyntax(TypeScript.Syntax.token(43 /* WithKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WithStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withWithKeyword = function (withKeyword) { - return this.update(withKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.withKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.withKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.withKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.withKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WithStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WithStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WithStatementSyntax = WithStatementSyntax; - - var EnumDeclarationSyntax = (function (_super) { - __extends(EnumDeclarationSyntax, _super); - function EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.enumKeyword = enumKeyword; - this.identifier = identifier; - this.openBraceToken = openBraceToken; - this.enumElements = enumElements; - this.closeBraceToken = closeBraceToken; - } - EnumDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumDeclaration(this); - }; - - EnumDeclarationSyntax.prototype.kind = function () { - return 132 /* EnumDeclaration */; - }; - - EnumDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - EnumDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.enumKeyword; - case 2: - return this.identifier; - case 3: - return this.openBraceToken; - case 4: - return this.enumElements; - case 5: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - EnumDeclarationSyntax.prototype.update = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - if (this.modifiers === modifiers && this.enumKeyword === enumKeyword && this.identifier === identifier && this.openBraceToken === openBraceToken && this.enumElements === enumElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, this.parsedInStrictMode()); - }; - - EnumDeclarationSyntax.create = function (enumKeyword, identifier, openBraceToken, closeBraceToken) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, enumKeyword, identifier, openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - EnumDeclarationSyntax.create1 = function (identifier) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(46 /* EnumKeyword */), identifier, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - EnumDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - EnumDeclarationSyntax.prototype.withEnumKeyword = function (enumKeyword) { - return this.update(this.modifiers, enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.enumKeyword, identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElements = function (enumElements) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElement = function (enumElement) { - return this.withEnumElements(TypeScript.Syntax.separatedList([enumElement])); - }; - - EnumDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return EnumDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumDeclarationSyntax = EnumDeclarationSyntax; - - var EnumElementSyntax = (function (_super) { - __extends(EnumElementSyntax, _super); - function EnumElementSyntax(propertyName, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - } - EnumElementSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumElement(this); - }; - - EnumElementSyntax.prototype.kind = function () { - return 243 /* EnumElement */; - }; - - EnumElementSyntax.prototype.childCount = function () { - return 2; - }; - - EnumElementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumElementSyntax.prototype.update = function (propertyName, equalsValueClause) { - if (this.propertyName === propertyName && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new EnumElementSyntax(propertyName, equalsValueClause, this.parsedInStrictMode()); - }; - - EnumElementSyntax.create = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.create1 = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.equalsValueClause); - }; - - EnumElementSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, equalsValueClause); - }; - - EnumElementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EnumElementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumElementSyntax = EnumElementSyntax; - - var CastExpressionSyntax = (function (_super) { - __extends(CastExpressionSyntax, _super); - function CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.type = type; - this.greaterThanToken = greaterThanToken; - this.expression = expression; - } - CastExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitCastExpression(this); - }; - - CastExpressionSyntax.prototype.kind = function () { - return 220 /* CastExpression */; - }; - - CastExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - CastExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.type; - case 2: - return this.greaterThanToken; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CastExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.update = function (lessThanToken, type, greaterThanToken, expression) { - if (this.lessThanToken === lessThanToken && this.type === type && this.greaterThanToken === greaterThanToken && this.expression === expression) { - return this; - } - - return new CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, this.parsedInStrictMode()); - }; - - CastExpressionSyntax.create1 = function (type, expression) { - return new CastExpressionSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), type, TypeScript.Syntax.token(81 /* GreaterThanToken */), expression, false); - }; - - CastExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withType = function (type) { - return this.update(this.lessThanToken, type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.type, greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.lessThanToken, this.type, this.greaterThanToken, expression); - }; - - CastExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return CastExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CastExpressionSyntax = CastExpressionSyntax; - - var ObjectLiteralExpressionSyntax = (function (_super) { - __extends(ObjectLiteralExpressionSyntax, _super); - function ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.propertyAssignments = propertyAssignments; - this.closeBraceToken = closeBraceToken; - } - ObjectLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectLiteralExpression(this); - }; - - ObjectLiteralExpressionSyntax.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; - }; - - ObjectLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.propertyAssignments; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.update = function (openBraceToken, propertyAssignments, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.propertyAssignments === propertyAssignments && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectLiteralExpressionSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectLiteralExpressionSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectLiteralExpressionSyntax.create1 = function () { - return new ObjectLiteralExpressionSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignments = function (propertyAssignments) { - return this.update(this.openBraceToken, propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignment = function (propertyAssignment) { - return this.withPropertyAssignments(TypeScript.Syntax.separatedList([propertyAssignment])); - }; - - ObjectLiteralExpressionSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.propertyAssignments, closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.propertyAssignments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax; - - var SimplePropertyAssignmentSyntax = (function (_super) { - __extends(SimplePropertyAssignmentSyntax, _super); - function SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.colonToken = colonToken; - this.expression = expression; - } - SimplePropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitSimplePropertyAssignment(this); - }; - - SimplePropertyAssignmentSyntax.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; - }; - - SimplePropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - SimplePropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.colonToken; - case 2: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimplePropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SimplePropertyAssignmentSyntax.prototype.update = function (propertyName, colonToken, expression) { - if (this.propertyName === propertyName && this.colonToken === colonToken && this.expression === expression) { - return this; - } - - return new SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, this.parsedInStrictMode()); - }; - - SimplePropertyAssignmentSyntax.create1 = function (propertyName, expression) { - return new SimplePropertyAssignmentSyntax(propertyName, TypeScript.Syntax.token(106 /* ColonToken */), expression, false); - }; - - SimplePropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.propertyName, colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withExpression = function (expression) { - return this.update(this.propertyName, this.colonToken, expression); - }; - - SimplePropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SimplePropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax; - - var FunctionPropertyAssignmentSyntax = (function (_super) { - __extends(FunctionPropertyAssignmentSyntax, _super); - function FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - } - FunctionPropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionPropertyAssignment(this); - }; - - FunctionPropertyAssignmentSyntax.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; - }; - - FunctionPropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - FunctionPropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.callSignature; - case 2: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionPropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - FunctionPropertyAssignmentSyntax.prototype.update = function (propertyName, callSignature, block) { - if (this.propertyName === propertyName && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionPropertyAssignmentSyntax.create1 = function (propertyName) { - return new FunctionPropertyAssignmentSyntax(propertyName, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionPropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withBlock = function (block) { - return this.update(this.propertyName, this.callSignature, block); - }; - - FunctionPropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionPropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax; - - var FunctionExpressionSyntax = (function (_super) { - __extends(FunctionExpressionSyntax, _super); - function FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - } - FunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionExpression(this); - }; - - FunctionExpressionSyntax.prototype.kind = function () { - return 222 /* FunctionExpression */; - }; - - FunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.functionKeyword; - case 1: - return this.identifier; - case 2: - return this.callSignature; - case 3: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.update = function (functionKeyword, identifier, callSignature, block) { - if (this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionExpressionSyntax.create = function (functionKeyword, callSignature, block) { - return new FunctionExpressionSyntax(functionKeyword, null, callSignature, block, false); - }; - - FunctionExpressionSyntax.create1 = function () { - return new FunctionExpressionSyntax(TypeScript.Syntax.token(27 /* FunctionKeyword */), null, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(functionKeyword, this.identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.functionKeyword, identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.functionKeyword, this.identifier, callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.functionKeyword, this.identifier, this.callSignature, block); - }; - - FunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionExpressionSyntax = FunctionExpressionSyntax; - - var EmptyStatementSyntax = (function (_super) { - __extends(EmptyStatementSyntax, _super); - function EmptyStatementSyntax(semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.semicolonToken = semicolonToken; - } - EmptyStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitEmptyStatement(this); - }; - - EmptyStatementSyntax.prototype.kind = function () { - return 156 /* EmptyStatement */; - }; - - EmptyStatementSyntax.prototype.childCount = function () { - return 1; - }; - - EmptyStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EmptyStatementSyntax.prototype.isStatement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.update = function (semicolonToken) { - if (this.semicolonToken === semicolonToken) { - return this; - } - - return new EmptyStatementSyntax(semicolonToken, this.parsedInStrictMode()); - }; - - EmptyStatementSyntax.create1 = function () { - return new EmptyStatementSyntax(TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - EmptyStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(semicolonToken); - }; - - EmptyStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return EmptyStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EmptyStatementSyntax = EmptyStatementSyntax; - - var TryStatementSyntax = (function (_super) { - __extends(TryStatementSyntax, _super); - function TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.tryKeyword = tryKeyword; - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - } - TryStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitTryStatement(this); - }; - - TryStatementSyntax.prototype.kind = function () { - return 159 /* TryStatement */; - }; - - TryStatementSyntax.prototype.childCount = function () { - return 4; - }; - - TryStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.tryKeyword; - case 1: - return this.block; - case 2: - return this.catchClause; - case 3: - return this.finallyClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TryStatementSyntax.prototype.isStatement = function () { - return true; - }; - - TryStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - TryStatementSyntax.prototype.update = function (tryKeyword, block, catchClause, finallyClause) { - if (this.tryKeyword === tryKeyword && this.block === block && this.catchClause === catchClause && this.finallyClause === finallyClause) { - return this; - } - - return new TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, this.parsedInStrictMode()); - }; - - TryStatementSyntax.create = function (tryKeyword, block) { - return new TryStatementSyntax(tryKeyword, block, null, null, false); - }; - - TryStatementSyntax.create1 = function () { - return new TryStatementSyntax(TypeScript.Syntax.token(38 /* TryKeyword */), BlockSyntax.create1(), null, null, false); - }; - - TryStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTryKeyword = function (tryKeyword) { - return this.update(tryKeyword, this.block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withBlock = function (block) { - return this.update(this.tryKeyword, block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withCatchClause = function (catchClause) { - return this.update(this.tryKeyword, this.block, catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withFinallyClause = function (finallyClause) { - return this.update(this.tryKeyword, this.block, this.catchClause, finallyClause); - }; - - TryStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - if (this.catchClause !== null && this.catchClause.isTypeScriptSpecific()) { - return true; - } - if (this.finallyClause !== null && this.finallyClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TryStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TryStatementSyntax = TryStatementSyntax; - - var CatchClauseSyntax = (function (_super) { - __extends(CatchClauseSyntax, _super); - function CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.catchKeyword = catchKeyword; - this.openParenToken = openParenToken; - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.closeParenToken = closeParenToken; - this.block = block; - } - CatchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCatchClause(this); - }; - - CatchClauseSyntax.prototype.kind = function () { - return 236 /* CatchClause */; - }; - - CatchClauseSyntax.prototype.childCount = function () { - return 6; - }; - - CatchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.catchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.identifier; - case 3: - return this.typeAnnotation; - case 4: - return this.closeParenToken; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CatchClauseSyntax.prototype.update = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - if (this.catchKeyword === catchKeyword && this.openParenToken === openParenToken && this.identifier === identifier && this.typeAnnotation === typeAnnotation && this.closeParenToken === closeParenToken && this.block === block) { - return this; - } - - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, this.parsedInStrictMode()); - }; - - CatchClauseSyntax.create = function (catchKeyword, openParenToken, identifier, closeParenToken, block) { - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, null, closeParenToken, block, false); - }; - - CatchClauseSyntax.create1 = function (identifier) { - return new CatchClauseSyntax(TypeScript.Syntax.token(17 /* CatchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), identifier, null, TypeScript.Syntax.token(73 /* CloseParenToken */), BlockSyntax.create1(), false); - }; - - CatchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withCatchKeyword = function (catchKeyword) { - return this.update(catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.catchKeyword, openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.catchKeyword, this.openParenToken, identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, block); - }; - - CatchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null && this.typeAnnotation.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CatchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CatchClauseSyntax = CatchClauseSyntax; - - var FinallyClauseSyntax = (function (_super) { - __extends(FinallyClauseSyntax, _super); - function FinallyClauseSyntax(finallyKeyword, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.finallyKeyword = finallyKeyword; - this.block = block; - } - FinallyClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitFinallyClause(this); - }; - - FinallyClauseSyntax.prototype.kind = function () { - return 237 /* FinallyClause */; - }; - - FinallyClauseSyntax.prototype.childCount = function () { - return 2; - }; - - FinallyClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.finallyKeyword; - case 1: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FinallyClauseSyntax.prototype.update = function (finallyKeyword, block) { - if (this.finallyKeyword === finallyKeyword && this.block === block) { - return this; - } - - return new FinallyClauseSyntax(finallyKeyword, block, this.parsedInStrictMode()); - }; - - FinallyClauseSyntax.create1 = function () { - return new FinallyClauseSyntax(TypeScript.Syntax.token(25 /* FinallyKeyword */), BlockSyntax.create1(), false); - }; - - FinallyClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withFinallyKeyword = function (finallyKeyword) { - return this.update(finallyKeyword, this.block); - }; - - FinallyClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.finallyKeyword, block); - }; - - FinallyClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FinallyClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FinallyClauseSyntax = FinallyClauseSyntax; - - var LabeledStatementSyntax = (function (_super) { - __extends(LabeledStatementSyntax, _super); - function LabeledStatementSyntax(identifier, colonToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.colonToken = colonToken; - this.statement = statement; - } - LabeledStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitLabeledStatement(this); - }; - - LabeledStatementSyntax.prototype.kind = function () { - return 160 /* LabeledStatement */; - }; - - LabeledStatementSyntax.prototype.childCount = function () { - return 3; - }; - - LabeledStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.colonToken; - case 2: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - LabeledStatementSyntax.prototype.isStatement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.update = function (identifier, colonToken, statement) { - if (this.identifier === identifier && this.colonToken === colonToken && this.statement === statement) { - return this; - } - - return new LabeledStatementSyntax(identifier, colonToken, statement, this.parsedInStrictMode()); - }; - - LabeledStatementSyntax.create1 = function (identifier, statement) { - return new LabeledStatementSyntax(identifier, TypeScript.Syntax.token(106 /* ColonToken */), statement, false); - }; - - LabeledStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.identifier, colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.identifier, this.colonToken, statement); - }; - - LabeledStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return LabeledStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.LabeledStatementSyntax = LabeledStatementSyntax; - - var DoStatementSyntax = (function (_super) { - __extends(DoStatementSyntax, _super); - function DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.doKeyword = doKeyword; - this.statement = statement; - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.semicolonToken = semicolonToken; - } - DoStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDoStatement(this); - }; - - DoStatementSyntax.prototype.kind = function () { - return 161 /* DoStatement */; - }; - - DoStatementSyntax.prototype.childCount = function () { - return 7; - }; - - DoStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.doKeyword; - case 1: - return this.statement; - case 2: - return this.whileKeyword; - case 3: - return this.openParenToken; - case 4: - return this.condition; - case 5: - return this.closeParenToken; - case 6: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DoStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DoStatementSyntax.prototype.update = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - if (this.doKeyword === doKeyword && this.statement === statement && this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.semicolonToken === semicolonToken) { - return this; - } - - return new DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, this.parsedInStrictMode()); - }; - - DoStatementSyntax.create1 = function (statement, condition) { - return new DoStatementSyntax(TypeScript.Syntax.token(22 /* DoKeyword */), statement, TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DoStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withDoKeyword = function (doKeyword) { - return this.update(doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.doKeyword, statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(this.doKeyword, this.statement, whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, semicolonToken); - }; - - DoStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.condition.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DoStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DoStatementSyntax = DoStatementSyntax; - - var TypeOfExpressionSyntax = (function (_super) { - __extends(TypeOfExpressionSyntax, _super); - function TypeOfExpressionSyntax(typeOfKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.expression = expression; - } - TypeOfExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeOfExpression(this); - }; - - TypeOfExpressionSyntax.prototype.kind = function () { - return 171 /* TypeOfExpression */; - }; - - TypeOfExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - TypeOfExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeOfExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.update = function (typeOfKeyword, expression) { - if (this.typeOfKeyword === typeOfKeyword && this.expression === expression) { - return this; - } - - return new TypeOfExpressionSyntax(typeOfKeyword, expression, this.parsedInStrictMode()); - }; - - TypeOfExpressionSyntax.create1 = function (expression) { - return new TypeOfExpressionSyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), expression, false); - }; - - TypeOfExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.expression); - }; - - TypeOfExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.typeOfKeyword, expression); - }; - - TypeOfExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TypeOfExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeOfExpressionSyntax = TypeOfExpressionSyntax; - - var DeleteExpressionSyntax = (function (_super) { - __extends(DeleteExpressionSyntax, _super); - function DeleteExpressionSyntax(deleteKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.deleteKeyword = deleteKeyword; - this.expression = expression; - } - DeleteExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitDeleteExpression(this); - }; - - DeleteExpressionSyntax.prototype.kind = function () { - return 170 /* DeleteExpression */; - }; - - DeleteExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - DeleteExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.deleteKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DeleteExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.update = function (deleteKeyword, expression) { - if (this.deleteKeyword === deleteKeyword && this.expression === expression) { - return this; - } - - return new DeleteExpressionSyntax(deleteKeyword, expression, this.parsedInStrictMode()); - }; - - DeleteExpressionSyntax.create1 = function (expression) { - return new DeleteExpressionSyntax(TypeScript.Syntax.token(21 /* DeleteKeyword */), expression, false); - }; - - DeleteExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withDeleteKeyword = function (deleteKeyword) { - return this.update(deleteKeyword, this.expression); - }; - - DeleteExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.deleteKeyword, expression); - }; - - DeleteExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DeleteExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DeleteExpressionSyntax = DeleteExpressionSyntax; - - var VoidExpressionSyntax = (function (_super) { - __extends(VoidExpressionSyntax, _super); - function VoidExpressionSyntax(voidKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.voidKeyword = voidKeyword; - this.expression = expression; - } - VoidExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitVoidExpression(this); - }; - - VoidExpressionSyntax.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - VoidExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.voidKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VoidExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.update = function (voidKeyword, expression) { - if (this.voidKeyword === voidKeyword && this.expression === expression) { - return this; - } - - return new VoidExpressionSyntax(voidKeyword, expression, this.parsedInStrictMode()); - }; - - VoidExpressionSyntax.create1 = function (expression) { - return new VoidExpressionSyntax(TypeScript.Syntax.token(41 /* VoidKeyword */), expression, false); - }; - - VoidExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withVoidKeyword = function (voidKeyword) { - return this.update(voidKeyword, this.expression); - }; - - VoidExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.voidKeyword, expression); - }; - - VoidExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VoidExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VoidExpressionSyntax = VoidExpressionSyntax; - - var DebuggerStatementSyntax = (function (_super) { - __extends(DebuggerStatementSyntax, _super); - function DebuggerStatementSyntax(debuggerKeyword, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.debuggerKeyword = debuggerKeyword; - this.semicolonToken = semicolonToken; - } - DebuggerStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDebuggerStatement(this); - }; - - DebuggerStatementSyntax.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - - DebuggerStatementSyntax.prototype.childCount = function () { - return 2; - }; - - DebuggerStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.debuggerKeyword; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DebuggerStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.update = function (debuggerKeyword, semicolonToken) { - if (this.debuggerKeyword === debuggerKeyword && this.semicolonToken === semicolonToken) { - return this; - } - - return new DebuggerStatementSyntax(debuggerKeyword, semicolonToken, this.parsedInStrictMode()); - }; - - DebuggerStatementSyntax.create1 = function () { - return new DebuggerStatementSyntax(TypeScript.Syntax.token(19 /* DebuggerKeyword */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DebuggerStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withDebuggerKeyword = function (debuggerKeyword) { - return this.update(debuggerKeyword, this.semicolonToken); - }; - - DebuggerStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.debuggerKeyword, semicolonToken); - }; - - DebuggerStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return DebuggerStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DebuggerStatementSyntax = DebuggerStatementSyntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxRewriter = (function () { - function SyntaxRewriter() { - } - SyntaxRewriter.prototype.visitToken = function (token) { - return token; - }; - - SyntaxRewriter.prototype.visitNode = function (node) { - return node.accept(this); - }; - - SyntaxRewriter.prototype.visitNodeOrToken = function (node) { - return node.isToken() ? this.visitToken(node) : this.visitNode(node); - }; - - SyntaxRewriter.prototype.visitList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = this.visitNodeOrToken(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.list(newItems); - }; - - SyntaxRewriter.prototype.visitSeparatedList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = item.isToken() ? this.visitToken(item) : this.visitNode(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.separatedList(newItems); - }; - - SyntaxRewriter.prototype.visitSourceUnit = function (node) { - return node.update(this.visitList(node.moduleElements), this.visitToken(node.endOfFileToken)); - }; - - SyntaxRewriter.prototype.visitExternalModuleReference = function (node) { - return node.update(this.visitToken(node.requireKeyword), this.visitToken(node.openParenToken), this.visitToken(node.stringLiteral), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitModuleNameModuleReference = function (node) { - return node.update(this.visitNodeOrToken(node.moduleName)); - }; - - SyntaxRewriter.prototype.visitImportDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.importKeyword), this.visitToken(node.identifier), this.visitToken(node.equalsToken), this.visitNodeOrToken(node.moduleReference), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitExportAssignment = function (node) { - return node.update(this.visitToken(node.exportKeyword), this.visitToken(node.equalsToken), this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitClassDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.classKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitToken(node.openBraceToken), this.visitList(node.classElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitInterfaceDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.interfaceKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitNode(node.body)); - }; - - SyntaxRewriter.prototype.visitHeritageClause = function (node) { - return node.update(node.kind(), this.visitToken(node.extendsOrImplementsKeyword), this.visitSeparatedList(node.typeNames)); - }; - - SyntaxRewriter.prototype.visitModuleDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.moduleKeyword), node.name === null ? null : this.visitNodeOrToken(node.name), node.stringLiteral === null ? null : this.visitToken(node.stringLiteral), this.visitToken(node.openBraceToken), this.visitList(node.moduleElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.functionKeyword), this.visitToken(node.identifier), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableStatement = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclaration), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableDeclaration = function (node) { - return node.update(this.visitToken(node.varKeyword), this.visitSeparatedList(node.variableDeclarators)); - }; - - SyntaxRewriter.prototype.visitVariableDeclarator = function (node) { - return node.update(this.visitToken(node.propertyName), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitEqualsValueClause = function (node) { - return node.update(this.visitToken(node.equalsToken), this.visitNodeOrToken(node.value)); - }; - - SyntaxRewriter.prototype.visitPrefixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.operand)); - }; - - SyntaxRewriter.prototype.visitArrayLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitSeparatedList(node.expressions), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitOmittedExpression = function (node) { - return node; - }; - - SyntaxRewriter.prototype.visitParenthesizedExpression = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitSimpleArrowFunctionExpression = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return node.update(this.visitNode(node.callSignature), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitQualifiedName = function (node) { - return node.update(this.visitNodeOrToken(node.left), this.visitToken(node.dotToken), this.visitToken(node.right)); - }; - - SyntaxRewriter.prototype.visitTypeArgumentList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeArguments), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitConstructorType = function (node) { - return node.update(this.visitToken(node.newKeyword), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitFunctionType = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitObjectType = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.typeMembers), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitArrayType = function (node) { - return node.update(this.visitNodeOrToken(node.type), this.visitToken(node.openBracketToken), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitGenericType = function (node) { - return node.update(this.visitNodeOrToken(node.name), this.visitNode(node.typeArgumentList)); - }; - - SyntaxRewriter.prototype.visitTypeQuery = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.name)); - }; - - SyntaxRewriter.prototype.visitTypeAnnotation = function (node) { - return node.update(this.visitToken(node.colonToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitBlock = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitList(node.statements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitParameter = function (node) { - return node.update(node.dotDotDotToken === null ? null : this.visitToken(node.dotDotDotToken), this.visitList(node.modifiers), this.visitToken(node.identifier), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitMemberAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.dotToken), this.visitToken(node.name)); - }; - - SyntaxRewriter.prototype.visitPostfixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.operand), this.visitToken(node.operatorToken)); - }; - - SyntaxRewriter.prototype.visitElementAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.openBracketToken), this.visitNodeOrToken(node.argumentExpression), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitInvocationExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitArgumentList = function (node) { - return node.update(node.typeArgumentList === null ? null : this.visitNode(node.typeArgumentList), this.visitToken(node.openParenToken), this.visitSeparatedList(node.arguments), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitBinaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.left), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.right)); - }; - - SyntaxRewriter.prototype.visitConditionalExpression = function (node) { - return node.update(this.visitNodeOrToken(node.condition), this.visitToken(node.questionToken), this.visitNodeOrToken(node.whenTrue), this.visitToken(node.colonToken), this.visitNodeOrToken(node.whenFalse)); - }; - - SyntaxRewriter.prototype.visitConstructSignature = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitMethodSignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitIndexSignature = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitNode(node.parameter), this.visitToken(node.closeBracketToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitPropertySignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitCallSignature = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitParameterList = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitSeparatedList(node.parameters), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameterList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeParameters), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameter = function (node) { - return node.update(this.visitToken(node.identifier), node.constraint === null ? null : this.visitNode(node.constraint)); - }; - - SyntaxRewriter.prototype.visitConstraint = function (node) { - return node.update(this.visitToken(node.extendsKeyword), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitElseClause = function (node) { - return node.update(this.visitToken(node.elseKeyword), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitIfStatement = function (node) { - return node.update(this.visitToken(node.ifKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement), node.elseClause === null ? null : this.visitNode(node.elseClause)); - }; - - SyntaxRewriter.prototype.visitExpressionStatement = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitConstructorDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.constructorKeyword), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitMemberFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.propertyName), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitGetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.getKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitSetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.setKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitMemberVariableDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclarator), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitIndexMemberDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.indexSignature), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitThrowStatement = function (node) { - return node.update(this.visitToken(node.throwKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitReturnStatement = function (node) { - return node.update(this.visitToken(node.returnKeyword), node.expression === null ? null : this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitObjectCreationExpression = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNodeOrToken(node.expression), node.argumentList === null ? null : this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitSwitchStatement = function (node) { - return node.update(this.visitToken(node.switchKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitToken(node.openBraceToken), this.visitList(node.switchClauses), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitCaseSwitchClause = function (node) { - return node.update(this.visitToken(node.caseKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitDefaultSwitchClause = function (node) { - return node.update(this.visitToken(node.defaultKeyword), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitBreakStatement = function (node) { - return node.update(this.visitToken(node.breakKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitContinueStatement = function (node) { - return node.update(this.visitToken(node.continueKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitForStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.initializer === null ? null : this.visitNodeOrToken(node.initializer), this.visitToken(node.firstSemicolonToken), node.condition === null ? null : this.visitNodeOrToken(node.condition), this.visitToken(node.secondSemicolonToken), node.incrementor === null ? null : this.visitNodeOrToken(node.incrementor), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitForInStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.left === null ? null : this.visitNodeOrToken(node.left), this.visitToken(node.inKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWhileStatement = function (node) { - return node.update(this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWithStatement = function (node) { - return node.update(this.visitToken(node.withKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitEnumDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.enumKeyword), this.visitToken(node.identifier), this.visitToken(node.openBraceToken), this.visitSeparatedList(node.enumElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitEnumElement = function (node) { - return node.update(this.visitToken(node.propertyName), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitCastExpression = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitNodeOrToken(node.type), this.visitToken(node.greaterThanToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitObjectLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.propertyAssignments), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitSimplePropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitToken(node.colonToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitFunctionPropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFunctionExpression = function (node) { - return node.update(this.visitToken(node.functionKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitEmptyStatement = function (node) { - return node.update(this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTryStatement = function (node) { - return node.update(this.visitToken(node.tryKeyword), this.visitNode(node.block), node.catchClause === null ? null : this.visitNode(node.catchClause), node.finallyClause === null ? null : this.visitNode(node.finallyClause)); - }; - - SyntaxRewriter.prototype.visitCatchClause = function (node) { - return node.update(this.visitToken(node.catchKeyword), this.visitToken(node.openParenToken), this.visitToken(node.identifier), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitToken(node.closeParenToken), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFinallyClause = function (node) { - return node.update(this.visitToken(node.finallyKeyword), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitLabeledStatement = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.colonToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitDoStatement = function (node) { - return node.update(this.visitToken(node.doKeyword), this.visitNodeOrToken(node.statement), this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTypeOfExpression = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDeleteExpression = function (node) { - return node.update(this.visitToken(node.deleteKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitVoidExpression = function (node) { - return node.update(this.visitToken(node.voidKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDebuggerStatement = function (node) { - return node.update(this.visitToken(node.debuggerKeyword), this.visitToken(node.semicolonToken)); - }; - return SyntaxRewriter; - })(); - TypeScript.SyntaxRewriter = SyntaxRewriter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxDedenter = (function (_super) { - __extends(SyntaxDedenter, _super); - function SyntaxDedenter(dedentFirstToken, dedentationAmount, minimumIndent, options) { - _super.call(this); - this.dedentationAmount = dedentationAmount; - this.minimumIndent = minimumIndent; - this.options = options; - this.lastTriviaWasNewLine = dedentFirstToken; - } - SyntaxDedenter.prototype.abort = function () { - this.lastTriviaWasNewLine = false; - this.dedentationAmount = 0; - }; - - SyntaxDedenter.prototype.isAborted = function () { - return this.dedentationAmount === 0; - }; - - SyntaxDedenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.dedentTriviaList(token.leadingTrivia())); - } - - if (this.isAborted()) { - return token; - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxDedenter.prototype.dedentTriviaList = function (triviaList) { - var result = []; - var dedentNextWhitespace = true; - - for (var i = 0, n = triviaList.count(); i < n && !this.isAborted(); i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var dedentThisTrivia = dedentNextWhitespace; - dedentNextWhitespace = false; - - if (dedentThisTrivia) { - if (trivia.kind() === 4 /* WhitespaceTrivia */) { - var hasFollowingNewLine = (i < triviaList.count() - 1) && triviaList.syntaxTriviaAt(i + 1).kind() === 5 /* NewLineTrivia */; - result.push(this.dedentWhitespace(trivia, hasFollowingNewLine)); - continue; - } else if (trivia.kind() !== 5 /* NewLineTrivia */) { - this.abort(); - break; - } - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - result.push(this.dedentMultiLineComment(trivia)); - continue; - } - - result.push(trivia); - if (trivia.kind() === 5 /* NewLineTrivia */) { - dedentNextWhitespace = true; - } - } - - if (dedentNextWhitespace) { - this.abort(); - } - - if (this.isAborted()) { - return triviaList; - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxDedenter.prototype.dedentSegment = function (segment, hasFollowingNewLineTrivia) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition === segment.length) { - if (hasFollowingNewLineTrivia) { - return ""; - } - } else if (TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment.substring(firstNonWhitespacePosition); - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = TypeScript.MathPrototype.min(firstNonWhitespaceColumn, TypeScript.MathPrototype.max(firstNonWhitespaceColumn - this.dedentationAmount, this.minimumIndent)); - - if (newFirstNonWhitespaceColumn === firstNonWhitespaceColumn) { - this.abort(); - return segment; - } - - this.dedentationAmount = firstNonWhitespaceColumn - newFirstNonWhitespaceColumn; - TypeScript.Debug.assert(this.dedentationAmount >= 0); - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxDedenter.prototype.dedentWhitespace = function (trivia, hasFollowingNewLineTrivia) { - var newIndentation = this.dedentSegment(trivia.fullText(), hasFollowingNewLineTrivia); - return TypeScript.Syntax.whitespace(newIndentation); - }; - - SyntaxDedenter.prototype.dedentMultiLineComment = function (trivia) { - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - if (segments.length === 1) { - return trivia; - } - - for (var i = 1; i < segments.length; i++) { - var segment = segments[i]; - segments[i] = this.dedentSegment(segment, false); - } - - var result = segments.join(""); - - return TypeScript.Syntax.multiLineComment(result); - }; - - SyntaxDedenter.dedentNode = function (node, dedentFirstToken, dedentAmount, minimumIndent, options) { - var dedenter = new SyntaxDedenter(dedentFirstToken, dedentAmount, minimumIndent, options); - var result = node.accept(dedenter); - - if (dedenter.isAborted()) { - return node; - } - - return result; - }; - return SyntaxDedenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxDedenter = SyntaxDedenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxIndenter = (function (_super) { - __extends(SyntaxIndenter, _super); - function SyntaxIndenter(indentFirstToken, indentationAmount, options) { - _super.call(this); - this.indentationAmount = indentationAmount; - this.options = options; - this.lastTriviaWasNewLine = indentFirstToken; - this.indentationTrivia = TypeScript.Indentation.indentationTrivia(this.indentationAmount, this.options); - } - SyntaxIndenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.indentTriviaList(token.leadingTrivia())); - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxIndenter.prototype.indentTriviaList = function (triviaList) { - var result = []; - - var indentNextTrivia = true; - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var indentThisTrivia = indentNextTrivia; - indentNextTrivia = false; - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.indentMultiLineComment(trivia, indentThisTrivia, result); - continue; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - this.indentSingleLineOrSkippedText(trivia, indentThisTrivia, result); - continue; - - case 4 /* WhitespaceTrivia */: - this.indentWhitespace(trivia, indentThisTrivia, result); - continue; - - case 5 /* NewLineTrivia */: - result.push(trivia); - indentNextTrivia = true; - continue; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - if (indentNextTrivia) { - result.push(this.indentationTrivia); - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxIndenter.prototype.indentSegment = function (segment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment; - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = firstNonWhitespaceColumn + this.indentationAmount; - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxIndenter.prototype.indentWhitespace = function (trivia, indentThisTrivia, result) { - if (!indentThisTrivia) { - result.push(trivia); - return; - } - - var newIndentation = this.indentSegment(trivia.fullText()); - result.push(TypeScript.Syntax.whitespace(newIndentation)); - }; - - SyntaxIndenter.prototype.indentSingleLineOrSkippedText = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - result.push(trivia); - }; - - SyntaxIndenter.prototype.indentMultiLineComment = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - for (var i = 1; i < segments.length; i++) { - segments[i] = this.indentSegment(segments[i]); - } - - var newText = segments.join(""); - result.push(TypeScript.Syntax.multiLineComment(newText)); - }; - - SyntaxIndenter.indentNode = function (node, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - return node.accept(indenter); - }; - - SyntaxIndenter.indentNodes = function (nodes, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - var result = TypeScript.ArrayUtilities.select(nodes, function (n) { - return n.accept(indenter); - }); - - return result; - }; - return SyntaxIndenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxIndenter = SyntaxIndenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var VariableWidthTokenWithNoTrivia = (function () { - function VariableWidthTokenWithNoTrivia(fullText, kind) { - this._fullText = fullText; - this.tokenKind = kind; - } - VariableWidthTokenWithNoTrivia.prototype.clone = function () { - return new VariableWidthTokenWithNoTrivia(this._fullText, this.tokenKind); - }; - - VariableWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithNoTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithNoTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithNoTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithNoTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithNoTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithNoTrivia; - })(); - Syntax.VariableWidthTokenWithNoTrivia = VariableWidthTokenWithNoTrivia; - - var VariableWidthTokenWithLeadingTrivia = (function () { - function VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - VariableWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingTrivia = VariableWidthTokenWithLeadingTrivia; - - var VariableWidthTokenWithTrailingTrivia = (function () { - function VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithTrailingTrivia = VariableWidthTokenWithTrailingTrivia; - - var VariableWidthTokenWithLeadingAndTrailingTrivia = (function () { - function VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia = VariableWidthTokenWithLeadingAndTrailingTrivia; - - var FixedWidthTokenWithNoTrivia = (function () { - function FixedWidthTokenWithNoTrivia(kind) { - this.tokenKind = kind; - } - FixedWidthTokenWithNoTrivia.prototype.clone = function () { - return new FixedWidthTokenWithNoTrivia(this.tokenKind); - }; - - FixedWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithNoTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithNoTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.fullText = function () { - return this.text(); - }; - - FixedWidthTokenWithNoTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithNoTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithNoTrivia; - })(); - Syntax.FixedWidthTokenWithNoTrivia = FixedWidthTokenWithNoTrivia; - - var FixedWidthTokenWithLeadingTrivia = (function () { - function FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - FixedWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingTrivia = FixedWidthTokenWithLeadingTrivia; - - var FixedWidthTokenWithTrailingTrivia = (function () { - function FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithTrailingTrivia = FixedWidthTokenWithTrailingTrivia; - - var FixedWidthTokenWithLeadingAndTrailingTrivia = (function () { - function FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia = FixedWidthTokenWithLeadingAndTrailingTrivia; - - function collectTokenTextElements(token, elements) { - token.leadingTrivia().collectTextElements(elements); - elements.push(token.text()); - token.trailingTrivia().collectTextElements(elements); - } - - function getTriviaWidth(value) { - return value >>> 2 /* TriviaFullWidthShift */; - } - - function hasTriviaComment(value) { - return (value & 2 /* TriviaCommentMask */) !== 0; - } - - function hasTriviaNewLine(value) { - return (value & 1 /* TriviaNewLineMask */) !== 0; - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function isExpression(token) { - switch (token.tokenKind) { - case 11 /* IdentifierName */: - case 12 /* RegularExpressionLiteral */: - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 50 /* SuperKeyword */: - return true; - } - - return false; - } - Syntax.isExpression = isExpression; - - function realizeToken(token) { - return new RealizedToken(token.tokenKind, token.leadingTrivia(), token.text(), token.value(), token.valueText(), token.trailingTrivia()); - } - Syntax.realizeToken = realizeToken; - - function convertToIdentifierName(token) { - TypeScript.Debug.assert(TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)); - return new RealizedToken(11 /* IdentifierName */, token.leadingTrivia(), token.text(), token.text(), token.text(), token.trailingTrivia()); - } - Syntax.convertToIdentifierName = convertToIdentifierName; - - function tokenToJSON(token) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === token.kind()) { - result.kind = name; - break; - } - } - - result.width = token.width(); - if (token.fullWidth() !== token.width()) { - result.fullWidth = token.fullWidth(); - } - - result.text = token.text(); - - var value = token.value(); - if (value !== null) { - result.value = value; - result.valueText = token.valueText(); - } - - if (token.hasLeadingTrivia()) { - result.hasLeadingTrivia = true; - } - - if (token.hasLeadingComment()) { - result.hasLeadingComment = true; - } - - if (token.hasLeadingNewLine()) { - result.hasLeadingNewLine = true; - } - - if (token.hasLeadingSkippedText()) { - result.hasLeadingSkippedText = true; - } - - if (token.hasTrailingTrivia()) { - result.hasTrailingTrivia = true; - } - - if (token.hasTrailingComment()) { - result.hasTrailingComment = true; - } - - if (token.hasTrailingNewLine()) { - result.hasTrailingNewLine = true; - } - - if (token.hasTrailingSkippedText()) { - result.hasTrailingSkippedText = true; - } - - var trivia = token.leadingTrivia(); - if (trivia.count() > 0) { - result.leadingTrivia = trivia; - } - - trivia = token.trailingTrivia(); - if (trivia.count() > 0) { - result.trailingTrivia = trivia; - } - - return result; - } - Syntax.tokenToJSON = tokenToJSON; - - function value(token) { - return value1(token.tokenKind, token.text()); - } - Syntax.value = value; - - function hexValue(text, start, length) { - var intChar = 0; - for (var i = 0; i < length; i++) { - var ch2 = text.charCodeAt(start + i); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - } - - return intChar; - } - - var characterArray = []; - - function convertEscapes(text) { - characterArray.length = 0; - var result = ""; - - for (var i = 0, n = text.length; i < n; i++) { - var ch = text.charCodeAt(i); - - if (ch === 92 /* backslash */) { - i++; - if (i < n) { - ch = text.charCodeAt(i); - switch (ch) { - case 48 /* _0 */: - characterArray.push(0 /* nullCharacter */); - continue; - - case 98 /* b */: - characterArray.push(8 /* backspace */); - continue; - - case 102 /* f */: - characterArray.push(12 /* formFeed */); - continue; - - case 110 /* n */: - characterArray.push(10 /* lineFeed */); - continue; - - case 114 /* r */: - characterArray.push(13 /* carriageReturn */); - continue; - - case 116 /* t */: - characterArray.push(9 /* tab */); - continue; - - case 118 /* v */: - characterArray.push(11 /* verticalTab */); - continue; - - case 120 /* x */: - characterArray.push(hexValue(text, i + 1, 2)); - i += 2; - continue; - - case 117 /* u */: - characterArray.push(hexValue(text, i + 1, 4)); - i += 4; - continue; - - case 13 /* carriageReturn */: - var nextIndex = i + 1; - if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) { - i++; - } - continue; - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - continue; - - default: - } - } - } - - characterArray.push(ch); - - if (i && !(i % 1024)) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - characterArray.length = 0; - } - } - - if (characterArray.length) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - } - - return result; - } - - function massageEscapes(text) { - return text.indexOf("\\") >= 0 ? convertEscapes(text) : text; - } - Syntax.massageEscapes = massageEscapes; - - function value1(kind, text) { - if (kind === 11 /* IdentifierName */) { - return massageEscapes(text); - } - - switch (kind) { - case 37 /* TrueKeyword */: - return true; - case 24 /* FalseKeyword */: - return false; - case 32 /* NullKeyword */: - return null; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return TypeScript.SyntaxFacts.getText(kind); - } - - if (kind === 13 /* NumericLiteral */) { - return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text); - } else if (kind === 14 /* StringLiteral */) { - if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) { - return massageEscapes(text.substr(1, text.length - 2)); - } else { - return massageEscapes(text.substr(1)); - } - } else if (kind === 12 /* RegularExpressionLiteral */) { - return regularExpressionValue(text); - } else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) { - return null; - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - - function regularExpressionValue(text) { - try { - var lastSlash = text.lastIndexOf("/"); - var body = text.substring(1, lastSlash); - var flags = text.substring(lastSlash + 1); - return new RegExp(body, flags); - } catch (e) { - return null; - } - } - - function valueText1(kind, text) { - var value = value1(kind, text); - return value === null ? "" : value.toString(); - } - - function valueText(token) { - var value = token.value(); - return value === null ? "" : value.toString(); - } - Syntax.valueText = valueText; - - var EmptyToken = (function () { - function EmptyToken(kind) { - this.tokenKind = kind; - } - EmptyToken.prototype.clone = function () { - return new EmptyToken(this.tokenKind); - }; - - EmptyToken.prototype.kind = function () { - return this.tokenKind; - }; - - EmptyToken.prototype.isToken = function () { - return true; - }; - EmptyToken.prototype.isNode = function () { - return false; - }; - EmptyToken.prototype.isList = function () { - return false; - }; - EmptyToken.prototype.isSeparatedList = function () { - return false; - }; - - EmptyToken.prototype.childCount = function () { - return 0; - }; - - EmptyToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptyToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - EmptyToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - EmptyToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - EmptyToken.prototype.firstToken = function () { - return this; - }; - EmptyToken.prototype.lastToken = function () { - return this; - }; - EmptyToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptyToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - EmptyToken.prototype.fullWidth = function () { - return 0; - }; - EmptyToken.prototype.width = function () { - return 0; - }; - EmptyToken.prototype.text = function () { - return ""; - }; - EmptyToken.prototype.fullText = function () { - return ""; - }; - EmptyToken.prototype.value = function () { - return null; - }; - EmptyToken.prototype.valueText = function () { - return ""; - }; - - EmptyToken.prototype.hasLeadingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasLeadingComment = function () { - return false; - }; - EmptyToken.prototype.hasLeadingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasLeadingSkippedText = function () { - return false; - }; - EmptyToken.prototype.leadingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.hasTrailingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasTrailingComment = function () { - return false; - }; - EmptyToken.prototype.hasTrailingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasTrailingSkippedText = function () { - return false; - }; - EmptyToken.prototype.hasSkippedToken = function () { - return false; - }; - - EmptyToken.prototype.trailingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.realize = function () { - return realizeToken(this); - }; - EmptyToken.prototype.collectTextElements = function (elements) { - }; - - EmptyToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - EmptyToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - EmptyToken.prototype.isExpression = function () { - return isExpression(this); - }; - - EmptyToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return EmptyToken; - })(); - - function emptyToken(kind) { - return new EmptyToken(kind); - } - Syntax.emptyToken = emptyToken; - - var RealizedToken = (function () { - function RealizedToken(tokenKind, leadingTrivia, text, value, valueText, trailingTrivia) { - this.tokenKind = tokenKind; - this._leadingTrivia = leadingTrivia; - this._text = text; - this._value = value; - this._valueText = valueText; - this._trailingTrivia = trailingTrivia; - } - RealizedToken.prototype.clone = function () { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.kind = function () { - return this.tokenKind; - }; - RealizedToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - RealizedToken.prototype.firstToken = function () { - return this; - }; - RealizedToken.prototype.lastToken = function () { - return this; - }; - RealizedToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - RealizedToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - RealizedToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - RealizedToken.prototype.childCount = function () { - return 0; - }; - - RealizedToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - RealizedToken.prototype.isToken = function () { - return true; - }; - RealizedToken.prototype.isNode = function () { - return false; - }; - RealizedToken.prototype.isList = function () { - return false; - }; - RealizedToken.prototype.isSeparatedList = function () { - return false; - }; - RealizedToken.prototype.isTrivia = function () { - return false; - }; - RealizedToken.prototype.isTriviaList = function () { - return false; - }; - - RealizedToken.prototype.fullWidth = function () { - return this._leadingTrivia.fullWidth() + this.width() + this._trailingTrivia.fullWidth(); - }; - RealizedToken.prototype.width = function () { - return this.text().length; - }; - - RealizedToken.prototype.text = function () { - return this._text; - }; - RealizedToken.prototype.fullText = function () { - return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText(); - }; - - RealizedToken.prototype.value = function () { - return this._value; - }; - RealizedToken.prototype.valueText = function () { - return this._valueText; - }; - - RealizedToken.prototype.hasLeadingTrivia = function () { - return this._leadingTrivia.count() > 0; - }; - RealizedToken.prototype.hasLeadingComment = function () { - return this._leadingTrivia.hasComment(); - }; - RealizedToken.prototype.hasLeadingNewLine = function () { - return this._leadingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasLeadingSkippedText = function () { - return this._leadingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.leadingTriviaWidth = function () { - return this._leadingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasTrailingTrivia = function () { - return this._trailingTrivia.count() > 0; - }; - RealizedToken.prototype.hasTrailingComment = function () { - return this._trailingTrivia.hasComment(); - }; - RealizedToken.prototype.hasTrailingNewLine = function () { - return this._trailingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasTrailingSkippedText = function () { - return this._trailingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.trailingTriviaWidth = function () { - return this._trailingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasSkippedToken = function () { - return this.hasLeadingSkippedText() || this.hasTrailingSkippedText(); - }; - - RealizedToken.prototype.leadingTrivia = function () { - return this._leadingTrivia; - }; - RealizedToken.prototype.trailingTrivia = function () { - return this._trailingTrivia; - }; - - RealizedToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - RealizedToken.prototype.collectTextElements = function (elements) { - this.leadingTrivia().collectTextElements(elements); - elements.push(this.text()); - this.trailingTrivia().collectTextElements(elements); - }; - - RealizedToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return new RealizedToken(this.tokenKind, leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, trailingTrivia); - }; - - RealizedToken.prototype.isExpression = function () { - return isExpression(this); - }; - - RealizedToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return RealizedToken; - })(); - - function token(kind, info) { - if (typeof info === "undefined") { info = null; } - var text = (info !== null && info.text !== undefined) ? info.text : TypeScript.SyntaxFacts.getText(kind); - - return new RealizedToken(kind, Syntax.triviaList(info === null ? null : info.leadingTrivia), text, value1(kind, text), valueText1(kind, text), Syntax.triviaList(info === null ? null : info.trailingTrivia)); - } - Syntax.token = token; - - function identifier(text, info) { - if (typeof info === "undefined") { info = null; } - info = info || {}; - info.text = text; - return token(11 /* IdentifierName */, info); - } - Syntax.identifier = identifier; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTokenReplacer = (function (_super) { - __extends(SyntaxTokenReplacer, _super); - function SyntaxTokenReplacer(token1, token2) { - _super.call(this); - this.token1 = token1; - this.token2 = token2; - } - SyntaxTokenReplacer.prototype.visitToken = function (token) { - if (token === this.token1) { - var result = this.token2; - this.token1 = null; - this.token2 = null; - - return result; - } - - return token; - }; - - SyntaxTokenReplacer.prototype.visitNode = function (node) { - if (this.token1 === null) { - return node; - } - - return _super.prototype.visitNode.call(this, node); - }; - - SyntaxTokenReplacer.prototype.visitList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitList.call(this, list); - }; - - SyntaxTokenReplacer.prototype.visitSeparatedList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitSeparatedList.call(this, list); - }; - return SyntaxTokenReplacer; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxTokenReplacer = SyntaxTokenReplacer; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var AbstractTrivia = (function () { - function AbstractTrivia(_kind) { - this._kind = _kind; - } - AbstractTrivia.prototype.fullWidth = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.fullText = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.toJSON = function (key) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === this._kind) { - result.kind = name; - break; - } - } - - if (this.isSkippedToken()) { - result.skippedToken = this.skippedToken(); - } else { - result.text = this.fullText(); - } - return result; - }; - - AbstractTrivia.prototype.kind = function () { - return this._kind; - }; - - AbstractTrivia.prototype.isWhitespace = function () { - return this.kind() === 4 /* WhitespaceTrivia */; - }; - - AbstractTrivia.prototype.isComment = function () { - return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */; - }; - - AbstractTrivia.prototype.isNewLine = function () { - return this.kind() === 5 /* NewLineTrivia */; - }; - - AbstractTrivia.prototype.isSkippedToken = function () { - return this.kind() === 8 /* SkippedTokenTrivia */; - }; - - AbstractTrivia.prototype.collectTextElements = function (elements) { - elements.push(this.fullText()); - }; - return AbstractTrivia; - })(); - - var NormalTrivia = (function (_super) { - __extends(NormalTrivia, _super); - function NormalTrivia(kind, _text) { - _super.call(this, kind); - this._text = _text; - } - NormalTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - NormalTrivia.prototype.fullText = function () { - return this._text; - }; - - NormalTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return NormalTrivia; - })(AbstractTrivia); - - var SkippedTokenTrivia = (function (_super) { - __extends(SkippedTokenTrivia, _super); - function SkippedTokenTrivia(_skippedToken) { - _super.call(this, 8 /* SkippedTokenTrivia */); - this._skippedToken = _skippedToken; - } - SkippedTokenTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - SkippedTokenTrivia.prototype.fullText = function () { - return this.skippedToken().fullText(); - }; - - SkippedTokenTrivia.prototype.skippedToken = function () { - return this._skippedToken; - }; - return SkippedTokenTrivia; - })(AbstractTrivia); - - var DeferredTrivia = (function (_super) { - __extends(DeferredTrivia, _super); - function DeferredTrivia(kind, _text, _fullStart, _fullWidth) { - _super.call(this, kind); - this._text = _text; - this._fullStart = _fullStart; - this._fullWidth = _fullWidth; - this._fullText = null; - } - DeferredTrivia.prototype.fullWidth = function () { - return this._fullWidth; - }; - - DeferredTrivia.prototype.fullText = function () { - if (!this._fullText) { - this._fullText = this._text.substr(this._fullStart, this._fullWidth, false); - this._text = null; - } - - return this._fullText; - }; - - DeferredTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return DeferredTrivia; - })(AbstractTrivia); - - function deferredTrivia(kind, text, fullStart, fullWidth) { - return new DeferredTrivia(kind, text, fullStart, fullWidth); - } - Syntax.deferredTrivia = deferredTrivia; - - function trivia(kind, text) { - return new NormalTrivia(kind, text); - } - Syntax.trivia = trivia; - - function skippedTokenTrivia(token) { - TypeScript.Debug.assert(!token.hasLeadingTrivia()); - TypeScript.Debug.assert(!token.hasTrailingTrivia()); - TypeScript.Debug.assert(token.fullWidth() > 0); - return new SkippedTokenTrivia(token); - } - Syntax.skippedTokenTrivia = skippedTokenTrivia; - - function spaces(count) { - return trivia(4 /* WhitespaceTrivia */, TypeScript.StringUtilities.repeat(" ", count)); - } - Syntax.spaces = spaces; - - function whitespace(text) { - return trivia(4 /* WhitespaceTrivia */, text); - } - Syntax.whitespace = whitespace; - - function multiLineComment(text) { - return trivia(6 /* MultiLineCommentTrivia */, text); - } - Syntax.multiLineComment = multiLineComment; - - function singleLineComment(text) { - return trivia(7 /* SingleLineCommentTrivia */, text); - } - Syntax.singleLineComment = singleLineComment; - - Syntax.spaceTrivia = spaces(1); - Syntax.lineFeedTrivia = trivia(5 /* NewLineTrivia */, "\n"); - Syntax.carriageReturnTrivia = trivia(5 /* NewLineTrivia */, "\r"); - Syntax.carriageReturnLineFeedTrivia = trivia(5 /* NewLineTrivia */, "\r\n"); - - function splitMultiLineCommentTriviaIntoMultipleLines(trivia) { - var result = []; - - var triviaText = trivia.fullText(); - var currentIndex = 0; - - for (var i = 0; i < triviaText.length; i++) { - var ch = triviaText.charCodeAt(i); - - var isCarriageReturnLineFeed = false; - switch (ch) { - case 13 /* carriageReturn */: - if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) { - i++; - } - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - result.push(triviaText.substring(currentIndex, i + 1)); - - currentIndex = i + 1; - continue; - } - } - - result.push(triviaText.substring(currentIndex)); - return result; - } - Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - Syntax.emptyTriviaList = { - kind: function () { - return 3 /* TriviaList */; - }, - count: function () { - return 0; - }, - syntaxTriviaAt: function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - last: function () { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - fullWidth: function () { - return 0; - }, - fullText: function () { - return ""; - }, - hasComment: function () { - return false; - }, - hasNewLine: function () { - return false; - }, - hasSkippedToken: function () { - return false; - }, - toJSON: function (key) { - return []; - }, - collectTextElements: function (elements) { - }, - toArray: function () { - return []; - }, - concat: function (trivia) { - return trivia; - } - }; - - function concatTrivia(list1, list2) { - if (list1.count() === 0) { - return list2; - } - - if (list2.count() === 0) { - return list1; - } - - var trivia = list1.toArray(); - trivia.push.apply(trivia, list2.toArray()); - - return triviaList(trivia); - } - - function isComment(trivia) { - return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */; - } - - var SingletonSyntaxTriviaList = (function () { - function SingletonSyntaxTriviaList(item) { - this.item = item; - } - SingletonSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - SingletonSyntaxTriviaList.prototype.count = function () { - return 1; - }; - - SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.last = function () { - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxTriviaList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxTriviaList.prototype.hasComment = function () { - return isComment(this.item); - }; - - SingletonSyntaxTriviaList.prototype.hasNewLine = function () { - return this.item.kind() === 5 /* NewLineTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () { - return this.item.kind() === 8 /* SkippedTokenTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxTriviaList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return SingletonSyntaxTriviaList; - })(); - - var NormalSyntaxTriviaList = (function () { - function NormalSyntaxTriviaList(trivia) { - this.trivia = trivia; - } - NormalSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - NormalSyntaxTriviaList.prototype.count = function () { - return this.trivia.length; - }; - - NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index < 0 || index >= this.trivia.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.trivia[index]; - }; - - NormalSyntaxTriviaList.prototype.last = function () { - return this.trivia[this.trivia.length - 1]; - }; - - NormalSyntaxTriviaList.prototype.fullWidth = function () { - return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { - return t.fullWidth(); - }); - }; - - NormalSyntaxTriviaList.prototype.fullText = function () { - var result = ""; - - for (var i = 0, n = this.trivia.length; i < n; i++) { - result += this.trivia[i].fullText(); - } - - return result; - }; - - NormalSyntaxTriviaList.prototype.hasComment = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (isComment(this.trivia[i])) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasNewLine = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 5 /* NewLineTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasSkippedToken = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.toJSON = function (key) { - return this.trivia; - }; - - NormalSyntaxTriviaList.prototype.collectTextElements = function (elements) { - for (var i = 0; i < this.trivia.length; i++) { - this.trivia[i].collectTextElements(elements); - } - }; - - NormalSyntaxTriviaList.prototype.toArray = function () { - return this.trivia.slice(0); - }; - - NormalSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return NormalSyntaxTriviaList; - })(); - - function triviaList(trivia) { - if (trivia === undefined || trivia === null || trivia.length === 0) { - return Syntax.emptyTriviaList; - } - - if (trivia.length === 1) { - return new SingletonSyntaxTriviaList(trivia[0]); - } - - return new NormalSyntaxTriviaList(trivia); - } - Syntax.triviaList = triviaList; - - Syntax.spaceTriviaList = triviaList([Syntax.spaceTrivia]); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxUtilities = (function () { - function SyntaxUtilities() { - } - SyntaxUtilities.isAngleBracket = function (positionedElement) { - var element = positionedElement.element(); - var parent = positionedElement.parentElement(); - if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) { - switch (parent.kind()) { - case 228 /* TypeArgumentList */: - case 229 /* TypeParameterList */: - case 220 /* CastExpression */: - return true; - } - } - - return false; - }; - - SyntaxUtilities.getToken = function (list, kind) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var token = list.childAt(i); - if (token.tokenKind === kind) { - return token; - } - } - - return null; - }; - - SyntaxUtilities.containsToken = function (list, kind) { - return SyntaxUtilities.getToken(list, kind) !== null; - }; - - SyntaxUtilities.hasExportKeyword = function (moduleElement) { - return SyntaxUtilities.getExportKeyword(moduleElement) !== null; - }; - - SyntaxUtilities.getExportKeyword = function (moduleElement) { - switch (moduleElement.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - case 128 /* InterfaceDeclaration */: - case 133 /* ImportDeclaration */: - return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */); - default: - return null; - } - }; - - SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) { - if (!positionNode) { - return false; - } - - var node = positionNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - return true; - } - - case 133 /* ImportDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - if (node.isClassElement() || node.isModuleElement()) { - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - - case 243 /* EnumElement */: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode().containingNode()); - - default: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - }; - return SyntaxUtilities; - })(); - TypeScript.SyntaxUtilities = SyntaxUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxVisitor = (function () { - function SyntaxVisitor() { - } - SyntaxVisitor.prototype.defaultVisit = function (node) { - return null; - }; - - SyntaxVisitor.prototype.visitToken = function (token) { - return this.defaultVisit(token); - }; - - SyntaxVisitor.prototype.visitSourceUnit = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExternalModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleNameModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitImportDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExportAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitClassDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInterfaceDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitHeritageClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclarator = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEqualsValueClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPrefixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitOmittedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitQualifiedName = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGenericType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeQuery = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeAnnotation = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBlock = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPostfixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElementAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInvocationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBinaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConditionalExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMethodSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPropertySignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCallSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstraint = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElseClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIfStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExpressionStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexMemberDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitThrowStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitReturnStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectCreationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSwitchStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCaseSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDefaultSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBreakStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitContinueStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForInStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWhileStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWithStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumElement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCastExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimplePropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEmptyStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTryStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCatchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFinallyClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitLabeledStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDoStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeOfExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDeleteExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVoidExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDebuggerStatement = function (node) { - return this.defaultVisit(node); - }; - return SyntaxVisitor; - })(); - TypeScript.SyntaxVisitor = SyntaxVisitor; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxWalker = (function () { - function SyntaxWalker() { - } - SyntaxWalker.prototype.visitToken = function (token) { - }; - - SyntaxWalker.prototype.visitNode = function (node) { - node.accept(this); - }; - - SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) { - if (nodeOrToken.isToken()) { - this.visitToken(nodeOrToken); - } else { - this.visitNode(nodeOrToken); - } - }; - - SyntaxWalker.prototype.visitOptionalToken = function (token) { - if (token === null) { - return; - } - - this.visitToken(token); - }; - - SyntaxWalker.prototype.visitOptionalNode = function (node) { - if (node === null) { - return; - } - - this.visitNode(node); - }; - - SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) { - if (nodeOrToken === null) { - return; - } - - this.visitNodeOrToken(nodeOrToken); - }; - - SyntaxWalker.prototype.visitList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.visitNodeOrToken(list.childAt(i)); - } - }; - - SyntaxWalker.prototype.visitSeparatedList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - this.visitNodeOrToken(item); - } - }; - - SyntaxWalker.prototype.visitSourceUnit = function (node) { - this.visitList(node.moduleElements); - this.visitToken(node.endOfFileToken); - }; - - SyntaxWalker.prototype.visitExternalModuleReference = function (node) { - this.visitToken(node.requireKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.stringLiteral); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) { - this.visitNodeOrToken(node.moduleName); - }; - - SyntaxWalker.prototype.visitImportDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.importKeyword); - this.visitToken(node.identifier); - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.moduleReference); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitExportAssignment = function (node) { - this.visitToken(node.exportKeyword); - this.visitToken(node.equalsToken); - this.visitToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitClassDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.classKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitToken(node.openBraceToken); - this.visitList(node.classElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.interfaceKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitNode(node.body); - }; - - SyntaxWalker.prototype.visitHeritageClause = function (node) { - this.visitToken(node.extendsOrImplementsKeyword); - this.visitSeparatedList(node.typeNames); - }; - - SyntaxWalker.prototype.visitModuleDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.moduleKeyword); - this.visitOptionalNodeOrToken(node.name); - this.visitOptionalToken(node.stringLiteral); - this.visitToken(node.openBraceToken); - this.visitList(node.moduleElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.functionKeyword); - this.visitToken(node.identifier); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableStatement = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclaration); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableDeclaration = function (node) { - this.visitToken(node.varKeyword); - this.visitSeparatedList(node.variableDeclarators); - }; - - SyntaxWalker.prototype.visitVariableDeclarator = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitEqualsValueClause = function (node) { - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.value); - }; - - SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) { - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.operand); - }; - - SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) { - this.visitToken(node.openBracketToken); - this.visitSeparatedList(node.expressions); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitOmittedExpression = function (node) { - }; - - SyntaxWalker.prototype.visitParenthesizedExpression = function (node) { - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - this.visitNode(node.callSignature); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitQualifiedName = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.dotToken); - this.visitToken(node.right); - }; - - SyntaxWalker.prototype.visitTypeArgumentList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeArguments); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitConstructorType = function (node) { - this.visitToken(node.newKeyword); - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitFunctionType = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitObjectType = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.typeMembers); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitArrayType = function (node) { - this.visitNodeOrToken(node.type); - this.visitToken(node.openBracketToken); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitGenericType = function (node) { - this.visitNodeOrToken(node.name); - this.visitNode(node.typeArgumentList); - }; - - SyntaxWalker.prototype.visitTypeQuery = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.name); - }; - - SyntaxWalker.prototype.visitTypeAnnotation = function (node) { - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitBlock = function (node) { - this.visitToken(node.openBraceToken); - this.visitList(node.statements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitParameter = function (node) { - this.visitOptionalToken(node.dotDotDotToken); - this.visitList(node.modifiers); - this.visitToken(node.identifier); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitMemberAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.dotToken); - this.visitToken(node.name); - }; - - SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) { - this.visitNodeOrToken(node.operand); - this.visitToken(node.operatorToken); - }; - - SyntaxWalker.prototype.visitElementAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.openBracketToken); - this.visitNodeOrToken(node.argumentExpression); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitInvocationExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitArgumentList = function (node) { - this.visitOptionalNode(node.typeArgumentList); - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.arguments); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitBinaryExpression = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.right); - }; - - SyntaxWalker.prototype.visitConditionalExpression = function (node) { - this.visitNodeOrToken(node.condition); - this.visitToken(node.questionToken); - this.visitNodeOrToken(node.whenTrue); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.whenFalse); - }; - - SyntaxWalker.prototype.visitConstructSignature = function (node) { - this.visitToken(node.newKeyword); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitMethodSignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitIndexSignature = function (node) { - this.visitToken(node.openBracketToken); - this.visitNode(node.parameter); - this.visitToken(node.closeBracketToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitPropertySignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitCallSignature = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitParameterList = function (node) { - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.parameters); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitTypeParameterList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeParameters); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitTypeParameter = function (node) { - this.visitToken(node.identifier); - this.visitOptionalNode(node.constraint); - }; - - SyntaxWalker.prototype.visitConstraint = function (node) { - this.visitToken(node.extendsKeyword); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitElseClause = function (node) { - this.visitToken(node.elseKeyword); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitIfStatement = function (node) { - this.visitToken(node.ifKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - this.visitOptionalNode(node.elseClause); - }; - - SyntaxWalker.prototype.visitExpressionStatement = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitConstructorDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.constructorKeyword); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitGetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.getKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitSetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.setKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclarator); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.indexSignature); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitThrowStatement = function (node) { - this.visitToken(node.throwKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitReturnStatement = function (node) { - this.visitToken(node.returnKeyword); - this.visitOptionalNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitObjectCreationExpression = function (node) { - this.visitToken(node.newKeyword); - this.visitNodeOrToken(node.expression); - this.visitOptionalNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitSwitchStatement = function (node) { - this.visitToken(node.switchKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitToken(node.openBraceToken); - this.visitList(node.switchClauses); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitCaseSwitchClause = function (node) { - this.visitToken(node.caseKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) { - this.visitToken(node.defaultKeyword); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitBreakStatement = function (node) { - this.visitToken(node.breakKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitContinueStatement = function (node) { - this.visitToken(node.continueKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitForStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.initializer); - this.visitToken(node.firstSemicolonToken); - this.visitOptionalNodeOrToken(node.condition); - this.visitToken(node.secondSemicolonToken); - this.visitOptionalNodeOrToken(node.incrementor); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitForInStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.left); - this.visitToken(node.inKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWhileStatement = function (node) { - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWithStatement = function (node) { - this.visitToken(node.withKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitEnumDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.enumKeyword); - this.visitToken(node.identifier); - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.enumElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitEnumElement = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitCastExpression = function (node) { - this.visitToken(node.lessThanToken); - this.visitNodeOrToken(node.type); - this.visitToken(node.greaterThanToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.propertyAssignments); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFunctionExpression = function (node) { - this.visitToken(node.functionKeyword); - this.visitOptionalToken(node.identifier); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitEmptyStatement = function (node) { - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTryStatement = function (node) { - this.visitToken(node.tryKeyword); - this.visitNode(node.block); - this.visitOptionalNode(node.catchClause); - this.visitOptionalNode(node.finallyClause); - }; - - SyntaxWalker.prototype.visitCatchClause = function (node) { - this.visitToken(node.catchKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeAnnotation); - this.visitToken(node.closeParenToken); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFinallyClause = function (node) { - this.visitToken(node.finallyKeyword); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitLabeledStatement = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitDoStatement = function (node) { - this.visitToken(node.doKeyword); - this.visitNodeOrToken(node.statement); - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTypeOfExpression = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDeleteExpression = function (node) { - this.visitToken(node.deleteKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitVoidExpression = function (node) { - this.visitToken(node.voidKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDebuggerStatement = function (node) { - this.visitToken(node.debuggerKeyword); - this.visitToken(node.semicolonToken); - }; - return SyntaxWalker; - })(); - TypeScript.SyntaxWalker = SyntaxWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionTrackingWalker = (function (_super) { - __extends(PositionTrackingWalker, _super); - function PositionTrackingWalker() { - _super.apply(this, arguments); - this._position = 0; - } - PositionTrackingWalker.prototype.visitToken = function (token) { - this._position += token.fullWidth(); - }; - - PositionTrackingWalker.prototype.position = function () { - return this._position; - }; - - PositionTrackingWalker.prototype.skip = function (element) { - this._position += element.fullWidth(); - }; - return PositionTrackingWalker; - })(TypeScript.SyntaxWalker); - TypeScript.PositionTrackingWalker = PositionTrackingWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxInformationMap = (function (_super) { - __extends(SyntaxInformationMap, _super); - function SyntaxInformationMap(trackParents, trackPreviousToken) { - _super.call(this); - this.trackParents = trackParents; - this.trackPreviousToken = trackPreviousToken; - this.tokenToInformation = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this.elementToPosition = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._previousToken = null; - this._previousTokenInformation = null; - this._currentPosition = 0; - this._elementToParent = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._parentStack = []; - this._parentStack.push(null); - } - SyntaxInformationMap.create = function (node, trackParents, trackPreviousToken) { - var map = new SyntaxInformationMap(trackParents, trackPreviousToken); - map.visitNode(node); - return map; - }; - - SyntaxInformationMap.prototype.visitNode = function (node) { - this.trackParents && this._elementToParent.add(node, TypeScript.ArrayUtilities.last(this._parentStack)); - this.elementToPosition.add(node, this._currentPosition); - - this.trackParents && this._parentStack.push(node); - _super.prototype.visitNode.call(this, node); - this.trackParents && this._parentStack.pop(); - }; - - SyntaxInformationMap.prototype.visitToken = function (token) { - this.trackParents && this._elementToParent.add(token, TypeScript.ArrayUtilities.last(this._parentStack)); - - if (this.trackPreviousToken) { - var tokenInformation = { - previousToken: this._previousToken, - nextToken: null - }; - - if (this._previousTokenInformation !== null) { - this._previousTokenInformation.nextToken = token; - } - - this._previousToken = token; - this._previousTokenInformation = tokenInformation; - - this.tokenToInformation.add(token, tokenInformation); - } - - this.elementToPosition.add(token, this._currentPosition); - this._currentPosition += token.fullWidth(); - }; - - SyntaxInformationMap.prototype.parent = function (element) { - return this._elementToParent.get(element); - }; - - SyntaxInformationMap.prototype.fullStart = function (element) { - return this.elementToPosition.get(element); - }; - - SyntaxInformationMap.prototype.start = function (element) { - return this.fullStart(element) + element.leadingTriviaWidth(); - }; - - SyntaxInformationMap.prototype.end = function (element) { - return this.start(element) + element.width(); - }; - - SyntaxInformationMap.prototype.previousToken = function (token) { - return this.tokenInformation(token).previousToken; - }; - - SyntaxInformationMap.prototype.tokenInformation = function (token) { - return this.tokenToInformation.get(token); - }; - - SyntaxInformationMap.prototype.firstTokenInLineContainingToken = function (token) { - var current = token; - while (true) { - var information = this.tokenInformation(current); - if (this.isFirstTokenInLineWorker(information)) { - break; - } - - current = information.previousToken; - } - - return current; - }; - - SyntaxInformationMap.prototype.isFirstTokenInLine = function (token) { - var information = this.tokenInformation(token); - return this.isFirstTokenInLineWorker(information); - }; - - SyntaxInformationMap.prototype.isFirstTokenInLineWorker = function (information) { - return information.previousToken === null || information.previousToken.hasTrailingNewLine(); - }; - return SyntaxInformationMap; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxInformationMap = SyntaxInformationMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNodeInvariantsChecker = (function (_super) { - __extends(SyntaxNodeInvariantsChecker, _super); - function SyntaxNodeInvariantsChecker() { - _super.apply(this, arguments); - this.tokenTable = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - } - SyntaxNodeInvariantsChecker.checkInvariants = function (node) { - node.accept(new SyntaxNodeInvariantsChecker()); - }; - - SyntaxNodeInvariantsChecker.prototype.visitToken = function (token) { - this.tokenTable.add(token, token); - }; - return SyntaxNodeInvariantsChecker; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxNodeInvariantsChecker = SyntaxNodeInvariantsChecker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DepthLimitedWalker = (function (_super) { - __extends(DepthLimitedWalker, _super); - function DepthLimitedWalker(maximumDepth) { - _super.call(this); - this._depth = 0; - this._maximumDepth = 0; - this._maximumDepth = maximumDepth; - } - DepthLimitedWalker.prototype.visitNode = function (node) { - if (this._depth < this._maximumDepth) { - this._depth++; - _super.prototype.visitNode.call(this, node); - this._depth--; - } else { - this.skip(node); - } - }; - return DepthLimitedWalker; - })(TypeScript.PositionTrackingWalker); - TypeScript.DepthLimitedWalker = DepthLimitedWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Parser) { - - - var ExpressionPrecedence; - (function (ExpressionPrecedence) { - ExpressionPrecedence[ExpressionPrecedence["CommaExpressionPrecedence"] = 1] = "CommaExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["AssignmentExpressionPrecedence"] = 2] = "AssignmentExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ConditionalExpressionPrecedence"] = 3] = "ConditionalExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ArrowFunctionPrecedence"] = 4] = "ArrowFunctionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["LogicalOrExpressionPrecedence"] = 5] = "LogicalOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["LogicalAndExpressionPrecedence"] = 6] = "LogicalAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 7] = "BitwiseOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 8] = "BitwiseExclusiveOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 9] = "BitwiseAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["EqualityExpressionPrecedence"] = 10] = "EqualityExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["RelationalExpressionPrecedence"] = 11] = "RelationalExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["ShiftExpressionPrecdence"] = 12] = "ShiftExpressionPrecdence"; - ExpressionPrecedence[ExpressionPrecedence["AdditiveExpressionPrecedence"] = 13] = "AdditiveExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 14] = "MultiplicativeExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["UnaryExpressionPrecedence"] = 15] = "UnaryExpressionPrecedence"; - })(ExpressionPrecedence || (ExpressionPrecedence = {})); - - var ListParsingState; - (function (ListParsingState) { - ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 1 << 0] = "SourceUnit_ModuleElements"; - ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1 << 1] = "ClassDeclaration_ClassElements"; - ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 1 << 2] = "ModuleDeclaration_ModuleElements"; - ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 1 << 3] = "SwitchStatement_SwitchClauses"; - ListParsingState[ListParsingState["SwitchClause_Statements"] = 1 << 4] = "SwitchClause_Statements"; - ListParsingState[ListParsingState["Block_Statements"] = 1 << 5] = "Block_Statements"; - ListParsingState[ListParsingState["TryBlock_Statements"] = 1 << 6] = "TryBlock_Statements"; - ListParsingState[ListParsingState["CatchBlock_Statements"] = 1 << 7] = "CatchBlock_Statements"; - ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 1 << 8] = "EnumDeclaration_EnumElements"; - ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 1 << 9] = "ObjectType_TypeMembers"; - ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 1 << 10] = "ClassOrInterfaceDeclaration_HeritageClauses"; - ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 1 << 11] = "HeritageClause_TypeNameList"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 1 << 12] = "VariableDeclaration_VariableDeclarators_AllowIn"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 1 << 13] = "VariableDeclaration_VariableDeclarators_DisallowIn"; - ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 1 << 14] = "ArgumentList_AssignmentExpressions"; - ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 1 << 15] = "ObjectLiteralExpression_PropertyAssignments"; - ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 1 << 16] = "ArrayLiteralExpression_AssignmentExpressions"; - ListParsingState[ListParsingState["ParameterList_Parameters"] = 1 << 17] = "ParameterList_Parameters"; - ListParsingState[ListParsingState["TypeArgumentList_Types"] = 1 << 18] = "TypeArgumentList_Types"; - ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 1 << 19] = "TypeParameterList_TypeParameters"; - - ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState"; - ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState"; - })(ListParsingState || (ListParsingState = {})); - - var SyntaxCursor = (function () { - function SyntaxCursor(sourceUnit) { - this._elements = []; - this._index = 0; - this._pinCount = 0; - sourceUnit.insertChildrenInto(this._elements, 0); - } - SyntaxCursor.prototype.isFinished = function () { - return this._index === this._elements.length; - }; - - SyntaxCursor.prototype.currentElement = function () { - if (this.isFinished()) { - return null; - } - - return this._elements[this._index]; - }; - - SyntaxCursor.prototype.currentNode = function () { - var element = this.currentElement(); - return element !== null && element.isNode() ? element : null; - }; - - SyntaxCursor.prototype.moveToFirstChild = function () { - if (this.isFinished()) { - return; - } - - var element = this._elements[this._index]; - if (element.isToken()) { - return; - } - - var node = element; - - this._elements.splice(this._index, 1); - - node.insertChildrenInto(this._elements, this._index); - }; - - SyntaxCursor.prototype.moveToNextSibling = function () { - if (this.isFinished()) { - return; - } - - if (this._pinCount > 0) { - this._index++; - return; - } - - this._elements.shift(); - }; - - SyntaxCursor.prototype.getAndPinCursorIndex = function () { - this._pinCount++; - return this._index; - }; - - SyntaxCursor.prototype.releaseAndUnpinCursorIndex = function (index) { - this._pinCount--; - if (this._pinCount === 0) { - } - }; - - SyntaxCursor.prototype.rewindToPinnedCursorIndex = function (index) { - this._index = index; - }; - - SyntaxCursor.prototype.pinCount = function () { - return this._pinCount; - }; - - SyntaxCursor.prototype.moveToFirstToken = function () { - var element; - - while (!this.isFinished()) { - element = this.currentElement(); - if (element.isNode()) { - this.moveToFirstChild(); - continue; - } - - return; - } - }; - - SyntaxCursor.prototype.currentToken = function () { - this.moveToFirstToken(); - if (this.isFinished()) { - return null; - } - - var element = this.currentElement(); - - return element; - }; - - SyntaxCursor.prototype.peekToken = function (n) { - this.moveToFirstToken(); - var pin = this.getAndPinCursorIndex(); - - for (var i = 0; i < n; i++) { - this.moveToNextSibling(); - this.moveToFirstToken(); - } - - var result = this.currentToken(); - this.rewindToPinnedCursorIndex(pin); - this.releaseAndUnpinCursorIndex(pin); - - return result; - }; - return SyntaxCursor; - })(); - - - - var NormalParserSource = (function () { - function NormalParserSource(fileName, text, languageVersion) { - this._previousToken = null; - this._absolutePosition = 0; - this._tokenDiagnostics = []; - this.rewindPointPool = []; - this.rewindPointPoolCount = 0; - this.slidingWindow = new TypeScript.SlidingWindow(this, TypeScript.ArrayUtilities.createArray(32, null), null); - this.scanner = new TypeScript.Scanner(fileName, text, languageVersion); - } - NormalParserSource.prototype.currentNode = function () { - return null; - }; - - NormalParserSource.prototype.moveToNextNode = function () { - throw TypeScript.Errors.invalidOperation(); - }; - - NormalParserSource.prototype.absolutePosition = function () { - return this._absolutePosition; - }; - - NormalParserSource.prototype.previousToken = function () { - return this._previousToken; - }; - - NormalParserSource.prototype.tokenDiagnostics = function () { - return this._tokenDiagnostics; - }; - - NormalParserSource.prototype.getOrCreateRewindPoint = function () { - if (this.rewindPointPoolCount === 0) { - return {}; - } - - this.rewindPointPoolCount--; - var result = this.rewindPointPool[this.rewindPointPoolCount]; - this.rewindPointPool[this.rewindPointPoolCount] = null; - return result; - }; - - NormalParserSource.prototype.getRewindPoint = function () { - var slidingWindowIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var rewindPoint = this.getOrCreateRewindPoint(); - - rewindPoint.slidingWindowIndex = slidingWindowIndex; - rewindPoint.previousToken = this._previousToken; - rewindPoint.absolutePosition = this._absolutePosition; - - rewindPoint.pinCount = this.slidingWindow.pinCount(); - - return rewindPoint; - }; - - NormalParserSource.prototype.isPinned = function () { - return this.slidingWindow.pinCount() > 0; - }; - - NormalParserSource.prototype.rewind = function (rewindPoint) { - this.slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); - - this._previousToken = rewindPoint.previousToken; - this._absolutePosition = rewindPoint.absolutePosition; - }; - - NormalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex); - - this.rewindPointPool[this.rewindPointPoolCount] = rewindPoint; - this.rewindPointPoolCount++; - }; - - NormalParserSource.prototype.fetchMoreItems = function (allowRegularExpression, sourceIndex, window, destinationIndex, spaceAvailable) { - window[destinationIndex] = this.scanner.scan(this._tokenDiagnostics, allowRegularExpression); - return 1; - }; - - NormalParserSource.prototype.peekToken = function (n) { - return this.slidingWindow.peekItemN(n); - }; - - NormalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - this._absolutePosition += currentToken.fullWidth(); - this._previousToken = currentToken; - - this.slidingWindow.moveToNextItem(); - }; - - NormalParserSource.prototype.currentToken = function () { - return this.slidingWindow.currentItem(false); - }; - - NormalParserSource.prototype.removeDiagnosticsOnOrAfterPosition = function (position) { - var tokenDiagnosticsLength = this._tokenDiagnostics.length; - while (tokenDiagnosticsLength > 0) { - var diagnostic = this._tokenDiagnostics[tokenDiagnosticsLength - 1]; - if (diagnostic.start() >= position) { - tokenDiagnosticsLength--; - } else { - break; - } - } - - this._tokenDiagnostics.length = tokenDiagnosticsLength; - }; - - NormalParserSource.prototype.resetToPosition = function (absolutePosition, previousToken) { - this._absolutePosition = absolutePosition; - this._previousToken = previousToken; - - this.removeDiagnosticsOnOrAfterPosition(absolutePosition); - - this.slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); - - this.scanner.setAbsoluteIndex(absolutePosition); - }; - - NormalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - this.resetToPosition(this._absolutePosition, this._previousToken); - - var token = this.slidingWindow.currentItem(true); - - return token; - }; - return NormalParserSource; - })(); - - var IncrementalParserSource = (function () { - function IncrementalParserSource(oldSyntaxTree, textChangeRange, newText) { - this._changeDelta = 0; - var oldSourceUnit = oldSyntaxTree.sourceUnit(); - this._oldSourceUnitCursor = new SyntaxCursor(oldSourceUnit); - - this._changeRange = IncrementalParserSource.extendToAffectedRange(textChangeRange, oldSourceUnit); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert((oldSourceUnit.fullWidth() - this._changeRange.span().length() + this._changeRange.newLength()) === newText.length()); - } - - this._normalParserSource = new NormalParserSource(oldSyntaxTree.fileName(), newText, oldSyntaxTree.parseOptions().languageVersion()); - } - IncrementalParserSource.extendToAffectedRange = function (changeRange, sourceUnit) { - var maxLookahead = 1; - - var start = changeRange.span().start(); - - for (var i = 0; start > 0 && i <= maxLookahead; i++) { - var token = sourceUnit.findToken(start); - - var position = token.fullStart(); - - start = TypeScript.MathPrototype.max(0, position - 1); - } - - var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end()); - var finalLength = changeRange.newLength() + (changeRange.span().start() - start); - - return new TypeScript.TextChangeRange(finalSpan, finalLength); - }; - - IncrementalParserSource.prototype.absolutePosition = function () { - return this._normalParserSource.absolutePosition(); - }; - - IncrementalParserSource.prototype.previousToken = function () { - return this._normalParserSource.previousToken(); - }; - - IncrementalParserSource.prototype.tokenDiagnostics = function () { - return this._normalParserSource.tokenDiagnostics(); - }; - - IncrementalParserSource.prototype.getRewindPoint = function () { - var rewindPoint = this._normalParserSource.getRewindPoint(); - var oldSourceUnitCursorIndex = this._oldSourceUnitCursor.getAndPinCursorIndex(); - - rewindPoint.changeDelta = this._changeDelta; - rewindPoint.changeRange = this._changeRange; - rewindPoint.oldSourceUnitCursorIndex = oldSourceUnitCursorIndex; - - return rewindPoint; - }; - - IncrementalParserSource.prototype.rewind = function (rewindPoint) { - this._changeRange = rewindPoint.changeRange; - this._changeDelta = rewindPoint.changeDelta; - this._oldSourceUnitCursor.rewindToPinnedCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - - this._normalParserSource.rewind(rewindPoint); - }; - - IncrementalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this._oldSourceUnitCursor.releaseAndUnpinCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - this._normalParserSource.releaseRewindPoint(rewindPoint); - }; - - IncrementalParserSource.prototype.canReadFromOldSourceUnit = function () { - if (this._normalParserSource.isPinned()) { - return false; - } - - if (this._changeRange !== null && this._changeRange.newSpan().intersectsWithPosition(this.absolutePosition())) { - return false; - } - - this.syncCursorToNewTextIfBehind(); - - return this._changeDelta === 0 && !this._oldSourceUnitCursor.isFinished(); - }; - - IncrementalParserSource.prototype.currentNode = function () { - if (this.canReadFromOldSourceUnit()) { - return this.tryGetNodeFromOldSourceUnit(); - } - - return null; - }; - - IncrementalParserSource.prototype.currentToken = function () { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryGetTokenFromOldSourceUnit(); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.currentToken(); - }; - - IncrementalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - return this._normalParserSource.currentTokenAllowingRegularExpression(); - }; - - IncrementalParserSource.prototype.syncCursorToNewTextIfBehind = function () { - while (true) { - if (this._oldSourceUnitCursor.isFinished()) { - break; - } - - if (this._changeDelta >= 0) { - break; - } - - var currentElement = this._oldSourceUnitCursor.currentElement(); - - if (currentElement.isNode() && (currentElement.fullWidth() > Math.abs(this._changeDelta))) { - this._oldSourceUnitCursor.moveToFirstChild(); - } else { - this._oldSourceUnitCursor.moveToNextSibling(); - - this._changeDelta += currentElement.fullWidth(); - } - } - }; - - IncrementalParserSource.prototype.intersectsWithChangeRangeSpanInOriginalText = function (start, length) { - return this._changeRange !== null && this._changeRange.span().intersectsWith(start, length); - }; - - IncrementalParserSource.prototype.tryGetNodeFromOldSourceUnit = function () { - while (true) { - var node = this._oldSourceUnitCursor.currentNode(); - if (node === null) { - return null; - } - - if (!this.intersectsWithChangeRangeSpanInOriginalText(this.absolutePosition(), node.fullWidth())) { - if (!node.isIncrementallyUnusable()) { - return node; - } - } - - this._oldSourceUnitCursor.moveToFirstChild(); - } - }; - - IncrementalParserSource.prototype.canReuseTokenFromOldSourceUnit = function (position, token) { - if (token !== null) { - if (!this.intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { - if (!token.isIncrementallyUnusable()) { - return true; - } - } - } - - return false; - }; - - IncrementalParserSource.prototype.tryGetTokenFromOldSourceUnit = function () { - var token = this._oldSourceUnitCursor.currentToken(); - - return this.canReuseTokenFromOldSourceUnit(this.absolutePosition(), token) ? token : null; - }; - - IncrementalParserSource.prototype.peekToken = function (n) { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryPeekTokenFromOldSourceUnit(n); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.peekToken(n); - }; - - IncrementalParserSource.prototype.tryPeekTokenFromOldSourceUnit = function (n) { - var currentPosition = this.absolutePosition(); - for (var i = 0; i < n; i++) { - var interimToken = this._oldSourceUnitCursor.peekToken(i); - if (!this.canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { - return null; - } - - currentPosition += interimToken.fullWidth(); - } - - var token = this._oldSourceUnitCursor.peekToken(n); - return this.canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null; - }; - - IncrementalParserSource.prototype.moveToNextNode = function () { - var currentElement = this._oldSourceUnitCursor.currentElement(); - var currentNode = this._oldSourceUnitCursor.currentNode(); - - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentNode.fullWidth(); - var previousToken = currentNode.lastToken(); - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - }; - - IncrementalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - - if (this._oldSourceUnitCursor.currentToken() === currentToken) { - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentToken.fullWidth(); - var previousToken = currentToken; - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - } else { - this._changeDelta -= currentToken.fullWidth(); - - this._normalParserSource.moveToNextToken(); - - if (this._changeRange !== null) { - var changeRangeSpanInNewText = this._changeRange.newSpan(); - if (this.absolutePosition() >= changeRangeSpanInNewText.end()) { - this._changeDelta += this._changeRange.newLength() - this._changeRange.span().length(); - this._changeRange = null; - } - } - } - }; - return IncrementalParserSource; - })(); - - var ParserImpl = (function () { - function ParserImpl(fileName, lineMap, source, parseOptions, newText_forDebuggingPurposesOnly) { - this.newText_forDebuggingPurposesOnly = newText_forDebuggingPurposesOnly; - this.listParsingState = 0; - this.isInStrictMode = false; - this.diagnostics = []; - this.factory = TypeScript.Syntax.normalModeFactory; - this.mergeTokensStorage = []; - this.arrayPool = []; - this.fileName = fileName; - this.lineMap = lineMap; - this.source = source; - this.parseOptions = parseOptions; - } - ParserImpl.prototype.getRewindPoint = function () { - var rewindPoint = this.source.getRewindPoint(); - - rewindPoint.diagnosticsCount = this.diagnostics.length; - - rewindPoint.isInStrictMode = this.isInStrictMode; - rewindPoint.listParsingState = this.listParsingState; - - return rewindPoint; - }; - - ParserImpl.prototype.rewind = function (rewindPoint) { - this.source.rewind(rewindPoint); - - this.diagnostics.length = rewindPoint.diagnosticsCount; - }; - - ParserImpl.prototype.releaseRewindPoint = function (rewindPoint) { - this.source.releaseRewindPoint(rewindPoint); - }; - - ParserImpl.prototype.currentTokenStart = function () { - return this.source.absolutePosition() + this.currentToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenStart = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.source.absolutePosition() - this.previousToken().fullWidth() + this.previousToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenEnd = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.previousTokenStart() + this.previousToken().width(); - }; - - ParserImpl.prototype.currentNode = function () { - var node = this.source.currentNode(); - - if (node === null || node.parsedInStrictMode() !== this.isInStrictMode) { - return null; - } - - return node; - }; - - ParserImpl.prototype.currentToken = function () { - return this.source.currentToken(); - }; - - ParserImpl.prototype.currentTokenAllowingRegularExpression = function () { - return this.source.currentTokenAllowingRegularExpression(); - }; - - ParserImpl.prototype.peekToken = function (n) { - return this.source.peekToken(n); - }; - - ParserImpl.prototype.eatAnyToken = function () { - var token = this.currentToken(); - this.moveToNextToken(); - return token; - }; - - ParserImpl.prototype.moveToNextToken = function () { - this.source.moveToNextToken(); - }; - - ParserImpl.prototype.previousToken = function () { - return this.source.previousToken(); - }; - - ParserImpl.prototype.eatNode = function () { - var node = this.source.currentNode(); - this.source.moveToNextNode(); - return node; - }; - - ParserImpl.prototype.eatToken = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.tryEatToken = function (kind) { - if (this.currentToken().tokenKind === kind) { - return this.eatToken(kind); - } - - return null; - }; - - ParserImpl.prototype.eatKeyword = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.isIdentifier = function (token) { - var tokenKind = token.tokenKind; - - if (tokenKind === 11 /* IdentifierName */) { - return true; - } - - if (tokenKind >= 51 /* FirstFutureReservedStrictKeyword */) { - if (tokenKind <= 59 /* LastFutureReservedStrictKeyword */) { - return !this.isInStrictMode; - } - - return tokenKind <= 69 /* LastTypeScriptKeyword */; - } - - return false; - }; - - ParserImpl.prototype.eatIdentifierNameToken = function () { - var token = this.currentToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - this.moveToNextToken(); - return token; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)) { - this.moveToNextToken(); - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.eatIdentifierToken = function () { - var token = this.currentToken(); - if (this.isIdentifier(token)) { - this.moveToNextToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - return token; - } - - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.canEatAutomaticSemicolon = function (allowWithoutNewLine) { - var token = this.currentToken(); - - if (token.tokenKind === 10 /* EndOfFileToken */) { - return true; - } - - if (token.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - if (allowWithoutNewLine) { - return true; - } - - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.canEatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return true; - } - - return this.canEatAutomaticSemicolon(allowWithoutNewline); - }; - - ParserImpl.prototype.eatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return this.eatToken(78 /* SemicolonToken */); - } - - if (this.canEatAutomaticSemicolon(allowWithoutNewline)) { - var semicolonToken = TypeScript.Syntax.emptyToken(78 /* SemicolonToken */); - - if (!this.parseOptions.allowAutomaticSemicolonInsertion()) { - this.addDiagnostic(new TypeScript.Diagnostic(this.fileName, this.lineMap, this.previousTokenEnd(), 0, TypeScript.DiagnosticCode.Automatic_semicolon_insertion_not_allowed, null)); - } - - return semicolonToken; - } - - return this.eatToken(78 /* SemicolonToken */); - }; - - ParserImpl.prototype.isKeyword = function (kind) { - if (kind >= 15 /* FirstKeyword */) { - if (kind <= 50 /* LastFutureReservedKeyword */) { - return true; - } - - if (this.isInStrictMode) { - return kind <= 59 /* LastFutureReservedStrictKeyword */; - } - } - - return false; - }; - - ParserImpl.prototype.createMissingToken = function (expectedKind, actual) { - var diagnostic = this.getExpectedTokenDiagnostic(expectedKind, actual); - this.addDiagnostic(diagnostic); - - return TypeScript.Syntax.emptyToken(expectedKind); - }; - - ParserImpl.prototype.getExpectedTokenDiagnostic = function (expectedKind, actual) { - var token = this.currentToken(); - - if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(expectedKind)]); - } else { - if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.tokenKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword, [TypeScript.SyntaxFacts.getText(actual.tokenKind)]); - } else { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected, null); - } - } - }; - - ParserImpl.getPrecedence = function (expressionKind) { - switch (expressionKind) { - case 173 /* CommaExpression */: - return 1 /* CommaExpressionPrecedence */; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 2 /* AssignmentExpressionPrecedence */; - - case 186 /* ConditionalExpression */: - return 3 /* ConditionalExpressionPrecedence */; - - case 187 /* LogicalOrExpression */: - return 5 /* LogicalOrExpressionPrecedence */; - - case 188 /* LogicalAndExpression */: - return 6 /* LogicalAndExpressionPrecedence */; - - case 189 /* BitwiseOrExpression */: - return 7 /* BitwiseOrExpressionPrecedence */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 8 /* BitwiseExclusiveOrExpressionPrecedence */; - - case 191 /* BitwiseAndExpression */: - return 9 /* BitwiseAndExpressionPrecedence */; - - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - return 10 /* EqualityExpressionPrecedence */; - - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - return 11 /* RelationalExpressionPrecedence */; - - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - return 12 /* ShiftExpressionPrecdence */; - - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return 13 /* AdditiveExpressionPrecedence */; - - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - return 14 /* MultiplicativeExpressionPrecedence */; - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 167 /* LogicalNotExpression */: - case 170 /* DeleteExpression */: - case 171 /* TypeOfExpression */: - case 172 /* VoidExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return 15 /* UnaryExpressionPrecedence */; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - ParserImpl.prototype.addSkippedTokenAfterNodeOrToken = function (nodeOrToken, skippedToken) { - if (nodeOrToken.isToken()) { - return this.addSkippedTokenAfterToken(nodeOrToken, skippedToken); - } else if (nodeOrToken.isNode()) { - return this.addSkippedTokenAfterNode(nodeOrToken, skippedToken); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.addSkippedTokenAfterNode = function (node, skippedToken) { - var oldToken = node.lastToken(); - var newToken = this.addSkippedTokenAfterToken(oldToken, skippedToken); - - return node.replaceToken(oldToken, newToken); - }; - - ParserImpl.prototype.addSkippedTokensBeforeNode = function (node, skippedTokens) { - if (skippedTokens.length > 0) { - var oldToken = node.firstToken(); - var newToken = this.addSkippedTokensBeforeToken(oldToken, skippedTokens); - - return node.replaceToken(oldToken, newToken); - } - - return node; - }; - - ParserImpl.prototype.addSkippedTokensBeforeToken = function (token, skippedTokens) { - var leadingTrivia = []; - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(leadingTrivia, skippedTokens[i]); - } - - this.addTriviaTo(token.leadingTrivia(), leadingTrivia); - - this.returnArray(skippedTokens); - return token.withLeadingTrivia(TypeScript.Syntax.triviaList(leadingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokensAfterToken = function (token, skippedTokens) { - if (skippedTokens.length === 0) { - this.returnArray(skippedTokens); - return token; - } - - var trailingTrivia = token.trailingTrivia().toArray(); - - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]); - } - - this.returnArray(skippedTokens); - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenAfterToken = function (token, skippedToken) { - var trailingTrivia = token.trailingTrivia().toArray(); - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedToken); - - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenToTriviaArray = function (array, skippedToken) { - this.addTriviaTo(skippedToken.leadingTrivia(), array); - - var trimmedToken = skippedToken.withLeadingTrivia(TypeScript.Syntax.emptyTriviaList).withTrailingTrivia(TypeScript.Syntax.emptyTriviaList); - array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken)); - - this.addTriviaTo(skippedToken.trailingTrivia(), array); - }; - - ParserImpl.prototype.addTriviaTo = function (list, array) { - for (var i = 0, n = list.count(); i < n; i++) { - array.push(list.syntaxTriviaAt(i)); - } - }; - - ParserImpl.prototype.parseSyntaxTree = function (isDeclaration) { - var sourceUnit = this.parseSourceUnit(); - - var allDiagnostics = this.source.tokenDiagnostics().concat(this.diagnostics); - allDiagnostics.sort(function (a, b) { - return a.start() - b.start(); - }); - - return new TypeScript.SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, this.fileName, this.lineMap, this.parseOptions); - }; - - ParserImpl.prototype.setStrictMode = function (isInStrictMode) { - this.isInStrictMode = isInStrictMode; - this.factory = isInStrictMode ? TypeScript.Syntax.strictModeFactory : TypeScript.Syntax.normalModeFactory; - }; - - ParserImpl.prototype.parseSourceUnit = function () { - var savedIsInStrictMode = this.isInStrictMode; - - var result = this.parseSyntaxList(1 /* SourceUnit_ModuleElements */, ParserImpl.updateStrictModeState); - var moduleElements = result.list; - - this.setStrictMode(savedIsInStrictMode); - - var sourceUnit = this.factory.sourceUnit(moduleElements, this.currentToken()); - sourceUnit = this.addSkippedTokensBeforeNode(sourceUnit, result.skippedTokens); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullWidth() === this.newText_forDebuggingPurposesOnly.length()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullText() === this.newText_forDebuggingPurposesOnly.substr(0, this.newText_forDebuggingPurposesOnly.length(), false)); - } - } - - return sourceUnit; - }; - - ParserImpl.updateStrictModeState = function (parser, items) { - if (!parser.isInStrictMode) { - for (var i = 0; i < items.length; i++) { - var item = items[i]; - if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) { - return; - } - } - - parser.setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1])); - } - }; - - ParserImpl.prototype.isModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return true; - } - - var modifierCount = this.modifierCount(); - return this.isImportDeclaration(modifierCount) || this.isExportAssignment() || this.isModuleDeclaration(modifierCount) || this.isInterfaceDeclaration(modifierCount) || this.isClassDeclaration(modifierCount) || this.isEnumDeclaration(modifierCount) || this.isStatement(inErrorRecovery); - }; - - ParserImpl.prototype.parseModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return this.eatNode(); - } - - var modifierCount = this.modifierCount(); - if (this.isImportDeclaration(modifierCount)) { - return this.parseImportDeclaration(); - } else if (this.isExportAssignment()) { - return this.parseExportAssignment(); - } else if (this.isModuleDeclaration(modifierCount)) { - return this.parseModuleDeclaration(); - } else if (this.isInterfaceDeclaration(modifierCount)) { - return this.parseInterfaceDeclaration(); - } else if (this.isClassDeclaration(modifierCount)) { - return this.parseClassDeclaration(); - } else if (this.isEnumDeclaration(modifierCount)) { - return this.parseEnumDeclaration(); - } else if (this.isStatement(inErrorRecovery)) { - return this.parseStatement(inErrorRecovery); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isImportDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 49 /* ImportKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 49 /* ImportKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseImportDeclaration = function () { - var modifiers = this.parseModifiers(); - var importKeyword = this.eatKeyword(49 /* ImportKeyword */); - var identifier = this.eatIdentifierToken(); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var moduleReference = this.parseModuleReference(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.importDeclaration(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken); - }; - - ParserImpl.prototype.isExportAssignment = function () { - return this.currentToken().tokenKind === 47 /* ExportKeyword */ && this.peekToken(1).tokenKind === 107 /* EqualsToken */; - }; - - ParserImpl.prototype.parseExportAssignment = function () { - var exportKeyword = this.eatKeyword(47 /* ExportKeyword */); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var identifier = this.eatIdentifierToken(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.exportAssignment(exportKeyword, equalsToken, identifier, semicolonToken); - }; - - ParserImpl.prototype.parseModuleReference = function () { - if (this.isExternalModuleReference()) { - return this.parseExternalModuleReference(); - } else { - return this.parseModuleNameModuleReference(); - } - }; - - ParserImpl.prototype.isExternalModuleReference = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 66 /* RequireKeyword */) { - return this.peekToken(1).tokenKind === 72 /* OpenParenToken */; - } - - return false; - }; - - ParserImpl.prototype.parseExternalModuleReference = function () { - var requireKeyword = this.eatKeyword(66 /* RequireKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var stringLiteral = this.eatToken(14 /* StringLiteral */); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.externalModuleReference(requireKeyword, openParenToken, stringLiteral, closeParenToken); - }; - - ParserImpl.prototype.parseModuleNameModuleReference = function () { - var name = this.parseName(); - return this.factory.moduleNameModuleReference(name); - }; - - ParserImpl.prototype.parseIdentifierName = function () { - var identifierName = this.eatIdentifierNameToken(); - return identifierName; - }; - - ParserImpl.prototype.tryParseTypeArgumentList = function (inExpression) { - if (this.currentToken().kind() !== 80 /* LessThanToken */) { - return null; - } - - var lessThanToken; - var greaterThanToken; - var result; - var typeArguments; - - if (!inExpression) { - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - return this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - } - - var rewindPoint = this.getRewindPoint(); - - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (greaterThanToken.fullWidth() === 0 || !this.canFollowTypeArgumentListInExpression(this.currentToken().kind())) { - this.rewind(rewindPoint); - - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeArgumentList = this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - - return typeArgumentList; - } - }; - - ParserImpl.prototype.canFollowTypeArgumentListInExpression = function (kind) { - switch (kind) { - case 72 /* OpenParenToken */: - case 76 /* DotToken */: - - case 73 /* CloseParenToken */: - case 75 /* CloseBracketToken */: - case 106 /* ColonToken */: - case 78 /* SemicolonToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - case 84 /* EqualsEqualsToken */: - case 87 /* EqualsEqualsEqualsToken */: - case 86 /* ExclamationEqualsToken */: - case 88 /* ExclamationEqualsEqualsToken */: - case 103 /* AmpersandAmpersandToken */: - case 104 /* BarBarToken */: - case 100 /* CaretToken */: - case 98 /* AmpersandToken */: - case 99 /* BarToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseName = function () { - var shouldContinue = this.isIdentifier(this.currentToken()); - var current = this.eatIdentifierToken(); - - while (shouldContinue && this.currentToken().tokenKind === 76 /* DotToken */) { - var dotToken = this.eatToken(76 /* DotToken */); - - var currentToken = this.currentToken(); - var identifierName; - - if (TypeScript.SyntaxFacts.isAnyKeyword(currentToken.tokenKind) && this.previousToken().hasTrailingNewLine() && !currentToken.hasTrailingNewLine() && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.peekToken(1))) { - identifierName = this.createMissingToken(11 /* IdentifierName */, currentToken); - } else { - identifierName = this.eatIdentifierNameToken(); - } - - current = this.factory.qualifiedName(current, dotToken, identifierName); - - shouldContinue = identifierName.fullWidth() > 0; - } - - return current; - }; - - ParserImpl.prototype.isEnumDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 46 /* EnumKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 46 /* EnumKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseEnumDeclaration = function () { - var modifiers = this.parseModifiers(); - var enumKeyword = this.eatKeyword(46 /* EnumKeyword */); - var identifier = this.eatIdentifierToken(); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var enumElements = TypeScript.Syntax.emptySeparatedList; - - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(256 /* EnumDeclaration_EnumElements */); - enumElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.enumDeclaration(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken); - }; - - ParserImpl.prototype.isEnumElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return true; - } - - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseEnumElement = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return this.eatNode(); - } - - var propertyName = this.eatPropertyName(); - var equalsValueClause = null; - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.enumElement(propertyName, equalsValueClause); - }; - - ParserImpl.isModifier = function (token) { - switch (token.tokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 47 /* ExportKeyword */: - case 63 /* DeclareKeyword */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.modifierCount = function () { - var modifierCount = 0; - while (true) { - if (ParserImpl.isModifier(this.peekToken(modifierCount))) { - modifierCount++; - continue; - } - - break; - } - - return modifierCount; - }; - - ParserImpl.prototype.parseModifiers = function () { - var tokens = this.getArray(); - - while (true) { - if (ParserImpl.isModifier(this.currentToken())) { - tokens.push(this.eatAnyToken()); - continue; - } - - break; - } - - var result = TypeScript.Syntax.list(tokens); - - this.returnZeroOrOneLengthArray(tokens); - - return result; - }; - - ParserImpl.prototype.isClassDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 44 /* ClassKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 44 /* ClassKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseHeritageClauses = function () { - var heritageClauses = TypeScript.Syntax.emptyList; - - if (this.isHeritageClause()) { - var result = this.parseSyntaxList(1024 /* ClassOrInterfaceDeclaration_HeritageClauses */); - heritageClauses = result.list; - TypeScript.Debug.assert(result.skippedTokens.length === 0); - } - - return heritageClauses; - }; - - ParserImpl.prototype.parseClassDeclaration = function () { - var modifiers = this.parseModifiers(); - - var classKeyword = this.eatKeyword(44 /* ClassKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var classElements = TypeScript.Syntax.emptyList; - - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(2 /* ClassDeclaration_ClassElements */); - - classElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.classDeclaration(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken); - }; - - ParserImpl.isPublicOrPrivateKeyword = function (token) { - return token.tokenKind === 57 /* PublicKeyword */ || token.tokenKind === 55 /* PrivateKeyword */; - }; - - ParserImpl.prototype.isAccessor = function (inErrorRecovery) { - var index = this.modifierCount(); - - if (this.peekToken(index).tokenKind !== 64 /* GetKeyword */ && this.peekToken(index).tokenKind !== 68 /* SetKeyword */) { - return false; - } - - index++; - return this.isPropertyName(this.peekToken(index), inErrorRecovery); - }; - - ParserImpl.prototype.parseAccessor = function (checkForStrictMode) { - var modifiers = this.parseModifiers(); - - if (this.currentToken().tokenKind === 64 /* GetKeyword */) { - return this.parseGetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else if (this.currentToken().tokenKind === 68 /* SetKeyword */) { - return this.parseSetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseGetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var getKeyword = this.eatKeyword(64 /* GetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.getAccessor(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block); - }; - - ParserImpl.prototype.parseSetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var setKeyword = this.eatKeyword(68 /* SetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.setAccessor(modifiers, setKeyword, propertyName, parameterList, block); - }; - - ParserImpl.prototype.isClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return true; - } - - return this.isConstructorDeclaration() || this.isMemberFunctionDeclaration(inErrorRecovery) || this.isAccessor(inErrorRecovery) || this.isMemberVariableDeclaration(inErrorRecovery) || this.isIndexMemberDeclaration(); - }; - - ParserImpl.prototype.parseClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return this.eatNode(); - } - - if (this.isConstructorDeclaration()) { - return this.parseConstructorDeclaration(); - } else if (this.isMemberFunctionDeclaration(inErrorRecovery)) { - return this.parseMemberFunctionDeclaration(); - } else if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(false); - } else if (this.isMemberVariableDeclaration(inErrorRecovery)) { - return this.parseMemberVariableDeclaration(); - } else if (this.isIndexMemberDeclaration()) { - return this.parseIndexMemberDeclaration(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isConstructorDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 62 /* ConstructorKeyword */; - }; - - ParserImpl.prototype.parseConstructorDeclaration = function () { - var modifiers = this.parseModifiers(); - var constructorKeyword = this.eatKeyword(62 /* ConstructorKeyword */); - var callSignature = this.parseCallSignature(false); - - var semicolonToken = null; - var block = null; - - if (this.isBlock()) { - block = this.parseBlock(false, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.constructorDeclaration(modifiers, constructorKeyword, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isMemberFunctionDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isCallSignature(index + 1)) { - return true; - } - - if (ParserImpl.isModifier(token)) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberFunctionDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isCallSignature(1)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var block = null; - var semicolon = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolon = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.memberFunctionDeclaration(modifiers, propertyName, callSignature, block, semicolon); - }; - - ParserImpl.prototype.isDefinitelyMemberVariablePropertyName = function (index) { - if (TypeScript.SyntaxFacts.isAnyKeyword(this.peekToken(index).tokenKind)) { - switch (this.peekToken(index + 1).tokenKind) { - case 78 /* SemicolonToken */: - case 107 /* EqualsToken */: - case 106 /* ColonToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - default: - return false; - } - } else { - return true; - } - }; - - ParserImpl.prototype.isMemberVariableDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isDefinitelyMemberVariablePropertyName(index)) { - return true; - } - - if (ParserImpl.isModifier(this.peekToken(index))) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberVariableDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isDefinitelyMemberVariablePropertyName(0)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var variableDeclarator = this.parseVariableDeclarator(true, true); - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.memberVariableDeclaration(modifiers, variableDeclarator, semicolon); - }; - - ParserImpl.prototype.isIndexMemberDeclaration = function () { - var index = this.modifierCount(); - return this.isIndexSignature(index); - }; - - ParserImpl.prototype.parseIndexMemberDeclaration = function () { - var modifiers = this.parseModifiers(); - var indexSignature = this.parseIndexSignature(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.indexMemberDeclaration(modifiers, indexSignature, semicolonToken); - }; - - ParserImpl.prototype.tryAddUnexpectedEqualsGreaterThanToken = function (callSignature) { - var token0 = this.currentToken(); - - var hasEqualsGreaterThanToken = token0.tokenKind === 85 /* EqualsGreaterThanToken */; - if (hasEqualsGreaterThanToken) { - if (callSignature.lastToken()) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]); - this.addDiagnostic(diagnostic); - - var token = this.eatAnyToken(); - return this.addSkippedTokenAfterNode(callSignature, token0); - } - } - - return callSignature; - }; - - ParserImpl.prototype.isFunctionDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 27 /* FunctionKeyword */; - }; - - ParserImpl.prototype.parseFunctionDeclaration = function () { - var modifiers = this.parseModifiers(); - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = this.eatIdentifierToken(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var semicolonToken = null; - var block = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.functionDeclaration(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isModuleDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 65 /* ModuleKeyword */) { - return true; - } - - if (this.currentToken().tokenKind === 65 /* ModuleKeyword */) { - var token1 = this.peekToken(1); - return this.isIdentifier(token1) || token1.tokenKind === 14 /* StringLiteral */; - } - - return false; - }; - - ParserImpl.prototype.parseModuleDeclaration = function () { - var modifiers = this.parseModifiers(); - var moduleKeyword = this.eatKeyword(65 /* ModuleKeyword */); - - var moduleName = null; - var stringLiteral = null; - - if (this.currentToken().tokenKind === 14 /* StringLiteral */) { - stringLiteral = this.eatToken(14 /* StringLiteral */); - } else { - moduleName = this.parseName(); - } - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var moduleElements = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(4 /* ModuleDeclaration_ModuleElements */); - moduleElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.moduleDeclaration(modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, closeBraceToken); - }; - - ParserImpl.prototype.isInterfaceDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 52 /* InterfaceKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 52 /* InterfaceKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseInterfaceDeclaration = function () { - var modifiers = this.parseModifiers(); - var interfaceKeyword = this.eatKeyword(52 /* InterfaceKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - - var objectType = this.parseObjectType(); - return this.factory.interfaceDeclaration(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, objectType); - }; - - ParserImpl.prototype.parseObjectType = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var typeMembers = TypeScript.Syntax.emptySeparatedList; - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(512 /* ObjectType_TypeMembers */); - typeMembers = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.objectType(openBraceToken, typeMembers, closeBraceToken); - }; - - ParserImpl.prototype.isTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return true; - } - - return this.isCallSignature(0) || this.isConstructSignature() || this.isIndexSignature(0) || this.isMethodSignature(inErrorRecovery) || this.isPropertySignature(inErrorRecovery); - }; - - ParserImpl.prototype.parseTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return this.eatNode(); - } - - if (this.isCallSignature(0)) { - return this.parseCallSignature(false); - } else if (this.isConstructSignature()) { - return this.parseConstructSignature(); - } else if (this.isIndexSignature(0)) { - return this.parseIndexSignature(); - } else if (this.isMethodSignature(inErrorRecovery)) { - return this.parseMethodSignature(); - } else if (this.isPropertySignature(inErrorRecovery)) { - return this.parsePropertySignature(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseConstructSignature = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var callSignature = this.parseCallSignature(false); - - return this.factory.constructSignature(newKeyword, callSignature); - }; - - ParserImpl.prototype.parseIndexSignature = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var parameter = this.parseParameter(); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.indexSignature(openBracketToken, parameter, closeBracketToken, typeAnnotation); - }; - - ParserImpl.prototype.parseMethodSignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var callSignature = this.parseCallSignature(false); - - return this.factory.methodSignature(propertyName, questionToken, callSignature); - }; - - ParserImpl.prototype.parsePropertySignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.propertySignature(propertyName, questionToken, typeAnnotation); - }; - - ParserImpl.prototype.isCallSignature = function (tokenIndex) { - var tokenKind = this.peekToken(tokenIndex).tokenKind; - return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */; - }; - - ParserImpl.prototype.isConstructSignature = function () { - if (this.currentToken().tokenKind !== 31 /* NewKeyword */) { - return false; - } - - var token1 = this.peekToken(1); - return token1.tokenKind === 80 /* LessThanToken */ || token1.tokenKind === 72 /* OpenParenToken */; - }; - - ParserImpl.prototype.isIndexSignature = function (tokenIndex) { - return this.peekToken(tokenIndex).tokenKind === 74 /* OpenBracketToken */; - }; - - ParserImpl.prototype.isMethodSignature = function (inErrorRecovery) { - if (this.isPropertyName(this.currentToken(), inErrorRecovery)) { - if (this.isCallSignature(1)) { - return true; - } - - if (this.peekToken(1).tokenKind === 105 /* QuestionToken */ && this.isCallSignature(2)) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPropertySignature = function (inErrorRecovery) { - var currentToken = this.currentToken(); - - if (ParserImpl.isModifier(currentToken) && !currentToken.hasTrailingNewLine() && this.isPropertyName(this.peekToken(1), inErrorRecovery)) { - return false; - } - - return this.isPropertyName(currentToken, inErrorRecovery); - }; - - ParserImpl.prototype.isHeritageClause = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */; - }; - - ParserImpl.prototype.isNotHeritageClauseTypeName = function () { - if (this.currentToken().tokenKind === 51 /* ImplementsKeyword */ || this.currentToken().tokenKind === 48 /* ExtendsKeyword */) { - return this.isIdentifier(this.peekToken(1)); - } - - return false; - }; - - ParserImpl.prototype.isHeritageClauseTypeName = function () { - if (this.isIdentifier(this.currentToken())) { - return !this.isNotHeritageClauseTypeName(); - } - - return false; - }; - - ParserImpl.prototype.parseHeritageClause = function () { - var extendsOrImplementsKeyword = this.eatAnyToken(); - TypeScript.Debug.assert(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ || extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - - var result = this.parseSeparatedSyntaxList(2048 /* HeritageClause_TypeNameList */); - var typeNames = result.list; - extendsOrImplementsKeyword = this.addSkippedTokensAfterToken(extendsOrImplementsKeyword, result.skippedTokens); - - return this.factory.heritageClause(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, extendsOrImplementsKeyword, typeNames); - }; - - ParserImpl.prototype.isStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return true; - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - var token1 = this.peekToken(1); - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { - return false; - } - - break; - - case 28 /* IfKeyword */: - case 70 /* OpenBraceToken */: - case 33 /* ReturnKeyword */: - case 34 /* SwitchKeyword */: - case 36 /* ThrowKeyword */: - case 15 /* BreakKeyword */: - case 18 /* ContinueKeyword */: - case 26 /* ForKeyword */: - case 42 /* WhileKeyword */: - case 43 /* WithKeyword */: - case 22 /* DoKeyword */: - case 38 /* TryKeyword */: - case 19 /* DebuggerKeyword */: - return true; - } - - if (this.isInterfaceDeclaration(0) || this.isClassDeclaration(0) || this.isEnumDeclaration(0) || this.isModuleDeclaration(0)) { - return false; - } - - return this.isLabeledStatement(currentToken) || this.isVariableStatement() || this.isFunctionDeclaration() || this.isEmptyStatement(currentToken, inErrorRecovery) || this.isExpressionStatement(currentToken); - }; - - ParserImpl.prototype.parseStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return this.eatNode(); - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 28 /* IfKeyword */: - return this.parseIfStatement(); - case 70 /* OpenBraceToken */: - return this.parseBlock(false, false); - case 33 /* ReturnKeyword */: - return this.parseReturnStatement(); - case 34 /* SwitchKeyword */: - return this.parseSwitchStatement(); - case 36 /* ThrowKeyword */: - return this.parseThrowStatement(); - case 15 /* BreakKeyword */: - return this.parseBreakStatement(); - case 18 /* ContinueKeyword */: - return this.parseContinueStatement(); - case 26 /* ForKeyword */: - return this.parseForOrForInStatement(); - case 42 /* WhileKeyword */: - return this.parseWhileStatement(); - case 43 /* WithKeyword */: - return this.parseWithStatement(); - case 22 /* DoKeyword */: - return this.parseDoStatement(); - case 38 /* TryKeyword */: - return this.parseTryStatement(); - case 19 /* DebuggerKeyword */: - return this.parseDebuggerStatement(); - } - - if (this.isVariableStatement()) { - return this.parseVariableStatement(); - } else if (this.isLabeledStatement(currentToken)) { - return this.parseLabeledStatement(); - } else if (this.isFunctionDeclaration()) { - return this.parseFunctionDeclaration(); - } else if (this.isEmptyStatement(currentToken, inErrorRecovery)) { - return this.parseEmptyStatement(); - } else { - return this.parseExpressionStatement(); - } - }; - - ParserImpl.prototype.parseDebuggerStatement = function () { - var debuggerKeyword = this.eatKeyword(19 /* DebuggerKeyword */); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.debuggerStatement(debuggerKeyword, semicolonToken); - }; - - ParserImpl.prototype.parseDoStatement = function () { - var doKeyword = this.eatKeyword(22 /* DoKeyword */); - var statement = this.parseStatement(false); - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(true); - - return this.factory.doStatement(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken); - }; - - ParserImpl.prototype.isLabeledStatement = function (currentToken) { - return this.isIdentifier(currentToken) && this.peekToken(1).tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseLabeledStatement = function () { - var identifier = this.eatIdentifierToken(); - var colonToken = this.eatToken(106 /* ColonToken */); - var statement = this.parseStatement(false); - - return this.factory.labeledStatement(identifier, colonToken, statement); - }; - - ParserImpl.prototype.parseTryStatement = function () { - var tryKeyword = this.eatKeyword(38 /* TryKeyword */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 64 /* TryBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - var catchClause = null; - if (this.isCatchClause()) { - catchClause = this.parseCatchClause(); - } - - var finallyClause = null; - if (catchClause === null || this.isFinallyClause()) { - finallyClause = this.parseFinallyClause(); - } - - return this.factory.tryStatement(tryKeyword, block, catchClause, finallyClause); - }; - - ParserImpl.prototype.isCatchClause = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */; - }; - - ParserImpl.prototype.parseCatchClause = function () { - var catchKeyword = this.eatKeyword(17 /* CatchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var identifier = this.eatIdentifierToken(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 128 /* CatchBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - return this.factory.catchClause(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block); - }; - - ParserImpl.prototype.isFinallyClause = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.parseFinallyClause = function () { - var finallyKeyword = this.eatKeyword(25 /* FinallyKeyword */); - var block = this.parseBlock(false, false); - - return this.factory.finallyClause(finallyKeyword, block); - }; - - ParserImpl.prototype.parseWithStatement = function () { - var withKeyword = this.eatKeyword(43 /* WithKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.withStatement(withKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.parseWhileStatement = function () { - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.whileStatement(whileKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.isEmptyStatement = function (currentToken, inErrorRecovery) { - if (inErrorRecovery) { - return false; - } - - return currentToken.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.parseEmptyStatement = function () { - var semicolonToken = this.eatToken(78 /* SemicolonToken */); - return this.factory.emptyStatement(semicolonToken); - }; - - ParserImpl.prototype.parseForOrForInStatement = function () { - var forKeyword = this.eatKeyword(26 /* ForKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 40 /* VarKeyword */) { - return this.parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken); - } else if (currentToken.tokenKind === 78 /* SemicolonToken */) { - return this.parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken); - } else { - return this.parseForOrForInStatementWithInitializer(forKeyword, openParenToken); - } - }; - - ParserImpl.prototype.parseForOrForInStatementWithVariableDeclaration = function (forKeyword, openParenToken) { - var variableDeclaration = this.parseVariableDeclaration(false); - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - } - - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - }; - - ParserImpl.prototype.parseForInStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var inKeyword = this.eatKeyword(29 /* InKeyword */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forInStatement(forKeyword, openParenToken, variableDeclaration, initializer, inKeyword, expression, closeParenToken, statement); - }; - - ParserImpl.prototype.parseForOrForInStatementWithInitializer = function (forKeyword, openParenToken) { - var initializer = this.parseExpression(false); - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } else { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } - }; - - ParserImpl.prototype.parseForStatementWithNoVariableDeclarationOrInitializer = function (forKeyword, openParenToken) { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null); - }; - - ParserImpl.prototype.parseForStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var firstSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var condition = null; - if (this.currentToken().tokenKind !== 78 /* SemicolonToken */ && this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - condition = this.parseExpression(true); - } - - var secondSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var incrementor = null; - if (this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - incrementor = this.parseExpression(true); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forStatement(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement); - }; - - ParserImpl.prototype.parseBreakStatement = function () { - var breakKeyword = this.eatKeyword(15 /* BreakKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.breakStatement(breakKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseContinueStatement = function () { - var continueKeyword = this.eatKeyword(18 /* ContinueKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.continueStatement(continueKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseSwitchStatement = function () { - var switchKeyword = this.eatKeyword(34 /* SwitchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var switchClauses = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(8 /* SwitchStatement_SwitchClauses */); - switchClauses = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.switchStatement(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken); - }; - - ParserImpl.prototype.isCaseSwitchClause = function () { - return this.currentToken().tokenKind === 16 /* CaseKeyword */; - }; - - ParserImpl.prototype.isDefaultSwitchClause = function () { - return this.currentToken().tokenKind === 20 /* DefaultKeyword */; - }; - - ParserImpl.prototype.isSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return true; - } - - return this.isCaseSwitchClause() || this.isDefaultSwitchClause(); - }; - - ParserImpl.prototype.parseSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return this.eatNode(); - } - - if (this.isCaseSwitchClause()) { - return this.parseCaseSwitchClause(); - } else if (this.isDefaultSwitchClause()) { - return this.parseDefaultSwitchClause(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseCaseSwitchClause = function () { - var caseKeyword = this.eatKeyword(16 /* CaseKeyword */); - var expression = this.parseExpression(true); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.caseSwitchClause(caseKeyword, expression, colonToken, statements); - }; - - ParserImpl.prototype.parseDefaultSwitchClause = function () { - var defaultKeyword = this.eatKeyword(20 /* DefaultKeyword */); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.defaultSwitchClause(defaultKeyword, colonToken, statements); - }; - - ParserImpl.prototype.parseThrowStatement = function () { - var throwKeyword = this.eatKeyword(36 /* ThrowKeyword */); - - var expression = null; - if (this.canEatExplicitOrAutomaticSemicolon(false)) { - var token = this.createMissingToken(11 /* IdentifierName */, null); - expression = token; - } else { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.throwStatement(throwKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.parseReturnStatement = function () { - var returnKeyword = this.eatKeyword(33 /* ReturnKeyword */); - - var expression = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.returnStatement(returnKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.isExpressionStatement = function (currentToken) { - var kind = currentToken.tokenKind; - if (kind === 70 /* OpenBraceToken */ || kind === 27 /* FunctionKeyword */) { - return false; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.isAssignmentOrOmittedExpression = function () { - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.parseAssignmentOrOmittedExpression = function () { - if (this.currentToken().tokenKind === 79 /* CommaToken */) { - return this.factory.omittedExpression(); - } - - return this.parseAssignmentExpression(true); - }; - - ParserImpl.prototype.isExpression = function (currentToken) { - switch (currentToken.tokenKind) { - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 12 /* RegularExpressionLiteral */: - - case 74 /* OpenBracketToken */: - - case 72 /* OpenParenToken */: - - case 80 /* LessThanToken */: - - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 89 /* PlusToken */: - case 90 /* MinusToken */: - case 102 /* TildeToken */: - case 101 /* ExclamationToken */: - - case 70 /* OpenBraceToken */: - - case 85 /* EqualsGreaterThanToken */: - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - - case 50 /* SuperKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - - case 31 /* NewKeyword */: - - case 21 /* DeleteKeyword */: - case 41 /* VoidKeyword */: - case 39 /* TypeOfKeyword */: - - case 27 /* FunctionKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseExpressionStatement = function () { - var expression = this.parseExpression(true); - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.expressionStatement(expression, semicolon); - }; - - ParserImpl.prototype.parseIfStatement = function () { - var ifKeyword = this.eatKeyword(28 /* IfKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - var elseClause = null; - if (this.isElseClause()) { - elseClause = this.parseElseClause(); - } - - return this.factory.ifStatement(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause); - }; - - ParserImpl.prototype.isElseClause = function () { - return this.currentToken().tokenKind === 23 /* ElseKeyword */; - }; - - ParserImpl.prototype.parseElseClause = function () { - var elseKeyword = this.eatKeyword(23 /* ElseKeyword */); - var statement = this.parseStatement(false); - - return this.factory.elseClause(elseKeyword, statement); - }; - - ParserImpl.prototype.isVariableStatement = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 40 /* VarKeyword */; - }; - - ParserImpl.prototype.parseVariableStatement = function () { - var modifiers = this.parseModifiers(); - var variableDeclaration = this.parseVariableDeclaration(true); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.variableStatement(modifiers, variableDeclaration, semicolonToken); - }; - - ParserImpl.prototype.parseVariableDeclaration = function (allowIn) { - var varKeyword = this.eatKeyword(40 /* VarKeyword */); - - var listParsingState = allowIn ? 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */; - - var result = this.parseSeparatedSyntaxList(listParsingState); - var variableDeclarators = result.list; - varKeyword = this.addSkippedTokensAfterToken(varKeyword, result.skippedTokens); - - return this.factory.variableDeclaration(varKeyword, variableDeclarators); - }; - - ParserImpl.prototype.isVariableDeclarator = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 225 /* VariableDeclarator */) { - return true; - } - - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.canReuseVariableDeclaratorNode = function (node) { - if (node === null || node.kind() !== 225 /* VariableDeclarator */) { - return false; - } - - var variableDeclarator = node; - return variableDeclarator.equalsValueClause === null; - }; - - ParserImpl.prototype.parseVariableDeclarator = function (allowIn, allowPropertyName) { - if (this.canReuseVariableDeclaratorNode(this.currentNode())) { - return this.eatNode(); - } - - var propertyName = allowPropertyName ? this.eatPropertyName() : this.eatIdentifierToken(); - var equalsValueClause = null; - var typeAnnotation = null; - - if (propertyName.width() > 0) { - typeAnnotation = this.parseOptionalTypeAnnotation(false); - - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(allowIn); - } - } - - return this.factory.variableDeclarator(propertyName, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.isColonValueClause = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.isEqualsValueClause = function (inParameter) { - var token0 = this.currentToken(); - if (token0.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (!this.previousToken().hasTrailingNewLine()) { - if (token0.tokenKind === 85 /* EqualsGreaterThanToken */) { - return false; - } - - if (token0.tokenKind === 70 /* OpenBraceToken */ && inParameter) { - return false; - } - - return this.isExpression(token0); - } - - return false; - }; - - ParserImpl.prototype.parseEqualsValueClause = function (allowIn) { - var equalsToken = this.eatToken(107 /* EqualsToken */); - var value = this.parseAssignmentExpression(allowIn); - - return this.factory.equalsValueClause(equalsToken, value); - }; - - ParserImpl.prototype.parseExpression = function (allowIn) { - return this.parseSubExpression(0, allowIn); - }; - - ParserImpl.prototype.parseAssignmentExpression = function (allowIn) { - return this.parseSubExpression(2 /* AssignmentExpressionPrecedence */, allowIn); - }; - - ParserImpl.prototype.parseUnaryExpressionOrLower = function () { - var currentTokenKind = this.currentToken().tokenKind; - if (TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(currentTokenKind)) { - var operatorKind = TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(currentTokenKind); - - var operatorToken = this.eatAnyToken(); - - var operand = this.parseUnaryExpressionOrLower(); - return this.factory.prefixUnaryExpression(operatorKind, operatorToken, operand); - } else if (currentTokenKind === 39 /* TypeOfKeyword */) { - return this.parseTypeOfExpression(); - } else if (currentTokenKind === 41 /* VoidKeyword */) { - return this.parseVoidExpression(); - } else if (currentTokenKind === 21 /* DeleteKeyword */) { - return this.parseDeleteExpression(); - } else if (currentTokenKind === 80 /* LessThanToken */) { - return this.parseCastExpression(); - } else { - return this.parsePostfixExpressionOrLower(); - } - }; - - ParserImpl.prototype.parseSubExpression = function (precedence, allowIn) { - if (precedence <= 2 /* AssignmentExpressionPrecedence */) { - if (this.isSimpleArrowFunctionExpression()) { - return this.parseSimpleArrowFunctionExpression(); - } - - var parethesizedArrowFunction = this.tryParseParenthesizedArrowFunctionExpression(); - if (parethesizedArrowFunction !== null) { - return parethesizedArrowFunction; - } - } - - var leftOperand = this.parseUnaryExpressionOrLower(); - return this.parseBinaryOrConditionalExpressions(precedence, allowIn, leftOperand); - }; - - ParserImpl.prototype.parseBinaryOrConditionalExpressions = function (precedence, allowIn, leftOperand) { - while (true) { - var token0 = this.currentToken(); - var token0Kind = token0.tokenKind; - - if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(token0Kind)) { - if (token0Kind === 29 /* InKeyword */ && !allowIn) { - break; - } - - var mergedToken = this.tryMergeBinaryExpressionTokens(); - var tokenKind = mergedToken === null ? token0Kind : mergedToken.syntaxKind; - - var binaryExpressionKind = TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(tokenKind); - var newPrecedence = ParserImpl.getPrecedence(binaryExpressionKind); - - if (newPrecedence < precedence) { - break; - } - - if (newPrecedence === precedence && !this.isRightAssociative(binaryExpressionKind)) { - break; - } - - var operatorToken = mergedToken === null ? token0 : TypeScript.Syntax.token(mergedToken.syntaxKind).withLeadingTrivia(token0.leadingTrivia()).withTrailingTrivia(this.peekToken(mergedToken.tokenCount - 1).trailingTrivia()); - - var skipCount = mergedToken === null ? 1 : mergedToken.tokenCount; - for (var i = 0; i < skipCount; i++) { - this.eatAnyToken(); - } - - leftOperand = this.factory.binaryExpression(binaryExpressionKind, leftOperand, operatorToken, this.parseSubExpression(newPrecedence, allowIn)); - continue; - } - - if (token0Kind === 105 /* QuestionToken */ && precedence <= 3 /* ConditionalExpressionPrecedence */) { - var questionToken = this.eatToken(105 /* QuestionToken */); - - var whenTrueExpression = this.parseAssignmentExpression(allowIn); - var colon = this.eatToken(106 /* ColonToken */); - - var whenFalseExpression = this.parseAssignmentExpression(allowIn); - leftOperand = this.factory.conditionalExpression(leftOperand, questionToken, whenTrueExpression, colon, whenFalseExpression); - continue; - } - - break; - } - - return leftOperand; - }; - - ParserImpl.prototype.tryMergeBinaryExpressionTokens = function () { - var token0 = this.currentToken(); - - if (token0.tokenKind === 81 /* GreaterThanToken */ && !token0.hasTrailingTrivia()) { - var storage = this.mergeTokensStorage; - storage[0] = 0 /* None */; - storage[1] = 0 /* None */; - storage[2] = 0 /* None */; - - for (var i = 0; i < storage.length; i++) { - var nextToken = this.peekToken(i + 1); - - if (!nextToken.hasLeadingTrivia()) { - storage[i] = nextToken.tokenKind; - } - - if (nextToken.hasTrailingTrivia()) { - break; - } - } - - if (storage[0] === 81 /* GreaterThanToken */) { - if (storage[1] === 81 /* GreaterThanToken */) { - if (storage[2] === 107 /* EqualsToken */) { - return { tokenCount: 4, syntaxKind: 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 3, syntaxKind: 97 /* GreaterThanGreaterThanGreaterThanToken */ }; - } - } else if (storage[1] === 107 /* EqualsToken */) { - return { tokenCount: 3, syntaxKind: 113 /* GreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 2, syntaxKind: 96 /* GreaterThanGreaterThanToken */ }; - } - } else if (storage[0] === 107 /* EqualsToken */) { - return { tokenCount: 2, syntaxKind: 83 /* GreaterThanEqualsToken */ }; - } - } - - return null; - }; - - ParserImpl.prototype.isRightAssociative = function (expressionKind) { - switch (expressionKind) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return true; - default: - return false; - } - }; - - ParserImpl.prototype.parseMemberExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } - - var expression = this.parsePrimaryExpression(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - return this.parseMemberExpressionRest(expression, false, inObjectCreation); - }; - - ParserImpl.prototype.parseCallExpressionOrLower = function () { - var expression; - if (this.currentToken().tokenKind === 50 /* SuperKeyword */) { - expression = this.eatKeyword(50 /* SuperKeyword */); - - var currentTokenKind = this.currentToken().tokenKind; - if (currentTokenKind !== 72 /* OpenParenToken */ && currentTokenKind !== 76 /* DotToken */) { - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - } - } else { - expression = this.parseMemberExpressionOrLower(false); - } - - return this.parseMemberExpressionRest(expression, true, false); - }; - - ParserImpl.prototype.parseMemberExpressionRest = function (expression, allowArguments, inObjectCreation) { - while (true) { - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 72 /* OpenParenToken */: - if (!allowArguments) { - return expression; - } - - expression = this.factory.invocationExpression(expression, this.parseArgumentList(null)); - continue; - - case 80 /* LessThanToken */: - if (!allowArguments) { - return expression; - } - - var argumentList = this.tryParseArgumentList(); - if (argumentList !== null) { - expression = this.factory.invocationExpression(expression, argumentList); - continue; - } - - break; - - case 74 /* OpenBracketToken */: - expression = this.parseElementAccessExpression(expression, inObjectCreation); - continue; - - case 76 /* DotToken */: - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - continue; - } - - return expression; - } - }; - - ParserImpl.prototype.parseLeftHandSideExpressionOrLower = function () { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseCallExpressionOrLower(); - } - }; - - ParserImpl.prototype.parsePostfixExpressionOrLower = function () { - var expression = this.parseLeftHandSideExpressionOrLower(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - break; - } - - return this.factory.postfixUnaryExpression(TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(currentTokenKind), expression, this.eatAnyToken()); - } - - return expression; - }; - - ParserImpl.prototype.tryParseGenericArgumentList = function () { - var rewindPoint = this.getRewindPoint(); - - var typeArgumentList = this.tryParseTypeArgumentList(true); - var token0 = this.currentToken(); - - var isOpenParen = token0.tokenKind === 72 /* OpenParenToken */; - var isDot = token0.tokenKind === 76 /* DotToken */; - var isOpenParenOrDot = isOpenParen || isDot; - - var argumentList = null; - if (typeArgumentList === null || !isOpenParenOrDot) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - - if (isDot) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null); - this.addDiagnostic(diagnostic); - - return this.factory.argumentList(typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.emptyToken(73 /* CloseParenToken */)); - } else { - return this.parseArgumentList(typeArgumentList); - } - } - }; - - ParserImpl.prototype.tryParseArgumentList = function () { - if (this.currentToken().tokenKind === 80 /* LessThanToken */) { - return this.tryParseGenericArgumentList(); - } - - if (this.currentToken().tokenKind === 72 /* OpenParenToken */) { - return this.parseArgumentList(null); - } - - return null; - }; - - ParserImpl.prototype.parseArgumentList = function (typeArgumentList) { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var _arguments = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.fullWidth() > 0) { - var result = this.parseSeparatedSyntaxList(16384 /* ArgumentList_AssignmentExpressions */); - _arguments = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.argumentList(typeArgumentList, openParenToken, _arguments, closeParenToken); - }; - - ParserImpl.prototype.parseElementAccessExpression = function (expression, inObjectCreation) { - var start = this.currentTokenStart(); - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var argumentExpression; - - if (this.currentToken().tokenKind === 75 /* CloseBracketToken */ && inObjectCreation) { - var end = this.currentTokenStart() + this.currentToken().width(); - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, start, end - start, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null); - this.addDiagnostic(diagnostic); - - argumentExpression = TypeScript.Syntax.emptyToken(11 /* IdentifierName */); - } else { - argumentExpression = this.parseExpression(true); - } - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.elementAccessExpression(expression, openBracketToken, argumentExpression, closeBracketToken); - }; - - ParserImpl.prototype.parsePrimaryExpression = function () { - var currentToken = this.currentToken(); - - if (this.isIdentifier(currentToken)) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 35 /* ThisKeyword */: - return this.parseThisExpression(); - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.parseLiteralExpression(); - - case 32 /* NullKeyword */: - return this.parseLiteralExpression(); - - case 27 /* FunctionKeyword */: - return this.parseFunctionExpression(); - - case 13 /* NumericLiteral */: - return this.parseLiteralExpression(); - - case 12 /* RegularExpressionLiteral */: - return this.parseLiteralExpression(); - - case 14 /* StringLiteral */: - return this.parseLiteralExpression(); - - case 74 /* OpenBracketToken */: - return this.parseArrayLiteralExpression(); - - case 70 /* OpenBraceToken */: - return this.parseObjectLiteralExpression(); - - case 72 /* OpenParenToken */: - return this.parseParenthesizedExpression(); - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - var result = this.tryReparseDivideAsRegularExpression(); - if (result !== null) { - return result; - } - break; - } - - return null; - }; - - ParserImpl.prototype.tryReparseDivideAsRegularExpression = function () { - var currentToken = this.currentToken(); - - if (this.previousToken() !== null) { - var previousTokenKind = this.previousToken().tokenKind; - switch (previousTokenKind) { - case 11 /* IdentifierName */: - return null; - - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return null; - - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 75 /* CloseBracketToken */: - return null; - } - } - - currentToken = this.currentTokenAllowingRegularExpression(); - - if (currentToken.tokenKind === 118 /* SlashToken */ || currentToken.tokenKind === 119 /* SlashEqualsToken */) { - return null; - } else if (currentToken.tokenKind === 12 /* RegularExpressionLiteral */) { - return this.parseLiteralExpression(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseTypeOfExpression = function () { - var typeOfKeyword = this.eatKeyword(39 /* TypeOfKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.typeOfExpression(typeOfKeyword, expression); - }; - - ParserImpl.prototype.parseDeleteExpression = function () { - var deleteKeyword = this.eatKeyword(21 /* DeleteKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.deleteExpression(deleteKeyword, expression); - }; - - ParserImpl.prototype.parseVoidExpression = function () { - var voidKeyword = this.eatKeyword(41 /* VoidKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.voidExpression(voidKeyword, expression); - }; - - ParserImpl.prototype.parseFunctionExpression = function () { - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = null; - - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionExpression(functionKeyword, identifier, callSignature, block); - }; - - ParserImpl.prototype.parseObjectCreationExpression = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - - var expression = this.parseObjectCreationExpressionOrLower(true); - var argumentList = this.tryParseArgumentList(); - - var result = this.factory.objectCreationExpression(newKeyword, expression, argumentList); - return this.parseMemberExpressionRest(result, true, false); - }; - - ParserImpl.prototype.parseObjectCreationExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseMemberExpressionOrLower(inObjectCreation); - } - }; - - ParserImpl.prototype.parseCastExpression = function () { - var lessThanToken = this.eatToken(80 /* LessThanToken */); - var type = this.parseType(); - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.castExpression(lessThanToken, type, greaterThanToken, expression); - }; - - ParserImpl.prototype.parseParenthesizedExpression = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.parenthesizedExpression(openParenToken, expression, closeParenToken); - }; - - ParserImpl.prototype.tryParseParenthesizedArrowFunctionExpression = function () { - var tokenKind = this.currentToken().tokenKind; - if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) { - return null; - } - - if (this.isDefinitelyArrowFunctionExpression()) { - return this.parseParenthesizedArrowFunctionExpression(false); - } - - if (!this.isPossiblyArrowFunctionExpression()) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var arrowFunction = this.parseParenthesizedArrowFunctionExpression(true); - if (arrowFunction === null) { - this.rewind(rewindPoint); - } - - this.releaseRewindPoint(rewindPoint); - return arrowFunction; - }; - - ParserImpl.prototype.parseParenthesizedArrowFunctionExpression = function (requireArrow) { - var currentToken = this.currentToken(); - - var callSignature = this.parseCallSignature(true); - - if (requireArrow && this.currentToken().tokenKind !== 85 /* EqualsGreaterThanToken */) { - return null; - } - - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.parenthesizedArrowFunctionExpression(callSignature, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.tryParseArrowFunctionBlock = function () { - if (this.isBlock()) { - return this.parseBlock(false, false); - } else { - if (this.isStatement(false) && !this.isExpressionStatement(this.currentToken()) && !this.isFunctionDeclaration()) { - return this.parseBlock(true, false); - } else { - return null; - } - } - }; - - ParserImpl.prototype.isSimpleArrowFunctionExpression = function () { - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.isIdentifier(this.currentToken()) && this.peekToken(1).tokenKind === 85 /* EqualsGreaterThanToken */; - }; - - ParserImpl.prototype.parseSimpleArrowFunctionExpression = function () { - var identifier = this.eatIdentifierToken(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.simpleArrowFunctionExpression(identifier, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.isBlock = function () { - return this.currentToken().tokenKind === 70 /* OpenBraceToken */; - }; - - ParserImpl.prototype.isDefinitelyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return false; - } - - var token1 = this.peekToken(1); - var token2; - - if (token1.tokenKind === 73 /* CloseParenToken */) { - token2 = this.peekToken(2); - return token2.tokenKind === 106 /* ColonToken */ || token2.tokenKind === 85 /* EqualsGreaterThanToken */ || token2.tokenKind === 70 /* OpenBraceToken */; - } - - if (token1.tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - token2 = this.peekToken(2); - if (token1.tokenKind === 57 /* PublicKeyword */ || token1.tokenKind === 55 /* PrivateKeyword */) { - if (this.isIdentifier(token2)) { - return true; - } - } - - if (!this.isIdentifier(token1)) { - return false; - } - - if (token2.tokenKind === 106 /* ColonToken */) { - return true; - } - - var token3 = this.peekToken(3); - if (token2.tokenKind === 105 /* QuestionToken */) { - if (token3.tokenKind === 106 /* ColonToken */ || token3.tokenKind === 73 /* CloseParenToken */ || token3.tokenKind === 79 /* CommaToken */) { - return true; - } - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - if (token3.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPossiblyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return true; - } - - var token1 = this.peekToken(1); - - if (!this.isIdentifier(token1)) { - return false; - } - - var token2 = this.peekToken(2); - if (token2.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (token2.tokenKind === 79 /* CommaToken */) { - return true; - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - var token3 = this.peekToken(3); - if (token3.tokenKind === 106 /* ColonToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseObjectLiteralExpression = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var result = this.parseSeparatedSyntaxList(32768 /* ObjectLiteralExpression_PropertyAssignments */); - var propertyAssignments = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.objectLiteralExpression(openBraceToken, propertyAssignments, closeBraceToken); - }; - - ParserImpl.prototype.parsePropertyAssignment = function (inErrorRecovery) { - if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(true); - } else if (this.isFunctionPropertyAssignment(inErrorRecovery)) { - return this.parseFunctionPropertyAssignment(); - } else if (this.isSimplePropertyAssignment(inErrorRecovery)) { - return this.parseSimplePropertyAssignment(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isPropertyAssignment = function (inErrorRecovery) { - return this.isAccessor(inErrorRecovery) || this.isFunctionPropertyAssignment(inErrorRecovery) || this.isSimplePropertyAssignment(inErrorRecovery); - }; - - ParserImpl.prototype.eatPropertyName = function () { - return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.currentToken()) ? this.eatIdentifierNameToken() : this.eatAnyToken(); - }; - - ParserImpl.prototype.isFunctionPropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery) && this.isCallSignature(1); - }; - - ParserImpl.prototype.parseFunctionPropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionPropertyAssignment(propertyName, callSignature, block); - }; - - ParserImpl.prototype.isSimplePropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseSimplePropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var colonToken = this.eatToken(106 /* ColonToken */); - var expression = this.parseAssignmentExpression(true); - - return this.factory.simplePropertyAssignment(propertyName, colonToken, expression); - }; - - ParserImpl.prototype.isPropertyName = function (token, inErrorRecovery) { - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - if (inErrorRecovery) { - return this.isIdentifier(token); - } else { - return true; - } - } - - switch (token.tokenKind) { - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseArrayLiteralExpression = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - - var result = this.parseSeparatedSyntaxList(65536 /* ArrayLiteralExpression_AssignmentExpressions */); - var expressions = result.list; - openBracketToken = this.addSkippedTokensAfterToken(openBracketToken, result.skippedTokens); - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.arrayLiteralExpression(openBracketToken, expressions, closeBracketToken); - }; - - ParserImpl.prototype.parseLiteralExpression = function () { - return this.eatAnyToken(); - }; - - ParserImpl.prototype.parseThisExpression = function () { - return this.eatKeyword(35 /* ThisKeyword */); - }; - - ParserImpl.prototype.parseBlock = function (parseBlockEvenWithNoOpenBrace, checkForStrictMode) { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var statements = TypeScript.Syntax.emptyList; - - if (parseBlockEvenWithNoOpenBrace || openBraceToken.width() > 0) { - var savedIsInStrictMode = this.isInStrictMode; - - var processItems = checkForStrictMode ? ParserImpl.updateStrictModeState : null; - var result = this.parseSyntaxList(32 /* Block_Statements */, processItems); - statements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - this.setStrictMode(savedIsInStrictMode); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.block(openBraceToken, statements, closeBraceToken); - }; - - ParserImpl.prototype.parseCallSignature = function (requireCompleteTypeParameterList) { - var typeParameterList = this.parseOptionalTypeParameterList(requireCompleteTypeParameterList); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.callSignature(typeParameterList, parameterList, typeAnnotation); - }; - - ParserImpl.prototype.parseOptionalTypeParameterList = function (requireCompleteTypeParameterList) { - if (this.currentToken().tokenKind !== 80 /* LessThanToken */) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var lessThanToken = this.eatToken(80 /* LessThanToken */); - - var result = this.parseSeparatedSyntaxList(524288 /* TypeParameterList_TypeParameters */); - var typeParameters = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeParameterList = this.factory.typeParameterList(lessThanToken, typeParameters, greaterThanToken); - - return typeParameterList; - } - }; - - ParserImpl.prototype.isTypeParameter = function () { - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.parseTypeParameter = function () { - var identifier = this.eatIdentifierToken(); - var constraint = this.parseOptionalConstraint(); - - return this.factory.typeParameter(identifier, constraint); - }; - - ParserImpl.prototype.parseOptionalConstraint = function () { - if (this.currentToken().kind() !== 48 /* ExtendsKeyword */) { - return null; - } - - var extendsKeyword = this.eatKeyword(48 /* ExtendsKeyword */); - var type = this.parseType(); - - return this.factory.constraint(extendsKeyword, type); - }; - - ParserImpl.prototype.parseParameterList = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var parameters = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(131072 /* ParameterList_Parameters */); - parameters = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - return this.factory.parameterList(openParenToken, parameters, closeParenToken); - }; - - ParserImpl.prototype.isTypeAnnotation = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseOptionalTypeAnnotation = function (allowStringLiteral) { - return this.isTypeAnnotation() ? this.parseTypeAnnotation(allowStringLiteral) : null; - }; - - ParserImpl.prototype.parseTypeAnnotation = function (allowStringLiteral) { - var colonToken = this.eatToken(106 /* ColonToken */); - var type = allowStringLiteral && this.currentToken().tokenKind === 14 /* StringLiteral */ ? this.eatToken(14 /* StringLiteral */) : this.parseType(); - - return this.factory.typeAnnotation(colonToken, type); - }; - - ParserImpl.prototype.isType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 39 /* TypeOfKeyword */: - - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - - case 70 /* OpenBraceToken */: - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - - case 31 /* NewKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - var type = this.parseNonArrayType(currentToken); - - while (this.currentToken().tokenKind === 74 /* OpenBracketToken */) { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - type = this.factory.arrayType(type, openBracketToken, closeBracketToken); - } - - return type; - }; - - ParserImpl.prototype.isTypeQuery = function () { - return this.currentToken().tokenKind === 39 /* TypeOfKeyword */; - }; - - ParserImpl.prototype.parseTypeQuery = function () { - var typeOfKeyword = this.eatToken(39 /* TypeOfKeyword */); - var name = this.parseName(); - - return this.factory.typeQuery(typeOfKeyword, name); - }; - - ParserImpl.prototype.parseNonArrayType = function (currentToken) { - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - return this.eatAnyToken(); - - case 70 /* OpenBraceToken */: - return this.parseObjectType(); - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - return this.parseFunctionType(); - - case 31 /* NewKeyword */: - return this.parseConstructorType(); - - case 39 /* TypeOfKeyword */: - return this.parseTypeQuery(); - } - - return this.parseNameOrGenericType(); - }; - - ParserImpl.prototype.parseNameOrGenericType = function () { - var name = this.parseName(); - var typeArgumentList = this.tryParseTypeArgumentList(false); - - return typeArgumentList === null ? name : this.factory.genericType(name, typeArgumentList); - }; - - ParserImpl.prototype.parseFunctionType = function () { - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var returnType = this.parseType(); - - return this.factory.functionType(typeParameterList, parameterList, equalsGreaterThanToken, returnType); - }; - - ParserImpl.prototype.parseConstructorType = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var type = this.parseType(); - - return this.factory.constructorType(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type); - }; - - ParserImpl.prototype.isParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return true; - } - - var token = this.currentToken(); - var tokenKind = token.tokenKind; - if (tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - if (ParserImpl.isModifier(token) && !this.isModifierUsedAsParameterIdentifier(token)) { - return true; - } - - return this.isIdentifier(token); - }; - - ParserImpl.prototype.isModifierUsedAsParameterIdentifier = function (token) { - if (this.isIdentifier(token)) { - var nextTokenKind = this.peekToken(1).tokenKind; - switch (nextTokenKind) { - case 73 /* CloseParenToken */: - case 106 /* ColonToken */: - case 107 /* EqualsToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return this.eatNode(); - } - - var dotDotDotToken = this.tryEatToken(77 /* DotDotDotToken */); - - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (ParserImpl.isModifier(currentToken) && !this.isModifierUsedAsParameterIdentifier(currentToken)) { - modifierArray.push(this.eatAnyToken()); - continue; - } - - break; - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var identifier = this.eatIdentifierToken(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(true); - - var equalsValueClause = null; - if (this.isEqualsValueClause(true)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.parseSyntaxList = function (currentListType, processItems) { - if (typeof processItems === "undefined") { processItems = null; } - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSyntaxListWorker(currentListType, processItems); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.parseSeparatedSyntaxList = function (currentListType) { - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSeparatedSyntaxListWorker(currentListType); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.abortParsingListOrMoveToNextToken = function (currentListType, items, skippedTokens) { - this.reportUnexpectedTokenDiagnostic(currentListType); - - for (var state = 524288 /* LastListParsingState */; state >= 1 /* FirstListParsingState */; state >>= 1) { - if ((this.listParsingState & state) !== 0) { - if (this.isExpectedListTerminator(state) || this.isExpectedListItem(state, true)) { - return true; - } - } - } - - var skippedToken = this.currentToken(); - - this.moveToNextToken(); - - this.addSkippedTokenToList(items, skippedTokens, skippedToken); - - return false; - }; - - ParserImpl.prototype.addSkippedTokenToList = function (items, skippedTokens, skippedToken) { - for (var i = items.length - 1; i >= 0; i--) { - var item = items[i]; - var lastToken = item.lastToken(); - if (lastToken.fullWidth() > 0) { - items[i] = this.addSkippedTokenAfterNodeOrToken(item, skippedToken); - return; - } - } - - skippedTokens.push(skippedToken); - }; - - ParserImpl.prototype.tryParseExpectedListItem = function (currentListType, inErrorRecovery, items, processItems) { - if (this.isExpectedListItem(currentListType, inErrorRecovery)) { - var item = this.parseExpectedListItem(currentListType, inErrorRecovery); - - items.push(item); - - if (processItems !== null) { - processItems(this, items); - } - } - }; - - ParserImpl.prototype.listIsTerminated = function (currentListType) { - return this.isExpectedListTerminator(currentListType) || this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.getArray = function () { - if (this.arrayPool.length > 0) { - return this.arrayPool.pop(); - } - - return []; - }; - - ParserImpl.prototype.returnZeroOrOneLengthArray = function (array) { - if (array.length <= 1) { - this.returnArray(array); - } - }; - - ParserImpl.prototype.returnArray = function (array) { - array.length = 0; - this.arrayPool.push(array); - }; - - ParserImpl.prototype.parseSyntaxListWorker = function (currentListType, processItems) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - - while (true) { - var oldItemsCount = items.length; - this.tryParseExpectedListItem(currentListType, false, items, processItems); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } - } - } - - var result = TypeScript.Syntax.list(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.parseSeparatedSyntaxListWorker = function (currentListType) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - TypeScript.Debug.assert(items.length === 0); - TypeScript.Debug.assert(skippedTokens.length === 0); - TypeScript.Debug.assert(skippedTokens !== items); - - var separatorKind = this.separatorKind(currentListType); - var allowAutomaticSemicolonInsertion = separatorKind === 78 /* SemicolonToken */; - - var inErrorRecovery = false; - var listWasTerminated = false; - while (true) { - var oldItemsCount = items.length; - - this.tryParseExpectedListItem(currentListType, inErrorRecovery, items, null); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } else { - inErrorRecovery = true; - continue; - } - } - - inErrorRecovery = false; - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === separatorKind || currentToken.tokenKind === 79 /* CommaToken */) { - items.push(this.eatAnyToken()); - continue; - } - - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - if (allowAutomaticSemicolonInsertion && this.canEatAutomaticSemicolon(false)) { - items.push(this.eatExplicitOrAutomaticSemicolon(false)); - - continue; - } - - items.push(this.eatToken(separatorKind)); - - inErrorRecovery = true; - } - - var result = TypeScript.Syntax.separatedList(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.separatorKind = function (currentListType) { - switch (currentListType) { - case 2048 /* HeritageClause_TypeNameList */: - case 16384 /* ArgumentList_AssignmentExpressions */: - case 256 /* EnumDeclaration_EnumElements */: - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - case 131072 /* ParameterList_Parameters */: - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - case 262144 /* TypeArgumentList_Types */: - case 524288 /* TypeParameterList_TypeParameters */: - return 79 /* CommaToken */; - - case 512 /* ObjectType_TypeMembers */: - return 78 /* SemicolonToken */; - - case 1 /* SourceUnit_ModuleElements */: - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - case 2 /* ClassDeclaration_ClassElements */: - case 4 /* ModuleDeclaration_ModuleElements */: - case 8 /* SwitchStatement_SwitchClauses */: - case 16 /* SwitchClause_Statements */: - case 32 /* Block_Statements */: - default: - throw TypeScript.Errors.notYetImplemented(); - } - }; - - ParserImpl.prototype.reportUnexpectedTokenDiagnostic = function (listType) { - var token = this.currentToken(); - - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [this.getExpectedListElementType(listType)]); - this.addDiagnostic(diagnostic); - }; - - ParserImpl.prototype.addDiagnostic = function (diagnostic) { - if (this.diagnostics.length > 0 && this.diagnostics[this.diagnostics.length - 1].start() === diagnostic.start()) { - return; - } - - this.diagnostics.push(diagnostic); - }; - - ParserImpl.prototype.isExpectedListTerminator = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isExpectedSourceUnit_ModuleElementsTerminator(); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isExpectedClassDeclaration_ClassElementsTerminator(); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isExpectedModuleDeclaration_ModuleElementsTerminator(); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isExpectedSwitchStatement_SwitchClausesTerminator(); - - case 16 /* SwitchClause_Statements */: - return this.isExpectedSwitchClause_StatementsTerminator(); - - case 32 /* Block_Statements */: - return this.isExpectedBlock_StatementsTerminator(); - - case 64 /* TryBlock_Statements */: - return this.isExpectedTryBlock_StatementsTerminator(); - - case 128 /* CatchBlock_Statements */: - return this.isExpectedCatchBlock_StatementsTerminator(); - - case 256 /* EnumDeclaration_EnumElements */: - return this.isExpectedEnumDeclaration_EnumElementsTerminator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isExpectedObjectType_TypeMembersTerminator(); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpressionsTerminator(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isExpectedHeritageClause_TypeNameListTerminator(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator(); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); - - case 131072 /* ParameterList_Parameters */: - return this.isExpectedParameterList_ParametersTerminator(); - - case 262144 /* TypeArgumentList_Types */: - return this.isExpectedTypeArgumentList_TypesTerminator(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isExpectedTypeParameterList_TypeParametersTerminator(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isExpectedLiteralExpression_AssignmentExpressionsTerminator(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedSourceUnit_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.isExpectedEnumDeclaration_EnumElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedModuleDeclaration_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectType_TypeMembersTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedLiteralExpression_AssignmentExpressionsTerminator = function () { - return this.currentToken().tokenKind === 75 /* CloseBracketToken */; - }; - - ParserImpl.prototype.isExpectedTypeArgumentList_TypesTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (this.canFollowTypeArgumentListInExpression(token.tokenKind)) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedTypeParameterList_TypeParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (token.tokenKind === 72 /* OpenParenToken */ || token.tokenKind === 70 /* OpenBraceToken */ || token.tokenKind === 48 /* ExtendsKeyword */ || token.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedParameterList_ParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (token.tokenKind === 70 /* OpenBraceToken */) { - return true; - } - - if (token.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator = function () { - if (this.currentToken().tokenKind === 78 /* SemicolonToken */ || this.currentToken().tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator = function () { - if (this.previousToken().tokenKind === 79 /* CommaToken */) { - return false; - } - - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.canEatExplicitOrAutomaticSemicolon(false); - }; - - ParserImpl.prototype.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 70 /* OpenBraceToken */ || token0.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedHeritageClause_TypeNameListTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - if (this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpressionsTerminator = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 73 /* CloseParenToken */ || token0.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.isExpectedClassDeclaration_ClassElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchStatement_SwitchClausesTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchClause_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */ || this.isSwitchClause(); - }; - - ParserImpl.prototype.isExpectedBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedTryBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */ || this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedCatchBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.isStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.isStatement(inErrorRecovery); - - case 64 /* TryBlock_Statements */: - case 128 /* CatchBlock_Statements */: - return false; - - case 256 /* EnumDeclaration_EnumElements */: - return this.isEnumElement(inErrorRecovery); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isVariableDeclarator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpression(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isHeritageClauseTypeName(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isPropertyAssignment(inErrorRecovery); - - case 131072 /* ParameterList_Parameters */: - return this.isParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.isType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isTypeParameter(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isAssignmentOrOmittedExpression(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpression = function () { - var currentToken = this.currentToken(); - if (this.isExpression(currentToken)) { - return true; - } - - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.parseExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.parseHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.parseClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.parseSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.parseStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.parseStatement(inErrorRecovery); - - case 256 /* EnumDeclaration_EnumElements */: - return this.parseEnumElement(); - - case 512 /* ObjectType_TypeMembers */: - return this.parseTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.parseAssignmentExpression(true); - - case 2048 /* HeritageClause_TypeNameList */: - return this.parseNameOrGenericType(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.parseVariableDeclarator(true, false); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.parseVariableDeclarator(false, false); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.parsePropertyAssignment(inErrorRecovery); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.parseAssignmentOrOmittedExpression(); - - case 131072 /* ParameterList_Parameters */: - return this.parseParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.parseType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.parseTypeParameter(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.getExpectedListElementType = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return '{'; - - case 2 /* ClassDeclaration_ClassElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null); - - case 4 /* ModuleDeclaration_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 8 /* SwitchStatement_SwitchClauses */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null); - - case 16 /* SwitchClause_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 32 /* Block_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 256 /* EnumDeclaration_EnumElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 512 /* ObjectType_TypeMembers */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - case 2048 /* HeritageClause_TypeNameList */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null); - - case 131072 /* ParameterList_Parameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); - - case 262144 /* TypeArgumentList_Types */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null); - - case 524288 /* TypeParameterList_TypeParameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - return ParserImpl; - })(); - - function parse(fileName, text, isDeclaration, options) { - var source = new NormalParserSource(fileName, text, options.languageVersion()); - - return new ParserImpl(fileName, text.lineMap(), source, options, text).parseSyntaxTree(isDeclaration); - } - Parser.parse = parse; - - function incrementalParse(oldSyntaxTree, textChangeRange, newText) { - if (textChangeRange.isUnchanged()) { - return oldSyntaxTree; - } - - var source = new IncrementalParserSource(oldSyntaxTree, textChangeRange, newText); - - return new ParserImpl(oldSyntaxTree.fileName(), newText.lineMap(), source, oldSyntaxTree.parseOptions(), newText).parseSyntaxTree(oldSyntaxTree.isDeclaration()); - } - Parser.incrementalParse = incrementalParse; - })(TypeScript.Parser || (TypeScript.Parser = {})); - var Parser = TypeScript.Parser; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTree = (function () { - function SyntaxTree(sourceUnit, isDeclaration, diagnostics, fileName, lineMap, parseOtions) { - this._allDiagnostics = null; - this._sourceUnit = sourceUnit; - this._isDeclaration = isDeclaration; - this._parserDiagnostics = diagnostics; - this._fileName = fileName; - this._lineMap = lineMap; - this._parseOptions = parseOtions; - } - SyntaxTree.prototype.toJSON = function (key) { - var result = {}; - - result.isDeclaration = this._isDeclaration; - result.languageVersion = TypeScript.LanguageVersion[this._parseOptions.languageVersion()]; - result.parseOptions = this._parseOptions; - - if (this.diagnostics().length > 0) { - result.diagnostics = this.diagnostics(); - } - - result.sourceUnit = this._sourceUnit; - result.lineMap = this._lineMap; - - return result; - }; - - SyntaxTree.prototype.sourceUnit = function () { - return this._sourceUnit; - }; - - SyntaxTree.prototype.isDeclaration = function () { - return this._isDeclaration; - }; - - SyntaxTree.prototype.computeDiagnostics = function () { - if (this._parserDiagnostics.length > 0) { - return this._parserDiagnostics; - } - - var diagnostics = []; - this.sourceUnit().accept(new GrammarCheckerWalker(this, diagnostics)); - - return diagnostics; - }; - - SyntaxTree.prototype.diagnostics = function () { - if (this._allDiagnostics === null) { - this._allDiagnostics = this.computeDiagnostics(); - } - - return this._allDiagnostics; - }; - - SyntaxTree.prototype.fileName = function () { - return this._fileName; - }; - - SyntaxTree.prototype.lineMap = function () { - return this._lineMap; - }; - - SyntaxTree.prototype.parseOptions = function () { - return this._parseOptions; - }; - - SyntaxTree.prototype.structuralEquals = function (tree) { - return TypeScript.ArrayUtilities.sequenceEquals(this.diagnostics(), tree.diagnostics(), TypeScript.Diagnostic.equals) && this.sourceUnit().structuralEquals(tree.sourceUnit()); - }; - return SyntaxTree; - })(); - TypeScript.SyntaxTree = SyntaxTree; - - var GrammarCheckerWalker = (function (_super) { - __extends(GrammarCheckerWalker, _super); - function GrammarCheckerWalker(syntaxTree, diagnostics) { - _super.call(this); - this.syntaxTree = syntaxTree; - this.diagnostics = diagnostics; - this.inAmbientDeclaration = false; - this.inBlock = false; - this.inObjectLiteralExpression = false; - this.currentConstructor = null; - } - GrammarCheckerWalker.prototype.childFullStart = function (parent, child) { - return this.position() + TypeScript.Syntax.childOffset(parent, child); - }; - - GrammarCheckerWalker.prototype.childStart = function (parent, child) { - return this.childFullStart(parent, child) + child.leadingTriviaWidth(); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic = function (start, length, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start, length, diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic1 = function (elementFullStart, element, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), elementFullStart + element.leadingTriviaWidth(), element.width(), diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.visitCatchClause = function (node) { - if (node.typeAnnotation) { - this.pushDiagnostic(this.childStart(node, node.typeAnnotation), node.typeAnnotation.width(), TypeScript.DiagnosticCode.Catch_clause_parameter_cannot_have_a_type_annotation); - } - - _super.prototype.visitCatchClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkParameterListOrder = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - var seenOptionalParameter = false; - var parameterCount = node.parameters.nonSeparatorCount(); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameterIndex = i / 2; - var parameter = node.parameters.childAt(i); - - if (parameter.dotDotDotToken) { - if (parameterIndex !== (parameterCount - 1)) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_must_be_last_in_list); - return true; - } - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_have_an_initializer); - return true; - } - } else if (parameter.questionToken || parameter.equalsValueClause) { - seenOptionalParameter = true; - - if (parameter.questionToken && parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer); - return true; - } - } else { - if (seenOptionalParameter) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Required_parameter_cannot_follow_optional_parameter); - return true; - } - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterListAcessibilityModifiers = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameter = node.parameters.childAt(i); - - if (this.checkParameterAccessibilityModifiers(node, parameter, parameterFullStart)) { - return true; - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifiers = function (parameterList, parameter, parameterFullStart) { - if (parameter.modifiers.childCount() > 0) { - var modifiers = parameter.modifiers; - var modifierFullStart = parameterFullStart + TypeScript.Syntax.childOffset(parameter, modifiers); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - - if (this.checkParameterAccessibilityModifier(parameterList, modifier, modifierFullStart, i)) { - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierFullStart, modifierIndex) { - if (modifier.tokenKind !== 57 /* PublicKeyword */ && modifier.tokenKind !== 55 /* PrivateKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]); - return true; - } else { - if (modifierIndex > 0) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (!this.inAmbientDeclaration && this.currentConstructor && !this.currentConstructor.block && this.currentConstructor.callSignature.parameterList === parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_cannot_be_used_in_a_constructor_overload); - return true; - } else if (this.inAmbientDeclaration || this.currentConstructor === null || this.currentConstructor.callSignature.parameterList !== parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForTrailingSeparator = function (parent, list) { - if (list.childCount() === 0 || list.childCount() % 2 === 1) { - return false; - } - - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i === n - 1) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode.Trailing_separator_not_allowed); - } - - currentElementFullStart += child.fullWidth(); - } - - return true; - }; - - GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, expected) { - if (list.childCount() > 0) { - return false; - } - - var listFullStart = this.childFullStart(parent, list); - var tokenAtStart = this.syntaxTree.sourceUnit().findToken(listFullStart); - - this.pushDiagnostic1(listFullStart, tokenAtStart.token(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [expected]); - - return true; - }; - - GrammarCheckerWalker.prototype.visitParameterList = function (node) { - if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingSeparator(node, node.parameters)) { - this.skip(node); - return; - } - - _super.prototype.visitParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitHeritageClause = function (node) { - if (this.checkForTrailingSeparator(node, node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null))) { - this.skip(node); - return; - } - - _super.prototype.visitHeritageClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.arguments)) { - this.skip(node); - return; - } - - _super.prototype.visitArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) { - if (this.checkForTrailingSeparator(node, node.variableDeclarators) || this.checkForAtLeastOneElement(node, node.variableDeclarators, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameter); - var parameter = node.parameter; - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters); - return true; - } else if (parameter.modifiers.childCount() > 0) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers); - return true; - } else if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark); - return true; - } else if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer); - return true; - } else if (!parameter.typeAnnotation) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation); - return true; - } else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexSignature = function (node) { - if (this.checkIndexSignatureParameter(node)) { - this.skip(node); - return; - } - - if (!node.typeAnnotation) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation); - this.skip(node); - return; - } - - _super.prototype.visitIndexSignature.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - var seenImplementsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 2); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause); - return true; - } - - if (heritageClause.typeNames.nonSeparatorCount() > 1) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen); - return true; - } - - seenImplementsClause = true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) { - if (this.inAmbientDeclaration) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_for_code_already_in_an_ambient_context); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, typeKeyword, modifiers) { - if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) { - if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - this.pushDiagnostic1(this.childFullStart(moduleElement, typeKeyword), typeKeyword.firstToken(), TypeScript.DiagnosticCode.declare_modifier_required_for_top_level_element); - return true; - } - } - }; - - GrammarCheckerWalker.prototype.checkFunctionOverloads = function (node, moduleElements) { - if (!this.inAmbientDeclaration && !this.syntaxTree.isDeclaration()) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - - var inFunctionOverloadChain = false; - var functionOverloadChainName = null; - - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - var lastElement = i === (n - 1); - - if (inFunctionOverloadChain) { - if (moduleElement.kind() !== 129 /* FunctionDeclaration */) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - var functionDeclaration = moduleElement; - if (functionDeclaration.identifier.valueText() !== functionOverloadChainName) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - } - - if (moduleElement.kind() === 129 /* FunctionDeclaration */) { - functionDeclaration = moduleElement; - if (!TypeScript.SyntaxUtilities.containsToken(functionDeclaration.modifiers, 63 /* DeclareKeyword */)) { - inFunctionOverloadChain = functionDeclaration.block === null; - functionOverloadChainName = functionDeclaration.identifier.valueText(); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = moduleElements.childAt(i + 1); - if (nextElement.kind() === 129 /* FunctionDeclaration */) { - var nextFunction = nextElement; - - if (nextFunction.identifier.valueText() !== functionOverloadChainName && nextFunction.block === null) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else { - inFunctionOverloadChain = false; - functionOverloadChainName = ""; - } - } - - moduleElementFullStart += moduleElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkClassOverloads = function (node) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var classElementFullStart = this.childFullStart(node, node.classElements); - - var inFunctionOverloadChain = false; - var inConstructorOverloadChain = false; - - var functionOverloadChainName = null; - var isInStaticOverloadChain = null; - var memberFunctionDeclaration = null; - - for (var i = 0, n = node.classElements.childCount(); i < n; i++) { - var classElement = node.classElements.childAt(i); - var lastElement = i === (n - 1); - var isStaticOverload = null; - - if (inFunctionOverloadChain) { - if (classElement.kind() !== 135 /* MemberFunctionDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - memberFunctionDeclaration = classElement; - if (memberFunctionDeclaration.propertyName.valueText() !== functionOverloadChainName) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - - isStaticOverload = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - if (isStaticOverload !== isInStaticOverloadChain) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - var diagnostic = isInStaticOverloadChain ? TypeScript.DiagnosticCode.Function_overload_must_be_static : TypeScript.DiagnosticCode.Function_overload_must_not_be_static; - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, diagnostic, null); - return true; - } - } else if (inConstructorOverloadChain) { - if (classElement.kind() !== 137 /* ConstructorDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - if (classElement.kind() === 135 /* MemberFunctionDeclaration */) { - memberFunctionDeclaration = classElement; - - inFunctionOverloadChain = memberFunctionDeclaration.block === null; - functionOverloadChainName = memberFunctionDeclaration.propertyName.valueText(); - isInStaticOverloadChain = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = node.classElements.childAt(i + 1); - if (nextElement.kind() === 135 /* MemberFunctionDeclaration */) { - var nextMemberFunction = nextElement; - - if (nextMemberFunction.propertyName.valueText() !== functionOverloadChainName && nextMemberFunction.block === null) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else if (classElement.kind() === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = classElement; - - inConstructorOverloadChain = constructorDeclaration.block === null; - if (lastElement && inConstructorOverloadChain) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - classElementFullStart += classElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForReservedName = function (parent, name, diagnosticKey) { - var nameFullStart = this.childFullStart(parent, name); - var token; - var tokenFullStart; - - var current = name; - while (current !== null) { - if (current.kind() === 121 /* QualifiedName */) { - var qualifiedName = current; - token = qualifiedName.right; - tokenFullStart = nameFullStart + this.childFullStart(qualifiedName, token); - current = qualifiedName.left; - } else { - TypeScript.Debug.assert(current.kind() === 11 /* IdentifierName */); - token = current; - tokenFullStart = nameFullStart; - current = null; - } - - switch (token.valueText()) { - case "any": - case "number": - case "boolean": - case "string": - case "void": - this.pushDiagnostic(tokenFullStart + token.leadingTriviaWidth(), token.width(), diagnosticKey, [token.valueText()]); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Class_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.classKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node) || this.checkClassOverloads(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitClassDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 1); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause); - return true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) { - var modifierFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.declare_modifier_cannot_appear_on_an_interface_declaration); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Interface_name_cannot_be_0) || this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) { - this.skip(node); - return; - } - - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) { - var modifierFullStart = this.position(); - - var seenAccessibilityModifier = false; - var seenStaticModifier = false; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var modifier = list.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */) { - if (seenAccessibilityModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (seenStaticModifier) { - var previousToken = list.childAt(i - 1); - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]); - return true; - } - - seenAccessibilityModifier = true; - } else if (modifier.tokenKind === 58 /* StaticKeyword */) { - if (seenStaticModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return true; - } - - seenStaticModifier = true; - } else { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node, getKeyword, parameterList) { - var getKeywordFullStart = this.childFullStart(node, getKeyword); - if (parameterList.parameters.childCount() !== 0) { - this.pushDiagnostic1(getKeywordFullStart, getKeyword, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) { - if (this.checkIndexMemberModifiers(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIndexMemberDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) { - if (node.modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(node, node.modifiers); - this.pushDiagnostic1(modifierFullStart, node.modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, node, languageVersion, diagnosticKey) { - if (this.syntaxTree.parseOptions().languageVersion() < languageVersion) { - var nodeFullStart = this.childFullStart(parent, node); - this.pushDiagnostic1(nodeFullStart, node, diagnosticKey); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - GrammarCheckerWalker.prototype.visitGetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.getKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkGetAccessorParameter(node, node.getKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitGetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) { - if (this.inAmbientDeclaration) { - this.pushDiagnostic1(this.position(), accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts, null); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node, setKeyword, parameterList) { - var setKeywordFullStart = this.childFullStart(node, setKeyword); - if (parameterList.parameters.childCount() !== 1) { - this.pushDiagnostic1(setKeywordFullStart, setKeyword, TypeScript.DiagnosticCode.set_accessor_must_have_one_and_only_one_parameter); - return true; - } - - var parameterListFullStart = this.childFullStart(node, parameterList); - var parameterFullStart = parameterListFullStart + TypeScript.Syntax.childOffset(parameterList, parameterList.openParenToken); - var parameter = parameterList.parameters.childAt(0); - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer); - return true; - } - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.setKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkSetAccessorParameter(node, node.setKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitSetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Enum_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.enumKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitEnumDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkEnumElements = function (node) { - var enumElementFullStart = this.childFullStart(node, node.enumElements); - - var previousValueWasComputed = false; - for (var i = 0, n = node.enumElements.childCount(); i < n; i++) { - var child = node.enumElements.childAt(i); - - if (i % 2 === 0) { - var enumElement = child; - - if (!enumElement.equalsValueClause && previousValueWasComputed) { - this.pushDiagnostic1(enumElementFullStart, enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer, null); - return true; - } - - if (enumElement.equalsValueClause) { - var value = enumElement.equalsValueClause.value; - previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value); - } - } - - enumElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitEnumElement = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - var expression = node.equalsValueClause.value; - if (!TypeScript.Syntax.isIntegerLiteral(expression)) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers); - this.skip(node); - return; - } - } - - _super.prototype.visitEnumElement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) { - if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments); - } - - _super.prototype.visitInvocationExpression.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) { - var modifierFullStart = this.position(); - var seenExportModifier = false; - var seenDeclareModifier = false; - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */ || modifier.tokenKind === 58 /* StaticKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]); - return true; - } - - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return; - } - - seenDeclareModifier = true; - } else if (modifier.tokenKind === 47 /* ExportKeyword */) { - if (seenExportModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return; - } - - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]); - return; - } - - seenExportModifier = true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) { - var currentElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - if (child.kind() === 133 /* ImportDeclaration */) { - var importDeclaration = child; - if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (node.stringLiteral === null) { - this.pushDiagnostic1(currentElementFullStart, importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module, null); - } - } - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_on_import_declaration); - return true; - } - }; - - GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitImportDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) { - if (this.checkForReservedName(node, node.name, TypeScript.DiagnosticCode.Module_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.moduleKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (!TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */) && this.checkFunctionOverloads(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (node.stringLiteral) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var stringLiteralFullStart = this.childFullStart(node, node.stringLiteral); - this.pushDiagnostic1(stringLiteralFullStart, node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names); - this.skip(node); - return; - } - } - - if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitModuleDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExports = function (node, moduleElements) { - var seenExportedElement = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (TypeScript.SyntaxUtilities.hasExportKeyword(child)) { - seenExportedElement = true; - break; - } - } - - var moduleElementFullStart = this.childFullStart(node, moduleElements); - if (seenExportedElement) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_not_allowed_in_module_with_exported_element); - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForMultipleExportAssignments = function (node, moduleElements) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - var seenExportAssignment = false; - var errorFound = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - if (child.kind() === 134 /* ExportAssignment */) { - if (seenExportAssignment) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Module_cannot_have_multiple_export_assignments); - errorFound = true; - } - seenExportAssignment = true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return errorFound; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) { - var moduleElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules); - - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBlock = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Implementations_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - if (this.checkFunctionOverloads(node, node.statements)) { - this.skip(node); - return; - } - - var savedInBlock = this.inBlock; - this.inBlock = true; - _super.prototype.visitBlock.call(this, node); - this.inBlock = savedInBlock; - }; - - GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBreakStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitBreakStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitContinueStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitContinueStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDebuggerStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDoStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDoStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitEmptyStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitExpressionStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitForInStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForInStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) { - if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.nonSeparatorCount() > 1) { - var variableDeclarationFullStart = this.childFullStart(node, node.variableDeclaration); - - this.pushDiagnostic1(variableDeclarationFullStart, node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitForStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitIfStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIfStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitLabeledStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitReturnStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitReturnStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitSwitchStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitThrowStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitThrowStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTryStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitTryStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWhileStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWhileStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWithStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWithStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) { - if (this.inBlock || this.inObjectLiteralExpression) { - if (modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(parent, modifiers); - this.pushDiagnostic1(modifierFullStart, modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.functionKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitFunctionDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableStatement = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitVariableStatement.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) { - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i % 2 === 1 && child.kind() !== kind) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]); - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectType = function (node) { - if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitObjectType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitArrayType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitArrayType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitFunctionType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitFunctionType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitConstructorType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitConstructorType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclarator.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) { - this.skip(node); - return; - } - - var savedCurrentConstructor = this.currentConstructor; - this.currentConstructor = node; - _super.prototype.visitConstructorDeclaration.call(this, node); - this.currentConstructor = savedCurrentConstructor; - }; - - GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) { - var currentElementFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var child = modifiers.childAt(i); - if (child.kind() !== 57 /* PublicKeyword */) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]); - return true; - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeParameterList) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeParameterListFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(callSignatureFullStart, node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeAnnotation) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeAnnotationFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(typeAnnotationFullStart, node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSourceUnit = function (node) { - if (this.checkFunctionOverloads(node, node.moduleElements) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - _super.prototype.visitSourceUnit.call(this, node); - }; - return GrammarCheckerWalker; - })(TypeScript.PositionTrackingWalker); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Unicode = (function () { - function Unicode() { - } - Unicode.lookupInUnicodeMap = function (code, map) { - if (code < map[0]) { - return false; - } - - var lo = 0; - var hi = map.length; - var mid; - - while (lo + 1 < hi) { - mid = lo + (hi - lo) / 2; - - mid -= mid % 2; - if (map[mid] <= code && code <= map[mid + 1]) { - return true; - } - - if (code < map[mid]) { - hi = mid; - } else { - lo = mid + 2; - } - } - - return false; - }; - - Unicode.isIdentifierStart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - - Unicode.isIdentifierPart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - - Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - return Unicode; - })(); - TypeScript.Unicode = Unicode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CompilerDiagnostics) { - CompilerDiagnostics.debug = false; - - CompilerDiagnostics.diagnosticWriter = null; - - CompilerDiagnostics.analysisPass = 0; - - function Alert(output) { - if (CompilerDiagnostics.diagnosticWriter) { - CompilerDiagnostics.diagnosticWriter.Alert(output); - } - } - CompilerDiagnostics.Alert = Alert; - - function debugPrint(s) { - if (CompilerDiagnostics.debug) { - Alert(s); - } - } - CompilerDiagnostics.debugPrint = debugPrint; - - function assert(condition, s) { - if (CompilerDiagnostics.debug) { - if (!condition) { - Alert(s); - } - } - } - CompilerDiagnostics.assert = assert; - })(TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {})); - var CompilerDiagnostics = TypeScript.CompilerDiagnostics; - - var NullLogger = (function () { - function NullLogger() { - } - NullLogger.prototype.information = function () { - return false; - }; - NullLogger.prototype.debug = function () { - return false; - }; - NullLogger.prototype.warning = function () { - return false; - }; - NullLogger.prototype.error = function () { - return false; - }; - NullLogger.prototype.fatal = function () { - return false; - }; - NullLogger.prototype.log = function (s) { - }; - return NullLogger; - })(); - TypeScript.NullLogger = NullLogger; - - function timeFunction(logger, funcDescription, func) { - var start = (new Date()).getTime(); - var result = func(); - var end = (new Date()).getTime(); - if (logger.information()) { - logger.log(funcDescription + " completed in " + (end - start) + " msec"); - } - return result; - } - TypeScript.timeFunction = timeFunction; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Document = (function () { - function Document(_compiler, _semanticInfoChain, fileName, referencedFiles, _scriptSnapshot, byteOrderMark, version, isOpen, _syntaxTree, _topLevelDecl) { - this._compiler = _compiler; - this._semanticInfoChain = _semanticInfoChain; - this.fileName = fileName; - this.referencedFiles = referencedFiles; - this._scriptSnapshot = _scriptSnapshot; - this.byteOrderMark = byteOrderMark; - this.version = version; - this.isOpen = isOpen; - this._syntaxTree = _syntaxTree; - this._topLevelDecl = _topLevelDecl; - this._diagnostics = null; - this._bloomFilter = null; - this._sourceUnit = null; - this._lineMap = null; - this._declASTMap = []; - this._astDeclMap = []; - this._amdDependencies = undefined; - this._externalModuleIndicatorSpan = undefined; - } - Document.prototype.invalidate = function () { - this._declASTMap.length = 0; - this._astDeclMap.length = 0; - this._topLevelDecl = null; - - this._syntaxTree = null; - this._sourceUnit = null; - this._diagnostics = null; - this._bloomFilter = null; - }; - - Document.prototype.isDeclareFile = function () { - return TypeScript.isDTSFile(this.fileName); - }; - - Document.prototype.cacheSyntaxTreeInfo = function (syntaxTree) { - var start = new Date().getTime(); - this._diagnostics = syntaxTree.diagnostics(); - TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start; - - this._lineMap = syntaxTree.lineMap(); - - var sourceUnit = syntaxTree.sourceUnit(); - var leadingTrivia = sourceUnit.leadingTrivia(); - - this._externalModuleIndicatorSpan = this.getImplicitImportSpan(leadingTrivia) || this.getTopLevelImportOrExportSpan(sourceUnit); - - var amdDependencies = []; - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.isComment()) { - var amdDependency = this.getAmdDependency(trivia.fullText()); - if (amdDependency) { - amdDependencies.push(amdDependency); - } - } - } - - this._amdDependencies = amdDependencies; - }; - - Document.prototype.getAmdDependency = function (comment) { - var amdDependencyRegEx = /^\/\/\/\s*/gim; - var match = implicitImportRegEx.exec(trivia.fullText()); - - if (match) { - return new TypeScript.TextSpan(position, trivia.fullWidth()); - } - - return null; - }; - - Document.prototype.getTopLevelImportOrExportSpan = function (node) { - var firstToken; - var position = 0; - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var moduleElement = node.moduleElements.childAt(i); - - firstToken = moduleElement.firstToken(); - if (firstToken !== null && firstToken.tokenKind === 47 /* ExportKeyword */) { - return new TypeScript.TextSpan(position + firstToken.leadingTriviaWidth(), firstToken.width()); - } - - if (moduleElement.kind() === 133 /* ImportDeclaration */) { - var importDecl = moduleElement; - if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) { - return new TypeScript.TextSpan(position + importDecl.leadingTriviaWidth(), importDecl.width()); - } - } - - position += moduleElement.fullWidth(); - } - - return null; - ; - }; - - Document.prototype.sourceUnit = function () { - if (!this._sourceUnit) { - var start = new Date().getTime(); - var syntaxTree = this.syntaxTree(); - this._sourceUnit = TypeScript.SyntaxTreeToAstVisitor.visit(syntaxTree, this.fileName, this._compiler.compilationSettings(), this.isOpen); - TypeScript.astTranslationTime += new Date().getTime() - start; - - if (!this.isOpen) { - this._syntaxTree = null; - } - } - - return this._sourceUnit; - }; - - Document.prototype.diagnostics = function () { - if (this._diagnostics === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._diagnostics); - } - - return this._diagnostics; - }; - - Document.prototype.lineMap = function () { - if (this._lineMap === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._lineMap); - } - - return this._lineMap; - }; - - Document.prototype.isExternalModule = function () { - return this.externalModuleIndicatorSpan() !== null; - }; - - Document.prototype.externalModuleIndicatorSpan = function () { - if (this._externalModuleIndicatorSpan === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._externalModuleIndicatorSpan !== undefined); - } - - return this._externalModuleIndicatorSpan; - }; - - Document.prototype.amdDependencies = function () { - if (this._amdDependencies === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._amdDependencies !== undefined); - } - - return this._amdDependencies; - }; - - Document.prototype.syntaxTree = function () { - var result = this._syntaxTree; - if (!result) { - var start = new Date().getTime(); - - result = TypeScript.Parser.parse(this.fileName, TypeScript.SimpleText.fromScriptSnapshot(this._scriptSnapshot), TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())); - - TypeScript.syntaxTreeParseTime += new Date().getTime() - start; - - if (this.isOpen || !this._sourceUnit) { - this._syntaxTree = result; - } - } - - this.cacheSyntaxTreeInfo(result); - return result; - }; - - Document.prototype.bloomFilter = function () { - if (!this._bloomFilter) { - var identifiers = TypeScript.createIntrinsicsObject(); - var pre = function (cur) { - if (TypeScript.ASTHelpers.isValidAstNode(cur)) { - if (cur.kind() === 11 /* IdentifierName */) { - var nodeText = cur.valueText(); - - identifiers[nodeText] = true; - } - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(this.sourceUnit(), pre, null, identifiers); - - var identifierCount = 0; - for (var name in identifiers) { - if (identifiers[name]) { - identifierCount++; - } - } - - this._bloomFilter = new TypeScript.BloomFilter(identifierCount); - this._bloomFilter.addKeys(identifiers); - } - return this._bloomFilter; - }; - - Document.prototype.emitToOwnOutputFile = function () { - return !this._compiler.compilationSettings().outFileOption() || this.isExternalModule(); - }; - - Document.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) { - var oldSyntaxTree = this._syntaxTree; - - if (textChangeRange !== null && TypeScript.Debug.shouldAssert(1 /* Normal */)) { - var oldText = this._scriptSnapshot; - var newText = scriptSnapshot; - - TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldTextPrefix = oldText.getText(0, textChangeRange.span().start()); - var newTextPrefix = newText.getText(0, textChangeRange.span().start()); - TypeScript.Debug.assert(oldTextPrefix === newTextPrefix); - - var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength()); - var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength()); - TypeScript.Debug.assert(oldTextSuffix === newTextSuffix); - } - } - - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var newSyntaxTree = textChangeRange === null || oldSyntaxTree === null ? TypeScript.Parser.parse(this.fileName, text, TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())) : TypeScript.Parser.incrementalParse(oldSyntaxTree, textChangeRange, text); - - return new Document(this._compiler, this._semanticInfoChain, this.fileName, this.referencedFiles, scriptSnapshot, this.byteOrderMark, version, isOpen, newSyntaxTree, null); - }; - - Document.create = function (compiler, semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - return new Document(compiler, semanticInfoChain, fileName, referencedFiles, scriptSnapshot, byteOrderMark, version, isOpen, null, null); - }; - - Document.prototype.topLevelDecl = function () { - if (this._topLevelDecl === null) { - this._topLevelDecl = TypeScript.DeclarationCreator.create(this, this._semanticInfoChain, this._compiler.compilationSettings()); - } - - return this._topLevelDecl; - }; - - Document.prototype._getDeclForAST = function (ast) { - this.topLevelDecl(); - return this._astDeclMap[ast.syntaxID()]; - }; - - Document.prototype.getEnclosingDecl = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - return this._getDeclForAST(ast); - } - - ast = ast.parent; - var decl = null; - while (ast) { - decl = this._getDeclForAST(ast); - - if (decl) { - break; - } - - ast = ast.parent; - } - - return decl._getEnclosingDeclFromParentDecl(); - }; - - Document.prototype._setDeclForAST = function (ast, decl) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._astDeclMap[ast.syntaxID()] = decl; - }; - - Document.prototype._getASTForDecl = function (decl) { - return this._declASTMap[decl.declID]; - }; - - Document.prototype._setASTForDecl = function (decl, ast) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._declASTMap[decl.declID] = ast; - }; - return Document; - })(); - TypeScript.Document = Document; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function hasFlag(val, flag) { - return (val & flag) !== 0; - } - TypeScript.hasFlag = hasFlag; - - (function (TypeRelationshipFlags) { - TypeRelationshipFlags[TypeRelationshipFlags["SuccessfulComparison"] = 0] = "SuccessfulComparison"; - TypeRelationshipFlags[TypeRelationshipFlags["RequiredPropertyIsMissing"] = 1 << 1] = "RequiredPropertyIsMissing"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleSignatures"] = 1 << 2] = "IncompatibleSignatures"; - TypeRelationshipFlags[TypeRelationshipFlags["SourceSignatureHasTooManyParameters"] = 3] = "SourceSignatureHasTooManyParameters"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleReturnTypes"] = 1 << 4] = "IncompatibleReturnTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatiblePropertyTypes"] = 1 << 5] = "IncompatiblePropertyTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleParameterTypes"] = 1 << 6] = "IncompatibleParameterTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["InconsistantPropertyAccesibility"] = 1 << 7] = "InconsistantPropertyAccesibility"; - })(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {})); - var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags; - - (function (ModuleGenTarget) { - ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; - ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; - ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous"; - })(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {})); - var ModuleGenTarget = TypeScript.ModuleGenTarget; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var proto = "__proto__"; - - var BlockIntrinsics = (function () { - function BlockIntrinsics() { - this.prototype = undefined; - this.toString = undefined; - this.toLocaleString = undefined; - this.valueOf = undefined; - this.hasOwnProperty = undefined; - this.propertyIsEnumerable = undefined; - this.isPrototypeOf = undefined; - this["constructor"] = undefined; - - this[proto] = null; - this[proto] = undefined; - } - return BlockIntrinsics; - })(); - - function createIntrinsicsObject() { - return new BlockIntrinsics(); - } - TypeScript.createIntrinsicsObject = createIntrinsicsObject; - - var StringHashTable = (function () { - function StringHashTable() { - this.itemCount = 0; - this.table = createIntrinsicsObject(); - } - StringHashTable.prototype.getAllKeys = function () { - var result = []; - - for (var k in this.table) { - if (this.table[k] !== undefined) { - result.push(k); - } - } - - return result; - }; - - StringHashTable.prototype.add = function (key, data) { - if (this.table[key] !== undefined) { - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.addOrUpdate = function (key, data) { - if (this.table[key] !== undefined) { - this.table[key] = data; - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.map = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - fn(k, this.table[k], context); - } - } - }; - - StringHashTable.prototype.every = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (!fn(k, this.table[k], context)) { - return false; - } - } - } - - return true; - }; - - StringHashTable.prototype.some = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (fn(k, this.table[k], context)) { - return true; - } - } - } - - return false; - }; - - StringHashTable.prototype.count = function () { - return this.itemCount; - }; - - StringHashTable.prototype.lookup = function (key) { - var data = this.table[key]; - return data === undefined ? null : data; - }; - - StringHashTable.prototype.remove = function (key) { - if (this.table[key] !== undefined) { - this.table[key] = undefined; - this.itemCount--; - } - }; - return StringHashTable; - })(); - TypeScript.StringHashTable = StringHashTable; - - var IdentiferNameHashTable = (function (_super) { - __extends(IdentiferNameHashTable, _super); - function IdentiferNameHashTable() { - _super.apply(this, arguments); - } - IdentiferNameHashTable.prototype.getAllKeys = function () { - var result = []; - - _super.prototype.map.call(this, function (k, v, c) { - if (v !== undefined) { - result.push(k.substring(1)); - } - }, null); - - return result; - }; - - IdentiferNameHashTable.prototype.add = function (key, data) { - return _super.prototype.add.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.addOrUpdate = function (key, data) { - return _super.prototype.addOrUpdate.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.map = function (fn, context) { - return _super.prototype.map.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.every = function (fn, context) { - return _super.prototype.every.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.some = function (fn, context) { - return _super.prototype.some.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.lookup = function (key) { - return _super.prototype.lookup.call(this, "#" + key); - }; - return IdentiferNameHashTable; - })(StringHashTable); - TypeScript.IdentiferNameHashTable = IdentiferNameHashTable; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (ASTHelpers) { - function scriptIsElided(sourceUnit) { - return TypeScript.isDTSFile(sourceUnit.fileName()) || moduleMembersAreElided(sourceUnit.moduleElements); - } - ASTHelpers.scriptIsElided = scriptIsElided; - - function moduleIsElided(declaration) { - return TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) || moduleMembersAreElided(declaration.moduleElements); - } - ASTHelpers.moduleIsElided = moduleIsElided; - - function moduleMembersAreElided(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - if (!moduleIsElided(member)) { - return false; - } - } else if (member.kind() !== 128 /* InterfaceDeclaration */) { - return false; - } - } - - return true; - } - - function enumIsElided(declaration) { - if (TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - return true; - } - - return false; - } - ASTHelpers.enumIsElided = enumIsElided; - - function isValidAstNode(ast) { - if (!ast) - return false; - - if (ast.start() === -1 || ast.end() === -1) - return false; - - return true; - } - ASTHelpers.isValidAstNode = isValidAstNode; - - function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) { - if (typeof useTrailingTriviaAsLimChar === "undefined") { useTrailingTriviaAsLimChar = true; } - if (typeof forceInclusive === "undefined") { forceInclusive = false; } - var top = null; - - var pre = function (cur, walker) { - if (isValidAstNode(cur)) { - var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && cur.width() === 0; - - if (isInvalid1) { - walker.options.goChildren = false; - } else { - var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === script.end() + script.trailingTriviaWidth(); - - var minChar = cur.start(); - var limChar = cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0) + (inclusive ? 1 : 0); - if (pos >= minChar && pos < limChar) { - if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || cur.end() > cur.start()) { - if (top === null) { - top = cur; - } else if (cur.start() >= top.start() && (cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0)) <= (top.end() + (useTrailingTriviaAsLimChar ? top.trailingTriviaWidth() : 0))) { - if (top.width() !== 0 || cur.width() !== 0) { - top = cur; - } - } - } - } - - walker.options.goChildren = (minChar <= pos && pos <= limChar); - } - } - }; - - TypeScript.getAstWalkerFactory().walk(script, pre); - return top; - } - ASTHelpers.getAstAtPosition = getAstAtPosition; - - function getExtendsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 230 /* ExtendsHeritageClause */; - }); - } - ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause; - - function getImplementsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 231 /* ImplementsHeritageClause */; - }); - } - ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause; - - function isCallExpression(ast) { - return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */); - } - ASTHelpers.isCallExpression = isCallExpression; - - function isCallExpressionTarget(ast) { - if (!ast) { - return false; - } - - var current = ast; - - while (current && current.parent) { - if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) { - current = current.parent; - continue; - } - - break; - } - - if (current && current.parent) { - if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) { - return current === current.parent.expression; - } - } - - return false; - } - ASTHelpers.isCallExpressionTarget = isCallExpressionTarget; - - function isNameOfSomeDeclaration(ast) { - if (ast === null || ast.parent === null) { - return false; - } - if (ast.kind() !== 11 /* IdentifierName */) { - return false; - } - - switch (ast.parent.kind()) { - case 131 /* ClassDeclaration */: - return ast.parent.identifier === ast; - case 128 /* InterfaceDeclaration */: - return ast.parent.identifier === ast; - case 132 /* EnumDeclaration */: - return ast.parent.identifier === ast; - case 130 /* ModuleDeclaration */: - return ast.parent.name === ast || ast.parent.stringLiteral === ast; - case 225 /* VariableDeclarator */: - return ast.parent.propertyName === ast; - case 129 /* FunctionDeclaration */: - return ast.parent.identifier === ast; - case 135 /* MemberFunctionDeclaration */: - return ast.parent.propertyName === ast; - case 242 /* Parameter */: - return ast.parent.identifier === ast; - case 238 /* TypeParameter */: - return ast.parent.identifier === ast; - case 240 /* SimplePropertyAssignment */: - return ast.parent.propertyName === ast; - case 241 /* FunctionPropertyAssignment */: - return ast.parent.propertyName === ast; - case 243 /* EnumElement */: - return ast.parent.propertyName === ast; - case 133 /* ImportDeclaration */: - return ast.parent.identifier === ast; - } - - return false; - } - - function isDeclarationASTOrDeclarationNameAST(ast) { - return isNameOfSomeDeclaration(ast) || isDeclarationAST(ast); - } - ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST; - - function getEnclosingParameterForInitializer(ast) { - var current = ast; - while (current) { - switch (current.kind()) { - case 232 /* EqualsValueClause */: - if (current.parent && current.parent.kind() === 242 /* Parameter */) { - return current.parent; - } - break; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - - current = current.parent; - } - return null; - } - ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer; - - function getEnclosingMemberVariableDeclaration(ast) { - var current = ast; - - while (current) { - switch (current.kind()) { - case 136 /* MemberVariableDeclaration */: - return current; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - current = current.parent; - } - - return null; - } - ASTHelpers.getEnclosingMemberVariableDeclaration = getEnclosingMemberVariableDeclaration; - - function isNameOfFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast; - } - ASTHelpers.isNameOfFunction = isNameOfFunction; - - function isNameOfMemberFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast; - } - ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction; - - function isNameOfMemberAccessExpression(ast) { - if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) { - return true; - } - - return false; - } - ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression; - - function isRightSideOfQualifiedName(ast) { - if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) { - return true; - } - - return false; - } - ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName; - - function parentIsModuleDeclaration(ast) { - return ast.parent && ast.parent.kind() === 130 /* ModuleDeclaration */; - } - ASTHelpers.parentIsModuleDeclaration = parentIsModuleDeclaration; - - function parametersFromIdentifier(id) { - return { - length: 1, - lastParameterIsRest: function () { - return false; - }, - ast: id, - astAt: function (index) { - return id; - }, - identifierAt: function (index) { - return id; - }, - typeAt: function (index) { - return null; - }, - initializerAt: function (index) { - return null; - }, - isOptionalAt: function (index) { - return false; - } - }; - } - ASTHelpers.parametersFromIdentifier = parametersFromIdentifier; - - function parametersFromParameter(parameter) { - return { - length: 1, - lastParameterIsRest: function () { - return parameter.dotDotDotToken !== null; - }, - ast: parameter, - astAt: function (index) { - return parameter; - }, - identifierAt: function (index) { - return parameter.identifier; - }, - typeAt: function (index) { - return getType(parameter); - }, - initializerAt: function (index) { - return parameter.equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(parameter); - } - }; - } - ASTHelpers.parametersFromParameter = parametersFromParameter; - - function parameterIsOptional(parameter) { - return parameter.questionToken !== null || parameter.equalsValueClause !== null; - } - - function parametersFromParameterList(list) { - return { - length: list.parameters.nonSeparatorCount(), - lastParameterIsRest: function () { - return TypeScript.lastParameterIsRest(list); - }, - ast: list.parameters, - astAt: function (index) { - return list.parameters.nonSeparatorAt(index); - }, - identifierAt: function (index) { - return list.parameters.nonSeparatorAt(index).identifier; - }, - typeAt: function (index) { - return getType(list.parameters.nonSeparatorAt(index)); - }, - initializerAt: function (index) { - return list.parameters.nonSeparatorAt(index).equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(list.parameters.nonSeparatorAt(index)); - } - }; - } - ASTHelpers.parametersFromParameterList = parametersFromParameterList; - - function isDeclarationAST(ast) { - switch (ast.kind()) { - case 225 /* VariableDeclarator */: - return getVariableStatement(ast) !== null; - - case 133 /* ImportDeclaration */: - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 242 /* Parameter */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 144 /* IndexSignature */: - case 129 /* FunctionDeclaration */: - case 130 /* ModuleDeclaration */: - case 124 /* ArrayType */: - case 122 /* ObjectType */: - case 238 /* TypeParameter */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - case 138 /* IndexMemberDeclaration */: - case 132 /* EnumDeclaration */: - case 243 /* EnumElement */: - case 240 /* SimplePropertyAssignment */: - case 241 /* FunctionPropertyAssignment */: - case 222 /* FunctionExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - case 145 /* MethodSignature */: - case 141 /* PropertySignature */: - return true; - default: - return false; - } - } - ASTHelpers.isDeclarationAST = isDeclarationAST; - - function docComments(ast) { - if (isDeclarationAST(ast)) { - var preComments = ast.kind() === 225 /* VariableDeclarator */ ? getVariableStatement(ast).preComments() : ast.preComments(); - - if (preComments && preComments.length > 0) { - var preCommentsLength = preComments.length; - var docComments = new Array(); - for (var i = preCommentsLength - 1; i >= 0; i--) { - if (isDocComment(preComments[i])) { - docComments.push(preComments[i]); - continue; - } - - break; - } - - return docComments.reverse(); - } - } - - return TypeScript.sentinelEmptyArray; - } - ASTHelpers.docComments = docComments; - - function isDocComment(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - var fullText = comment.fullText(); - return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/"; - } - - return false; - } - - function getParameterList(ast) { - if (ast) { - switch (ast.kind()) { - case 137 /* ConstructorDeclaration */: - return getParameterList(ast.callSignature); - case 129 /* FunctionDeclaration */: - return getParameterList(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getParameterList(ast.callSignature); - case 143 /* ConstructSignature */: - return getParameterList(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getParameterList(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getParameterList(ast.callSignature); - case 222 /* FunctionExpression */: - return getParameterList(ast.callSignature); - case 145 /* MethodSignature */: - return getParameterList(ast.callSignature); - case 125 /* ConstructorType */: - return ast.parameterList; - case 123 /* FunctionType */: - return ast.parameterList; - case 142 /* CallSignature */: - return ast.parameterList; - case 139 /* GetAccessor */: - return ast.parameterList; - case 140 /* SetAccessor */: - return ast.parameterList; - } - } - - return null; - } - ASTHelpers.getParameterList = getParameterList; - - function getType(ast) { - if (ast) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - return getType(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getType(ast.callSignature); - case 143 /* ConstructSignature */: - return getType(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getType(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getType(ast.callSignature); - case 222 /* FunctionExpression */: - return getType(ast.callSignature); - case 145 /* MethodSignature */: - return getType(ast.callSignature); - case 142 /* CallSignature */: - return getType(ast.typeAnnotation); - case 144 /* IndexSignature */: - return getType(ast.typeAnnotation); - case 141 /* PropertySignature */: - return getType(ast.typeAnnotation); - case 139 /* GetAccessor */: - return getType(ast.typeAnnotation); - case 242 /* Parameter */: - return getType(ast.typeAnnotation); - case 136 /* MemberVariableDeclaration */: - return getType(ast.variableDeclarator); - case 225 /* VariableDeclarator */: - return getType(ast.typeAnnotation); - case 236 /* CatchClause */: - return getType(ast.typeAnnotation); - case 125 /* ConstructorType */: - return ast.type; - case 123 /* FunctionType */: - return ast.type; - case 244 /* TypeAnnotation */: - return ast.type; - } - } - - return null; - } - ASTHelpers.getType = getType; - - function getVariableStatement(variableDeclarator) { - if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) { - return variableDeclarator.parent.parent.parent; - } - - return null; - } - - function getVariableDeclaratorModifiers(variableDeclarator) { - var variableStatement = getVariableStatement(variableDeclarator); - return variableStatement ? variableStatement.modifiers : TypeScript.sentinelEmptyArray; - } - ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers; - - function isIntegerLiteralAST(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST; - - function getEnclosingModuleDeclaration(ast) { - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - } - ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration; - - function isEntireNameOfModuleDeclaration(nameAST) { - return parentIsModuleDeclaration(nameAST) && nameAST.parent.name === nameAST; - } - - function getModuleDeclarationFromNameAST(ast) { - if (ast) { - switch (ast.kind()) { - case 14 /* StringLiteral */: - if (parentIsModuleDeclaration(ast) && ast.parent.stringLiteral === ast) { - return ast.parent; - } - return null; - - case 11 /* IdentifierName */: - case 121 /* QualifiedName */: - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - break; - - default: - return null; - } - - for (ast = ast.parent; ast && ast.kind() === 121 /* QualifiedName */; ast = ast.parent) { - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - } - } - - return null; - } - ASTHelpers.getModuleDeclarationFromNameAST = getModuleDeclarationFromNameAST; - - function isLastNameOfModule(ast, astName) { - if (ast) { - if (ast.stringLiteral) { - return astName === ast.stringLiteral; - } else if (ast.name.kind() === 121 /* QualifiedName */) { - return astName === ast.name.right; - } else { - return astName === ast.name; - } - } - - return false; - } - ASTHelpers.isLastNameOfModule = isLastNameOfModule; - - function getNameOfIdenfierOrQualifiedName(name) { - if (name.kind() === 11 /* IdentifierName */) { - return name.text(); - } else { - TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); - var dotExpr = name; - return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); - } - } - ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName; - - function getModuleNames(name, result) { - result = result || []; - - if (name.kind() === 121 /* QualifiedName */) { - getModuleNames(name.left, result); - result.push(name.right); - } else { - result.push(name); - } - - return result; - } - ASTHelpers.getModuleNames = getModuleNames; - })(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); - var ASTHelpers = TypeScript.ASTHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function walkListChildren(preAst, walker) { - for (var i = 0, n = preAst.childCount(); i < n; i++) { - walker.walk(preAst.childAt(i)); - } - } - - function walkThrowStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkPrefixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkPostfixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkDeleteExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkTypeArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArguments); - } - - function walkTypeOfExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkVoidExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArgumentList); - walker.walk(preAst.arguments); - } - - function walkArrayLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.expressions); - } - - function walkSimplePropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.expression); - } - - function walkFunctionPropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkGetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkSeparatedListChildren(preAst, walker) { - for (var i = 0, n = preAst.nonSeparatorCount(); i < n; i++) { - walker.walk(preAst.nonSeparatorAt(i)); - } - } - - function walkSetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.block); - } - - function walkObjectLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.propertyAssignments); - } - - function walkCastExpressionChildren(preAst, walker) { - walker.walk(preAst.type); - walker.walk(preAst.expression); - } - - function walkParenthesizedExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkElementAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentExpression); - } - - function walkMemberAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.name); - } - - function walkQualifiedNameChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkBinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkEqualsValueClauseChildren(preAst, walker) { - walker.walk(preAst.value); - } - - function walkTypeParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.constraint); - } - - function walkTypeParameterListChildren(preAst, walker) { - walker.walk(preAst.typeParameters); - } - - function walkGenericTypeChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.typeArgumentList); - } - - function walkTypeAnnotationChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkTypeQueryChildren(preAst, walker) { - walker.walk(preAst.name); - } - - function walkInvocationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkObjectCreationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkTrinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.whenTrue); - walker.walk(preAst.whenFalse); - } - - function walkFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFunctionTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkSimpleArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkMemberFunctionDeclarationChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFuncDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkIndexMemberDeclarationChildren(preAst, walker) { - walker.walk(preAst.indexSignature); - } - - function walkIndexSignatureChildren(preAst, walker) { - walker.walk(preAst.parameter); - walker.walk(preAst.typeAnnotation); - } - - function walkCallSignatureChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - } - - function walkConstraintChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkConstructorDeclarationChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkConstructorTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkConstructSignatureChildren(preAst, walker) { - walker.walk(preAst.callSignature); - } - - function walkParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkParameterListChildren(preAst, walker) { - walker.walk(preAst.parameters); - } - - function walkPropertySignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - } - - function walkVariableDeclaratorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkMemberVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.variableDeclarator); - } - - function walkMethodSignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - } - - function walkReturnStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkForStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.initializer); - walker.walk(preAst.condition); - walker.walk(preAst.incrementor); - walker.walk(preAst.statement); - } - - function walkForInStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.left); - walker.walk(preAst.expression); - walker.walk(preAst.statement); - } - - function walkIfStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - walker.walk(preAst.elseClause); - } - - function walkElseClauseChildren(preAst, walker) { - walker.walk(preAst.statement); - } - - function walkWhileStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkDoStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkBlockChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.declarators); - } - - function walkCaseSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.statements); - } - - function walkDefaultSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkSwitchStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.switchClauses); - } - - function walkTryStatementChildren(preAst, walker) { - walker.walk(preAst.block); - walker.walk(preAst.catchClause); - walker.walk(preAst.finallyClause); - } - - function walkCatchClauseChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkExternalModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.stringLiteral); - } - - function walkFinallyClauseChildren(preAst, walker) { - walker.walk(preAst.block); - } - - function walkClassDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.classElements); - } - - function walkScriptChildren(preAst, walker) { - walker.walk(preAst.moduleElements); - } - - function walkHeritageClauseChildren(preAst, walker) { - walker.walk(preAst.typeNames); - } - - function walkInterfaceDeclerationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.body); - } - - function walkObjectTypeChildren(preAst, walker) { - walker.walk(preAst.typeMembers); - } - - function walkArrayTypeChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkModuleDeclarationChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.stringLiteral); - walker.walk(preAst.moduleElements); - } - - function walkModuleNameModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.moduleName); - } - - function walkEnumDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.enumElements); - } - - function walkEnumElementChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.equalsValueClause); - } - - function walkImportDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.moduleReference); - } - - function walkExportAssignmentChildren(preAst, walker) { - walker.walk(preAst.identifier); - } - - function walkWithStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkExpressionStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkLabeledStatementChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.statement); - } - - function walkVariableStatementChildren(preAst, walker) { - walker.walk(preAst.declaration); - } - - var childrenWalkers = new Array(246 /* Last */ + 1); - - for (var i = 9 /* FirstToken */, n = 119 /* LastToken */; i <= n; i++) { - childrenWalkers[i] = null; - } - for (var i = 4 /* FirstTrivia */, n = 8 /* LastTrivia */; i <= n; i++) { - childrenWalkers[i] = null; - } - - childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren; - childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[60 /* AnyKeyword */] = null; - childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren; - childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren; - childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren; - childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren; - childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren; - childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[146 /* Block */] = walkBlockChildren; - childrenWalkers[61 /* BooleanKeyword */] = null; - childrenWalkers[152 /* BreakStatement */] = null; - childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren; - childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren; - childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren; - childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren; - childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren; - childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren; - childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren; - childrenWalkers[239 /* Constraint */] = walkConstraintChildren; - childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren; - childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren; - childrenWalkers[153 /* ContinueStatement */] = null; - childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren; - childrenWalkers[162 /* DebuggerStatement */] = null; - childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren; - childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren; - childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren; - childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren; - childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren; - childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren; - childrenWalkers[156 /* EmptyStatement */] = null; - childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren; - childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren; - childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren; - childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren; - childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren; - childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren; - childrenWalkers[24 /* FalseKeyword */] = null; - childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren; - childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren; - childrenWalkers[154 /* ForStatement */] = walkForStatementChildren; - childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren; - childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren; - childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren; - childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren; - childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren; - childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren; - childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren; - childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren; - childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren; - childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren; - childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren; - childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren; - childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren; - childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren; - childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren; - childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[1 /* List */] = walkListChildren; - childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren; - childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren; - childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren; - childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren; - childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren; - childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren; - childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren; - childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren; - childrenWalkers[11 /* IdentifierName */] = null; - childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[0 /* None */] = null; - childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[32 /* NullKeyword */] = null; - childrenWalkers[67 /* NumberKeyword */] = null; - childrenWalkers[13 /* NumericLiteral */] = null; - childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren; - childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren; - childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren; - childrenWalkers[223 /* OmittedExpression */] = null; - childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[242 /* Parameter */] = walkParameterChildren; - childrenWalkers[227 /* ParameterList */] = walkParameterListChildren; - childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren; - childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren; - childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren; - childrenWalkers[12 /* RegularExpressionLiteral */] = null; - childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren; - childrenWalkers[120 /* SourceUnit */] = walkScriptChildren; - childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren; - childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren; - childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren; - childrenWalkers[14 /* StringLiteral */] = null; - childrenWalkers[69 /* StringKeyword */] = null; - childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren; - childrenWalkers[50 /* SuperKeyword */] = null; - childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren; - childrenWalkers[35 /* ThisKeyword */] = null; - childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren; - childrenWalkers[3 /* TriviaList */] = null; - childrenWalkers[37 /* TrueKeyword */] = null; - childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren; - childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren; - childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren; - childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren; - childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren; - childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren; - childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren; - childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren; - childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren; - childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren; - childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren; - childrenWalkers[41 /* VoidKeyword */] = null; - childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren; - childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren; - - for (var e in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) { - TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]); - } - } - - var AstWalkOptions = (function () { - function AstWalkOptions() { - this.goChildren = true; - this.stopWalking = false; - } - return AstWalkOptions; - })(); - TypeScript.AstWalkOptions = AstWalkOptions; - - var SimplePreAstWalker = (function () { - function SimplePreAstWalker(pre, state) { - this.pre = pre; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePreAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - }; - return SimplePreAstWalker; - })(); - - var SimplePrePostAstWalker = (function () { - function SimplePrePostAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePrePostAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - - this.post(ast, this.state); - }; - return SimplePrePostAstWalker; - })(); - - var NormalAstWalker = (function () { - function NormalAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - NormalAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - if (this.options.stopWalking) { - return; - } - - this.pre(ast, this); - - if (this.options.stopWalking) { - return; - } - - if (this.options.goChildren) { - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - } else { - this.options.goChildren = true; - } - - if (this.post) { - this.post(ast, this); - } - }; - return NormalAstWalker; - })(); - - var AstWalkerFactory = (function () { - function AstWalkerFactory() { - } - AstWalkerFactory.prototype.walk = function (ast, pre, post, state) { - new NormalAstWalker(pre, post, state).walk(ast); - }; - - AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) { - if (post) { - new SimplePrePostAstWalker(pre, post, state).walk(ast); - } else { - new SimplePreAstWalker(pre, state).walk(ast); - } - }; - return AstWalkerFactory; - })(); - TypeScript.AstWalkerFactory = AstWalkerFactory; - - var globalAstWalkerFactory = new AstWalkerFactory(); - - function getAstWalkerFactory() { - return globalAstWalkerFactory; - } - TypeScript.getAstWalkerFactory = getAstWalkerFactory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Base64Format = (function () { - function Base64Format() { - } - Base64Format.encode = function (inValue) { - if (inValue < 64) { - return Base64Format.encodedValues.charAt(inValue); - } - throw TypeError(inValue + ": not a 64 based value"); - }; - - Base64Format.decodeChar = function (inChar) { - if (inChar.length === 1) { - return Base64Format.encodedValues.indexOf(inChar); - } else { - throw TypeError('"' + inChar + '" must have length 1'); - } - }; - Base64Format.encodedValues = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - return Base64Format; - })(); - - var Base64VLQFormat = (function () { - function Base64VLQFormat() { - } - Base64VLQFormat.encode = function (inValue) { - if (inValue < 0) { - inValue = ((-inValue) << 1) + 1; - } else { - inValue = inValue << 1; - } - - var encodedStr = ""; - do { - var currentDigit = inValue & 31; - inValue = inValue >> 5; - if (inValue > 0) { - currentDigit = currentDigit | 32; - } - encodedStr = encodedStr + Base64Format.encode(currentDigit); - } while(inValue > 0); - - return encodedStr; - }; - - Base64VLQFormat.decode = function (inString) { - var result = 0; - var negative = false; - - var shift = 0; - for (var i = 0; i < inString.length; i++) { - var byte = Base64Format.decodeChar(inString[i]); - if (i === 0) { - if ((byte & 1) === 1) { - negative = true; - } - result = (byte >> 1) & 15; - } else { - result = result | ((byte & 31) << shift); - } - - shift += (i === 0) ? 4 : 5; - - if ((byte & 32) === 32) { - } else { - return { value: negative ? -(result) : result, rest: inString.substr(i + 1) }; - } - } - - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Base64_value_0_finished_with_a_continuation_bit, [inString])); - }; - return Base64VLQFormat; - })(); - TypeScript.Base64VLQFormat = Base64VLQFormat; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceMapPosition = (function () { - function SourceMapPosition() { - } - return SourceMapPosition; - })(); - TypeScript.SourceMapPosition = SourceMapPosition; - - var SourceMapping = (function () { - function SourceMapping() { - this.start = new SourceMapPosition(); - this.end = new SourceMapPosition(); - this.nameIndex = -1; - this.childMappings = []; - } - return SourceMapping; - })(); - TypeScript.SourceMapping = SourceMapping; - - var SourceMapEntry = (function () { - function SourceMapEntry(emittedFile, emittedLine, emittedColumn, sourceFile, sourceLine, sourceColumn, sourceName) { - this.emittedFile = emittedFile; - this.emittedLine = emittedLine; - this.emittedColumn = emittedColumn; - this.sourceFile = sourceFile; - this.sourceLine = sourceLine; - this.sourceColumn = sourceColumn; - this.sourceName = sourceName; - TypeScript.Debug.assert(isFinite(emittedLine)); - TypeScript.Debug.assert(isFinite(emittedColumn)); - TypeScript.Debug.assert(isFinite(sourceColumn)); - TypeScript.Debug.assert(isFinite(sourceLine)); - } - return SourceMapEntry; - })(); - TypeScript.SourceMapEntry = SourceMapEntry; - - var SourceMapper = (function () { - function SourceMapper(jsFile, sourceMapOut, document, jsFilePath, emitOptions, resolvePath) { - this.jsFile = jsFile; - this.sourceMapOut = sourceMapOut; - this.names = []; - this.mappingLevel = []; - this.tsFilePaths = []; - this.allSourceMappings = []; - this.sourceMapEntries = []; - this.setSourceMapOptions(document, jsFilePath, emitOptions, resolvePath); - this.setNewSourceFile(document, emitOptions); - } - SourceMapper.prototype.getOutputFile = function () { - var result = this.sourceMapOut.getOutputFile(); - result.sourceMapEntries = this.sourceMapEntries; - - return result; - }; - - SourceMapper.prototype.increaseMappingLevel = function (ast) { - this.mappingLevel.push(ast); - }; - - SourceMapper.prototype.decreaseMappingLevel = function (ast) { - TypeScript.Debug.assert(this.mappingLevel.length > 0, "Mapping level should never be less than 0. This suggests a missing start call."); - var expectedAst = this.mappingLevel.pop(); - var expectedAstInfo = expectedAst.kind ? TypeScript.SyntaxKind[expectedAst.kind()] : [expectedAst.start(), expectedAst.end()]; - var astInfo = ast.kind ? TypeScript.SyntaxKind[ast.kind()] : [ast.start(), ast.end()]; - TypeScript.Debug.assert(ast === expectedAst, "Provided ast is not the expected AST, Expected: " + expectedAstInfo + " Given: " + astInfo); - }; - - SourceMapper.prototype.setNewSourceFile = function (document, emitOptions) { - var sourceMappings = []; - this.allSourceMappings.push(sourceMappings); - this.currentMappings = [sourceMappings]; - this.currentNameIndex = []; - - this.setNewSourceFilePath(document, emitOptions); - }; - - SourceMapper.prototype.setSourceMapOptions = function (document, jsFilePath, emitOptions, resolvePath) { - var prettyJsFileName = TypeScript.getPrettyName(jsFilePath, false, true); - var prettyMapFileName = prettyJsFileName + SourceMapper.MapFileExtension; - this.jsFileName = prettyJsFileName; - - if (emitOptions.sourceMapRootDirectory()) { - this.sourceMapDirectory = emitOptions.sourceMapRootDirectory(); - if (document.emitToOwnOutputFile()) { - this.sourceMapDirectory = this.sourceMapDirectory + TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath((document.fileName)).replace(emitOptions.commonDirectoryPath(), "")); - } - - if (TypeScript.isRelative(this.sourceMapDirectory)) { - this.sourceMapDirectory = emitOptions.commonDirectoryPath() + this.sourceMapDirectory; - this.sourceMapDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(this.sourceMapDirectory))); - this.sourceMapPath = TypeScript.getRelativePathToFixedPath(TypeScript.getRootFilePath(jsFilePath), this.sourceMapDirectory + prettyMapFileName); - } else { - this.sourceMapPath = this.sourceMapDirectory + prettyMapFileName; - } - } else { - this.sourceMapPath = prettyMapFileName; - this.sourceMapDirectory = TypeScript.getRootFilePath(jsFilePath); - } - this.sourceRoot = emitOptions.sourceRootDirectory(); - }; - - SourceMapper.prototype.setNewSourceFilePath = function (document, emitOptions) { - var tsFilePath = TypeScript.switchToForwardSlashes(document.fileName); - if (emitOptions.sourceRootDirectory()) { - tsFilePath = TypeScript.getRelativePathToFixedPath(emitOptions.commonDirectoryPath(), tsFilePath); - } else { - tsFilePath = TypeScript.getRelativePathToFixedPath(this.sourceMapDirectory, tsFilePath); - } - this.tsFilePaths.push(tsFilePath); - }; - - SourceMapper.prototype.emitSourceMapping = function () { - var _this = this; - TypeScript.Debug.assert(this.mappingLevel.length === 0, "Mapping level is not 0. This suggest a missing end call. Value: " + this.mappingLevel.map(function (item) { - return ['Node of type', TypeScript.SyntaxKind[item.kind()], 'at', item.start(), 'to', item.end()].join(' '); - }).join(', ')); - - this.jsFile.WriteLine("//# sourceMappingURL=" + this.sourceMapPath); - - var mappingsString = ""; - - var prevEmittedColumn = 0; - var prevEmittedLine = 0; - var prevSourceColumn = 0; - var prevSourceLine = 0; - var prevSourceIndex = 0; - var prevNameIndex = 0; - var emitComma = false; - - var recordedPosition = null; - for (var sourceIndex = 0; sourceIndex < this.tsFilePaths.length; sourceIndex++) { - var recordSourceMapping = function (mappedPosition, nameIndex) { - if (recordedPosition !== null && recordedPosition.emittedColumn === mappedPosition.emittedColumn && recordedPosition.emittedLine === mappedPosition.emittedLine) { - return; - } - - if (prevEmittedLine !== mappedPosition.emittedLine) { - while (prevEmittedLine < mappedPosition.emittedLine) { - prevEmittedColumn = 0; - mappingsString = mappingsString + ";"; - prevEmittedLine++; - } - emitComma = false; - } else if (emitComma) { - mappingsString = mappingsString + ","; - } - - _this.sourceMapEntries.push(new SourceMapEntry(_this.jsFileName, mappedPosition.emittedLine + 1, mappedPosition.emittedColumn + 1, _this.tsFilePaths[sourceIndex], mappedPosition.sourceLine, mappedPosition.sourceColumn + 1, nameIndex >= 0 ? _this.names[nameIndex] : undefined)); - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.emittedColumn - prevEmittedColumn); - prevEmittedColumn = mappedPosition.emittedColumn; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(sourceIndex - prevSourceIndex); - prevSourceIndex = sourceIndex; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceLine - 1 - prevSourceLine); - prevSourceLine = mappedPosition.sourceLine - 1; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceColumn - prevSourceColumn); - prevSourceColumn = mappedPosition.sourceColumn; - - if (nameIndex >= 0) { - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(nameIndex - prevNameIndex); - prevNameIndex = nameIndex; - } - - emitComma = true; - recordedPosition = mappedPosition; - }; - - var recordSourceMappingSiblings = function (sourceMappings) { - for (var i = 0; i < sourceMappings.length; i++) { - var sourceMapping = sourceMappings[i]; - recordSourceMapping(sourceMapping.start, sourceMapping.nameIndex); - recordSourceMappingSiblings(sourceMapping.childMappings); - recordSourceMapping(sourceMapping.end, sourceMapping.nameIndex); - } - }; - - recordSourceMappingSiblings(this.allSourceMappings[sourceIndex]); - } - - this.sourceMapOut.Write(JSON.stringify({ - version: 3, - file: this.jsFileName, - sourceRoot: this.sourceRoot, - sources: this.tsFilePaths, - names: this.names, - mappings: mappingsString - })); - - this.sourceMapOut.Close(); - }; - SourceMapper.MapFileExtension = ".map"; - return SourceMapper; - })(); - TypeScript.SourceMapper = SourceMapper; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (EmitContainer) { - EmitContainer[EmitContainer["Prog"] = 0] = "Prog"; - EmitContainer[EmitContainer["Module"] = 1] = "Module"; - EmitContainer[EmitContainer["DynamicModule"] = 2] = "DynamicModule"; - EmitContainer[EmitContainer["Class"] = 3] = "Class"; - EmitContainer[EmitContainer["Constructor"] = 4] = "Constructor"; - EmitContainer[EmitContainer["Function"] = 5] = "Function"; - EmitContainer[EmitContainer["Args"] = 6] = "Args"; - EmitContainer[EmitContainer["Interface"] = 7] = "Interface"; - })(TypeScript.EmitContainer || (TypeScript.EmitContainer = {})); - var EmitContainer = TypeScript.EmitContainer; - - var EmitState = (function () { - function EmitState() { - this.column = 0; - this.line = 0; - this.container = 0 /* Prog */; - } - return EmitState; - })(); - TypeScript.EmitState = EmitState; - - var EmitOptions = (function () { - function EmitOptions(compiler, resolvePath) { - this.resolvePath = resolvePath; - this._diagnostic = null; - this._settings = null; - this._commonDirectoryPath = ""; - this._sharedOutputFile = ""; - this._sourceRootDirectory = ""; - this._sourceMapRootDirectory = ""; - this._outputDirectory = ""; - var settings = compiler.compilationSettings(); - this._settings = settings; - - if (settings.moduleGenTarget() === 0 /* Unspecified */) { - var fileNames = compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = compiler.getDocument(fileNames[i]); - if (!document.isDeclareFile() && document.isExternalModule()) { - var errorSpan = document.externalModuleIndicatorSpan(); - this._diagnostic = new TypeScript.Diagnostic(document.fileName, document.lineMap(), errorSpan.start(), errorSpan.length(), TypeScript.DiagnosticCode.Cannot_compile_external_modules_unless_the_module_flag_is_provided); - - return; - } - } - } - - if (!settings.mapSourceFiles()) { - if (settings.mapRoot()) { - if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } else { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } else if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } - - this._sourceMapRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.mapRoot())); - this._sourceRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.sourceRoot())); - - if (settings.outFileOption() || settings.outDirOption() || settings.mapRoot() || settings.sourceRoot()) { - if (settings.outFileOption()) { - this._sharedOutputFile = TypeScript.switchToForwardSlashes(resolvePath(settings.outFileOption())); - } - - if (settings.outDirOption()) { - this._outputDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(settings.outDirOption()))); - } - - if (this._outputDirectory || this._sourceMapRootDirectory || this.sourceRootDirectory) { - this.determineCommonDirectoryPath(compiler); - } - } - } - EmitOptions.prototype.diagnostic = function () { - return this._diagnostic; - }; - - EmitOptions.prototype.commonDirectoryPath = function () { - return this._commonDirectoryPath; - }; - EmitOptions.prototype.sharedOutputFile = function () { - return this._sharedOutputFile; - }; - EmitOptions.prototype.sourceRootDirectory = function () { - return this._sourceRootDirectory; - }; - EmitOptions.prototype.sourceMapRootDirectory = function () { - return this._sourceMapRootDirectory; - }; - EmitOptions.prototype.outputDirectory = function () { - return this._outputDirectory; - }; - - EmitOptions.prototype.compilationSettings = function () { - return this._settings; - }; - - EmitOptions.prototype.determineCommonDirectoryPath = function (compiler) { - var commonComponents = []; - var commonComponentsLength = -1; - - var fileNames = compiler.fileNames(); - for (var i = 0, len = fileNames.length; i < len; i++) { - var fileName = fileNames[i]; - var document = compiler.getDocument(fileNames[i]); - var sourceUnit = document.sourceUnit(); - - if (!document.isDeclareFile()) { - var fileComponents = TypeScript.filePathComponents(fileName); - if (commonComponentsLength === -1) { - commonComponents = fileComponents; - commonComponentsLength = commonComponents.length; - } else { - var updatedPath = false; - for (var j = 0; j < commonComponentsLength && j < fileComponents.length; j++) { - if (commonComponents[j] !== fileComponents[j]) { - commonComponentsLength = j; - updatedPath = true; - - if (j === 0) { - var isDynamicModuleCompilation = TypeScript.ArrayUtilities.any(fileNames, function (fileName) { - document = compiler.getDocument(fileName); - return !document.isDeclareFile() && document.isExternalModule(); - }); - - if (this._outputDirectory || this._sourceRootDirectory || (this._sourceMapRootDirectory && (!this._sharedOutputFile || isDynamicModuleCompilation))) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Cannot_find_the_common_subdirectory_path_for_the_input_files, null); - return; - } - - return; - } - - break; - } - } - - if (!updatedPath && fileComponents.length < commonComponentsLength) { - commonComponentsLength = fileComponents.length; - } - } - } - } - - this._commonDirectoryPath = commonComponents.slice(0, commonComponentsLength).join("/") + "/"; - }; - return EmitOptions; - })(); - TypeScript.EmitOptions = EmitOptions; - - var Indenter = (function () { - function Indenter() { - this.indentAmt = 0; - } - Indenter.prototype.increaseIndent = function () { - this.indentAmt += Indenter.indentStep; - }; - - Indenter.prototype.decreaseIndent = function () { - this.indentAmt -= Indenter.indentStep; - }; - - Indenter.prototype.getIndent = function () { - var indentString = Indenter.indentStrings[this.indentAmt]; - if (indentString === undefined) { - indentString = ""; - for (var i = 0; i < this.indentAmt; i = i + Indenter.indentStep) { - indentString += Indenter.indentStepString; - } - Indenter.indentStrings[this.indentAmt] = indentString; - } - return indentString; - }; - Indenter.indentStep = 4; - Indenter.indentStepString = " "; - Indenter.indentStrings = []; - return Indenter; - })(); - TypeScript.Indenter = Indenter; - - function lastParameterIsRest(parameterList) { - var parameters = parameterList.parameters; - return parameters.nonSeparatorCount() > 0 && parameters.nonSeparatorAt(parameters.nonSeparatorCount() - 1).dotDotDotToken !== null; - } - TypeScript.lastParameterIsRest = lastParameterIsRest; - - var Emitter = (function () { - function Emitter(emittingFileName, outfile, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.outfile = outfile; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.globalThisCapturePrologueEmitted = false; - this.extendsPrologueEmitted = false; - this.thisClassNode = null; - this.inArrowFunction = false; - this.moduleName = ""; - this.emitState = new EmitState(); - this.indenter = new Indenter(); - this.sourceMapper = null; - this.captureThisStmtString = "var _this = this;"; - this.declStack = []; - this.exportAssignment = null; - this.inWithBlock = false; - this.document = null; - this.detachedCommentsElement = null; - } - Emitter.prototype.pushDecl = function (decl) { - if (decl) { - this.declStack[this.declStack.length] = decl; - } - }; - - Emitter.prototype.popDecl = function (decl) { - if (decl) { - this.declStack.length--; - } - }; - - Emitter.prototype.getEnclosingDecl = function () { - var declStackLen = this.declStack.length; - var enclosingDecl = declStackLen > 0 ? this.declStack[declStackLen - 1] : null; - return enclosingDecl; - }; - - Emitter.prototype.setExportAssignment = function (exportAssignment) { - this.exportAssignment = exportAssignment; - }; - - Emitter.prototype.getExportAssignment = function () { - return this.exportAssignment; - }; - - Emitter.prototype.setDocument = function (document) { - this.document = document; - }; - - Emitter.prototype.shouldEmitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - if (isExternalModuleReference && !isExported && isAmdCodeGen) { - return false; - } - - var importSymbol = importDecl.getSymbol(); - if (importSymbol.isUsedAsValue()) { - return true; - } - - if (importDeclAST.moduleReference.kind() !== 245 /* ExternalModuleReference */) { - var canBeUsedExternally = isExported || importSymbol.typeUsedExternally() || importSymbol.isUsedInExportedAlias(); - if (!canBeUsedExternally && !this.document.isExternalModule()) { - canBeUsedExternally = TypeScript.hasFlag(importDecl.getParentDecl().kind, 1 /* Script */ | 32 /* DynamicModule */); - } - - if (canBeUsedExternally) { - if (importSymbol.getExportAssignedValueSymbol()) { - return true; - } - - var containerSymbol = importSymbol.getExportAssignedContainerSymbol(); - if (containerSymbol && containerSymbol.getInstanceSymbol()) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - this.emitComments(importDeclAST, true); - - var importSymbol = importDecl.getSymbol(); - - var parentSymbol = importSymbol.getContainer(); - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - var associatedParentSymbol = parentSymbol ? parentSymbol.getAssociatedContainerType() : null; - var associatedParentSymbolKind = associatedParentSymbol ? associatedParentSymbol.kind : 0 /* None */; - - var needsPropertyAssignment = false; - var usePropertyAssignmentInsteadOfVarDecl = false; - var moduleNamePrefix; - - if (isExported && (parentKind === 4 /* Container */ || parentKind === 32 /* DynamicModule */ || associatedParentSymbolKind === 4 /* Container */ || associatedParentSymbolKind === 32 /* DynamicModule */)) { - if (importSymbol.getExportAssignedTypeSymbol() || importSymbol.getExportAssignedContainerSymbol()) { - needsPropertyAssignment = true; - } else { - var valueSymbol = importSymbol.getExportAssignedValueSymbol(); - if (valueSymbol && (valueSymbol.kind === 65536 /* Method */ || valueSymbol.kind === 16384 /* Function */)) { - needsPropertyAssignment = true; - } else { - usePropertyAssignmentInsteadOfVarDecl = true; - } - } - - if (this.emitState.container === 2 /* DynamicModule */) { - moduleNamePrefix = "exports."; - } else { - moduleNamePrefix = this.moduleName + "."; - } - } - - if (isAmdCodeGen && isExternalModuleReference) { - needsPropertyAssignment = true; - } else { - this.recordSourceMappingStart(importDeclAST); - if (usePropertyAssignmentInsteadOfVarDecl) { - this.writeToOutput(moduleNamePrefix); - } else { - this.writeToOutput("var "); - } - this.writeToOutput(importDeclAST.identifier.text() + " = "); - var aliasAST = importDeclAST.moduleReference; - - if (isExternalModuleReference) { - this.writeToOutput("require(" + aliasAST.stringLiteral.text() + ")"); - } else { - this.emitJavascript(aliasAST.moduleName, false); - } - - this.recordSourceMappingEnd(importDeclAST); - this.writeToOutput(";"); - - if (needsPropertyAssignment) { - this.writeLineToOutput(""); - this.emitIndent(); - } - } - - if (needsPropertyAssignment) { - this.writeToOutputWithSourceMapRecord(moduleNamePrefix + importDeclAST.identifier.text() + " = " + importDeclAST.identifier.text(), importDeclAST); - this.writeToOutput(";"); - } - this.emitComments(importDeclAST, false); - }; - - Emitter.prototype.createSourceMapper = function (document, jsFileName, jsFile, sourceMapOut, resolvePath) { - this.sourceMapper = new TypeScript.SourceMapper(jsFile, sourceMapOut, document, jsFileName, this.emitOptions, resolvePath); - }; - - Emitter.prototype.setSourceMapperNewSourceFile = function (document) { - this.sourceMapper.setNewSourceFile(document, this.emitOptions); - }; - - Emitter.prototype.updateLineAndColumn = function (s) { - var lineNumbers = TypeScript.TextUtilities.parseLineStarts(s); - if (lineNumbers.length > 1) { - this.emitState.line += lineNumbers.length - 1; - this.emitState.column = s.length - lineNumbers[lineNumbers.length - 1]; - } else { - this.emitState.column += s.length; - } - }; - - Emitter.prototype.writeToOutputWithSourceMapRecord = function (s, astSpan) { - this.recordSourceMappingStart(astSpan); - this.writeToOutput(s); - this.recordSourceMappingEnd(astSpan); - }; - - Emitter.prototype.writeToOutput = function (s) { - this.outfile.Write(s); - this.updateLineAndColumn(s); - }; - - Emitter.prototype.writeLineToOutput = function (s, force) { - if (typeof force === "undefined") { force = false; } - if (!force && s === "" && this.emitState.column === 0) { - return; - } - - this.outfile.WriteLine(s); - this.updateLineAndColumn(s); - this.emitState.column = 0; - this.emitState.line++; - }; - - Emitter.prototype.writeCaptureThisStatement = function (ast) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord(this.captureThisStmtString, ast); - this.writeLineToOutput(""); - }; - - Emitter.prototype.setContainer = function (c) { - var temp = this.emitState.container; - this.emitState.container = c; - return temp; - }; - - Emitter.prototype.getIndentString = function () { - return this.indenter.getIndent(); - }; - - Emitter.prototype.emitIndent = function () { - this.writeToOutput(this.getIndentString()); - }; - - Emitter.prototype.emitComment = function (comment, trailing, first) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var text = getTrimmedTextLines(comment); - var emitColumn = this.emitState.column; - - if (emitColumn === 0) { - this.emitIndent(); - } else if (trailing && first) { - this.writeToOutput(" "); - } - - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - - if (text.length > 1 || comment.endsLine) { - for (var i = 1; i < text.length; i++) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput(text[i]); - } - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingEnd(comment); - this.writeToOutput(" "); - return; - } - } else { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } - - if (!trailing && emitColumn !== 0) { - this.emitIndent(); - } - }; - - Emitter.prototype.emitComments = function (ast, pre, onlyPinnedOrTripleSlashComments) { - var _this = this; - if (typeof onlyPinnedOrTripleSlashComments === "undefined") { onlyPinnedOrTripleSlashComments = false; } - if (ast && ast.kind() !== 146 /* Block */) { - if (ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ || ast.parent.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - return; - } - } - - if (pre) { - var preComments = ast.preComments(); - - if (preComments && ast === this.detachedCommentsElement) { - var detachedComments = this.getDetachedComments(ast); - preComments = preComments.slice(detachedComments.length); - this.detachedCommentsElement = null; - } - - if (preComments && onlyPinnedOrTripleSlashComments) { - preComments = TypeScript.ArrayUtilities.where(preComments, function (c) { - return _this.isPinnedOrTripleSlash(c); - }); - } - - this.emitCommentsArray(preComments, false); - } else { - this.emitCommentsArray(ast.postComments(), true); - } - }; - - Emitter.prototype.isPinnedOrTripleSlash = function (comment) { - var fullText = comment.fullText(); - if (fullText.match(TypeScript.tripleSlashReferenceRegExp)) { - return true; - } else { - return fullText.indexOf("/*!") === 0; - } - }; - - Emitter.prototype.emitCommentsArray = function (comments, trailing) { - if (!this.emitOptions.compilationSettings().removeComments() && comments) { - for (var i = 0, n = comments.length; i < n; i++) { - this.emitComment(comments[i], trailing, i === 0); - } - } - }; - - Emitter.prototype.emitObjectLiteralExpression = function (objectLiteral) { - this.recordSourceMappingStart(objectLiteral); - - this.writeToOutput("{"); - this.emitCommaSeparatedList(objectLiteral, objectLiteral.propertyAssignments, " ", true); - this.writeToOutput("}"); - - this.recordSourceMappingEnd(objectLiteral); - }; - - Emitter.prototype.emitArrayLiteralExpression = function (arrayLiteral) { - this.recordSourceMappingStart(arrayLiteral); - - this.writeToOutput("["); - this.emitCommaSeparatedList(arrayLiteral, arrayLiteral.expressions, "", true); - this.writeToOutput("]"); - - this.recordSourceMappingEnd(arrayLiteral); - }; - - Emitter.prototype.emitObjectCreationExpression = function (objectCreationExpression) { - this.recordSourceMappingStart(objectCreationExpression); - this.writeToOutput("new "); - var target = objectCreationExpression.expression; - - this.emit(target); - if (objectCreationExpression.argumentList) { - this.recordSourceMappingStart(objectCreationExpression.argumentList); - this.writeToOutput("("); - this.emitCommaSeparatedList(objectCreationExpression.argumentList, objectCreationExpression.argumentList.arguments, "", false); - this.writeToOutputWithSourceMapRecord(")", objectCreationExpression.argumentList.closeParenToken); - this.recordSourceMappingEnd(objectCreationExpression.argumentList); - } - - this.recordSourceMappingEnd(objectCreationExpression); - }; - - Emitter.prototype.getConstantDecl = function (dotExpr) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(dotExpr); - if (pullSymbol && pullSymbol.kind === 67108864 /* EnumMember */) { - var pullDecls = pullSymbol.getDeclarations(); - if (pullDecls.length === 1) { - var pullDecl = pullDecls[0]; - if (pullDecl.kind === 67108864 /* EnumMember */) { - return pullDecl; - } - } - } - - return null; - }; - - Emitter.prototype.tryEmitConstant = function (dotExpr) { - var propertyName = dotExpr.name; - var boundDecl = this.getConstantDecl(dotExpr); - if (boundDecl) { - var value = boundDecl.constantValue; - if (value !== null) { - this.recordSourceMappingStart(dotExpr); - this.writeToOutput(value.toString()); - var comment = " /* "; - comment += propertyName.text(); - comment += " */"; - this.writeToOutput(comment); - this.recordSourceMappingEnd(dotExpr); - return true; - } - } - - return false; - }; - - Emitter.prototype.emitInvocationExpression = function (callNode) { - this.recordSourceMappingStart(callNode); - var target = callNode.expression; - var args = callNode.argumentList.arguments; - - if (target.kind() === 212 /* MemberAccessExpression */ && target.expression.kind() === 50 /* SuperKeyword */) { - this.emit(target); - this.writeToOutput(".call"); - this.recordSourceMappingStart(args); - this.writeToOutput("("); - this.emitThis(); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - } else { - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("_super.call"); - } else { - this.emitJavascript(target, false); - } - this.recordSourceMappingStart(args); - this.writeToOutput("("); - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("this"); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - } - } - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - - this.writeToOutputWithSourceMapRecord(")", callNode.argumentList.closeParenToken); - this.recordSourceMappingEnd(args); - this.recordSourceMappingEnd(callNode); - }; - - Emitter.prototype.emitParameterList = function (list) { - this.writeToOutput("("); - this.emitCommentsArray(list.openParenTrailingComments, true); - this.emitFunctionParameters(TypeScript.ASTHelpers.parametersFromParameterList(list)); - this.writeToOutput(")"); - }; - - Emitter.prototype.emitFunctionParameters = function (parameters) { - var argsLen = 0; - - if (parameters) { - this.emitComments(parameters.ast, true); - - var tempContainer = this.setContainer(6 /* Args */); - argsLen = parameters.length; - var printLen = argsLen; - if (parameters.lastParameterIsRest()) { - printLen--; - } - for (var i = 0; i < printLen; i++) { - var arg = parameters.astAt(i); - this.emit(arg); - - if (i < (printLen - 1)) { - this.writeToOutput(", "); - } - } - this.setContainer(tempContainer); - - this.emitComments(parameters.ast, false); - } - }; - - Emitter.prototype.emitFunctionBodyStatements = function (name, funcDecl, parameterList, block, bodyExpression) { - this.writeLineToOutput(" {"); - if (name) { - this.recordSourceMappingNameStart(name); - } - - this.indenter.increaseIndent(); - - if (block) { - this.emitDetachedComments(block.statements); - } - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - if (parameterList) { - this.emitDefaultValueAssignments(parameterList); - this.emitRestParameterInitializer(parameterList); - } - - if (block) { - this.emitList(block.statements); - this.emitCommentsArray(block.closeBraceLeadingComments, false); - } else { - this.emitIndent(); - this.emitCommentsArray(bodyExpression.preComments(), false); - this.writeToOutput("return "); - this.emit(bodyExpression); - this.writeLineToOutput(";"); - this.emitCommentsArray(bodyExpression.postComments(), true); - } - - this.indenter.decreaseIndent(); - this.emitIndent(); - - if (block) { - this.writeToOutputWithSourceMapRecord("}", block.closeBraceToken); - } else { - this.writeToOutputWithSourceMapRecord("}", bodyExpression); - } - - if (name) { - this.recordSourceMappingNameEnd(); - } - }; - - Emitter.prototype.emitDefaultValueAssignments = function (parameters) { - var n = parameters.length; - if (parameters.lastParameterIsRest()) { - n--; - } - - for (var i = 0; i < n; i++) { - var arg = parameters.astAt(i); - var id = parameters.identifierAt(i); - var equalsValueClause = parameters.initializerAt(i); - if (equalsValueClause) { - this.emitIndent(); - this.recordSourceMappingStart(arg); - this.writeToOutput("if (typeof " + id.text() + " === \"undefined\") { "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.emitJavascript(equalsValueClause, false); - this.writeLineToOutput("; }"); - this.recordSourceMappingEnd(arg); - } - } - }; - - Emitter.prototype.emitRestParameterInitializer = function (parameters) { - if (parameters.lastParameterIsRest()) { - var n = parameters.length; - var lastArg = parameters.astAt(n - 1); - var id = parameters.identifierAt(n - 1); - this.emitIndent(); - this.recordSourceMappingStart(lastArg); - this.writeToOutput("var "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.writeLineToOutput(" = [];"); - this.recordSourceMappingEnd(lastArg); - this.emitIndent(); - this.writeToOutput("for ("); - this.writeToOutputWithSourceMapRecord("var _i = 0;", lastArg); - this.writeToOutput(" "); - this.writeToOutputWithSourceMapRecord("_i < (arguments.length - " + (n - 1) + ")", lastArg); - this.writeToOutput("; "); - this.writeToOutputWithSourceMapRecord("_i++", lastArg); - this.writeLineToOutput(") {"); - this.indenter.increaseIndent(); - this.emitIndent(); - - this.writeToOutputWithSourceMapRecord(id.text() + "[_i] = arguments[_i + " + (n - 1) + "];", lastArg); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("}"); - } - }; - - Emitter.prototype.getImportDecls = function (fileName) { - var topLevelDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - var result = []; - - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - var queue = dynamicModuleDecl.getChildDecls(); - - for (var i = 0, n = queue.length; i < n; i++) { - var decl = queue[i]; - - if (decl.kind & 128 /* TypeAlias */) { - var importStatementAST = this.semanticInfoChain.getASTForDecl(decl); - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var symbol = decl.getSymbol(); - var typeSymbol = symbol && symbol.type; - if (typeSymbol && typeSymbol !== this.semanticInfoChain.anyTypeSymbol && !typeSymbol.isError()) { - result.push(decl); - } - } - } - } - - return result; - }; - - Emitter.prototype.getModuleImportAndDependencyList = function (sourceUnit) { - var importList = ""; - var dependencyList = ""; - - var importDecls = this.getImportDecls(this.document.fileName); - - if (importDecls.length) { - for (var i = 0; i < importDecls.length; i++) { - var importStatementDecl = importDecls[i]; - var importStatementSymbol = importStatementDecl.getSymbol(); - var importStatementAST = this.semanticInfoChain.getASTForDecl(importStatementDecl); - - if (importStatementSymbol.isUsedAsValue()) { - if (i <= importDecls.length - 1) { - dependencyList += ", "; - importList += ", "; - } - - importList += importStatementDecl.name; - dependencyList += importStatementAST.moduleReference.stringLiteral.text(); - } - } - } - - var amdDependencies = this.document.amdDependencies(); - for (var i = 0; i < amdDependencies.length; i++) { - dependencyList += ", \"" + amdDependencies[i] + "\""; - } - - return { - importList: importList, - dependencyList: dependencyList - }; - }; - - Emitter.prototype.shouldCaptureThis = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - var scriptDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - return TypeScript.hasFlag(scriptDecl.flags, 262144 /* MustCaptureThis */); - } - - var decl = this.semanticInfoChain.getDeclForAST(ast); - if (decl) { - return TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */); - } - - return false; - }; - - Emitter.prototype.emitEnum = function (moduleDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - this.moduleName = moduleDecl.identifier.text(); - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleDecl.identifier); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleDecl.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleDecl.identifier); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(this.moduleName); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - this.emitSeparatedList(moduleDecl.enumElements); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.getModuleDeclToVerifyChildNameCollision = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - if (TypeScript.ArrayUtilities.contains(this.declStack, moduleDecl)) { - return moduleDecl; - } else if (changeNameIfAnyDeclarationInContext) { - var symbol = moduleDecl.getSymbol(); - if (symbol) { - var otherDecls = symbol.getDeclarations(); - for (var i = 0; i < otherDecls.length; i++) { - if (TypeScript.ArrayUtilities.contains(this.declStack, otherDecls[i])) { - return otherDecls[i]; - } - } - } - } - - return null; - }; - - Emitter.prototype.hasChildNameCollision = function (moduleName, parentDecl) { - var _this = this; - var childDecls = parentDecl.getChildDecls(); - return TypeScript.ArrayUtilities.any(childDecls, function (childDecl) { - var childAST = _this.semanticInfoChain.getASTForDecl(childDecl); - - if (childDecl.kind != 67108864 /* EnumMember */ && _this.shouldEmit(childAST)) { - if (childDecl.name === moduleName) { - if (parentDecl.kind != 8 /* Class */) { - return true; - } - - if (!(childDecl.kind == 65536 /* Method */ || childDecl.kind == 4096 /* Property */ || childDecl.kind == 524288 /* SetAccessor */ || childDecl.kind == 262144 /* GetAccessor */)) { - return true; - } - } - - if (_this.hasChildNameCollision(moduleName, childDecl)) { - return true; - } - } - return false; - }); - }; - - Emitter.prototype.getModuleName = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - var moduleName = moduleDecl.name; - var moduleDisplayName = moduleDecl.getDisplayName(); - - moduleDecl = this.getModuleDeclToVerifyChildNameCollision(moduleDecl, changeNameIfAnyDeclarationInContext); - if (moduleDecl && moduleDecl.kind != 64 /* Enum */) { - while (this.hasChildNameCollision(moduleName, moduleDecl)) { - moduleName = "_" + moduleName; - moduleDisplayName = "_" + moduleDisplayName; - } - } - - return moduleDisplayName; - }; - - Emitter.prototype.emitModuleDeclarationWorker = function (moduleDecl) { - if (moduleDecl.stringLiteral) { - this.emitSingleModuleDeclaration(moduleDecl, moduleDecl.stringLiteral); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[0]); - } - }; - - Emitter.prototype.emitSingleModuleDeclaration = function (moduleDecl, moduleName) { - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDecl, moduleName); - - if (isLastName) { - this.emitComments(moduleDecl, true); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleName); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - - if (moduleDecl.stringLiteral) { - this.moduleName = moduleDecl.stringLiteral.valueText(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - } else { - this.moduleName = moduleName.text(); - } - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleName); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleName); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - - this.moduleName = this.getModuleName(pullDecl); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleName); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(moduleName.text()); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - if (moduleName === moduleDecl.stringLiteral) { - this.emitList(moduleDecl.moduleElements); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - var nameIndex = moduleNames.indexOf(moduleName); - TypeScript.Debug.assert(nameIndex >= 0); - - if (isLastName) { - this.emitList(moduleDecl.moduleElements); - } else { - this.emitIndent(); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[nameIndex + 1]); - this.writeLineToOutput(""); - } - } - - this.moduleName = moduleName.text(); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - this.recordSourceMappingStart(moduleDecl.endingToken); - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - - if (isLastName) { - this.emitComments(moduleDecl, false); - } - }; - - Emitter.prototype.emitEnumElement = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - TypeScript.Debug.assert(pullDecl && pullDecl.kind === 67108864 /* EnumMember */); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - var name = varDecl.propertyName.text(); - var quoted = TypeScript.isQuoted(name); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.writeToOutput(']'); - - if (varDecl.equalsValueClause) { - this.emit(varDecl.equalsValueClause); - } else if (pullDecl.constantValue !== null) { - this.writeToOutput(' = '); - this.writeToOutput(pullDecl.constantValue.toString()); - } else { - this.writeToOutput(' = null'); - } - - this.writeToOutput('] = '); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - this.writeToOutput(';'); - }; - - Emitter.prototype.emitElementAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("["); - this.emit(expression.argumentExpression); - this.writeToOutput("]"); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimpleArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitParenthesizedArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitAnyArrowFunctionExpression = function (arrowFunction, funcName, parameters, block, expression) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = true; - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(arrowFunction); - - var pullDecl = this.semanticInfoChain.getDeclForAST(arrowFunction); - this.pushDecl(pullDecl); - - this.emitComments(arrowFunction, true); - - this.recordSourceMappingStart(arrowFunction); - this.writeToOutput("function "); - this.writeToOutput("("); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, arrowFunction, parameters, block, expression); - - this.recordSourceMappingEnd(arrowFunction); - - this.recordSourceMappingEnd(arrowFunction); - - this.emitComments(arrowFunction, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConstructor = function (funcDecl) { - if (!funcDecl.block) { - return; - } - var temp = this.setContainer(4 /* Constructor */); - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - this.writeToOutput(this.thisClassNode.identifier.text()); - this.writeToOutput("("); - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart("constructor"); - this.indenter.increaseIndent(); - - this.emitDefaultValueAssignments(parameters); - this.emitRestParameterInitializer(parameters); - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - this.emitConstructorStatements(funcDecl); - this.emitCommentsArray(funcDecl.block.closeBraceLeadingComments, false); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", funcDecl.block.closeBraceToken); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - }; - - Emitter.prototype.emitGetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("get "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList), accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitSetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("set "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, parameters, accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitFunctionExpression = function (funcDecl) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier ? funcDecl.identifier.text() : null; - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - this.writeToOutput(funcDecl.identifier.text()); - this.recordSourceMappingEnd(funcDecl.identifier); - } - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitFunction = function (funcDecl) { - if (funcDecl.block === null) { - return; - } - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier.text(); - - this.recordSourceMappingStart(funcDecl); - - var printName = funcDecl.identifier !== null; - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (printName) { - var id = funcDecl.identifier.text(); - if (id) { - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - } - this.writeToOutput(id); - if (funcDecl.identifier) { - this.recordSourceMappingEnd(funcDecl.identifier); - } - } - } - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.identifier.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - - if (funcDecl.block) { - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - if ((this.emitState.container === 1 /* Module */ || this.emitState.container === 2 /* DynamicModule */) && pullFunctionDecl && TypeScript.hasFlag(pullFunctionDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = this.emitState.container === 1 /* Module */ ? this.moduleName : "exports"; - this.recordSourceMappingStart(funcDecl); - this.writeToOutput(modName + "." + funcName + " = " + funcName + ";"); - this.recordSourceMappingEnd(funcDecl); - } - } - }; - - Emitter.prototype.emitAmbientVarDecl = function (varDecl) { - this.recordSourceMappingStart(this.currentVariableDeclaration); - if (varDecl.equalsValueClause) { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - this.emitJavascript(varDecl.equalsValueClause, false); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - }; - - Emitter.prototype.emitVarDeclVar = function () { - if (this.currentVariableDeclaration) { - this.writeToOutput("var "); - } - }; - - Emitter.prototype.emitVariableDeclaration = function (declaration) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - - this.emitComments(declaration, true); - - var pullVarDecl = this.semanticInfoChain.getDeclForAST(varDecl); - var isAmbientWithoutInit = pullVarDecl && TypeScript.hasFlag(pullVarDecl.flags, 8 /* Ambient */) && varDecl.equalsValueClause === null; - if (!isAmbientWithoutInit) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.currentVariableDeclaration = declaration; - - for (var i = 0, n = declaration.declarators.nonSeparatorCount(); i < n; i++) { - var declarator = declaration.declarators.nonSeparatorAt(i); - - if (i > 0) { - this.writeToOutput(", "); - } - - this.emit(declarator); - } - this.currentVariableDeclaration = prevVariableDeclaration; - - this.recordSourceMappingEnd(declaration); - } - - this.emitComments(declaration, false); - }; - - Emitter.prototype.emitMemberVariableDeclaration = function (varDecl) { - TypeScript.Debug.assert(!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause); - - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - var quotedOrNumber = TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */; - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - - if (quotedOrNumber) { - this.writeToOutput("this["); - } else { - this.writeToOutput("this."); - } - - this.writeToOutputWithSourceMapRecord(varDecl.variableDeclarator.propertyName.text(), varDecl.variableDeclarator.propertyName); - - if (quotedOrNumber) { - this.writeToOutput("]"); - } - - if (varDecl.variableDeclarator.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.variableDeclarator.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - if (this.emitState.container !== 6 /* Args */) { - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitVariableDeclarator = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - if (pullDecl && (pullDecl.flags & 8 /* Ambient */) === 8 /* Ambient */) { - this.emitAmbientVarDecl(varDecl); - } else { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(this.currentVariableDeclaration); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.propertyName.text(); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - var parentIsModule = parentDecl && (parentDecl.flags & 102400 /* SomeInitializedModule */); - - if (parentIsModule) { - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.emitVarDeclVar(); - } else { - if (this.emitState.container === 2 /* DynamicModule */) { - this.writeToOutput("exports."); - } else { - this.writeToOutput(this.moduleName + "."); - } - } - } else { - this.emitVarDeclVar(); - } - - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - - if (varDecl.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - this.currentVariableDeclaration = undefined; - this.popDecl(pullDecl); - }; - - Emitter.prototype.symbolIsUsedInItsEnclosingContainer = function (symbol, dynamic) { - if (typeof dynamic === "undefined") { dynamic = false; } - var symDecls = symbol.getDeclarations(); - - if (symDecls.length) { - var enclosingDecl = this.getEnclosingDecl(); - if (enclosingDecl) { - var parentDecl = symDecls[0].getParentDecl(); - if (parentDecl) { - var symbolDeclarationEnclosingContainer = parentDecl; - var enclosingContainer = enclosingDecl; - - while (symbolDeclarationEnclosingContainer) { - if (symbolDeclarationEnclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - symbolDeclarationEnclosingContainer = symbolDeclarationEnclosingContainer.getParentDecl(); - } - - if (symbolDeclarationEnclosingContainer) { - while (enclosingContainer) { - if (enclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - - enclosingContainer = enclosingContainer.getParentDecl(); - } - } - - if (symbolDeclarationEnclosingContainer && enclosingContainer) { - var same = symbolDeclarationEnclosingContainer === enclosingContainer; - - if (!same && symbol.anyDeclHasFlag(32768 /* InitializedModule */)) { - same = symbolDeclarationEnclosingContainer === enclosingContainer.getParentDecl(); - } - - return same; - } - } - } - } - - return false; - }; - - Emitter.prototype.shouldQualifySymbolNameWithParentName = function (symbol) { - var enclosingContextDeclPath = this.declStack; - var symbolDeclarations = symbol.getDeclarations(); - for (var i = 0; i < symbolDeclarations.length; i++) { - var currentDecl = symbolDeclarations[i]; - var declParent = currentDecl.getParentDecl(); - - if (currentDecl.kind === 67108864 /* EnumMember */) { - return true; - } - - if (!TypeScript.hasFlag(currentDecl.flags, 1 /* Exported */)) { - return false; - } - - if (currentDecl.kind === 512 /* Variable */ && !TypeScript.hasFlag(currentDecl.flags, 118784 /* ImplicitVariable */)) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(this.declStack, declParent)) { - return false; - } - } - - return true; - }; - - Emitter.prototype.getSymbolForEmit = function (ast) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(ast); - var pullSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(ast); - if (pullSymbol && pullSymbolAlias) { - var symbolToCompare = TypeScript.isTypesOnlyLocation(ast) ? pullSymbolAlias.getExportAssignedTypeSymbol() : pullSymbolAlias.getExportAssignedValueSymbol(); - - if (pullSymbol === symbolToCompare) { - pullSymbol = pullSymbolAlias; - pullSymbolAlias = null; - } - } - return { symbol: pullSymbol, aliasSymbol: pullSymbolAlias }; - }; - - Emitter.prototype.emitName = function (name, addThis) { - this.emitComments(name, true); - this.recordSourceMappingStart(name); - if (name.text().length > 0) { - var symbolForEmit = this.getSymbolForEmit(name); - var pullSymbol = symbolForEmit.symbol; - if (!pullSymbol) { - pullSymbol = this.semanticInfoChain.anyTypeSymbol; - } - var pullSymbolAlias = symbolForEmit.aliasSymbol; - var pullSymbolKind = pullSymbol.kind; - var isLocalAlias = pullSymbolAlias && (pullSymbolAlias.getDeclarations()[0].getParentDecl() === this.getEnclosingDecl()); - if (addThis && (this.emitState.container !== 6 /* Args */) && pullSymbol) { - var pullSymbolContainer = pullSymbol.getContainer(); - - if (pullSymbolContainer) { - var pullSymbolContainerKind = pullSymbolContainer.kind; - - if (TypeScript.PullHelpers.symbolIsModule(pullSymbolContainer) || pullSymbolContainerKind === 64 /* Enum */ || pullSymbolContainer.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) { - var needToEmitParentName = this.shouldQualifySymbolNameWithParentName(pullSymbol); - if (needToEmitParentName) { - var parentDecl = pullSymbol.getDeclarations()[0].getParentDecl(); - TypeScript.Debug.assert(parentDecl && !parentDecl.isRootDecl()); - this.writeToOutput(this.getModuleName(parentDecl, true) + "."); - } - } else if (pullSymbolContainerKind === 32 /* DynamicModule */ || pullSymbolContainer.anyDeclHasFlag(65536 /* InitializedDynamicModule */)) { - if (pullSymbolKind === 4096 /* Property */) { - this.writeToOutput("exports."); - } else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && !isLocalAlias && !pullSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */) && pullSymbol.kind !== 32768 /* ConstructorMethod */ && pullSymbol.kind !== 8 /* Class */ && pullSymbol.kind !== 64 /* Enum */) { - this.writeToOutput("exports."); - } - } - } - } - - this.writeToOutput(name.text()); - } - - this.recordSourceMappingEnd(name); - this.emitComments(name, false); - }; - - Emitter.prototype.recordSourceMappingNameStart = function (name) { - if (this.sourceMapper) { - var nameIndex = -1; - if (name) { - if (this.sourceMapper.currentNameIndex.length > 0) { - var parentNameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - if (parentNameIndex !== -1) { - name = this.sourceMapper.names[parentNameIndex] + "." + name; - } - } - - var nameIndex = this.sourceMapper.names.length - 1; - for (nameIndex; nameIndex >= 0; nameIndex--) { - if (this.sourceMapper.names[nameIndex] === name) { - break; - } - } - - if (nameIndex === -1) { - nameIndex = this.sourceMapper.names.length; - this.sourceMapper.names.push(name); - } - } - this.sourceMapper.currentNameIndex.push(nameIndex); - } - }; - - Emitter.prototype.recordSourceMappingNameEnd = function () { - if (this.sourceMapper) { - this.sourceMapper.currentNameIndex.pop(); - } - }; - - Emitter.prototype.recordSourceMappingStart = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - var lineCol = { line: -1, character: -1 }; - var sourceMapping = new TypeScript.SourceMapping(); - sourceMapping.start.emittedColumn = this.emitState.column; - sourceMapping.start.emittedLine = this.emitState.line; - - var lineMap = this.document.lineMap(); - lineMap.fillLineAndCharacterFromPosition(ast.start(), lineCol); - sourceMapping.start.sourceColumn = lineCol.character; - sourceMapping.start.sourceLine = lineCol.line + 1; - lineMap.fillLineAndCharacterFromPosition(ast.end(), lineCol); - sourceMapping.end.sourceColumn = lineCol.character; - sourceMapping.end.sourceLine = lineCol.line + 1; - - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceLine)); - - if (this.sourceMapper.currentNameIndex.length > 0) { - sourceMapping.nameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - } - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - siblings.push(sourceMapping); - this.sourceMapper.currentMappings.push(sourceMapping.childMappings); - this.sourceMapper.increaseMappingLevel(ast); - } - }; - - Emitter.prototype.recordSourceMappingEnd = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - this.sourceMapper.currentMappings.pop(); - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - var sourceMapping = siblings[siblings.length - 1]; - - sourceMapping.end.emittedColumn = this.emitState.column; - sourceMapping.end.emittedLine = this.emitState.line; - - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedLine)); - - this.sourceMapper.decreaseMappingLevel(ast); - } - }; - - Emitter.prototype.getOutputFiles = function () { - var result = []; - if (this.sourceMapper !== null) { - this.sourceMapper.emitSourceMapping(); - result.push(this.sourceMapper.getOutputFile()); - } - - result.push(this.outfile.getOutputFile()); - return result; - }; - - Emitter.prototype.emitParameterPropertyAndMemberVariableAssignments = function () { - var constructorDecl = getLastConstructor(this.thisClassNode); - - if (constructorDecl) { - for (var i = 0, n = constructorDecl.callSignature.parameterList.parameters.nonSeparatorCount(); i < n; i++) { - var parameter = constructorDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - this.emitIndent(); - this.recordSourceMappingStart(parameter); - this.writeToOutputWithSourceMapRecord("this." + parameter.identifier.text(), parameter.identifier); - this.writeToOutput(" = "); - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(parameter); - } - } - } - - for (var i = 0, n = this.thisClassNode.classElements.childCount(); i < n; i++) { - if (this.thisClassNode.classElements.childAt(i).kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = this.thisClassNode.classElements.childAt(i); - if (!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitIndent(); - this.emitMemberVariableDeclaration(varDecl); - this.writeLineToOutput(""); - } - } - } - }; - - Emitter.prototype.isOnSameLine = function (pos1, pos2) { - var lineMap = this.document.lineMap(); - return lineMap.getLineNumberFromPosition(pos1) === lineMap.getLineNumberFromPosition(pos2); - }; - - Emitter.prototype.emitCommaSeparatedList = function (parent, list, buffer, preserveNewLines) { - if (list === null || list.nonSeparatorCount() === 0) { - return; - } - - var startLine = preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(0).end()); - - if (preserveNewLines) { - this.indenter.increaseIndent(); - } - - if (startLine) { - this.writeLineToOutput(""); - } else { - this.writeToOutput(buffer); - } - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - var emitNode = list.nonSeparatorAt(i); - - this.emitJavascript(emitNode, startLine); - - if (i < (n - 1)) { - startLine = preserveNewLines && !this.isOnSameLine(emitNode.end(), list.nonSeparatorAt(i + 1).start()); - if (startLine) { - this.writeLineToOutput(","); - } else { - this.writeToOutput(", "); - } - } - } - - if (preserveNewLines) { - this.indenter.decreaseIndent(); - } - - if (preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(list.nonSeparatorCount() - 1).end())) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(buffer); - } - }; - - Emitter.prototype.emitList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.childCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitSeparatedList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.nonSeparatorCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.nonSeparatorAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.isDirectivePrologueElement = function (node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var exprStatement = node; - return exprStatement.expression.kind() === 14 /* StringLiteral */; - } - - return false; - }; - - Emitter.prototype.emitSpaceBetweenConstructs = function (node1, node2) { - if (node1 === null || node2 === null) { - return; - } - - if (node1.start() === -1 || node1.end() === -1 || node2.start() === -1 || node2.end() === -1) { - return; - } - - var lineMap = this.document.lineMap(); - var node1EndLine = lineMap.getLineNumberFromPosition(node1.end()); - var node2StartLine = lineMap.getLineNumberFromPosition(node2.start()); - - if ((node2StartLine - node1EndLine) > 1) { - this.writeLineToOutput("", true); - } - }; - - Emitter.prototype.getDetachedComments = function (element) { - var preComments = element.preComments(); - if (preComments) { - var lineMap = this.document.lineMap(); - - var detachedComments = []; - var lastComment = null; - - for (var i = 0, n = preComments.length; i < n; i++) { - var comment = preComments[i]; - - if (lastComment) { - var lastCommentLine = lineMap.getLineNumberFromPosition(lastComment.end()); - var commentLine = lineMap.getLineNumberFromPosition(comment.start()); - - if (commentLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - detachedComments.push(comment); - lastComment = comment; - } - - var lastCommentLine = lineMap.getLineNumberFromPosition(TypeScript.ArrayUtilities.last(detachedComments).end()); - var astLine = lineMap.getLineNumberFromPosition(element.start()); - if (astLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - return []; - }; - - Emitter.prototype.emitPossibleCopyrightHeaders = function (script) { - this.emitDetachedComments(script.moduleElements); - }; - - Emitter.prototype.emitDetachedComments = function (list) { - if (list.childCount() > 0) { - var firstElement = list.childAt(0); - - this.detachedCommentsElement = firstElement; - this.emitCommentsArray(this.getDetachedComments(this.detachedCommentsElement), false); - } - }; - - Emitter.prototype.emitScriptElements = function (sourceUnit) { - var list = sourceUnit.moduleElements; - - this.emitPossibleCopyrightHeaders(sourceUnit); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var node = list.childAt(i); - - if (!this.isDirectivePrologueElement(node)) { - break; - } - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - } - - this.emitPrologue(sourceUnit); - - var isExternalModule = this.document.isExternalModule(); - var isNonElidedExternalModule = isExternalModule && !TypeScript.ASTHelpers.scriptIsElided(sourceUnit); - if (isNonElidedExternalModule) { - this.recordSourceMappingStart(sourceUnit); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - var dependencyList = "[\"require\", \"exports\""; - var importList = "require, exports"; - - var importAndDependencyList = this.getModuleImportAndDependencyList(sourceUnit); - importList += importAndDependencyList.importList; - dependencyList += importAndDependencyList.dependencyList + "]"; - - this.writeLineToOutput("define(" + dependencyList + "," + " function(" + importList + ") {"); - } - } - - if (isExternalModule) { - var temp = this.setContainer(2 /* DynamicModule */); - - var svModuleName = this.moduleName; - this.moduleName = sourceUnit.fileName(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - - this.setExportAssignment(null); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.increaseIndent(); - } - - var externalModule = this.semanticInfoChain.getDeclForAST(this.document.sourceUnit()); - - if (TypeScript.hasFlag(externalModule.flags, 262144 /* MustCaptureThis */)) { - this.writeCaptureThisStatement(sourceUnit); - } - - this.pushDecl(externalModule); - } - - this.emitList(list, true, i, n); - - if (isExternalModule) { - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.decreaseIndent(); - } - - if (isNonElidedExternalModule) { - var exportAssignment = this.getExportAssignment(); - var exportAssignmentIdentifierText = exportAssignment ? exportAssignment.identifier.text() : null; - var exportAssignmentValueSymbol = externalModule.getSymbol().getExportAssignedValueSymbol(); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.indenter.increaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + exportAssignmentIdentifierText, exportAssignment); - this.writeLineToOutput(";"); - this.indenter.decreaseIndent(); - } - this.writeToOutput("});"); - } else if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("module.exports = " + exportAssignmentIdentifierText, exportAssignment); - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(sourceUnit); - this.writeLineToOutput(""); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - this.popDecl(externalModule); - } - }; - - Emitter.prototype.emitConstructorStatements = function (funcDecl) { - var list = funcDecl.block.statements; - - if (list === null) { - return; - } - - this.emitComments(list, true); - - var emitPropertyAssignmentsAfterSuperCall = TypeScript.ASTHelpers.getExtendsHeritageClause(this.thisClassNode.heritageClauses) !== null; - var propertyAssignmentIndex = emitPropertyAssignmentsAfterSuperCall ? 1 : 0; - var lastEmittedNode = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - - lastEmittedNode = node; - } - } - - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitJavascript = function (ast, startLine) { - if (ast === null) { - return; - } - - if (startLine && this.indenter.indentAmt > 0) { - this.emitIndent(); - } - - this.emit(ast); - }; - - Emitter.prototype.emitAccessorMemberDeclaration = function (funcDecl, name, className, isProto) { - if (funcDecl.kind() !== 139 /* GetAccessor */) { - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - if (accessorSymbol.getGetter()) { - return; - } - } - - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - - this.writeToOutput("Object.defineProperty(" + className); - if (isProto) { - this.writeToOutput(".prototype, "); - } else { - this.writeToOutput(", "); - } - - var functionName = name.text(); - if (TypeScript.isQuoted(functionName)) { - this.writeToOutput(functionName); - } else { - this.writeToOutput('"' + functionName + '"'); - } - - this.writeLineToOutput(", {"); - - this.indenter.increaseIndent(); - - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - if (accessors.getter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.getter); - this.emitComments(accessors.getter, true); - this.writeToOutput("get: "); - this.emitAccessorBody(accessors.getter, accessors.getter.parameterList, accessors.getter.block); - this.writeLineToOutput(","); - } - - if (accessors.setter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.setter); - this.emitComments(accessors.setter, true); - this.writeToOutput("set: "); - this.emitAccessorBody(accessors.setter, accessors.setter.parameterList, accessors.setter.block); - this.writeLineToOutput(","); - } - - this.emitIndent(); - this.writeLineToOutput("enumerable: true,"); - this.emitIndent(); - this.writeLineToOutput("configurable: true"); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("});"); - this.recordSourceMappingEnd(funcDecl); - }; - - Emitter.prototype.emitAccessorBody = function (funcDecl, parameterList, block) { - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, funcDecl, parameters, block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClass = function (classDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.pushDecl(pullDecl); - - var svClassNode = this.thisClassNode; - this.thisClassNode = classDecl; - var className = classDecl.identifier.text(); - this.emitComments(classDecl, true); - var temp = this.setContainer(3 /* Class */); - - this.recordSourceMappingStart(classDecl); - this.writeToOutput("var " + className); - - var hasBaseClass = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses) !== null; - var baseTypeReference = null; - var varDecl = null; - - if (hasBaseClass) { - this.writeLineToOutput(" = (function (_super) {"); - } else { - this.writeLineToOutput(" = (function () {"); - } - - this.recordSourceMappingNameStart(className); - this.indenter.increaseIndent(); - - if (hasBaseClass) { - baseTypeReference = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses).typeNames.nonSeparatorAt(0); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("__extends(" + className + ", _super)", baseTypeReference); - this.writeLineToOutput(";"); - } - - this.emitIndent(); - - var constrDecl = getLastConstructor(classDecl); - - if (constrDecl) { - this.emit(constrDecl); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingStart(classDecl); - - this.indenter.increaseIndent(); - this.writeLineToOutput("function " + classDecl.identifier.text() + "() {"); - this.recordSourceMappingNameStart("constructor"); - if (hasBaseClass) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("_super.apply(this, arguments)", baseTypeReference); - this.writeLineToOutput(";"); - } - - if (this.shouldCaptureThis(classDecl)) { - this.writeCaptureThisStatement(classDecl); - } - - this.emitParameterPropertyAndMemberVariableAssignments(); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.writeLineToOutput(""); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(classDecl); - } - - this.emitClassMembers(classDecl); - - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + className + ";", classDecl.closeBraceToken); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingStart(classDecl); - this.writeToOutput(")("); - if (hasBaseClass) { - this.emitJavascript(baseTypeReference, false); - } - this.writeToOutput(");"); - this.recordSourceMappingEnd(classDecl); - - if ((temp === 1 /* Module */ || temp === 2 /* DynamicModule */) && TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = temp === 1 /* Module */ ? this.moduleName : "exports"; - this.writeToOutputWithSourceMapRecord(modName + "." + className + " = " + className + ";", classDecl); - } - - this.recordSourceMappingEnd(classDecl); - this.emitComments(classDecl, false); - this.setContainer(temp); - this.thisClassNode = svClassNode; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClassMembers = function (classDecl) { - var lastEmittedMember = null; - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 139 /* GetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var getter = memberDecl; - this.emitAccessorMemberDeclaration(getter, getter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(getter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 140 /* SetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var setter = memberDecl; - this.emitAccessorMemberDeclaration(setter, setter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(setter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 135 /* MemberFunctionDeclaration */) { - var memberFunction = memberDecl; - - if (memberFunction.block) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - - this.emitClassMemberFunctionDeclaration(classDecl, memberFunction); - lastEmittedMember = memberDecl; - } - } - } - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = memberDecl; - - if (TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitSpaceBetweenConstructs(lastEmittedMember, varDecl); - - this.emitIndent(); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - if (TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput(classDecl.identifier.text() + "[" + varDeclName + "]"); - } else { - this.writeToOutput(classDecl.identifier.text() + "." + varDeclName); - } - - this.emit(varDecl.variableDeclarator.equalsValueClause); - - this.recordSourceMappingEnd(varDecl); - this.writeLineToOutput(";"); - - lastEmittedMember = varDecl; - } - } - } - }; - - Emitter.prototype.emitClassMemberFunctionDeclaration = function (classDecl, funcDecl) { - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - this.emitComments(funcDecl, true); - var functionName = funcDecl.propertyName.text(); - - this.writeToOutput(classDecl.identifier.text()); - - if (!TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - this.writeToOutput(".prototype"); - } - - if (TypeScript.isQuoted(functionName) || funcDecl.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput("[" + functionName + "] = "); - } else { - this.writeToOutput("." + functionName + " = "); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.propertyName.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - - this.writeLineToOutput(";"); - }; - - Emitter.prototype.requiresExtendsBlock = function (moduleElements) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - - if (moduleElement.kind() === 130 /* ModuleDeclaration */) { - var moduleAST = moduleElement; - - if (!TypeScript.hasModifier(moduleAST.modifiers, 8 /* Ambient */) && this.requiresExtendsBlock(moduleAST.moduleElements)) { - return true; - } - } else if (moduleElement.kind() === 131 /* ClassDeclaration */) { - var classDeclaration = moduleElement; - - if (!TypeScript.hasModifier(classDeclaration.modifiers, 8 /* Ambient */) && TypeScript.ASTHelpers.getExtendsHeritageClause(classDeclaration.heritageClauses) !== null) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitPrologue = function (sourceUnit) { - if (!this.extendsPrologueEmitted) { - if (this.requiresExtendsBlock(sourceUnit.moduleElements)) { - this.extendsPrologueEmitted = true; - this.writeLineToOutput("var __extends = this.__extends || function (d, b) {"); - this.writeLineToOutput(" for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); - this.writeLineToOutput(" function __() { this.constructor = d; }"); - this.writeLineToOutput(" __.prototype = b.prototype;"); - this.writeLineToOutput(" d.prototype = new __();"); - this.writeLineToOutput("};"); - } - } - - if (!this.globalThisCapturePrologueEmitted) { - if (this.shouldCaptureThis(sourceUnit)) { - this.globalThisCapturePrologueEmitted = true; - this.writeLineToOutput(this.captureThisStmtString); - } - } - }; - - Emitter.prototype.emitThis = function () { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutput("_this"); - } else { - this.writeToOutput("this"); - } - }; - - Emitter.prototype.emitBlockOrStatement = function (node) { - if (node.kind() === 146 /* Block */) { - this.emit(node); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emitJavascript(node, true); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitLiteralExpression = function (expression) { - switch (expression.kind()) { - case 32 /* NullKeyword */: - this.writeToOutputWithSourceMapRecord("null", expression); - break; - case 24 /* FalseKeyword */: - this.writeToOutputWithSourceMapRecord("false", expression); - break; - case 37 /* TrueKeyword */: - this.writeToOutputWithSourceMapRecord("true", expression); - break; - default: - throw TypeScript.Errors.abstract(); - } - }; - - Emitter.prototype.emitThisExpression = function (expression) { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutputWithSourceMapRecord("_this", expression); - } else { - this.writeToOutputWithSourceMapRecord("this", expression); - } - }; - - Emitter.prototype.emitSuperExpression = function (expression) { - this.writeToOutputWithSourceMapRecord("_super.prototype", expression); - }; - - Emitter.prototype.emitParenthesizedExpression = function (parenthesizedExpression) { - var omitParentheses = false; - - if (parenthesizedExpression.expression.kind() === 220 /* CastExpression */ && parenthesizedExpression.openParenTrailingComments === null) { - var castedExpression = parenthesizedExpression.expression.expression; - - while (castedExpression.kind() == 220 /* CastExpression */) { - castedExpression = castedExpression.expression; - } - - switch (castedExpression.kind()) { - case 217 /* ParenthesizedExpression */: - case 11 /* IdentifierName */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 214 /* ArrayLiteralExpression */: - case 215 /* ObjectLiteralExpression */: - case 212 /* MemberAccessExpression */: - case 221 /* ElementAccessExpression */: - omitParentheses = true; - break; - - case 213 /* InvocationExpression */: - if (parenthesizedExpression.parent.kind() !== 216 /* ObjectCreationExpression */) { - omitParentheses = true; - } - - break; - } - } - - if (omitParentheses) { - this.emit(parenthesizedExpression.expression); - } else { - this.recordSourceMappingStart(parenthesizedExpression); - this.writeToOutput("("); - this.emitCommentsArray(parenthesizedExpression.openParenTrailingComments, false); - this.emit(parenthesizedExpression.expression); - this.writeToOutput(")"); - this.recordSourceMappingEnd(parenthesizedExpression); - } - }; - - Emitter.prototype.emitCastExpression = function (expression) { - this.emit(expression.expression); - }; - - Emitter.prototype.emitPrefixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 167 /* LogicalNotExpression */: - this.writeToOutput("!"); - this.emit(expression.operand); - break; - case 166 /* BitwiseNotExpression */: - this.writeToOutput("~"); - this.emit(expression.operand); - break; - case 165 /* NegateExpression */: - this.writeToOutput("-"); - if (expression.operand.kind() === 165 /* NegateExpression */ || expression.operand.kind() === 169 /* PreDecrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 164 /* PlusExpression */: - this.writeToOutput("+"); - if (expression.operand.kind() === 164 /* PlusExpression */ || expression.operand.kind() === 168 /* PreIncrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 168 /* PreIncrementExpression */: - this.writeToOutput("++"); - this.emit(expression.operand); - break; - case 169 /* PreDecrementExpression */: - this.writeToOutput("--"); - this.emit(expression.operand); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitPostfixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 210 /* PostIncrementExpression */: - this.emit(expression.operand); - this.writeToOutput("++"); - break; - case 211 /* PostDecrementExpression */: - this.emit(expression.operand); - this.writeToOutput("--"); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitTypeOfExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("typeof "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDeleteExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("delete "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitVoidExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("void "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.canEmitDottedNameMemberAccessExpression = function (expression) { - var memberExpressionNodeType = expression.expression.kind(); - - if (memberExpressionNodeType === 11 /* IdentifierName */ || memberExpressionNodeType == 212 /* MemberAccessExpression */) { - var memberAccessSymbol = this.getSymbolForEmit(expression).symbol; - var memberAccessExpressionSymbol = this.getSymbolForEmit(expression.expression).symbol; - if (memberAccessSymbol && memberAccessExpressionSymbol && !this.semanticInfoChain.getAliasSymbolForAST(expression.expression) && (TypeScript.PullHelpers.symbolIsModule(memberAccessExpressionSymbol) || memberAccessExpressionSymbol.kind === 64 /* Enum */ || memberAccessExpressionSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */))) { - var memberAccessSymbolKind = memberAccessSymbol.kind; - if (memberAccessSymbolKind === 4096 /* Property */ || memberAccessSymbolKind === 67108864 /* EnumMember */ || (memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && memberAccessSymbolKind === 512 /* Variable */ && !memberAccessSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) || ((memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && !this.symbolIsUsedInItsEnclosingContainer(memberAccessSymbol)))) { - if (memberExpressionNodeType === 212 /* MemberAccessExpression */) { - return this.canEmitDottedNameMemberAccessExpression(expression.expression); - } - - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitDottedNameMemberAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - if (expression.expression.kind() === 212 /* MemberAccessExpression */) { - this.emitDottedNameMemberAccessExpressionRecurse(expression.expression); - } else { - this.emitName(expression.expression, true); - } - - this.writeToOutput("."); - this.emitName(expression.name, false); - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDottedNameMemberAccessExpressionRecurse = function (expression) { - this.emitComments(expression, true); - this.emitDottedNameMemberAccessExpression(expression); - this.emitComments(expression, false); - }; - - Emitter.prototype.emitMemberAccessExpression = function (expression) { - if (!this.tryEmitConstant(expression)) { - if (this.canEmitDottedNameMemberAccessExpression(expression)) { - this.emitDottedNameMemberAccessExpression(expression); - } else { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("."); - this.emitName(expression.name, false); - this.recordSourceMappingEnd(expression); - } - } - }; - - Emitter.prototype.emitQualifiedName = function (name) { - this.recordSourceMappingStart(name); - - this.emit(name.left); - this.writeToOutput("."); - this.emitName(name.right, false); - - this.recordSourceMappingEnd(name); - }; - - Emitter.prototype.emitBinaryExpression = function (expression) { - this.recordSourceMappingStart(expression); - switch (expression.kind()) { - case 173 /* CommaExpression */: - this.emit(expression.left); - this.writeToOutput(", "); - this.emit(expression.right); - break; - default: { - this.emit(expression.left); - var binOp = TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(expression.kind())); - if (binOp === "instanceof") { - this.writeToOutput(" instanceof "); - } else if (binOp === "in") { - this.writeToOutput(" in "); - } else { - this.writeToOutput(" " + binOp + " "); - } - this.emit(expression.right); - } - } - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimplePropertyAssignment = function (property) { - this.recordSourceMappingStart(property); - this.emit(property.propertyName); - this.writeToOutput(": "); - this.emit(property.expression); - this.recordSourceMappingEnd(property); - }; - - Emitter.prototype.emitFunctionPropertyAssignment = function (funcProp) { - this.recordSourceMappingStart(funcProp); - - this.emit(funcProp.propertyName); - this.writeToOutput(": "); - - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcProp); - - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - var funcName = funcProp.propertyName; - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcProp); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcProp); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcProp.propertyName.text(), funcProp, parameters, funcProp.block, null); - - this.recordSourceMappingEnd(funcProp); - - this.recordSourceMappingEnd(funcProp); - - this.emitComments(funcProp, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConditionalExpression = function (expression) { - this.emit(expression.condition); - this.writeToOutput(" ? "); - this.emit(expression.whenTrue); - this.writeToOutput(" : "); - this.emit(expression.whenFalse); - }; - - Emitter.prototype.emitThrowStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("throw "); - this.emit(statement.expression); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitExpressionStatement = function (statement) { - var isArrowExpression = statement.expression.kind() === 219 /* SimpleArrowFunctionExpression */ || statement.expression.kind() === 218 /* ParenthesizedArrowFunctionExpression */; - - this.recordSourceMappingStart(statement); - if (isArrowExpression) { - this.writeToOutput("("); - } - - this.emit(statement.expression); - - if (isArrowExpression) { - this.writeToOutput(")"); - } - - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitLabeledStatement = function (statement) { - this.writeToOutputWithSourceMapRecord(statement.identifier.text(), statement.identifier); - this.writeLineToOutput(":"); - this.emitJavascript(statement.statement, true); - }; - - Emitter.prototype.emitBlock = function (block) { - this.recordSourceMappingStart(block); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - if (block.statements) { - this.emitList(block.statements); - } - this.emitCommentsArray(block.closeBraceLeadingComments, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(block); - }; - - Emitter.prototype.emitBreakStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("break"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitContinueStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("continue"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitWhileStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("while ("); - this.emit(statement.condition); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitDoStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("do"); - this.emitBlockOrStatement(statement.statement); - this.writeToOutputWithSourceMapRecord(" while", statement.whileKeyword); - this.writeToOutput('('); - this.emit(statement.condition); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitIfStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("if ("); - this.emit(statement.condition); - this.writeToOutput(")"); - - this.emitBlockOrStatement(statement.statement); - - if (statement.elseClause) { - if (statement.statement.kind() !== 146 /* Block */) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(" "); - } - - this.emit(statement.elseClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitElseClause = function (elseClause) { - if (elseClause.statement.kind() === 147 /* IfStatement */) { - this.writeToOutput("else "); - this.emit(elseClause.statement); - } else { - this.writeToOutput("else"); - this.emitBlockOrStatement(elseClause.statement); - } - }; - - Emitter.prototype.emitReturnStatement = function (statement) { - this.recordSourceMappingStart(statement); - if (statement.expression) { - this.writeToOutput("return "); - this.emit(statement.expression); - } else { - this.writeToOutput("return"); - } - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitForInStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.left) { - this.emit(statement.left); - } else { - this.emit(statement.variableDeclaration); - } - this.writeToOutput(" in "); - this.emit(statement.expression); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitForStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.variableDeclaration) { - this.emit(statement.variableDeclaration); - } else if (statement.initializer) { - this.emit(statement.initializer); - } - - this.writeToOutput("; "); - this.emitJavascript(statement.condition, false); - this.writeToOutput(";"); - if (statement.incrementor) { - this.writeToOutput(" "); - this.emitJavascript(statement.incrementor, false); - } - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitWithStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("with ("); - if (statement.condition) { - this.emit(statement.condition); - } - - this.writeToOutput(")"); - var prevInWithBlock = this.inWithBlock; - this.inWithBlock = true; - this.emitBlockOrStatement(statement.statement); - this.inWithBlock = prevInWithBlock; - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitSwitchStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("switch ("); - this.emit(statement.expression); - this.recordSourceMappingStart(statement.closeParenToken); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement.closeParenToken); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - this.emitList(statement.switchClauses, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCaseSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("case "); - this.emit(clause.expression); - this.writeToOutput(":"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitSwitchClauseBody = function (body) { - if (body.childCount() === 1 && body.childAt(0).kind() === 146 /* Block */) { - this.emit(body.childAt(0)); - this.writeLineToOutput(""); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emit(body); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitDefaultSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("default:"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitTryStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("try "); - this.emit(statement.block); - this.emitJavascript(statement.catchClause, false); - - if (statement.finallyClause) { - this.emit(statement.finallyClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCatchClause = function (clause) { - this.writeToOutput(" "); - this.recordSourceMappingStart(clause); - this.writeToOutput("catch ("); - this.emit(clause.identifier); - this.writeToOutput(")"); - this.emit(clause.block); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitFinallyClause = function (clause) { - this.writeToOutput(" finally"); - this.emit(clause.block); - }; - - Emitter.prototype.emitDebuggerStatement = function (statement) { - this.writeToOutputWithSourceMapRecord("debugger", statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitNumericLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitRegularExpressionLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitStringLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitEqualsValueClause = function (clause) { - this.writeToOutput(" = "); - this.emit(clause.value); - }; - - Emitter.prototype.emitParameter = function (parameter) { - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter); - }; - - Emitter.prototype.emitConstructorDeclaration = function (declaration) { - if (declaration.block) { - this.emitConstructor(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitFunctionDeclaration = function (declaration) { - return declaration.preComments() !== null || (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null); - }; - - Emitter.prototype.emitFunctionDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null) { - this.emitFunction(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.emitSourceUnit = function (sourceUnit) { - if (!this.document.isDeclareFile()) { - var pullDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - this.pushDecl(pullDecl); - this.emitScriptElements(sourceUnit); - this.popDecl(pullDecl); - - this.emitCommentsArray(sourceUnit.endOfFileTokenLeadingComments, false); - } - }; - - Emitter.prototype.shouldEmitEnumDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.enumIsElided(declaration); - }; - - Emitter.prototype.emitEnumDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.enumIsElided(declaration)) { - this.emitComments(declaration, true); - this.emitEnum(declaration); - this.emitComments(declaration, false); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitModuleDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.moduleIsElided(declaration); - }; - - Emitter.prototype.emitModuleDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.moduleIsElided(declaration)) { - this.emitModuleDeclarationWorker(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitClassDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */); - }; - - Emitter.prototype.emitClassDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - this.emitClass(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitInterfaceDeclaration = function (declaration) { - return declaration.preComments() !== null; - }; - - Emitter.prototype.emitInterfaceDeclaration = function (declaration) { - this.emitComments(declaration, true, true); - }; - - Emitter.prototype.firstVariableDeclarator = function (statement) { - return statement.declaration.declarators.nonSeparatorAt(0); - }; - - Emitter.prototype.isNotAmbientOrHasInitializer = function (variableStatement) { - return !TypeScript.hasModifier(variableStatement.modifiers, 8 /* Ambient */) || this.firstVariableDeclarator(variableStatement).equalsValueClause !== null; - }; - - Emitter.prototype.shouldEmitVariableStatement = function (statement) { - return statement.preComments() !== null || this.isNotAmbientOrHasInitializer(statement); - }; - - Emitter.prototype.emitVariableStatement = function (statement) { - if (this.isNotAmbientOrHasInitializer(statement)) { - this.emitComments(statement, true); - this.emit(statement.declaration); - this.writeToOutput(";"); - this.emitComments(statement, false); - } else { - this.emitComments(statement, true, true); - } - }; - - Emitter.prototype.emitGenericType = function (type) { - this.emit(type.name); - }; - - Emitter.prototype.shouldEmit = function (ast) { - if (!ast) { - return false; - } - - switch (ast.kind()) { - case 133 /* ImportDeclaration */: - return this.shouldEmitImportDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.shouldEmitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.shouldEmitInterfaceDeclaration(ast); - case 129 /* FunctionDeclaration */: - return this.shouldEmitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.shouldEmitModuleDeclaration(ast); - case 148 /* VariableStatement */: - return this.shouldEmitVariableStatement(ast); - case 223 /* OmittedExpression */: - return false; - case 132 /* EnumDeclaration */: - return this.shouldEmitEnumDeclaration(ast); - } - - return true; - }; - - Emitter.prototype.emit = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 2 /* SeparatedList */: - return this.emitSeparatedList(ast); - case 1 /* List */: - return this.emitList(ast); - case 120 /* SourceUnit */: - return this.emitSourceUnit(ast); - case 133 /* ImportDeclaration */: - return this.emitImportDeclaration(ast); - case 134 /* ExportAssignment */: - return this.setExportAssignment(ast); - case 131 /* ClassDeclaration */: - return this.emitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitInterfaceDeclaration(ast); - case 11 /* IdentifierName */: - return this.emitName(ast, true); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast); - case 219 /* SimpleArrowFunctionExpression */: - return this.emitSimpleArrowFunctionExpression(ast); - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.emitParenthesizedArrowFunctionExpression(ast); - case 129 /* FunctionDeclaration */: - return this.emitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitModuleDeclaration(ast); - case 224 /* VariableDeclaration */: - return this.emitVariableDeclaration(ast); - case 126 /* GenericType */: - return this.emitGenericType(ast); - case 137 /* ConstructorDeclaration */: - return this.emitConstructorDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitEnumDeclaration(ast); - case 243 /* EnumElement */: - return this.emitEnumElement(ast); - case 222 /* FunctionExpression */: - return this.emitFunctionExpression(ast); - case 148 /* VariableStatement */: - return this.emitVariableStatement(ast); - } - - this.emitComments(ast, true); - this.emitWorker(ast); - this.emitComments(ast, false); - }; - - Emitter.prototype.emitWorker = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 13 /* NumericLiteral */: - return this.emitNumericLiteral(ast); - case 12 /* RegularExpressionLiteral */: - return this.emitRegularExpressionLiteral(ast); - case 14 /* StringLiteral */: - return this.emitStringLiteral(ast); - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 37 /* TrueKeyword */: - return this.emitLiteralExpression(ast); - case 35 /* ThisKeyword */: - return this.emitThisExpression(ast); - case 50 /* SuperKeyword */: - return this.emitSuperExpression(ast); - case 217 /* ParenthesizedExpression */: - return this.emitParenthesizedExpression(ast); - case 214 /* ArrayLiteralExpression */: - return this.emitArrayLiteralExpression(ast); - case 211 /* PostDecrementExpression */: - case 210 /* PostIncrementExpression */: - return this.emitPostfixUnaryExpression(ast); - case 167 /* LogicalNotExpression */: - case 166 /* BitwiseNotExpression */: - case 165 /* NegateExpression */: - case 164 /* PlusExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.emitPrefixUnaryExpression(ast); - case 213 /* InvocationExpression */: - return this.emitInvocationExpression(ast); - case 221 /* ElementAccessExpression */: - return this.emitElementAccessExpression(ast); - case 212 /* MemberAccessExpression */: - return this.emitMemberAccessExpression(ast); - case 121 /* QualifiedName */: - return this.emitQualifiedName(ast); - case 173 /* CommaExpression */: - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return this.emitBinaryExpression(ast); - case 186 /* ConditionalExpression */: - return this.emitConditionalExpression(ast); - case 232 /* EqualsValueClause */: - return this.emitEqualsValueClause(ast); - case 242 /* Parameter */: - return this.emitParameter(ast); - case 146 /* Block */: - return this.emitBlock(ast); - case 235 /* ElseClause */: - return this.emitElseClause(ast); - case 147 /* IfStatement */: - return this.emitIfStatement(ast); - case 149 /* ExpressionStatement */: - return this.emitExpressionStatement(ast); - case 139 /* GetAccessor */: - return this.emitGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitSetAccessor(ast); - case 157 /* ThrowStatement */: - return this.emitThrowStatement(ast); - case 150 /* ReturnStatement */: - return this.emitReturnStatement(ast); - case 216 /* ObjectCreationExpression */: - return this.emitObjectCreationExpression(ast); - case 151 /* SwitchStatement */: - return this.emitSwitchStatement(ast); - case 233 /* CaseSwitchClause */: - return this.emitCaseSwitchClause(ast); - case 234 /* DefaultSwitchClause */: - return this.emitDefaultSwitchClause(ast); - case 152 /* BreakStatement */: - return this.emitBreakStatement(ast); - case 153 /* ContinueStatement */: - return this.emitContinueStatement(ast); - case 154 /* ForStatement */: - return this.emitForStatement(ast); - case 155 /* ForInStatement */: - return this.emitForInStatement(ast); - case 158 /* WhileStatement */: - return this.emitWhileStatement(ast); - case 163 /* WithStatement */: - return this.emitWithStatement(ast); - case 220 /* CastExpression */: - return this.emitCastExpression(ast); - case 215 /* ObjectLiteralExpression */: - return this.emitObjectLiteralExpression(ast); - case 240 /* SimplePropertyAssignment */: - return this.emitSimplePropertyAssignment(ast); - case 241 /* FunctionPropertyAssignment */: - return this.emitFunctionPropertyAssignment(ast); - case 156 /* EmptyStatement */: - return this.writeToOutputWithSourceMapRecord(";", ast); - case 159 /* TryStatement */: - return this.emitTryStatement(ast); - case 236 /* CatchClause */: - return this.emitCatchClause(ast); - case 237 /* FinallyClause */: - return this.emitFinallyClause(ast); - case 160 /* LabeledStatement */: - return this.emitLabeledStatement(ast); - case 161 /* DoStatement */: - return this.emitDoStatement(ast); - case 171 /* TypeOfExpression */: - return this.emitTypeOfExpression(ast); - case 170 /* DeleteExpression */: - return this.emitDeleteExpression(ast); - case 172 /* VoidExpression */: - return this.emitVoidExpression(ast); - case 162 /* DebuggerStatement */: - return this.emitDebuggerStatement(ast); - } - }; - return Emitter; - })(); - TypeScript.Emitter = Emitter; - - function getLastConstructor(classDecl) { - return classDecl.classElements.lastOrDefault(function (e) { - return e.kind() === 137 /* ConstructorDeclaration */; - }); - } - TypeScript.getLastConstructor = getLastConstructor; - - function getTrimmedTextLines(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - return comment.fullText().split("\n").map(function (s) { - return s.trim(); - }); - } else { - return [comment.fullText().trim()]; - } - } - TypeScript.getTrimmedTextLines = getTrimmedTextLines; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MemberName = (function () { - function MemberName() { - this.prefix = ""; - this.suffix = ""; - } - MemberName.prototype.isString = function () { - return false; - }; - MemberName.prototype.isArray = function () { - return false; - }; - MemberName.prototype.isMarker = function () { - return !this.isString() && !this.isArray(); - }; - - MemberName.prototype.toString = function () { - return MemberName.memberNameToString(this); - }; - - MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { - if (typeof markerBaseLength === "undefined") { markerBaseLength = 0; } - var result = memberName.prefix; - - if (memberName.isString()) { - result += memberName.text; - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - if (ar.entries[index].isMarker()) { - if (markerInfo) { - markerInfo.push(markerBaseLength + result.length); - } - continue; - } - - result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); - result += ar.delim; - } - } - - result += memberName.suffix; - return result; - }; - - MemberName.create = function (arg1, arg2, arg3) { - if (typeof arg1 === "string") { - return new MemberNameString(arg1); - } else { - var result = new MemberNameArray(); - if (arg2) - result.prefix = arg2; - if (arg3) - result.suffix = arg3; - result.entries.push(arg1); - return result; - } - }; - return MemberName; - })(); - TypeScript.MemberName = MemberName; - - var MemberNameString = (function (_super) { - __extends(MemberNameString, _super); - function MemberNameString(text) { - _super.call(this); - this.text = text; - } - MemberNameString.prototype.isString = function () { - return true; - }; - return MemberNameString; - })(MemberName); - TypeScript.MemberNameString = MemberNameString; - - var MemberNameArray = (function (_super) { - __extends(MemberNameArray, _super); - function MemberNameArray() { - _super.call(this); - this.delim = ""; - this.entries = []; - } - MemberNameArray.prototype.isArray = function () { - return true; - }; - - MemberNameArray.prototype.add = function (entry) { - this.entries.push(entry); - }; - - MemberNameArray.prototype.addAll = function (entries) { - for (var i = 0; i < entries.length; i++) { - this.entries.push(entries[i]); - } - }; - return MemberNameArray; - })(MemberName); - TypeScript.MemberNameArray = MemberNameArray; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function stripStartAndEndQuotes(str) { - var firstCharCode = str && str.charCodeAt(0); - if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { - return str.substring(1, str.length - 1); - } - - return str; - } - TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes; - - function isSingleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */; - } - TypeScript.isSingleQuoted = isSingleQuoted; - - function isDoubleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */; - } - TypeScript.isDoubleQuoted = isDoubleQuoted; - - function isQuoted(str) { - return isDoubleQuoted(str) || isSingleQuoted(str); - } - TypeScript.isQuoted = isQuoted; - - function quoteStr(str) { - return "\"" + str + "\""; - } - TypeScript.quoteStr = quoteStr; - - var switchToForwardSlashesRegEx = /\\/g; - function switchToForwardSlashes(path) { - return path.replace(switchToForwardSlashesRegEx, "/"); - } - TypeScript.switchToForwardSlashes = switchToForwardSlashes; - - function trimModName(modName) { - if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") { - return modName.substring(0, modName.length - 5); - } - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") { - return modName.substring(0, modName.length - 3); - } - - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") { - return modName.substring(0, modName.length - 3); - } - - return modName; - } - TypeScript.trimModName = trimModName; - - function getDeclareFilePath(fname) { - return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname); - } - TypeScript.getDeclareFilePath = getDeclareFilePath; - - function isFileOfExtension(fname, ext) { - var invariantFname = fname.toLocaleUpperCase(); - var invariantExt = ext.toLocaleUpperCase(); - var extLength = invariantExt.length; - return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt; - } - - function isTSFile(fname) { - return isFileOfExtension(fname, ".ts"); - } - TypeScript.isTSFile = isTSFile; - - function isDTSFile(fname) { - return isFileOfExtension(fname, ".d.ts"); - } - TypeScript.isDTSFile = isDTSFile; - - function getPrettyName(modPath, quote, treatAsFileName) { - if (typeof quote === "undefined") { quote = true; } - if (typeof treatAsFileName === "undefined") { treatAsFileName = false; } - var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath)); - var components = this.getPathComponents(modName); - return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath; - } - TypeScript.getPrettyName = getPrettyName; - - function getPathComponents(path) { - return path.split("/"); - } - TypeScript.getPathComponents = getPathComponents; - - function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) { - if (typeof isAbsoultePathURL === "undefined") { isAbsoultePathURL = true; } - absoluteModPath = switchToForwardSlashes(absoluteModPath); - - var modComponents = this.getPathComponents(absoluteModPath); - var fixedModComponents = this.getPathComponents(fixedModFilePath); - - var joinStartIndex = 0; - for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) { - break; - } - } - - if (joinStartIndex !== 0) { - var relativePath = ""; - var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length); - for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== "") { - relativePath = relativePath + "../"; - } - } - - return relativePath + relativePathComponents.join("/"); - } - - if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) { - absoluteModPath = "file:///" + absoluteModPath; - } - - return absoluteModPath; - } - TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath; - - function changePathToDTS(modPath) { - return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts"; - } - TypeScript.changePathToDTS = changePathToDTS; - - function isRelative(path) { - return path.length > 0 && path.charAt(0) === "."; - } - TypeScript.isRelative = isRelative; - function isRooted(path) { - return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1)); - } - TypeScript.isRooted = isRooted; - - function getRootFilePath(outFname) { - if (outFname === "") { - return outFname; - } else { - var isPath = outFname.indexOf("/") !== -1; - return isPath ? filePath(outFname) : ""; - } - } - TypeScript.getRootFilePath = getRootFilePath; - - function filePathComponents(fullPath) { - fullPath = switchToForwardSlashes(fullPath); - var components = getPathComponents(fullPath); - return components.slice(0, components.length - 1); - } - TypeScript.filePathComponents = filePathComponents; - - function filePath(fullPath) { - var path = filePathComponents(fullPath); - return path.join("/") + "/"; - } - TypeScript.filePath = filePath; - - function convertToDirectoryPath(dirPath) { - if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") { - dirPath += "/"; - } - - return dirPath; - } - TypeScript.convertToDirectoryPath = convertToDirectoryPath; - - var normalizePathRegEx = /^\\\\[^\\]/; - function normalizePath(path) { - if (normalizePathRegEx.test(path)) { - path = "file:" + path; - } - var parts = this.getPathComponents(switchToForwardSlashes(path)); - var normalizedParts = []; - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (part === ".") { - continue; - } - - if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") { - normalizedParts.pop(); - continue; - } - - normalizedParts.push(part); - } - - return normalizedParts.join("/"); - } - TypeScript.normalizePath = normalizePath; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - function isNoDefaultLibMatch(comment) { - var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; - return isNoDefaultLibRegex.exec(comment); - } - - TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; - - function getFileReferenceFromReferencePath(fileName, lineMap, position, comment, diagnostics) { - var simpleReferenceRegEx = /^\/\/\/\s*= 7 && fullReference[6] === "true"; - if (isResident) { - TypeScript.CompilerDiagnostics.debugPrint(path + " is resident"); - } - return { - line: 0, - character: 0, - position: 0, - length: 0, - path: TypeScript.switchToForwardSlashes(adjustedPath), - isResident: isResident - }; - } - } - } - - return null; - } - - var scannerWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - var scannerDiagnostics = []; - - function processImports(lineMap, scanner, token, importedFiles) { - var position = 0; - var lineChar = { line: -1, character: -1 }; - - var start = new Date().getTime(); - - while (token.tokenKind !== 10 /* EndOfFileToken */) { - if (token.tokenKind === 49 /* ImportKeyword */) { - var importStart = position + token.leadingTriviaWidth(); - token = scanner.scan(scannerDiagnostics, false); - - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 107 /* EqualsToken */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 65 /* ModuleKeyword */ || token.tokenKind === 66 /* RequireKeyword */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 72 /* OpenParenToken */) { - var afterOpenParenPosition = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - - lineMap.fillLineAndCharacterFromPosition(importStart, lineChar); - - if (token.tokenKind === 14 /* StringLiteral */) { - var ref = { - line: lineChar.line, - character: lineChar.character, - position: afterOpenParenPosition + token.leadingTriviaWidth(), - length: token.width(), - path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())), - isResident: false - }; - importedFiles.push(ref); - } - } - } - } - } - } - - position = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - } - - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionScanImportsTime += totalTime; - } - - function processTripleSlashDirectives(fileName, lineMap, firstToken) { - var leadingTrivia = firstToken.leadingTrivia(); - - var position = 0; - var lineChar = { line: -1, character: -1 }; - var noDefaultLib = false; - var diagnostics = []; - var referencedFiles = []; - - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - - if (trivia.kind() === 7 /* SingleLineCommentTrivia */) { - var triviaText = trivia.fullText(); - var referencedCode = getFileReferenceFromReferencePath(fileName, lineMap, position, triviaText, diagnostics); - - if (referencedCode) { - lineMap.fillLineAndCharacterFromPosition(position, lineChar); - referencedCode.position = position; - referencedCode.length = trivia.fullWidth(); - referencedCode.line = lineChar.line; - referencedCode.character = lineChar.character; - - referencedFiles.push(referencedCode); - } - - var isNoDefaultLib = isNoDefaultLibMatch(triviaText); - if (isNoDefaultLib) { - noDefaultLib = isNoDefaultLib[3] === "true"; - } - } - - position += trivia.fullWidth(); - } - - return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles }; - } - - function preProcessFile(fileName, sourceText, readImportFiles) { - if (typeof readImportFiles === "undefined") { readImportFiles = true; } - var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText); - var scanner = new TypeScript.Scanner(fileName, text, 1 /* EcmaScript5 */, scannerWindow); - - var firstToken = scanner.scan(scannerDiagnostics, false); - - var importedFiles = []; - if (readImportFiles) { - processImports(text.lineMap(), scanner, firstToken, importedFiles); - } - - var properties = processTripleSlashDirectives(fileName, text.lineMap(), firstToken); - - scannerDiagnostics.length = 0; - return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics }; - } - TypeScript.preProcessFile = preProcessFile; - - function getParseOptions(settings) { - return new TypeScript.ParseOptions(settings.codeGenTarget(), settings.allowAutomaticSemicolonInsertion()); - } - TypeScript.getParseOptions = getParseOptions; - - function getReferencedFiles(fileName, sourceText) { - return preProcessFile(fileName, sourceText, false).referencedFiles; - } - TypeScript.getReferencedFiles = getReferencedFiles; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ReferenceResolutionResult = (function () { - function ReferenceResolutionResult() { - this.resolvedFiles = []; - this.diagnostics = []; - this.seenNoDefaultLibTag = false; - } - return ReferenceResolutionResult; - })(); - TypeScript.ReferenceResolutionResult = ReferenceResolutionResult; - - var ReferenceLocation = (function () { - function ReferenceLocation(filePath, lineMap, position, length, isImported) { - this.filePath = filePath; - this.lineMap = lineMap; - this.position = position; - this.length = length; - this.isImported = isImported; - } - return ReferenceLocation; - })(); - - var ReferenceResolver = (function () { - function ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution) { - this.useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this.inputFileNames = inputFileNames; - this.host = host; - this.visited = {}; - } - ReferenceResolver.resolve = function (inputFileNames, host, useCaseSensitiveFileResolution) { - var resolver = new ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution); - return resolver.resolveInputFiles(); - }; - - ReferenceResolver.prototype.resolveInputFiles = function () { - var _this = this; - var result = new ReferenceResolutionResult(); - - if (!this.inputFileNames || this.inputFileNames.length <= 0) { - return result; - } - - var referenceLocation = new ReferenceLocation(null, null, 0, 0, false); - this.inputFileNames.forEach(function (fileName) { - return _this.resolveIncludedFile(fileName, referenceLocation, result); - }); - - return result; - }; - - ReferenceResolver.prototype.resolveIncludedFile = function (path, referenceLocation, resolutionResult) { - var normalizedPath = this.getNormalizedFilePath(path, referenceLocation.filePath); - - if (this.isSameFile(normalizedPath, referenceLocation.filePath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.A_file_cannot_have_a_reference_to_itself, null)); - } - - return normalizedPath; - } - - if (!TypeScript.isTSFile(normalizedPath) && !TypeScript.isDTSFile(normalizedPath)) { - var dtsFile = normalizedPath + ".d.ts"; - var tsFile = normalizedPath + ".ts"; - - if (this.host.fileExists(tsFile)) { - normalizedPath = tsFile; - } else { - normalizedPath = dtsFile; - } - } - - if (!this.host.fileExists(normalizedPath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.Cannot_resolve_referenced_file_0, [path])); - } - - return normalizedPath; - } - - return this.resolveFile(normalizedPath, resolutionResult); - }; - - ReferenceResolver.prototype.resolveImportedFile = function (path, referenceLocation, resolutionResult) { - var isRelativePath = TypeScript.isRelative(path); - var isRootedPath = isRelativePath ? false : TypeScript.isRooted(path); - - if (isRelativePath || isRootedPath) { - return this.resolveIncludedFile(path, referenceLocation, resolutionResult); - } else { - var parentDirectory = this.host.getParentDirectory(referenceLocation.filePath); - var searchFilePath = null; - var dtsFileName = path + ".d.ts"; - var tsFilePath = path + ".ts"; - - var start = new Date().getTime(); - - do { - currentFilePath = this.host.resolveRelativePath(tsFilePath, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - var currentFilePath = this.host.resolveRelativePath(dtsFileName, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - parentDirectory = this.host.getParentDirectory(parentDirectory); - } while(parentDirectory); - - TypeScript.fileResolutionImportFileSearchTime += new Date().getTime() - start; - - if (!searchFilePath) { - return path; - } - - return this.resolveFile(searchFilePath, resolutionResult); - } - }; - - ReferenceResolver.prototype.resolveFile = function (normalizedPath, resolutionResult) { - var _this = this; - var visitedPath = this.isVisited(normalizedPath); - if (!visitedPath) { - this.recordVisitedFile(normalizedPath); - - var start = new Date().getTime(); - var scriptSnapshot = this.host.getScriptSnapshot(normalizedPath); - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionIOTime += totalTime; - - var lineMap = TypeScript.LineMap1.fromScriptSnapshot(scriptSnapshot); - var preprocessedFileInformation = TypeScript.preProcessFile(normalizedPath, scriptSnapshot); - resolutionResult.diagnostics.push.apply(resolutionResult.diagnostics, preprocessedFileInformation.diagnostics); - - if (preprocessedFileInformation.isLibFile) { - resolutionResult.seenNoDefaultLibTag = true; - } - - var normalizedReferencePaths = []; - preprocessedFileInformation.referencedFiles.forEach(function (fileReference) { - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileReference.position, fileReference.length, false); - var normalizedReferencePath = _this.resolveIncludedFile(fileReference.path, currentReferenceLocation, resolutionResult); - normalizedReferencePaths.push(normalizedReferencePath); - }); - - var normalizedImportPaths = []; - for (var i = 0; i < preprocessedFileInformation.importedFiles.length; i++) { - var fileImport = preprocessedFileInformation.importedFiles[i]; - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileImport.position, fileImport.length, true); - var normalizedImportPath = this.resolveImportedFile(fileImport.path, currentReferenceLocation, resolutionResult); - normalizedImportPaths.push(normalizedImportPath); - } - - resolutionResult.resolvedFiles.push({ - path: normalizedPath, - referencedFiles: normalizedReferencePaths, - importedFiles: normalizedImportPaths - }); - } else { - normalizedPath = visitedPath; - } - - return normalizedPath; - }; - - ReferenceResolver.prototype.getNormalizedFilePath = function (path, parentFilePath) { - var parentFileDirectory = parentFilePath ? this.host.getParentDirectory(parentFilePath) : ""; - var normalizedPath = this.host.resolveRelativePath(path, parentFileDirectory); - return normalizedPath; - }; - - ReferenceResolver.prototype.getUniqueFileId = function (filePath) { - return this.useCaseSensitiveFileResolution ? filePath : filePath.toLocaleUpperCase(); - }; - - ReferenceResolver.prototype.recordVisitedFile = function (filePath) { - this.visited[this.getUniqueFileId(filePath)] = filePath; - }; - - ReferenceResolver.prototype.isVisited = function (filePath) { - return this.visited[this.getUniqueFileId(filePath)]; - }; - - ReferenceResolver.prototype.isSameFile = function (filePath1, filePath2) { - if (!filePath1 || !filePath2) { - return false; - } - - if (this.useCaseSensitiveFileResolution) { - return filePath1 === filePath2; - } else { - return filePath1.toLocaleUpperCase() === filePath2.toLocaleUpperCase(); - } - }; - return ReferenceResolver; - })(); - TypeScript.ReferenceResolver = ReferenceResolver; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextWriter = (function () { - function TextWriter(name, writeByteOrderMark, outputFileType) { - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.outputFileType = outputFileType; - this.contents = ""; - this.onNewLine = true; - } - TextWriter.prototype.Write = function (s) { - this.contents += s; - this.onNewLine = false; - }; - - TextWriter.prototype.WriteLine = function (s) { - this.contents += s; - this.contents += TypeScript.newLine(); - this.onNewLine = true; - }; - - TextWriter.prototype.Close = function () { - }; - - TextWriter.prototype.getOutputFile = function () { - return new TypeScript.OutputFile(this.name, this.writeByteOrderMark, this.contents, this.outputFileType); - }; - return TextWriter; - })(); - TypeScript.TextWriter = TextWriter; - - var DeclarationEmitter = (function () { - function DeclarationEmitter(emittingFileName, document, compiler, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.document = document; - this.compiler = compiler; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.declFile = null; - this.indenter = new TypeScript.Indenter(); - this.emittedReferencePaths = false; - this.declFile = new TextWriter(emittingFileName, this.document.byteOrderMark !== 0 /* None */, 2 /* Declaration */); - } - DeclarationEmitter.prototype.getOutputFile = function () { - return this.declFile.getOutputFile(); - }; - - DeclarationEmitter.prototype.emitDeclarations = function (sourceUnit) { - this.emitDeclarationsForSourceUnit(sourceUnit); - }; - - DeclarationEmitter.prototype.emitDeclarationsForList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.emitDeclarationsForAST(list.childAt(i)); - } - }; - - DeclarationEmitter.prototype.emitSeparatedList = function (list) { - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.emitDeclarationsForAST(list.nonSeparatorAt(i)); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForAST = function (ast) { - switch (ast.kind()) { - case 148 /* VariableStatement */: - return this.emitDeclarationsForVariableStatement(ast); - case 141 /* PropertySignature */: - return this.emitPropertySignature(ast); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast, true, true); - case 136 /* MemberVariableDeclaration */: - return this.emitDeclarationsForMemberVariableDeclaration(ast); - case 137 /* ConstructorDeclaration */: - return this.emitDeclarationsForConstructorDeclaration(ast); - case 139 /* GetAccessor */: - return this.emitDeclarationsForGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitDeclarationsForSetAccessor(ast); - case 138 /* IndexMemberDeclaration */: - return this.emitIndexMemberDeclaration(ast); - case 144 /* IndexSignature */: - return this.emitIndexSignature(ast); - case 142 /* CallSignature */: - return this.emitCallSignature(ast); - case 143 /* ConstructSignature */: - return this.emitConstructSignature(ast); - case 145 /* MethodSignature */: - return this.emitMethodSignature(ast); - case 129 /* FunctionDeclaration */: - return this.emitDeclarationsForFunctionDeclaration(ast); - case 135 /* MemberFunctionDeclaration */: - return this.emitMemberFunctionDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.emitDeclarationsForClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitDeclarationsForInterfaceDeclaration(ast); - case 133 /* ImportDeclaration */: - return this.emitDeclarationsForImportDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitDeclarationsForModuleDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitDeclarationsForEnumDeclaration(ast); - case 134 /* ExportAssignment */: - return this.emitDeclarationsForExportAssignment(ast); - } - }; - - DeclarationEmitter.prototype.getIndentString = function (declIndent) { - if (typeof declIndent === "undefined") { declIndent = false; } - return this.indenter.getIndent(); - }; - - DeclarationEmitter.prototype.emitIndent = function () { - this.declFile.Write(this.getIndentString()); - }; - - DeclarationEmitter.prototype.canEmitDeclarations = function (declAST) { - var container = DeclarationEmitter.getEnclosingContainer(declAST); - if (container.kind() === 130 /* ModuleDeclaration */ || container.kind() === 120 /* SourceUnit */) { - var pullDecl = this.semanticInfoChain.getDeclForAST(declAST); - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - var start = new Date().getTime(); - var declSymbol = this.semanticInfoChain.getSymbolForAST(declAST); - var result = declSymbol && declSymbol.isExternallyVisible(); - TypeScript.declarationEmitIsExternallyVisibleTime += new Date().getTime() - start; - - return result; - } - } - - return true; - }; - - DeclarationEmitter.prototype.getDeclFlagsString = function (pullDecl, typeString) { - var result = this.getIndentString(); - var pullFlags = pullDecl.flags; - - if (TypeScript.hasFlag(pullFlags, 16 /* Static */)) { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } - result += "static "; - } else { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } else if (TypeScript.hasFlag(pullFlags, 4 /* Public */)) { - result += "public "; - } else { - var emitDeclare = !TypeScript.hasFlag(pullFlags, 1 /* Exported */); - - var declAST = this.semanticInfoChain.getASTForDecl(pullDecl); - var container = DeclarationEmitter.getEnclosingContainer(declAST); - - var isExternalModule = container.kind() === 120 /* SourceUnit */ && this.document.isExternalModule(); - - if (isExternalModule && TypeScript.hasFlag(pullFlags, 1 /* Exported */)) { - result += "export "; - emitDeclare = true; - } - - if (isExternalModule || container.kind() === 120 /* SourceUnit */) { - if (emitDeclare && typeString !== "interface" && typeString !== "import") { - result += "declare "; - } - } - - result += typeString + " "; - } - } - - return result; - }; - - DeclarationEmitter.prototype.emitDeclFlags = function (declarationAST, typeString) { - this.declFile.Write(this.getDeclFlagsString(this.semanticInfoChain.getDeclForAST(declarationAST), typeString)); - }; - - DeclarationEmitter.prototype.emitTypeNamesMember = function (memberName, emitIndent) { - if (typeof emitIndent === "undefined") { emitIndent = false; } - if (memberName.prefix === "{ ") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.WriteLine("{"); - this.indenter.increaseIndent(); - emitIndent = true; - } else if (memberName.prefix !== "") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.prefix); - emitIndent = false; - } - - if (memberName.isString()) { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.text); - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - this.emitTypeNamesMember(ar.entries[index], emitIndent); - if (ar.delim === "; ") { - this.declFile.WriteLine(";"); - } - } - } - - if (memberName.suffix === "}") { - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.Write(memberName.suffix); - } else { - this.declFile.Write(memberName.suffix); - } - }; - - DeclarationEmitter.prototype.emitTypeSignature = function (ast, type) { - var declarationContainerAst = DeclarationEmitter.getEnclosingContainer(ast); - - var start = new Date().getTime(); - var declarationContainerDecl = this.semanticInfoChain.getDeclForAST(declarationContainerAst); - - var declarationPullSymbol = declarationContainerDecl.getSymbol(); - TypeScript.declarationEmitTypeSignatureTime += new Date().getTime() - start; - - var isNotAGenericType = ast.kind() !== 126 /* GenericType */; - - var typeNameMembers = type.getScopedNameEx(declarationPullSymbol, false, false, false, false, false, isNotAGenericType); - this.emitTypeNamesMember(typeNameMembers); - }; - - DeclarationEmitter.prototype.emitComment = function (comment) { - var text = TypeScript.getTrimmedTextLines(comment); - if (this.declFile.onNewLine) { - this.emitIndent(); - } else if (comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - this.emitIndent(); - } - - this.declFile.Write(text[0]); - - for (var i = 1; i < text.length; i++) { - this.declFile.WriteLine(""); - this.emitIndent(); - this.declFile.Write(text[i]); - } - - if (comment.endsLine || comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - } else { - this.declFile.Write(" "); - } - }; - - DeclarationEmitter.prototype.emitDeclarationComments = function (astOrSymbol, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var declComments = astOrSymbol.docComments ? astOrSymbol.docComments() : TypeScript.ASTHelpers.docComments(astOrSymbol); - this.writeDeclarationComments(declComments, endLine); - }; - - DeclarationEmitter.prototype.writeDeclarationComments = function (declComments, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (declComments.length > 0) { - for (var i = 0; i < declComments.length; i++) { - this.emitComment(declComments[i]); - } - - if (endLine) { - if (!this.declFile.onNewLine) { - this.declFile.WriteLine(""); - } - } else { - if (this.declFile.onNewLine) { - this.emitIndent(); - } - } - } - }; - - DeclarationEmitter.prototype.emitTypeOfVariableDeclaratorOrParameter = function (boundDecl) { - var start = new Date().getTime(); - var decl = this.semanticInfoChain.getDeclForAST(boundDecl); - var pullSymbol = decl.getSymbol(); - TypeScript.declarationEmitGetBoundDeclTypeTime += new Date().getTime() - start; - - var type = pullSymbol.type; - TypeScript.Debug.assert(type); - - this.declFile.Write(": "); - this.emitTypeSignature(boundDecl, type); - }; - - DeclarationEmitter.prototype.emitPropertySignature = function (varDecl) { - this.emitDeclarationComments(varDecl); - this.emitIndent(); - this.declFile.Write(varDecl.propertyName.text()); - if (varDecl.questionToken) { - this.declFile.Write("?"); - } - - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitVariableDeclarator = function (varDecl, isFirstVarInList, isLastVarInList) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - if (isFirstVarInList) { - this.emitDeclFlags(varDecl, "var"); - } - - this.declFile.Write(varDecl.propertyName.text()); - - if (!TypeScript.hasModifier(TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - if (isLastVarInList) { - this.declFile.WriteLine(";"); - } else { - this.declFile.Write(", "); - } - } - }; - - DeclarationEmitter.prototype.emitClassElementModifiers = function (modifiers) { - if (TypeScript.hasModifier(modifiers, 16 /* Static */)) { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } - this.declFile.Write("static "); - } else { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } else { - this.declFile.Write("public "); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForMemberVariableDeclaration = function (varDecl) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(varDecl.modifiers); - ; - - this.declFile.Write(varDecl.variableDeclarator.propertyName.text()); - - if (!TypeScript.hasModifier(varDecl.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - this.declFile.WriteLine(";"); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableStatement = function (variableStatement) { - this.emitDeclarationsForVariableDeclaration(variableStatement.declaration); - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableDeclaration = function (variableDeclaration) { - var varListCount = variableDeclaration.declarators.nonSeparatorCount(); - for (var i = 0; i < varListCount; i++) { - this.emitVariableDeclarator(variableDeclaration.declarators.nonSeparatorAt(i), i === 0, i === varListCount - 1); - } - }; - - DeclarationEmitter.prototype.emitArgDecl = function (argDecl, id, isOptional, isPrivate) { - this.indenter.increaseIndent(); - - this.emitDeclarationComments(argDecl, false); - this.declFile.Write(id.text()); - if (isOptional) { - this.declFile.Write("?"); - } - - this.indenter.decreaseIndent(); - - if (!isPrivate) { - this.emitTypeOfVariableDeclaratorOrParameter(argDecl); - } - }; - - DeclarationEmitter.prototype.isOverloadedCallSignature = function (funcDecl) { - var start = new Date().getTime(); - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDecl.getSymbol(); - TypeScript.declarationEmitIsOverloadedCallSignatureTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - var signatures = funcTypeSymbol.getCallSignatures(); - var result = signatures && signatures.length > 1; - - return result; - }; - - DeclarationEmitter.prototype.emitDeclarationsForConstructorDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("constructor"); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitParameterList = function (isPrivate, parameterList) { - this.declFile.Write("("); - this.emitParameters(isPrivate, TypeScript.ASTHelpers.parametersFromParameterList(parameterList)); - this.declFile.Write(")"); - }; - - DeclarationEmitter.prototype.emitParameters = function (isPrivate, parameterList) { - var hasLastParameterRestParameter = parameterList.lastParameterIsRest(); - var argsLen = parameterList.length; - if (hasLastParameterRestParameter) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - this.emitArgDecl(parameterList.astAt(i), parameterList.identifierAt(i), parameterList.isOptionalAt(i), isPrivate); - if (i < (argsLen - 1)) { - this.declFile.Write(", "); - } - } - - if (hasLastParameterRestParameter) { - if (parameterList.length > 1) { - this.declFile.Write(", ..."); - } else { - this.declFile.Write("..."); - } - - var index = parameterList.length - 1; - this.emitArgDecl(parameterList.astAt(index), parameterList.identifierAt(index), parameterList.isOptionalAt(index), isPrivate); - } - }; - - DeclarationEmitter.prototype.emitMemberFunctionDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } else if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */) && this.isOverloadedCallSignature(funcDecl)) { - var callSignatures = funcTypeSymbol.getCallSignatures(); - TypeScript.Debug.assert(callSignatures && callSignatures.length > 1); - var firstSignature = callSignatures[0].isDefinition() ? callSignatures[1] : callSignatures[0]; - var firstSignatureDecl = firstSignature.getDeclarations()[0]; - var firstFuncDecl = this.semanticInfoChain.getASTForDecl(firstSignatureDecl); - if (firstFuncDecl !== funcDecl) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitDeclFlags(funcDecl, "function"); - var id = funcDecl.propertyName.text(); - this.declFile.Write(id); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - var isPrivate = TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */); - - this.emitParameterList(isPrivate, funcDecl.callSignature.parameterList); - - if (!isPrivate) { - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitCallSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - this.emitDeclarationComments(funcDecl); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.typeParameterList, funcSignature); - - this.emitIndent(); - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitConstructSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("new"); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitMethodSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write(funcDecl.propertyName.text()); - if (funcDecl.questionToken) { - this.declFile.Write("? "); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForFunctionDeclaration = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - if (funcDecl.block) { - var funcTypeSymbol = funcSymbol.type; - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - var id = funcDecl.identifier.text(); - this.emitDeclFlags(funcDecl, "function"); - if (id !== "" || !funcDecl.identifier || funcDecl.identifier.text().length > 0) { - this.declFile.Write(id); - } else if (funcPullDecl.kind === 2097152 /* ConstructSignature */) { - this.declFile.Write("new"); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitIndexMemberDeclaration = function (funcDecl) { - this.emitDeclarationsForAST(funcDecl.indexSignature); - }; - - DeclarationEmitter.prototype.emitIndexSignature = function (funcDecl) { - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("["); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter)); - this.declFile.Write("]"); - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitBaseList = function (bases, useExtendsList) { - if (bases && (bases.nonSeparatorCount() > 0)) { - var qual = useExtendsList ? "extends" : "implements"; - this.declFile.Write(" " + qual + " "); - var basesLen = bases.nonSeparatorCount(); - for (var i = 0; i < basesLen; i++) { - if (i > 0) { - this.declFile.Write(", "); - } - var base = bases.nonSeparatorAt(i); - var baseType = this.semanticInfoChain.getSymbolForAST(base); - this.emitTypeSignature(base, baseType); - } - } - }; - - DeclarationEmitter.prototype.emitAccessorDeclarationComments = function (funcDecl) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var start = new Date().getTime(); - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - var comments = []; - if (accessors.getter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.getter)); - } - if (accessors.setter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.setter)); - } - - this.writeDeclarationComments(comments); - }; - - DeclarationEmitter.prototype.emitDeclarationsForGetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitDeclarationsForSetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitMemberAccessorDeclaration = function (funcDecl, modifiers, name) { - var start = new Date().getTime(); - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - if (funcDecl.kind() === 140 /* SetAccessor */ && accessorSymbol.getGetter()) { - return; - } - - var isPrivate = TypeScript.hasModifier(modifiers, 2 /* Private */); - this.emitAccessorDeclarationComments(funcDecl); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(modifiers); - this.declFile.Write(name.text()); - if (!isPrivate) { - this.declFile.Write(" : "); - var type = accessorSymbol.type; - this.emitTypeSignature(funcDecl, type); - } - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitClassMembersFromConstructorDefinition = function (funcDecl) { - var argsLen = funcDecl.callSignature.parameterList.parameters.nonSeparatorCount(); - if (TypeScript.lastParameterIsRest(funcDecl.callSignature.parameterList)) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - var parameter = funcDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.emitDeclarationComments(parameter); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(parameter.modifiers); - this.declFile.Write(parameter.identifier.text()); - - if (!TypeScript.hasModifier(parameter.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(parameter); - } - this.declFile.WriteLine(";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForClassDeclaration = function (classDecl) { - if (!this.canEmitDeclarations(classDecl)) { - return; - } - - var className = classDecl.identifier.text(); - this.emitDeclarationComments(classDecl); - var classPullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.emitDeclFlags(classDecl, "class"); - this.declFile.Write(className); - - this.emitTypeParameters(classDecl.typeParameterList); - this.emitHeritageClauses(classDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - var constructorDecl = TypeScript.getLastConstructor(classDecl); - if (constructorDecl) { - this.emitClassMembersFromConstructorDefinition(constructorDecl); - } - - this.emitDeclarationsForList(classDecl.classElements); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitHeritageClauses = function (clauses) { - if (clauses) { - for (var i = 0, n = clauses.childCount(); i < n; i++) { - this.emitHeritageClause(clauses.childAt(i)); - } - } - }; - - DeclarationEmitter.prototype.emitHeritageClause = function (clause) { - this.emitBaseList(clause.typeNames, clause.kind() === 230 /* ExtendsHeritageClause */); - }; - - DeclarationEmitter.getEnclosingContainer = function (ast) { - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - ast = enclosingModule || ast; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */ || ast.kind() === 128 /* InterfaceDeclaration */ || ast.kind() === 130 /* ModuleDeclaration */ || ast.kind() === 120 /* SourceUnit */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - DeclarationEmitter.prototype.emitTypeParameters = function (typeParams, funcSignature) { - if (!typeParams || !typeParams.typeParameters.nonSeparatorCount()) { - return; - } - - this.declFile.Write("<"); - var containerAst = DeclarationEmitter.getEnclosingContainer(typeParams); - - var start = new Date().getTime(); - var containerDecl = this.semanticInfoChain.getDeclForAST(containerAst); - var containerSymbol = containerDecl.getSymbol(); - TypeScript.declarationEmitGetTypeParameterSymbolTime += new Date().getTime() - start; - - var typars; - if (funcSignature) { - typars = funcSignature.getTypeParameters(); - } else { - typars = containerSymbol.getTypeArgumentsOrTypeParameters(); - } - - for (var i = 0; i < typars.length; i++) { - if (i) { - this.declFile.Write(", "); - } - - var memberName = typars[i].getScopedNameEx(containerSymbol, false, true); - this.emitTypeNamesMember(memberName); - } - - this.declFile.Write(">"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForInterfaceDeclaration = function (interfaceDecl) { - if (!this.canEmitDeclarations(interfaceDecl)) { - return; - } - - var interfaceName = interfaceDecl.identifier.text(); - this.emitDeclarationComments(interfaceDecl); - var interfacePullDecl = this.semanticInfoChain.getDeclForAST(interfaceDecl); - this.emitDeclFlags(interfaceDecl, "interface"); - this.declFile.Write(interfaceName); - - this.emitTypeParameters(interfaceDecl.typeParameterList); - this.emitHeritageClauses(interfaceDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - - this.emitSeparatedList(interfaceDecl.body.typeMembers); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForImportDeclaration = function (importDeclAST) { - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var importSymbol = importDecl.getSymbol(); - var isExportedImportDecl = TypeScript.hasModifier(importDeclAST.modifiers, 1 /* Exported */); - - if (isExportedImportDecl || importSymbol.typeUsedExternally() || TypeScript.PullContainerSymbol.usedAsSymbol(importSymbol.getContainer(), importSymbol)) { - this.emitDeclarationComments(importDeclAST); - this.emitIndent(); - if (isExportedImportDecl) { - this.declFile.Write("export "); - } - this.declFile.Write("import "); - this.declFile.Write(importDeclAST.identifier.text() + " = "); - if (importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - this.declFile.WriteLine("require(" + importDeclAST.moduleReference.stringLiteral.text() + ");"); - } else { - this.declFile.WriteLine(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(importDeclAST.moduleReference.moduleName) + ";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForEnumDeclaration = function (moduleDecl) { - if (!this.canEmitDeclarations(moduleDecl)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - var modulePullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.emitDeclFlags(moduleDecl, "enum"); - this.declFile.WriteLine(moduleDecl.identifier.text() + " {"); - - this.indenter.increaseIndent(); - var membersLen = moduleDecl.enumElements.nonSeparatorCount(); - for (var j = 0; j < membersLen; j++) { - var memberDecl = moduleDecl.enumElements.nonSeparatorAt(j); - var enumElement = memberDecl; - var enumElementDecl = this.semanticInfoChain.getDeclForAST(enumElement); - this.emitDeclarationComments(enumElement); - this.emitIndent(); - this.declFile.Write(enumElement.propertyName.text()); - if (enumElementDecl.constantValue !== null) { - this.declFile.Write(" = " + enumElementDecl.constantValue); - } - this.declFile.WriteLine(","); - } - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForModuleDeclaration = function (moduleDecl) { - var name = moduleDecl.stringLiteral || TypeScript.ArrayUtilities.first(TypeScript.ASTHelpers.getModuleNames(moduleDecl.name)); - if (!this.canEmitDeclarations(name)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - this.emitDeclFlags(name, "module"); - - if (moduleDecl.stringLiteral) { - this.declFile.Write(moduleDecl.stringLiteral.text()); - } else { - this.declFile.Write(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(moduleDecl.name)); - } - - this.declFile.WriteLine(" {"); - this.indenter.increaseIndent(); - - this.emitDeclarationsForList(moduleDecl.moduleElements); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForExportAssignment = function (ast) { - this.emitIndent(); - this.declFile.Write("export = "); - this.declFile.Write(ast.identifier.text()); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.resolveScriptReference = function (document, reference) { - if (!this.emitOptions.compilationSettings().noResolve() || TypeScript.isRooted(reference)) { - return reference; - } - - var documentDir = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath(document.fileName))); - var resolvedReferencePath = this.emitOptions.resolvePath(documentDir + reference); - return resolvedReferencePath; - }; - - DeclarationEmitter.prototype.emitReferencePaths = function (sourceUnit) { - if (this.emittedReferencePaths) { - return; - } - - var documents = []; - if (this.document.emitToOwnOutputFile()) { - var scriptReferences = this.document.referencedFiles; - var addedGlobalDocument = false; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(this.document, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.emitToOwnOutputFile() || document.isDeclareFile() || !addedGlobalDocument)) { - documents = documents.concat(document); - - if (!document.isDeclareFile() && document.isExternalModule()) { - addedGlobalDocument = true; - } - } - } - } else { - var fileNames = this.compiler.fileNames(); - for (var i = 0; i < fileNames.length; i++) { - var doc = this.compiler.getDocument(fileNames[i]); - if (!doc.isDeclareFile() && !doc.isExternalModule()) { - var scriptReferences = doc.referencedFiles; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(doc, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.isDeclareFile() || document.isExternalModule())) { - for (var k = 0; k < documents.length; k++) { - if (documents[k] === document) { - break; - } - } - - if (k === documents.length) { - documents = documents.concat(document); - } - } - } - } - } - } - - var emittingFilePath = documents.length ? TypeScript.getRootFilePath(this.emittingFileName) : null; - for (var i = 0; i < documents.length; i++) { - var document = documents[i]; - var declFileName; - if (document.isDeclareFile()) { - declFileName = document.fileName; - } else { - declFileName = this.compiler.mapOutputFileName(document, this.emitOptions, TypeScript.TypeScriptCompiler.mapToDTSFileName); - } - - declFileName = TypeScript.getRelativePathToFixedPath(emittingFilePath, declFileName, false); - this.declFile.WriteLine('/// '); - } - - this.emittedReferencePaths = true; - }; - - DeclarationEmitter.prototype.emitDeclarationsForSourceUnit = function (sourceUnit) { - this.emitReferencePaths(sourceUnit); - this.emitDeclarationsForList(sourceUnit.moduleElements); - }; - return DeclarationEmitter; - })(); - TypeScript.DeclarationEmitter = DeclarationEmitter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var BloomFilter = (function () { - function BloomFilter(expectedCount) { - var m = Math.max(1, BloomFilter.computeM(expectedCount)); - var k = Math.max(1, BloomFilter.computeK(expectedCount)); - ; - - var sizeInEvenBytes = (m + 7) & ~7; - - this.bitArray = []; - for (var i = 0, len = sizeInEvenBytes; i < len; i++) { - this.bitArray[i] = false; - } - this.hashFunctionCount = k; - } - BloomFilter.computeM = function (expectedCount) { - var p = BloomFilter.falsePositiveProbability; - var n = expectedCount; - - var numerator = n * Math.log(p); - var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); - return Math.ceil(numerator / denominator); - }; - - BloomFilter.computeK = function (expectedCount) { - var n = expectedCount; - var m = BloomFilter.computeM(expectedCount); - - var temp = Math.log(2.0) * m / n; - return Math.round(temp); - }; - - BloomFilter.prototype.computeHash = function (key, seed) { - return TypeScript.Hash.computeMurmur2StringHashCode(key, seed); - }; - - BloomFilter.prototype.addKeys = function (keys) { - for (var name in keys) { - if (keys[name]) { - this.add(name); - } - } - }; - - BloomFilter.prototype.add = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - this.bitArray[Math.abs(hash)] = true; - } - }; - - BloomFilter.prototype.probablyContains = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - if (!this.bitArray[Math.abs(hash)]) { - return false; - } - } - - return true; - }; - - BloomFilter.prototype.isEquivalent = function (filter) { - return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount; - }; - - BloomFilter.isEquivalent = function (array1, array2) { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - }; - BloomFilter.falsePositiveProbability = 0.0001; - return BloomFilter; - })(); - TypeScript.BloomFilter = BloomFilter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var IdentifierWalker = (function (_super) { - __extends(IdentifierWalker, _super); - function IdentifierWalker(list) { - _super.call(this); - this.list = list; - } - IdentifierWalker.prototype.visitToken = function (token) { - this.list[token.text()] = true; - }; - return IdentifierWalker; - })(TypeScript.SyntaxWalker); - TypeScript.IdentifierWalker = IdentifierWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CompilationSettings = (function () { - function CompilationSettings() { - this.propagateEnumConstants = false; - this.removeComments = false; - this.watch = false; - this.noResolve = false; - this.allowAutomaticSemicolonInsertion = true; - this.noImplicitAny = false; - this.noLib = false; - this.codeGenTarget = 0 /* EcmaScript3 */; - this.moduleGenTarget = 0 /* Unspecified */; - this.outFileOption = ""; - this.outDirOption = ""; - this.mapSourceFiles = false; - this.mapRoot = ""; - this.sourceRoot = ""; - this.generateDeclarationFiles = false; - this.useCaseSensitiveFileResolution = false; - this.gatherDiagnostics = false; - this.codepage = null; - this.createFileLog = false; - } - return CompilationSettings; - })(); - TypeScript.CompilationSettings = CompilationSettings; - - var ImmutableCompilationSettings = (function () { - function ImmutableCompilationSettings(propagateEnumConstants, removeComments, watch, noResolve, allowAutomaticSemicolonInsertion, noImplicitAny, noLib, codeGenTarget, moduleGenTarget, outFileOption, outDirOption, mapSourceFiles, mapRoot, sourceRoot, generateDeclarationFiles, useCaseSensitiveFileResolution, gatherDiagnostics, codepage, createFileLog) { - this._propagateEnumConstants = propagateEnumConstants; - this._removeComments = removeComments; - this._watch = watch; - this._noResolve = noResolve; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - this._noImplicitAny = noImplicitAny; - this._noLib = noLib; - this._codeGenTarget = codeGenTarget; - this._moduleGenTarget = moduleGenTarget; - this._outFileOption = outFileOption; - this._outDirOption = outDirOption; - this._mapSourceFiles = mapSourceFiles; - this._mapRoot = mapRoot; - this._sourceRoot = sourceRoot; - this._generateDeclarationFiles = generateDeclarationFiles; - this._useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this._gatherDiagnostics = gatherDiagnostics; - this._codepage = codepage; - this._createFileLog = createFileLog; - } - ImmutableCompilationSettings.prototype.propagateEnumConstants = function () { - return this._propagateEnumConstants; - }; - ImmutableCompilationSettings.prototype.removeComments = function () { - return this._removeComments; - }; - ImmutableCompilationSettings.prototype.watch = function () { - return this._watch; - }; - ImmutableCompilationSettings.prototype.noResolve = function () { - return this._noResolve; - }; - ImmutableCompilationSettings.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - ImmutableCompilationSettings.prototype.noImplicitAny = function () { - return this._noImplicitAny; - }; - ImmutableCompilationSettings.prototype.noLib = function () { - return this._noLib; - }; - ImmutableCompilationSettings.prototype.codeGenTarget = function () { - return this._codeGenTarget; - }; - ImmutableCompilationSettings.prototype.moduleGenTarget = function () { - return this._moduleGenTarget; - }; - ImmutableCompilationSettings.prototype.outFileOption = function () { - return this._outFileOption; - }; - ImmutableCompilationSettings.prototype.outDirOption = function () { - return this._outDirOption; - }; - ImmutableCompilationSettings.prototype.mapSourceFiles = function () { - return this._mapSourceFiles; - }; - ImmutableCompilationSettings.prototype.mapRoot = function () { - return this._mapRoot; - }; - ImmutableCompilationSettings.prototype.sourceRoot = function () { - return this._sourceRoot; - }; - ImmutableCompilationSettings.prototype.generateDeclarationFiles = function () { - return this._generateDeclarationFiles; - }; - ImmutableCompilationSettings.prototype.useCaseSensitiveFileResolution = function () { - return this._useCaseSensitiveFileResolution; - }; - ImmutableCompilationSettings.prototype.gatherDiagnostics = function () { - return this._gatherDiagnostics; - }; - ImmutableCompilationSettings.prototype.codepage = function () { - return this._codepage; - }; - ImmutableCompilationSettings.prototype.createFileLog = function () { - return this._createFileLog; - }; - - ImmutableCompilationSettings.defaultSettings = function () { - if (!ImmutableCompilationSettings._defaultSettings) { - ImmutableCompilationSettings._defaultSettings = ImmutableCompilationSettings.fromCompilationSettings(new CompilationSettings()); - } - - return ImmutableCompilationSettings._defaultSettings; - }; - - ImmutableCompilationSettings.fromCompilationSettings = function (settings) { - return new ImmutableCompilationSettings(settings.propagateEnumConstants, settings.removeComments, settings.watch, settings.noResolve, settings.allowAutomaticSemicolonInsertion, settings.noImplicitAny, settings.noLib, settings.codeGenTarget, settings.moduleGenTarget, settings.outFileOption, settings.outDirOption, settings.mapSourceFiles, settings.mapRoot, settings.sourceRoot, settings.generateDeclarationFiles, settings.useCaseSensitiveFileResolution, settings.gatherDiagnostics, settings.codepage, settings.createFileLog); - }; - - ImmutableCompilationSettings.prototype.toCompilationSettings = function () { - var result = new CompilationSettings(); - - var thisAsIndexable = this; - var resultAsIndexable = result; - for (var name in this) { - if (this.hasOwnProperty(name) && TypeScript.StringUtilities.startsWith(name, "_")) { - resultAsIndexable[name.substr(1)] = thisAsIndexable[name]; - } - } - - return result; - }; - return ImmutableCompilationSettings; - })(); - TypeScript.ImmutableCompilationSettings = ImmutableCompilationSettings; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullElementFlags) { - PullElementFlags[PullElementFlags["None"] = 0] = "None"; - PullElementFlags[PullElementFlags["Exported"] = 1] = "Exported"; - PullElementFlags[PullElementFlags["Private"] = 1 << 1] = "Private"; - PullElementFlags[PullElementFlags["Public"] = 1 << 2] = "Public"; - PullElementFlags[PullElementFlags["Ambient"] = 1 << 3] = "Ambient"; - PullElementFlags[PullElementFlags["Static"] = 1 << 4] = "Static"; - PullElementFlags[PullElementFlags["Optional"] = 1 << 7] = "Optional"; - PullElementFlags[PullElementFlags["Signature"] = 1 << 11] = "Signature"; - PullElementFlags[PullElementFlags["Enum"] = 1 << 12] = "Enum"; - PullElementFlags[PullElementFlags["ArrowFunction"] = 1 << 13] = "ArrowFunction"; - - PullElementFlags[PullElementFlags["ClassConstructorVariable"] = 1 << 14] = "ClassConstructorVariable"; - PullElementFlags[PullElementFlags["InitializedModule"] = 1 << 15] = "InitializedModule"; - PullElementFlags[PullElementFlags["InitializedDynamicModule"] = 1 << 16] = "InitializedDynamicModule"; - - PullElementFlags[PullElementFlags["MustCaptureThis"] = 1 << 18] = "MustCaptureThis"; - - PullElementFlags[PullElementFlags["DeclaredInAWithBlock"] = 1 << 21] = "DeclaredInAWithBlock"; - - PullElementFlags[PullElementFlags["HasReturnStatement"] = 1 << 22] = "HasReturnStatement"; - - PullElementFlags[PullElementFlags["PropertyParameter"] = 1 << 23] = "PropertyParameter"; - - PullElementFlags[PullElementFlags["IsAnnotatedWithAny"] = 1 << 24] = "IsAnnotatedWithAny"; - - PullElementFlags[PullElementFlags["HasDefaultArgs"] = 1 << 25] = "HasDefaultArgs"; - - PullElementFlags[PullElementFlags["ConstructorParameter"] = 1 << 26] = "ConstructorParameter"; - - PullElementFlags[PullElementFlags["ImplicitVariable"] = PullElementFlags.ClassConstructorVariable | PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "ImplicitVariable"; - PullElementFlags[PullElementFlags["SomeInitializedModule"] = PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "SomeInitializedModule"; - })(TypeScript.PullElementFlags || (TypeScript.PullElementFlags = {})); - var PullElementFlags = TypeScript.PullElementFlags; - - function hasModifier(modifiers, flag) { - for (var i = 0, n = modifiers.length; i < n; i++) { - if (TypeScript.hasFlag(modifiers[i], flag)) { - return true; - } - } - - return false; - } - TypeScript.hasModifier = hasModifier; - - (function (PullElementKind) { - PullElementKind[PullElementKind["None"] = 0] = "None"; - PullElementKind[PullElementKind["Global"] = 0] = "Global"; - - PullElementKind[PullElementKind["Script"] = 1 << 0] = "Script"; - PullElementKind[PullElementKind["Primitive"] = 1 << 1] = "Primitive"; - - PullElementKind[PullElementKind["Container"] = 1 << 2] = "Container"; - PullElementKind[PullElementKind["Class"] = 1 << 3] = "Class"; - PullElementKind[PullElementKind["Interface"] = 1 << 4] = "Interface"; - PullElementKind[PullElementKind["DynamicModule"] = 1 << 5] = "DynamicModule"; - PullElementKind[PullElementKind["Enum"] = 1 << 6] = "Enum"; - PullElementKind[PullElementKind["TypeAlias"] = 1 << 7] = "TypeAlias"; - PullElementKind[PullElementKind["ObjectLiteral"] = 1 << 8] = "ObjectLiteral"; - - PullElementKind[PullElementKind["Variable"] = 1 << 9] = "Variable"; - PullElementKind[PullElementKind["CatchVariable"] = 1 << 10] = "CatchVariable"; - PullElementKind[PullElementKind["Parameter"] = 1 << 11] = "Parameter"; - PullElementKind[PullElementKind["Property"] = 1 << 12] = "Property"; - PullElementKind[PullElementKind["TypeParameter"] = 1 << 13] = "TypeParameter"; - - PullElementKind[PullElementKind["Function"] = 1 << 14] = "Function"; - PullElementKind[PullElementKind["ConstructorMethod"] = 1 << 15] = "ConstructorMethod"; - PullElementKind[PullElementKind["Method"] = 1 << 16] = "Method"; - PullElementKind[PullElementKind["FunctionExpression"] = 1 << 17] = "FunctionExpression"; - - PullElementKind[PullElementKind["GetAccessor"] = 1 << 18] = "GetAccessor"; - PullElementKind[PullElementKind["SetAccessor"] = 1 << 19] = "SetAccessor"; - - PullElementKind[PullElementKind["CallSignature"] = 1 << 20] = "CallSignature"; - PullElementKind[PullElementKind["ConstructSignature"] = 1 << 21] = "ConstructSignature"; - PullElementKind[PullElementKind["IndexSignature"] = 1 << 22] = "IndexSignature"; - - PullElementKind[PullElementKind["ObjectType"] = 1 << 23] = "ObjectType"; - PullElementKind[PullElementKind["FunctionType"] = 1 << 24] = "FunctionType"; - PullElementKind[PullElementKind["ConstructorType"] = 1 << 25] = "ConstructorType"; - - PullElementKind[PullElementKind["EnumMember"] = 1 << 26] = "EnumMember"; - - PullElementKind[PullElementKind["WithBlock"] = 1 << 27] = "WithBlock"; - PullElementKind[PullElementKind["CatchBlock"] = 1 << 28] = "CatchBlock"; - - PullElementKind[PullElementKind["All"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Container | PullElementKind.Class | PullElementKind.Interface | PullElementKind.DynamicModule | PullElementKind.Enum | PullElementKind.TypeAlias | PullElementKind.ObjectLiteral | PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.TypeParameter | PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor | PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.EnumMember | PullElementKind.WithBlock | PullElementKind.CatchBlock] = "All"; - - PullElementKind[PullElementKind["SomeFunction"] = PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor] = "SomeFunction"; - - PullElementKind[PullElementKind["SomeValue"] = PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.EnumMember | PullElementKind.SomeFunction] = "SomeValue"; - - PullElementKind[PullElementKind["SomeType"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.ObjectLiteral | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.TypeParameter] = "SomeType"; - - PullElementKind[PullElementKind["AcceptableAlias"] = PullElementKind.Variable | PullElementKind.SomeFunction | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.Container | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "AcceptableAlias"; - - PullElementKind[PullElementKind["SomeContainer"] = PullElementKind.Container | PullElementKind.DynamicModule | PullElementKind.TypeAlias] = "SomeContainer"; - - PullElementKind[PullElementKind["SomeSignature"] = PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature] = "SomeSignature"; - - PullElementKind[PullElementKind["SomeTypeReference"] = PullElementKind.Interface | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "SomeTypeReference"; - - PullElementKind[PullElementKind["SomeInstantiatableType"] = PullElementKind.Class | PullElementKind.Interface | PullElementKind.TypeParameter] = "SomeInstantiatableType"; - })(TypeScript.PullElementKind || (TypeScript.PullElementKind = {})); - var PullElementKind = TypeScript.PullElementKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var pullDeclID = 0; - var sentinelEmptyPullDeclArray = []; - - var PullDecl = (function () { - function PullDecl(declName, displayName, kind, declFlags, semanticInfoChain) { - this.declID = pullDeclID++; - this.flags = 0 /* None */; - this.declGroups = null; - this.childDecls = null; - this.typeParameters = null; - this.synthesizedValDecl = null; - this.containerDecl = null; - this.childDeclTypeCache = null; - this.childDeclValueCache = null; - this.childDeclNamespaceCache = null; - this.childDeclTypeParameterCache = null; - this.name = declName; - this.kind = kind; - this.flags = declFlags; - this.semanticInfoChain = semanticInfoChain; - - if (displayName !== this.name) { - this.declDisplayName = displayName; - } - } - PullDecl.prototype.fileName = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentPath = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.isExternalModule = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getEnclosingDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype._getEnclosingDeclFromParentDecl = function () { - var decl = this; - while (decl) { - switch (decl.kind) { - default: - return decl; - case 512 /* Variable */: - case 8192 /* TypeParameter */: - case 2048 /* Parameter */: - case 128 /* TypeAlias */: - case 67108864 /* EnumMember */: - } - - decl = decl.getParentDecl(); - } - - TypeScript.Debug.fail(); - }; - - PullDecl.prototype.getDisplayName = function () { - return this.declDisplayName === undefined ? this.name : this.declDisplayName; - }; - - PullDecl.prototype.setSymbol = function (symbol) { - this.semanticInfoChain.setSymbolForDecl(this, symbol); - }; - - PullDecl.prototype.ensureSymbolIsBound = function () { - if (!this.hasBeenBound() && this.kind !== 1 /* Script */) { - var binder = this.semanticInfoChain.getBinder(); - binder.bindDeclToPullSymbol(this); - } - }; - - PullDecl.prototype.getSymbol = function () { - if (this.kind === 1 /* Script */) { - return null; - } - - this.ensureSymbolIsBound(); - - return this.semanticInfoChain.getSymbolForDecl(this); - }; - - PullDecl.prototype.hasSymbol = function () { - var symbol = this.semanticInfoChain.getSymbolForDecl(this); - return !!symbol; - }; - - PullDecl.prototype.setSignatureSymbol = function (signatureSymbol) { - this.semanticInfoChain.setSignatureSymbolForDecl(this, signatureSymbol); - }; - - PullDecl.prototype.getSignatureSymbol = function () { - this.ensureSymbolIsBound(); - return this.semanticInfoChain.getSignatureSymbolForDecl(this); - }; - - PullDecl.prototype.hasSignatureSymbol = function () { - var signatureSymbol = this.semanticInfoChain.getSignatureSymbolForDecl(this); - return !!signatureSymbol; - }; - - PullDecl.prototype.setFlags = function (flags) { - this.flags = flags; - }; - - PullDecl.prototype.setFlag = function (flags) { - this.flags |= flags; - }; - - PullDecl.prototype.setValueDecl = function (valDecl) { - this.synthesizedValDecl = valDecl; - valDecl.containerDecl = this; - }; - - PullDecl.prototype.getValueDecl = function () { - return this.synthesizedValDecl; - }; - - PullDecl.prototype.getContainerDecl = function () { - return this.containerDecl; - }; - - PullDecl.prototype.getChildDeclCache = function (declKind) { - if (declKind === 8192 /* TypeParameter */) { - if (!this.childDeclTypeParameterCache) { - this.childDeclTypeParameterCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeParameterCache; - } else if (TypeScript.hasFlag(declKind, 164 /* SomeContainer */)) { - if (!this.childDeclNamespaceCache) { - this.childDeclNamespaceCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclNamespaceCache; - } else if (TypeScript.hasFlag(declKind, 58728795 /* SomeType */)) { - if (!this.childDeclTypeCache) { - this.childDeclTypeCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeCache; - } else { - if (!this.childDeclValueCache) { - this.childDeclValueCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclValueCache; - } - }; - - PullDecl.prototype.addChildDecl = function (childDecl) { - if (childDecl.kind === 8192 /* TypeParameter */) { - if (!this.typeParameters) { - this.typeParameters = []; - } - this.typeParameters[this.typeParameters.length] = childDecl; - } else { - if (!this.childDecls) { - this.childDecls = []; - } - this.childDecls[this.childDecls.length] = childDecl; - } - - var declName = childDecl.name; - - if (!(childDecl.kind & 7340032 /* SomeSignature */)) { - var cache = this.getChildDeclCache(childDecl.kind); - var childrenOfName = cache[declName]; - if (!childrenOfName) { - childrenOfName = []; - } - - childrenOfName.push(childDecl); - cache[declName] = childrenOfName; - } - }; - - PullDecl.prototype.searchChildDecls = function (declName, searchKind) { - var cacheVal = null; - - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeCache ? this.childDeclTypeCache[declName] : null; - } else if (searchKind & 164 /* SomeContainer */) { - cacheVal = this.childDeclNamespaceCache ? this.childDeclNamespaceCache[declName] : null; - } else { - cacheVal = this.childDeclValueCache ? this.childDeclValueCache[declName] : null; - } - - if (cacheVal) { - return cacheVal; - } else { - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeParameterCache ? this.childDeclTypeParameterCache[declName] : null; - - if (cacheVal) { - return cacheVal; - } - } - - return sentinelEmptyPullDeclArray; - } - }; - - PullDecl.prototype.getChildDecls = function () { - return this.childDecls || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.getTypeParameters = function () { - return this.typeParameters || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.addVariableDeclToGroup = function (decl) { - if (!this.declGroups) { - this.declGroups = TypeScript.createIntrinsicsObject(); - } - - var declGroup = this.declGroups[decl.name]; - if (declGroup) { - declGroup.addDecl(decl); - } else { - declGroup = new PullDeclGroup(decl.name); - declGroup.addDecl(decl); - this.declGroups[decl.name] = declGroup; - } - }; - - PullDecl.prototype.getVariableDeclGroups = function () { - var declGroups = null; - - if (this.declGroups) { - for (var declName in this.declGroups) { - if (this.declGroups[declName]) { - if (declGroups === null) { - declGroups = []; - } - - declGroups.push(this.declGroups[declName].getDecls()); - } - } - } - - return declGroups || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.hasBeenBound = function () { - return this.hasSymbol() || this.hasSignatureSymbol(); - }; - - PullDecl.prototype.isSynthesized = function () { - return false; - }; - - PullDecl.prototype.ast = function () { - return this.semanticInfoChain.getASTForDecl(this); - }; - - PullDecl.prototype.isRootDecl = function () { - throw TypeScript.Errors.abstract(); - }; - return PullDecl; - })(); - TypeScript.PullDecl = PullDecl; - - var RootPullDecl = (function (_super) { - __extends(RootPullDecl, _super); - function RootPullDecl(name, fileName, kind, declFlags, semanticInfoChain, isExternalModule) { - _super.call(this, name, name, kind, declFlags, semanticInfoChain); - this.semanticInfoChain = semanticInfoChain; - this._isExternalModule = isExternalModule; - this._fileName = fileName; - } - RootPullDecl.prototype.fileName = function () { - return this._fileName; - }; - - RootPullDecl.prototype.getParentPath = function () { - return [this]; - }; - - RootPullDecl.prototype.getParentDecl = function () { - return null; - }; - - RootPullDecl.prototype.isExternalModule = function () { - return this._isExternalModule; - }; - - RootPullDecl.prototype.getEnclosingDecl = function () { - return this; - }; - - RootPullDecl.prototype.isRootDecl = function () { - return true; - }; - return RootPullDecl; - })(PullDecl); - TypeScript.RootPullDecl = RootPullDecl; - - var NormalPullDecl = (function (_super) { - __extends(NormalPullDecl, _super); - function NormalPullDecl(declName, displayName, kind, declFlags, parentDecl, addToParent) { - if (typeof addToParent === "undefined") { addToParent = true; } - _super.call(this, declName, displayName, kind, declFlags, parentDecl ? parentDecl.semanticInfoChain : null); - this.parentDecl = null; - this.parentPath = null; - - this.parentDecl = parentDecl; - if (addToParent) { - parentDecl.addChildDecl(this); - } - - if (this.parentDecl) { - if (this.parentDecl.isRootDecl()) { - this._rootDecl = this.parentDecl; - } else { - this._rootDecl = this.parentDecl._rootDecl; - } - } else { - TypeScript.Debug.assert(this.isSynthesized()); - this._rootDecl = null; - } - } - NormalPullDecl.prototype.fileName = function () { - return this._rootDecl.fileName(); - }; - - NormalPullDecl.prototype.getParentDecl = function () { - return this.parentDecl; - }; - - NormalPullDecl.prototype.getParentPath = function () { - if (!this.parentPath) { - var path = [this]; - var parentDecl = this.parentDecl; - - while (parentDecl) { - if (parentDecl && path[path.length - 1] !== parentDecl && !(parentDecl.kind & (256 /* ObjectLiteral */ | 8388608 /* ObjectType */))) { - path.unshift(parentDecl); - } - - parentDecl = parentDecl.getParentDecl(); - } - - this.parentPath = path; - } - - return this.parentPath; - }; - - NormalPullDecl.prototype.isExternalModule = function () { - return false; - }; - - NormalPullDecl.prototype.getEnclosingDecl = function () { - return this.parentDecl && this.parentDecl._getEnclosingDeclFromParentDecl(); - }; - - NormalPullDecl.prototype.isRootDecl = function () { - return false; - }; - return NormalPullDecl; - })(PullDecl); - TypeScript.NormalPullDecl = NormalPullDecl; - - var PullEnumElementDecl = (function (_super) { - __extends(PullEnumElementDecl, _super); - function PullEnumElementDecl(declName, displayName, parentDecl) { - _super.call(this, declName, displayName, 67108864 /* EnumMember */, 4 /* Public */, parentDecl); - this.constantValue = null; - } - return PullEnumElementDecl; - })(NormalPullDecl); - TypeScript.PullEnumElementDecl = PullEnumElementDecl; - - var PullFunctionExpressionDecl = (function (_super) { - __extends(PullFunctionExpressionDecl, _super); - function PullFunctionExpressionDecl(expressionName, declFlags, parentDecl, displayName) { - if (typeof displayName === "undefined") { displayName = ""; } - _super.call(this, "", displayName, 131072 /* FunctionExpression */, declFlags, parentDecl); - this.functionExpressionName = expressionName; - } - PullFunctionExpressionDecl.prototype.getFunctionExpressionName = function () { - return this.functionExpressionName; - }; - return PullFunctionExpressionDecl; - })(NormalPullDecl); - TypeScript.PullFunctionExpressionDecl = PullFunctionExpressionDecl; - - var PullSynthesizedDecl = (function (_super) { - __extends(PullSynthesizedDecl, _super); - function PullSynthesizedDecl(declName, displayName, kind, declFlags, parentDecl, semanticInfoChain) { - _super.call(this, declName, displayName, kind, declFlags, parentDecl, false); - this.semanticInfoChain = semanticInfoChain; - } - PullSynthesizedDecl.prototype.isSynthesized = function () { - return true; - }; - - PullSynthesizedDecl.prototype.fileName = function () { - return this._rootDecl ? this._rootDecl.fileName() : ""; - }; - return PullSynthesizedDecl; - })(NormalPullDecl); - TypeScript.PullSynthesizedDecl = PullSynthesizedDecl; - - var PullDeclGroup = (function () { - function PullDeclGroup(name) { - this.name = name; - this._decls = []; - } - PullDeclGroup.prototype.addDecl = function (decl) { - if (decl.name === this.name) { - this._decls[this._decls.length] = decl; - } - }; - - PullDeclGroup.prototype.getDecls = function () { - return this._decls; - }; - return PullDeclGroup; - })(); - TypeScript.PullDeclGroup = PullDeclGroup; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.pullSymbolID = 0; - TypeScript.sentinelEmptyArray = []; - - var PullSymbol = (function () { - function PullSymbol(name, declKind) { - this.pullSymbolID = ++TypeScript.pullSymbolID; - this._container = null; - this.type = null; - this._declarations = null; - this.isResolved = false; - this.isOptional = false; - this.inResolution = false; - this.isSynthesized = false; - this.isVarArg = false; - this.rootSymbol = null; - this._enclosingSignature = null; - this._docComments = null; - this.isPrinting = false; - this.name = name; - this.kind = declKind; - } - PullSymbol.prototype.isAny = function () { - return false; - }; - - PullSymbol.prototype.isType = function () { - return (this.kind & 58728795 /* SomeType */) !== 0; - }; - - PullSymbol.prototype.isTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isSignature = function () { - return (this.kind & 7340032 /* SomeSignature */) !== 0; - }; - - PullSymbol.prototype.isArrayNamedTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isPrimitive = function () { - return this.kind === 2 /* Primitive */; - }; - - PullSymbol.prototype.isAccessor = function () { - return false; - }; - - PullSymbol.prototype.isError = function () { - return false; - }; - - PullSymbol.prototype.isInterface = function () { - return this.kind === 16 /* Interface */; - }; - - PullSymbol.prototype.isMethod = function () { - return this.kind === 65536 /* Method */; - }; - - PullSymbol.prototype.isProperty = function () { - return this.kind === 4096 /* Property */; - }; - - PullSymbol.prototype.isAlias = function () { - return false; - }; - - PullSymbol.prototype.isContainer = function () { - return false; - }; - - PullSymbol.prototype.findAliasedTypeSymbols = function (scopeSymbol, skipScopeSymbolAliasesLookIn, lookIntoOnlyExportedAlias, aliasSymbols, visitedScopeDeclarations) { - if (typeof aliasSymbols === "undefined") { aliasSymbols = []; } - if (typeof visitedScopeDeclarations === "undefined") { visitedScopeDeclarations = []; } - var scopeDeclarations = scopeSymbol.getDeclarations(); - var scopeSymbolAliasesToLookIn = []; - - for (var i = 0; i < scopeDeclarations.length; i++) { - var scopeDecl = scopeDeclarations[i]; - if (!TypeScript.ArrayUtilities.contains(visitedScopeDeclarations, scopeDecl)) { - visitedScopeDeclarations.push(scopeDecl); - - var childDecls = scopeDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; j++) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */ && (!lookIntoOnlyExportedAlias || (childDecl.flags & 1 /* Exported */))) { - var symbol = childDecl.getSymbol(); - - if (PullContainerSymbol.usedAsSymbol(symbol, this) || (this.rootSymbol && PullContainerSymbol.usedAsSymbol(symbol, this.rootSymbol))) { - aliasSymbols.push(symbol); - return aliasSymbols; - } - - if (!skipScopeSymbolAliasesLookIn && PullSymbol._isExternalModuleReferenceAlias(symbol) && (!symbol.assignedContainer().hasExportAssignment() || (symbol.assignedContainer().getExportAssignedContainerSymbol() && symbol.assignedContainer().getExportAssignedContainerSymbol().kind === 32 /* DynamicModule */))) { - scopeSymbolAliasesToLookIn.push(symbol); - } - } - } - } - } - - for (var i = 0; i < scopeSymbolAliasesToLookIn.length; i++) { - var scopeSymbolAlias = scopeSymbolAliasesToLookIn[i]; - - aliasSymbols.push(scopeSymbolAlias); - var result = this.findAliasedTypeSymbols(scopeSymbolAlias.assignedContainer().hasExportAssignment() ? scopeSymbolAlias.assignedContainer().getExportAssignedContainerSymbol() : scopeSymbolAlias.assignedContainer(), false, true, aliasSymbols, visitedScopeDeclarations); - if (result) { - return result; - } - - aliasSymbols.pop(); - } - - return null; - }; - - PullSymbol.prototype.getExternalAliasedSymbols = function (scopeSymbol) { - if (!scopeSymbol) { - return null; - } - - var scopePath = scopeSymbol.pathToRoot(); - if (scopePath.length && scopePath[scopePath.length - 1].kind === 32 /* DynamicModule */) { - var symbols = this.findAliasedTypeSymbols(scopePath[scopePath.length - 1]); - return symbols; - } - - return null; - }; - - PullSymbol._isExternalModuleReferenceAlias = function (aliasSymbol) { - if (aliasSymbol) { - if (aliasSymbol.assignedValue()) { - return false; - } - - if (aliasSymbol.assignedType() && aliasSymbol.assignedType() !== aliasSymbol.assignedContainer()) { - return false; - } - - if (aliasSymbol.assignedContainer() && aliasSymbol.assignedContainer().kind !== 32 /* DynamicModule */) { - return false; - } - - return true; - } - - return false; - }; - - PullSymbol.prototype.getExportedInternalAliasSymbol = function (scopeSymbol) { - if (scopeSymbol) { - if (this.kind !== 128 /* TypeAlias */) { - var scopePath = scopeSymbol.pathToRoot(); - for (var i = 0; i < scopePath.length; i++) { - var internalAliases = this.findAliasedTypeSymbols(scopeSymbol, true, true); - if (internalAliases) { - TypeScript.Debug.assert(internalAliases.length === 1); - return internalAliases[0]; - } - } - } - } - - return null; - }; - - PullSymbol.prototype.getAliasSymbolName = function (scopeSymbol, aliasNameGetter, aliasPartsNameGetter, skipInternalAlias) { - if (!skipInternalAlias) { - var internalAlias = this.getExportedInternalAliasSymbol(scopeSymbol); - if (internalAlias) { - return aliasNameGetter(internalAlias); - } - } - - var externalAliases = this.getExternalAliasedSymbols(scopeSymbol); - - if (externalAliases && externalAliases[0] != this && PullSymbol._isExternalModuleReferenceAlias(externalAliases[externalAliases.length - 1])) { - var aliasFullName = aliasNameGetter(externalAliases[0]); - if (!aliasFullName) { - return null; - } - for (var i = 1, symbolsLen = externalAliases.length; i < symbolsLen; i++) { - aliasFullName = aliasFullName + "." + aliasPartsNameGetter(externalAliases[i]); - } - return aliasFullName; - } - - return null; - }; - - PullSymbol.prototype._getResolver = function () { - TypeScript.Debug.assert(this._declarations && this._declarations.length > 0); - return this._declarations[0].semanticInfoChain.getResolver(); - }; - - PullSymbol.prototype._resolveDeclaredSymbol = function () { - return this._getResolver().resolveDeclaredSymbol(this); - }; - - PullSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var aliasName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getName(); - }); - return aliasName || this.name; - }; - - PullSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var aliasDisplayName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getDisplayName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getDisplayName(); - }, skipInternalAliasName); - if (aliasDisplayName) { - return aliasDisplayName; - } - - var decls = this.getDeclarations(); - var name = decls.length && decls[0].getDisplayName(); - - return (name && name.length) ? name : this.name; - }; - - PullSymbol.prototype.getIsSpecialized = function () { - return false; - }; - - PullSymbol.prototype.getRootSymbol = function () { - if (!this.rootSymbol) { - return this; - } - return this.rootSymbol; - }; - PullSymbol.prototype.setRootSymbol = function (symbol) { - this.rootSymbol = symbol; - }; - - PullSymbol.prototype.setIsSynthesized = function (value) { - if (typeof value === "undefined") { value = true; } - TypeScript.Debug.assert(this.rootSymbol == null); - this.isSynthesized = value; - }; - - PullSymbol.prototype.getIsSynthesized = function () { - if (this.rootSymbol) { - return this.rootSymbol.getIsSynthesized(); - } - return this.isSynthesized; - }; - - PullSymbol.prototype.setEnclosingSignature = function (signature) { - this._enclosingSignature = signature; - }; - - PullSymbol.prototype.getEnclosingSignature = function () { - return this._enclosingSignature; - }; - - PullSymbol.prototype.addDeclaration = function (decl) { - TypeScript.Debug.assert(!!decl); - - if (this.rootSymbol) { - return; - } - - if (!this._declarations) { - this._declarations = [decl]; - } else { - this._declarations[this._declarations.length] = decl; - } - }; - - PullSymbol.prototype.getDeclarations = function () { - if (this.rootSymbol) { - return this.rootSymbol.getDeclarations(); - } - - if (!this._declarations) { - this._declarations = []; - } - - return this._declarations; - }; - - PullSymbol.prototype.hasDeclaration = function (decl) { - if (!this._declarations) { - return false; - } - - return TypeScript.ArrayUtilities.any(this._declarations, function (eachDecl) { - return eachDecl === decl; - }); - }; - - PullSymbol.prototype.setContainer = function (containerSymbol) { - if (this.rootSymbol) { - return; - } - - this._container = containerSymbol; - }; - - PullSymbol.prototype.getContainer = function () { - if (this.rootSymbol) { - return this.rootSymbol.getContainer(); - } - - return this._container; - }; - - PullSymbol.prototype.setResolved = function () { - this.isResolved = true; - this.inResolution = false; - }; - - PullSymbol.prototype.startResolving = function () { - this.inResolution = true; - }; - - PullSymbol.prototype.setUnresolved = function () { - this.isResolved = false; - this.inResolution = false; - }; - - PullSymbol.prototype.anyDeclHasFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (TypeScript.hasFlag(declarations[i].flags, flag)) { - return true; - } - } - return false; - }; - - PullSymbol.prototype.allDeclsHaveFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (!TypeScript.hasFlag(declarations[i].flags, flag)) { - return false; - } - } - return true; - }; - - PullSymbol.prototype.pathToRoot = function () { - var path = []; - var node = this; - while (node) { - if (node.isType()) { - var associatedContainerSymbol = node.getAssociatedContainerType(); - if (associatedContainerSymbol) { - node = associatedContainerSymbol; - } - } - path[path.length] = node; - var nodeKind = node.kind; - if (nodeKind === 2048 /* Parameter */) { - break; - } else { - node = node.getContainer(); - } - } - return path; - }; - - PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope = function (symbol, scopePath, endScopePathIndex) { - var declPath = scopePath[0].getDeclarations()[0].getParentPath(); - for (var i = 0, declIndex = declPath.length - 1; i <= endScopePathIndex; i++, declIndex--) { - if (scopePath[i].isContainer()) { - var scopeContainer = scopePath[i]; - if (symbol.isContainer()) { - var memberSymbol = scopeContainer.findContainedNonMemberContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol) { - return true; - } - } else if (symbol.isType()) { - var memberSymbol = scopeContainer.findContainedNonMemberType(symbol.name, 58728795 /* SomeType */); - var symbolRootType = TypeScript.PullHelpers.getRootType(symbol); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedType(symbol.name, 58728795 /* SomeType */); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType) { - return true; - } - } - } - } - - return false; - }; - - PullSymbol.prototype.findQualifyingSymbolPathInScopeSymbol = function (scopeSymbol) { - var thisPath = this.pathToRoot(); - if (thisPath.length === 1) { - return thisPath; - } - - var scopeSymbolPath; - if (scopeSymbol) { - scopeSymbolPath = scopeSymbol.pathToRoot(); - } else { - return thisPath; - } - - var thisCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(thisPath, function (thisNode) { - return TypeScript.ArrayUtilities.contains(scopeSymbolPath, thisNode); - }); - if (thisCommonAncestorIndex > 0) { - var thisCommonAncestor = thisPath[thisCommonAncestorIndex]; - var scopeCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(scopeSymbolPath, function (scopeNode) { - return scopeNode === thisCommonAncestor; - }); - TypeScript.Debug.assert(thisPath.length - thisCommonAncestorIndex === scopeSymbolPath.length - scopeCommonAncestorIndex); - - for (; thisCommonAncestorIndex < thisPath.length; thisCommonAncestorIndex++, scopeCommonAncestorIndex++) { - if (!PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope(thisPath[thisCommonAncestorIndex - 1], scopeSymbolPath, scopeCommonAncestorIndex)) { - break; - } - } - } - - if (thisCommonAncestorIndex >= 0 && thisCommonAncestorIndex < thisPath.length) { - return thisPath.slice(0, thisCommonAncestorIndex); - } else { - return thisPath; - } - }; - - PullSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var str = this.getNameAndTypeName(scopeSymbol); - return str; - }; - - PullSymbol.prototype.getNamePartForFullName = function () { - return this.getDisplayName(null, true); - }; - - PullSymbol.prototype.fullName = function (scopeSymbol) { - var _this = this; - var path = this.pathToRoot(); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol === _this ? null : symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - var scopedName = path[i].getNamePartForFullName(); - if (path[i].kind === 32 /* DynamicModule */ && !TypeScript.isQuoted(scopedName)) { - break; - } - - if (scopedName === "") { - break; - } - - fullName = scopedName + "." + fullName; - } - - fullName = fullName + this.getNamePartForFullName(); - return fullName; - }; - - PullSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - var path = this.findQualifyingSymbolPathInScopeSymbol(scopeSymbol); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var kind = path[i].kind; - if (kind === 4 /* Container */ || kind === 32 /* DynamicModule */) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, false, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - if (kind === 4 /* Container */) { - fullName = path[i].getDisplayName() + "." + fullName; - } else { - var displayName = path[i].getDisplayName(); - if (TypeScript.isQuoted(displayName)) { - fullName = displayName + "." + fullName; - } - break; - } - } else { - break; - } - } - fullName = fullName + this.getDisplayName(scopeSymbol, useConstraintInName, skipInternalAliasName); - return fullName; - }; - - PullSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) { - var name = this.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - return TypeScript.MemberName.create(name); - }; - - PullSymbol.prototype.getTypeName = function (scopeSymbol, getPrettyTypeName) { - var memberName = this.getTypeNameEx(scopeSymbol, getPrettyTypeName); - return memberName.toString(); - }; - - PullSymbol.prototype.getTypeNameEx = function (scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type) { - var memberName = getPrettyTypeName ? this.getTypeNameForFunctionSignature("", scopeSymbol, getPrettyTypeName) : null; - if (!memberName) { - memberName = type.getScopedNameEx(scopeSymbol, false, true, getPrettyTypeName); - } - - return memberName; - } - return TypeScript.MemberName.create(""); - }; - - PullSymbol.prototype.getTypeNameForFunctionSignature = function (prefix, scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type && !type.isNamedTypeSymbol() && this.kind !== 4096 /* Property */ && this.kind !== 512 /* Variable */ && this.kind !== 2048 /* Parameter */) { - var signatures = type.getCallSignatures(); - if (signatures.length === 1 || (getPrettyTypeName && signatures.length)) { - var typeName = new TypeScript.MemberNameArray(); - var signatureName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, prefix, false, false, scopeSymbol, getPrettyTypeName); - typeName.addAll(signatureName); - return typeName; - } - } - - return null; - }; - - PullSymbol.prototype.getNameAndTypeName = function (scopeSymbol) { - var nameAndTypeName = this.getNameAndTypeNameEx(scopeSymbol); - return nameAndTypeName.toString(); - }; - - PullSymbol.prototype.getNameAndTypeNameEx = function (scopeSymbol) { - var type = this.type; - var nameStr = this.getDisplayName(scopeSymbol); - if (type) { - nameStr = nameStr + (this.isOptional ? "?" : ""); - var memberName = this.getTypeNameForFunctionSignature(nameStr, scopeSymbol); - if (!memberName) { - var typeNameEx = type.getScopedNameEx(scopeSymbol); - memberName = TypeScript.MemberName.create(typeNameEx, nameStr + ": ", ""); - } - return memberName; - } - return TypeScript.MemberName.create(nameStr); - }; - - PullSymbol.getTypeParameterString = function (typars, scopeSymbol, useContraintInName) { - return PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, undefined, useContraintInName).toString(); - }; - - PullSymbol.getTypeParameterStringEx = function (typeParameters, scopeSymbol, getTypeParamMarkerInfo, useContraintInName) { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = ""; - - if (typeParameters && typeParameters.length) { - builder.add(TypeScript.MemberName.create("<")); - - for (var i = 0; i < typeParameters.length; i++) { - if (i) { - builder.add(TypeScript.MemberName.create(", ")); - } - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - - builder.add(typeParameters[i].getScopedNameEx(scopeSymbol, false, useContraintInName)); - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - } - - builder.add(TypeScript.MemberName.create(">")); - } - - return builder; - }; - - PullSymbol.getIsExternallyVisible = function (symbol, fromIsExternallyVisibleSymbol, inIsExternallyVisibleSymbols) { - if (inIsExternallyVisibleSymbols) { - for (var i = 0; i < inIsExternallyVisibleSymbols.length; i++) { - if (inIsExternallyVisibleSymbols[i] === symbol) { - return true; - } - } - } else { - inIsExternallyVisibleSymbols = []; - } - - if (fromIsExternallyVisibleSymbol === symbol) { - return true; - } - - inIsExternallyVisibleSymbols.push(fromIsExternallyVisibleSymbol); - - var result = symbol.isExternallyVisible(inIsExternallyVisibleSymbols); - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(inIsExternallyVisibleSymbols) === fromIsExternallyVisibleSymbol); - inIsExternallyVisibleSymbols.pop(); - - return result; - }; - - PullSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - var kind = this.kind; - if (kind === 2 /* Primitive */) { - return true; - } - - if (this.rootSymbol) { - return PullSymbol.getIsExternallyVisible(this.rootSymbol, this, inIsExternallyVisibleSymbols); - } - - if (this.isType()) { - var associatedContainerSymbol = this.getAssociatedContainerType(); - if (associatedContainerSymbol) { - return PullSymbol.getIsExternallyVisible(associatedContainerSymbol, this, inIsExternallyVisibleSymbols); - } - } - - if (this.anyDeclHasFlag(2 /* Private */)) { - return false; - } - - var container = this.getContainer(); - if (container === null) { - var decls = this.getDeclarations(); - if (decls.length) { - var parentDecl = decls[0].getParentDecl(); - if (parentDecl) { - var parentSymbol = parentDecl.getSymbol(); - if (!parentSymbol || parentDecl.kind === 1 /* Script */) { - return true; - } - - return PullSymbol.getIsExternallyVisible(parentSymbol, this, inIsExternallyVisibleSymbols); - } - } - - return true; - } - - if (container.kind === 32 /* DynamicModule */ || (container.getAssociatedContainerType() && container.getAssociatedContainerType().kind === 32 /* DynamicModule */)) { - var containerSymbol = container.kind === 32 /* DynamicModule */ ? container : container.getAssociatedContainerType(); - if (PullContainerSymbol.usedAsSymbol(containerSymbol, this)) { - return true; - } - } - - if (!this.anyDeclHasFlag(1 /* Exported */) && kind !== 4096 /* Property */ && kind !== 65536 /* Method */) { - return false; - } - - return PullSymbol.getIsExternallyVisible(container, this, inIsExternallyVisibleSymbols); - }; - - PullSymbol.prototype.getDocCommentsOfDecl = function (decl) { - var ast = decl.ast(); - - if (ast) { - var enclosingModuleDeclaration = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - if (TypeScript.ASTHelpers.isLastNameOfModule(enclosingModuleDeclaration, ast)) { - return TypeScript.ASTHelpers.docComments(enclosingModuleDeclaration); - } - - if (ast.kind() !== 130 /* ModuleDeclaration */ || decl.kind !== 512 /* Variable */) { - return TypeScript.ASTHelpers.docComments(ast); - } - } - - return []; - }; - - PullSymbol.prototype.getDocCommentArray = function (symbol) { - var docComments = []; - if (!symbol) { - return docComments; - } - - var isParameter = symbol.kind === 2048 /* Parameter */; - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (isParameter && decls[i].kind === 4096 /* Property */) { - continue; - } - docComments = docComments.concat(this.getDocCommentsOfDecl(decls[i])); - } - return docComments; - }; - - PullSymbol.getDefaultConstructorSymbolForDocComments = function (classSymbol) { - if (classSymbol.getHasDefaultConstructor()) { - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - return PullSymbol.getDefaultConstructorSymbolForDocComments(extendedTypes[0]); - } - } - - return classSymbol.type.getConstructSignatures()[0]; - }; - - PullSymbol.prototype.getDocCommentText = function (comments) { - var docCommentText = new Array(); - for (var c = 0; c < comments.length; c++) { - var commentText = this.getDocCommentTextValue(comments[c]); - if (commentText !== "") { - docCommentText.push(commentText); - } - } - return docCommentText.join("\n"); - }; - - PullSymbol.prototype.getDocCommentTextValue = function (comment) { - return this.cleanJSDocComment(comment.fullText()); - }; - - PullSymbol.prototype.docComments = function (useConstructorAsClass) { - var decls = this.getDeclarations(); - if (useConstructorAsClass && decls.length && decls[0].kind === 32768 /* ConstructorMethod */) { - var classDecl = decls[0].getParentDecl(); - return this.getDocCommentText(this.getDocCommentsOfDecl(classDecl)); - } - - if (this._docComments === null) { - var docComments = ""; - if (!useConstructorAsClass && this.kind === 2097152 /* ConstructSignature */ && decls.length && decls[0].kind === 8 /* Class */) { - var classSymbol = this.returnType; - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - docComments = extendedTypes[0].getConstructorMethod().docComments(); - } else { - docComments = ""; - } - } else if (this.kind === 2048 /* Parameter */) { - var parameterComments = []; - - var funcContainer = this.getEnclosingSignature(); - var funcDocComments = this.getDocCommentArray(funcContainer); - var paramComment = this.getParameterDocCommentText(this.getDisplayName(), funcDocComments); - if (paramComment != "") { - parameterComments.push(paramComment); - } - - var paramSelfComment = this.getDocCommentText(this.getDocCommentArray(this)); - if (paramSelfComment != "") { - parameterComments.push(paramSelfComment); - } - docComments = parameterComments.join("\n"); - } else { - var getSymbolComments = true; - if (this.kind === 16777216 /* FunctionType */) { - var functionSymbol = this.getFunctionSymbol(); - - if (functionSymbol) { - docComments = functionSymbol._docComments || ""; - getSymbolComments = false; - } else { - var declarationList = this.getDeclarations(); - if (declarationList.length > 0) { - docComments = declarationList[0].getSymbol()._docComments || ""; - getSymbolComments = false; - } - } - } - if (getSymbolComments) { - docComments = this.getDocCommentText(this.getDocCommentArray(this)); - if (docComments === "") { - if (this.kind === 1048576 /* CallSignature */) { - var callTypeSymbol = this.functionType; - if (callTypeSymbol && callTypeSymbol.getCallSignatures().length === 1) { - docComments = callTypeSymbol.docComments(); - } - } - } - } - } - - this._docComments = docComments; - } - - return this._docComments; - }; - - PullSymbol.prototype.getParameterDocCommentText = function (param, fncDocComments) { - if (fncDocComments.length === 0 || fncDocComments[0].kind() !== 6 /* MultiLineCommentTrivia */) { - return ""; - } - - for (var i = 0; i < fncDocComments.length; i++) { - var commentContents = fncDocComments[i].fullText(); - for (var j = commentContents.indexOf("@param", 0); 0 <= j; j = commentContents.indexOf("@param", j)) { - j += 6; - if (!this.isSpaceChar(commentContents, j)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j); - if (j === -1) { - break; - } - - if (commentContents.charCodeAt(j) === 123 /* openBrace */) { - j++; - - var charCode = 0; - for (var curlies = 1; j < commentContents.length; j++) { - charCode = commentContents.charCodeAt(j); - - if (charCode === 123 /* openBrace */) { - curlies++; - continue; - } - - if (charCode === 125 /* closeBrace */) { - curlies--; - if (curlies === 0) { - break; - } else { - continue; - } - } - - if (charCode === 64 /* at */) { - break; - } - } - - if (j === commentContents.length) { - break; - } - - if (charCode === 64 /* at */) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + 1); - if (j === -1) { - break; - } - } - - if (param !== commentContents.substr(j, param.length) || !this.isSpaceChar(commentContents, j + param.length)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + param.length); - if (j === -1) { - return ""; - } - - var endOfParam = commentContents.indexOf("@", j); - var paramHelpString = commentContents.substring(j, endOfParam < 0 ? commentContents.length : endOfParam); - - var paramSpacesToRemove = undefined; - var paramLineIndex = commentContents.substring(0, j).lastIndexOf("\n") + 1; - if (paramLineIndex !== 0) { - if (paramLineIndex < j && commentContents.charAt(paramLineIndex + 1) === "\r") { - paramLineIndex++; - } - } - var startSpaceRemovalIndex = this.consumeLeadingSpace(commentContents, paramLineIndex); - if (startSpaceRemovalIndex !== j && commentContents.charAt(startSpaceRemovalIndex) === "*") { - paramSpacesToRemove = j - startSpaceRemovalIndex - 1; - } - - return this.cleanJSDocComment(paramHelpString, paramSpacesToRemove); - } - } - - return ""; - }; - - PullSymbol.prototype.cleanJSDocComment = function (content, spacesToRemove) { - var docCommentLines = new Array(); - content = content.replace("/**", ""); - if (content.length >= 2 && content.charAt(content.length - 1) === "/" && content.charAt(content.length - 2) === "*") { - content = content.substring(0, content.length - 2); - } - var lines = content.split("\n"); - var inParamTag = false; - for (var l = 0; l < lines.length; l++) { - var line = lines[l]; - var cleanLinePos = this.cleanDocCommentLine(line, true, spacesToRemove); - if (!cleanLinePos) { - continue; - } - - var docCommentText = ""; - var prevPos = cleanLinePos.start; - for (var i = line.indexOf("@", cleanLinePos.start); 0 <= i && i < cleanLinePos.end; i = line.indexOf("@", i + 1)) { - var wasInParamtag = inParamTag; - - if (line.indexOf("param", i + 1) === i + 1 && this.isSpaceChar(line, i + 6)) { - if (!wasInParamtag) { - docCommentText += line.substring(prevPos, i); - } - - prevPos = i; - inParamTag = true; - } else if (wasInParamtag) { - prevPos = i; - inParamTag = false; - } - } - - if (!inParamTag) { - docCommentText += line.substring(prevPos, cleanLinePos.end); - } - - var newCleanPos = this.cleanDocCommentLine(docCommentText, false); - if (newCleanPos) { - if (spacesToRemove === undefined) { - spacesToRemove = cleanLinePos.jsDocSpacesRemoved; - } - docCommentLines.push(docCommentText); - } - } - - return docCommentLines.join("\n"); - }; - - PullSymbol.prototype.consumeLeadingSpace = function (line, startIndex, maxSpacesToRemove) { - var endIndex = line.length; - if (maxSpacesToRemove !== undefined) { - endIndex = TypeScript.MathPrototype.min(startIndex + maxSpacesToRemove, endIndex); - } - - for (; startIndex < endIndex; startIndex++) { - var charCode = line.charCodeAt(startIndex); - if (charCode !== 32 /* space */ && charCode !== 9 /* tab */) { - return startIndex; - } - } - - if (endIndex !== line.length) { - return endIndex; - } - - return -1; - }; - - PullSymbol.prototype.isSpaceChar = function (line, index) { - var length = line.length; - if (index < length) { - var charCode = line.charCodeAt(index); - - return charCode === 32 /* space */ || charCode === 9 /* tab */; - } - - return index === length; - }; - - PullSymbol.prototype.cleanDocCommentLine = function (line, jsDocStyleComment, jsDocLineSpaceToRemove) { - var nonSpaceIndex = this.consumeLeadingSpace(line, 0); - if (nonSpaceIndex !== -1) { - var jsDocSpacesRemoved = nonSpaceIndex; - if (jsDocStyleComment && line.charAt(nonSpaceIndex) === '*') { - var startIndex = nonSpaceIndex + 1; - nonSpaceIndex = this.consumeLeadingSpace(line, startIndex, jsDocLineSpaceToRemove); - - if (nonSpaceIndex !== -1) { - jsDocSpacesRemoved = nonSpaceIndex - startIndex; - } else { - return null; - } - } - - return { - start: nonSpaceIndex, - end: line.charAt(line.length - 1) === "\r" ? line.length - 1 : line.length, - jsDocSpacesRemoved: jsDocSpacesRemoved - }; - } - - return null; - }; - return PullSymbol; - })(); - TypeScript.PullSymbol = PullSymbol; - - - - var PullSignatureSymbol = (function (_super) { - __extends(PullSignatureSymbol, _super); - function PullSignatureSymbol(kind, _isDefinition) { - if (typeof _isDefinition === "undefined") { _isDefinition = false; } - _super.call(this, "", kind); - this._isDefinition = _isDefinition; - this._memberTypeParameterNameCache = null; - this._stringConstantOverload = undefined; - this.parameters = TypeScript.sentinelEmptyArray; - this._typeParameters = null; - this.returnType = null; - this.functionType = null; - this.hasOptionalParam = false; - this.nonOptionalParamCount = 0; - this.hasVarArgs = false; - this._allowedToReferenceTypeParameters = null; - this._instantiationCache = null; - this.hasBeenChecked = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - } - PullSignatureSymbol.prototype.isDefinition = function () { - return this._isDefinition; - }; - - PullSignatureSymbol.prototype.isGeneric = function () { - var typeParameters = this.getTypeParameters(); - return !!typeParameters && typeParameters.length !== 0; - }; - - PullSignatureSymbol.prototype.addParameter = function (parameter, isOptional) { - if (typeof isOptional === "undefined") { isOptional = false; } - if (this.parameters === TypeScript.sentinelEmptyArray) { - this.parameters = []; - } - - this.parameters[this.parameters.length] = parameter; - this.hasOptionalParam = isOptional; - - if (!parameter.getEnclosingSignature()) { - parameter.setEnclosingSignature(this); - } - - if (!isOptional) { - this.nonOptionalParamCount++; - } - }; - - PullSignatureSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!this._typeParameters) { - this._typeParameters = []; - } - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - - this._memberTypeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullSignatureSymbol.prototype.addTypeParametersFromReturnType = function () { - var typeParameters = this.returnType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addTypeParameter(typeParameters[i]); - } - }; - - PullSignatureSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - this._typeParameters = []; - } - - return this._typeParameters; - }; - - PullSignatureSymbol.prototype.findTypeParameter = function (name) { - var memberSymbol; - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - - for (var i = 0; i < this.getTypeParameters().length; i++) { - this._memberTypeParameterNameCache[this._typeParameters[i].getName()] = this._typeParameters[i]; - } - } - - memberSymbol = this._memberTypeParameterNameCache[name]; - - return memberSymbol; - }; - - PullSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullSignatureSymbol.prototype.addSpecialization = function (specializedVersionOfThisSignature, typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - this._instantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisSignature; - }; - - PullSignatureSymbol.prototype.getSpecialization = function (typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - return null; - } - - var result = this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - }; - - PullSignatureSymbol.prototype.isStringConstantOverloadSignature = function () { - if (this._stringConstantOverload === undefined) { - var params = this.parameters; - this._stringConstantOverload = false; - for (var i = 0; i < params.length; i++) { - var paramType = params[i].type; - if (paramType && paramType.isPrimitive() && paramType.isStringConstant()) { - this._stringConstantOverload = true; - } - } - } - - return this._stringConstantOverload; - }; - - PullSignatureSymbol.prototype.getParameterTypeAtIndex = function (iParam) { - if (iParam < this.parameters.length - 1 || (iParam < this.parameters.length && !this.hasVarArgs)) { - return this.parameters[iParam].type; - } else if (this.hasVarArgs) { - var paramType = this.parameters[this.parameters.length - 1].type; - if (paramType.isArrayNamedTypeReference()) { - paramType = paramType.getElementType(); - } - return paramType; - } - - return null; - }; - - PullSignatureSymbol.getSignatureTypeMemberName = function (candidateSignature, signatures, scopeSymbol) { - var allMemberNames = new TypeScript.MemberNameArray(); - var signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, "", false, false, scopeSymbol, true, candidateSignature); - allMemberNames.addAll(signatureMemberName); - return allMemberNames; - }; - - PullSignatureSymbol.getSignaturesTypeNameEx = function (signatures, prefix, shortform, brackets, scopeSymbol, getPrettyTypeName, candidateSignature) { - var result = []; - if (!signatures) { - return result; - } - - var len = signatures.length; - if (!getPrettyTypeName && len > 1) { - shortform = false; - } - - var foundDefinition = false; - if (candidateSignature && candidateSignature.isDefinition() && len > 1) { - candidateSignature = null; - } - - for (var i = 0; i < len; i++) { - if (len > 1 && signatures[i].isDefinition()) { - foundDefinition = true; - continue; - } - - var signature = signatures[i]; - if (getPrettyTypeName && candidateSignature) { - signature = candidateSignature; - } - - result.push(signature.getSignatureTypeNameEx(prefix, shortform, brackets, scopeSymbol)); - if (getPrettyTypeName) { - break; - } - } - - if (getPrettyTypeName && result.length && len > 1) { - var lastMemberName = result[result.length - 1]; - for (var i = i + 1; i < len; i++) { - if (signatures[i].isDefinition()) { - foundDefinition = true; - break; - } - } - var overloadString = TypeScript.getLocalizedText(TypeScript.DiagnosticCode._0_overload_s, [foundDefinition ? len - 2 : len - 1]); - lastMemberName.add(TypeScript.MemberName.create(overloadString)); - } - - return result; - }; - - PullSignatureSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getSignatureTypeNameEx(this.getScopedNameEx().toString(), false, false, scopeSymbol, undefined, useConstraintInName).toString(); - return s; - }; - - PullSignatureSymbol.prototype.getSignatureTypeNameEx = function (prefix, shortform, brackets, scopeSymbol, getParamMarkerInfo, getTypeParamMarkerInfo) { - var typeParamterBuilder = new TypeScript.MemberNameArray(); - - typeParamterBuilder.add(PullSymbol.getTypeParameterStringEx(this.getTypeParameters(), scopeSymbol, getTypeParamMarkerInfo, true)); - - if (brackets) { - typeParamterBuilder.add(TypeScript.MemberName.create("[")); - } else { - typeParamterBuilder.add(TypeScript.MemberName.create("(")); - } - - var builder = new TypeScript.MemberNameArray(); - builder.prefix = prefix; - - if (getTypeParamMarkerInfo) { - builder.prefix = prefix; - builder.addAll(typeParamterBuilder.entries); - } else { - builder.prefix = prefix + typeParamterBuilder.toString(); - } - - var params = this.parameters; - var paramLen = params.length; - for (var i = 0; i < paramLen; i++) { - var paramType = params[i].type; - var typeString = paramType ? ": " : ""; - var paramIsVarArg = params[i].isVarArg; - var varArgPrefix = paramIsVarArg ? "..." : ""; - var optionalString = (!paramIsVarArg && params[i].isOptional) ? "?" : ""; - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - builder.add(TypeScript.MemberName.create(varArgPrefix + params[i].getScopedNameEx(scopeSymbol).toString() + optionalString + typeString)); - if (paramType) { - builder.add(paramType.getScopedNameEx(scopeSymbol)); - } - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - if (i < paramLen - 1) { - builder.add(TypeScript.MemberName.create(", ")); - } - } - - if (shortform) { - if (brackets) { - builder.add(TypeScript.MemberName.create("] => ")); - } else { - builder.add(TypeScript.MemberName.create(") => ")); - } - } else { - if (brackets) { - builder.add(TypeScript.MemberName.create("]: ")); - } else { - builder.add(TypeScript.MemberName.create("): ")); - } - } - - if (this.returnType) { - builder.add(this.returnType.getScopedNameEx(scopeSymbol)); - } else { - builder.add(TypeScript.MemberName.create("any")); - } - - return builder; - }; - - PullSignatureSymbol.prototype.forAllParameterTypes = function (length, predicate) { - if (this.parameters.length < length && !this.hasVarArgs) { - length = this.parameters.length; - } - - for (var i = 0; i < length; i++) { - var paramType = this.getParameterTypeAtIndex(i); - if (!predicate(paramType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.forAllCorrespondingParameterTypesInThisAndOtherSignature = function (otherSignature, predicate) { - var length; - if (this.hasVarArgs) { - length = otherSignature.hasVarArgs ? Math.max(this.parameters.length, otherSignature.parameters.length) : otherSignature.parameters.length; - } else { - length = otherSignature.hasVarArgs ? this.parameters.length : Math.min(this.parameters.length, otherSignature.parameters.length); - } - - for (var i = 0; i < length; i++) { - var thisParamType = this.getParameterTypeAtIndex(i); - var otherParamType = otherSignature.getParameterTypeAtIndex(i); - if (!predicate(thisParamType, otherParamType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap) !== 0; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap) { - var signature = this; - if (signature.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap); - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap) { - var signature = this; - signature.inWrapCheck = true; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(signature); - var wrappingTypeParameterID = signature.returnType ? signature.returnType.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - - var parameters = signature.parameters; - for (var i = 0; !wrappingTypeParameterID && i < parameters.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(parameters[i]); - wrappingTypeParameterID = parameters[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - signature.inWrapCheck = false; - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - if (this.returnType && this.returnType._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - - var parameters = this.parameters; - - for (var i = 0; i < parameters.length; i++) { - if (parameters[i].type && parameters[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - return PullSignatureSymbol; - })(PullSymbol); - TypeScript.PullSignatureSymbol = PullSignatureSymbol; - - var PullTypeSymbol = (function (_super) { - __extends(PullTypeSymbol, _super); - function PullTypeSymbol(name, kind) { - _super.call(this, name, kind); - this._members = TypeScript.sentinelEmptyArray; - this._enclosedMemberTypes = null; - this._enclosedMemberContainers = null; - this._typeParameters = null; - this._allowedToReferenceTypeParameters = null; - this._specializedVersionsOfThisType = null; - this._arrayVersionOfThisType = null; - this._implementedTypes = null; - this._extendedTypes = null; - this._typesThatExplicitlyImplementThisType = null; - this._typesThatExtendThisType = null; - this._callSignatures = null; - this._allCallSignatures = null; - this._constructSignatures = null; - this._allConstructSignatures = null; - this._indexSignatures = null; - this._allIndexSignatures = null; - this._allIndexSignaturesOfAugmentedType = null; - this._memberNameCache = null; - this._enclosedTypeNameCache = null; - this._enclosedContainerCache = null; - this._typeParameterNameCache = null; - this._containedNonMemberNameCache = null; - this._containedNonMemberTypeNameCache = null; - this._containedNonMemberContainerCache = null; - this._simpleInstantiationCache = null; - this._complexInstantiationCache = null; - this._hasGenericSignature = false; - this._hasGenericMember = false; - this._hasBaseTypeConflict = false; - this._knownBaseTypeCount = 0; - this._associatedContainerTypeSymbol = null; - this._constructorMethod = null; - this._hasDefaultConstructor = false; - this._functionSymbol = null; - this._inMemberTypeNameEx = false; - this.inSymbolPrivacyCheck = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - this.typeReference = null; - this._widenedType = null; - this._isArrayNamedTypeReference = undefined; - this.type = this; - } - PullTypeSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArrayNamedTypeReference === undefined) { - this._isArrayNamedTypeReference = this.computeIsArrayNamedTypeReference(); - } - - return this._isArrayNamedTypeReference; - }; - - PullTypeSymbol.prototype.computeIsArrayNamedTypeReference = function () { - var typeArgs = this.getTypeArguments(); - if (typeArgs && this.getTypeArguments().length === 1 && this.name === "Array") { - var declaration = this.getDeclarations()[0]; - - if (declaration && declaration.getParentDecl() && declaration.getParentDecl().getParentDecl() === null) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.isType = function () { - return true; - }; - PullTypeSymbol.prototype.isClass = function () { - return this.kind === 8 /* Class */ || (this._constructorMethod !== null); - }; - PullTypeSymbol.prototype.isFunction = function () { - return (this.kind & (33554432 /* ConstructorType */ | 16777216 /* FunctionType */)) !== 0; - }; - PullTypeSymbol.prototype.isConstructor = function () { - return this.kind === 33554432 /* ConstructorType */ || (this._associatedContainerTypeSymbol && this._associatedContainerTypeSymbol.isClass()); - }; - PullTypeSymbol.prototype.isTypeParameter = function () { - return false; - }; - PullTypeSymbol.prototype.isTypeVariable = function () { - return false; - }; - PullTypeSymbol.prototype.isError = function () { - return false; - }; - PullTypeSymbol.prototype.isEnum = function () { - return this.kind === 64 /* Enum */; - }; - - PullTypeSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullTypeSymbol.prototype.isObject = function () { - return TypeScript.hasFlag(this.kind, 8 /* Class */ | 33554432 /* ConstructorType */ | 64 /* Enum */ | 16777216 /* FunctionType */ | 16 /* Interface */ | 8388608 /* ObjectType */ | 256 /* ObjectLiteral */); - }; - - PullTypeSymbol.prototype.isFunctionType = function () { - return this.getCallSignatures().length > 0 || this.getConstructSignatures().length > 0; - }; - - PullTypeSymbol.prototype.getKnownBaseTypeCount = function () { - return this._knownBaseTypeCount; - }; - PullTypeSymbol.prototype.resetKnownBaseTypeCount = function () { - this._knownBaseTypeCount = 0; - }; - PullTypeSymbol.prototype.incrementKnownBaseCount = function () { - this._knownBaseTypeCount++; - }; - - PullTypeSymbol.prototype.setHasBaseTypeConflict = function () { - this._hasBaseTypeConflict = true; - }; - PullTypeSymbol.prototype.hasBaseTypeConflict = function () { - return this._hasBaseTypeConflict; - }; - - PullTypeSymbol.prototype.hasMembers = function () { - if (this._members !== TypeScript.sentinelEmptyArray) { - return true; - } - - var parents = this.getExtendedTypes(); - - for (var i = 0; i < parents.length; i++) { - if (parents[i].hasMembers()) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.setHasGenericSignature = function () { - this._hasGenericSignature = true; - }; - PullTypeSymbol.prototype.getHasGenericSignature = function () { - return this._hasGenericSignature; - }; - - PullTypeSymbol.prototype.setHasGenericMember = function () { - this._hasGenericMember = true; - }; - PullTypeSymbol.prototype.getHasGenericMember = function () { - return this._hasGenericMember; - }; - - PullTypeSymbol.prototype.setAssociatedContainerType = function (type) { - this._associatedContainerTypeSymbol = type; - }; - - PullTypeSymbol.prototype.getAssociatedContainerType = function () { - return this._associatedContainerTypeSymbol; - }; - - PullTypeSymbol.prototype.getArrayType = function () { - return this._arrayVersionOfThisType; - }; - - PullTypeSymbol.prototype.getElementType = function () { - return null; - }; - - PullTypeSymbol.prototype.setArrayType = function (arrayType) { - this._arrayVersionOfThisType = arrayType; - }; - - PullTypeSymbol.prototype.getFunctionSymbol = function () { - return this._functionSymbol; - }; - - PullTypeSymbol.prototype.setFunctionSymbol = function (symbol) { - if (symbol) { - this._functionSymbol = symbol; - } - }; - - PullTypeSymbol.prototype.findContainedNonMember = function (name) { - if (!this._containedNonMemberNameCache) { - return null; - } - - return this._containedNonMemberNameCache[name]; - }; - - PullTypeSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberTypeNameCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberTypeNameCache[typeName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberContainerCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberContainerCache[containerName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.addMember = function (memberSymbol) { - if (!memberSymbol) { - return; - } - - memberSymbol.setContainer(this); - - if (!this._memberNameCache) { - this._memberNameCache = TypeScript.createIntrinsicsObject(); - } - - if (this._members === TypeScript.sentinelEmptyArray) { - this._members = []; - } - - this._members.push(memberSymbol); - this._memberNameCache[memberSymbol.name] = memberSymbol; - }; - - PullTypeSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - if (!enclosedType) { - return; - } - - enclosedType.setContainer(this); - - if (!this._enclosedTypeNameCache) { - this._enclosedTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberTypes) { - this._enclosedMemberTypes = []; - } - - this._enclosedMemberTypes[this._enclosedMemberTypes.length] = enclosedType; - this._enclosedTypeNameCache[enclosedType.name] = enclosedType; - }; - - PullTypeSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - if (!enclosedContainer) { - return; - } - - enclosedContainer.setContainer(this); - - if (!this._enclosedContainerCache) { - this._enclosedContainerCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberContainers) { - this._enclosedMemberContainers = []; - } - - this._enclosedMemberContainers[this._enclosedMemberContainers.length] = enclosedContainer; - this._enclosedContainerCache[enclosedContainer.name] = enclosedContainer; - }; - - PullTypeSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - if (!enclosedNonMember) { - return; - } - - enclosedNonMember.setContainer(this); - - if (!this._containedNonMemberNameCache) { - this._containedNonMemberNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberNameCache[enclosedNonMember.name] = enclosedNonMember; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - if (!enclosedNonMemberType) { - return; - } - - enclosedNonMemberType.setContainer(this); - - if (!this._containedNonMemberTypeNameCache) { - this._containedNonMemberTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberTypeNameCache[enclosedNonMemberType.name] = enclosedNonMemberType; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - if (!enclosedNonMemberContainer) { - return; - } - - enclosedNonMemberContainer.setContainer(this); - - if (!this._containedNonMemberContainerCache) { - this._containedNonMemberContainerCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberContainerCache[enclosedNonMemberContainer.name] = enclosedNonMemberContainer; - }; - - PullTypeSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!typeParameter) { - return; - } - - if (!typeParameter.getContainer()) { - typeParameter.setContainer(this); - } - - if (!this._typeParameterNameCache) { - this._typeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._typeParameters) { - this._typeParameters = []; - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - this._typeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullTypeSymbol.prototype.getMembers = function () { - return this._members; - }; - - PullTypeSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - this._hasDefaultConstructor = hasOne; - }; - - PullTypeSymbol.prototype.getHasDefaultConstructor = function () { - return this._hasDefaultConstructor; - }; - - PullTypeSymbol.prototype.getConstructorMethod = function () { - return this._constructorMethod; - }; - - PullTypeSymbol.prototype.setConstructorMethod = function (constructorMethod) { - this._constructorMethod = constructorMethod; - }; - - PullTypeSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - return TypeScript.sentinelEmptyArray; - } - - return this._typeParameters; - }; - - PullTypeSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - if (!!(this.kind && 8216 /* SomeInstantiatableType */) && this.isNamedTypeSymbol() && !this.isTypeParameter()) { - return this.getTypeParameters(); - } - - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullTypeSymbol.prototype.isGeneric = function () { - return (this._typeParameters && this._typeParameters.length > 0) || this._hasGenericSignature || this._hasGenericMember || this.isArrayNamedTypeReference(); - }; - - PullTypeSymbol.prototype.canUseSimpleInstantiationCache = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return true; - } - - var typeParameters = this.getTypeParameters(); - return typeArgumentMap && this.isNamedTypeSymbol() && typeParameters.length === 1 && typeArgumentMap[typeParameters[0].pullSymbolID].kind !== 8388608 /* ObjectType */; - }; - - PullTypeSymbol.prototype.getSimpleInstantiationCacheId = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return typeArgumentMap[0].pullSymbolID; - } - - return typeArgumentMap[this.getTypeParameters()[0].pullSymbolID].pullSymbolID; - }; - - PullTypeSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - this._simpleInstantiationCache = []; - } - - this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)] = specializedVersionOfThisType; - } else { - if (!this._complexInstantiationCache) { - this._complexInstantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisType; - } - - if (!this._specializedVersionsOfThisType) { - this._specializedVersionsOfThisType = []; - } - - this._specializedVersionsOfThisType.push(specializedVersionOfThisType); - }; - - PullTypeSymbol.prototype.getSpecialization = function (typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - return null; - } - - var result = this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)]; - return result || null; - } else { - if (!this._complexInstantiationCache) { - return null; - } - - if (this.getAllowedToReferenceTypeParameters().length == 0) { - return this; - } - - var result = this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - } - }; - - PullTypeSymbol.prototype.getKnownSpecializations = function () { - if (!this._specializedVersionsOfThisType) { - return TypeScript.sentinelEmptyArray; - } - - return this._specializedVersionsOfThisType; - }; - - PullTypeSymbol.prototype.getTypeArguments = function () { - return null; - }; - - PullTypeSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeParameters(); - }; - - PullTypeSymbol.prototype.addCallOrConstructSignaturePrerequisiteBase = function (signature) { - if (signature.isGeneric()) { - this._hasGenericSignature = true; - } - - signature.functionType = this; - }; - - PullTypeSymbol.prototype.addCallSignaturePrerequisite = function (callSignature) { - if (!this._callSignatures) { - this._callSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(callSignature); - }; - - PullTypeSymbol.prototype.appendCallSignature = function (callSignature) { - this.addCallSignaturePrerequisite(callSignature); - this._callSignatures.push(callSignature); - }; - - PullTypeSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - this.addCallSignaturePrerequisite(callSignature); - TypeScript.Debug.assert(index <= this._callSignatures.length); - if (index === this._callSignatures.length) { - this._callSignatures.push(callSignature); - } else { - this._callSignatures.splice(index, 0, callSignature); - } - }; - - PullTypeSymbol.prototype.addConstructSignaturePrerequisite = function (constructSignature) { - if (!this._constructSignatures) { - this._constructSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(constructSignature); - }; - - PullTypeSymbol.prototype.appendConstructSignature = function (constructSignature) { - this.addConstructSignaturePrerequisite(constructSignature); - this._constructSignatures.push(constructSignature); - }; - - PullTypeSymbol.prototype.insertConstructSignatureAtIndex = function (constructSignature, index) { - this.addConstructSignaturePrerequisite(constructSignature); - TypeScript.Debug.assert(index <= this._constructSignatures.length); - if (index === this._constructSignatures.length) { - this._constructSignatures.push(constructSignature); - } else { - this._constructSignatures.splice(index, 0, constructSignature); - } - }; - - PullTypeSymbol.prototype.addIndexSignature = function (indexSignature) { - if (!this._indexSignatures) { - this._indexSignatures = []; - } - - this._indexSignatures[this._indexSignatures.length] = indexSignature; - - if (indexSignature.isGeneric()) { - this._hasGenericSignature = true; - } - - indexSignature.functionType = this; - }; - - PullTypeSymbol.prototype.hasOwnCallSignatures = function () { - return this._callSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnCallSignatures = function () { - return this._callSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getCallSignatures = function () { - if (this._allCallSignatures) { - return this._allCallSignatures; - } - - var signatures = []; - - if (this._callSignatures) { - signatures = signatures.concat(this._callSignatures); - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._callSignatures, this._extendedTypes[i].getCallSignatures(), signatures); - } - } - - this._allCallSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnConstructSignatures = function () { - return this._constructSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnDeclaredConstructSignatures = function () { - return this._constructSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getConstructSignatures = function () { - if (this._allConstructSignatures) { - return this._allConstructSignatures; - } - - var signatures = []; - - if (this._constructSignatures) { - signatures = signatures.concat(this._constructSignatures); - } else if (this.isConstructor()) { - if (this._extendedTypes && this._extendedTypes.length > 0) { - signatures = this.getBaseClassConstructSignatures(this._extendedTypes[0]); - } else { - signatures = [this.getDefaultClassConstructSignature()]; - } - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._constructSignatures, this._extendedTypes[i].getConstructSignatures(), signatures); - } - } - - this._allConstructSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnIndexSignatures = function () { - return this._indexSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnIndexSignatures = function () { - return this._indexSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getIndexSignatures = function () { - if (this._allIndexSignatures) { - return this._allIndexSignatures; - } - - var signatures = []; - - if (this._indexSignatures) { - signatures = signatures.concat(this._indexSignatures); - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._indexSignatures, this._extendedTypes[i].getIndexSignatures(), signatures); - } - } - - this._allIndexSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.getIndexSignaturesOfAugmentedType = function (resolver, globalFunctionInterface, globalObjectInterface) { - if (!this._allIndexSignaturesOfAugmentedType) { - var initialIndexSignatures = this.getIndexSignatures(); - var shouldAddFunctionSignatures = false; - var shouldAddObjectSignatures = false; - - if (globalFunctionInterface && this.isFunctionType() && this !== globalFunctionInterface) { - var functionIndexSignatures = globalFunctionInterface.getIndexSignatures(); - if (functionIndexSignatures.length) { - shouldAddFunctionSignatures = true; - } - } - - if (globalObjectInterface && this !== globalObjectInterface) { - var objectIndexSignatures = globalObjectInterface.getIndexSignatures(); - if (objectIndexSignatures.length) { - shouldAddObjectSignatures = true; - } - } - - if (shouldAddFunctionSignatures || shouldAddObjectSignatures) { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures.slice(0); - if (shouldAddFunctionSignatures) { - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, functionIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - if (shouldAddObjectSignatures) { - if (shouldAddFunctionSignatures) { - initialIndexSignatures = initialIndexSignatures.concat(functionIndexSignatures); - } - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, objectIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - } else { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures; - } - } - - return this._allIndexSignaturesOfAugmentedType; - }; - - PullTypeSymbol.prototype.getBaseClassConstructSignatures = function (baseType) { - TypeScript.Debug.assert(this.isConstructor() && baseType.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length === 1); - if (baseType.hasBase(this)) { - return null; - } - - var baseConstructSignatures = baseType.getConstructSignatures(); - var signatures = []; - for (var i = 0; i < baseConstructSignatures.length; i++) { - var baseSignature = baseConstructSignatures[i]; - - baseSignature._resolveDeclaredSymbol(); - var currentSignature = new PullSignatureSymbol(2097152 /* ConstructSignature */, baseSignature.isDefinition()); - currentSignature.returnType = instanceTypeSymbol; - currentSignature.addTypeParametersFromReturnType(); - for (var j = 0; j < baseSignature.parameters.length; j++) { - currentSignature.addParameter(baseSignature.parameters[j], baseSignature.parameters[j].isOptional); - } - if (baseSignature.parameters.length > 0) { - currentSignature.hasVarArgs = baseSignature.parameters[baseSignature.parameters.length - 1].isVarArg; - } - - currentSignature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(currentSignature); - signatures.push(currentSignature); - } - - return signatures; - }; - - PullTypeSymbol.prototype.getDefaultClassConstructSignature = function () { - TypeScript.Debug.assert(this.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length == 1); - var signature = new PullSignatureSymbol(2097152 /* ConstructSignature */, true); - signature.returnType = instanceTypeSymbol; - signature.addTypeParametersFromReturnType(); - signature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(signature); - - return signature; - }; - - PullTypeSymbol.prototype.addImplementedType = function (implementedType) { - if (!implementedType) { - return; - } - - if (!this._implementedTypes) { - this._implementedTypes = []; - } - - this._implementedTypes[this._implementedTypes.length] = implementedType; - - implementedType.addTypeThatExplicitlyImplementsThisType(this); - }; - - PullTypeSymbol.prototype.getImplementedTypes = function () { - if (!this._implementedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._implementedTypes; - }; - - PullTypeSymbol.prototype.addExtendedType = function (extendedType) { - if (!extendedType) { - return; - } - - if (!this._extendedTypes) { - this._extendedTypes = []; - } - - this._extendedTypes[this._extendedTypes.length] = extendedType; - - extendedType.addTypeThatExtendsThisType(this); - }; - - PullTypeSymbol.prototype.getExtendedTypes = function () { - if (!this._extendedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._extendedTypes; - }; - - PullTypeSymbol.prototype.addTypeThatExtendsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - this._typesThatExtendThisType[this._typesThatExtendThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExtendThisType = function () { - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - return this._typesThatExtendThisType; - }; - - PullTypeSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - this._typesThatExplicitlyImplementThisType[this._typesThatExplicitlyImplementThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - return this._typesThatExplicitlyImplementThisType; - }; - - PullTypeSymbol.prototype.hasBase = function (potentialBase, visited) { - if (typeof visited === "undefined") { visited = []; } - if (this === potentialBase || this.getRootSymbol() === potentialBase || this === potentialBase.getRootSymbol()) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(visited, this)) { - return true; - } - - visited.push(this); - - var extendedTypes = this.getExtendedTypes(); - - for (var i = 0; i < extendedTypes.length; i++) { - if (extendedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - var implementedTypes = this.getImplementedTypes(); - - for (var i = 0; i < implementedTypes.length; i++) { - if (implementedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - visited.pop(); - - return false; - }; - - PullTypeSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - if (baseType.isError()) { - return false; - } - - var thisIsClass = this.isClass(); - if (isExtendedType) { - if (thisIsClass) { - return baseType.kind === 8 /* Class */; - } - } else { - if (!thisIsClass) { - return false; - } - } - - return !!(baseType.kind & (16 /* Interface */ | 8 /* Class */)); - }; - - PullTypeSymbol.prototype.findMember = function (name, lookInParent) { - var memberSymbol = null; - - if (this._memberNameCache) { - memberSymbol = this._memberNameCache[name]; - } - - if (memberSymbol || !lookInParent) { - return memberSymbol; - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - memberSymbol = this._extendedTypes[i].findMember(name, lookInParent); - - if (memberSymbol) { - return memberSymbol; - } - } - } - - return null; - }; - - PullTypeSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedTypeNameCache) { - return null; - } - - memberSymbol = this._enclosedTypeNameCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedContainerCache) { - return null; - } - - memberSymbol = this._enclosedContainerCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - var allMembers = []; - - if (this._members !== TypeScript.sentinelEmptyArray) { - for (var i = 0, n = this._members.length; i < n; i++) { - var member = this._members[i]; - if ((member.kind & searchDeclKind) && (memberVisiblity !== 2 /* externallyVisible */ || !member.anyDeclHasFlag(2 /* Private */))) { - allMembers[allMembers.length] = member; - } - } - } - - if (this._extendedTypes) { - var extenedMembersVisibility = memberVisiblity !== 0 /* all */ ? 2 /* externallyVisible */ : 0 /* all */; - - for (var i = 0, n = this._extendedTypes.length; i < n; i++) { - var extendedMembers = this._extendedTypes[i].getAllMembers(searchDeclKind, extenedMembersVisibility); - - for (var j = 0, m = extendedMembers.length; j < m; j++) { - var extendedMember = extendedMembers[j]; - if (!(this._memberNameCache && this._memberNameCache[extendedMember.name])) { - allMembers[allMembers.length] = extendedMember; - } - } - } - } - - if (this.isContainer()) { - if (this._enclosedMemberTypes) { - for (var i = 0; i < this._enclosedMemberTypes.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberTypes[i]; - } - } - if (this._enclosedMemberContainers) { - for (var i = 0; i < this._enclosedMemberContainers.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberContainers[i]; - } - } - } - - return allMembers; - }; - - PullTypeSymbol.prototype.findTypeParameter = function (name) { - if (!this._typeParameterNameCache) { - return null; - } - - return this._typeParameterNameCache[name]; - }; - - PullTypeSymbol.prototype.setResolved = function () { - _super.prototype.setResolved.call(this); - }; - - PullTypeSymbol.prototype.getNamePartForFullName = function () { - var name = _super.prototype.getNamePartForFullName.call(this); - - var typars = this.getTypeArgumentsOrTypeParameters(); - var typarString = PullSymbol.getTypeParameterString(typars, this, true); - return name + typarString; - }; - - PullTypeSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - return this.getScopedNameEx(scopeSymbol, skipTypeParametersInName, useConstraintInName, false, false, skipInternalAliasName).toString(); - }; - - PullTypeSymbol.prototype.isNamedTypeSymbol = function () { - var kind = this.kind; - if (kind === 2 /* Primitive */ || kind === 8 /* Class */ || kind === 4 /* Container */ || kind === 32 /* DynamicModule */ || kind === 128 /* TypeAlias */ || kind === 64 /* Enum */ || kind === 8192 /* TypeParameter */ || ((kind === 16 /* Interface */ || kind === 8388608 /* ObjectType */) && this.name !== "")) { - return true; - } - - return false; - }; - - PullTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getScopedNameEx(scopeSymbol, false, useConstraintInName).toString(); - return s; - }; - - PullTypeSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName, shouldAllowArrayType) { - if (typeof shouldAllowArrayType === "undefined") { shouldAllowArrayType = true; } - if (this.isArrayNamedTypeReference() && shouldAllowArrayType) { - var elementType = this.getElementType(); - var elementMemberName = elementType ? (elementType.isArrayNamedTypeReference() || elementType.isNamedTypeSymbol() ? elementType.getScopedNameEx(scopeSymbol, false, false, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) : elementType.getMemberTypeNameEx(false, scopeSymbol, getPrettyTypeName)) : TypeScript.MemberName.create("any"); - return TypeScript.MemberName.create(elementMemberName, "", "[]"); - } - - if (!this.isNamedTypeSymbol()) { - return this.getMemberTypeNameEx(true, scopeSymbol, getPrettyTypeName); - } - - if (skipTypeParametersInName) { - return TypeScript.MemberName.create(_super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName)); - } else { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = _super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - - var typars = this.getTypeArgumentsOrTypeParameters(); - builder.add(PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, getTypeParamMarkerInfo, useConstraintInName)); - - return builder; - } - }; - - PullTypeSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - return members.length === 0 && constructSignatures.length === 0 && callSignatures.length > 1; - }; - - PullTypeSymbol.prototype.getTypeOfSymbol = function () { - var associatedContainerType = this.getAssociatedContainerType(); - if (associatedContainerType && associatedContainerType.isNamedTypeSymbol()) { - return associatedContainerType; - } - - var functionSymbol = this.getFunctionSymbol(); - if (functionSymbol && functionSymbol.kind === 16384 /* Function */ && !TypeScript.PullHelpers.isSymbolLocal(functionSymbol)) { - return TypeScript.PullHelpers.isExportedSymbolInClodule(functionSymbol) ? null : functionSymbol; - } - - return null; - }; - - PullTypeSymbol.prototype.getMemberTypeNameEx = function (topLevel, scopeSymbol, getPrettyTypeName) { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - var indexSignatures = this.getIndexSignatures(); - - var typeOfSymbol = this.getTypeOfSymbol(); - if (typeOfSymbol) { - var nameForTypeOf = typeOfSymbol.getScopedNameEx(scopeSymbol, true); - return TypeScript.MemberName.create(nameForTypeOf, "typeof ", ""); - } - - if (members.length > 0 || callSignatures.length > 0 || constructSignatures.length > 0 || indexSignatures.length > 0) { - if (this._inMemberTypeNameEx) { - return TypeScript.MemberName.create("any"); - } - - this._inMemberTypeNameEx = true; - - var allMemberNames = new TypeScript.MemberNameArray(); - var curlies = !topLevel || indexSignatures.length !== 0; - var delim = "; "; - for (var i = 0; i < members.length; i++) { - if (members[i].kind === 65536 /* Method */ && members[i].type.hasOnlyOverloadCallSignatures()) { - var methodCallSignatures = members[i].type.getCallSignatures(); - var nameStr = members[i].getDisplayName(scopeSymbol) + (members[i].isOptional ? "?" : ""); - ; - var methodMemberNames = PullSignatureSymbol.getSignaturesTypeNameEx(methodCallSignatures, nameStr, false, false, scopeSymbol); - allMemberNames.addAll(methodMemberNames); - } else { - var memberTypeName = members[i].getNameAndTypeNameEx(scopeSymbol); - if (memberTypeName.isArray() && memberTypeName.delim === delim) { - allMemberNames.addAll(memberTypeName.entries); - } else { - allMemberNames.add(memberTypeName); - } - } - curlies = true; - } - - var getPrettyFunctionOverload = getPrettyTypeName && !curlies && this.hasOnlyOverloadCallSignatures(); - - var signatureCount = callSignatures.length + constructSignatures.length + indexSignatures.length; - var useShortFormSignature = !curlies && (signatureCount === 1); - var signatureMemberName; - - if (callSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(callSignatures, "", useShortFormSignature, false, scopeSymbol, getPrettyFunctionOverload); - allMemberNames.addAll(signatureMemberName); - } - - if (constructSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(constructSignatures, "new", useShortFormSignature, false, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if (indexSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(indexSignatures, "", useShortFormSignature, true, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if ((curlies) || (!getPrettyFunctionOverload && (signatureCount > 1) && topLevel)) { - allMemberNames.prefix = "{ "; - allMemberNames.suffix = "}"; - allMemberNames.delim = delim; - } else if (allMemberNames.entries.length > 1) { - allMemberNames.delim = delim; - } - - this._inMemberTypeNameEx = false; - - return allMemberNames; - } - - return TypeScript.MemberName.create("{}"); - }; - - PullTypeSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - return 2 /* Closed */; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap, skipTypeArgumentCheck) != 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - - if (type.isTypeParameter()) { - if (typeParameterArgumentMap[type.pullSymbolID] || typeParameterArgumentMap[type.getRootSymbol().pullSymbolID]) { - return type.pullSymbolID; - } - - var constraint = type.getConstraint(); - var wrappingTypeParameterID = constraint ? constraint.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - return wrappingTypeParameterID; - } - - if (type.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap, skipTypeArgumentCheck); - - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDFromSignatures = function (signatures, typeParameterArgumentMap) { - for (var i = 0; i < signatures.length; i++) { - var wrappingTypeParameterID = signatures[i].getWrappingTypeParameterID(typeParameterArgumentMap); - if (wrappingTypeParameterID !== 0) { - return wrappingTypeParameterID; - } - } - - return 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - var wrappingTypeParameterID = 0; - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = true; - - var typeArguments = type.getTypeArguments(); - - if (type.isGeneric() && !typeArguments) { - typeArguments = type.getTypeParameters(); - } - - if (typeArguments) { - for (var i = 0; !wrappingTypeParameterID && i < typeArguments.length; i++) { - wrappingTypeParameterID = typeArguments[i].getWrappingTypeParameterID(typeParameterArgumentMap); - } - } - } - - if (skipTypeArgumentCheck || !(type.kind & 8216 /* SomeInstantiatableType */) || !type.name) { - var members = type.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; !wrappingTypeParameterID && i < members.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(members[i]); - wrappingTypeParameterID = members[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - wrappingTypeParameterID = wrappingTypeParameterID || this.getWrappingTypeParameterIDFromSignatures(type.getCallSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getConstructSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getIndexSignatures(), typeParameterArgumentMap); - } - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = false; - } - - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType) { - TypeScript.Debug.assert(this.isNamedTypeSymbol()); - TypeScript.Debug.assert(TypeScript.PullHelpers.getRootType(enclosingType) == enclosingType); - var knownWrapMap = TypeScript.BitMatrix.getBitMatrix(true); - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap); - knownWrapMap.release(); - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - var thisRootType = TypeScript.PullHelpers.getRootType(this); - - if (thisRootType != enclosingType) { - var thisIsNamedType = this.isNamedTypeSymbol(); - - if (thisIsNamedType) { - if (thisRootType.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - thisRootType.inWrapInfiniteExpandingReferenceCheck = true; - } - - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure(enclosingType, knownWrapMap); - - if (thisIsNamedType) { - thisRootType.inWrapInfiniteExpandingReferenceCheck = false; - } - - return wrapsIntoInfinitelyExpandingTypeReference; - } - - var enclosingTypeParameters = enclosingType.getTypeParameters(); - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (TypeScript.ArrayUtilities.contains(enclosingTypeParameters, typeArguments[i])) { - continue; - } - - if (typeArguments[i].wrapsSomeTypeParameter(this.getTypeParameterArgumentMap())) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure = function (enclosingType, knownWrapMap) { - var members = this.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; i < members.length; i++) { - if (members[i].type && members[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - var sigs = this.getCallSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getConstructSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getIndexSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.widenedType = function (resolver, ast, context) { - if (!this._widenedType) { - this._widenedType = resolver.widenType(this, ast, context); - } - return this._widenedType; - }; - return PullTypeSymbol; - })(PullSymbol); - TypeScript.PullTypeSymbol = PullTypeSymbol; - - var PullPrimitiveTypeSymbol = (function (_super) { - __extends(PullPrimitiveTypeSymbol, _super); - function PullPrimitiveTypeSymbol(name) { - _super.call(this, name, 2 /* Primitive */); - - this.isResolved = true; - } - PullPrimitiveTypeSymbol.prototype.isAny = function () { - return !this.isStringConstant() && this.name === "any"; - }; - - PullPrimitiveTypeSymbol.prototype.isNull = function () { - return !this.isStringConstant() && this.name === "null"; - }; - - PullPrimitiveTypeSymbol.prototype.isUndefined = function () { - return !this.isStringConstant() && this.name === "undefined"; - }; - - PullPrimitiveTypeSymbol.prototype.isStringConstant = function () { - return false; - }; - - PullPrimitiveTypeSymbol.prototype.setUnresolved = function () { - }; - - PullPrimitiveTypeSymbol.prototype.getDisplayName = function () { - if (this.isNull() || this.isUndefined()) { - return "any"; - } else { - return _super.prototype.getDisplayName.call(this); - } - }; - return PullPrimitiveTypeSymbol; - })(PullTypeSymbol); - TypeScript.PullPrimitiveTypeSymbol = PullPrimitiveTypeSymbol; - - var PullStringConstantTypeSymbol = (function (_super) { - __extends(PullStringConstantTypeSymbol, _super); - function PullStringConstantTypeSymbol(name) { - _super.call(this, name); - } - PullStringConstantTypeSymbol.prototype.isStringConstant = function () { - return true; - }; - return PullStringConstantTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullStringConstantTypeSymbol = PullStringConstantTypeSymbol; - - var PullErrorTypeSymbol = (function (_super) { - __extends(PullErrorTypeSymbol, _super); - function PullErrorTypeSymbol(_anyType, name) { - _super.call(this, name); - this._anyType = _anyType; - - TypeScript.Debug.assert(this._anyType); - this.isResolved = true; - } - PullErrorTypeSymbol.prototype.isError = function () { - return true; - }; - - PullErrorTypeSymbol.prototype._getResolver = function () { - return this._anyType._getResolver(); - }; - - PullErrorTypeSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - return PullErrorTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullErrorTypeSymbol = PullErrorTypeSymbol; - - var PullContainerSymbol = (function (_super) { - __extends(PullContainerSymbol, _super); - function PullContainerSymbol(name, kind) { - _super.call(this, name, kind); - this.instanceSymbol = null; - this.assignedValue = null; - this.assignedType = null; - this.assignedContainer = null; - } - PullContainerSymbol.prototype.isContainer = function () { - return true; - }; - - PullContainerSymbol.prototype.setInstanceSymbol = function (symbol) { - this.instanceSymbol = symbol; - }; - - PullContainerSymbol.prototype.getInstanceSymbol = function () { - return this.instanceSymbol; - }; - - PullContainerSymbol.prototype.setExportAssignedValueSymbol = function (symbol) { - this.assignedValue = symbol; - }; - - PullContainerSymbol.prototype.getExportAssignedValueSymbol = function () { - return this.assignedValue; - }; - - PullContainerSymbol.prototype.setExportAssignedTypeSymbol = function (type) { - this.assignedType = type; - }; - - PullContainerSymbol.prototype.getExportAssignedTypeSymbol = function () { - return this.assignedType; - }; - - PullContainerSymbol.prototype.setExportAssignedContainerSymbol = function (container) { - this.assignedContainer = container; - }; - - PullContainerSymbol.prototype.getExportAssignedContainerSymbol = function () { - return this.assignedContainer; - }; - - PullContainerSymbol.prototype.hasExportAssignment = function () { - return !!this.assignedValue || !!this.assignedType || !!this.assignedContainer; - }; - - PullContainerSymbol.usedAsSymbol = function (containerSymbol, symbol) { - if (!containerSymbol || !containerSymbol.isContainer()) { - return false; - } - - if (!containerSymbol.isAlias() && containerSymbol.type === symbol) { - return true; - } - - var moduleSymbol = containerSymbol; - var valueExportSymbol = moduleSymbol.getExportAssignedValueSymbol(); - var typeExportSymbol = moduleSymbol.getExportAssignedTypeSymbol(); - var containerExportSymbol = moduleSymbol.getExportAssignedContainerSymbol(); - if (valueExportSymbol || typeExportSymbol || containerExportSymbol) { - if (valueExportSymbol === symbol || typeExportSymbol == symbol || containerExportSymbol == symbol) { - return true; - } - - if (containerExportSymbol != containerSymbol) { - return PullContainerSymbol.usedAsSymbol(containerExportSymbol, symbol); - } - } - - return false; - }; - - PullContainerSymbol.prototype.getInstanceType = function () { - return this.instanceSymbol ? this.instanceSymbol.type : null; - }; - return PullContainerSymbol; - })(PullTypeSymbol); - TypeScript.PullContainerSymbol = PullContainerSymbol; - - var PullTypeAliasSymbol = (function (_super) { - __extends(PullTypeAliasSymbol, _super); - function PullTypeAliasSymbol(name) { - _super.call(this, name, 128 /* TypeAlias */); - this._assignedValue = null; - this._assignedType = null; - this._assignedContainer = null; - this._isUsedAsValue = false; - this._typeUsedExternally = false; - this._isUsedInExportAlias = false; - this.retrievingExportAssignment = false; - this.linkedAliasSymbols = null; - } - PullTypeAliasSymbol.prototype.isUsedInExportedAlias = function () { - this._resolveDeclaredSymbol(); - return this._isUsedInExportAlias; - }; - - PullTypeAliasSymbol.prototype.typeUsedExternally = function () { - this._resolveDeclaredSymbol(); - return this._typeUsedExternally; - }; - - PullTypeAliasSymbol.prototype.isUsedAsValue = function () { - this._resolveDeclaredSymbol(); - return this._isUsedAsValue; - }; - - PullTypeAliasSymbol.prototype.setTypeUsedExternally = function () { - this._typeUsedExternally = true; - }; - - PullTypeAliasSymbol.prototype.setIsUsedInExportedAlias = function () { - this._isUsedInExportAlias = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedInExportedAlias(); - }); - } - }; - - PullTypeAliasSymbol.prototype.addLinkedAliasSymbol = function (contingentValueSymbol) { - if (!this.linkedAliasSymbols) { - this.linkedAliasSymbols = [contingentValueSymbol]; - } else { - this.linkedAliasSymbols.push(contingentValueSymbol); - } - }; - - PullTypeAliasSymbol.prototype.setIsUsedAsValue = function () { - this._isUsedAsValue = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedAsValue(); - }); - } - }; - - PullTypeAliasSymbol.prototype.assignedValue = function () { - this._resolveDeclaredSymbol(); - return this._assignedValue; - }; - - PullTypeAliasSymbol.prototype.assignedType = function () { - this._resolveDeclaredSymbol(); - return this._assignedType; - }; - - PullTypeAliasSymbol.prototype.assignedContainer = function () { - this._resolveDeclaredSymbol(); - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.isAlias = function () { - return true; - }; - PullTypeAliasSymbol.prototype.isContainer = function () { - return true; - }; - - PullTypeAliasSymbol.prototype.setAssignedValueSymbol = function (symbol) { - this._assignedValue = symbol; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedValueSymbol = function () { - if (this._assignedValue) { - return this._assignedValue; - } - - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - if (this._assignedContainer.hasExportAssignment()) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedValueSymbol(); - this.retrievingExportAssignment = false; - return sym; - } - - return this._assignedContainer.getInstanceSymbol(); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.setAssignedTypeSymbol = function (type) { - this._assignedType = type; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedTypeSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedType) { - if (this._assignedType.isAlias()) { - this.retrievingExportAssignment = true; - var sym = this._assignedType.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - } else if (this._assignedType !== this._assignedContainer) { - return this._assignedType; - } - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.setAssignedContainerSymbol = function (container) { - this._assignedContainer = container; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedContainerSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedContainerSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.getMembers = function () { - if (this._assignedType) { - return this._assignedType.getMembers(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getCallSignatures = function () { - if (this._assignedType) { - return this._assignedType.getCallSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getConstructSignatures = function () { - if (this._assignedType) { - return this._assignedType.getConstructSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getIndexSignatures = function () { - if (this._assignedType) { - return this._assignedType.getIndexSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.findMember = function (name) { - if (this._assignedType) { - return this._assignedType.findMember(name, true); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedType = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedType(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedContainer = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedContainer(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisibility) { - if (this._assignedType) { - return this._assignedType.getAllMembers(searchDeclKind, memberVisibility); - } - - return TypeScript.sentinelEmptyArray; - }; - return PullTypeAliasSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeAliasSymbol = PullTypeAliasSymbol; - - var PullTypeParameterSymbol = (function (_super) { - __extends(PullTypeParameterSymbol, _super); - function PullTypeParameterSymbol(name) { - _super.call(this, name, 8192 /* TypeParameter */); - this._constraint = null; - } - PullTypeParameterSymbol.prototype.isTypeParameter = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.setConstraint = function (constraintType) { - this._constraint = constraintType; - }; - - PullTypeParameterSymbol.prototype.getConstraint = function () { - return this._constraint; - }; - - PullTypeParameterSymbol.prototype.getBaseConstraint = function (semanticInfoChain) { - var preBaseConstraint = this.getConstraintRecursively({}); - TypeScript.Debug.assert(preBaseConstraint === null || !preBaseConstraint.isTypeParameter()); - return preBaseConstraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getConstraintRecursively = function (visitedTypeParameters) { - var constraint = this.getConstraint(); - - if (constraint) { - if (constraint.isTypeParameter()) { - var constraintAsTypeParameter = constraint; - if (!visitedTypeParameters[constraintAsTypeParameter.pullSymbolID]) { - visitedTypeParameters[constraintAsTypeParameter.pullSymbolID] = constraintAsTypeParameter; - return constraintAsTypeParameter.getConstraintRecursively(visitedTypeParameters); - } - } else { - return constraint; - } - } - - return null; - }; - - PullTypeParameterSymbol.prototype.getDefaultConstraint = function (semanticInfoChain) { - return this._constraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getCallSignatures = function () { - if (this._constraint) { - return this._constraint.getCallSignatures(); - } - - return _super.prototype.getCallSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getConstructSignatures = function () { - if (this._constraint) { - return this._constraint.getConstructSignatures(); - } - - return _super.prototype.getConstructSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getIndexSignatures = function () { - if (this._constraint) { - return this._constraint.getIndexSignatures(); - } - - return _super.prototype.getIndexSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.isGeneric = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.fullName = function (scopeSymbol) { - var name = this.getDisplayName(scopeSymbol); - var container = this.getContainer(); - if (container) { - var containerName = container.fullName(scopeSymbol); - name = name + " in " + containerName; - } - - return name; - }; - - PullTypeParameterSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var name = _super.prototype.getName.call(this, scopeSymbol); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var name = _super.prototype.getDisplayName.call(this, scopeSymbol, useConstraintInName, skipInternalAliasName); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - return true; - }; - return PullTypeParameterSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeParameterSymbol = PullTypeParameterSymbol; - - var PullAccessorSymbol = (function (_super) { - __extends(PullAccessorSymbol, _super); - function PullAccessorSymbol(name) { - _super.call(this, name, 4096 /* Property */); - this._getterSymbol = null; - this._setterSymbol = null; - } - PullAccessorSymbol.prototype.isAccessor = function () { - return true; - }; - - PullAccessorSymbol.prototype.setSetter = function (setter) { - if (!setter) { - return; - } - - this._setterSymbol = setter; - }; - - PullAccessorSymbol.prototype.getSetter = function () { - return this._setterSymbol; - }; - - PullAccessorSymbol.prototype.setGetter = function (getter) { - if (!getter) { - return; - } - - this._getterSymbol = getter; - }; - - PullAccessorSymbol.prototype.getGetter = function () { - return this._getterSymbol; - }; - return PullAccessorSymbol; - })(PullSymbol); - TypeScript.PullAccessorSymbol = PullAccessorSymbol; - - function getIDForTypeSubstitutions(instantiatingTypeOrSignature, typeArgumentMap) { - var substitution = ""; - var members = null; - - var allowedToReferenceTypeParameters = instantiatingTypeOrSignature.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedToReferenceTypeParameters.length; i++) { - var typeParameter = allowedToReferenceTypeParameters[i]; - var typeParameterID = typeParameter.pullSymbolID; - var typeArg = typeArgumentMap[typeParameterID]; - if (!typeArg) { - typeArg = typeParameter; - } - substitution += typeParameterID + ":" + getIDForTypeSubstitutionsOfType(typeArg); - } - - return substitution; - } - TypeScript.getIDForTypeSubstitutions = getIDForTypeSubstitutions; - - function getIDForTypeSubstitutionsOfType(type) { - var structure; - if (type.isError()) { - structure = "E" + getIDForTypeSubstitutionsOfType(type._anyType); - } else if (!type.isNamedTypeSymbol()) { - structure = getIDForTypeSubstitutionsFromObjectType(type); - } - - if (!structure) { - structure = type.pullSymbolID + "#"; - } - - return structure; - } - - function getIDForTypeSubstitutionsFromObjectType(type) { - if (type.isResolved) { - var getIDForTypeSubStitutionWalker = new GetIDForTypeSubStitutionWalker(); - TypeScript.PullHelpers.walkPullTypeSymbolStructure(type, getIDForTypeSubStitutionWalker); - } - - return null; - } - - var GetIDForTypeSubStitutionWalker = (function () { - function GetIDForTypeSubStitutionWalker() { - this.structure = ""; - } - GetIDForTypeSubStitutionWalker.prototype.memberSymbolWalk = function (memberSymbol) { - this.structure += memberSymbol.name + "@" + getIDForTypeSubstitutionsOfType(memberSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.callSignatureWalk = function (signatureSymbol) { - this.structure += "("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.constructSignatureWalk = function (signatureSymbol) { - this.structure += "new("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.indexSignatureWalk = function (signatureSymbol) { - this.structure += "[]("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureParameterWalk = function (parameterSymbol) { - this.structure += parameterSymbol.name + "@" + getIDForTypeSubstitutionsOfType(parameterSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureReturnTypeWalk = function (returnType) { - this.structure += ")" + getIDForTypeSubstitutionsOfType(returnType); - return true; - }; - return GetIDForTypeSubStitutionWalker; - })(); - - (function (GetAllMembersVisiblity) { - GetAllMembersVisiblity[GetAllMembersVisiblity["all"] = 0] = "all"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["internallyVisible"] = 1] = "internallyVisible"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["externallyVisible"] = 2] = "externallyVisible"; - })(TypeScript.GetAllMembersVisiblity || (TypeScript.GetAllMembersVisiblity = {})); - var GetAllMembersVisiblity = TypeScript.GetAllMembersVisiblity; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var EnclosingTypeWalkerState = (function () { - function EnclosingTypeWalkerState() { - } - EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = false; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState = function (genericEnclosingType) { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - defaultEnclosingTypeWalkerState._currentSymbols = [TypeScript.PullHelpers.getRootType(genericEnclosingType)]; - return defaultEnclosingTypeWalkerState; - }; - return EnclosingTypeWalkerState; - })(); - TypeScript.EnclosingTypeWalkerState = EnclosingTypeWalkerState; - - var PullTypeEnclosingTypeWalker = (function () { - function PullTypeEnclosingTypeWalker() { - this.setDefaultTypeWalkerState(); - } - PullTypeEnclosingTypeWalker.prototype.setDefaultTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.setNonGenericEnclosingTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolOrDeclBeUsedAsEnclosingTypeHelper = function (name, kind) { - return name && (kind === 8 /* Class */ || kind === 16 /* Interface */); - }; - - PullTypeEnclosingTypeWalker.prototype.canDeclBeUsedAsEnclosingType = function (decl) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(decl.name, decl.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolBeUsedAsEnclosingType = function (symbol) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(symbol.name, symbol.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.getEnclosingType = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols) { - TypeScript.Debug.assert(currentSymbols.length > 0); - return currentSymbols[0]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype._canWalkStructure = function () { - var enclosingType = this.getEnclosingType(); - TypeScript.Debug.assert(!enclosingType || enclosingType.isGeneric()); - return !!enclosingType; - }; - - PullTypeEnclosingTypeWalker.prototype._getCurrentSymbol = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols && currentSymbols.length) { - return currentSymbols[currentSymbols.length - 1]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.getGenerativeClassification = function () { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (!currentType) { - return 0 /* Unknown */; - } - - var variableNeededToFixNodeJitterBug = this.getEnclosingType(); - - return currentType.getGenerativeTypeClassification(variableNeededToFixNodeJitterBug); - } - - return 2 /* Closed */; - }; - - PullTypeEnclosingTypeWalker.prototype._pushSymbol = function (symbol) { - return this.enclosingTypeWalkerState._currentSymbols.push(symbol); - }; - - PullTypeEnclosingTypeWalker.prototype._popSymbol = function () { - return this.enclosingTypeWalkerState._currentSymbols.pop(); - }; - - PullTypeEnclosingTypeWalker.prototype.setSymbolAsEnclosingType = function (type) { - if (type.isGeneric()) { - this.enclosingTypeWalkerState = EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState(type); - } else { - this.setNonGenericEnclosingTypeWalkerState(); - } - }; - - PullTypeEnclosingTypeWalker.prototype._setEnclosingTypeOfParentDecl = function (decl, setSignature) { - var parentDecl = decl.getParentDecl(); - - if (parentDecl && !(parentDecl.kind & (164 /* SomeContainer */ | 1 /* Script */))) { - if (this.canDeclBeUsedAsEnclosingType(parentDecl)) { - this.setSymbolAsEnclosingType(parentDecl.getSymbol()); - } else { - this._setEnclosingTypeOfParentDecl(parentDecl, true); - } - - if (this._canWalkStructure()) { - var symbol = decl.getSymbol(); - if (symbol) { - if (!symbol.isType() && !symbol.isSignature()) { - symbol = symbol.type; - } - - this._pushSymbol(symbol); - } - - if (setSignature) { - var signature = decl.getSignatureSymbol(); - if (signature) { - this._pushSymbol(signature); - } - } - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeForSymbol = function (symbol) { - var currentEnclosingTypeWalkerState = this.enclosingTypeWalkerState; - if (this.canSymbolBeUsedAsEnclosingType(symbol)) { - this.setSymbolAsEnclosingType(symbol); - } else { - this.setDefaultTypeWalkerState(); - - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - this._setEnclosingTypeOfParentDecl(decl, symbol.isSignature()); - - if (this.enclosingTypeWalkerState._hasSetEnclosingType) { - break; - } - } - - if (!this.enclosingTypeWalkerState._hasSetEnclosingType) { - this.setNonGenericEnclosingTypeWalkerState(); - } - } - return currentEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.startWalkingType = function (symbol) { - var currentState = this.enclosingTypeWalkerState; - - var setEnclosingTypeForSymbol = !this.enclosingTypeWalkerState._hasSetEnclosingType || this.canSymbolBeUsedAsEnclosingType(symbol); - if (setEnclosingTypeForSymbol) { - this.setEnclosingTypeForSymbol(symbol); - } - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.endWalkingType = function (stateWhenStartedWalkingTypes) { - this.enclosingTypeWalkerState = stateWhenStartedWalkingTypes; - }; - - PullTypeEnclosingTypeWalker.prototype.walkMemberType = function (memberName, resolver) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var memberSymbol = currentType ? resolver._getNamedPropertySymbolOfAugmentedType(memberName, currentType) : null; - this._pushSymbol(memberSymbol ? memberSymbol.type : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkMemberType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkSignature = function (kind, index) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var signatures; - if (currentType) { - if (kind == 1048576 /* CallSignature */) { - signatures = currentType.getCallSignatures(); - } else if (kind == 2097152 /* ConstructSignature */) { - signatures = currentType.getConstructSignatures(); - } else { - signatures = currentType.getIndexSignatures(); - } - } - - this._pushSymbol(signatures ? signatures[index] : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkSignature = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeArgument = function (index) { - if (this._canWalkStructure()) { - var typeArgument = null; - var currentType = this._getCurrentSymbol(); - if (currentType) { - var typeArguments = currentType.getTypeArguments(); - typeArgument = typeArguments ? typeArguments[index] : null; - } - this._pushSymbol(typeArgument); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeArgument = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeParameterConstraint = function (index) { - if (this._canWalkStructure()) { - var typeParameters; - var currentSymbol = this._getCurrentSymbol(); - if (currentSymbol) { - if (currentSymbol.isSignature()) { - typeParameters = currentSymbol.getTypeParameters(); - } else { - TypeScript.Debug.assert(currentSymbol.isType()); - typeParameters = currentSymbol.getTypeParameters(); - } - } - this._pushSymbol(typeParameters ? typeParameters[index].getConstraint() : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeParameterConstraint = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkReturnType = function () { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.returnType : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkReturnType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkParameterType = function (iParam) { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.getParameterTypeAtIndex(iParam) : null); - } - }; - PullTypeEnclosingTypeWalker.prototype.postWalkParameterType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.getBothKindOfIndexSignatures = function (resolver, context, includeAugmentedType) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (currentType) { - return resolver._getBothKindsOfIndexSignatures(currentType, context, includeAugmentedType); - } - } - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.walkIndexSignatureReturnType = function (indexSigInfo, useStringIndexSignature, onlySignature) { - if (this._canWalkStructure()) { - var indexSig = indexSigInfo ? (useStringIndexSignature ? indexSigInfo.stringSignature : indexSigInfo.numericSignature) : null; - this._pushSymbol(indexSig); - if (!onlySignature) { - this._pushSymbol(indexSig ? indexSig.returnType : null); - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkIndexSignatureReturnType = function (onlySignature) { - if (this._canWalkStructure()) { - if (!onlySignature) { - this._popSymbol(); - } - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.resetEnclosingTypeWalkerState = function () { - var currentState = this.enclosingTypeWalkerState; - this.setDefaultTypeWalkerState(); - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeWalkerState = function (enclosingTypeWalkerState) { - if (enclosingTypeWalkerState) { - this.enclosingTypeWalkerState = enclosingTypeWalkerState; - } else { - this.setDefaultTypeWalkerState(); - } - }; - PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState = EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState(); - - PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState = EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState(); - return PullTypeEnclosingTypeWalker; - })(); - TypeScript.PullTypeEnclosingTypeWalker = PullTypeEnclosingTypeWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CandidateInferenceInfo = (function () { - function CandidateInferenceInfo() { - this.typeParameter = null; - this._inferredTypeAfterFixing = null; - this.inferenceCandidates = []; - } - CandidateInferenceInfo.prototype.addCandidate = function (candidate) { - if (!this._inferredTypeAfterFixing) { - this.inferenceCandidates[this.inferenceCandidates.length] = candidate; - } - }; - - CandidateInferenceInfo.prototype.isFixed = function () { - return !!this._inferredTypeAfterFixing; - }; - - CandidateInferenceInfo.prototype.fixTypeParameter = function (resolver, context) { - var _this = this; - if (!this._inferredTypeAfterFixing) { - var collection = { - getLength: function () { - return _this.inferenceCandidates.length; - }, - getTypeAtIndex: function (index) { - return _this.inferenceCandidates[index].type; - } - }; - - var bestCommonType = resolver.findBestCommonType(collection, context, new TypeScript.TypeComparisonInfo()); - this._inferredTypeAfterFixing = bestCommonType.widenedType(resolver, null, context); - } - }; - return CandidateInferenceInfo; - })(); - TypeScript.CandidateInferenceInfo = CandidateInferenceInfo; - - var TypeArgumentInferenceContext = (function () { - function TypeArgumentInferenceContext(resolver, context, signatureBeingInferred) { - this.resolver = resolver; - this.context = context; - this.signatureBeingInferred = signatureBeingInferred; - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - this.candidateCache = []; - var typeParameters = signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addInferenceRoot(typeParameters[i]); - } - } - TypeArgumentInferenceContext.prototype.alreadyRelatingTypes = function (objectType, parameterType) { - if (this.inferenceCache.valueAt(objectType.pullSymbolID, parameterType.pullSymbolID)) { - return true; - } else { - this.inferenceCache.setValueAt(objectType.pullSymbolID, parameterType.pullSymbolID, true); - return false; - } - }; - - TypeArgumentInferenceContext.prototype.resetRelationshipCache = function () { - this.inferenceCache.release(); - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - }; - - TypeArgumentInferenceContext.prototype.addInferenceRoot = function (param) { - var info = this.candidateCache[param.pullSymbolID]; - - if (!info) { - info = new CandidateInferenceInfo(); - info.typeParameter = param; - this.candidateCache[param.pullSymbolID] = info; - } - }; - - TypeArgumentInferenceContext.prototype.getInferenceInfo = function (param) { - return this.candidateCache[param.pullSymbolID]; - }; - - TypeArgumentInferenceContext.prototype.addCandidateForInference = function (param, candidate) { - var info = this.getInferenceInfo(param); - - if (info && candidate && info.inferenceCandidates.indexOf(candidate) < 0) { - info.addCandidate(candidate); - } - }; - - TypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - throw TypeScript.Errors.abstract(); - }; - - TypeArgumentInferenceContext.prototype.fixTypeParameter = function (typeParameter) { - var candidateInfo = this.candidateCache[typeParameter.pullSymbolID]; - if (candidateInfo) { - candidateInfo.fixTypeParameter(this.resolver, this.context); - } - }; - - TypeArgumentInferenceContext.prototype._finalizeInferredTypeArguments = function () { - var results = []; - var typeParameters = this.signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - var info = this.candidateCache[typeParameters[i].pullSymbolID]; - - info.fixTypeParameter(this.resolver, this.context); - - for (var i = 0; i < results.length; i++) { - if (results[i].type === info.typeParameter) { - results[i].type = info._inferredTypeAfterFixing; - } - } - - results.push(info._inferredTypeAfterFixing); - } - - return results; - }; - - TypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - throw TypeScript.Errors.abstract(); - }; - return TypeArgumentInferenceContext; - })(); - TypeScript.TypeArgumentInferenceContext = TypeArgumentInferenceContext; - - var InvocationTypeArgumentInferenceContext = (function (_super) { - __extends(InvocationTypeArgumentInferenceContext, _super); - function InvocationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, argumentASTs) { - _super.call(this, resolver, context, signatureBeingInferred); - this.argumentASTs = argumentASTs; - } - InvocationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return true; - }; - - InvocationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - this.signatureBeingInferred.forAllParameterTypes(this.argumentASTs.nonSeparatorCount(), function (parameterType, argumentIndex) { - var argumentAST = _this.argumentASTs.nonSeparatorAt(argumentIndex); - - _this.context.pushInferentialType(parameterType, _this); - var argumentType = _this.resolver.resolveAST(argumentAST, true, _this.context).type; - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(argumentType, parameterType, _this, _this.context); - _this.context.popAnyContextualType(); - - return true; - }); - - return this._finalizeInferredTypeArguments(); - }; - return InvocationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.InvocationTypeArgumentInferenceContext = InvocationTypeArgumentInferenceContext; - - var ContextualSignatureInstantiationTypeArgumentInferenceContext = (function (_super) { - __extends(ContextualSignatureInstantiationTypeArgumentInferenceContext, _super); - function ContextualSignatureInstantiationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, contextualSignature, shouldFixContextualSignatureParameterTypes) { - _super.call(this, resolver, context, signatureBeingInferred); - this.contextualSignature = contextualSignature; - this.shouldFixContextualSignatureParameterTypes = shouldFixContextualSignatureParameterTypes; - } - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return false; - }; - - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - var relateTypesCallback = function (parameterTypeBeingInferred, contextualParameterType) { - if (_this.shouldFixContextualSignatureParameterTypes) { - contextualParameterType = _this.context.fixAllTypeParametersReferencedByType(contextualParameterType, _this.resolver, _this); - } - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(contextualParameterType, parameterTypeBeingInferred, _this, _this.context); - - return true; - }; - - this.signatureBeingInferred.forAllCorrespondingParameterTypesInThisAndOtherSignature(this.contextualSignature, relateTypesCallback); - - return this._finalizeInferredTypeArguments(); - }; - return ContextualSignatureInstantiationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext = ContextualSignatureInstantiationTypeArgumentInferenceContext; - - var PullContextualTypeContext = (function () { - function PullContextualTypeContext(contextualType, provisional, isInferentiallyTyping, typeArgumentInferenceContext) { - this.contextualType = contextualType; - this.provisional = provisional; - this.isInferentiallyTyping = isInferentiallyTyping; - this.typeArgumentInferenceContext = typeArgumentInferenceContext; - this.provisionallyTypedSymbols = []; - this.hasProvisionalErrors = false; - this.astSymbolMap = []; - } - PullContextualTypeContext.prototype.recordProvisionallyTypedSymbol = function (symbol) { - this.provisionallyTypedSymbols[this.provisionallyTypedSymbols.length] = symbol; - }; - - PullContextualTypeContext.prototype.invalidateProvisionallyTypedSymbols = function () { - for (var i = 0; i < this.provisionallyTypedSymbols.length; i++) { - this.provisionallyTypedSymbols[i].setUnresolved(); - } - }; - - PullContextualTypeContext.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - PullContextualTypeContext.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()]; - }; - return PullContextualTypeContext; - })(); - TypeScript.PullContextualTypeContext = PullContextualTypeContext; - - var PullTypeResolutionContext = (function () { - function PullTypeResolutionContext(resolver, inTypeCheck, fileName) { - if (typeof inTypeCheck === "undefined") { inTypeCheck = false; } - if (typeof fileName === "undefined") { fileName = null; } - this.resolver = resolver; - this.inTypeCheck = inTypeCheck; - this.fileName = fileName; - this.contextStack = []; - this.typeCheckedNodes = null; - this.enclosingTypeWalker1 = null; - this.enclosingTypeWalker2 = null; - this.inBaseTypeResolution = false; - if (inTypeCheck) { - TypeScript.Debug.assert(fileName, "A file name must be provided if you are typechecking"); - this.typeCheckedNodes = TypeScript.BitVector.getBitVector(false); - } - } - PullTypeResolutionContext.prototype.setTypeChecked = function (ast) { - if (!this.inProvisionalResolution()) { - this.typeCheckedNodes.setValueAt(ast.syntaxID(), true); - } - }; - - PullTypeResolutionContext.prototype.canTypeCheckAST = function (ast) { - return this.typeCheck() && !this.typeCheckedNodes.valueAt(ast.syntaxID()) && this.fileName === ast.fileName(); - }; - - PullTypeResolutionContext.prototype._pushAnyContextualType = function (type, provisional, isInferentiallyTyping, argContext) { - this.contextStack.push(new PullContextualTypeContext(type, provisional, isInferentiallyTyping, argContext)); - }; - - PullTypeResolutionContext.prototype.pushNewContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), false, null); - }; - - PullTypeResolutionContext.prototype.propagateContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), this.isInferentiallyTyping(), this.getCurrentTypeArgumentInferenceContext()); - }; - - PullTypeResolutionContext.prototype.pushInferentialType = function (type, typeArgumentInferenceContext) { - this._pushAnyContextualType(type, true, true, typeArgumentInferenceContext); - }; - - PullTypeResolutionContext.prototype.pushProvisionalType = function (type) { - this._pushAnyContextualType(type, true, false, null); - }; - - PullTypeResolutionContext.prototype.popAnyContextualType = function () { - var tc = this.contextStack.pop(); - - tc.invalidateProvisionallyTypedSymbols(); - - if (tc.hasProvisionalErrors && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].hasProvisionalErrors = true; - } - - return tc; - }; - - PullTypeResolutionContext.prototype.hasProvisionalErrors = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].hasProvisionalErrors : false; - }; - - PullTypeResolutionContext.prototype.getContextualType = function () { - var context = !this.contextStack.length ? null : this.contextStack[this.contextStack.length - 1]; - - if (context) { - var type = context.contextualType; - - if (!type) { - return null; - } - - return type; - } - - return null; - }; - - PullTypeResolutionContext.prototype.fixAllTypeParametersReferencedByType = function (type, resolver, argContext) { - var argContext = this.getCurrentTypeArgumentInferenceContext(); - if (type.wrapsSomeTypeParameter(argContext.candidateCache)) { - var typeParameterArgumentMap = []; - - for (var n in argContext.candidateCache) { - var typeParameter = argContext.candidateCache[n] && argContext.candidateCache[n].typeParameter; - if (typeParameter) { - var dummyMap = []; - dummyMap[typeParameter.pullSymbolID] = typeParameter; - if (type.wrapsSomeTypeParameter(dummyMap)) { - argContext.fixTypeParameter(typeParameter); - TypeScript.Debug.assert(argContext.candidateCache[n]._inferredTypeAfterFixing); - typeParameterArgumentMap[typeParameter.pullSymbolID] = argContext.candidateCache[n]._inferredTypeAfterFixing; - } - } - } - - return resolver.instantiateType(type, typeParameterArgumentMap); - } - - return type; - }; - - PullTypeResolutionContext.prototype.getCurrentTypeArgumentInferenceContext = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].typeArgumentInferenceContext : null; - }; - - PullTypeResolutionContext.prototype.isInferentiallyTyping = function () { - return this.contextStack.length > 0 && this.contextStack[this.contextStack.length - 1].isInferentiallyTyping; - }; - - PullTypeResolutionContext.prototype.inProvisionalResolution = function () { - return (!this.contextStack.length ? false : this.contextStack[this.contextStack.length - 1].provisional); - }; - - PullTypeResolutionContext.prototype.isInBaseTypeResolution = function () { - return this.inBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.startBaseTypeResolution = function () { - var wasInBaseTypeResoltion = this.inBaseTypeResolution; - this.inBaseTypeResolution = true; - return wasInBaseTypeResoltion; - }; - - PullTypeResolutionContext.prototype.doneBaseTypeResolution = function (wasInBaseTypeResolution) { - this.inBaseTypeResolution = wasInBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.setTypeInContext = function (symbol, type) { - if (symbol.type && symbol.type.isError() && !type.isError()) { - return; - } - symbol.type = type; - - if (this.contextStack.length && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].recordProvisionallyTypedSymbol(symbol); - } - }; - - PullTypeResolutionContext.prototype.postDiagnostic = function (diagnostic) { - if (diagnostic) { - if (this.inProvisionalResolution()) { - (this.contextStack[this.contextStack.length - 1]).hasProvisionalErrors = true; - } else if (this.inTypeCheck && this.resolver) { - this.resolver.semanticInfoChain.addDiagnostic(diagnostic); - } - } - }; - - PullTypeResolutionContext.prototype.typeCheck = function () { - return this.inTypeCheck && !this.inProvisionalResolution(); - }; - - PullTypeResolutionContext.prototype.setSymbolForAST = function (ast, symbol) { - this.contextStack[this.contextStack.length - 1].setSymbolForAST(ast, symbol); - }; - - PullTypeResolutionContext.prototype.getSymbolForAST = function (ast) { - for (var i = this.contextStack.length - 1; i >= 0; i--) { - var typeContext = this.contextStack[i]; - if (!typeContext.provisional) { - break; - } - - var symbol = typeContext.getSymbolForAST(ast); - if (symbol) { - return symbol; - } - } - - return null; - }; - - PullTypeResolutionContext.prototype.startWalkingTypes = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes1 = this.enclosingTypeWalker1.startWalkingType(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes2 = this.enclosingTypeWalker2.startWalkingType(symbol2); - return { - stateWhenStartedWalkingTypes1: stateWhenStartedWalkingTypes1, - stateWhenStartedWalkingTypes2: stateWhenStartedWalkingTypes2 - }; - }; - - PullTypeResolutionContext.prototype.endWalkingTypes = function (statesWhenStartedWalkingTypes) { - this.enclosingTypeWalker1.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes1); - this.enclosingTypeWalker2.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes2); - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeForSymbols = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1.setEnclosingTypeForSymbol(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2.setEnclosingTypeForSymbol(symbol2); - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.walkMemberTypes = function (memberName) { - this.enclosingTypeWalker1.walkMemberType(memberName, this.resolver); - this.enclosingTypeWalker2.walkMemberType(memberName, this.resolver); - }; - - PullTypeResolutionContext.prototype.postWalkMemberTypes = function () { - this.enclosingTypeWalker1.postWalkMemberType(); - this.enclosingTypeWalker2.postWalkMemberType(); - }; - - PullTypeResolutionContext.prototype.walkSignatures = function (kind, index, index2) { - this.enclosingTypeWalker1.walkSignature(kind, index); - this.enclosingTypeWalker2.walkSignature(kind, index2 == undefined ? index : index2); - }; - - PullTypeResolutionContext.prototype.postWalkSignatures = function () { - this.enclosingTypeWalker1.postWalkSignature(); - this.enclosingTypeWalker2.postWalkSignature(); - }; - - PullTypeResolutionContext.prototype.walkTypeParameterConstraints = function (index) { - this.enclosingTypeWalker1.walkTypeParameterConstraint(index); - this.enclosingTypeWalker2.walkTypeParameterConstraint(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeParameterConstraints = function () { - this.enclosingTypeWalker1.postWalkTypeParameterConstraint(); - this.enclosingTypeWalker2.postWalkTypeParameterConstraint(); - }; - - PullTypeResolutionContext.prototype.walkTypeArgument = function (index) { - this.enclosingTypeWalker1.walkTypeArgument(index); - this.enclosingTypeWalker2.walkTypeArgument(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeArgument = function () { - this.enclosingTypeWalker1.postWalkTypeArgument(); - this.enclosingTypeWalker2.postWalkTypeArgument(); - }; - - PullTypeResolutionContext.prototype.walkReturnTypes = function () { - this.enclosingTypeWalker1.walkReturnType(); - this.enclosingTypeWalker2.walkReturnType(); - }; - - PullTypeResolutionContext.prototype.postWalkReturnTypes = function () { - this.enclosingTypeWalker1.postWalkReturnType(); - this.enclosingTypeWalker2.postWalkReturnType(); - }; - - PullTypeResolutionContext.prototype.walkParameterTypes = function (iParam) { - this.enclosingTypeWalker1.walkParameterType(iParam); - this.enclosingTypeWalker2.walkParameterType(iParam); - }; - - PullTypeResolutionContext.prototype.postWalkParameterTypes = function () { - this.enclosingTypeWalker1.postWalkParameterType(); - this.enclosingTypeWalker2.postWalkParameterType(); - }; - - PullTypeResolutionContext.prototype.getBothKindOfIndexSignatures = function (includeAugmentedType1, includeAugmentedType2) { - var indexSigs1 = this.enclosingTypeWalker1.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType1); - var indexSigs2 = this.enclosingTypeWalker2.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType2); - return { indexSigs1: indexSigs1, indexSigs2: indexSigs2 }; - }; - - PullTypeResolutionContext.prototype.walkIndexSignatureReturnTypes = function (indexSigs, useStringIndexSignature1, useStringIndexSignature2, onlySignature) { - this.enclosingTypeWalker1.walkIndexSignatureReturnType(indexSigs.indexSigs1, useStringIndexSignature1, onlySignature); - this.enclosingTypeWalker2.walkIndexSignatureReturnType(indexSigs.indexSigs2, useStringIndexSignature2, onlySignature); - }; - - PullTypeResolutionContext.prototype.postWalkIndexSignatureReturnTypes = function (onlySignature) { - this.enclosingTypeWalker1.postWalkIndexSignatureReturnType(onlySignature); - this.enclosingTypeWalker2.postWalkIndexSignatureReturnType(onlySignature); - }; - - PullTypeResolutionContext.prototype.swapEnclosingTypeWalkers = function () { - var tempEnclosingWalker1 = this.enclosingTypeWalker1; - this.enclosingTypeWalker1 = this.enclosingTypeWalker2; - this.enclosingTypeWalker2 = tempEnclosingWalker1; - }; - - PullTypeResolutionContext.prototype.oneOfClassificationsIsInfinitelyExpanding = function () { - var generativeClassification1 = this.enclosingTypeWalker1.getGenerativeClassification(); - if (generativeClassification1 === 3 /* InfinitelyExpanding */) { - return true; - } - var generativeClassification2 = this.enclosingTypeWalker2.getGenerativeClassification(); - if (generativeClassification2 === 3 /* InfinitelyExpanding */) { - return true; - } - - return false; - }; - - PullTypeResolutionContext.prototype.resetEnclosingTypeWalkerStates = function () { - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1 ? this.enclosingTypeWalker1.resetEnclosingTypeWalkerState() : null; - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2 ? this.enclosingTypeWalker2.resetEnclosingTypeWalkerState() : null; - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeWalkerStates = function (enclosingTypeWalkerStates) { - TypeScript.Debug.assert(this.enclosingTypeWalker1 || !enclosingTypeWalkerStates.enclosingTypeWalkerState1); - if (this.enclosingTypeWalker1) { - this.enclosingTypeWalker1.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState1); - } - TypeScript.Debug.assert(this.enclosingTypeWalker2 || !enclosingTypeWalkerStates.enclosingTypeWalkerState2); - if (this.enclosingTypeWalker2) { - this.enclosingTypeWalker2.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState2); - } - }; - return PullTypeResolutionContext; - })(); - TypeScript.PullTypeResolutionContext = PullTypeResolutionContext; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var OverloadApplicabilityStatus; - (function (OverloadApplicabilityStatus) { - OverloadApplicabilityStatus[OverloadApplicabilityStatus["NotAssignable"] = 0] = "NotAssignable"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableButWithProvisionalErrors"] = 1] = "AssignableButWithProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableWithNoProvisionalErrors"] = 2] = "AssignableWithNoProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["Subtype"] = 3] = "Subtype"; - })(OverloadApplicabilityStatus || (OverloadApplicabilityStatus = {})); - - var PullAdditionalCallResolutionData = (function () { - function PullAdditionalCallResolutionData() { - this.targetSymbol = null; - this.resolvedSignatures = null; - this.candidateSignature = null; - this.actualParametersContextTypeSymbols = null; - this.diagnosticsFromOverloadResolution = []; - } - return PullAdditionalCallResolutionData; - })(); - TypeScript.PullAdditionalCallResolutionData = PullAdditionalCallResolutionData; - - var PullAdditionalObjectLiteralResolutionData = (function () { - function PullAdditionalObjectLiteralResolutionData() { - this.membersContextTypeSymbols = null; - } - return PullAdditionalObjectLiteralResolutionData; - })(); - TypeScript.PullAdditionalObjectLiteralResolutionData = PullAdditionalObjectLiteralResolutionData; - - var MemberWithBaseOrigin = (function () { - function MemberWithBaseOrigin(memberSymbol, baseOrigin) { - this.memberSymbol = memberSymbol; - this.baseOrigin = baseOrigin; - } - return MemberWithBaseOrigin; - })(); - - var SignatureWithBaseOrigin = (function () { - function SignatureWithBaseOrigin(signature, baseOrigin) { - this.signature = signature; - this.baseOrigin = baseOrigin; - } - return SignatureWithBaseOrigin; - })(); - - var InheritedIndexSignatureInfo = (function () { - function InheritedIndexSignatureInfo() { - } - return InheritedIndexSignatureInfo; - })(); - - var CompilerReservedName; - (function (CompilerReservedName) { - CompilerReservedName[CompilerReservedName["_this"] = 1] = "_this"; - CompilerReservedName[CompilerReservedName["_super"] = 2] = "_super"; - CompilerReservedName[CompilerReservedName["arguments"] = 3] = "arguments"; - CompilerReservedName[CompilerReservedName["_i"] = 4] = "_i"; - CompilerReservedName[CompilerReservedName["require"] = 5] = "require"; - CompilerReservedName[CompilerReservedName["exports"] = 6] = "exports"; - })(CompilerReservedName || (CompilerReservedName = {})); - - function getCompilerReservedName(name) { - var nameText = name.valueText(); - return CompilerReservedName[nameText]; - } - - var PullTypeResolver = (function () { - function PullTypeResolver(compilationSettings, semanticInfoChain) { - this.compilationSettings = compilationSettings; - this.semanticInfoChain = semanticInfoChain; - this._cachedArrayInterfaceType = null; - this._cachedNumberInterfaceType = null; - this._cachedStringInterfaceType = null; - this._cachedBooleanInterfaceType = null; - this._cachedObjectInterfaceType = null; - this._cachedFunctionInterfaceType = null; - this._cachedIArgumentsInterfaceType = null; - this._cachedRegExpInterfaceType = null; - this._cachedAnyTypeArgs = null; - this.typeCheckCallBacks = []; - this.postTypeCheckWorkitems = []; - this._cachedFunctionArgumentsSymbol = null; - this.assignableCache = TypeScript.BitMatrix.getBitMatrix(true); - this.subtypeCache = TypeScript.BitMatrix.getBitMatrix(true); - this.identicalCache = TypeScript.BitMatrix.getBitMatrix(true); - this.inResolvingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullTypeResolver.prototype.cachedArrayInterfaceType = function () { - if (!this._cachedArrayInterfaceType) { - this._cachedArrayInterfaceType = this.getSymbolFromDeclPath("Array", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedArrayInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedArrayInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedArrayInterfaceType; - }; - - PullTypeResolver.prototype.getArrayNamedType = function () { - return this.cachedArrayInterfaceType(); - }; - - PullTypeResolver.prototype.cachedNumberInterfaceType = function () { - if (!this._cachedNumberInterfaceType) { - this._cachedNumberInterfaceType = this.getSymbolFromDeclPath("Number", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedNumberInterfaceType && !this._cachedNumberInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedNumberInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedNumberInterfaceType; - }; - - PullTypeResolver.prototype.cachedStringInterfaceType = function () { - if (!this._cachedStringInterfaceType) { - this._cachedStringInterfaceType = this.getSymbolFromDeclPath("String", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedStringInterfaceType && !this._cachedStringInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedStringInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedStringInterfaceType; - }; - - PullTypeResolver.prototype.cachedBooleanInterfaceType = function () { - if (!this._cachedBooleanInterfaceType) { - this._cachedBooleanInterfaceType = this.getSymbolFromDeclPath("Boolean", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedBooleanInterfaceType && !this._cachedBooleanInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedBooleanInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedBooleanInterfaceType; - }; - - PullTypeResolver.prototype.cachedObjectInterfaceType = function () { - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.getSymbolFromDeclPath("Object", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedObjectInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedObjectInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionInterfaceType = function () { - if (!this._cachedFunctionInterfaceType) { - this._cachedFunctionInterfaceType = this.getSymbolFromDeclPath("Function", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedFunctionInterfaceType && !this._cachedFunctionInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedFunctionInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedFunctionInterfaceType; - }; - - PullTypeResolver.prototype.cachedIArgumentsInterfaceType = function () { - if (!this._cachedIArgumentsInterfaceType) { - this._cachedIArgumentsInterfaceType = this.getSymbolFromDeclPath("IArguments", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedIArgumentsInterfaceType && !this._cachedIArgumentsInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedIArgumentsInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedIArgumentsInterfaceType; - }; - - PullTypeResolver.prototype.cachedRegExpInterfaceType = function () { - if (!this._cachedRegExpInterfaceType) { - this._cachedRegExpInterfaceType = this.getSymbolFromDeclPath("RegExp", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedRegExpInterfaceType && !this._cachedRegExpInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedRegExpInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedRegExpInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionArgumentsSymbol = function () { - if (!this._cachedFunctionArgumentsSymbol) { - this._cachedFunctionArgumentsSymbol = new TypeScript.PullSymbol("arguments", 512 /* Variable */); - this._cachedFunctionArgumentsSymbol.type = this.cachedIArgumentsInterfaceType() || this.semanticInfoChain.anyTypeSymbol; - this._cachedFunctionArgumentsSymbol.setResolved(); - - var functionArgumentsDecl = new TypeScript.PullSynthesizedDecl("arguments", "arguments", 2048 /* Parameter */, 0 /* None */, null, this.semanticInfoChain); - functionArgumentsDecl.setSymbol(this._cachedFunctionArgumentsSymbol); - this._cachedFunctionArgumentsSymbol.addDeclaration(functionArgumentsDecl); - } - - return this._cachedFunctionArgumentsSymbol; - }; - - PullTypeResolver.prototype.getApparentType = function (type) { - if (type.isTypeParameter()) { - var baseConstraint = type.getBaseConstraint(this.semanticInfoChain); - if (baseConstraint === this.semanticInfoChain.anyTypeSymbol) { - return this.semanticInfoChain.emptyTypeSymbol; - } else { - type = baseConstraint; - } - } - if (type.isPrimitive()) { - if (type === this.semanticInfoChain.numberTypeSymbol) { - return this.cachedNumberInterfaceType(); - } - if (type === this.semanticInfoChain.booleanTypeSymbol) { - return this.cachedBooleanInterfaceType(); - } - if (type === this.semanticInfoChain.stringTypeSymbol) { - return this.cachedStringInterfaceType(); - } - return type; - } - if (type.isEnum()) { - return this.cachedNumberInterfaceType(); - } - return type; - }; - - PullTypeResolver.prototype.setTypeChecked = function (ast, context) { - context.setTypeChecked(ast); - }; - - PullTypeResolver.prototype.canTypeCheckAST = function (ast, context) { - return context.canTypeCheckAST(ast); - }; - - PullTypeResolver.prototype.setSymbolForAST = function (ast, symbol, context) { - if (context && context.inProvisionalResolution()) { - context.setSymbolForAST(ast, symbol); - } else { - this.semanticInfoChain.setSymbolForAST(ast, symbol); - } - }; - - PullTypeResolver.prototype.getSymbolForAST = function (ast, context) { - var symbol = this.semanticInfoChain.getSymbolForAST(ast); - - if (!symbol) { - if (context && context.inProvisionalResolution()) { - symbol = context.getSymbolForAST(ast); - } - } - - return symbol; - }; - - PullTypeResolver.prototype.getASTForDecl = function (decl) { - return this.semanticInfoChain.getASTForDecl(decl); - }; - - PullTypeResolver.prototype.getNewErrorTypeSymbol = function (name) { - if (typeof name === "undefined") { name = null; } - return new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, name); - }; - - PullTypeResolver.prototype.getEnclosingDecl = function (decl) { - var declPath = decl.getParentPath(); - - if (declPath.length > 1 && declPath[declPath.length - 1] === decl) { - return declPath[declPath.length - 2]; - } else { - return declPath[declPath.length - 1]; - } - }; - - PullTypeResolver.prototype.getExportedMemberSymbol = function (symbol, parent) { - if (!(symbol.kind & (65536 /* Method */ | 4096 /* Property */))) { - var isContainer = (parent.kind & (4 /* Container */ | 32 /* DynamicModule */)) !== 0; - var containerType = !isContainer ? parent.getAssociatedContainerType() : parent; - - if (isContainer && containerType) { - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol; - } - - return null; - } - } - - return symbol; - }; - - PullTypeResolver.prototype._getNamedPropertySymbolOfAugmentedType = function (symbolName, parent) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, 68147712 /* SomeValue */, parent); - if (memberSymbol) { - return memberSymbol; - } - - if (this.cachedFunctionInterfaceType() && parent.isFunctionType()) { - memberSymbol = this.cachedFunctionInterfaceType().findMember(symbolName, true); - if (memberSymbol) { - return memberSymbol; - } - } - - if (this.cachedObjectInterfaceType()) { - return this.cachedObjectInterfaceType().findMember(symbolName, true); - } - - return null; - }; - - PullTypeResolver.prototype.getNamedPropertySymbol = function (symbolName, declSearchKind, parent) { - var member = null; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - - var containerType = parent.getAssociatedContainerType(); - - if (containerType) { - if (containerType.isClass()) { - return null; - } - - parent = containerType; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - } - - if (parent.kind & 164 /* SomeContainer */) { - var typeDeclarations = parent.getDeclarations(); - var childDecls = null; - - for (var j = 0; j < typeDeclarations.length; j++) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - member = childDecls[0].getSymbol(); - - if (!member) { - member = childDecls[0].getSignatureSymbol(); - } - return this.getExportedMemberSymbol(member, parent); - } - - if ((declSearchKind & 58728795 /* SomeType */) !== 0 || (declSearchKind & 68147712 /* SomeValue */) !== 0) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, 128 /* TypeAlias */); - if (childDecls.length && childDecls[0].kind === 128 /* TypeAlias */) { - var aliasSymbol = this.getExportedMemberSymbol(childDecls[0].getSymbol(), parent); - if (aliasSymbol) { - if ((declSearchKind & 58728795 /* SomeType */) !== 0) { - var typeSymbol = aliasSymbol.getExportAssignedTypeSymbol(); - if (typeSymbol) { - return typeSymbol; - } - } else { - var valueSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - return valueSymbol; - } - } - - return aliasSymbol; - } - } - } - } - } - }; - - PullTypeResolver.prototype.getSymbolFromDeclPath = function (symbolName, declPath, declSearchKind) { - var _this = this; - var symbol = null; - - var decl = null; - var childDecls; - var declSymbol = null; - var declMembers; - var pathDeclKind; - var valDecl = null; - var kind; - var instanceSymbol = null; - var instanceType = null; - var childSymbol = null; - - var allowedContainerDeclKind = 4 /* Container */ | 32 /* DynamicModule */; - if (TypeScript.hasFlag(declSearchKind, 67108864 /* EnumMember */)) { - allowedContainerDeclKind |= 64 /* Enum */; - } - - var isAcceptableAlias = function (symbol) { - if (symbol.isAlias()) { - _this.resolveDeclaredSymbol(symbol); - if (TypeScript.hasFlag(declSearchKind, 164 /* SomeContainer */)) { - if (symbol.assignedContainer() || symbol.getExportAssignedContainerSymbol()) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 58728795 /* SomeType */)) { - var type = symbol.getExportAssignedTypeSymbol(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - - var type = symbol.assignedType(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 68147712 /* SomeValue */ & ~67108864 /* EnumMember */)) { - if (symbol.assignedType() && symbol.assignedType().isError()) { - return true; - } else if (symbol.assignedValue() || symbol.getExportAssignedValueSymbol()) { - return true; - } else { - var assignedType = symbol.assignedType(); - if (assignedType && assignedType.isContainer() && assignedType.getInstanceType()) { - return true; - } - - var decls = symbol.getDeclarations(); - var ast = decls[0].ast(); - return ast.moduleReference.kind() === 245 /* ExternalModuleReference */; - } - } - } - - return false; - }; - - var tryFindAlias = function (decl) { - var childDecls = decl.searchChildDecls(symbolName, 128 /* TypeAlias */); - - if (childDecls.length) { - var sym = childDecls[0].getSymbol(); - if (isAcceptableAlias(sym)) { - return sym; - } - } - return null; - }; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - if (decl.flags & 2097152 /* DeclaredInAWithBlock */) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (pathDeclKind & allowedContainerDeclKind) { - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - return childDecls[0].getSymbol(); - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - - if (declSearchKind & 68147712 /* SomeValue */) { - instanceSymbol = decl.getSymbol().getInstanceSymbol(); - - if (instanceSymbol) { - instanceType = instanceSymbol.type; - - childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, instanceType); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } - - valDecl = decl.getValueDecl(); - - if (valDecl) { - decl = valDecl; - } - } - - declSymbol = decl.getSymbol().type; - - var childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, declSymbol); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } else if ((declSearchKind & (58728795 /* SomeType */ | 164 /* SomeContainer */)) || !(pathDeclKind & 8 /* Class */)) { - var candidateSymbol = null; - - if (pathDeclKind === 131072 /* FunctionExpression */ && symbolName === decl.getFunctionExpressionName()) { - candidateSymbol = decl.getSymbol(); - } - - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - if (decl.kind & 1032192 /* SomeFunction */) { - decl.ensureSymbolIsBound(); - } - return childDecls[0].getSymbol(); - } - - if (candidateSymbol) { - return candidateSymbol; - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - } - } - - symbol = this.semanticInfoChain.findSymbol([symbolName], declSearchKind); - if (symbol) { - return symbol; - } - - if (!TypeScript.hasFlag(declSearchKind, 128 /* TypeAlias */)) { - symbol = this.semanticInfoChain.findSymbol([symbolName], 128 /* TypeAlias */); - if (symbol && isAcceptableAlias(symbol)) { - return symbol; - } - } - - return null; - }; - - PullTypeResolver.prototype.getVisibleDeclsFromDeclPath = function (declPath, declSearchKind) { - var result = []; - var decl = null; - var childDecls; - var pathDeclKind; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - var declKind = decl.kind; - - if (declKind !== 8 /* Class */ && declKind !== 16 /* Interface */) { - this.addFilteredDecls(decl.getChildDecls(), declSearchKind, result); - } - - switch (declKind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - var otherDecls = this.semanticInfoChain.findDeclsFromPath(declPath.slice(0, i + 1), 164 /* SomeContainer */); - for (var j = 0, m = otherDecls.length; j < m; j++) { - var otherDecl = otherDecls[j]; - if (otherDecl === decl) { - continue; - } - - var otherDeclChildren = otherDecl.getChildDecls(); - for (var k = 0, s = otherDeclChildren.length; k < s; k++) { - var otherDeclChild = otherDeclChildren[k]; - if ((otherDeclChild.flags & 1 /* Exported */) && (otherDeclChild.kind & declSearchKind)) { - result.push(otherDeclChild); - } - } - } - - break; - - case 8 /* Class */: - case 16 /* Interface */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - - case 131072 /* FunctionExpression */: - var functionExpressionName = decl.getFunctionExpressionName(); - if (functionExpressionName) { - result.push(decl); - } - - case 16384 /* Function */: - case 32768 /* ConstructorMethod */: - case 65536 /* Method */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - } - } - - var topLevelDecls = this.semanticInfoChain.topLevelDecls(); - for (var i = 0, n = topLevelDecls.length; i < n; i++) { - var topLevelDecl = topLevelDecls[i]; - if (declPath.length > 0 && topLevelDecl.fileName() === declPath[0].fileName()) { - continue; - } - - if (!topLevelDecl.isExternalModule()) { - this.addFilteredDecls(topLevelDecl.getChildDecls(), declSearchKind, result); - } - } - - return result; - }; - - PullTypeResolver.prototype.addFilteredDecls = function (decls, declSearchKind, result) { - if (decls.length) { - for (var i = 0, n = decls.length; i < n; i++) { - var decl = decls[i]; - if (decl.kind & declSearchKind) { - result.push(decl); - } - } - } - }; - - PullTypeResolver.prototype.getVisibleDecls = function (enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - return this.getVisibleDeclsFromDeclPath(declPath, declSearchKind); - }; - - PullTypeResolver.prototype.getVisibleContextSymbols = function (enclosingDecl, context) { - var contextualTypeSymbol = context.getContextualType(); - if (!contextualTypeSymbol || this.isAnyOrEquivalent(contextualTypeSymbol)) { - return null; - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - var members = contextualTypeSymbol.getAllMembers(declSearchKind, 2 /* externallyVisible */); - - for (var i = 0; i < members.length; i++) { - members[i].setUnresolved(); - } - - return members; - }; - - PullTypeResolver.prototype.getVisibleMembersFromExpression = function (expression, enclosingDecl, context) { - var lhs = this.resolveAST(expression, false, context); - - if (isTypesOnlyLocation(expression) && (lhs.kind === 8 /* Class */ || lhs.kind === 16 /* Interface */ || lhs.kind === 64 /* Enum */)) { - return null; - } - - var lhsType = lhs.type; - if (!lhsType) { - return null; - } - - this.resolveDeclaredSymbol(lhsType, context); - - if (lhsType.isContainer() && lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return null; - } - - var memberVisibilty = 2 /* externallyVisible */; - var containerSymbol = lhsType; - if (containerSymbol.kind === 33554432 /* ConstructorType */) { - containerSymbol = containerSymbol.getConstructSignatures()[0].returnType; - } - - if (containerSymbol && containerSymbol.isClass()) { - var declPath = enclosingDecl.getParentPath(); - if (declPath && declPath.length) { - var declarations = containerSymbol.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - var declaration = declarations[i]; - if (TypeScript.ArrayUtilities.contains(declPath, declaration)) { - memberVisibilty = 1 /* internallyVisible */; - break; - } - } - } - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - var members = []; - - if (lhsType.isContainer()) { - var exportedAssignedContainerSymbol = lhsType.getExportAssignedContainerSymbol(); - if (exportedAssignedContainerSymbol) { - lhsType = exportedAssignedContainerSymbol; - } - } - - lhsType = this.getApparentType(lhsType); - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - members = lhsType.getAllMembers(declSearchKind, memberVisibilty); - - if (lhsType.isContainer()) { - var associatedInstance = lhsType.getInstanceSymbol(); - if (associatedInstance) { - var instanceType = associatedInstance.type; - this.resolveDeclaredSymbol(instanceType, context); - var instanceMembers = instanceType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(instanceMembers); - } - - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - if (exportedContainer) { - var exportedContainerMembers = exportedContainer.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(exportedContainerMembers); - } - } else if (!lhsType.isConstructor() && !lhsType.isEnum()) { - var associatedContainerSymbol = lhsType.getAssociatedContainerType(); - if (associatedContainerSymbol) { - var containerType = associatedContainerSymbol.type; - this.resolveDeclaredSymbol(containerType, context); - var containerMembers = containerType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(containerMembers); - } - } - - if (lhsType.isFunctionType() && this.cachedFunctionInterfaceType()) { - members = members.concat(this.cachedFunctionInterfaceType().getAllMembers(declSearchKind, 2 /* externallyVisible */)); - } - - return members; - }; - - PullTypeResolver.prototype.isAnyOrEquivalent = function (type) { - return (type === this.semanticInfoChain.anyTypeSymbol) || type.isError(); - }; - - PullTypeResolver.prototype.resolveExternalModuleReference = function (idText, currentFileName) { - var originalIdText = idText; - var symbol = null; - - if (TypeScript.isRelative(originalIdText)) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - symbol = this.semanticInfoChain.findExternalModule(path + idText); - } else { - idText = originalIdText; - - symbol = this.semanticInfoChain.findAmbientExternalModuleInGlobalContext(TypeScript.quoteStr(originalIdText)); - - if (!symbol) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - - while (symbol === null && path != "") { - symbol = this.semanticInfoChain.findExternalModule(path + idText); - if (symbol === null) { - if (path === '/') { - path = ''; - } else { - path = TypeScript.normalizePath(path + ".."); - path = path && path != '/' ? path + '/' : path; - } - } - } - } - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveDeclaredSymbol = function (symbol, context) { - if (!symbol || symbol.isResolved || symbol.isTypeReference()) { - return symbol; - } - - if (!context) { - context = new TypeScript.PullTypeResolutionContext(this); - } - - return this.resolveDeclaredSymbolWorker(symbol, context); - }; - - PullTypeResolver.prototype.resolveDeclaredSymbolWorker = function (symbol, context) { - if (!symbol || symbol.isResolved) { - return symbol; - } - - if (symbol.inResolution) { - if (!symbol.type && !symbol.isType()) { - symbol.type = this.semanticInfoChain.anyTypeSymbol; - } - - return symbol; - } - - var decls = symbol.getDeclarations(); - - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - - var ast = this.semanticInfoChain.getASTForDecl(decl); - - if (!ast || (ast.kind() === 139 /* GetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (ast.kind() === 140 /* SetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 236 /* CatchClause */ && ast.parent.identifier === ast) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ && ast.parent.identifier === ast) { - return symbol; - } - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - var resolvedSymbol; - if (enclosingModule) { - resolvedSymbol = this.resolveSingleModuleDeclaration(enclosingModule, ast, context); - } else if (ast.kind() === 120 /* SourceUnit */ && decl.kind === 32 /* DynamicModule */) { - resolvedSymbol = this.resolveModuleSymbol(decl.getSymbol(), context, null, null, ast); - } else { - TypeScript.Debug.assert(ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */); - resolvedSymbol = this.resolveAST(ast, false, context); - } - - if (decl.kind === 2048 /* Parameter */ && !symbol.isResolved && !symbol.type && resolvedSymbol && symbol.anyDeclHasFlag(8388608 /* PropertyParameter */ | 67108864 /* ConstructorParameter */)) { - symbol.type = resolvedSymbol.type; - symbol.setResolved(); - } - } - - if (!symbol.isResolved) { - TypeScript.Debug.assert(!symbol.inResolution); - - symbol.setResolved(); - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveOtherDecl = function (otherDecl, context) { - var astForOtherDecl = this.getASTForDecl(otherDecl); - var moduleDecl = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(astForOtherDecl); - if (moduleDecl) { - this.resolveSingleModuleDeclaration(moduleDecl, astForOtherDecl, context); - } else { - this.resolveAST(astForOtherDecl, false, context); - } - }; - - PullTypeResolver.prototype.resolveOtherDeclarations = function (astName, context) { - var _this = this; - var resolvedDecl = this.semanticInfoChain.getDeclForAST(astName); - var symbol = resolvedDecl.getSymbol(); - - var allDecls = symbol.getDeclarations(); - this.inResolvingOtherDeclsWalker.walkOtherPullDecls(resolvedDecl, symbol.getDeclarations(), function (otherDecl) { - return _this.resolveOtherDecl(otherDecl, context); - }); - }; - - PullTypeResolver.prototype.resolveSourceUnit = function (sourceUnit, context) { - var enclosingDecl = this.getEnclosingDeclForAST(sourceUnit); - var moduleSymbol = enclosingDecl.getSymbol(); - this.ensureAllSymbolsAreBound(moduleSymbol); - - this.resolveFirstExportAssignmentStatement(sourceUnit.moduleElements, context); - this.resolveAST(sourceUnit.moduleElements, false, context); - - if (this.canTypeCheckAST(sourceUnit, context)) { - this.typeCheckSourceUnit(sourceUnit, context); - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.typeCheckSourceUnit = function (sourceUnit, context) { - var _this = this; - this.setTypeChecked(sourceUnit, context); - - this.resolveAST(sourceUnit.moduleElements, false, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInSourceUnit(sourceUnit); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInSourceUnit = function (sourceUnit) { - var _this = this; - var enclosingDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - - var doesImportNameExistInOtherFiles = function (name) { - var importSymbol = _this.semanticInfoChain.findTopLevelSymbol(name, 128 /* TypeAlias */, null); - return importSymbol && importSymbol.isAlias(); - }; - - this.checkUniquenessOfImportNames([enclosingDecl], doesImportNameExistInOtherFiles); - }; - - PullTypeResolver.prototype.resolveEnumDeclaration = function (ast, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - var containerSymbol = containerDecl.getSymbol(); - - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - containerSymbol.setResolved(); - - this.resolveOtherDeclarations(ast, context); - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckEnumDeclaration(ast, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.typeCheckEnumDeclaration = function (ast, context) { - var _this = this; - this.setTypeChecked(ast, context); - - this.resolveAST(ast.enumElements, false, context); - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(containerDecl, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.checkInitializersInEnumDeclarations(containerDecl, context); - }); - - if (!TypeScript.ASTHelpers.enumIsElided(ast)) { - this.checkNameForCompilerGeneratedDeclarationCollision(ast, true, ast.identifier, context); - } - }; - - PullTypeResolver.prototype.postTypeCheckEnumDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.checkInitializersInEnumDeclarations = function (decl, context) { - var symbol = decl.getSymbol(); - - var declarations = symbol.getDeclarations(); - if (decl !== declarations[0]) { - return; - } - - var seenEnumDeclWithNoFirstMember = false; - for (var i = 0; i < declarations.length; ++i) { - var currentDecl = declarations[i]; - - var ast = currentDecl.ast(); - if (ast.enumElements.nonSeparatorCount() === 0) { - continue; - } - - var firstVariable = ast.enumElements.nonSeparatorAt(0); - if (!firstVariable.equalsValueClause) { - if (!seenEnumDeclWithNoFirstMember) { - seenEnumDeclWithNoFirstMember = true; - } else { - this.semanticInfoChain.addDiagnosticFromAST(firstVariable, TypeScript.DiagnosticCode.In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleDeclaration = function (ast, context) { - var result; - - if (ast.stringLiteral) { - result = this.resolveSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - result = this.resolveSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckModuleDeclaration(ast, context); - } - - return result; - }; - - PullTypeResolver.prototype.ensureAllSymbolsAreBound = function (containerSymbol) { - if (containerSymbol) { - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleSymbol = function (containerSymbol, context, moduleDeclAST, moduleDeclNameAST, sourceUnitAST) { - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - this.ensureAllSymbolsAreBound(containerSymbol); - - var instanceSymbol = containerSymbol.getInstanceSymbol(); - - if (instanceSymbol) { - this.resolveDeclaredSymbol(instanceSymbol, context); - } - - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDeclAST, moduleDeclNameAST); - if (isLastName) { - this.resolveFirstExportAssignmentStatement(moduleDeclAST.moduleElements, context); - } else if (sourceUnitAST) { - this.resolveFirstExportAssignmentStatement(sourceUnitAST.moduleElements, context); - } - - containerSymbol.setResolved(); - - if (moduleDeclNameAST) { - this.resolveOtherDeclarations(moduleDeclNameAST, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.resolveFirstExportAssignmentStatement = function (moduleElements, context) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - if (moduleElement.kind() === 134 /* ExportAssignment */) { - this.resolveExportAssignmentStatement(moduleElement, context); - return; - } - } - }; - - PullTypeResolver.prototype.resolveSingleModuleDeclaration = function (ast, astName, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - var containerSymbol = containerDecl.getSymbol(); - - return this.resolveModuleSymbol(containerSymbol, context, ast, astName, null); - }; - - PullTypeResolver.prototype.typeCheckModuleDeclaration = function (ast, context) { - if (ast.stringLiteral) { - this.typeCheckSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - this.typeCheckSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - }; - - PullTypeResolver.prototype.typeCheckSingleModuleDeclaration = function (ast, astName, context) { - var _this = this; - this.setTypeChecked(ast, context); - - if (TypeScript.ASTHelpers.isLastNameOfModule(ast, astName)) { - this.resolveAST(ast.moduleElements, false, context); - } - - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - this.validateVariableDeclarationGroups(containerDecl, context); - - if (ast.stringLiteral) { - if (TypeScript.isRelative(ast.stringLiteral.valueText())) { - this.semanticInfoChain.addDiagnosticFromAST(ast.stringLiteral, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_specify_relative_module_name); - } - } - - if (!TypeScript.ASTHelpers.moduleIsElided(ast) && !ast.stringLiteral) { - this.checkNameForCompilerGeneratedDeclarationCollision(astName, true, astName, context); - } - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInModule(containerDecl); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInModule = function (decl) { - var symbol = decl.getSymbol(); - if (!symbol) { - return; - } - - var decls = symbol.getDeclarations(); - - if (decls[0] !== decl) { - return; - } - - this.checkUniquenessOfImportNames(decls); - }; - - PullTypeResolver.prototype.checkUniquenessOfImportNames = function (decls, doesNameExistOutside) { - var _this = this; - var importDeclarationNames; - - for (var i = 0; i < decls.length; ++i) { - var childDecls = decls[i].getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[childDecl.name] = true; - } - } - } - - if (!importDeclarationNames && !doesNameExistOutside) { - return; - } - - for (var i = 0; i < decls.length; ++i) { - this.scanVariableDeclarationGroups(decls[i], function (firstDeclInGroup) { - var nameConflict = importDeclarationNames && importDeclarationNames[firstDeclInGroup.name]; - if (!nameConflict) { - nameConflict = doesNameExistOutside && doesNameExistOutside(firstDeclInGroup.name); - if (nameConflict) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[firstDeclInGroup.name] = true; - } - } - - if (nameConflict) { - _this.semanticInfoChain.addDiagnosticFromAST(firstDeclInGroup.ast(), TypeScript.DiagnosticCode.Variable_declaration_cannot_have_the_same_name_as_an_import_declaration); - } - }); - } - }; - - PullTypeResolver.prototype.scanVariableDeclarationGroups = function (enclosingDecl, firstDeclHandler, subsequentDeclHandler) { - var declGroups = enclosingDecl.getVariableDeclGroups(); - - for (var i = 0; i < declGroups.length; i++) { - var firstSymbol = null; - var enclosingDeclForFirstSymbol = null; - - if (enclosingDecl.kind === 1 /* Script */ && declGroups[i].length) { - var name = declGroups[i][0].name; - var candidateSymbol = this.semanticInfoChain.findTopLevelSymbol(name, 512 /* Variable */, enclosingDecl); - if (candidateSymbol) { - if (!candidateSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */)) { - if (!candidateSymbol.isResolved) { - this.resolveDeclaredSymbol(candidateSymbol); - } - firstSymbol = candidateSymbol; - } - } - } - - for (var j = 0; j < declGroups[i].length; j++) { - var decl = declGroups[i][j]; - - var name = decl.name; - - var symbol = decl.getSymbol(); - - if (j === 0) { - firstDeclHandler(decl); - if (!subsequentDeclHandler) { - break; - } - - if (!firstSymbol || !firstSymbol.type) { - firstSymbol = symbol; - continue; - } - } - - subsequentDeclHandler(decl, firstSymbol); - } - } - }; - - PullTypeResolver.prototype.postTypeCheckModuleDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.isTypeRefWithoutTypeArgs = function (term) { - if (term.kind() === 11 /* IdentifierName */) { - return true; - } else if (term.kind() === 121 /* QualifiedName */) { - var binex = term; - - if (binex.right.kind() === 11 /* IdentifierName */) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.createInstantiatedType = function (type, typeArguments) { - if (!type.isGeneric()) { - return type; - } - - var typeParameters = type.getTypeArgumentsOrTypeParameters(); - - var typeParameterArgumentMap = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].pullSymbolID] = typeArguments[i] || new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, typeParameters[i].name); - } - - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); - }; - - PullTypeResolver.prototype.resolveReferenceTypeDeclaration = function (classOrInterface, name, heritageClauses, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(typeDecl); - var typeDeclSymbol = typeDecl.getSymbol(); - var typeDeclIsClass = classOrInterface.kind() === 131 /* ClassDeclaration */; - var hasVisited = this.getSymbolForAST(classOrInterface, context) !== null; - - if ((typeDeclSymbol.isResolved && hasVisited) || (typeDeclSymbol.inResolution && !context.isInBaseTypeResolution())) { - return typeDeclSymbol; - } - - var wasResolving = typeDeclSymbol.inResolution; - typeDeclSymbol.startResolving(); - - var typeRefDecls = typeDeclSymbol.getDeclarations(); - - for (var i = 0; i < typeRefDecls.length; i++) { - var childDecls = typeRefDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - if (!typeDeclSymbol.isResolved) { - var typeDeclTypeParameters = typeDeclSymbol.getTypeParameters(); - for (var i = 0; i < typeDeclTypeParameters.length; i++) { - this.resolveDeclaredSymbol(typeDeclTypeParameters[i], context); - } - } - - var wasInBaseTypeResolution = context.startBaseTypeResolution(); - - if (!typeDeclIsClass && !hasVisited) { - typeDeclSymbol.resetKnownBaseTypeCount(); - } - - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - if (extendsClause) { - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); i < extendsClause.typeNames.nonSeparatorCount(); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var parentType = this.resolveTypeReference(extendsClause.typeNames.nonSeparatorAt(i), context); - - if (typeDeclSymbol.isValidBaseKind(parentType, true)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - - if (!typeDeclSymbol.hasBase(parentType) && !parentType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addExtendedType(parentType); - - var specializations = typeDeclSymbol.getKnownSpecializations(); - - for (var j = 0; j < specializations.length; j++) { - specializations[j].addExtendedType(parentType); - } - } - } else if (parentType && !this.getSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), context)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - } - } - } - - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (implementsClause && typeDeclIsClass) { - var extendsCount = extendsClause ? extendsClause.typeNames.nonSeparatorCount() : 0; - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); ((i - extendsCount) >= 0) && ((i - extendsCount) < implementsClause.typeNames.nonSeparatorCount()); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var implementedTypeAST = implementsClause.typeNames.nonSeparatorAt(i - extendsCount); - var implementedType = this.resolveTypeReference(implementedTypeAST, context); - - if (typeDeclSymbol.isValidBaseKind(implementedType, false)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - - if (!typeDeclSymbol.hasBase(implementedType) && !implementedType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addImplementedType(implementedType); - } - } else if (implementedType && !this.getSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), context)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - } - } - } - - context.doneBaseTypeResolution(wasInBaseTypeResolution); - - if (wasInBaseTypeResolution) { - typeDeclSymbol.inResolution = false; - - this.typeCheckCallBacks.push(function (context) { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - _this.resolveClassDeclaration(classOrInterface, context); - } else { - _this.resolveInterfaceDeclaration(classOrInterface, context); - } - }); - - return typeDeclSymbol; - } - - this.setSymbolForAST(name, typeDeclSymbol, context); - this.setSymbolForAST(classOrInterface, typeDeclSymbol, context); - - typeDeclSymbol.setResolved(); - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.resolveClassDeclaration = function (classDeclAST, context) { - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - if (!classDeclSymbol.isResolved) { - this.resolveReferenceTypeDeclaration(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, context); - - var constructorMethod = classDeclSymbol.getConstructorMethod(); - var extendedTypes = classDeclSymbol.getExtendedTypes(); - var parentType = extendedTypes.length ? extendedTypes[0] : null; - - if (constructorMethod) { - if (parentType) { - var parentConstructorSymbol = parentType.getConstructorMethod(); - - if (parentConstructorSymbol) { - var parentConstructorTypeSymbol = parentConstructorSymbol.type; - var constructorTypeSymbol = constructorMethod.type; - if (!constructorTypeSymbol.hasBase(parentConstructorTypeSymbol)) { - constructorTypeSymbol.addExtendedType(parentConstructorTypeSymbol); - } - } - } - - if (!classDeclSymbol.isResolved) { - return classDeclSymbol; - } - } - - this.resolveOtherDeclarations(classDeclAST, context); - } - - if (this.canTypeCheckAST(classDeclAST, context)) { - this.typeCheckClassDeclaration(classDeclAST, context); - } - - return classDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckTypeParametersOfTypeDeclaration = function (classOrInterface, context) { - var _this = this; - var typeParametersList = classOrInterface.kind() == 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - if (typeParametersList) { - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var typeDeclSymbol = typeDecl.getSymbol(); - - for (var i = 0; i < typeParametersList.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParametersList.typeParameters.nonSeparatorAt(i); - this.resolveTypeParameterDeclaration(typeParameterAST, context); - - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.checkSymbolPrivacy(typeDeclSymbol, typeParameterSymbol, function (symbol) { - return _this.typeParameterOfTypeDeclarationPrivacyErrorReporter(classOrInterface, typeParameterAST, typeParameterSymbol, symbol, context); - }); - } - } - }; - - PullTypeResolver.prototype.typeCheckClassDeclaration = function (classDeclAST, context) { - this.setTypeChecked(classDeclAST, context); - - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - this.checkNameForCompilerGeneratedDeclarationCollision(classDeclAST, true, classDeclAST.identifier, context); - this.resolveAST(classDeclAST.classElements, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(classDeclAST, context); - this.typeCheckBases(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, classDeclSymbol, this.getEnclosingDecl(classDecl), context); - - if (!classDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(classDeclSymbol, classDecl, context); - } - - this.checkTypeForDuplicateIndexSignatures(classDeclSymbol); - }; - - PullTypeResolver.prototype.postTypeCheckClassDeclaration = function (classDeclAST, context) { - this.checkThisCaptureVariableCollides(classDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveTypeSymbolSignatures = function (typeSymbol, context) { - var callSignatures = typeSymbol.getCallSignatures(); - for (var i = 0; i < callSignatures.length; i++) { - this.resolveDeclaredSymbol(callSignatures[i], context); - } - - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; i < constructSignatures.length; i++) { - this.resolveDeclaredSymbol(constructSignatures[i], context); - } - - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignatures.length; i++) { - this.resolveDeclaredSymbol(indexSignatures[i], context); - } - }; - - PullTypeResolver.prototype.resolveInterfaceDeclaration = function (interfaceDeclAST, context) { - this.resolveReferenceTypeDeclaration(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveTypeSymbolSignatures(interfaceDeclSymbol, context); - - if (interfaceDeclSymbol.isResolved) { - this.resolveOtherDeclarations(interfaceDeclAST, context); - - if (this.canTypeCheckAST(interfaceDeclAST, context)) { - this.typeCheckInterfaceDeclaration(interfaceDeclAST, context); - } - } - - return interfaceDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckInterfaceDeclaration = function (interfaceDeclAST, context) { - this.setTypeChecked(interfaceDeclAST, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveAST(interfaceDeclAST.body.typeMembers, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(interfaceDeclAST, context); - this.typeCheckBases(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, interfaceDeclSymbol, this.getEnclosingDecl(interfaceDecl), context); - - if (!interfaceDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(interfaceDeclSymbol, interfaceDecl, context); - } - - var allInterfaceDecls = interfaceDeclSymbol.getDeclarations(); - if (interfaceDecl === allInterfaceDecls[allInterfaceDecls.length - 1]) { - this.checkTypeForDuplicateIndexSignatures(interfaceDeclSymbol); - } - - if (!this.checkInterfaceDeclForIdenticalTypeParameters(interfaceDeclAST, context)) { - this.semanticInfoChain.addDiagnosticFromAST(interfaceDeclAST.identifier, TypeScript.DiagnosticCode.All_declarations_of_an_interface_must_have_identical_type_parameters); - } - }; - - PullTypeResolver.prototype.checkInterfaceDeclForIdenticalTypeParameters = function (interfaceDeclAST, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - if (!interfaceDeclSymbol.isGeneric()) { - return true; - } - - var firstInterfaceDecl = interfaceDeclSymbol.getDeclarations()[0]; - if (firstInterfaceDecl == interfaceDecl) { - return true; - } - - var typeParameters = interfaceDecl.getTypeParameters(); - var firstInterfaceDeclTypeParameters = firstInterfaceDecl.getTypeParameters(); - - if (typeParameters.length != firstInterfaceDeclTypeParameters.length) { - return false; - } - - for (var i = 0; i < typeParameters.length; i++) { - var typeParameter = typeParameters[i]; - var firstInterfaceDeclTypeParameter = firstInterfaceDeclTypeParameters[i]; - - if (typeParameter.name != firstInterfaceDeclTypeParameter.name) { - return false; - } - - var typeParameterSymbol = typeParameter.getSymbol(); - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter); - var firstInterfaceDeclTypeParameterAST = this.semanticInfoChain.getASTForDecl(firstInterfaceDeclTypeParameter); - - if (!!typeParameterAST.constraint != !!firstInterfaceDeclTypeParameterAST.constraint) { - return false; - } - - if (typeParameterAST.constraint) { - var typeParameterConstraint = this.resolveAST(typeParameterAST.constraint, false, context); - if (!this.typesAreIdenticalWithNewEnclosingTypes(typeParameterConstraint, typeParameterSymbol.getConstraint(), context)) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.checkTypeForDuplicateIndexSignatures = function (enclosingTypeSymbol) { - var indexSignatures = enclosingTypeSymbol.getOwnIndexSignatures(); - var firstStringIndexer = null; - var firstNumberIndexer = null; - for (var i = 0; i < indexSignatures.length; i++) { - var currentIndexer = indexSignatures[i]; - var currentParameterType = currentIndexer.parameters[0].type; - TypeScript.Debug.assert(currentParameterType); - if (currentParameterType === this.semanticInfoChain.stringTypeSymbol) { - if (firstStringIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_string_index_signature, null, [this.semanticInfoChain.locationFromAST(firstStringIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstStringIndexer = currentIndexer; - } - } else if (currentParameterType === this.semanticInfoChain.numberTypeSymbol) { - if (firstNumberIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_number_index_signature, null, [this.semanticInfoChain.locationFromAST(firstNumberIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstNumberIndexer = currentIndexer; - } - } - } - }; - - PullTypeResolver.prototype.filterSymbol = function (symbol, kind, enclosingDecl, context) { - if (symbol) { - if (symbol.kind & kind) { - return symbol; - } - - if (symbol.isAlias()) { - this.resolveDeclaredSymbol(symbol, context); - - var alias = symbol; - if (kind & 164 /* SomeContainer */) { - return alias.getExportAssignedContainerSymbol(); - } else if (kind & 58728795 /* SomeType */) { - return alias.getExportAssignedTypeSymbol(); - } else if (kind & 68147712 /* SomeValue */) { - return alias.getExportAssignedValueSymbol(); - } - } - } - return null; - }; - - PullTypeResolver.prototype.getMemberSymbolOfKind = function (symbolName, kind, pullTypeSymbol, enclosingDecl, context) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, kind, pullTypeSymbol); - - return { - symbol: this.filterSymbol(memberSymbol, kind, enclosingDecl, context), - aliasSymbol: memberSymbol && memberSymbol.isAlias() ? memberSymbol : null - }; - }; - - PullTypeResolver.prototype.resolveIdentifierOfInternalModuleReference = function (importDecl, identifier, moduleSymbol, enclosingDecl, context) { - var rhsName = identifier.valueText(); - if (rhsName.length === 0) { - return null; - } - - var moduleTypeSymbol = moduleSymbol.type; - var memberSymbol = this.getMemberSymbolOfKind(rhsName, 164 /* SomeContainer */, moduleTypeSymbol, enclosingDecl, context); - var containerSymbol = memberSymbol.symbol; - var valueSymbol = null; - var typeSymbol = null; - var aliasSymbol = null; - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - aliasSymbol = memberSymbol.aliasSymbol; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - var aliasedAssignedValue = containerSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = containerSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = containerSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - aliasSymbol = containerSymbol; - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return null; - } - - if (!valueSymbol) { - if (moduleTypeSymbol.getInstanceSymbol()) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 68147712 /* SomeValue */, moduleTypeSymbol.getInstanceSymbol().type, enclosingDecl, context); - valueSymbol = memberSymbol.symbol; - if (valueSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - } - - if (!typeSymbol) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 58728795 /* SomeType */, moduleTypeSymbol, enclosingDecl, context); - typeSymbol = memberSymbol.symbol; - if (typeSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Could_not_find_symbol_0_in_module_1, [rhsName, moduleSymbol.toString()]); - return null; - } - - if (!typeSymbol && containerSymbol) { - typeSymbol = containerSymbol; - } - - return { - valueSymbol: valueSymbol, - typeSymbol: typeSymbol, - containerSymbol: containerSymbol, - aliasSymbol: aliasSymbol - }; - }; - - PullTypeResolver.prototype.resolveModuleReference = function (importDecl, moduleNameExpr, enclosingDecl, context, declPath) { - TypeScript.Debug.assert(moduleNameExpr.kind() === 121 /* QualifiedName */ || moduleNameExpr.kind() === 11 /* IdentifierName */ || moduleNameExpr.kind() === 14 /* StringLiteral */, "resolving module reference should always be either name or member reference"); - - var moduleSymbol = null; - var moduleName; - - if (moduleNameExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = moduleNameExpr; - var moduleContainer = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleContainer) { - moduleName = dottedNameAST.right.valueText(); - - moduleSymbol = this.getMemberSymbolOfKind(moduleName, 4 /* Container */, moduleContainer.type, enclosingDecl, context).symbol; - if (!moduleSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.Could_not_find_module_0_in_module_1, [moduleName, moduleContainer.toString()]); - } - } - } else { - var valueText = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.valueText() : moduleNameExpr.valueText(); - var text = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.text() : moduleNameExpr.text(); - - if (text.length > 0) { - var resolvedModuleNameSymbol = this.getSymbolFromDeclPath(valueText, declPath, 4 /* Container */); - moduleSymbol = this.filterSymbol(resolvedModuleNameSymbol, 4 /* Container */, enclosingDecl, context); - if (moduleSymbol) { - this.semanticInfoChain.setSymbolForAST(moduleNameExpr, moduleSymbol); - if (resolvedModuleNameSymbol.isAlias()) { - this.semanticInfoChain.setAliasSymbolForAST(moduleNameExpr, resolvedModuleNameSymbol); - var importDeclSymbol = importDecl.getSymbol(); - importDeclSymbol.addLinkedAliasSymbol(resolvedModuleNameSymbol); - } - } else { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameExpr, TypeScript.DiagnosticCode.Unable_to_resolve_module_reference_0, [valueText]); - } - } - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.resolveInternalModuleReference = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - - var moduleReference = importStatementAST.moduleReference; - - var aliasExpr = moduleReference.kind() === 245 /* ExternalModuleReference */ ? moduleReference.stringLiteral : moduleReference.moduleName; - - var declPath = enclosingDecl.getParentPath(); - var aliasedType = null; - var importDeclSymbol = importDecl.getSymbol(); - - if (aliasExpr.kind() === 11 /* IdentifierName */ || aliasExpr.kind() === 14 /* StringLiteral */) { - var moduleSymbol = this.resolveModuleReference(importDecl, aliasExpr, enclosingDecl, context, declPath); - if (moduleSymbol) { - aliasedType = moduleSymbol.type; - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, this.semanticInfoChain.getAliasSymbolForAST(aliasExpr)); - if (aliasedType.anyDeclHasFlag(32768 /* InitializedModule */)) { - var moduleName = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.valueText() : aliasExpr.valueText(); - var valueSymbol = this.getSymbolFromDeclPath(moduleName, declPath, 68147712 /* SomeValue */); - var instanceSymbol = aliasedType.getInstanceSymbol(); - - if (valueSymbol && (instanceSymbol != valueSymbol || valueSymbol.type === aliasedType)) { - var text = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.text() : aliasExpr.text(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(aliasExpr, TypeScript.DiagnosticCode.Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1, [text, moduleSymbol.type.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - } else { - importDeclSymbol.setAssignedValueSymbol(valueSymbol); - } - } - } else { - aliasedType = this.getNewErrorTypeSymbol(); - } - } else if (aliasExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = aliasExpr; - var moduleSymbol = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleSymbol) { - var identifierResolution = this.resolveIdentifierOfInternalModuleReference(importDecl, dottedNameAST.right, moduleSymbol, enclosingDecl, context); - if (identifierResolution) { - importDeclSymbol.setAssignedValueSymbol(identifierResolution.valueSymbol); - importDeclSymbol.setAssignedTypeSymbol(identifierResolution.typeSymbol); - importDeclSymbol.setAssignedContainerSymbol(identifierResolution.containerSymbol); - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, identifierResolution.aliasSymbol); - return null; - } - } - } - - if (!aliasedType) { - importDeclSymbol.setAssignedTypeSymbol(this.getNewErrorTypeSymbol()); - } - - return aliasedType; - }; - - PullTypeResolver.prototype.resolveImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - var aliasedType = null; - - if (importDeclSymbol.isResolved) { - return importDeclSymbol; - } - - importDeclSymbol.startResolving(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - var declPath = enclosingDecl.getParentPath(); - - aliasedType = this.resolveExternalModuleReference(modPath, importDecl.fileName()); - - if (!aliasedType) { - var path = importStatementAST.moduleReference.stringLiteral.text(); - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Unable_to_resolve_external_module_0, [path]); - aliasedType = this.getNewErrorTypeSymbol(); - } - } else { - aliasedType = this.resolveInternalModuleReference(importStatementAST, context); - } - - if (aliasedType) { - if (!aliasedType.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Module_cannot_be_aliased_to_a_non_module_type); - if (!aliasedType.isError()) { - aliasedType = this.getNewErrorTypeSymbol(); - } - } - - if (aliasedType.isContainer()) { - importDeclSymbol.setAssignedContainerSymbol(aliasedType); - } - importDeclSymbol.setAssignedTypeSymbol(aliasedType); - - this.setSymbolForAST(importStatementAST.moduleReference, aliasedType, null); - } - - importDeclSymbol.setResolved(); - - this.resolveDeclaredSymbol(importDeclSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedType(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedContainer(), context); - - if (aliasedType && importDeclSymbol.anyDeclHasFlag(1 /* Exported */)) { - importDeclSymbol.setIsUsedInExportedAlias(); - - if (aliasedType.isContainer() && aliasedType.getExportAssignedValueSymbol()) { - importDeclSymbol.setIsUsedAsValue(); - } - } - - if (this.canTypeCheckAST(importStatementAST, context)) { - this.typeCheckImportDeclaration(importStatementAST, context); - } - - return importDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckImportDeclaration = function (importStatementAST, context) { - var _this = this; - this.setTypeChecked(importStatementAST, context); - - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (this.compilationSettings.noResolve()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set, null)); - } - - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - if (enclosingDecl.kind === 32 /* DynamicModule */) { - var ast = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(this.getASTForDecl(enclosingDecl)); - if (ast && ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.isRelative(modPath)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name)); - } - } - } - } - - var checkPrivacy; - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var container = containerSymbol ? containerSymbol.getContainer() : null; - if (container && container.kind === 32 /* DynamicModule */) { - checkPrivacy = true; - } - } else { - checkPrivacy = true; - } - - if (checkPrivacy) { - var typeSymbol = importDeclSymbol.getExportAssignedTypeSymbol(); - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var valueSymbol = importDeclSymbol.getExportAssignedValueSymbol(); - - this.checkSymbolPrivacy(importDeclSymbol, containerSymbol, function (symbol) { - var messageCode = TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - - if (typeSymbol !== containerSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, typeSymbol, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1; - - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - - if (valueSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, valueSymbol.type, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - } - - this.checkNameForCompilerGeneratedDeclarationCollision(importStatementAST, true, importStatementAST.identifier, context); - }; - - PullTypeResolver.prototype.postTypeCheckImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var importSymbol = importDecl.getSymbol(); - - var isUsedAsValue = importSymbol.isUsedAsValue(); - var hasAssignedValue = importStatementAST.moduleReference.kind() !== 245 /* ExternalModuleReference */ && importSymbol.getExportAssignedValueSymbol() !== null; - - if (isUsedAsValue || hasAssignedValue) { - this.checkThisCaptureVariableCollides(importStatementAST, true, context); - } - }; - - PullTypeResolver.prototype.resolveExportAssignmentStatement = function (exportAssignmentAST, context) { - var id = exportAssignmentAST.identifier.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var valueSymbol = null; - var typeSymbol = null; - var containerSymbol = null; - - var enclosingDecl = this.getEnclosingDeclForAST(exportAssignmentAST); - var parentSymbol = enclosingDecl.getSymbol(); - - if (!parentSymbol.isType() && parentSymbol.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_used_at_the_top_level_of_external_modules); - return this.semanticInfoChain.anyTypeSymbol; - } - - var declPath = enclosingDecl !== null ? [enclosingDecl] : []; - - containerSymbol = this.getSymbolFromDeclPath(id, declPath, 164 /* SomeContainer */); - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - - var aliasSymbol = containerSymbol; - var aliasedAssignedValue = aliasSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = aliasSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = aliasSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - aliasSymbol.setTypeUsedExternally(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - } - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (!valueSymbol) { - valueSymbol = this.getSymbolFromDeclPath(id, declPath, 68147712 /* SomeValue */); - } - if (!typeSymbol) { - typeSymbol = this.getSymbolFromDeclPath(id, declPath, 58728795 /* SomeType */); - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [id])); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (valueSymbol) { - parentSymbol.setExportAssignedValueSymbol(valueSymbol); - } - if (typeSymbol) { - parentSymbol.setExportAssignedTypeSymbol(typeSymbol); - } - if (containerSymbol) { - parentSymbol.setExportAssignedContainerSymbol(containerSymbol); - } - - this.resolveDeclaredSymbol(valueSymbol, context); - this.resolveDeclaredSymbol(typeSymbol, context); - this.resolveDeclaredSymbol(containerSymbol, context); - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionTypeSignature = function (funcDeclAST, typeParameters, parameterList, returnTypeAnnotation, context) { - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - var funcDeclSymbol = functionDecl.getSymbol(); - - var signature = funcDeclSymbol.kind === 33554432 /* ConstructorType */ ? funcDeclSymbol.getConstructSignatures()[0] : funcDeclSymbol.getCallSignatures()[0]; - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveFunctionTypeSignatureParameter(parameterList.parameters.nonSeparatorAt(i), signature, functionDecl, context); - } - } - - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.setTypeChecked(funcDeclAST, context); - this.typeCheckFunctionOverloads(funcDeclAST, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionTypeSignatureParameter = function (argDeclAST, signature, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - - if (argDeclAST.typeAnnotation) { - var typeRef = this.resolveTypeReference(TypeScript.ASTHelpers.getType(argDeclAST), context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(paramSymbol, typeRef); - } else { - if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_function_type_implicitly_has_an_any_type, [argDeclAST.identifier.text()])); - } - } - - if (TypeScript.hasFlag(paramDecl.flags, 128 /* Optional */) && argDeclAST.equalsValueClause && isTypesOnlyLocation(argDeclAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.resolveFunctionExpressionParameter = function (argDeclAST, id, typeExpr, equalsValueClause, contextParam, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - var contextualType = contextParam && contextParam.type; - var isImplicitAny = false; - - if (typeExpr) { - var typeRef = this.resolveTypeReference(typeExpr, context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - var diagnostic = context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - contextualType = typeRef || contextualType; - } - if (contextualType) { - if (context.isInferentiallyTyping()) { - contextualType = context.fixAllTypeParametersReferencedByType(contextualType, this); - } - context.setTypeInContext(paramSymbol, contextualType); - } else if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - isImplicitAny = true; - } - - var canTypeCheckAST = this.canTypeCheckAST(argDeclAST, context); - if (equalsValueClause && (canTypeCheckAST || !contextualType)) { - if (contextualType) { - context.propagateContextualType(contextualType); - } - - var initExprSymbol = this.resolveAST(equalsValueClause, contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - } - - if (!initExprSymbol || !initExprSymbol.type) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [id.text()])); - - if (!contextualType) { - context.setTypeInContext(paramSymbol, this.getNewErrorTypeSymbol(paramSymbol.name)); - } - } else { - var initTypeSymbol = this.getInstanceTypeForAssignment(argDeclAST, initExprSymbol.type, context); - if (!contextualType) { - context.setTypeInContext(paramSymbol, initTypeSymbol.widenedType(this, equalsValueClause, context)); - isImplicitAny = initTypeSymbol !== paramSymbol.type; - } else { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, contextualType, argDeclAST, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(argDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol)])); - } - } - } - } - } - - if (!contextualType && !paramSymbol.isVarArg && !initTypeSymbol) { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - isImplicitAny = true; - } - - if (isImplicitAny && this.compilationSettings.noImplicitAny()) { - var functionExpressionName = paramDecl.getParentDecl().getFunctionExpressionName(); - if (functionExpressionName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [id.text(), functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_lambda_function_implicitly_has_an_any_type, [id.text()])); - } - } - - if (canTypeCheckAST) { - this.checkNameForCompilerGeneratedDeclarationCollision(argDeclAST, true, id, context); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.checkNameForCompilerGeneratedDeclarationCollision = function (astWithName, isDeclaration, name, context) { - var compilerReservedName = getCompilerReservedName(name); - switch (compilerReservedName) { - case 1 /* _this */: - this.postTypeCheckWorkitems.push(astWithName); - return; - - case 2 /* _super */: - this.checkSuperCaptureVariableCollides(astWithName, isDeclaration, context); - return; - - case 3 /* arguments */: - this.checkArgumentsCollides(astWithName, context); - return; - - case 4 /* _i */: - this.checkIndexOfRestArgumentInitializationCollides(astWithName, isDeclaration, context); - return; - - case 5 /* require */: - case 6 /* exports */: - if (isDeclaration) { - this.checkExternalModuleRequireExportsCollides(astWithName, name, context); - } - return; - } - }; - - PullTypeResolver.prototype.hasRestParameterCodeGen = function (someFunctionDecl) { - var enclosingAST = this.getASTForDecl(someFunctionDecl); - var nodeType = enclosingAST.kind(); - - if (nodeType === 129 /* FunctionDeclaration */) { - var functionDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && functionDeclaration.block && TypeScript.lastParameterIsRest(functionDeclaration.callSignature.parameterList); - } else if (nodeType === 135 /* MemberFunctionDeclaration */) { - var memberFunction = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && memberFunction.block && TypeScript.lastParameterIsRest(memberFunction.callSignature.parameterList); - } else if (nodeType === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.getParentDecl().flags, 8 /* Ambient */) && constructorDeclaration.block && TypeScript.lastParameterIsRest(constructorDeclaration.callSignature.parameterList); - } else if (nodeType === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunctionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(arrowFunctionExpression.callSignature.parameterList); - } else if (nodeType === 222 /* FunctionExpression */) { - var functionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(functionExpression.callSignature.parameterList); - } - - return false; - }; - - PullTypeResolver.prototype.checkArgumentsCollides = function (ast, context) { - if (ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - if (TypeScript.hasFlag(enclosingDecl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(enclosingDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters)); - } - } - } - }; - - PullTypeResolver.prototype.checkIndexOfRestArgumentInitializationCollides = function (ast, isDeclaration, context) { - if (!isDeclaration || ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var declPath = isDeclaration ? [enclosingDecl] : (enclosingDecl ? enclosingDecl.getParentPath() : []); - var resolvedSymbol = null; - var resolvedSymbolContainer; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (!isDeclaration) { - if (!resolvedSymbol) { - resolvedSymbol = this.resolveNameExpression(ast, context); - if (resolvedSymbol.isError()) { - return; - } - - resolvedSymbolContainer = resolvedSymbol.getContainer(); - } - - if (resolvedSymbolContainer && TypeScript.ArrayUtilities.contains(resolvedSymbolContainer.getDeclarations(), decl)) { - break; - } - } - - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter)); - } - } - } - } - }; - - PullTypeResolver.prototype.checkExternalModuleRequireExportsCollides = function (ast, name, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(name); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - if (enclosingDecl && enclosingDecl.kind === 32 /* DynamicModule */) { - var decl = this.semanticInfoChain.getDeclForAST(ast); - - if (!TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - var nameText = name.valueText(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, [nameText, nameText])); - } - } - }; - - PullTypeResolver.prototype.resolveObjectTypeTypeReference = function (objectType, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(objectType); - TypeScript.Debug.assert(interfaceDecl); - - var interfaceSymbol = interfaceDecl.getSymbol(); - TypeScript.Debug.assert(interfaceSymbol); - - if (objectType.typeMembers) { - var memberDecl = null; - var memberSymbol = null; - var memberType = null; - var typeMembers = objectType.typeMembers; - - for (var i = 0; i < typeMembers.nonSeparatorCount(); i++) { - memberDecl = this.semanticInfoChain.getDeclForAST(typeMembers.nonSeparatorAt(i)); - memberSymbol = (memberDecl.kind & 7340032 /* SomeSignature */) ? memberDecl.getSignatureSymbol() : memberDecl.getSymbol(); - - this.resolveAST(typeMembers.nonSeparatorAt(i), false, context); - - memberType = memberSymbol.type; - - if ((memberType && memberType.isGeneric()) || (memberSymbol.isSignature() && memberSymbol.isGeneric())) { - interfaceSymbol.setHasGenericMember(); - } - } - } - - interfaceSymbol.setResolved(); - - if (this.canTypeCheckAST(objectType, context)) { - this.typeCheckObjectTypeTypeReference(objectType, context); - } - - return interfaceSymbol; - }; - - PullTypeResolver.prototype.typeCheckObjectTypeTypeReference = function (objectType, context) { - this.setTypeChecked(objectType, context); - var objectTypeDecl = this.semanticInfoChain.getDeclForAST(objectType); - var objectTypeSymbol = objectTypeDecl.getSymbol(); - - this.typeCheckMembersAgainstIndexer(objectTypeSymbol, objectTypeDecl, context); - this.checkTypeForDuplicateIndexSignatures(objectTypeSymbol); - }; - - PullTypeResolver.prototype.resolveTypeAnnotation = function (typeAnnotation, context) { - return this.resolveTypeReference(typeAnnotation.type, context); - }; - - PullTypeResolver.prototype.resolveTypeReference = function (typeRef, context) { - if (typeRef === null) { - return null; - } - - TypeScript.Debug.assert(typeRef.kind() !== 244 /* TypeAnnotation */); - - var aliasType = null; - var type = this.computeTypeReferenceSymbol(typeRef, context); - - if (type.kind === 4 /* Container */) { - var container = type; - var instanceSymbol = container.getInstanceSymbol(); - - if (instanceSymbol && (instanceSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */) || instanceSymbol.kind === 32768 /* ConstructorMethod */)) { - type = instanceSymbol.type.getAssociatedContainerType(); - } - } - - if (type && type.isAlias()) { - aliasType = type; - type = aliasType.getExportAssignedTypeSymbol(); - } - - if (type && !type.isGeneric()) { - if (aliasType) { - this.semanticInfoChain.setAliasSymbolForAST(typeRef, aliasType); - } - } - - if (type && !type.isError()) { - if ((type.kind & 58728795 /* SomeType */) === 0) { - if (type.kind & 164 /* SomeContainer */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_cannot_refer_to_container_0, [aliasType ? aliasType.toString() : type.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_must_refer_to_type)); - } - } - } - - if (this.canTypeCheckAST(typeRef, context)) { - this.setTypeChecked(typeRef, context); - } - - return type; - }; - - PullTypeResolver.prototype.getArrayType = function (elementType) { - var arraySymbol = elementType.getArrayType(); - - if (!arraySymbol) { - arraySymbol = this.createInstantiatedType(this.cachedArrayInterfaceType(), [elementType]); - - if (!arraySymbol) { - arraySymbol = this.semanticInfoChain.anyTypeSymbol; - } - - elementType.setArrayType(arraySymbol); - } - - return arraySymbol; - }; - - PullTypeResolver.prototype.computeTypeReferenceSymbol = function (term, context) { - switch (term.kind()) { - case 60 /* AnyKeyword */: - return this.semanticInfoChain.anyTypeSymbol; - case 61 /* BooleanKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - case 67 /* NumberKeyword */: - return this.semanticInfoChain.numberTypeSymbol; - case 69 /* StringKeyword */: - return this.semanticInfoChain.stringTypeSymbol; - case 41 /* VoidKeyword */: - return this.semanticInfoChain.voidTypeSymbol; - } - - var typeDeclSymbol = null; - - if (term.kind() === 11 /* IdentifierName */) { - typeDeclSymbol = this.resolveTypeNameExpression(term, context); - } else if (term.kind() === 123 /* FunctionType */) { - var functionType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(functionType, functionType.typeParameterList, functionType.parameterList, functionType.type, context); - } else if (term.kind() === 125 /* ConstructorType */) { - var constructorType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(constructorType, constructorType.typeParameterList, constructorType.parameterList, constructorType.type, context); - } else if (term.kind() === 122 /* ObjectType */) { - typeDeclSymbol = this.resolveObjectTypeTypeReference(term, context); - } else if (term.kind() === 126 /* GenericType */) { - typeDeclSymbol = this.resolveGenericTypeReference(term, context); - } else if (term.kind() === 121 /* QualifiedName */) { - typeDeclSymbol = this.resolveQualifiedName(term, context); - } else if (term.kind() === 14 /* StringLiteral */) { - var stringConstantAST = term; - var enclosingDecl = this.getEnclosingDeclForAST(term); - typeDeclSymbol = new TypeScript.PullStringConstantTypeSymbol(stringConstantAST.text()); - var decl = new TypeScript.PullSynthesizedDecl(stringConstantAST.text(), stringConstantAST.text(), typeDeclSymbol.kind, null, enclosingDecl, enclosingDecl.semanticInfoChain); - typeDeclSymbol.addDeclaration(decl); - } else if (term.kind() === 127 /* TypeQuery */) { - var typeQuery = term; - - var typeQueryTerm = typeQuery.name; - - var valueSymbol = this.resolveAST(typeQueryTerm, false, context); - - if (valueSymbol && valueSymbol.isAlias()) { - if (valueSymbol.assignedValue()) { - valueSymbol = valueSymbol.assignedValue(); - } else { - var containerSymbol = valueSymbol.getExportAssignedContainerSymbol(); - valueSymbol = (containerSymbol && containerSymbol.isContainer() && !containerSymbol.isEnum()) ? containerSymbol.getInstanceSymbol() : null; - } - } - - if (valueSymbol) { - typeDeclSymbol = valueSymbol.type.widenedType(this, typeQueryTerm, context); - } else { - typeDeclSymbol = this.getNewErrorTypeSymbol(); - } - } else if (term.kind() === 124 /* ArrayType */) { - var arrayType = term; - var underlying = this.resolveTypeReference(arrayType.type, context); - typeDeclSymbol = this.getArrayType(underlying); - } else { - throw TypeScript.Errors.invalidOperation("unknown type"); - } - - if (!typeDeclSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Unable_to_resolve_type)); - return this.getNewErrorTypeSymbol(); - } - - if (typeDeclSymbol.isError()) { - return typeDeclSymbol; - } - - if (this.genericTypeIsUsedWithoutRequiredTypeArguments(typeDeclSymbol, term, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Generic_type_references_must_include_all_type_arguments)); - typeDeclSymbol = this.instantiateTypeToAny(typeDeclSymbol, context); - } - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.genericTypeIsUsedWithoutRequiredTypeArguments = function (typeSymbol, term, context) { - if (!typeSymbol) { - return false; - } - - if (typeSymbol.isAlias()) { - return this.genericTypeIsUsedWithoutRequiredTypeArguments(typeSymbol.getExportAssignedTypeSymbol(), term, context); - } - - return typeSymbol.isNamedTypeSymbol() && typeSymbol.isGeneric() && !typeSymbol.isTypeParameter() && (typeSymbol.isResolved || typeSymbol.inResolution) && !typeSymbol.getIsSpecialized() && typeSymbol.getTypeParameters().length && typeSymbol.getTypeArguments() === null && this.isTypeRefWithoutTypeArgs(term); - }; - - PullTypeResolver.prototype.resolveMemberVariableDeclaration = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl.variableDeclarator), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolvePropertySignature = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclarator = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveParameterList = function (list, context) { - return this.resolveSeparatedList(list.parameters, context); - }; - - PullTypeResolver.prototype.resolveParameter = function (parameter, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.getEnumTypeSymbol = function (enumElement, context) { - var enumDeclaration = enumElement.parent.parent; - var decl = this.semanticInfoChain.getDeclForAST(enumDeclaration); - var symbol = decl.getSymbol(); - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.resolveEnumElement = function (enumElement, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckEnumElement = function (enumElement, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveEqualsValueClause = function (clause, isContextuallyTyped, context) { - if (this.canTypeCheckAST(clause, context)) { - this.setTypeChecked(clause, context); - } - - return this.resolveAST(clause.value, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - - if (enclosingDecl && decl.kind === 2048 /* Parameter */) { - enclosingDecl.ensureSymbolIsBound(); - } - - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (declSymbol.isResolved) { - var declType = declSymbol.type; - var valDecl = decl.getValueDecl(); - - if (valDecl) { - var valSymbol = valDecl.getSymbol(); - - if (valSymbol && !valSymbol.isResolved) { - valSymbol.type = declType; - valSymbol.setResolved(); - } - } - } else { - if (declSymbol.inResolution) { - declSymbol.type = this.semanticInfoChain.anyTypeSymbol; - declSymbol.setResolved(); - return declSymbol; - } - - if (!declSymbol.type || !declSymbol.type.isError()) { - declSymbol.startResolving(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - if (!hasTypeExpr) { - this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - } - - if (!(hasTypeExpr || init)) { - var defaultType = this.semanticInfoChain.anyTypeSymbol; - - if (declSymbol.isVarArg && this.cachedArrayInterfaceType()) { - defaultType = this.createInstantiatedType(this.cachedArrayInterfaceType(), [defaultType]); - } - - context.setTypeInContext(declSymbol, defaultType); - - if (declParameterSymbol) { - declParameterSymbol.type = defaultType; - } - } - declSymbol.setResolved(); - - if (declParameterSymbol) { - declParameterSymbol.setResolved(); - } - } - } - - if (this.canTypeCheckAST(varDeclOrParameter, context)) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context); - } - - return declSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclarationTypeExpr = function (varDeclOrParameter, name, typeExpr, context) { - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (varDeclOrParameter.kind() === 243 /* EnumElement */) { - var result = this.getEnumTypeSymbol(varDeclOrParameter, context); - declSymbol.type = result; - return result; - } - - if (!typeExpr) { - return null; - } - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var typeExprSymbol = this.resolveTypeReference(typeExpr, context); - - if (!typeExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - declSymbol.type = this.getNewErrorTypeSymbol(); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else if (typeExprSymbol.isError()) { - context.setTypeInContext(declSymbol, typeExprSymbol); - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, typeExprSymbol); - } - } else { - if (typeExprSymbol === this.semanticInfoChain.anyTypeSymbol) { - decl.setFlag(16777216 /* IsAnnotatedWithAny */); - } - - if (typeExprSymbol.isContainer()) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - typeExprSymbol = typeExprSymbol.type; - - if (typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.isContainer() && !typeExprSymbol.isEnum()) { - var instanceSymbol = typeExprSymbol.getInstanceSymbol(); - - if (!instanceSymbol || !TypeScript.PullHelpers.symbolIsEnum(instanceSymbol)) { - typeExprSymbol = this.getNewErrorTypeSymbol(); - } else { - typeExprSymbol = instanceSymbol.type; - } - } - } - } else if (declSymbol.isVarArg && !(typeExprSymbol.isArrayNamedTypeReference() || typeExprSymbol === this.cachedArrayInterfaceType())) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeExprSymbol = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(declSymbol, typeExprSymbol); - - if (declParameterSymbol) { - declParameterSymbol.type = typeExprSymbol; - } - - if (typeExprSymbol.kind === 16777216 /* FunctionType */ && !typeExprSymbol.getFunctionSymbol()) { - typeExprSymbol.setFunctionSymbol(declSymbol); - } - } - - return typeExprSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr = function (varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol) { - if (!init) { - return null; - } - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - if (typeExprSymbol) { - context.pushNewContextualType(typeExprSymbol); - } - - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var initExprSymbol = this.resolveAST(init, typeExprSymbol !== null, context); - - if (typeExprSymbol) { - context.popAnyContextualType(); - } - - if (!initExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - - if (!hasTypeExpr) { - context.setTypeInContext(declSymbol, this.getNewErrorTypeSymbol()); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } - } else { - var initTypeSymbol = initExprSymbol.type; - - if (!hasTypeExpr) { - var widenedInitTypeSymbol = initTypeSymbol.widenedType(this, init.value, context); - context.setTypeInContext(declSymbol, widenedInitTypeSymbol); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, widenedInitTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - if ((widenedInitTypeSymbol !== initTypeSymbol) && (widenedInitTypeSymbol === this.semanticInfoChain.anyTypeSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - - return widenedInitTypeSymbol; - } - } - - return initTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckPropertySignature = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberVariableDeclaration = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclarator = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckParameter = function (parameter, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var _this = this; - this.setTypeChecked(varDeclOrParameter, context); - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - var initTypeSymbol = this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - - if (hasTypeExpr || init) { - if (typeExprSymbol && typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.kind === 32 /* DynamicModule */) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - var instanceTypeSymbol = typeExprSymbol.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [typeExprSymbol.toString()])); - typeExprSymbol = null; - } else { - typeExprSymbol = instanceTypeSymbol; - } - } - } - - initTypeSymbol = this.getInstanceTypeForAssignment(varDeclOrParameter, initTypeSymbol, context); - - if (initTypeSymbol && typeExprSymbol) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, typeExprSymbol, varDeclOrParameter, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(varDeclOrParameter); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol)])); - } - } - } - } else if (varDeclOrParameter.kind() !== 243 /* EnumElement */ && this.compilationSettings.noImplicitAny() && !this.isForInVariableDeclarator(varDeclOrParameter)) { - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var needReportError = function (containerDecl, selfDecl) { - if (!TypeScript.hasFlag(containerDecl.flags, 8 /* Ambient */)) { - return true; - } - - return selfDecl && !TypeScript.hasFlag(selfDecl.flags, 2 /* Private */); - }; - - if ((wrapperDecl.kind === 16384 /* Function */ || wrapperDecl.kind === 32768 /* ConstructorMethod */ || wrapperDecl.kind === 2097152 /* ConstructSignature */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } else if (wrapperDecl.kind === 65536 /* Method */) { - var parentDecl = wrapperDecl.getParentDecl(); - - if (needReportError(parentDecl, wrapperDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } - } else if (decl.kind === 4096 /* Property */ && !declSymbol.getContainer().isNamedTypeSymbol()) { - if (needReportError(wrapperDecl, decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Member_0_of_object_type_implicitly_has_an_any_type, [name.text()])); - } - } else if (wrapperDecl.kind !== 268435456 /* CatchBlock */) { - if (needReportError(wrapperDecl) || !TypeScript.hasModifier(modifiers, 2 /* Private */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - } - - if (init && varDeclOrParameter.kind() === 242 /* Parameter */) { - var containerSignature = enclosingDecl.getSignatureSymbol(); - if (containerSignature && !containerSignature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - } - if (declSymbol.kind !== 2048 /* Parameter */ && (declSymbol.kind !== 4096 /* Property */ || declSymbol.getContainer().isNamedTypeSymbol())) { - this.checkSymbolPrivacy(declSymbol, declSymbol.type, function (symbol) { - return _this.variablePrivacyErrorReporter(varDeclOrParameter, declSymbol, symbol, context); - }); - } - - if ((declSymbol.kind !== 4096 /* Property */ && declSymbol.kind !== 67108864 /* EnumMember */) || declSymbol.anyDeclHasFlag(8388608 /* PropertyParameter */)) { - this.checkNameForCompilerGeneratedDeclarationCollision(varDeclOrParameter, true, name, context); - } - }; - - PullTypeResolver.prototype.isForInVariableDeclarator = function (ast) { - return ast.kind() === 225 /* VariableDeclarator */ && ast.parent && ast.parent.parent && ast.parent.parent.parent && ast.parent.kind() === 2 /* SeparatedList */ && ast.parent.parent.kind() === 224 /* VariableDeclaration */ && ast.parent.parent.parent.kind() === 155 /* ForInStatement */ && ast.parent.parent.parent.variableDeclaration === ast.parent.parent; - }; - - PullTypeResolver.prototype.checkSuperCaptureVariableCollides = function (superAST, isDeclaration, context) { - var enclosingDecl = this.getEnclosingDeclForAST(superAST); - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(superAST, enclosingDecl); - - if (classSymbol && !classSymbol.anyDeclHasFlag(8 /* Ambient */)) { - if (superAST.kind() === 242 /* Parameter */) { - var enclosingAST = this.getASTForDecl(enclosingDecl); - if (enclosingAST.kind() !== 218 /* ParenthesizedArrowFunctionExpression */ && enclosingAST.kind() !== 219 /* SimpleArrowFunctionExpression */) { - var block = enclosingDecl.kind === 65536 /* Method */ ? enclosingAST.block : enclosingAST.block; - if (!block) { - return; - } - } - } - - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - if (parents.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(superAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference : TypeScript.DiagnosticCode.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference)); - } - } - }; - - PullTypeResolver.prototype.checkThisCaptureVariableCollides = function (_thisAST, isDeclaration, context) { - if (isDeclaration) { - var decl = this.semanticInfoChain.getDeclForAST(_thisAST); - if (TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - return; - } - } - - var enclosingDecl = this.getEnclosingDeclForAST(_thisAST); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(_thisAST); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - var declPath = enclosingDecl.getParentPath(); - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - continue; - } - - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - if (TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(_thisAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference)); - } - break; - } - } - }; - - PullTypeResolver.prototype.postTypeCheckVariableDeclaratorOrParameter = function (varDeclOrParameter, context) { - this.checkThisCaptureVariableCollides(varDeclOrParameter, true, context); - }; - - PullTypeResolver.prototype.resolveTypeParameterDeclaration = function (typeParameterAST, context) { - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.resolveFirstTypeParameterDeclaration(typeParameterSymbol, context); - - if (typeParameterSymbol.isResolved && this.canTypeCheckAST(typeParameterAST, context)) { - this.typeCheckTypeParameterDeclaration(typeParameterAST, context); - } - - return typeParameterSymbol; - }; - - PullTypeResolver.prototype.resolveFirstTypeParameterDeclaration = function (typeParameterSymbol, context) { - var typeParameterDecl = typeParameterSymbol.getDeclarations()[0]; - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecl); - - if (typeParameterSymbol.isResolved || typeParameterSymbol.inResolution) { - return; - } - - typeParameterSymbol.startResolving(); - - if (typeParameterAST.constraint) { - var constraintTypeSymbol = this.resolveTypeReference(typeParameterAST.constraint.type, context); - - if (constraintTypeSymbol) { - typeParameterSymbol.setConstraint(constraintTypeSymbol); - } - } - - typeParameterSymbol.setResolved(); - }; - - PullTypeResolver.prototype.typeCheckTypeParameterDeclaration = function (typeParameterAST, context) { - this.setTypeChecked(typeParameterAST, context); - - var constraint = this.resolveAST(typeParameterAST.constraint, false, context); - - if (constraint) { - var typeParametersAST = typeParameterAST.parent; - var typeParameters = []; - for (var i = 0; i < typeParametersAST.nonSeparatorCount(); i++) { - var currentTypeParameterAST = typeParametersAST.nonSeparatorAt(i); - var currentTypeParameterDecl = this.semanticInfoChain.getDeclForAST(currentTypeParameterAST); - var currentTypeParameter = this.semanticInfoChain.getSymbolForDecl(currentTypeParameterDecl); - typeParameters[currentTypeParameter.pullSymbolID] = currentTypeParameter; - } - - if (constraint.wrapsSomeTypeParameter(typeParameters)) { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); - } - } - }; - - PullTypeResolver.prototype.resolveConstraint = function (constraint, context) { - if (this.canTypeCheckAST(constraint, context)) { - this.setTypeChecked(constraint, context); - } - - return this.resolveTypeReference(constraint.type, context); - }; - - PullTypeResolver.prototype.resolveFunctionBodyReturnTypes = function (funcDeclAST, block, bodyExpression, signature, useContextualType, enclosingDecl, context) { - var _this = this; - var returnStatementsExpressions = []; - - var enclosingDeclStack = [enclosingDecl]; - - var preFindReturnExpressionTypes = function (ast, walker) { - var go = true; - - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - returnStatementsExpressions.push({ expression: returnStatement.expression, enclosingDecl: enclosingDeclStack[enclosingDeclStack.length - 1] }); - go = false; - break; - - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack[enclosingDeclStack.length] = _this.semanticInfoChain.getDeclForAST(ast); - break; - - default: - break; - } - - walker.options.goChildren = go; - - return ast; - }; - - var postFindReturnExpressionEnclosingDecls = function (ast, walker) { - switch (ast.kind()) { - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack.length--; - break; - default: - break; - } - - walker.options.goChildren = true; - - return ast; - }; - - if (block) { - TypeScript.getAstWalkerFactory().walk(block, preFindReturnExpressionTypes, postFindReturnExpressionEnclosingDecls); - } else { - returnStatementsExpressions.push({ expression: bodyExpression, enclosingDecl: enclosingDecl }); - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - } - - if (!returnStatementsExpressions.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var returnExpressionSymbols = []; - var returnExpressions = []; - - for (var i = 0; i < returnStatementsExpressions.length; i++) { - var returnExpression = returnStatementsExpressions[i].expression; - if (returnExpression) { - var returnType = this.resolveAST(returnExpression, useContextualType, context).type; - - if (returnType.isError()) { - signature.returnType = returnType; - return; - } else { - if (returnExpression.parent.kind() === 150 /* ReturnStatement */) { - this.setSymbolForAST(returnExpression.parent, returnType, context); - } - } - - returnExpressionSymbols.push(returnType); - returnExpressions.push(returnExpression); - } - } - - if (!returnExpressionSymbols.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var collection = { - getLength: function () { - return returnExpressionSymbols.length; - }, - getTypeAtIndex: function (index) { - return returnExpressionSymbols[index].type; - } - }; - - var bestCommonReturnType = this.findBestCommonType(collection, context, new TypeComparisonInfo()); - var returnType = bestCommonReturnType; - var returnExpression = returnExpressions[returnExpressionSymbols.indexOf(returnType)]; - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - - if (returnType) { - var previousReturnType = returnType; - var newReturnType = returnType.widenedType(this, returnExpression, context); - signature.returnType = newReturnType; - - if (!TypeScript.ArrayUtilities.contains(returnExpressionSymbols, bestCommonReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions)); - } - - if (this.compilationSettings.noImplicitAny()) { - if (previousReturnType !== newReturnType && newReturnType === this.semanticInfoChain.anyTypeSymbol) { - var functionName = enclosingDecl.name; - if (functionName === "") { - functionName = enclosingDecl.getFunctionExpressionName(); - } - - if (functionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } - - if (!functionSymbol.type && functionSymbol.isAccessor()) { - functionSymbol.type = signature.returnType; - } - } - } - }; - - PullTypeResolver.prototype.typeCheckConstructorDeclaration = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveAST(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), false, context); - } - - this.resolveAST(funcDeclAST.block, false, context); - - if (funcDecl.getSignatureSymbol() && funcDecl.getSignatureSymbol().isDefinition() && this.enclosingClassIsDerived(funcDecl.getParentDecl())) { - if (!this.constructorHasSuperCall(funcDeclAST)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call)); - } else if (this.superCallMustBeFirstStatementInConstructor(funcDecl)) { - var firstStatement = this.getFirstStatementOfBlockOrNull(funcDeclAST.block); - if (!firstStatement || !this.isSuperInvocationExpressionStatement(firstStatement)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties)); - } - } - } - - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.callSignature.parameterList), null, funcDeclAST.block, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.constructorHasSuperCall = function (constructorDecl) { - var _this = this; - if (constructorDecl.block) { - var foundSuperCall = false; - var pre = function (ast, walker) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - walker.options.goChildren = false; - default: - if (_this.isSuperInvocationExpression(ast)) { - foundSuperCall = true; - walker.options.stopWalking = true; - } - } - }; - - TypeScript.getAstWalkerFactory().walk(constructorDecl.block, pre); - return foundSuperCall; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), funcDecl.callSignature.typeAnnotation, funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckCallSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckConstructSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMethodSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberFunctionDeclaration = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.containsSingleThrowStatement = function (block) { - return block !== null && block.statements.childCount() === 1 && block.statements.childAt(0).kind() === 157 /* ThrowStatement */; - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(parameters, false, context); - - this.resolveAST(block, false, context); - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, isStatic, typeParameters, TypeScript.ASTHelpers.parametersFromParameterList(parameters), returnTypeAnnotation, block, context); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(funcDecl, returnTypeAnnotation, funcDecl.getSignatureSymbol().returnType, block, context); - - if (funcDecl.kind === 16384 /* Function */) { - this.checkNameForCompilerGeneratedDeclarationCollision(funcDeclAST, true, name, context); - } - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement = function (functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context) { - var hasReturn = TypeScript.hasFlag(functionDecl.flags, 4194304 /* HasReturnStatement */); - - if (block !== null && returnTypeAnnotation !== null && !hasReturn) { - var isVoidOrAny = this.isAnyOrEquivalent(returnTypeSymbol) || returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol; - - if (!isVoidOrAny && !this.containsSingleThrowStatement(block)) { - var funcName = functionDecl.getDisplayName() || TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Function_declared_a_non_void_return_type_but_has_no_return_expression)); - } - } - }; - - PullTypeResolver.prototype.typeCheckIndexSignature = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - this.resolveAST(funcDeclAST.parameter, false, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameter(funcDeclAST.parameter), TypeScript.ASTHelpers.getType(funcDeclAST), null, context); - - var signature = funcDecl.getSignatureSymbol(); - - this.typeCheckCallBacks.push(function (context) { - var parentSymbol = funcDecl.getSignatureSymbol().getContainer(); - var allIndexSignatures = _this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parentSymbol, context); - var stringIndexSignature = allIndexSignatures.stringSignature; - var numberIndexSignature = allIndexSignatures.numericSignature; - var isNumericIndexer = numberIndexSignature === signature; - - if (numberIndexSignature && stringIndexSignature && (isNumericIndexer || stringIndexSignature.getDeclarations()[0].getParentDecl() !== numberIndexSignature.getDeclarations()[0].getParentDecl())) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!_this.sourceIsAssignableToTarget(numberIndexSignature.returnType, stringIndexSignature.returnType, funcDeclAST, context, comparisonInfo)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(funcDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol)])); - } - } - } - - var allMembers = parentSymbol.type.getAllMembers(536869887 /* All */, 0 /* all */); - for (var i = 0; i < allMembers.length; i++) { - var member = allMembers[i]; - var name = member.name; - if (name || (member.kind === 4096 /* Property */ && name === "")) { - if (!allMembers[i].isResolved) { - _this.resolveDeclaredSymbol(allMembers[i], context); - } - - if (parentSymbol !== allMembers[i].getContainer()) { - var isMemberNumeric = TypeScript.PullHelpers.isNameNumeric(name); - var indexerKindMatchesMemberNameKind = isNumericIndexer === isMemberNumeric; - var onlyStringIndexerIsPresent = !numberIndexSignature; - - if (indexerKindMatchesMemberNameKind || onlyStringIndexerIsPresent) { - var comparisonInfo = new TypeComparisonInfo(); - if (!_this.sourceIsAssignableToTarget(allMembers[i].type, signature.returnType, funcDeclAST, context, comparisonInfo, false)) { - _this.reportErrorThatMemberIsNotSubtypeOfIndexer(allMembers[i], signature, funcDeclAST, context, comparisonInfo); - } - } - } - } - } - }); - }; - - PullTypeResolver.prototype.postTypeCheckFunctionDeclaration = function (funcDeclAST, context) { - this.checkThisCaptureVariableCollides(funcDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveReturnTypeAnnotationOfFunctionDeclaration = function (funcDeclAST, returnTypeAnnotation, context) { - var returnTypeSymbol = null; - - if (returnTypeAnnotation) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - } else { - var isConstructor = funcDeclAST.kind() === 137 /* ConstructorDeclaration */ || funcDeclAST.kind() === 143 /* ConstructSignature */; - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } - - return returnTypeSymbol; - }; - - PullTypeResolver.prototype.resolveMemberFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveCallSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveConstructSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveMethodSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveAnyFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveSimpleArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, null, TypeScript.ASTHelpers.parametersFromIdentifier(funcDecl.identifier), null, funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveParenthesizedArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.getEnclosingClassDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - PullTypeResolver.prototype.resolveConstructorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - return funcSymbol; - } - - if (!signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - - if (signature.isGeneric()) { - if (funcSymbol) { - funcSymbol.type.setHasGenericSignature(); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveIndexMemberDeclaration = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveIndexSignature(ast.indexSignature, context); - }; - - PullTypeResolver.prototype.resolveIndexSignature = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - return funcSymbol; - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (funcDeclAST.typeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(TypeScript.ASTHelpers.getType(funcDeclAST), context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(TypeScript.ASTHelpers.getType(funcDeclAST), TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (funcDeclAST.parameter) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - this.resolveParameter(funcDeclAST.parameter, context); - context.inTypeCheck = prevInTypeCheck; - } - - if (funcDeclAST.typeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - var isConstructor = funcDeclAST.kind() === 143 /* ConstructSignature */; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - return funcSymbol; - } - - if (isConstructor && !signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - } - - if (returnTypeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else if (funcDecl.kind !== 2097152 /* ConstructSignature */) { - if (TypeScript.hasFlag(funcDecl.flags, 2048 /* Signature */)) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - var parentDeclFlags = 0 /* None */; - if (TypeScript.hasFlag(funcDecl.kind, 65536 /* Method */) || TypeScript.hasFlag(funcDecl.kind, 32768 /* ConstructorMethod */)) { - var parentDecl = funcDecl.getParentDecl(); - parentDeclFlags = parentDecl.flags; - } - - if (this.compilationSettings.noImplicitAny() && (!TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) || (TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) && !TypeScript.hasFlag(funcDecl.flags, 2 /* Private */)))) { - var funcDeclASTName = name; - if (funcDeclASTName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [funcDeclASTName.text()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } - } else if (funcDecl.kind === 2097152 /* ConstructSignature */) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveGetterReturnTypeAnnotation = function (getterFunctionDeclarationAst, enclosingDecl, context) { - if (getterFunctionDeclarationAst && getterFunctionDeclarationAst.typeAnnotation) { - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveSetterArgumentTypeAnnotation = function (setterFunctionDeclarationAst, enclosingDecl, context) { - if (setterFunctionDeclarationAst && setterFunctionDeclarationAst.parameterList && setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorCount() > 0) { - var parameter = setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorAt(0); - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(parameter), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveAccessorDeclaration = function (funcDeclAst, context) { - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - - if (accessorSymbol.inResolution) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - accessorSymbol.setResolved(); - - return accessorSymbol; - } - - if (accessorSymbol.isResolved) { - if (!accessorSymbol.type) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - } - } else { - var getterSymbol = accessorSymbol.getGetter(); - var getterFunctionDeclarationAst = getterSymbol ? getterSymbol.getDeclarations()[0].ast() : null; - var hasGetter = getterSymbol !== null; - - var setterSymbol = accessorSymbol.getSetter(); - var setterFunctionDeclarationAst = setterSymbol ? setterSymbol.getDeclarations()[0].ast() : null; - var hasSetter = setterSymbol !== null; - - var getterAnnotatedType = this.resolveGetterReturnTypeAnnotation(getterFunctionDeclarationAst, functionDeclaration, context); - var getterHasTypeAnnotation = getterAnnotatedType !== null; - - var setterAnnotatedType = this.resolveSetterArgumentTypeAnnotation(setterFunctionDeclarationAst, functionDeclaration, context); - var setterHasTypeAnnotation = setterAnnotatedType !== null; - - accessorSymbol.startResolving(); - - if (hasGetter) { - getterSymbol = this.resolveGetAccessorDeclaration(getterFunctionDeclarationAst, getterFunctionDeclarationAst.parameterList, TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), getterFunctionDeclarationAst.block, setterAnnotatedType, context); - } - - if (hasSetter) { - setterSymbol = this.resolveSetAccessorDeclaration(setterFunctionDeclarationAst, setterFunctionDeclarationAst.parameterList, context); - } - - if (hasGetter && hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - var getterSig = getterSymbol.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterHasParameters ? setterParameters[0].type : null; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (setterHasTypeAnnotation && !getterHasTypeAnnotation) { - getterSuppliedTypeSymbol = setterSuppliedTypeSymbol; - getterSig.returnType = setterSuppliedTypeSymbol; - } else if ((getterHasTypeAnnotation && !setterHasTypeAnnotation) || (!getterHasTypeAnnotation && !setterHasTypeAnnotation)) { - setterSuppliedTypeSymbol = getterSuppliedTypeSymbol; - - if (setterHasParameters) { - setterParameters[0].type = getterSuppliedTypeSymbol; - } - } - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - accessorSymbol.type = this.getNewErrorTypeSymbol(); - } else { - accessorSymbol.type = getterSuppliedTypeSymbol; - } - } else if (hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - - accessorSymbol.type = setterHasParameters ? setterParameters[0].type : this.semanticInfoChain.anyTypeSymbol; - } else { - var getterSig = getterSymbol.type.getCallSignatures()[0]; - accessorSymbol.type = getterSig.returnType; - } - - accessorSymbol.setResolved(); - } - - if (this.canTypeCheckAST(funcDeclAst, context)) { - this.typeCheckAccessorDeclaration(funcDeclAst, context); - } - - return accessorSymbol; - }; - - PullTypeResolver.prototype.typeCheckAccessorDeclaration = function (funcDeclAst, context) { - this.setTypeChecked(funcDeclAst, context); - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - var getterSymbol = accessorSymbol.getGetter(); - var setterSymbol = accessorSymbol.getSetter(); - - var isGetter = funcDeclAst.kind() === 139 /* GetAccessor */; - if (isGetter) { - var getterFunctionDeclarationAst = funcDeclAst; - context.pushNewContextualType(getterSymbol.type); - this.typeCheckGetAccessorDeclaration(getterFunctionDeclarationAst, context); - context.popAnyContextualType(); - } else { - var setterFunctionDeclarationAst = funcDeclAst; - this.typeCheckSetAccessorDeclaration(setterFunctionDeclarationAst, context); - } - }; - - PullTypeResolver.prototype.resolveGetAccessorDeclaration = function (funcDeclAST, parameters, returnTypeAnnotation, block, setterAnnotatedType, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var getterSymbol = accessorSymbol.getGetter(); - var getterTypeSymbol = getterSymbol.type; - - var signature = getterTypeSymbol.getCallSignatures()[0]; - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return getterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - signature.setResolved(); - - return getterSymbol; - } - - signature.startResolving(); - - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - if (!setterAnnotatedType) { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } else { - signature.returnType = setterAnnotatedType; - } - } - - if (!hadError) { - signature.setResolved(); - } - } - - return getterSymbol; - }; - - PullTypeResolver.prototype.checkIfGetterAndSetterTypeMatch = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - var getter = accessorSymbol.getGetter(); - var setter = accessorSymbol.getSetter(); - - if (getter && setter) { - var getterAST = getter.getDeclarations()[0].ast(); - var setterAST = setter.getDeclarations()[0].ast(); - - if (getterAST.typeAnnotation && PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterAST)) { - var setterSig = setter.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - - var getter = accessorSymbol.getGetter(); - var getterSig = getter.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterParameters[0].type; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.get_and_set_accessor_must_have_the_same_type)); - } - } - } - }; - - PullTypeResolver.prototype.typeCheckGetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - var funcNameAST = funcDeclAST.propertyName; - - if (!hasReturn && !this.containsSingleThrowStatement(funcDeclAST.block)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getters_must_return_a_value)); - } - - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - var setterIsPrivate = TypeScript.hasFlag(setterDecl.flags, 2 /* Private */); - var getterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), TypeScript.ASTHelpers.getType(funcDeclAST), funcDeclAST.block, context); - }; - - PullTypeResolver.hasSetAccessorParameterTypeAnnotation = function (setAccessor) { - return setAccessor.parameterList && setAccessor.parameterList.parameters.nonSeparatorCount() > 0 && setAccessor.parameterList.parameters.nonSeparatorAt(0).typeAnnotation !== null; - }; - - PullTypeResolver.prototype.resolveSetAccessorDeclaration = function (funcDeclAST, parameterList, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var setterSymbol = accessorSymbol.getSetter(); - var setterTypeSymbol = setterSymbol.type; - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return setterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - signature.setResolved(); - return setterSymbol; - } - - signature.startResolving(); - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - } - - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - - if (!hadError) { - signature.setResolved(); - } - } - - return setterSymbol; - }; - - PullTypeResolver.prototype.typeCheckSetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - if (funcDeclAST.parameterList) { - for (var i = 0; i < funcDeclAST.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.parameterList.parameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - - var getter = accessorSymbol.getGetter(); - - var funcNameAST = funcDeclAST.propertyName; - - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - var getterIsPrivate = TypeScript.hasFlag(getterDecl.flags, 2 /* Private */); - var setterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } else { - if (this.compilationSettings.noImplicitAny()) { - var setterFunctionDeclarationAst = funcDeclAST; - if (!PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterFunctionDeclarationAst) && accessorSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type, [setterFunctionDeclarationAst.propertyName.text()])); - } - } - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), null, funcDeclAST.block, context); - }; - - PullTypeResolver.prototype.resolveList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.childCount(); i < n; i++) { - this.resolveAST(list.childAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveSeparatedList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.resolveAST(list.nonSeparatorAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVoidExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.undefinedTypeSymbol; - }; - - PullTypeResolver.prototype.resolveLogicalOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLogicalOperation(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLogicalOperation = function (binex, context) { - this.setTypeChecked(binex, context); - - var leftType = this.resolveAST(binex.left, false, context).type; - var rightType = this.resolveAST(binex.right, false, context).type; - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(leftType, rightType, binex, context, comparisonInfo) && !this.sourceIsAssignableToTarget(rightType, leftType, binex, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(binex); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binex, TypeScript.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, [ - TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(binex.kind())), - leftType.toString(enclosingSymbol), rightType.toString(enclosingSymbol)])); - } - }; - - PullTypeResolver.prototype.resolveLogicalNotExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.operand, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveUnaryArithmeticOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckUnaryArithmeticOperation(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.resolvePostfixUnaryExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckPostfixUnaryExpression(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.isAnyOrNumberOrEnum = function (type) { - return this.isAnyOrEquivalent(type) || type === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(type); - }; - - PullTypeResolver.prototype.typeCheckUnaryArithmeticOperation = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - if (nodeType === 164 /* PlusExpression */ || nodeType == 165 /* NegateExpression */ || nodeType == 166 /* BitwiseNotExpression */) { - return; - } - - TypeScript.Debug.assert(nodeType === 168 /* PreIncrementExpression */ || nodeType === 169 /* PreDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.typeCheckPostfixUnaryExpression = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - TypeScript.Debug.assert(nodeType === 210 /* PostIncrementExpression */ || nodeType === 211 /* PostDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.resolveBinaryArithmeticExpression = function (binaryExpression, context) { - if (this.canTypeCheckAST(binaryExpression, context)) { - this.typeCheckBinaryArithmeticExpression(binaryExpression, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBinaryArithmeticExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsSymbol = this.resolveAST(binaryExpression.left, false, context); - - var lhsType = lhsSymbol.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol) { - lhsType = rhsType; - } - - if (rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol) { - rhsType = lhsType; - } - - var lhsIsFit = this.isAnyOrNumberOrEnum(lhsType); - var rhsIsFit = this.isAnyOrNumberOrEnum(rhsType); - - if (!rhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!lhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (lhsIsFit && rhsIsFit) { - switch (binaryExpression.kind()) { - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - if (!this.isReference(binaryExpression.left, lhsSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, rhsType, lhsType, context); - } - } - }; - - PullTypeResolver.prototype.resolveTypeOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.stringTypeSymbol; - }; - - PullTypeResolver.prototype.resolveThrowStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveDeleteExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInstanceOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInstanceOfExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInstanceOfExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var enclosingSymbol = this.getEnclosingSymbolForAST(binaryExpression); - var isValidLHS = this.isAnyOrEquivalent(lhsType) || lhsType.isObject() || lhsType.isTypeParameter(); - var isValidRHS = this.isAnyOrEquivalent(rhsType) || this.typeIsAssignableToFunction(rhsType, binaryExpression, context); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type)); - } - }; - - PullTypeResolver.prototype.resolveCommaExpression = function (commaExpression, context) { - if (this.canTypeCheckAST(commaExpression, context)) { - this.setTypeChecked(commaExpression, context); - - this.resolveAST(commaExpression.left, false, context); - } - - return this.resolveAST(commaExpression.right, false, context).type; - }; - - PullTypeResolver.prototype.resolveInExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var isValidLHS = this.isAnyOrEquivalent(lhsType.type) || lhsType.type === this.semanticInfoChain.stringTypeSymbol || lhsType.type === this.semanticInfoChain.numberTypeSymbol; - - var isValidRHS = this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter(); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - }; - - PullTypeResolver.prototype.resolveForStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.variableDeclaration, false, context); - this.resolveAST(ast.initializer, false, context); - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.incrementor, false, context); - this.resolveAST(ast.statement, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveForInStatement = function (forInStatement, context) { - if (this.canTypeCheckAST(forInStatement, context)) { - this.typeCheckForInStatement(forInStatement, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckForInStatement = function (forInStatement, context) { - this.setTypeChecked(forInStatement, context); - - if (forInStatement.variableDeclaration) { - var declaration = forInStatement.variableDeclaration; - - if (declaration.declarators.nonSeparatorCount() === 1) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - if (varDecl.typeAnnotation) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declaration, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation)); - } - } - } else { - var varSym = this.resolveAST(forInStatement.left, false, context); - var isStringOrNumber = varSym.type === this.semanticInfoChain.stringTypeSymbol || this.isAnyOrEquivalent(varSym.type); - - if (!isStringOrNumber) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.left, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any)); - } - } - - var rhsType = this.resolveAST(forInStatement.expression, false, context).type; - var isValidRHS = rhsType && (this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter()); - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.expression, TypeScript.DiagnosticCode.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - this.resolveAST(forInStatement.statement, false, context); - }; - - PullTypeResolver.prototype.resolveWhileStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWhileStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWhileStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveDoStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckDoStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckDoStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveIfStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckIfStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckIfStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - this.resolveAST(ast.elseClause, false, context); - }; - - PullTypeResolver.prototype.resolveElseClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckElseClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckElseClause = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveBlock = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.statements, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declaration, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableDeclarationList = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declarators, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveWithStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWithStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWithStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var withStatement = ast; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(withStatement.condition, TypeScript.DiagnosticCode.All_symbols_within_a_with_block_will_be_resolved_to_any)); - }; - - PullTypeResolver.prototype.resolveTryStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckTryStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckTryStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var tryStatement = ast; - - this.resolveAST(tryStatement.block, false, context); - this.resolveAST(tryStatement.catchClause, false, context); - this.resolveAST(tryStatement.finallyClause, false, context); - }; - - PullTypeResolver.prototype.resolveCatchClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckCatchClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckCatchClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - - var catchDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(catchDecl, context); - }; - - PullTypeResolver.prototype.resolveFinallyClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckFinallyClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckFinallyClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - }; - - PullTypeResolver.prototype.getEnclosingFunctionDeclaration = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - while (enclosingDecl) { - if (enclosingDecl.kind & 1032192 /* SomeFunction */) { - return enclosingDecl; - } - - enclosingDecl = enclosingDecl.getParentDecl(); - } - - return null; - }; - - PullTypeResolver.prototype.resolveReturnExpression = function (expression, enclosingFunction, context) { - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var isContextuallyTyped = false; - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeAnnotationSymbol = this.resolveTypeReference(typeAnnotation, context); - if (returnTypeAnnotationSymbol) { - isContextuallyTyped = true; - context.pushNewContextualType(returnTypeAnnotationSymbol); - } - } else { - var currentContextualType = context.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - isContextuallyTyped = true; - context.propagateContextualType(currentContextualTypeReturnTypeSymbol); - } - } - } - } - - var result = this.resolveAST(expression, isContextuallyTyped, context).type; - if (isContextuallyTyped) { - context.popAnyContextualType(); - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckReturnExpression = function (expression, expressionType, enclosingFunction, context) { - if (enclosingFunction && enclosingFunction.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingFunction.getParentDecl(); - if (classDecl) { - var classSymbol = classDecl.getSymbol(); - this.resolveDeclaredSymbol(classSymbol, context); - - var comparisonInfo = new TypeComparisonInfo(); - var isAssignable = this.sourceIsAssignableToTarget(expressionType, classSymbol.type, expression, context, comparisonInfo); - if (!isAssignable) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class)); - } - } - } - - if (enclosingFunction && enclosingFunction.kind === 524288 /* SetAccessor */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Setters_cannot_return_a_value)); - } - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation || enclosingFunction.kind === 262144 /* GetAccessor */) { - var signatureSymbol = enclosingFunction.getSignatureSymbol(); - var sigReturnType = signatureSymbol.returnType; - - if (expressionType && sigReturnType) { - var comparisonInfo = new TypeComparisonInfo(); - var upperBound = null; - - this.resolveDeclaredSymbol(expressionType, context); - this.resolveDeclaredSymbol(sigReturnType, context); - - var isAssignable = this.sourceIsAssignableToTarget(expressionType, sigReturnType, expression, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol)])); - } - } - } - } - } - }; - - PullTypeResolver.prototype.resolveReturnStatement = function (returnAST, context) { - var enclosingFunction = this.getEnclosingFunctionDeclaration(returnAST); - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var returnType = this.getSymbolForAST(returnAST, context); - var canTypeCheckAST = this.canTypeCheckAST(returnAST, context); - if (!returnType || canTypeCheckAST) { - var returnExpr = returnAST.expression; - - var resolvedReturnType = returnExpr === null ? this.semanticInfoChain.voidTypeSymbol : this.resolveReturnExpression(returnExpr, enclosingFunction, context); - - if (!returnType) { - returnType = resolvedReturnType; - this.setSymbolForAST(returnAST, resolvedReturnType, context); - } - - if (returnExpr && canTypeCheckAST) { - this.setTypeChecked(returnExpr, context); - this.typeCheckReturnExpression(returnExpr, resolvedReturnType, enclosingFunction, context); - } - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveSwitchStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSwitchStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckSwitchStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var expressionType = this.resolveAST(ast.expression, false, context).type; - - for (var i = 0, n = ast.switchClauses.childCount(); i < n; i++) { - var switchClause = ast.switchClauses.childAt(i); - if (switchClause.kind() === 233 /* CaseSwitchClause */) { - var caseSwitchClause = switchClause; - - var caseClauseExpressionType = this.resolveAST(caseSwitchClause.expression, false, context).type; - this.resolveAST(caseSwitchClause.statements, false, context); - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(expressionType, caseClauseExpressionType, caseSwitchClause.expression, context, comparisonInfo) && !this.sourceIsAssignableToTarget(caseClauseExpressionType, expressionType, caseSwitchClause.expression, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(caseSwitchClause.expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol)])); - } - } - } else { - var defaultSwitchClause = switchClause; - this.resolveAST(defaultSwitchClause.statements, false, context); - } - } - }; - - PullTypeResolver.prototype.resolveLabeledStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLabeledStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLabeledStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var labelIdentifier = ast.identifier.valueText(); - - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { - return s.identifier.valueText() === labelIdentifier; - }); - if (matchingLabel) { - context.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(ast.identifier, labelIdentifier, matchingLabel)); - } - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.labelIsOnContinuableConstruct = function (statement) { - switch (statement.kind()) { - case 160 /* LabeledStatement */: - return this.labelIsOnContinuableConstruct(statement.statement); - - case 158 /* WhileStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 161 /* DoStatement */: - return true; - - default: - return false; - } - }; - - PullTypeResolver.prototype.resolveContinueStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckContinueStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.isIterationStatement = function (ast) { - switch (ast.kind()) { - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.isAnyFunctionExpressionOrDeclaration = function (ast) { - switch (ast.kind()) { - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 241 /* FunctionPropertyAssignment */: - case 137 /* ConstructorDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.inSwitchStatement = function (ast) { - while (ast) { - if (ast.kind() === 151 /* SwitchStatement */) { - return true; - } - - if (this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inIterationStatement = function (ast, crossFunctions) { - while (ast) { - if (this.isIterationStatement(ast)) { - return true; - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingLabels = function (ast, breakable, crossFunctions) { - var result = []; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 160 /* LabeledStatement */) { - var labeledStatement = ast; - if (breakable) { - result.push(labeledStatement); - } else { - if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) { - result.push(labeledStatement); - } - } - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - break; - } - - ast = ast.parent; - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckContinueStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (!this.inIterationStatement(ast, false)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement)); - } - } else if (ast.identifier) { - var continuableLabels = this.getEnclosingLabels(ast, false, false); - - if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var continuableLabels = this.getEnclosingLabels(ast, false, true); - - if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } - }; - - PullTypeResolver.prototype.resolveBreakStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckBreakStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBreakStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (ast.identifier) { - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var breakableLabels = this.getEnclosingLabels(ast, true, true); - if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } else if (!this.inIterationStatement(ast, false) && !this.inSwitchStatement(ast)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement)); - } - } - }; - - PullTypeResolver.prototype.resolveAST = function (ast, isContextuallyTyped, context) { - if (!ast) { - return; - } - - var symbol = this.getSymbolForAST(ast, context); - if (symbol && symbol.isResolved) { - this.typeCheckAST(ast, isContextuallyTyped, context); - return symbol; - } - - if (ast.isExpression() && !isTypesOnlyLocation(ast)) { - return this.resolveExpressionAST(ast, isContextuallyTyped, context); - } - - var nodeType = ast.kind(); - - switch (nodeType) { - case 124 /* ArrayType */: - case 126 /* GenericType */: - case 122 /* ObjectType */: - case 127 /* TypeQuery */: - case 125 /* ConstructorType */: - case 123 /* FunctionType */: - return this.resolveTypeReference(ast, context); - - case 1 /* List */: - return this.resolveList(ast, context); - - case 2 /* SeparatedList */: - return this.resolveSeparatedList(ast, context); - - case 120 /* SourceUnit */: - return this.resolveSourceUnit(ast, context); - - case 132 /* EnumDeclaration */: - return this.resolveEnumDeclaration(ast, context); - - case 130 /* ModuleDeclaration */: - return this.resolveModuleDeclaration(ast, context); - - case 128 /* InterfaceDeclaration */: - return this.resolveInterfaceDeclaration(ast, context); - - case 131 /* ClassDeclaration */: - return this.resolveClassDeclaration(ast, context); - - case 224 /* VariableDeclaration */: - return this.resolveVariableDeclarationList(ast, context); - - case 136 /* MemberVariableDeclaration */: - return this.resolveMemberVariableDeclaration(ast, context); - - case 225 /* VariableDeclarator */: - return this.resolveVariableDeclarator(ast, context); - - case 141 /* PropertySignature */: - return this.resolvePropertySignature(ast, context); - - case 227 /* ParameterList */: - return this.resolveParameterList(ast, context); - - case 242 /* Parameter */: - return this.resolveParameter(ast, context); - - case 243 /* EnumElement */: - return this.resolveEnumElement(ast, context); - - case 232 /* EqualsValueClause */: - return this.resolveEqualsValueClause(ast, isContextuallyTyped, context); - - case 238 /* TypeParameter */: - return this.resolveTypeParameterDeclaration(ast, context); - - case 239 /* Constraint */: - return this.resolveConstraint(ast, context); - - case 133 /* ImportDeclaration */: - return this.resolveImportDeclaration(ast, context); - - case 240 /* SimplePropertyAssignment */: - return this.resolveSimplePropertyAssignment(ast, isContextuallyTyped, context); - - case 241 /* FunctionPropertyAssignment */: - return this.resolveFunctionPropertyAssignment(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - TypeScript.Debug.assert(isTypesOnlyLocation(ast)); - return this.resolveTypeNameExpression(ast, context); - - case 121 /* QualifiedName */: - return this.resolveQualifiedName(ast, context); - - case 137 /* ConstructorDeclaration */: - return this.resolveConstructorDeclaration(ast, context); - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return this.resolveAccessorDeclaration(ast, context); - - case 138 /* IndexMemberDeclaration */: - return this.resolveIndexMemberDeclaration(ast, context); - - case 144 /* IndexSignature */: - return this.resolveIndexSignature(ast, context); - - case 135 /* MemberFunctionDeclaration */: - return this.resolveMemberFunctionDeclaration(ast, context); - - case 142 /* CallSignature */: - return this.resolveCallSignature(ast, context); - - case 143 /* ConstructSignature */: - return this.resolveConstructSignature(ast, context); - - case 145 /* MethodSignature */: - return this.resolveMethodSignature(ast, context); - - case 129 /* FunctionDeclaration */: - return this.resolveAnyFunctionDeclaration(ast, context); - - case 244 /* TypeAnnotation */: - return this.resolveTypeAnnotation(ast, context); - - case 134 /* ExportAssignment */: - return this.resolveExportAssignmentStatement(ast, context); - - case 157 /* ThrowStatement */: - return this.resolveThrowStatement(ast, context); - - case 149 /* ExpressionStatement */: - return this.resolveExpressionStatement(ast, context); - - case 154 /* ForStatement */: - return this.resolveForStatement(ast, context); - - case 155 /* ForInStatement */: - return this.resolveForInStatement(ast, context); - - case 158 /* WhileStatement */: - return this.resolveWhileStatement(ast, context); - - case 161 /* DoStatement */: - return this.resolveDoStatement(ast, context); - - case 147 /* IfStatement */: - return this.resolveIfStatement(ast, context); - - case 235 /* ElseClause */: - return this.resolveElseClause(ast, context); - - case 146 /* Block */: - return this.resolveBlock(ast, context); - - case 148 /* VariableStatement */: - return this.resolveVariableStatement(ast, context); - - case 163 /* WithStatement */: - return this.resolveWithStatement(ast, context); - - case 159 /* TryStatement */: - return this.resolveTryStatement(ast, context); - - case 236 /* CatchClause */: - return this.resolveCatchClause(ast, context); - - case 237 /* FinallyClause */: - return this.resolveFinallyClause(ast, context); - - case 150 /* ReturnStatement */: - return this.resolveReturnStatement(ast, context); - - case 151 /* SwitchStatement */: - return this.resolveSwitchStatement(ast, context); - - case 153 /* ContinueStatement */: - return this.resolveContinueStatement(ast, context); - - case 152 /* BreakStatement */: - return this.resolveBreakStatement(ast, context); - - case 160 /* LabeledStatement */: - return this.resolveLabeledStatement(ast, context); - } - - return this.semanticInfoChain.anyTypeSymbol; - }; - - PullTypeResolver.prototype.resolveExpressionAST = function (ast, isContextuallyOrInferentiallyTyped, context) { - var expressionSymbol = this.resolveExpressionWorker(ast, isContextuallyOrInferentiallyTyped, context); - - if (isContextuallyOrInferentiallyTyped && context.isInferentiallyTyping()) { - return this.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference(expressionSymbol, context); - } else { - return expressionSymbol; - } - }; - - PullTypeResolver.prototype.resolveExpressionWorker = function (ast, isContextuallyTyped, context) { - switch (ast.kind()) { - case 215 /* ObjectLiteralExpression */: - return this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - return this.resolveNameExpression(ast, context); - - case 212 /* MemberAccessExpression */: - return this.resolveMemberAccessExpression(ast, context); - - case 222 /* FunctionExpression */: - return this.resolveFunctionExpression(ast, isContextuallyTyped, context); - - case 219 /* SimpleArrowFunctionExpression */: - return this.resolveSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.resolveParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 214 /* ArrayLiteralExpression */: - return this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - - case 35 /* ThisKeyword */: - return this.resolveThisExpression(ast, context); - - case 50 /* SuperKeyword */: - return this.resolveSuperExpression(ast, context); - - case 213 /* InvocationExpression */: - return this.resolveInvocationExpression(ast, context); - - case 216 /* ObjectCreationExpression */: - return this.resolveObjectCreationExpression(ast, context); - - case 220 /* CastExpression */: - return this.resolveCastExpression(ast, context); - - case 13 /* NumericLiteral */: - return this.semanticInfoChain.numberTypeSymbol; - - case 14 /* StringLiteral */: - return this.semanticInfoChain.stringTypeSymbol; - - case 32 /* NullKeyword */: - return this.semanticInfoChain.nullTypeSymbol; - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - - case 172 /* VoidExpression */: - return this.resolveVoidExpression(ast, context); - - case 174 /* AssignmentExpression */: - return this.resolveAssignmentExpression(ast, context); - - case 167 /* LogicalNotExpression */: - return this.resolveLogicalNotExpression(ast, context); - - case 193 /* NotEqualsWithTypeConversionExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 197 /* GreaterThanExpression */: - return this.resolveLogicalOperation(ast, context); - - case 208 /* AddExpression */: - case 175 /* AddAssignmentExpression */: - return this.resolveBinaryAdditionOperation(ast, context); - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.resolveUnaryArithmeticOperation(ast, context); - - case 210 /* PostIncrementExpression */: - case 211 /* PostDecrementExpression */: - return this.resolvePostfixUnaryExpression(ast, context); - - case 209 /* SubtractExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 189 /* BitwiseOrExpression */: - case 191 /* BitwiseAndExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - return this.resolveBinaryArithmeticExpression(ast, context); - - case 221 /* ElementAccessExpression */: - return this.resolveElementAccessExpression(ast, context); - - case 187 /* LogicalOrExpression */: - return this.resolveLogicalOrExpression(ast, isContextuallyTyped, context); - - case 188 /* LogicalAndExpression */: - return this.resolveLogicalAndExpression(ast, context); - - case 171 /* TypeOfExpression */: - return this.resolveTypeOfExpression(ast, context); - - case 170 /* DeleteExpression */: - return this.resolveDeleteExpression(ast, context); - - case 186 /* ConditionalExpression */: - return this.resolveConditionalExpression(ast, isContextuallyTyped, context); - - case 12 /* RegularExpressionLiteral */: - return this.resolveRegularExpressionLiteral(); - - case 217 /* ParenthesizedExpression */: - return this.resolveParenthesizedExpression(ast, context); - - case 200 /* InstanceOfExpression */: - return this.resolveInstanceOfExpression(ast, context); - - case 173 /* CommaExpression */: - return this.resolveCommaExpression(ast, context); - - case 201 /* InExpression */: - return this.resolveInExpression(ast, context); - - case 223 /* OmittedExpression */: - return this.semanticInfoChain.undefinedTypeSymbol; - } - - TypeScript.Debug.fail("resolveExpressionASTWorker: Missing expression kind: " + TypeScript.SyntaxKind[ast.kind()]); - }; - - PullTypeResolver.prototype.typeCheckAST = function (ast, isContextuallyTyped, context) { - if (!this.canTypeCheckAST(ast, context)) { - return; - } - - var nodeType = ast.kind(); - switch (nodeType) { - case 120 /* SourceUnit */: - this.typeCheckSourceUnit(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.typeCheckEnumDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.typeCheckModuleDeclaration(ast, context); - return; - - case 128 /* InterfaceDeclaration */: - this.typeCheckInterfaceDeclaration(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.typeCheckClassDeclaration(ast, context); - return; - - case 243 /* EnumElement */: - this.typeCheckEnumElement(ast, context); - return; - - case 136 /* MemberVariableDeclaration */: - this.typeCheckMemberVariableDeclaration(ast, context); - return; - - case 225 /* VariableDeclarator */: - this.typeCheckVariableDeclarator(ast, context); - return; - - case 141 /* PropertySignature */: - this.typeCheckPropertySignature(ast, context); - return; - - case 242 /* Parameter */: - this.typeCheckParameter(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.typeCheckImportDeclaration(ast, context); - return; - - case 215 /* ObjectLiteralExpression */: - this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 241 /* FunctionPropertyAssignment */: - this.typeCheckFunctionPropertyAssignment(ast, isContextuallyTyped, context); - return; - - case 11 /* IdentifierName */: - if (isTypesOnlyLocation(ast)) { - this.resolveTypeNameExpression(ast, context); - } else { - this.resolveNameExpression(ast, context); - } - return; - - case 212 /* MemberAccessExpression */: - this.resolveMemberAccessExpression(ast, context); - return; - - case 121 /* QualifiedName */: - this.resolveQualifiedName(ast, context); - return; - - case 222 /* FunctionExpression */: - this.typeCheckFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 137 /* ConstructorDeclaration */: - this.typeCheckConstructorDeclaration(ast, context); - return; - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - this.typeCheckAccessorDeclaration(ast, context); - return; - - case 135 /* MemberFunctionDeclaration */: - this.typeCheckMemberFunctionDeclaration(ast, context); - return; - - case 145 /* MethodSignature */: - this.typeCheckMethodSignature(ast, context); - return; - - case 144 /* IndexSignature */: - this.typeCheckIndexSignature(ast, context); - break; - - case 142 /* CallSignature */: - this.typeCheckCallSignature(ast, context); - return; - - case 143 /* ConstructSignature */: - this.typeCheckConstructSignature(ast, context); - return; - - case 129 /* FunctionDeclaration */: { - var funcDecl = ast; - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - return; - } - - case 219 /* SimpleArrowFunctionExpression */: - this.typeCheckSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 218 /* ParenthesizedArrowFunctionExpression */: - this.typeCheckParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 214 /* ArrayLiteralExpression */: - this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 213 /* InvocationExpression */: - this.typeCheckInvocationExpression(ast, context); - return; - - case 216 /* ObjectCreationExpression */: - this.typeCheckObjectCreationExpression(ast, context); - return; - - case 150 /* ReturnStatement */: - this.resolveReturnStatement(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Failure nodeType: " + TypeScript.SyntaxKind[ast.kind()] + ". Implement typeCheck when symbol is set for the ast as part of resolution."); - } - }; - - PullTypeResolver.prototype.processPostTypeCheckWorkItems = function (context) { - while (this.postTypeCheckWorkitems.length) { - var ast = this.postTypeCheckWorkitems.pop(); - this.postTypeCheck(ast, context); - } - }; - - PullTypeResolver.prototype.postTypeCheck = function (ast, context) { - var nodeType = ast.kind(); - - switch (nodeType) { - case 242 /* Parameter */: - case 225 /* VariableDeclarator */: - this.postTypeCheckVariableDeclaratorOrParameter(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.postTypeCheckClassDeclaration(ast, context); - return; - - case 129 /* FunctionDeclaration */: - this.postTypeCheckFunctionDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.postTypeCheckModuleDeclaration(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.postTypeCheckEnumDeclaration(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.postTypeCheckImportDeclaration(ast, context); - return; - - case 11 /* IdentifierName */: - this.postTypeCheckNameExpression(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Implement postTypeCheck clause to handle the postTypeCheck work, nodeType: " + TypeScript.SyntaxKind[ast.kind()]); - } - }; - - PullTypeResolver.prototype.resolveRegularExpressionLiteral = function () { - if (this.cachedRegExpInterfaceType()) { - return this.cachedRegExpInterfaceType(); - } else { - return this.semanticInfoChain.anyTypeSymbol; - } - }; - - PullTypeResolver.prototype.postTypeCheckNameExpression = function (nameAST, context) { - this.checkThisCaptureVariableCollides(nameAST, false, context); - }; - - PullTypeResolver.prototype.typeCheckNameExpression = function (nameAST, context) { - this.setTypeChecked(nameAST, context); - this.checkNameForCompilerGeneratedDeclarationCollision(nameAST, false, nameAST, context); - }; - - PullTypeResolver.prototype.resolveNameExpression = function (nameAST, context) { - var nameSymbol = this.getSymbolForAST(nameAST, context); - var foundCached = nameSymbol !== null; - - if (!foundCached || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.typeCheckNameExpression(nameAST, context); - } - nameSymbol = this.computeNameExpression(nameAST, context); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - if (nameSymbol && (nameSymbol.type !== this.semanticInfoChain.anyTypeSymbol || nameSymbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(nameAST, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.isInEnumDecl = function (decl) { - if (decl.kind & 64 /* Enum */) { - return true; - } - - var declPath = decl.getParentPath(); - - var disallowedKinds = 164 /* SomeContainer */ | 58728795 /* SomeType */; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - - if (decl.kind & 64 /* Enum */) { - return true; - } - - if (decl.kind & disallowedKinds) { - return false; - } - } - return false; - }; - - PullTypeResolver.prototype.getSomeInnermostFunctionScopeDecl = function (declPath) { - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (decl.kind & 1032192 /* SomeFunction */) { - return decl; - } - } - - return null; - }; - - PullTypeResolver.prototype.isFromFunctionScope = function (nameSymbol, functionScopeDecl) { - var _this = this; - return TypeScript.ArrayUtilities.any(nameSymbol.getDeclarations(), function (nameSymbolDecl) { - return _this.getSomeInnermostFunctionScopeDecl(nameSymbolDecl.getParentPath()) === functionScopeDecl; - }); - }; - - PullTypeResolver.prototype.findConstructorDeclOfEnclosingType = function (decl) { - var current = decl; - while (current) { - if (TypeScript.hasFlag(current.kind, 4096 /* Property */)) { - var parentDecl = current.getParentDecl(); - if (TypeScript.hasFlag(parentDecl.kind, 8 /* Class */)) { - return TypeScript.ArrayUtilities.lastOrDefault(parentDecl.getChildDecls(), function (decl) { - return TypeScript.hasFlag(decl.kind, 32768 /* ConstructorMethod */); - }); - } - } - - if (TypeScript.hasFlag(current.kind, 164 /* SomeContainer */)) { - return null; - } - - current = current.getParentDecl(); - } - return null; - }; - - PullTypeResolver.prototype.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable = function (nameAST, nameSymbol, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return false; - } - - var memberVariableDeclarationAST = TypeScript.ASTHelpers.getEnclosingMemberVariableDeclaration(nameAST); - if (memberVariableDeclarationAST) { - var memberVariableDecl = this.semanticInfoChain.getDeclForAST(memberVariableDeclarationAST); - if (!TypeScript.hasFlag(memberVariableDecl.flags, 16 /* Static */)) { - var constructorDecl = this.findConstructorDeclOfEnclosingType(memberVariableDecl); - - if (constructorDecl) { - var childDecls = constructorDecl.searchChildDecls(id, 68147712 /* SomeValue */); - if (childDecls.length) { - if (TypeScript.PullHelpers.isSymbolDeclaredInScopeChain(nameSymbol, constructorDecl.getSymbol().getContainer())) { - var memberVariableSymbol = memberVariableDecl.getSymbol(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, [memberVariableSymbol.getScopedName(constructorDecl.getSymbol()), nameAST.text()])); - return true; - } - } - } - } - } - return false; - }; - - PullTypeResolver.prototype.computeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var nameSymbol = null; - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - if (TypeScript.hasFlag(enclosingDecl.flags, 8388608 /* PropertyParameter */)) { - var valueDecl = enclosingDecl.getValueDecl(); - if (valueDecl && TypeScript.hasFlag(valueDecl.kind, 2048 /* Parameter */)) { - enclosingDecl = valueDecl; - } - } - - var isDeclarationASTOrDeclarationNameAST = TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(nameAST); - if (isDeclarationASTOrDeclarationNameAST) { - nameSymbol = this.semanticInfoChain.getDeclForAST(nameAST.parent).getSymbol(); - } - - var declPath = enclosingDecl.getParentPath(); - - if (!nameSymbol) { - var searchKind = 68147712 /* SomeValue */; - - if (!this.isInEnumDecl(enclosingDecl)) { - searchKind = searchKind & ~(67108864 /* EnumMember */); - } - - var nameSymbol = this.getSymbolFromDeclPath(id, declPath, searchKind); - } - - if (id === "arguments") { - var functionScopeDecl = this.getSomeInnermostFunctionScopeDecl(declPath); - if (functionScopeDecl) { - if (!nameSymbol || !this.isFromFunctionScope(nameSymbol, functionScopeDecl)) { - nameSymbol = this.cachedFunctionArgumentsSymbol(); - this.resolveDeclaredSymbol(this.cachedIArgumentsInterfaceType(), context); - } - } - } - - var aliasSymbol = null; - if (nameSymbol && nameSymbol.isAlias() && !isDeclarationASTOrDeclarationNameAST) { - aliasSymbol = nameSymbol; - if (!this.inTypeQuery(nameAST)) { - aliasSymbol.setIsUsedAsValue(); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - this.resolveDeclaredSymbol(aliasSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(aliasSymbol.assignedContainer(), context); - - nameSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (!nameSymbol) { - aliasSymbol = null; - } - } - - if (!nameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (this.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable(nameAST, nameSymbol, context)) { - return this.getNewErrorTypeSymbol(id); - } - - var nameDeclaration = nameSymbol.getDeclarations()[0]; - var nameParentDecl = nameDeclaration.getParentDecl(); - if (nameParentDecl && (nameParentDecl.kind & 1032192 /* SomeFunction */) && (nameParentDecl.flags & 33554432 /* HasDefaultArgs */)) { - var enclosingFunctionAST = this.semanticInfoChain.getASTForDecl(nameParentDecl); - var currentParameterIndex = this.getCurrentParameterIndexForFunction(nameAST, enclosingFunctionAST); - - var parameterList = TypeScript.ASTHelpers.getParameterList(enclosingFunctionAST); - - if (currentParameterIndex >= 0) { - var matchingParameter; - if (parameterList) { - for (var i = 0; i <= currentParameterIndex; i++) { - var candidateParameter = parameterList.parameters.nonSeparatorAt(i); - if (candidateParameter && candidateParameter.identifier.valueText() === id) { - matchingParameter = candidateParameter; - break; - } - } - } - - if (!matchingParameter) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text(), nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (matchingParameter === TypeScript.ASTHelpers.getEnclosingParameterForInitializer(nameAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Parameter_0_cannot_be_referenced_in_its_initializer, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text()])); - return this.getNewErrorTypeSymbol(id); - } - } - } - - if (aliasSymbol) { - this.semanticInfoChain.setAliasSymbolForAST(nameAST, aliasSymbol); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.getCurrentParameterIndexForFunction = function (parameter, funcDecl) { - var parameterList = TypeScript.ASTHelpers.getParameterList(funcDecl); - if (parameterList) { - while (parameter && parameter.parent) { - if (parameter.parent.parent === parameterList) { - return parameterList.parameters.nonSeparatorIndexOf(parameter); - } - - parameter = parameter.parent; - } - } - - return -1; - }; - - PullTypeResolver.prototype.resolveMemberAccessExpression = function (dottedNameAST, context) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.expression, dottedNameAST.name, context); - }; - - PullTypeResolver.prototype.resolveDottedNameExpression = function (dottedNameAST, expression, name, context) { - var symbol = this.getSymbolForAST(dottedNameAST, context); - var foundCached = symbol !== null; - - if (!foundCached || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheckDottedNameAST = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheckDottedNameAST) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeDottedNameExpression(expression, name, context, canTypeCheckDottedNameAST); - } - - this.resolveDeclaredSymbol(symbol, context); - - if (symbol && (symbol.type !== this.semanticInfoChain.anyTypeSymbol || symbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(dottedNameAST, symbol, context); - this.setSymbolForAST(name, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeDottedNameExpression = function (expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhs = this.resolveAST(expression, false, context); - return this.computeDottedNameExpressionFromLHS(lhs, expression, name, context, checkSuperPrivateAndStaticAccess); - }; - - PullTypeResolver.prototype.computeDottedNameExpressionFromLHS = function (lhs, expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhsType = lhs.type; - - if (lhs.isAlias()) { - var lhsAlias = lhs; - if (!this.inTypeQuery(expression)) { - lhsAlias.setIsUsedAsValue(); - } - lhsType = lhsAlias.getExportAssignedTypeSymbol(); - } - - if (lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (!lhsType) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Could_not_find_enclosing_symbol_for_dotted_name_0, [name.text()])); - return this.getNewErrorTypeSymbol(); - } - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - if (lhsType.isContainer() && !lhsType.isAlias() && !lhsType.isEnum()) { - var instanceSymbol = lhsType.getInstanceSymbol(); - - if (instanceSymbol) { - lhsType = instanceSymbol.type; - } - } - - var originalLhsTypeForErrorReporting = lhsType; - - lhsType = this.getApparentType(lhsType).widenedType(this, expression, context); - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var nameSymbol = this._getNamedPropertySymbolOfAugmentedType(rhsName, lhsType); - - if (!nameSymbol) { - if (lhsType.kind === 32 /* DynamicModule */) { - var container = lhsType; - var associatedInstance = container.getInstanceSymbol(); - - if (associatedInstance) { - var instanceType = associatedInstance.type; - - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, instanceType); - } - } else { - var associatedType = lhsType.getAssociatedContainerType(); - - if (associatedType && !associatedType.isClass()) { - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, associatedType); - } - } - - if (!nameSymbol) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [name.text(), originalLhsTypeForErrorReporting.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - } - - if (checkSuperPrivateAndStaticAccess) { - this.checkForSuperMemberAccess(expression, name, nameSymbol, context) || this.checkForPrivateMemberAccess(name, lhsType, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.resolveTypeNameExpression = function (nameAST, context) { - var typeNameSymbol = this.getSymbolForAST(nameAST, context); - - if (!typeNameSymbol || !typeNameSymbol.isType() || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.setTypeChecked(nameAST, context); - } - typeNameSymbol = this.computeTypeNameExpression(nameAST, context); - this.setSymbolForAST(nameAST, typeNameSymbol, context); - } - - this.resolveDeclaredSymbol(typeNameSymbol, context); - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.computeTypeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - var declPath = enclosingDecl.getParentPath(); - - var onLeftOfDot = this.isLeftSideOfQualifiedName(nameAST); - - var kindToCheckFirst = onLeftOfDot ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - var kindToCheckSecond = onLeftOfDot ? 58728795 /* SomeType */ : 164 /* SomeContainer */; - - var typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckFirst); - - if (!typeNameSymbol) { - typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckSecond); - } - - if (!typeNameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } - - var typeNameSymbolAlias = null; - if (typeNameSymbol.isAlias()) { - typeNameSymbolAlias = typeNameSymbol; - this.resolveDeclaredSymbol(typeNameSymbol, context); - - var aliasedType = typeNameSymbolAlias.getExportAssignedTypeSymbol(); - - this.resolveDeclaredSymbol(aliasedType, context); - } - - if (typeNameSymbol.isTypeParameter()) { - if (this.isInStaticMemberContext(enclosingDecl)) { - var parentDecl = typeNameSymbol.getDeclarations()[0].getParentDecl(); - - if (parentDecl.kind === 8 /* Class */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Static_members_cannot_reference_class_type_parameters)); - return this.getNewErrorTypeSymbol(); - } - } - } - - if (!typeNameSymbol.isGeneric() && (typeNameSymbol.isClass() || typeNameSymbol.isInterface())) { - typeNameSymbol = TypeScript.PullTypeReferenceSymbol.createTypeReference(typeNameSymbol); - } - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.isInStaticMemberContext = function (decl) { - while (decl) { - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */ | 4096 /* Property */) && TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - return true; - } - - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - return false; - } - - decl = decl.getParentDecl(); - } - - return false; - }; - - PullTypeResolver.prototype.isLeftSideOfQualifiedName = function (ast) { - return ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.left === ast; - }; - - PullTypeResolver.prototype.resolveGenericTypeReference = function (genericTypeAST, context) { - var _this = this; - var genericTypeSymbol = this.resolveAST(genericTypeAST.name, false, context).type; - - if (genericTypeSymbol.isError()) { - return genericTypeSymbol; - } - - if (!genericTypeSymbol.inResolution && !genericTypeSymbol.isResolved) { - this.resolveDeclaredSymbol(genericTypeSymbol, context); - } - - if (genericTypeSymbol.isAlias()) { - if (this.inClassExtendsHeritageClause(genericTypeAST) && !this.inTypeArgumentList(genericTypeAST)) { - genericTypeSymbol.setIsUsedAsValue(); - } - genericTypeSymbol = genericTypeSymbol.getExportAssignedTypeSymbol(); - } - - var typeParameters = genericTypeSymbol.getTypeParameters(); - if (typeParameters.length === 0) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_have_type_parameters, [genericTypeSymbol.toString()])); - return this.getNewErrorTypeSymbol(); - } - - var typeArgs = []; - - if (genericTypeAST.typeArgumentList && genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - typeArgs[i] = this.resolveTypeReference(genericTypeAST.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - - if (typeArgs[i].isError()) { - typeArgs[i] = this.semanticInfoChain.anyTypeSymbol; - } - } - } - - if (typeArgs.length && typeArgs.length !== typeParameters.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Generic_type_0_requires_1_type_argument_s, [genericTypeSymbol.toString(), genericTypeSymbol.getTypeParameters().length])); - return this.getNewErrorTypeSymbol(); - } - - if (!genericTypeSymbol.isResolved) { - var typeDecls = genericTypeSymbol.getDeclarations(); - var childDecls = null; - - for (var i = 0; i < typeDecls.length; i++) { - childDecls = typeDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - - var specializedSymbol = this.createInstantiatedType(genericTypeSymbol, typeArgs); - - var upperBound = null; - - typeParameters = specializedSymbol.getTypeParameters(); - - var typeConstraintSubstitutionMap = []; - - var instantiatedSubstitutionMap = specializedSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < typeParameters.length; i++) { - typeConstraintSubstitutionMap[typeParameters[i].pullSymbolID] = typeParameters[i]; - } - - for (var id in instantiatedSubstitutionMap) { - typeConstraintSubstitutionMap[id] = instantiatedSubstitutionMap[id]; - } - - for (var iArg = 0; (iArg < typeArgs.length) && (iArg < typeParameters.length); iArg++) { - var typeArg = typeArgs[iArg]; - var typeParameter = typeParameters[iArg]; - var typeConstraint = typeParameter.getConstraint(); - - typeConstraintSubstitutionMap[typeParameter.pullSymbolID] = typeArg; - - if (typeConstraint) { - if (typeConstraint.isTypeParameter()) { - for (var j = 0; j < typeParameters.length && j < typeArgs.length; j++) { - if (typeParameters[j] === typeConstraint) { - typeConstraint = typeArgs[j]; - } - } - } else if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeConstraintSubstitutionMap); - } - - if (typeArg.isTypeParameter()) { - upperBound = typeArg.getConstraint(); - - if (upperBound) { - typeArg = upperBound; - } - } - - if (typeArg.inResolution || (typeArg.isTypeReference() && typeArg.referencedTypeSymbol.inResolution)) { - return specializedSymbol; - } - - if (context.canTypeCheckAST(genericTypeAST)) { - this.typeCheckCallBacks.push(function (context) { - if (!_this.sourceIsAssignableToTarget(typeArg, typeConstraint, genericTypeAST, context)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(genericTypeAST); - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [typeArg.toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameter.toString(enclosingSymbol, true)])); - } - }); - } - } - } - - return specializedSymbol; - }; - - PullTypeResolver.prototype.resolveQualifiedName = function (dottedNameAST, context) { - if (this.inTypeQuery(dottedNameAST)) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.left, dottedNameAST.right, context).type; - } - - var symbol = this.getSymbolForAST(dottedNameAST, context); - if (!symbol || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheck = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheck) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeQualifiedName(dottedNameAST, context); - this.setSymbolForAST(dottedNameAST, symbol, context); - } - - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.isLastNameOfModuleNameModuleReference = function (ast) { - return ast.kind() === 11 /* IdentifierName */ && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast && ast.parent.parent && ast.parent.parent.kind() === 246 /* ModuleNameModuleReference */; - }; - - PullTypeResolver.prototype.computeQualifiedName = function (dottedNameAST, context) { - var rhsName = dottedNameAST.right.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(dottedNameAST); - var lhs = this.resolveAST(dottedNameAST.left, false, context); - - var lhsType = lhs.isAlias() ? lhs.getExportAssignedContainerSymbol() : lhs.type; - - if (this.inClassExtendsHeritageClause(dottedNameAST) && !this.inTypeArgumentList(dottedNameAST)) { - if (lhs.isAlias()) { - lhs.setIsUsedAsValue(); - } - } - - if (!lhsType) { - return this.getNewErrorTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var onLeftOfDot = this.isLeftSideOfQualifiedName(dottedNameAST); - var isNameOfModule = dottedNameAST.parent.kind() === 130 /* ModuleDeclaration */ && dottedNameAST.parent.name === dottedNameAST; - - var memberKind = (onLeftOfDot || isNameOfModule) ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - - var childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - - if (!childTypeSymbol && !isNameOfModule && this.isLastNameOfModuleNameModuleReference(dottedNameAST.right)) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, lhsType); - } - - if (!childTypeSymbol && lhsType.isContainer()) { - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - - if (exportedContainer) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, exportedContainer); - } - } - - if (!childTypeSymbol && enclosingDecl) { - var parentDecl = enclosingDecl; - - while (parentDecl) { - if (parentDecl.kind & 164 /* SomeContainer */) { - break; - } - - parentDecl = parentDecl.getParentDecl(); - } - - if (parentDecl) { - var enclosingSymbolType = parentDecl.getSymbol().type; - - if (enclosingSymbolType === lhsType) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - } - } - } - - if (!childTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [dottedNameAST.right.text(), lhsType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - - return childTypeSymbol; - }; - - PullTypeResolver.prototype.shouldContextuallyTypeAnyFunctionExpression = function (functionExpressionAST, typeParameters, parameters, returnTypeAnnotation, context) { - if (typeParameters && typeParameters.typeParameters.nonSeparatorCount() > 0) { - return false; - } - - if (returnTypeAnnotation) { - return false; - } - - if (parameters) { - for (var i = 0, n = parameters.length; i < n; i++) { - if (parameters.typeAt(i)) { - return false; - } - } - } - - var contextualFunctionTypeSymbol = context.getContextualType(); - - if (contextualFunctionTypeSymbol) { - this.resolveDeclaredSymbol(contextualFunctionTypeSymbol, context); - var callSignatures = contextualFunctionTypeSymbol.getCallSignatures(); - var exactlyOneCallSignature = callSignatures && callSignatures.length === 1; - if (!exactlyOneCallSignature) { - return false; - } - - var callSignatureIsGeneric = callSignatures[0].getTypeParameters().length > 0; - return !callSignatureIsGeneric; - } - - return false; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var funcDeclSymbol = null; - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - if (functionDecl && functionDecl.hasSymbol()) { - funcDeclSymbol = functionDecl.getSymbol(); - if (funcDeclSymbol.isResolved || funcDeclSymbol.inResolution) { - return funcDeclSymbol; - } - } - - funcDeclSymbol = functionDecl.getSymbol(); - TypeScript.Debug.assert(funcDeclSymbol); - - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - funcDeclSymbol.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } else { - if (assigningFunctionSignature) { - var returnType = assigningFunctionSignature.returnType; - - if (returnType) { - context.propagateContextualType(returnType); - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, true, functionDecl, context); - context.popAnyContextualType(); - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - var functionExpressionName = functionDecl.getFunctionExpressionName(); - - if (functionExpressionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, false, functionDecl, context); - } - } - - context.setTypeInContext(funcDeclSymbol, funcDeclType); - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpressionParameters = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context) { - if (!parameters) { - return; - } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var contextParams = []; - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - if (assigningFunctionSignature) { - contextParams = assigningFunctionSignature.parameters; - } - - var contextualParametersCount = contextParams.length; - for (var i = 0, n = parameters.length; i < n; i++) { - var actualParameterIsVarArgParameter = (i === (n - 1)) && parameters.lastParameterIsRest(); - var correspondingContextualParameter = null; - var contextualParameterType = null; - - if (i < contextualParametersCount) { - correspondingContextualParameter = contextParams[i]; - } else if (contextualParametersCount && contextParams[contextualParametersCount - 1].isVarArg) { - correspondingContextualParameter = contextParams[contextualParametersCount - 1]; - } - - if (correspondingContextualParameter) { - if (correspondingContextualParameter.isVarArg === actualParameterIsVarArgParameter) { - contextualParameterType = correspondingContextualParameter.type; - } else if (correspondingContextualParameter.isVarArg) { - contextualParameterType = correspondingContextualParameter.type.getElementType(); - } - } - - this.resolveFunctionExpressionParameter(parameters.astAt(i), parameters.identifierAt(i), parameters.typeAt(i), parameters.initializerAt(i), contextualParameterType, functionDecl, context); - } - }; - - PullTypeResolver.prototype.typeCheckSimpleArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), null, arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckParenthesizedArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcDeclSymbol = functionDecl.getSymbol(); - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - var returnTypeSymbol = signature.returnType; - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - context.pushNewContextualType(null); - if (block) { - this.resolveAST(block, false, context); - } else { - var bodyExpressionType = this.resolveReturnExpression(bodyExpression, functionDecl, context); - this.typeCheckReturnExpression(bodyExpression, bodyExpressionType, functionDecl, context); - } - - context.popAnyContextualType(); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context); - - this.validateVariableDeclarationGroups(functionDecl, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.resolveThisExpression = function (thisExpression, context) { - var enclosingDecl = this.getEnclosingDeclForAST(thisExpression); - var thisTypeSymbol = this.getContextualClassSymbolForEnclosingDecl(thisExpression, enclosingDecl) || this.semanticInfoChain.anyTypeSymbol; - - if (this.canTypeCheckAST(thisExpression, context)) { - this.typeCheckThisExpression(thisExpression, context, enclosingDecl); - } - - return thisTypeSymbol; - }; - - PullTypeResolver.prototype.inTypeArgumentList = function (ast) { - var previous = null; - var current = ast; - - while (current) { - switch (current.kind()) { - case 126 /* GenericType */: - var genericType = current; - if (genericType.typeArgumentList === previous) { - return true; - } - break; - - case 226 /* ArgumentList */: - var argumentList = current; - return argumentList.typeArgumentList === previous; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inClassExtendsHeritageClause = function (ast) { - while (ast) { - switch (ast.kind()) { - case 230 /* ExtendsHeritageClause */: - var heritageClause = ast; - - return heritageClause.parent.parent.kind() === 131 /* ClassDeclaration */; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inTypeQuery = function (ast) { - while (ast) { - switch (ast.kind()) { - case 127 /* TypeQuery */: - return true; - case 129 /* FunctionDeclaration */: - case 213 /* InvocationExpression */: - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inArgumentListOfSuperInvocation = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 213 /* InvocationExpression */: - var invocationExpression = current; - if (previous === invocationExpression.argumentList && invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } - break; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inConstructorParameterList = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 142 /* CallSignature */: - var callSignature = current; - if (previous === callSignature.parameterList && callSignature.parent.kind() === 137 /* ConstructorDeclaration */) { - return true; - } - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - PullTypeResolver.prototype.isFunctionAccessorOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 262144 /* GetAccessor */ || decl.kind === 524288 /* SetAccessor */) { - return true; - } - - return this.isFunctionOrNonArrowFunctionExpression(decl); - }; - - PullTypeResolver.prototype.isFunctionOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 16384 /* Function */) { - return true; - } else if (decl.kind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - return true; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckThisExpression = function (thisExpression, context, enclosingDecl) { - this.checkForThisCaptureInArrowFunction(thisExpression); - - if (this.inConstructorParameterList(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_constructor_arguments)); - return; - } - - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionAccessorOrNonArrowFunctionExpression(currentDecl)) { - return; - } else if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - if (currentDecl.getParentDecl() === null) { - return; - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_within_module_bodies)); - return; - } - } else if (currentDecl.kind === 64 /* Enum */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - return; - } else if (currentDecl.kind === 32768 /* ConstructorMethod */) { - if (this.inArgumentListOfSuperInvocation(thisExpression) && this.superCallMustBeFirstStatementInConstructor(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - } - - return; - } else if (currentDecl.kind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_static_initializers_in_a_class_body)); - } - - return; - } - } - }; - - PullTypeResolver.prototype.getContextualClassSymbolForEnclosingDecl = function (ast, enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var isStaticContext = false; - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declFlags & 16 /* Static */) { - isStaticContext = true; - } else if (declKind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - return null; - } else if (declKind === 16384 /* Function */) { - return null; - } else if (declKind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(ast)) { - return this.getNewErrorTypeSymbol(); - } else { - var classSymbol = decl.getSymbol(); - if (isStaticContext) { - var constructorSymbol = classSymbol.getConstructorMethod(); - return constructorSymbol.type; - } else { - return classSymbol; - } - } - } - } - } - - return null; - }; - - PullTypeResolver.prototype.inStaticMemberVariableDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 136 /* MemberVariableDeclaration */ && TypeScript.hasModifier(ast.modifiers, 16 /* Static */)) { - return true; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.resolveSuperExpression = function (ast, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var superType = this.semanticInfoChain.anyTypeSymbol; - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(ast, enclosingDecl); - - if (classSymbol) { - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - - if (parents.length) { - superType = parents[0]; - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSuperExpression(ast, context, enclosingDecl); - } - - return superType; - }; - - PullTypeResolver.prototype.typeCheckSuperExpression = function (ast, context, enclosingDecl) { - this.setTypeChecked(ast, context); - - this.checkForThisCaptureInArrowFunction(ast); - - var isSuperCall = ast.parent.kind() === 213 /* InvocationExpression */; - var isSuperPropertyAccess = ast.parent.kind() === 212 /* MemberAccessExpression */; - TypeScript.Debug.assert(isSuperCall || isSuperPropertyAccess); - - if (isSuperPropertyAccess) { - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionOrNonArrowFunctionExpression(currentDecl)) { - break; - } else if (currentDecl.kind === 8 /* Class */) { - if (!this.enclosingClassIsDerived(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } else if (this.inStaticMemberVariableDeclaration(ast)) { - break; - } - - return; - } - } - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class)); - return; - } else { - if (enclosingDecl.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingDecl.getParentDecl(); - - if (!this.enclosingClassIsDerived(classDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors)); - } - } - }; - - PullTypeResolver.prototype.resolveSimplePropertyAssignment = function (propertyAssignment, isContextuallyTyped, context) { - return this.resolveAST(propertyAssignment.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveObjectLiteralExpression = function (expressionAST, isContextuallyTyped, context, additionalResults) { - var symbol = this.getSymbolForAST(expressionAST, context); - var hasResolvedSymbol = symbol && symbol.isResolved; - - if (!hasResolvedSymbol || additionalResults || this.canTypeCheckAST(expressionAST, context)) { - if (this.canTypeCheckAST(expressionAST, context)) { - this.setTypeChecked(expressionAST, context); - } - symbol = this.computeObjectLiteralExpression(expressionAST, isContextuallyTyped, context, additionalResults); - this.setSymbolForAST(expressionAST, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.bindObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralMembers, isUsingExistingSymbol, pullTypeContext) { - var boundMemberSymbols = []; - var memberSymbol; - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var id = this.getPropertyAssignmentName(propertyAssignment); - var assignmentText = getPropertyAssignmentNameTextFromIdentifier(id); - - var isAccessor = propertyAssignment.kind() === 139 /* GetAccessor */ || propertyAssignment.kind() === 140 /* SetAccessor */; - var decl = this.semanticInfoChain.getDeclForAST(propertyAssignment); - TypeScript.Debug.assert(decl); - - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - if (!isUsingExistingSymbol) { - memberSymbol = new TypeScript.PullSymbol(assignmentText.memberName, 4096 /* Property */); - memberSymbol.addDeclaration(decl); - decl.setSymbol(memberSymbol); - } else { - memberSymbol = decl.getSymbol(); - } - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - memberSymbol = decl.getSymbol(); - } else { - TypeScript.Debug.assert(isAccessor); - memberSymbol = decl.getSymbol(); - } - - if (!isUsingExistingSymbol && !isAccessor) { - var existingMember = objectLiteralTypeSymbol.findMember(memberSymbol.name, true); - if (existingMember) { - pullTypeContext.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(propertyAssignment, assignmentText.actualText, existingMember.getDeclarations()[0].ast())); - } - - objectLiteralTypeSymbol.addMember(memberSymbol); - } - - boundMemberSymbols.push(memberSymbol); - } - - return boundMemberSymbols; - }; - - PullTypeResolver.prototype.resolveObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralContextualType, objectLiteralMembers, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, pullTypeContext, additionalResults) { - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var acceptedContextualType = false; - var assigningSymbol = null; - - var id = this.getPropertyAssignmentName(propertyAssignment); - var memberSymbol = boundMemberSymbols[i]; - var contextualMemberType = null; - - if (objectLiteralContextualType) { - assigningSymbol = this.getNamedPropertySymbol(memberSymbol.name, 68147712 /* SomeValue */, objectLiteralContextualType); - - if (!assigningSymbol) { - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - assigningSymbol = numericIndexerSignature; - } else if (stringIndexerSignature) { - assigningSymbol = stringIndexerSignature; - } - } - - if (assigningSymbol) { - this.resolveDeclaredSymbol(assigningSymbol, pullTypeContext); - - contextualMemberType = assigningSymbol.kind === 4194304 /* IndexSignature */ ? assigningSymbol.returnType : assigningSymbol.type; - pullTypeContext.propagateContextualType(contextualMemberType); - - acceptedContextualType = true; - - if (additionalResults) { - additionalResults.membersContextTypeSymbols[i] = contextualMemberType; - } - } - } - - var memberSymbolType = this.resolveAST(propertyAssignment, contextualMemberType !== null, pullTypeContext).type; - - if (memberSymbolType) { - if (memberSymbolType.isGeneric()) { - objectLiteralTypeSymbol.setHasGenericMember(); - } - - if (stringIndexerSignature) { - allMemberTypes.push(memberSymbolType); - } - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - allNumericMemberTypes.push(memberSymbolType); - } - } - - if (acceptedContextualType) { - pullTypeContext.popAnyContextualType(); - } - - var isAccessor = propertyAssignment.kind() === 140 /* SetAccessor */ || propertyAssignment.kind() === 139 /* GetAccessor */; - if (!memberSymbol.isResolved) { - if (isAccessor) { - this.setSymbolForAST(id, memberSymbolType, pullTypeContext); - } else { - pullTypeContext.setTypeInContext(memberSymbol, memberSymbolType); - memberSymbol.setResolved(); - - this.setSymbolForAST(id, memberSymbol, pullTypeContext); - } - } - } - }; - - PullTypeResolver.prototype.computeObjectLiteralExpression = function (objectLitAST, isContextuallyTyped, context, additionalResults) { - var objectLitDecl = this.semanticInfoChain.getDeclForAST(objectLitAST); - TypeScript.Debug.assert(objectLitDecl); - - var typeSymbol = this.getSymbolForAST(objectLitAST, context); - var isUsingExistingSymbol = !!typeSymbol; - - if (!typeSymbol) { - typeSymbol = new TypeScript.PullTypeSymbol("", 256 /* ObjectLiteral */); - typeSymbol.addDeclaration(objectLitDecl); - this.setSymbolForAST(objectLitAST, typeSymbol, context); - objectLitDecl.setSymbol(typeSymbol); - } - - var propertyAssignments = objectLitAST.propertyAssignments; - var contextualType = null; - - if (isContextuallyTyped) { - contextualType = context.getContextualType(); - this.resolveDeclaredSymbol(contextualType, context); - } - - var stringIndexerSignature = null; - var numericIndexerSignature = null; - var allMemberTypes = null; - var allNumericMemberTypes = null; - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - - stringIndexerSignature = indexSignatures.stringSignature; - numericIndexerSignature = indexSignatures.numericSignature; - - var inInferentialTyping = context.isInferentiallyTyping(); - if (stringIndexerSignature) { - allMemberTypes = inInferentialTyping ? [] : [stringIndexerSignature.returnType]; - } - - if (numericIndexerSignature) { - allNumericMemberTypes = inInferentialTyping ? [] : [numericIndexerSignature.returnType]; - } - } - - if (propertyAssignments) { - if (additionalResults) { - additionalResults.membersContextTypeSymbols = []; - } - - var boundMemberSymbols = this.bindObjectLiteralMembers(objectLitDecl, typeSymbol, propertyAssignments, isUsingExistingSymbol, context); - - this.resolveObjectLiteralMembers(objectLitDecl, typeSymbol, contextualType, propertyAssignments, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, context, additionalResults); - - if (!isUsingExistingSymbol) { - this.stampObjectLiteralWithIndexSignature(typeSymbol, allMemberTypes, stringIndexerSignature, context); - this.stampObjectLiteralWithIndexSignature(typeSymbol, allNumericMemberTypes, numericIndexerSignature, context); - } - } - - typeSymbol.setResolved(); - return typeSymbol; - }; - - PullTypeResolver.prototype.getPropertyAssignmentName = function (propertyAssignment) { - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 139 /* GetAccessor */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 140 /* SetAccessor */) { - return propertyAssignment.propertyName; - } else { - TypeScript.Debug.assert(false); - } - }; - - PullTypeResolver.prototype.stampObjectLiteralWithIndexSignature = function (objectLiteralSymbol, indexerTypeCandidates, contextualIndexSignature, context) { - if (contextualIndexSignature) { - var typeCollection = { - getLength: function () { - return indexerTypeCandidates.length; - }, - getTypeAtIndex: function (index) { - return indexerTypeCandidates[index]; - } - }; - var decl = objectLiteralSymbol.getDeclarations()[0]; - var indexerReturnType = this.findBestCommonType(typeCollection, context).widenedType(this, null, context); - if (indexerReturnType === contextualIndexSignature.returnType) { - objectLiteralSymbol.addIndexSignature(contextualIndexSignature); - } else { - this.semanticInfoChain.addSyntheticIndexSignature(decl, objectLiteralSymbol, this.getASTForDecl(decl), contextualIndexSignature.parameters[0].name, contextualIndexSignature.parameters[0].type, indexerReturnType); - } - } - }; - - PullTypeResolver.prototype.resolveArrayLiteralExpression = function (arrayLit, isContextuallyTyped, context) { - var symbol = this.getSymbolForAST(arrayLit, context); - if (!symbol || this.canTypeCheckAST(arrayLit, context)) { - if (this.canTypeCheckAST(arrayLit, context)) { - this.setTypeChecked(arrayLit, context); - } - symbol = this.computeArrayLiteralExpressionSymbol(arrayLit, isContextuallyTyped, context); - this.setSymbolForAST(arrayLit, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeArrayLiteralExpressionSymbol = function (arrayLit, isContextuallyTyped, context) { - var elements = arrayLit.expressions; - var elementType = null; - var elementTypes = []; - var comparisonInfo = new TypeComparisonInfo(); - var contextualElementType = null; - comparisonInfo.onlyCaptureFirstError = true; - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - - this.resolveDeclaredSymbol(contextualType, context); - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - if (indexSignatures.numericSignature) { - contextualElementType = indexSignatures.numericSignature.returnType; - } - } - } - - if (elements) { - if (contextualElementType) { - context.propagateContextualType(contextualElementType); - } - - for (var i = 0, n = elements.nonSeparatorCount(); i < n; i++) { - elementTypes.push(this.resolveAST(elements.nonSeparatorAt(i), contextualElementType !== null, context).type); - } - - if (contextualElementType) { - context.popAnyContextualType(); - } - } - - if (elementTypes.length) { - elementType = elementTypes[0]; - } - var collection; - - if (contextualElementType && !context.isInferentiallyTyping()) { - if (!elementType) { - elementType = contextualElementType; - } - - collection = { - getLength: function () { - return elements.nonSeparatorCount() + 1; - }, - getTypeAtIndex: function (index) { - return index === 0 ? contextualElementType : elementTypes[index - 1]; - } - }; - } else { - collection = { - getLength: function () { - return elements.nonSeparatorCount(); - }, - getTypeAtIndex: function (index) { - return elementTypes[index]; - } - }; - } - - elementType = elementType ? this.findBestCommonType(collection, context, comparisonInfo) : elementType; - - if (!elementType) { - elementType = this.semanticInfoChain.undefinedTypeSymbol; - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.resolveElementAccessExpression = function (callEx, context) { - var symbolAndDiagnostic = this.computeElementAccessExpressionSymbolAndDiagnostic(callEx, context); - - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckElementAccessExpression(callEx, context, symbolAndDiagnostic); - } - - return symbolAndDiagnostic.symbol; - }; - - PullTypeResolver.prototype.typeCheckElementAccessExpression = function (callEx, context, symbolAndDiagnostic) { - this.setTypeChecked(callEx, context); - context.postDiagnostic(symbolAndDiagnostic.diagnostic); - }; - - PullTypeResolver.prototype.computeElementAccessExpressionSymbolAndDiagnostic = function (callEx, context) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var indexType = this.resolveAST(callEx.argumentExpression, false, context).type; - - var targetTypeSymbol = targetSymbol.type; - - targetTypeSymbol = this.getApparentType(targetTypeSymbol); - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - return { symbol: targetTypeSymbol }; - } - - var elementType = targetTypeSymbol.getElementType(); - - var isNumberIndex = indexType === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(indexType); - - if (elementType && isNumberIndex) { - return { symbol: elementType }; - } - - if (callEx.argumentExpression.kind() === 14 /* StringLiteral */ || callEx.argumentExpression.kind() === 13 /* NumericLiteral */) { - var memberName = callEx.argumentExpression.kind() === 14 /* StringLiteral */ ? TypeScript.stripStartAndEndQuotes(callEx.argumentExpression.text()) : callEx.argumentExpression.valueText(); - - var member = this._getNamedPropertySymbolOfAugmentedType(memberName, targetTypeSymbol); - - if (member) { - this.resolveDeclaredSymbol(member, context); - - return { symbol: member.type }; - } - } - - var signatures = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(targetTypeSymbol, context); - - var stringSignature = signatures.stringSignature; - var numberSignature = signatures.numericSignature; - - if (numberSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol)) { - return { symbol: numberSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (stringSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol)) { - return { symbol: stringSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol) { - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(callEx.argumentExpression, TypeScript.DiagnosticCode.Index_signature_of_object_type_implicitly_has_an_any_type)); - } - return { symbol: this.semanticInfoChain.anyTypeSymbol }; - } else { - return { - symbol: this.getNewErrorTypeSymbol(), - diagnostic: this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Value_of_type_0_is_not_indexable_by_type_1, [targetTypeSymbol.toString(), indexType.toString()]) - }; - } - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesIncludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, true); - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesExcludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, false); - }; - - PullTypeResolver.prototype._getBothKindsOfIndexSignatures = function (enclosingType, context, includeAugmentedType) { - var signatures = includeAugmentedType ? enclosingType.getIndexSignaturesOfAugmentedType(this, this.cachedFunctionInterfaceType(), this.cachedObjectInterfaceType()) : enclosingType.getIndexSignatures(); - - var stringSignature = null; - var numberSignature = null; - var signature = null; - var paramSymbols; - var paramType; - - for (var i = 0; i < signatures.length; i++) { - if (stringSignature && numberSignature) { - break; - } - - signature = signatures[i]; - if (!signature.isResolved) { - this.resolveDeclaredSymbol(signature, context); - } - - paramSymbols = signature.parameters; - - if (paramSymbols.length) { - paramType = paramSymbols[0].type; - - if (!stringSignature && paramType === this.semanticInfoChain.stringTypeSymbol) { - stringSignature = signature; - continue; - } else if (!numberSignature && paramType === this.semanticInfoChain.numberTypeSymbol) { - numberSignature = signature; - continue; - } - } - } - - return { - numericSignature: numberSignature, - stringSignature: stringSignature - }; - }; - - PullTypeResolver.prototype._addUnhiddenSignaturesFromBaseType = function (derivedTypeSignatures, baseTypeSignatures, signaturesBeingAggregated) { - var _this = this; - if (!derivedTypeSignatures) { - signaturesBeingAggregated.push.apply(signaturesBeingAggregated, baseTypeSignatures); - return; - } - - var context = new TypeScript.PullTypeResolutionContext(this); - for (var i = 0; i < baseTypeSignatures.length; i++) { - var baseSignature = baseTypeSignatures[i]; - - var signatureIsHidden = TypeScript.ArrayUtilities.any(derivedTypeSignatures, function (sig) { - return _this.signaturesAreIdenticalWithNewEnclosingTypes(baseSignature, sig, context, false); - }); - - if (!signatureIsHidden) { - signaturesBeingAggregated.push(baseSignature); - } - } - }; - - PullTypeResolver.prototype.resolveBinaryAdditionOperation = function (binaryExpression, context) { - var lhsExpression = this.resolveAST(binaryExpression.left, false, context); - var lhsType = lhsExpression.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (TypeScript.PullHelpers.symbolIsEnum(lhsType)) { - lhsType = this.semanticInfoChain.numberTypeSymbol; - } - - if (TypeScript.PullHelpers.symbolIsEnum(rhsType)) { - rhsType = this.semanticInfoChain.numberTypeSymbol; - } - - var isLhsTypeNullOrUndefined = lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol; - var isRhsTypeNullOrUndefined = rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol; - - if (isLhsTypeNullOrUndefined) { - if (isRhsTypeNullOrUndefined) { - lhsType = rhsType = this.semanticInfoChain.anyTypeSymbol; - } else { - lhsType = rhsType; - } - } else if (isRhsTypeNullOrUndefined) { - rhsType = lhsType; - } - - var exprType = null; - - if (lhsType === this.semanticInfoChain.stringTypeSymbol || rhsType === this.semanticInfoChain.stringTypeSymbol) { - exprType = this.semanticInfoChain.stringTypeSymbol; - } else if (this.isAnyOrEquivalent(lhsType) || this.isAnyOrEquivalent(rhsType)) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } else if (rhsType === this.semanticInfoChain.numberTypeSymbol && lhsType === this.semanticInfoChain.numberTypeSymbol) { - exprType = this.semanticInfoChain.numberTypeSymbol; - } - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (exprType) { - if (binaryExpression.kind() === 175 /* AddAssignmentExpression */) { - if (!this.isReference(binaryExpression.left, lhsExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, exprType, lhsType, context); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_expression_types_not_known_to_support_the_addition_operator)); - } - } - - if (!exprType) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } - - return exprType; - }; - - PullTypeResolver.prototype.bestCommonTypeOfTwoTypes = function (type1, type2, context) { - return this.findBestCommonType({ - getLength: function () { - return 2; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - } - } - }, context); - }; - - PullTypeResolver.prototype.bestCommonTypeOfThreeTypes = function (type1, type2, type3, context) { - return this.findBestCommonType({ - getLength: function () { - return 3; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - case 2: - return type3; - } - } - }, context); - }; - - PullTypeResolver.prototype.resolveLogicalOrExpression = function (binex, isContextuallyTyped, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - } - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - var leftType = this.resolveAST(binex.left, isContextuallyTyped, context).type; - var rightType = this.resolveAST(binex.right, isContextuallyTyped, context).type; - - return context.isInferentiallyTyping() ? this.bestCommonTypeOfTwoTypes(leftType, rightType, context) : this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - var leftType = this.resolveAST(binex.left, false, context).type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binex.right, true, context).type; - context.popAnyContextualType(); - - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveLogicalAndExpression = function (binex, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - - this.resolveAST(binex.left, false, context); - } - - return this.resolveAST(binex.right, false, context).type; - }; - - PullTypeResolver.prototype.computeTypeOfConditionalExpression = function (leftType, rightType, isContextuallyTyped, context) { - if (isContextuallyTyped && !context.isInferentiallyTyping()) { - var contextualType = context.getContextualType(); - return this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveConditionalExpression = function (trinex, isContextuallyTyped, context) { - var leftType = this.resolveAST(trinex.whenTrue, isContextuallyTyped, context).type; - var rightType = this.resolveAST(trinex.whenFalse, isContextuallyTyped, context).type; - - var expressionType = this.computeTypeOfConditionalExpression(leftType, rightType, isContextuallyTyped, context); - - var conditionalTypesAreValid = this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context); - - if (this.canTypeCheckAST(trinex, context)) { - this.setTypeChecked(trinex, context); - this.resolveAST(trinex.condition, false, context); - - if (!this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context)) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_2_or_3, [expressionType.toString(), leftType.toString(), rightType.toString(), contextualType.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_or_2, [expressionType.toString(), leftType.toString(), rightType.toString()])); - } - } - } - - if (!conditionalTypesAreValid) { - return this.getNewErrorTypeSymbol(); - } - - return expressionType; - }; - - PullTypeResolver.prototype.conditionExpressionTypesAreValid = function (leftType, rightType, expressionType, isContextuallyTyped, context) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context) || this.typesAreIdentical(expressionType, contextualType, context)) { - return true; - } - } else { - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.resolveParenthesizedExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveAST(ast.expression, false, context); - }; - - PullTypeResolver.prototype.resolveExpressionStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInvocationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeInvocationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - if (symbol !== this.semanticInfoChain.anyTypeSymbol) { - this.setSymbolForAST(callEx, symbol, context); - } - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckInvocationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckInvocationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - var targetSymbol = this.resolveAST(callEx.expression, false, context); - - if (callEx.argumentList.arguments) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - - var len = callEx.argumentList.arguments.nonSeparatorCount(); - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.computeInvocationExpressionSymbol = function (callEx, context, additionalResults) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var targetTypeSymbol = targetSymbol.type; - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - if (targetTypeSymbol === this.semanticInfoChain.anyTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Untyped_function_calls_may_not_accept_type_arguments), additionalResults, context); - return this.getNewErrorTypeSymbol(); - } - } - - return this.semanticInfoChain.anyTypeSymbol; - } - - var isSuperCall = false; - - if (callEx.expression.kind() === 50 /* SuperKeyword */) { - isSuperCall = true; - - if (targetTypeSymbol.isClass()) { - targetSymbol = targetTypeSymbol.getConstructorMethod(); - this.resolveDeclaredSymbol(targetSymbol, context); - targetTypeSymbol = targetSymbol.type; - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Calls_to_super_are_only_valid_inside_a_class), additionalResults, context); - this.resolveAST(callEx.argumentList.arguments, false, context); - - return this.getNewErrorTypeSymbol(); - } - } - - var signatures = isSuperCall ? targetTypeSymbol.getConstructSignatures() : targetTypeSymbol.getCallSignatures(); - - if (!signatures.length && (targetTypeSymbol.kind === 33554432 /* ConstructorType */)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, [targetTypeSymbol.toString()]), additionalResults, context); - } - - var explicitTypeArgs = null; - var couldNotFindGenericOverload = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - var triedToInferTypeArgs = false; - - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var beforeResolutionSignatures = signatures; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < signatures.length; i++) { - typeParameters = signatures[i].getTypeParameters(); - couldNotAssignToConstraint = false; - - if (signatures[i].isGeneric() && typeParameters.length) { - if (isSuperCall && targetTypeSymbol.isGeneric() && !callEx.argumentList.typeArgumentList) { - explicitTypeArgs = signatures[i].returnType.getTypeArguments(); - } - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else { - TypeScript.Debug.assert(callEx.argumentList); - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, signatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(signatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = signatures[i]; - } - } - } - - if (signatures.length && !resolvedSignatures.length) { - couldNotFindGenericOverload = true; - } - - signatures = resolvedSignatures; - - var errorCondition = null; - if (!signatures.length) { - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures && beforeResolutionSignatures.length ? beforeResolutionSignatures[0] : null; - - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (!couldNotFindGenericOverload) { - if (this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(targetTypeSymbol, this.cachedFunctionInterfaceType(), targetAST, context)) { - if (callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } - return this.semanticInfoChain.anyTypeSymbol; - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature), additionalResults, context); - } else if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var signature = this.resolveOverloads(callEx, signatures, callEx.argumentList.typeArgumentList !== null, context, diagnostics); - var useBeforeResolutionSignatures = signature == null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!signatures.length) { - return errorCondition; - } - - signature = signatures[0]; - } - - var rootSignature = signature.getRootSymbol(); - if (!rootSignature.isGeneric() && callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } else if (rootSignature.isGeneric() && callEx.argumentList.typeArgumentList && rootSignature.getTypeParameters() && (callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount() !== rootSignature.getTypeParameters().length)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [rootSignature.getTypeParameters().length, callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()]), additionalResults, context); - } - - var returnType = isSuperCall ? this.semanticInfoChain.voidTypeSymbol : signature.returnType; - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - if (useBeforeResolutionSignatures && beforeResolutionSignatures) { - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures[0]; - } else { - additionalResults.resolvedSignatures = signatures; - additionalResults.candidateSignature = signature; - } - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveObjectCreationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeObjectCreationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - this.setSymbolForAST(callEx, symbol, context); - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckObjectCreationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckObjectCreationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - this.resolveAST(callEx.expression, false, context); - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (callEx.argumentList) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - var len = callEx.argumentList.arguments.nonSeparatorCount(); - - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.postOverloadResolutionDiagnostics = function (diagnostic, additionalResults, context) { - if (!context.inProvisionalResolution()) { - additionalResults.diagnosticsFromOverloadResolution.push(diagnostic); - } - context.postDiagnostic(diagnostic); - }; - - PullTypeResolver.prototype.computeObjectCreationExpressionSymbol = function (callEx, context, additionalResults) { - var _this = this; - var returnType = null; - - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetTypeSymbol = targetSymbol.isType() ? targetSymbol : targetSymbol.type; - - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var constructSignatures = targetTypeSymbol.getConstructSignatures(); - - var explicitTypeArgs = null; - var usedCallSignaturesInstead = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - return targetTypeSymbol; - } - - if (!constructSignatures.length) { - constructSignatures = targetTypeSymbol.getCallSignatures(); - usedCallSignaturesInstead = true; - - if (this.compilationSettings.noImplicitAny()) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type), additionalResults, context); - } - } - - if (constructSignatures.length) { - if (callEx.argumentList && callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - if (targetTypeSymbol.isGeneric()) { - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var triedToInferTypeArgs; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < constructSignatures.length; i++) { - couldNotAssignToConstraint = false; - - if (constructSignatures[i].isGeneric()) { - typeParameters = constructSignatures[i].getTypeParameters(); - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else if (callEx.argumentList) { - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, constructSignatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } else { - inferredOrExplicitTypeArgs = TypeScript.ArrayUtilities.select(typeParameters, function (typeParameter) { - return typeParameter.getDefaultConstraint(_this.semanticInfoChain); - }); - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(constructSignatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList && callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = constructSignatures[i]; - } - } - } - - constructSignatures = resolvedSignatures; - } - - var signature = this.resolveOverloads(callEx, constructSignatures, callEx.argumentList && callEx.argumentList.typeArgumentList !== null, context, diagnostics); - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = []; - - if (!constructSignatures.length) { - if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var errorCondition = null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_new_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!constructSignatures.length) { - return errorCondition; - } - - signature = constructSignatures[0]; - } - - returnType = signature.returnType; - - if (returnType && !signature.isGeneric() && returnType.isGeneric() && !returnType.getIsSpecialized()) { - if (explicitTypeArgs && explicitTypeArgs.length) { - returnType = this.createInstantiatedType(returnType, explicitTypeArgs); - } else { - returnType = this.instantiateTypeToAny(returnType, context); - } - } - - if (usedCallSignaturesInstead) { - if (returnType !== this.semanticInfoChain.voidTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Call_signatures_used_in_a_new_expression_must_have_a_void_return_type), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - } else { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - } - - if (!returnType) { - returnType = signature.returnType; - - if (!returnType) { - returnType = targetTypeSymbol; - } - } - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList && callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - } else if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Invalid_new_expression), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - }; - - PullTypeResolver.prototype.instantiateSignatureInContext = function (signatureAToInstantiate, contextualSignatureB, context, shouldFixContextualSignatureParameterTypes) { - var typeReplacementMap = []; - var inferredTypeArgs; - var specializedSignature; - var typeParameters = signatureAToInstantiate.getTypeParameters(); - var typeConstraint = null; - - var typeArgumentInferenceContext = new TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext(this, context, signatureAToInstantiate, contextualSignatureB, shouldFixContextualSignatureParameterTypes); - inferredTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - - var functionTypeA = signatureAToInstantiate.functionType; - var functionTypeB = contextualSignatureB.functionType; - var enclosingTypeParameterMap; - - if (functionTypeA) { - enclosingTypeParameterMap = functionTypeA.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - if (functionTypeB) { - enclosingTypeParameterMap = functionTypeB.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - TypeScript.PullInstantiationHelpers.updateTypeParameterArgumentMap(typeParameters, inferredTypeArgs, typeReplacementMap); - - return this.instantiateSignature(signatureAToInstantiate, typeReplacementMap); - }; - - PullTypeResolver.prototype.resolveCastExpression = function (assertionExpression, context) { - var typeAssertionType = this.resolveTypeReference(assertionExpression.type, context).type; - - if (this.canTypeCheckAST(assertionExpression, context)) { - this.typeCheckCastExpression(assertionExpression, context, typeAssertionType); - } - - return typeAssertionType; - }; - - PullTypeResolver.prototype.typeCheckCastExpression = function (assertionExpression, context, typeAssertionType) { - this.setTypeChecked(assertionExpression, context); - - context.pushNewContextualType(typeAssertionType); - var exprType = this.resolveAST(assertionExpression.expression, true, context).type; - context.popAnyContextualType(); - - this.resolveDeclaredSymbol(typeAssertionType, context); - this.resolveDeclaredSymbol(exprType, context); - - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(exprType, typeAssertionType, assertionExpression, context, comparisonInfo); - - if (!isAssignable) { - var widenedExprType = exprType.widenedType(this, assertionExpression.expression, context); - isAssignable = this.sourceIsAssignableToTarget(typeAssertionType, widenedExprType, assertionExpression, context, comparisonInfo); - } - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(assertionExpression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.resolveAssignmentExpression = function (binaryExpression, context) { - var leftExpr = this.resolveAST(binaryExpression.left, false, context); - var leftType = leftExpr.type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binaryExpression.right, true, context).type; - context.popAnyContextualType(); - - rightType = this.getInstanceTypeForAssignment(binaryExpression.left, rightType, context); - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (!this.isReference(binaryExpression.left, leftExpr)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } else { - this.checkAssignability(binaryExpression.left, rightType, leftExpr.type, context); - } - } - - return rightType; - }; - - PullTypeResolver.prototype.getInstanceTypeForAssignment = function (lhs, type, context) { - var typeToReturn = type; - if (typeToReturn && typeToReturn.isAlias()) { - typeToReturn = typeToReturn.getExportAssignedTypeSymbol(); - } - - if (typeToReturn && typeToReturn.isContainer() && !typeToReturn.isEnum()) { - var instanceTypeSymbol = typeToReturn.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(lhs, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [type.toString()])); - typeToReturn = null; - } else { - typeToReturn = instanceTypeSymbol; - } - } - - return typeToReturn; - }; - - PullTypeResolver.prototype.widenType = function (type, ast, context) { - if (type === this.semanticInfoChain.undefinedTypeSymbol || type === this.semanticInfoChain.nullTypeSymbol || type.isError()) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (type.isArrayNamedTypeReference()) { - return this.widenArrayType(type, ast, context); - } else if (type.kind === 256 /* ObjectLiteral */) { - return this.widenObjectLiteralType(type, ast, context); - } - - return type; - }; - - PullTypeResolver.prototype.widenArrayType = function (type, ast, context) { - var elementType = type.getElementType().widenedType(this, ast, context); - - if (this.compilationSettings.noImplicitAny() && ast) { - if (elementType === this.semanticInfoChain.anyTypeSymbol && type.getElementType() !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Array_Literal_implicitly_has_an_any_type_from_widening)); - } - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.widenObjectLiteralType = function (type, ast, context) { - if (!this.needsToWidenObjectLiteralType(type, ast, context)) { - return type; - } - - TypeScript.Debug.assert(type.name === ""); - var newObjectTypeSymbol = new TypeScript.PullTypeSymbol(type.name, type.kind); - var declsOfObjectType = type.getDeclarations(); - TypeScript.Debug.assert(declsOfObjectType.length === 1); - newObjectTypeSymbol.addDeclaration(declsOfObjectType[0]); - var members = type.getMembers(); - - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - - var widenedMemberType = members[i].type.widenedType(this, ast, context); - var newMember = new TypeScript.PullSymbol(members[i].name, members[i].kind); - - var declsOfMember = members[i].getDeclarations(); - - newMember.addDeclaration(declsOfMember[0]); - newMember.type = widenedMemberType; - newObjectTypeSymbol.addMember(newMember); - newMember.setResolved(); - - if (this.compilationSettings.noImplicitAny() && ast && widenedMemberType === this.semanticInfoChain.anyTypeSymbol && memberType !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Object_literal_s_property_0_implicitly_has_an_any_type_from_widening, [members[i].name])); - } - } - - var indexers = type.getIndexSignatures(); - for (var i = 0; i < indexers.length; i++) { - var newIndexer = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var parameter = indexers[i].parameters[0]; - var newParameter = new TypeScript.PullSymbol(parameter.name, parameter.kind); - newParameter.type = parameter.type; - newIndexer.addParameter(newParameter); - newIndexer.returnType = indexers[i].returnType; - newObjectTypeSymbol.addIndexSignature(newIndexer); - } - - return newObjectTypeSymbol; - }; - - PullTypeResolver.prototype.needsToWidenObjectLiteralType = function (type, ast, context) { - var members = type.getMembers(); - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - if (memberType !== memberType.widenedType(this, ast, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.findBestCommonType = function (collection, context, comparisonInfo) { - var len = collection.getLength(); - - for (var i = 0; i < len; i++) { - var candidateType = collection.getTypeAtIndex(i); - if (this.typeIsBestCommonTypeCandidate(candidateType, collection, context)) { - return candidateType; - } - } - - return this.semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeResolver.prototype.typeIsBestCommonTypeCandidate = function (candidateType, collection, context) { - for (var i = 0; i < collection.getLength(); i++) { - var otherType = collection.getTypeAtIndex(i); - if (candidateType === otherType) { - continue; - } - - if (!this.sourceIsSubtypeOfTarget(otherType, candidateType, null, context)) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typesAreIdenticalInEnclosingTypes = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (t1 && t2) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingTypesAreIdentical(t1, t2, context); - } - } - - return this.typesAreIdentical(t1, t2, context); - }; - - PullTypeResolver.prototype.typesAreIdenticalWithNewEnclosingTypes = function (t1, t2, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var areTypesIdentical = this.typesAreIdentical(t1, t2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areTypesIdentical; - }; - - PullTypeResolver.prototype.typesAreIdentical = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (!t1 || !t2) { - return false; - } - - if (TypeScript.hasFlag(t1.kind, 64 /* Enum */) || TypeScript.hasFlag(t2.kind, 64 /* Enum */)) { - return false; - } - - if (t1.isPrimitive() && t1.isStringConstant() && t2.isPrimitive() && t2.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(t1.name) === TypeScript.stripStartAndEndQuotes(t2.name); - } - - if (t1.isPrimitive() || t2.isPrimitive()) { - return false; - } - - if (t1.isError() && t2.isError()) { - return true; - } - - var isIdentical = this.identicalCache.valueAt(t1.pullSymbolID, t2.pullSymbolID); - if (isIdentical != undefined) { - return isIdentical; - } - - if (t1.isTypeParameter() !== t2.isTypeParameter()) { - return false; - } else if (t1.isTypeParameter()) { - var t1ParentDeclaration = t1.getDeclarations()[0].getParentDecl(); - var t2ParentDeclaration = t2.getDeclarations()[0].getParentDecl(); - - if (t1ParentDeclaration === t2ParentDeclaration) { - return this.symbolsShareDeclaration(t1, t2); - } else { - return false; - } - } - - if (t1.isPrimitive() !== t2.isPrimitive()) { - return false; - } - - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, true); - var statesWhenStartedWalkingTypes = context.startWalkingTypes(t1, t2); - isIdentical = this.typesAreIdenticalWorker(t1, t2, context); - context.endWalkingTypes(statesWhenStartedWalkingTypes); - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, isIdentical); - - return isIdentical; - }; - - PullTypeResolver.prototype.typesAreIdenticalWorker = function (t1, t2, context) { - if (t1.getIsSpecialized() && t2.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(t1) === TypeScript.PullHelpers.getRootType(t2) && TypeScript.PullHelpers.getRootType(t1).isNamedTypeSymbol()) { - var t1TypeArguments = t1.getTypeArguments(); - var t2TypeArguments = t2.getTypeArguments(); - - if (t1TypeArguments && t2TypeArguments) { - for (var i = 0; i < t1TypeArguments.length; i++) { - if (!this.typesAreIdenticalWithNewEnclosingTypes(t1TypeArguments[i], t2TypeArguments[i], context)) { - return false; - } - } - } - - return true; - } - } - - if (t1.hasMembers() && t2.hasMembers()) { - var t1Members = t1.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - var t2Members = t2.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - if (t1Members.length !== t2Members.length) { - return false; - } - - var t1MemberSymbol = null; - var t2MemberSymbol = null; - - var t1MemberType = null; - var t2MemberType = null; - - for (var iMember = 0; iMember < t1Members.length; iMember++) { - t1MemberSymbol = t1Members[iMember]; - t2MemberSymbol = this.getNamedPropertySymbol(t1MemberSymbol.name, 68147712 /* SomeValue */, t2); - - if (!this.propertiesAreIdentical(t1MemberSymbol, t2MemberSymbol, context)) { - return false; - } - } - } else if (t1.hasMembers() || t2.hasMembers()) { - return false; - } - - var t1CallSigs = t1.getCallSignatures(); - var t2CallSigs = t2.getCallSignatures(); - - var t1ConstructSigs = t1.getConstructSignatures(); - var t2ConstructSigs = t2.getConstructSignatures(); - - var t1IndexSigs = t1.getIndexSignatures(); - var t2IndexSigs = t2.getIndexSignatures(); - - if (!this.signatureGroupsAreIdentical(t1CallSigs, t2CallSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1ConstructSigs, t2ConstructSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1IndexSigs, t2IndexSigs, context)) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.propertiesAreIdentical = function (propertySymbol1, propertySymbol2, context) { - if (!propertySymbol2 || (propertySymbol1.isOptional !== propertySymbol2.isOptional)) { - return false; - } - - var t1MemberSymbolIsPrivate = propertySymbol1.anyDeclHasFlag(2 /* Private */); - var t2MemberSymbolIsPrivate = propertySymbol2.anyDeclHasFlag(2 /* Private */); - - if (t1MemberSymbolIsPrivate !== t2MemberSymbolIsPrivate) { - return false; - } else if (t2MemberSymbolIsPrivate && t1MemberSymbolIsPrivate) { - var t1MemberSymbolDecl = propertySymbol1.getDeclarations()[0]; - var sourceDecl = propertySymbol2.getDeclarations()[0]; - if (t1MemberSymbolDecl !== sourceDecl) { - return false; - } - } - - var t1MemberType = propertySymbol1.type; - var t2MemberType = propertySymbol2.type; - - context.walkMemberTypes(propertySymbol1.name); - var areMemberTypesIdentical = this.typesAreIdenticalInEnclosingTypes(t1MemberType, t2MemberType, context); - context.postWalkMemberTypes(); - return areMemberTypesIdentical; - }; - - PullTypeResolver.prototype.propertiesAreIdenticalWithNewEnclosingTypes = function (type1, type2, property1, property2, context) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(type1, type2); - var arePropertiesIdentical = this.propertiesAreIdentical(property1, property2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return arePropertiesIdentical; - }; - - PullTypeResolver.prototype.signatureGroupsAreIdentical = function (sg1, sg2, context) { - if (sg1 === sg2) { - return true; - } - - if (!sg1 || !sg2) { - return false; - } - - if (sg1.length !== sg2.length) { - return false; - } - - for (var i = 0; i < sg1.length; i++) { - context.walkSignatures(sg1[i].kind, i); - var areSignaturesIdentical = this.signaturesAreIdentical(sg1[i], sg2[i], context, true); - context.postWalkSignatures(); - if (!areSignaturesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typeParametersAreIdentical = function (tp1, tp2, context) { - var typeParamsAreIdentical = this.typeParametersAreIdenticalWorker(tp1, tp2, context); - - this.setTypeParameterIdentity(tp1, tp2, undefined); - - return typeParamsAreIdentical; - }; - - PullTypeResolver.prototype.typeParametersAreIdenticalWorker = function (tp1, tp2, context) { - if (!!(tp1 && tp1.length) !== !!(tp2 && tp2.length)) { - return false; - } - - if (tp1 && tp2 && (tp1.length !== tp2.length)) { - return false; - } - - if (tp1 && tp2) { - for (var i = 0; i < tp1.length; i++) { - context.walkTypeParameterConstraints(i); - var areConstraintsIdentical = this.typesAreIdentical(tp1[i].getConstraint(), tp2[i].getConstraint(), context); - context.postWalkTypeParameterConstraints(); - if (!areConstraintsIdentical) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.setTypeParameterIdentity = function (tp1, tp2, val) { - if (tp1 && tp2 && tp1.length === tp2.length) { - for (var i = 0; i < tp1.length; i++) { - this.identicalCache.setValueAt(tp1[i].pullSymbolID, tp2[i].pullSymbolID, val); - } - } - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWithNewEnclosingTypes = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var areSignaturesIdentical = this.signaturesAreIdentical(s1, s2, context, includingReturnType); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSignaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdentical = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1 === s2) { - return true; - } - - var signaturesIdentical = this.identicalCache.valueAt(s1.pullSymbolID, s2.pullSymbolID); - if (signaturesIdentical || (signaturesIdentical != undefined && includingReturnType)) { - return signaturesIdentical; - } - - var oldValue = signaturesIdentical; - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, true); - - signaturesIdentical = this.signaturesAreIdenticalWorker(s1, s2, context, includingReturnType); - - if (includingReturnType) { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, signaturesIdentical); - } else { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, oldValue); - } - - return signaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWorker = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1.hasVarArgs !== s2.hasVarArgs) { - return false; - } - - if (s1.nonOptionalParamCount !== s2.nonOptionalParamCount) { - return false; - } - - if (s1.parameters.length !== s2.parameters.length) { - return false; - } - - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var typeParametersParametersAndReturnTypesAreIdentical = this.signatureTypeParametersParametersAndReturnTypesAreIdentical(s1, s2, context, includingReturnType); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - return typeParametersParametersAndReturnTypesAreIdentical; - }; - - PullTypeResolver.prototype.signatureTypeParametersParametersAndReturnTypesAreIdentical = function (s1, s2, context, includingReturnType) { - if (!this.typeParametersAreIdenticalWorker(s1.getTypeParameters(), s2.getTypeParameters(), context)) { - return false; - } - - if (includingReturnType) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2); - context.walkReturnTypes(); - var areReturnTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - context.postWalkReturnTypes(); - if (!areReturnTypesIdentical) { - return false; - } - } - - var s1Params = s1.parameters; - var s2Params = s2.parameters; - - for (var iParam = 0; iParam < s1Params.length; iParam++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1Params[iParam]); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2Params[iParam]); - context.walkParameterTypes(iParam); - var areParameterTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1Params[iParam].type, s2Params[iParam].type, context); - context.postWalkParameterTypes(); - - if (!areParameterTypesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.signatureReturnTypesAreIdentical = function (s1, s2, context) { - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - context.walkReturnTypes(); - var returnTypeIsIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - - return returnTypeIsIdentical; - }; - - PullTypeResolver.prototype.symbolsShareDeclaration = function (symbol1, symbol2) { - var decls1 = symbol1.getDeclarations(); - var decls2 = symbol2.getDeclarations(); - - if (decls1.length && decls2.length) { - return decls1[0] === decls2[0]; - } - - return false; - }; - - PullTypeResolver.prototype.sourceIsSubtypeOfTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, false, this.subtypeCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceMembersAreAssignableToTargetMembers = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceMembersAreAssignableToTargetMembers = this.sourceMembersAreRelatableToTargetMembers(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceMembersAreAssignableToTargetMembers; - }; - - PullTypeResolver.prototype.sourcePropertyIsAssignableToTargetProperty = function (source, target, sourceProp, targetProp, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var isSourcePropertyIsAssignableToTargetProperty = this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourcePropertyIsAssignableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreAssignableToTargetCallSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceCallSignaturesAssignableToTargetCallSignatures = this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceCallSignaturesAssignableToTargetCallSignatures; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreAssignableToTargetConstructSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceConstructSignaturesAssignableToTargetConstructSignatures = this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceConstructSignaturesAssignableToTargetConstructSignatures; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreAssignableToTargetIndexSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceIndexSignaturesAssignableToTargetIndexSignatures = this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceIndexSignaturesAssignableToTargetIndexSignatures; - }; - - PullTypeResolver.prototype.typeIsAssignableToFunction = function (source, ast, context) { - if (source.isFunctionType()) { - return true; - } - - return this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(source, this.cachedFunctionInterfaceType(), ast, context); - }; - - PullTypeResolver.prototype.signatureIsAssignableToTarget = function (s1, s2, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var isSignatureIsAssignableToTarget = this.signatureIsRelatableToTarget(s1, s2, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSignatureIsAssignableToTarget; - }; - - PullTypeResolver.prototype.sourceIsAssignableToTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsAssignableToTargetWithNewEnclosingTypes = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTargetWithNewEnclosingTypes(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.getSymbolForRelationshipCheck = function (symbol) { - if (symbol && symbol.isTypeReference()) { - return symbol.getReferencedTypeSymbol(); - } - - return symbol; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; - } - - if (source && target) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingSourceTypeIsRelatableToTargetType(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - } - } - - return this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWithNewEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var isSourceRelatable = this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourceRelatable; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInCache = function (source, target, comparisonCache, comparisonInfo) { - var isRelatable = comparisonCache.valueAt(source.pullSymbolID, target.pullSymbolID); - - if (isRelatable) { - return { isRelatable: isRelatable }; - } - - if (isRelatable != undefined && !comparisonInfo) { - return { isRelatable: isRelatable }; - } - - return null; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTarget = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; - } - - if (!(source && target)) { - return true; - } - - var sourceApparentType = this.getApparentType(source); - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(source, target, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - if (source === this.semanticInfoChain.stringTypeSymbol && target.isPrimitive() && target.isStringConstant()) { - return comparisonInfo && comparisonInfo.stringConstantVal && (comparisonInfo.stringConstantVal.kind() === 14 /* StringLiteral */) && (TypeScript.stripStartAndEndQuotes(comparisonInfo.stringConstantVal.text()) === TypeScript.stripStartAndEndQuotes(target.name)); - } - - if (assignableTo) { - if (this.isAnyOrEquivalent(source) || this.isAnyOrEquivalent(target)) { - return true; - } - } else { - if (this.isAnyOrEquivalent(target)) { - return true; - } - } - - if (target === this.semanticInfoChain.stringTypeSymbol && source.isPrimitive() && source.isStringConstant()) { - return true; - } - - if (source.isPrimitive() && source.isStringConstant() && target.isPrimitive() && target.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(source.name) === TypeScript.stripStartAndEndQuotes(target.name); - } - - if (source === this.semanticInfoChain.undefinedTypeSymbol) { - return true; - } - - if ((source === this.semanticInfoChain.nullTypeSymbol) && (target !== this.semanticInfoChain.undefinedTypeSymbol && target != this.semanticInfoChain.voidTypeSymbol)) { - return true; - } - - if (target === this.semanticInfoChain.voidTypeSymbol) { - if (source === this.semanticInfoChain.undefinedTypeSymbol || source == this.semanticInfoChain.nullTypeSymbol) { - return true; - } - - return false; - } else if (source === this.semanticInfoChain.voidTypeSymbol) { - if (target === this.semanticInfoChain.anyTypeSymbol) { - return true; - } - - return false; - } - - if (target === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(source)) { - return true; - } - - if (source === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(target)) { - return assignableTo; - } - - if (TypeScript.PullHelpers.symbolIsEnum(target) && TypeScript.PullHelpers.symbolIsEnum(source)) { - return this.symbolsShareDeclaration(target, source); - } - - if ((source.kind & 64 /* Enum */) || (target.kind & 64 /* Enum */)) { - return false; - } - - if (source.getIsSpecialized() && target.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(source) === TypeScript.PullHelpers.getRootType(target) && TypeScript.PullHelpers.getRootType(source).isNamedTypeSymbol()) { - var sourceTypeArguments = source.getTypeArguments(); - var targetTypeArguments = target.getTypeArguments(); - - if (sourceTypeArguments && targetTypeArguments) { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - for (var i = 0; i < sourceTypeArguments.length; i++) { - if (!this.sourceIsRelatableToTargetWithNewEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, null, isComparingInstantiatedSignatures)) { - break; - } - } - - if (i === sourceTypeArguments.length) { - return true; - } else { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, undefined); - } - } - } - } - - if (target.isTypeParameter()) { - if (source.isTypeParameter()) { - if (!source.getConstraint()) { - return this.typesAreIdentical(target, source, context); - } else { - return this.isSourceTypeParameterConstrainedToTargetTypeParameter(source, target); - } - } else { - if (isComparingInstantiatedSignatures) { - target = target.getBaseConstraint(this.semanticInfoChain); - } else { - return this.typesAreIdentical(target, sourceApparentType, context); - } - } - } - - if (sourceApparentType.isPrimitive() || target.isPrimitive()) { - return false; - } - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(sourceApparentType, target); - var isRelatable = this.sourceIsRelatableToTargetWorker(sourceApparentType, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.isSourceTypeParameterConstrainedToTargetTypeParameter = function (source, target) { - var current = source; - while (current && current.isTypeParameter()) { - if (current === target) { - return true; - } - - current = current.getConstraint(); - } - return false; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWorker = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (target.hasMembers() && !this.sourceMembersAreRelatableToTargetMembers(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.sourceMembersAreRelatableToTargetMembers = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetProps = target.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - for (var itargetProp = 0; itargetProp < targetProps.length; itargetProp++) { - var targetProp = targetProps[itargetProp]; - - var sourceProp = this._getNamedPropertySymbolOfAugmentedType(targetProp.name, source); - - this.resolveDeclaredSymbol(targetProp, context); - - var targetPropType = targetProp.type; - - if (!sourceProp) { - if (!(targetProp.isOptional)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_is_missing_property_1_from_type_2, [source.toString(enclosingSymbol), targetProp.getScopedNameEx().toString(), target.toString(enclosingSymbol)])); - } - return false; - } - continue; - } - - if (!this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.infinitelyExpandingSourceTypeIsRelatableToTargetType = function (sourceType, targetType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var widenedTargetType = targetType.widenedType(this, null, context); - var widenedSourceType = sourceType.widenedType(this, null, context); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type, [sourceType.getScopedNameEx(enclosingSymbol).toString(), targetType.toString(enclosingSymbol)])); - } - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)])); - } - return false; - } - - var comparisonInfoTypeArgumentsCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoTypeArgumentsCheck = new TypeComparisonInfo(comparisonInfo); - } - var isRelatable = true; - for (var i = 0; i < sourceTypeArguments.length && isRelatable; i++) { - context.walkTypeArgument(i); - - if (!this.sourceIsRelatableToTargetInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, comparisonInfoTypeArgumentsCheck, isComparingInstantiatedSignatures)) { - isRelatable = false; - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - - if (comparisonInfoTypeArgumentsCheck && comparisonInfoTypeArgumentsCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol), comparisonInfoTypeArgumentsCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)]); - } - comparisonInfo.addMessage(message); - } - } - - context.postWalkTypeArgument(); - } - } - - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.infinitelyExpandingTypesAreIdentical = function (sourceType, targetType, context) { - var widenedTargetType = targetType.widenedType(this, null, null); - var widenedSourceType = sourceType.widenedType(this, null, null); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - for (var i = 0; i < sourceTypeArguments.length; i++) { - context.walkTypeArgument(i); - var areIdentical = this.typesAreIdenticalInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], context); - context.postWalkTypeArgument(); - - if (!areIdentical) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - } - } - - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - }; - - PullTypeResolver.prototype.sourcePropertyIsRelatableToTargetProperty = function (source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceAndTargetAreConstructors = source.isConstructor() && target.isConstructor(); - - var getNames = function (takeTypesFromPropertyContainers) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(ast); - var sourceType = takeTypesFromPropertyContainers ? sourceProp.getContainer() : source; - var targetType = takeTypesFromPropertyContainers ? targetProp.getContainer() : target; - if (sourceAndTargetAreConstructors) { - sourceType = sourceType.getAssociatedContainerType(); - targetType = targetType.getAssociatedContainerType(); - } - return { - propertyName: targetProp.getScopedNameEx().toString(), - sourceTypeName: sourceType.toString(enclosingSymbol), - targetTypeName: targetType.toString(enclosingSymbol) - }; - }; - - var targetPropIsPrivate = targetProp.anyDeclHasFlag(2 /* Private */); - var sourcePropIsPrivate = sourceProp.anyDeclHasFlag(2 /* Private */); - - if (targetPropIsPrivate !== sourcePropIsPrivate) { - if (comparisonInfo) { - var names = getNames(true); - var code; - if (targetPropIsPrivate) { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2; - } else { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2; - } - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName])); - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - } - return false; - } else if (sourcePropIsPrivate && targetPropIsPrivate) { - var targetDecl = targetProp.getDeclarations()[0]; - var sourceDecl = sourceProp.getDeclarations()[0]; - - if (targetDecl !== sourceDecl) { - if (comparisonInfo) { - var names = getNames(true); - - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_0_and_1_define_static_property_2_as_private : TypeScript.DiagnosticCode.Types_0_and_1_define_property_2_as_private; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.sourceTypeName, names.targetTypeName, names.propertyName])); - } - - return false; - } - } - - if (sourceProp.isOptional && !targetProp.isOptional) { - if (comparisonInfo) { - var names = getNames(true); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2, [names.propertyName, names.sourceTypeName, names.targetTypeName])); - } - return false; - } - - this.resolveDeclaredSymbol(sourceProp, context); - - var sourcePropType = sourceProp.type; - var targetPropType = targetProp.type; - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourcePropType, targetPropType, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - var comparisonInfoPropertyTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoPropertyTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - context.walkMemberTypes(targetProp.name); - var isSourcePropertyRelatableToTargetProperty = this.sourceIsRelatableToTargetInEnclosingTypes(sourcePropType, targetPropType, assignableTo, comparisonCache, ast, context, comparisonInfoPropertyTypeCheck, isComparingInstantiatedSignatures); - context.postWalkMemberTypes(); - - if (!isSourcePropertyRelatableToTargetProperty && comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 32 /* IncompatiblePropertyTypes */; - var message; - var names = getNames(false); - if (comparisonInfoPropertyTypeCheck && comparisonInfoPropertyTypeCheck.message) { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3 : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName, comparisonInfoPropertyTypeCheck.message]); - } else { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName]); - } - comparisonInfo.addMessage(message); - } - - return isSourcePropertyRelatableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreRelatableToTargetCallSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetCallSigs = target.getCallSignatures(); - - if (targetCallSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - var sourceCallSigs = source.getCallSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceCallSigs, targetCallSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (sourceCallSigs.length && targetCallSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - } else { - var hasSig = targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_call_signature_but_type_1_lacks_one, [hasSig, lacksSig]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreRelatableToTargetConstructSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetConstructSigs = target.getConstructSignatures(); - if (targetConstructSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - var sourceConstructSigs = source.getConstructSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceConstructSigs, targetConstructSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - var message; - if (sourceConstructSigs.length && targetConstructSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - } else { - var hasSig = targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_construct_signature_but_type_1_lacks_one, [hasSig, lacksSig]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreRelatableToTargetIndexSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetIndexSigs = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(target, context); - var targetStringSig = targetIndexSigs.stringSignature; - var targetNumberSig = targetIndexSigs.numericSignature; - - if (targetStringSig || targetNumberSig) { - var sourceIndexSigs = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(source, context); - var enclosingTypeIndexSigs = context.getBothKindOfIndexSignatures(true, false); - var sourceStringSig = sourceIndexSigs.stringSignature; - var sourceNumberSig = sourceIndexSigs.numericSignature; - - var comparable = true; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - if (targetStringSig) { - if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, true); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetStringSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; - } - } - - if (comparable && targetNumberSig) { - if (sourceNumberSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, false, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceNumberSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; - } - } - - if (!comparable) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.signatureGroupIsRelatableToTarget = function (source, target, sourceSG, targetSG, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (sourceSG === targetSG) { - return true; - } - - if (!(sourceSG.length && targetSG.length)) { - return false; - } - - var foundMatch = false; - - var targetExcludeDefinition = targetSG.length > 1; - var sourceExcludeDefinition = sourceSG.length > 1; - var sigsCompared = 0; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo, true); - comparisonInfoSignatuesTypeCheck.message = comparisonInfo.message; - } - for (var iMSig = 0; iMSig < targetSG.length; iMSig++) { - var mSig = targetSG[iMSig]; - - if (mSig.isStringConstantOverloadSignature() || (targetExcludeDefinition && mSig.isDefinition())) { - continue; - } - - for (var iNSig = 0; iNSig < sourceSG.length; iNSig++) { - var nSig = sourceSG[iNSig]; - - if (nSig.isStringConstantOverloadSignature() || (sourceExcludeDefinition && nSig.isDefinition())) { - continue; - } - - context.walkSignatures(nSig.kind, iNSig, iMSig); - var isSignatureRelatableToTarget = this.signatureIsRelatableToTarget(nSig, mSig, assignableTo, comparisonCache, ast, context, sigsCompared == 0 ? comparisonInfoSignatuesTypeCheck : null, isComparingInstantiatedSignatures); - context.postWalkSignatures(); - - sigsCompared++; - - if (isSignatureRelatableToTarget) { - foundMatch = true; - break; - } - } - - if (foundMatch) { - foundMatch = false; - continue; - } - - if (comparisonInfo && sigsCompared == 1) { - comparisonInfo.message = comparisonInfoSignatuesTypeCheck.message; - } - - return false; - } - - return true; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTarget = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourceSig, targetSig, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, true); - var isRelatable = this.signatureIsRelatableToTargetWorker(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTargetWorker = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceParameters = sourceSig.parameters; - var targetParameters = targetSig.parameters; - - if (!sourceParameters || !targetParameters) { - return false; - } - - var targetNonOptionalParamCount = targetSig.nonOptionalParamCount; - var sourceNonOptionalParamCount = sourceSig.nonOptionalParamCount; - - if (!targetSig.hasVarArgs && sourceNonOptionalParamCount > targetParameters.length) { - if (comparisonInfo) { - comparisonInfo.flags |= 3 /* SourceSignatureHasTooManyParameters */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signature_expects_0_or_fewer_parameters, [targetParameters.length])); - } - return false; - } - - if (this.signaturesAreIdentical(sourceSig, targetSig, context)) { - return true; - } - - if (targetSig.isGeneric()) { - targetSig = this.instantiateSignatureToAny(targetSig); - } - - if (sourceSig.isGeneric()) { - sourceSig = this.instantiateSignatureToAny(sourceSig); - } - - var sourceReturnType = sourceSig.returnType; - var targetReturnType = targetSig.returnType; - - if (targetReturnType !== this.semanticInfoChain.voidTypeSymbol) { - context.walkReturnTypes(); - var returnTypesAreRelatable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceReturnType, targetReturnType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.postWalkReturnTypes(); - if (!returnTypesAreRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 16 /* IncompatibleReturnTypes */; - } - - return false; - } - } - - return targetSig.forAllCorrespondingParameterTypesInThisAndOtherSignature(sourceSig, function (targetParamType, sourceParamType, iParam) { - context.walkParameterTypes(iParam); - var areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(sourceParamType, targetParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - if (!areParametersRelatable) { - context.swapEnclosingTypeWalkers(); - areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(targetParamType, sourceParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.swapEnclosingTypeWalkers(); - } - context.postWalkParameterTypes(); - - if (!areParametersRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 64 /* IncompatibleParameterTypes */; - } - } - - return areParametersRelatable; - }); - }; - - PullTypeResolver.prototype.resolveOverloads = function (application, group, haveTypeArgumentsAtCallSite, context, diagnostics) { - var _this = this; - var hasOverloads = group.length > 1; - var comparisonInfo = new TypeComparisonInfo(); - var args = application.argumentList ? application.argumentList.arguments : null; - - var initialCandidates = TypeScript.ArrayUtilities.where(group, function (signature) { - if (hasOverloads && signature.isDefinition()) { - return false; - } - - var rootSignature = signature.getRootSymbol(); - if (haveTypeArgumentsAtCallSite && !rootSignature.isGeneric()) { - return false; - } - - return _this.overloadHasCorrectArity(signature, args); - }); - - var firstAssignableButNotSupertypeSignature = null; - var firstAssignableWithProvisionalErrorsSignature = null; - - for (var i = 0; i < initialCandidates.length; i++) { - var applicability = this.overloadIsApplicable(initialCandidates[i], args, context, comparisonInfo); - if (applicability === 3 /* Subtype */) { - return initialCandidates[i]; - } else if (applicability === 2 /* AssignableWithNoProvisionalErrors */ && !firstAssignableButNotSupertypeSignature) { - firstAssignableButNotSupertypeSignature = initialCandidates[i]; - } else if (applicability === 1 /* AssignableButWithProvisionalErrors */ && !firstAssignableWithProvisionalErrorsSignature) { - firstAssignableWithProvisionalErrorsSignature = initialCandidates[i]; - } - } - - if (firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature) { - return firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature; - } else { - var target = this.getCallTargetErrorSpanAST(application); - if (comparisonInfo.message) { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0, [comparisonInfo.message])); - } else { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target, null)); - } - } - - return null; - }; - - PullTypeResolver.prototype.getCallTargetErrorSpanAST = function (callEx) { - return (callEx.expression.kind() === 212 /* MemberAccessExpression */) ? callEx.expression.name : callEx.expression; - }; - - PullTypeResolver.prototype.overloadHasCorrectArity = function (signature, args) { - if (args == null) { - return signature.nonOptionalParamCount === 0; - } - - var numberOfArgs = (args.nonSeparatorCount() && args.nonSeparatorCount() === args.separatorCount()) ? args.separatorCount() + 1 : args.nonSeparatorCount(); - if (numberOfArgs < signature.nonOptionalParamCount) { - return false; - } - if (!signature.hasVarArgs && numberOfArgs > signature.parameters.length) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.overloadIsApplicable = function (signature, args, context, comparisonInfo) { - if (args === null) { - return 3 /* Subtype */; - } - - var isInVarArg = false; - var parameters = signature.parameters; - var paramType = null; - - var overloadApplicability = 3 /* Subtype */; - - for (var i = 0; i < args.nonSeparatorCount(); i++) { - if (!isInVarArg) { - this.resolveDeclaredSymbol(parameters[i], context); - - if (parameters[i].isVarArg) { - paramType = parameters[i].type.getElementType() || this.getNewErrorTypeSymbol(parameters[i].type.getName()); - isInVarArg = true; - } else { - paramType = parameters[i].type; - } - } - - var statusOfCurrentArgument = this.overloadIsApplicableForArgument(paramType, args.nonSeparatorAt(i), i, context, comparisonInfo); - - if (statusOfCurrentArgument === 0 /* NotAssignable */) { - return 0 /* NotAssignable */; - } else if (statusOfCurrentArgument === 1 /* AssignableButWithProvisionalErrors */) { - overloadApplicability = 1 /* AssignableButWithProvisionalErrors */; - } else if (overloadApplicability !== 1 /* AssignableButWithProvisionalErrors */ && statusOfCurrentArgument === 2 /* AssignableWithNoProvisionalErrors */) { - overloadApplicability = 2 /* AssignableWithNoProvisionalErrors */; - } - } - - return overloadApplicability; - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType.isAny()) { - return 3 /* Subtype */; - } else if (paramType.isError()) { - return 1 /* AssignableButWithProvisionalErrors */; - } else if (arg.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, null, TypeScript.ASTHelpers.parametersFromIdentifier(simpleArrowFunction.identifier), null, simpleArrowFunction.block, simpleArrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 222 /* FunctionExpression */) { - var functionExpression = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, functionExpression.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(functionExpression.callSignature.parameterList), TypeScript.ASTHelpers.getType(functionExpression), functionExpression.block, null, argIndex, context, comparisonInfo); - } else if (arg.kind() === 215 /* ObjectLiteralExpression */) { - return this.overloadIsApplicableForObjectLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else if (arg.kind() === 214 /* ArrayLiteralExpression */) { - return this.overloadIsApplicableForArrayLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else { - return this.overloadIsApplicableForOtherArgument(paramType, arg, argIndex, context, comparisonInfo); - } - }; - - PullTypeResolver.prototype.overloadIsApplicableForAnyFunctionExpressionArgument = function (paramType, arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, argIndex, context, comparisonInfo) { - if (this.cachedFunctionInterfaceType() && paramType === this.cachedFunctionInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - - var argSym = this.resolveAnyFunctionExpression(arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForObjectLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (this.cachedObjectInterfaceType() && paramType === this.cachedObjectInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveObjectLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForArrayLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType === this.cachedArrayInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveArrayLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; - }; - - PullTypeResolver.prototype.overloadIsApplicableForOtherArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - var argSym = this.resolveAST(arg, false, context); - - if (argSym.type.isAlias()) { - var aliasSym = argSym.type; - argSym = aliasSym.getExportAssignedTypeSymbol(); - } - - comparisonInfo.stringConstantVal = arg; - return this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgumentHelper = function (paramType, argSym, argumentIndex, comparisonInfo, arg, context) { - var tempComparisonInfo = new TypeComparisonInfo(); - tempComparisonInfo.stringConstantVal = comparisonInfo.stringConstantVal; - if (!context.hasProvisionalErrors() && this.sourceIsSubtypeOfTarget(argSym.type, paramType, arg, context, tempComparisonInfo)) { - return 3 /* Subtype */; - } - - if (this.sourceIsAssignableToTarget(argSym.type, paramType, arg, context, comparisonInfo.message ? tempComparisonInfo : comparisonInfo)) { - return context.hasProvisionalErrors() ? 1 /* AssignableButWithProvisionalErrors */ : 2 /* AssignableWithNoProvisionalErrors */; - } - - if (!comparisonInfo.message) { - var enclosingSymbol = this.getEnclosingSymbolForAST(arg); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_apply_type_0_to_argument_1_which_is_of_type_2, [paramType.toString(enclosingSymbol), (argumentIndex + 1), argSym.getTypeName(enclosingSymbol)])); - } - - return 0 /* NotAssignable */; - }; - - PullTypeResolver.prototype.inferArgumentTypesForSignature = function (argContext, comparisonInfo, context) { - var inferenceResultTypes = argContext.inferTypeArguments(); - var typeParameters = argContext.signatureBeingInferred.getTypeParameters(); - TypeScript.Debug.assert(typeParameters.length == inferenceResultTypes.length); - - var typeReplacementMapForConstraints = null; - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (typeParameters[i].getConstraint()) { - typeReplacementMapForConstraints = typeReplacementMapForConstraints || TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, inferenceResultTypes); - var associatedConstraint = this.instantiateType(typeParameters[i].getConstraint(), typeReplacementMapForConstraints); - if (!this.sourceIsAssignableToTargetWithNewEnclosingTypes(inferenceResultTypes[i], associatedConstraint, null, context, null, false)) { - inferenceResultTypes[i] = associatedConstraint; - } - } - } - - if (argContext.isInvocationInferenceContext()) { - var invocationContext = argContext; - if (!this.typeParametersAreInScopeAtArgumentList(typeParameters, invocationContext.argumentASTs)) { - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (inferenceResultTypes[i].wrapsSomeTypeParameter(argContext.candidateCache)) { - inferenceResultTypes[i] = this.semanticInfoChain.anyTypeSymbol; - } - } - } - } - - return inferenceResultTypes; - }; - - PullTypeResolver.prototype.typeParametersAreInScopeAtArgumentList = function (typeParameters, args) { - var enclosingDecl = this.getEnclosingDeclForAST(args); - var typeParameterParentDecl = typeParameters[0].getDeclarations()[0].getParentDecl(); - return enclosingDecl.getParentPath().indexOf(typeParameterParentDecl) > -1; - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersInEnclosingType = function (expressionType, parameterType, argContext, context) { - if (expressionType && parameterType) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - this.relateInifinitelyExpandingTypeToTypeParameters(expressionType, parameterType, argContext, context); - return; - } - } - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersWithNewEnclosingTypes = function (expressionType, parameterType, argContext, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - }; - - PullTypeResolver.prototype.relateTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - if (expressionType.isError()) { - expressionType = this.semanticInfoChain.anyTypeSymbol; - } - - if (parameterType.isTypeParameter()) { - var typeParameter = parameterType; - argContext.addCandidateForInference(typeParameter, expressionType); - return; - } - - if (parameterType.isNamedTypeSymbol() && !parameterType.isGeneric() && !parameterType.getTypeArguments()) { - return; - } - - if (TypeScript.PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType(expressionType, parameterType)) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - } else { - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(expressionType, parameterType); - this.relateObjectTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - } - }; - - PullTypeResolver.prototype.relateTypeArgumentsOfTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - var parameterSideTypeArguments = parameterType.getTypeArguments(); - var argumentSideTypeArguments = expressionType.getTypeArguments(); - - TypeScript.Debug.assert(parameterSideTypeArguments && argumentSideTypeArguments && parameterSideTypeArguments.length === argumentSideTypeArguments.length); - for (var i = 0; i < parameterSideTypeArguments.length; i++) { - this.relateTypeToTypeParametersWithNewEnclosingTypes(argumentSideTypeArguments[i], parameterSideTypeArguments[i], argContext, context); - } - }; - - PullTypeResolver.prototype.relateInifinitelyExpandingTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - var expressionTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(expressionType); - var parameterTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(parameterType); - if (expressionTypeNamedTypeReference !== parameterTypeNamedTypeReference) { - return; - } - - var expressionTypeTypeArguments = expressionType.getTypeArguments(); - var parameterTypeArguments = parameterType.getTypeArguments(); - - if (expressionTypeTypeArguments && parameterTypeArguments && expressionTypeTypeArguments.length === parameterTypeArguments.length) { - for (var i = 0; i < expressionTypeTypeArguments.length; i++) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - } - } - }; - - PullTypeResolver.prototype.relateFunctionSignatureToTypeParameters = function (expressionSignature, parameterSignature, argContext, context) { - var _this = this; - var expressionReturnType = expressionSignature.returnType; - var parameterReturnType = parameterSignature.returnType; - - parameterSignature.forAllCorrespondingParameterTypesInThisAndOtherSignature(expressionSignature, function (parameterSignatureParameterType, expressionSignatureParameterType, i) { - context.walkParameterTypes(i); - _this.relateTypeToTypeParametersInEnclosingType(expressionSignatureParameterType, parameterSignatureParameterType, argContext, context); - context.postWalkParameterTypes(); - return true; - }); - - context.walkReturnTypes(); - this.relateTypeToTypeParametersInEnclosingType(expressionReturnType, parameterReturnType, argContext, context); - context.postWalkReturnTypes(); - }; - - PullTypeResolver.prototype.relateObjectTypeToTypeParameters = function (objectType, parameterType, argContext, context) { - var parameterTypeMembers = parameterType.getMembers(); - var parameterSignatures; - - var objectMember; - var objectSignatures; - - if (argContext.alreadyRelatingTypes(objectType, parameterType)) { - return; - } - - for (var i = 0; i < parameterTypeMembers.length; i++) { - objectMember = this.getNamedPropertySymbol(parameterTypeMembers[i].name, 68147712 /* SomeValue */, objectType); - if (objectMember) { - this.resolveDeclaredSymbol(objectMember); - this.resolveDeclaredSymbol(parameterTypeMembers[i]); - context.walkMemberTypes(parameterTypeMembers[i].name); - this.relateTypeToTypeParametersInEnclosingType(objectMember.type, parameterTypeMembers[i].type, argContext, context); - context.postWalkMemberTypes(); - } - } - - this.relateSignatureGroupToTypeParameters(objectType.getCallSignatures(), parameterType.getCallSignatures(), 1048576 /* CallSignature */, argContext, context); - - this.relateSignatureGroupToTypeParameters(objectType.getConstructSignatures(), parameterType.getConstructSignatures(), 2097152 /* ConstructSignature */, argContext, context); - - var parameterIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parameterType, context); - var objectIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(objectType, context); - var indexSigInfo = context.getBothKindOfIndexSignatures(false, false); - - if (parameterIndexSignatures.stringSignature && objectIndexSignatures.stringSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, true, true, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.stringSignature, parameterIndexSignatures.stringSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - if (parameterIndexSignatures.numericSignature && objectIndexSignatures.numericSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, false, false, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.numericSignature, parameterIndexSignatures.numericSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - }; - - PullTypeResolver.prototype.relateSignatureGroupToTypeParameters = function (argumentSignatures, parameterSignatures, signatureKind, argContext, context) { - for (var i = 0; i < parameterSignatures.length; i++) { - var paramSignature = parameterSignatures[i]; - if (argumentSignatures.length > 0 && paramSignature.isGeneric()) { - paramSignature = this.instantiateSignatureToAny(paramSignature); - } - for (var j = 0; j < argumentSignatures.length; j++) { - var argumentSignature = argumentSignatures[j]; - if (argumentSignature.nonOptionalParamCount > paramSignature.nonOptionalParamCount) { - continue; - } - - if (argumentSignature.isGeneric()) { - argumentSignature = this.instantiateSignatureToAny(argumentSignature); - } - - context.walkSignatures(signatureKind, j, i); - this.relateFunctionSignatureToTypeParameters(argumentSignature, paramSignature, argContext, context); - context.postWalkSignatures(); - } - } - }; - - PullTypeResolver.prototype.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference = function (expressionSymbol, context) { - var inferentialType = context.getContextualType(); - TypeScript.Debug.assert(inferentialType); - var expressionType = expressionSymbol.type; - if (this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(expressionType, true) && this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(inferentialType, false)) { - var genericExpressionSignature = expressionType.getCallSignatures()[0]; - var contextualSignature = inferentialType.getCallSignatures()[0]; - - var instantiatedSignature = this.instantiateSignatureInContext(genericExpressionSignature, contextualSignature, context, true); - if (instantiatedSignature === null) { - return expressionSymbol; - } - - var newType = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - newType.appendCallSignature(instantiatedSignature); - return newType; - } - - return expressionSymbol; - }; - - PullTypeResolver.prototype.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers = function (type, callSignatureShouldBeGeneric) { - TypeScript.Debug.assert(type); - if (type.getCallSignatures().length !== 1) { - return false; - } - - var callSignatureIsGeneric = type.getCallSignatures()[0].isGeneric(); - if (callSignatureIsGeneric !== callSignatureShouldBeGeneric) { - return false; - } - - var typeHasOtherMembers = type.getConstructSignatures().length || type.getIndexSignatures().length || type.getAllMembers(68147712 /* SomeValue */, 0 /* all */).length; - if (typeHasOtherMembers) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.instantiateTypeToAny = function (typeToSpecialize, context) { - var typeParameters = typeToSpecialize.getTypeParameters(); - - if (!typeParameters.length) { - return typeToSpecialize; - } - - var typeArguments = null; - - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; - } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; - } - } - - var type = this.createInstantiatedType(typeToSpecialize, typeArguments); - - return type; - }; - - PullTypeResolver.prototype.instantiateSignatureToAny = function (signature) { - var typeParameters = signature.getTypeParameters(); - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; - } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - var typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; - } - } - - var typeParameterArgumentMap = TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, typeArguments); - return this.instantiateSignature(signature, typeParameterArgumentMap); - }; - - PullTypeResolver.typeCheck = function (compilationSettings, semanticInfoChain, document) { - var sourceUnit = document.sourceUnit(); - - var resolver = semanticInfoChain.getResolver(); - var context = new TypeScript.PullTypeResolutionContext(resolver, true, sourceUnit.fileName()); - - if (resolver.canTypeCheckAST(sourceUnit, context)) { - resolver.resolveAST(sourceUnit, false, context); - resolver.validateVariableDeclarationGroups(semanticInfoChain.getDeclForAST(sourceUnit), context); - - while (resolver.typeCheckCallBacks.length) { - var callBack = resolver.typeCheckCallBacks.pop(); - callBack(context); - } - - resolver.processPostTypeCheckWorkItems(context); - } - }; - - PullTypeResolver.prototype.validateVariableDeclarationGroups = function (enclosingDecl, context) { - var _this = this; - this.scanVariableDeclarationGroups(enclosingDecl, function (_) { - }, function (subsequentDecl, firstSymbol) { - if (TypeScript.hasFlag(subsequentDecl.kind, 2048 /* Parameter */) || TypeScript.hasFlag(subsequentDecl.flags, 8388608 /* PropertyParameter */)) { - return; - } - - var boundDeclAST = _this.semanticInfoChain.getASTForDecl(subsequentDecl); - - var symbol = subsequentDecl.getSymbol(); - var symbolType = symbol.type; - var firstSymbolType = firstSymbol.type; - - if (symbolType && firstSymbolType && symbolType !== firstSymbolType && !_this.typesAreIdentical(symbolType, firstSymbolType, context)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(boundDeclAST, TypeScript.DiagnosticCode.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, [symbol.getScopedName(), firstSymbolType.toString(firstSymbol), symbolType.toString(symbol)])); - } - }); - }; - - PullTypeResolver.prototype.typeCheckFunctionOverloads = function (funcDecl, context, signature, allSignatures) { - if (!signature) { - var functionSignatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.semanticInfoChain.getDeclForAST(funcDecl)); - signature = functionSignatureInfo.signature; - allSignatures = functionSignatureInfo.allSignatures; - } - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDeclaration.getSymbol(); - - var definitionSignature = null; - for (var i = allSignatures.length - 1; i >= 0; i--) { - if (allSignatures[i].isDefinition()) { - definitionSignature = allSignatures[i]; - break; - } - } - - if (!signature.isDefinition()) { - var signatureParentDecl = signature.getDeclarations()[0].getParentDecl(); - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i] === signature) { - break; - } - - var allSignaturesParentDecl = allSignatures[i].getDeclarations()[0].getParentDecl(); - if (allSignaturesParentDecl !== signatureParentDecl) { - continue; - } - - if (this.signaturesAreIdenticalWithNewEnclosingTypes(allSignatures[i], signature, context, false)) { - if (!this.signatureReturnTypesAreIdentical(allSignatures[i], signature, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overloads_cannot_differ_only_by_return_type)); - } else if (funcDecl.kind() === 137 /* ConstructorDeclaration */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_constructor_overload_signature)); - } else if (functionDeclaration.kind === 2097152 /* ConstructSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_construct_signature)); - } else if (functionDeclaration.kind === 1048576 /* CallSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_call_signature)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_signature_for_0, [funcSymbol.getScopedNameEx().toString()])); - } - - break; - } - } - } - - var isConstantOverloadSignature = signature.isStringConstantOverloadSignature(); - if (isConstantOverloadSignature) { - if (signature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_implementation_cannot_use_specialized_type)); - } else { - var foundSubtypeSignature = false; - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i].isDefinition() || allSignatures[i] === signature) { - continue; - } - - if (!allSignatures[i].isResolved) { - this.resolveDeclaredSymbol(allSignatures[i], context); - } - - if (allSignatures[i].isStringConstantOverloadSignature()) { - continue; - } - - if (this.signatureIsAssignableToTarget(signature, allSignatures[i], null, context)) { - foundSubtypeSignature = true; - break; - } - } - - if (!foundSubtypeSignature) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature)); - } - } - } else if (definitionSignature && definitionSignature !== signature) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!definitionSignature.isResolved) { - this.resolveDeclaredSymbol(definitionSignature, context); - } - - if (!this.signatureIsAssignableToTarget(definitionSignature, signature, funcDecl, context, comparisonInfo)) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition_NL_0, [comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition)); - } - } - } - - var signatureForVisibilityCheck = definitionSignature; - if (!definitionSignature) { - if (allSignatures[0] === signature) { - return; - } - signatureForVisibilityCheck = allSignatures[0]; - } - - if (funcDecl.kind() !== 137 /* ConstructorDeclaration */ && functionDeclaration.kind !== 2097152 /* ConstructSignature */ && signatureForVisibilityCheck && signature !== signatureForVisibilityCheck) { - var errorCode; - - if (signatureForVisibilityCheck.anyDeclHasFlag(2 /* Private */) !== signature.anyDeclHasFlag(2 /* Private */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_public_or_private; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(1 /* Exported */) !== signature.anyDeclHasFlag(1 /* Exported */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_exported_or_not_exported; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(8 /* Ambient */) !== signature.anyDeclHasFlag(8 /* Ambient */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_ambient_or_non_ambient; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(128 /* Optional */) !== signature.anyDeclHasFlag(128 /* Optional */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_optional_or_required; - } - - if (errorCode) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, errorCode)); - } - } - }; - - PullTypeResolver.prototype.checkSymbolPrivacy = function (declSymbol, symbol, privacyErrorReporter) { - if (!symbol || symbol.kind === 2 /* Primitive */) { - return; - } - - if (symbol.isType()) { - var typeSymbol = symbol; - var isNamedType = typeSymbol.isNamedTypeSymbol(); - - if (typeSymbol.isArrayNamedTypeReference()) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getElementType(), privacyErrorReporter); - return; - } - - if (!isNamedType) { - var typeOfSymbol = typeSymbol.getTypeOfSymbol(); - if (typeOfSymbol) { - this.checkSymbolPrivacy(declSymbol, typeOfSymbol, privacyErrorReporter); - return; - } - } - - if (typeSymbol.inSymbolPrivacyCheck) { - return; - } - - typeSymbol.inSymbolPrivacyCheck = true; - - var typars = typeSymbol.getTypeArgumentsOrTypeParameters(); - if (typars) { - for (var i = 0; i < typars.length; i++) { - this.checkSymbolPrivacy(declSymbol, typars[i], privacyErrorReporter); - } - } - - if (!isNamedType) { - var members = typeSymbol.getMembers(); - for (var i = 0; i < members.length; i++) { - this.checkSymbolPrivacy(declSymbol, members[i].type, privacyErrorReporter); - } - - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getCallSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getConstructSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getIndexSignatures(), privacyErrorReporter); - } else if (typeSymbol.kind === 8192 /* TypeParameter */) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getConstraint(), privacyErrorReporter); - } - - typeSymbol.inSymbolPrivacyCheck = false; - - if (!isNamedType) { - return; - } - } - - if (declSymbol.isExternallyVisible()) { - var symbolIsVisible = symbol.isExternallyVisible(); - - if (symbolIsVisible && symbol.kind !== 8192 /* TypeParameter */) { - var symbolPath = symbol.pathToRoot(); - var declSymbolPath = declSymbol.pathToRoot(); - - if (symbolPath[symbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1] !== symbolPath[symbolPath.length - 1]) { - symbolIsVisible = false; - var declSymbolScope = declSymbolPath[declSymbolPath.length - 1]; - for (var i = symbolPath.length - 1; i >= 0; i--) { - var aliasSymbols = symbolPath[i].getExternalAliasedSymbols(declSymbolScope); - if (aliasSymbols) { - symbolIsVisible = true; - aliasSymbols[0].setTypeUsedExternally(); - break; - } - } - symbol = symbolPath[symbolPath.length - 1]; - } - } else if (symbol.kind === 128 /* TypeAlias */) { - var aliasSymbol = symbol; - symbolIsVisible = true; - aliasSymbol.setTypeUsedExternally(); - } - - if (!symbolIsVisible) { - privacyErrorReporter(symbol); - } - } - }; - - PullTypeResolver.prototype.checkTypePrivacyOfSignatures = function (declSymbol, signatures, privacyErrorReporter) { - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (signatures.length > 1 && signature.isDefinition()) { - continue; - } - - var typeParams = signature.getTypeParameters(); - for (var j = 0; j < typeParams.length; j++) { - this.checkSymbolPrivacy(declSymbol, typeParams[j], privacyErrorReporter); - } - - var params = signature.parameters; - for (var j = 0; j < params.length; j++) { - var paramType = params[j].type; - this.checkSymbolPrivacy(declSymbol, paramType, privacyErrorReporter); - } - - var returnType = signature.returnType; - this.checkSymbolPrivacy(declSymbol, returnType, privacyErrorReporter); - } - }; - - PullTypeResolver.prototype.typeParameterOfTypeDeclarationPrivacyErrorReporter = function (classOrInterface, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeParameters = classOrInterface.kind() === 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1; - } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1; - } - } - - var messageArguments = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.baseListPrivacyErrorReporter = function (classOrInterface, declSymbol, baseAst, isExtendedType, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_class_from_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_interface_from_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_interface_from_inaccessible_module_1; - } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_private_class_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_private_interface_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_private_interface_1; - } - } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseAst, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.variablePrivacyErrorReporter = function (declAST, declSymbol, symbol, context) { - var typeSymbol = symbol; - var enclosingDecl = this.getEnclosingDecl(declSymbol.getDeclarations()[0]); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isProperty = declSymbol.kind === 4096 /* Property */; - var isPropertyOfClass = false; - var declParent = declSymbol.getContainer(); - if (declParent && (declParent.kind === 8 /* Class */ || declParent.kind === 32768 /* ConstructorMethod */)) { - isPropertyOfClass = true; - } - - var messageCode; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_is_using_inaccessible_module_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_is_using_inaccessible_module_1; - } - } else { - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_has_or_is_using_private_type_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_has_or_is_using_private_type_1; - } - } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.checkFunctionTypePrivacy = function (funcDeclAST, isStatic, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - if (funcDeclAST.kind() === 222 /* FunctionExpression */ || funcDeclAST.kind() === 241 /* FunctionPropertyAssignment */ || (funcDeclAST.kind() === 139 /* GetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (funcDeclAST.kind() === 140 /* SetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { - return; - } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - ; - var functionSignature; - - var isGetter = funcDeclAST.kind() === 139 /* GetAccessor */; - var isSetter = funcDeclAST.kind() === 140 /* SetAccessor */; - var isIndexSignature = functionDecl.kind === 4194304 /* IndexSignature */; - - if (isGetter || isSetter) { - var accessorSymbol = functionSymbol; - functionSignature = (isGetter ? accessorSymbol.getGetter() : accessorSymbol.getSetter()).type.getCallSignatures()[0]; - } else { - if (!functionSymbol) { - var parentDecl = functionDecl.getParentDecl(); - functionSymbol = parentDecl.getSymbol(); - if (functionSymbol && functionSymbol.isType() && !functionSymbol.isNamedTypeSymbol()) { - return; - } - } else if (functionSymbol.kind === 65536 /* Method */ && !isStatic && !functionSymbol.getContainer().isNamedTypeSymbol()) { - return; - } - functionSignature = functionDecl.getSignatureSymbol(); - } - - if (typeParameters && !isGetter && !isSetter && !isIndexSignature && funcDeclAST.kind() !== 137 /* ConstructorDeclaration */) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParameters.typeParameters.nonSeparatorAt(i); - var typeParameter = this.resolveTypeParameterDeclaration(typeParameterAST, context); - this.checkSymbolPrivacy(functionSymbol, typeParameter, function (symbol) { - return _this.functionTypeArgumentArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, typeParameterAST, typeParameter, symbol, context); - }); - } - } - - if (!isGetter && !isIndexSignature) { - var funcParams = functionSignature.parameters; - for (var i = 0; i < funcParams.length; i++) { - this.checkSymbolPrivacy(functionSymbol, funcParams[i].type, function (symbol) { - return _this.functionArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, parameters, i, funcParams[i], symbol, context); - }); - } - } - - if (!isSetter) { - this.checkSymbolPrivacy(functionSymbol, functionSignature.returnType, function (symbol) { - return _this.functionReturnTypePrivacyErrorReporter(funcDeclAST, isStatic, returnTypeAnnotation, block, functionSignature.returnType, symbol, context); - }); - } - }; - - PullTypeResolver.prototype.functionTypeArgumentArgumentTypePrivacyErrorReporter = function (declAST, isStatic, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_has_or_is_using_private_type_1; - } - } - - if (messageCode) { - var messageArgs = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArgs)); - } - }; - - PullTypeResolver.prototype.functionArgumentTypePrivacyErrorReporter = function (declAST, isStatic, parameters, argIndex, paramSymbol, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else if (!isGetter) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else if (!isGetter && decl.kind !== 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_has_or_is_using_private_type_1; - } - } - - if (messageCode) { - var parameter = parameters.astAt(argIndex); - - var messageArgs = [paramSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(parameter, messageCode, messageArgs)); - } - }; - - PullTypeResolver.prototype.functionReturnTypePrivacyErrorReporter = function (declAST, isStatic, returnTypeAnnotation, block, funcReturnType, symbol, context) { - var _this = this; - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; - } - - var messageCode = null; - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_is_using_inaccessible_module_0; - } - } else { - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_has_or_is_using_private_type_0; - } - } - - if (messageCode) { - var messageArguments = [typeSymbolName]; - var reportOnFuncDecl = false; - - if (returnTypeAnnotation) { - var returnExpressionSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, messageCode, messageArguments)); - } - } - - if (block) { - var reportErrorOnReturnExpressions = function (ast, walker) { - var go = true; - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - var returnExpressionSymbol = _this.resolveAST(returnStatement.expression, false, context).type; - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(returnStatement, messageCode, messageArguments)); - } else { - reportOnFuncDecl = true; - } - go = false; - break; - - default: - break; - } - - walker.options.goChildren = go; - return ast; - }; - - TypeScript.getAstWalkerFactory().walk(block, reportErrorOnReturnExpressions); - } - - if (reportOnFuncDecl) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - } - } - }; - - PullTypeResolver.prototype.enclosingClassIsDerived = function (classDecl) { - TypeScript.Debug.assert(classDecl.kind === 8 /* Class */); - - var classSymbol = classDecl.getSymbol(); - return classSymbol.getExtendedTypes().length > 0; - }; - - PullTypeResolver.prototype.isSuperInvocationExpression = function (ast) { - if (ast.kind() === 213 /* InvocationExpression */) { - var invocationExpression = ast; - if (invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.isSuperInvocationExpressionStatement = function (node) { - if (node && node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - if (this.isSuperInvocationExpression(expressionStatement.expression)) { - return true; - } - } - return false; - }; - - PullTypeResolver.prototype.getFirstStatementOfBlockOrNull = function (block) { - if (block && block.statements && block.statements.childCount() > 0) { - return block.statements.childAt(0); - } - - return null; - }; - - PullTypeResolver.prototype.superCallMustBeFirstStatementInConstructor = function (constructorDecl) { - TypeScript.Debug.assert(constructorDecl.kind === 32768 /* ConstructorMethod */); - - if (constructorDecl) { - var enclosingClass = constructorDecl.getParentDecl(); - - var classSymbol = enclosingClass.getSymbol(); - if (classSymbol.getExtendedTypes().length === 0) { - return false; - } - - var classMembers = classSymbol.getMembers(); - for (var i = 0, n1 = classMembers.length; i < n1; i++) { - var member = classMembers[i]; - - if (member.kind === 4096 /* Property */) { - var declarations = member.getDeclarations(); - for (var j = 0, n2 = declarations.length; j < n2; j++) { - var declaration = declarations[j]; - var ast = this.semanticInfoChain.getASTForDecl(declaration); - if (ast.kind() === 242 /* Parameter */) { - return true; - } - - if (ast.kind() === 136 /* MemberVariableDeclaration */) { - var variableDeclarator = ast; - if (variableDeclarator.variableDeclarator.equalsValueClause) { - return true; - } - } - } - } - } - } - - return false; - }; - - PullTypeResolver.prototype.checkForThisCaptureInArrowFunction = function (expression) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var inArrowFunction = false; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - inArrowFunction = true; - continue; - } - - if (inArrowFunction) { - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - decl.setFlags(decl.flags | 262144 /* MustCaptureThis */); - - if (declKind === 8 /* Class */) { - var constructorSymbol = decl.getSymbol().getConstructorMethod(); - var constructorDecls = constructorSymbol.getDeclarations(); - for (var i = 0; i < constructorDecls.length; i++) { - constructorDecls[i].flags = constructorDecls[i].flags | 262144 /* MustCaptureThis */; - } - } - break; - } - } else if (declKind === 16384 /* Function */ || declKind === 131072 /* FunctionExpression */) { - break; - } - } - } - }; - - PullTypeResolver.prototype.typeCheckMembersAgainstIndexer = function (containerType, containerTypeDecl, context) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(containerType, context); - var stringSignature = indexSignatures.stringSignature; - var numberSignature = indexSignatures.numericSignature; - - if (stringSignature || numberSignature) { - var members = containerTypeDecl.getChildDecls(); - for (var i = 0; i < members.length; i++) { - var member = members[i]; - if ((member.name || (member.kind === 4096 /* Property */ && member.name === "")) && member.kind !== 32768 /* ConstructorMethod */ && !TypeScript.hasFlag(member.flags, 16 /* Static */)) { - var memberSymbol = member.getSymbol(); - var relevantSignature = this.determineRelevantIndexerForMember(memberSymbol, numberSignature, stringSignature); - if (relevantSignature) { - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(memberSymbol.type, relevantSignature.returnType, member.ast(), context, comparisonInfo)) { - this.reportErrorThatMemberIsNotSubtypeOfIndexer(memberSymbol, relevantSignature, member.ast(), context, comparisonInfo); - } - } - } - } - } - }; - - PullTypeResolver.prototype.determineRelevantIndexerForMember = function (member, numberIndexSignature, stringIndexSignature) { - if (numberIndexSignature && TypeScript.PullHelpers.isNameNumeric(member.name)) { - return numberIndexSignature; - } else if (stringIndexSignature) { - return stringIndexSignature; - } - - return null; - }; - - PullTypeResolver.prototype.reportErrorThatMemberIsNotSubtypeOfIndexer = function (member, indexSignature, astForError, context, comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(astForError); - if (indexSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); - } - } else { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.typeCheckIfTypeMemberPropertyOkToOverride = function (typeSymbol, extendedType, typeMember, extendedTypeMember, enclosingDecl, comparisonInfo) { - if (!typeSymbol.isClass()) { - return true; - } - - var typeMemberKind = typeMember.kind; - var extendedMemberKind = extendedTypeMember.kind; - - if (typeMemberKind === extendedMemberKind) { - return true; - } - - var errorCode; - if (typeMemberKind === 4096 /* Property */) { - if (typeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; - } - } else if (typeMemberKind === 65536 /* Method */) { - if (extendedTypeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; - } - } - - var message = TypeScript.getDiagnosticMessage(errorCode, [typeSymbol.toString(), typeMember.getScopedNameEx().toString(), extendedType.toString()]); - comparisonInfo.addMessage(message); - return false; - }; - - PullTypeResolver.prototype.typeCheckIfTypeExtendsType = function (classOrInterface, name, typeSymbol, extendedType, enclosingDecl, context) { - var typeMembers = typeSymbol.getMembers(); - - var comparisonInfo = new TypeComparisonInfo(); - var foundError = false; - var foundError1 = false; - var foundError2 = false; - - for (var i = 0; i < typeMembers.length; i++) { - var propName = typeMembers[i].name; - var extendedTypeProp = extendedType.findMember(propName, true); - if (extendedTypeProp) { - this.resolveDeclaredSymbol(extendedTypeProp, context); - foundError1 = !this.typeCheckIfTypeMemberPropertyOkToOverride(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, enclosingDecl, comparisonInfo); - - if (!foundError1) { - foundError2 = !this.sourcePropertyIsAssignableToTargetProperty(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, classOrInterface, context, comparisonInfo); - } - - if (foundError1 || foundError2) { - foundError = true; - break; - } - } - } - - if (!foundError && typeSymbol.hasOwnCallSignatures()) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.hasOwnConstructSignatures()) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.hasOwnIndexSignatures()) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.isClass()) { - var typeConstructorType = typeSymbol.getConstructorMethod().type; - var typeConstructorTypeMembers = typeConstructorType.getMembers(); - if (typeConstructorTypeMembers.length) { - var extendedConstructorType = extendedType.getConstructorMethod().type; - var comparisonInfoForPropTypeCheck = new TypeComparisonInfo(comparisonInfo); - - for (var i = 0; i < typeConstructorTypeMembers.length; i++) { - var propName = typeConstructorTypeMembers[i].name; - var extendedConstructorTypeProp = extendedConstructorType.findMember(propName, true); - if (extendedConstructorTypeProp) { - if (!extendedConstructorTypeProp.isResolved) { - this.resolveDeclaredSymbol(extendedConstructorTypeProp, context); - } - - if (!this.sourcePropertyIsAssignableToTargetProperty(typeConstructorType, extendedConstructorType, typeConstructorTypeMembers[i], extendedConstructorTypeProp, classOrInterface, context, comparisonInfo)) { - foundError = true; - break; - } - } - } - } - } - - if (foundError) { - var errorCode; - if (typeSymbol.isClass()) { - errorCode = TypeScript.DiagnosticCode.Class_0_cannot_extend_class_1_NL_2; - } else { - if (extendedType.isClass()) { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_class_1_NL_2; - } else { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_interface_1_NL_2; - } - } - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, errorCode, [typeSymbol.getScopedName(), extendedType.getScopedName(), comparisonInfo.message])); - } - }; - - PullTypeResolver.prototype.typeCheckIfClassImplementsType = function (classDecl, classSymbol, implementedType, enclosingDecl, context) { - var comparisonInfo = new TypeComparisonInfo(); - var foundError = !this.sourceMembersAreAssignableToTargetMembers(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - } - } - } - - if (foundError) { - var enclosingSymbol = this.getEnclosingSymbolForAST(classDecl); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(classDecl.identifier, TypeScript.DiagnosticCode.Class_0_declares_interface_1_but_does_not_implement_it_NL_2, [classSymbol.getScopedName(enclosingSymbol), implementedType.getScopedName(enclosingSymbol), comparisonInfo.message])); - } - }; - - PullTypeResolver.prototype.computeValueSymbolFromAST = function (valueDeclAST, context) { - var prevInTypeCheck = context.inTypeCheck; - context.inTypeCheck = false; - - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - if (valueDeclAST.kind() == 11 /* IdentifierName */) { - var valueSymbol = this.computeNameExpression(valueDeclAST, context); - } else { - TypeScript.Debug.assert(valueDeclAST.kind() == 121 /* QualifiedName */); - var qualifiedName = valueDeclAST; - - var lhs = this.computeValueSymbolFromAST(qualifiedName.left, context); - var valueSymbol = this.computeDottedNameExpressionFromLHS(lhs.symbol, qualifiedName.left, qualifiedName.right, context, false); - } - var valueSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - this.semanticInfoChain.setAliasSymbolForAST(valueDeclAST, typeSymbolAlias); - context.inTypeCheck = prevInTypeCheck; - - return { symbol: valueSymbol, alias: valueSymbolAlias }; - }; - - PullTypeResolver.prototype.hasClassTypeSymbolConflictAsValue = function (baseDeclAST, typeSymbol, enclosingDecl, context) { - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(baseDeclAST); - - var valueDeclAST = baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST; - var valueSymbolInfo = this.computeValueSymbolFromAST(valueDeclAST, context); - var valueSymbol = valueSymbolInfo.symbol; - var valueSymbolAlias = valueSymbolInfo.alias; - - if (typeSymbolAlias && valueSymbolAlias) { - return typeSymbolAlias !== valueSymbolAlias; - } - - if (!valueSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */)) { - return true; - } - - var associatedContainerType = valueSymbol.type ? valueSymbol.type.getAssociatedContainerType() : null; - - if (associatedContainerType) { - return associatedContainerType !== typeSymbol.getRootSymbol(); - } - - return true; - }; - - PullTypeResolver.prototype.typeCheckBase = function (classOrInterface, name, typeSymbol, baseDeclAST, isExtendedType, enclosingDecl, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - - var baseType = this.resolveTypeReference(baseDeclAST, context).type; - - if (!baseType) { - return; - } - - var typeDeclIsClass = typeSymbol.isClass(); - - if (!typeSymbol.isValidBaseKind(baseType, isExtendedType)) { - if (!baseType.isError()) { - if (isExtendedType) { - if (typeDeclIsClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_extend_another_class)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.An_interface_may_only_extend_another_class_or_interface)); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_implement_another_class_or_interface)); - } - } - return; - } else if (typeDeclIsClass && isExtendedType) { - if (this.hasClassTypeSymbolConflictAsValue(baseDeclAST, baseType, enclosingDecl, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1, [TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST), baseType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - } - } - - if (baseType.hasBase(typeSymbol)) { - typeSymbol.setHasBaseTypeConflict(); - baseType.setHasBaseTypeConflict(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, typeDeclIsClass ? TypeScript.DiagnosticCode.Class_0_is_recursively_referenced_as_a_base_type_of_itself : TypeScript.DiagnosticCode.Interface_0_is_recursively_referenced_as_a_base_type_of_itself, [typeSymbol.getScopedName()])); - return; - } - - if (isExtendedType) { - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfTypeExtendsType(classOrInterface, name, typeSymbol, baseType, enclosingDecl, context); - }); - } else { - TypeScript.Debug.assert(classOrInterface.kind() === 131 /* ClassDeclaration */); - - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfClassImplementsType(classOrInterface, typeSymbol, baseType, enclosingDecl, context); - }); - } - - this.checkSymbolPrivacy(typeSymbol, baseType, function (errorSymbol) { - return _this.baseListPrivacyErrorReporter(classOrInterface, typeSymbol, baseDeclAST, isExtendedType, errorSymbol, context); - }); - }; - - PullTypeResolver.prototype.typeCheckBases = function (classOrInterface, name, heritageClauses, typeSymbol, enclosingDecl, context) { - var _this = this; - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (!extendsClause && !implementsClause) { - return; - } - - if (extendsClause) { - for (var i = 0; i < extendsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, extendsClause.typeNames.nonSeparatorAt(i), true, enclosingDecl, context); - } - } - - if (typeSymbol.isClass()) { - if (implementsClause) { - for (var i = 0; i < implementsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, implementsClause.typeNames.nonSeparatorAt(i), false, enclosingDecl, context); - } - } - } else if (extendsClause && !typeSymbol.hasBaseTypeConflict() && typeSymbol.getExtendedTypes().length > 1) { - var firstInterfaceASTWithExtendsClause = TypeScript.ArrayUtilities.firstOrDefault(typeSymbol.getDeclarations(), function (decl) { - return decl.ast().heritageClauses !== null; - }).ast(); - if (classOrInterface === firstInterfaceASTWithExtendsClause) { - this.typeCheckCallBacks.push(function (context) { - _this.checkTypeCompatibilityBetweenBases(classOrInterface.identifier, typeSymbol, context); - }); - } - } - }; - - PullTypeResolver.prototype.checkTypeCompatibilityBetweenBases = function (name, typeSymbol, context) { - var derivedIndexSignatures = typeSymbol.getOwnIndexSignatures(); - - var inheritedMembersMap = TypeScript.createIntrinsicsObject(); - var inheritedIndexSignatures = new InheritedIndexSignatureInfo(); - - var typeHasOwnNumberIndexer = false; - var typeHasOwnStringIndexer = false; - - if (typeSymbol.hasOwnIndexSignatures()) { - var ownIndexSignatures = typeSymbol.getOwnIndexSignatures(); - for (var i = 0; i < ownIndexSignatures.length; i++) { - if (ownIndexSignatures[i].parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - typeHasOwnNumberIndexer = true; - } else { - typeHasOwnStringIndexer = true; - } - } - } - var baseTypes = typeSymbol.getExtendedTypes(); - for (var i = 0; i < baseTypes.length; i++) { - if (this.checkNamedPropertyIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedMembersMap, context) || this.checkIndexSignatureIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedIndexSignatures, typeHasOwnNumberIndexer, typeHasOwnStringIndexer, context)) { - return; - } - } - - if (this.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature(name, typeSymbol, inheritedIndexSignatures, context)) { - return; - } - - this.checkInheritedMembersAgainstInheritedIndexSignatures(name, typeSymbol, inheritedIndexSignatures, inheritedMembersMap, context); - }; - - PullTypeResolver.prototype.checkNamedPropertyIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, inheritedMembersMap, context) { - var baseMembers = baseTypeSymbol.getAllMembers(4096 /* Property */ | 65536 /* Method */, 0 /* all */); - for (var i = 0; i < baseMembers.length; i++) { - var member = baseMembers[i]; - var memberName = member.name; - - if (interfaceSymbol.findMember(memberName, false)) { - continue; - } - - this.resolveDeclaredSymbol(member, context); - - if (inheritedMembersMap[memberName]) { - var prevMember = inheritedMembersMap[memberName]; - if (prevMember.baseOrigin !== baseTypeSymbol && !this.propertiesAreIdenticalWithNewEnclosingTypes(baseTypeSymbol, prevMember.baseOrigin, member, prevMember.memberSymbol, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Named_properties_0_of_types_1_and_2_are_not_identical, [memberName, prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - inheritedMembersMap[memberName] = new MemberWithBaseOrigin(member, baseTypeSymbol); - } - } - - return false; - }; - - PullTypeResolver.prototype.checkIndexSignatureIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, allInheritedSignatures, derivedTypeHasOwnNumberSignature, derivedTypeHasOwnStringSignature, context) { - if (derivedTypeHasOwnNumberSignature && derivedTypeHasOwnStringSignature) { - return false; - } - - var indexSignaturesFromThisBaseType = baseTypeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignaturesFromThisBaseType.length; i++) { - var currentInheritedSignature = indexSignaturesFromThisBaseType[i]; - - var parameterTypeIsString = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.stringTypeSymbol; - var parameterTypeIsNumber = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - - if (parameterTypeIsString && derivedTypeHasOwnStringSignature || parameterTypeIsNumber && derivedTypeHasOwnNumberSignature) { - continue; - } - - if (parameterTypeIsString) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.stringSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_string_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - allInheritedSignatures.stringSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); - } - } else if (parameterTypeIsNumber) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.numberSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_number_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - allInheritedSignatures.numberSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); - } - } - } - - return false; - }; - - PullTypeResolver.prototype.checkInheritedMembersAgainstInheritedIndexSignatures = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, inheritedMembers, context) { - if (!inheritedIndexSignatures.stringSignatureWithBaseOrigin && !inheritedIndexSignatures.numberSignatureWithBaseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var stringSignature = inheritedIndexSignatures.stringSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature; - var numberSignature = inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature; - for (var memberName in inheritedMembers) { - var memberWithBaseOrigin = inheritedMembers[memberName]; - if (!memberWithBaseOrigin) { - continue; - } - - var relevantSignature = this.determineRelevantIndexerForMember(memberWithBaseOrigin.memberSymbol, numberSignature, stringSignature); - if (!relevantSignature) { - continue; - } - - var relevantSignatureIsNumberSignature = relevantSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - var signatureBaseOrigin = relevantSignatureIsNumberSignature ? inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin : inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin; - - if (signatureBaseOrigin === memberWithBaseOrigin.baseOrigin) { - continue; - } - - var memberIsSubtype = this.sourceIsAssignableToTarget(memberWithBaseOrigin.memberSymbol.type, relevantSignature.returnType, interfaceName, context, comparisonInfo); - - if (!memberIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - if (relevantSignatureIsNumberSignature) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - } else { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - } - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, context) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin === inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var signatureIsSubtype = this.sourceIsAssignableToTarget(inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature.returnType, inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature.returnType, interfaceName, context, comparisonInfo); - - if (!signatureIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2, [ - inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [ - interfaceSymbol.getDisplayName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.checkAssignability = function (ast, source, target, context) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(source, target, ast, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.isReference = function (ast, astSymbol) { - if (ast.kind() === 217 /* ParenthesizedExpression */) { - return this.isReference(ast.expression, astSymbol); - } - - if (ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */ && ast.kind() !== 221 /* ElementAccessExpression */) { - return false; - } - - if (ast.kind() === 11 /* IdentifierName */) { - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(4096 /* Enum */)) { - return false; - } - - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(102400 /* SomeInitializedModule */)) { - return false; - } - - if (astSymbol.kind === 32768 /* ConstructorMethod */ || astSymbol.kind === 16384 /* Function */) { - return false; - } - } - - if (ast.kind() === 212 /* MemberAccessExpression */ && astSymbol.kind === 67108864 /* EnumMember */) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.checkForSuperMemberAccess = function (expression, name, resolvedName, context) { - if (resolvedName) { - if (expression.kind() === 50 /* SuperKeyword */ && !resolvedName.isError() && resolvedName.kind !== 65536 /* Method */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword)); - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingDeclForAST = function (ast) { - return this.semanticInfoChain.getEnclosingDecl(ast); - }; - - PullTypeResolver.prototype.getEnclosingSymbolForAST = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - return enclosingDecl ? enclosingDecl.getSymbol() : null; - }; - - PullTypeResolver.prototype.checkForPrivateMemberAccess = function (name, expressionType, resolvedName, context) { - if (resolvedName) { - if (resolvedName.anyDeclHasFlag(2 /* Private */)) { - var memberContainer = resolvedName.getContainer(); - if (memberContainer && memberContainer.kind === 33554432 /* ConstructorType */) { - memberContainer = memberContainer.getAssociatedContainerType(); - } - - if (memberContainer && memberContainer.isClass()) { - var memberClass = memberContainer.getDeclarations()[0].ast(); - TypeScript.Debug.assert(memberClass); - - var containingClass = this.getEnclosingClassDeclaration(name); - - if (!containingClass || containingClass !== memberClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode._0_1_is_inaccessible, [memberContainer.toString(null, false), name.text()])); - return true; - } - } - } - } - - return false; - }; - - PullTypeResolver.prototype.instantiateType = function (type, typeParameterArgumentMap) { - if (type.isPrimitive()) { - return type; - } - - if (type.isError()) { - return type; - } - - if (typeParameterArgumentMap[type.pullSymbolID]) { - return typeParameterArgumentMap[type.pullSymbolID]; - } - - type._resolveDeclaredSymbol(); - if (type.isTypeParameter()) { - return this.instantiateTypeParameter(type, typeParameterArgumentMap); - } - - if (type.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); - } - - return type; - }; - - PullTypeResolver.prototype.instantiateTypeParameter = function (typeParameter, typeParameterArgumentMap) { - var constraint = typeParameter.getConstraint(); - if (!constraint) { - return typeParameter; - } - - var instantiatedConstraint = this.instantiateType(constraint, typeParameterArgumentMap); - - if (instantiatedConstraint == constraint) { - return typeParameter; - } - - var rootTypeParameter = typeParameter.getRootSymbol(); - var instantiation = rootTypeParameter.getSpecialization([instantiatedConstraint]); - if (instantiation) { - return instantiation; - } - - instantiation = new TypeScript.PullInstantiatedTypeParameterSymbol(rootTypeParameter, instantiatedConstraint); - return instantiation; - }; - - PullTypeResolver.prototype.instantiateSignature = function (signature, typeParameterArgumentMap) { - if (!signature.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return signature; - } - - var rootSignature = signature.getRootSymbol(); - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(this, signature, mutableTypeParameterMap); - - var instantiatedSignature = rootSignature.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiatedSignature) { - return instantiatedSignature; - } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(signature, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - instantiatedSignature = new TypeScript.PullInstantiatedSignatureSymbol(rootSignature, typeParameterArgumentMap); - - instantiatedSignature.returnType = this.instantiateType((rootSignature.returnType || this.semanticInfoChain.anyTypeSymbol), typeParameterArgumentMap); - instantiatedSignature.functionType = this.instantiateType(rootSignature.functionType, typeParameterArgumentMap); - - var parameters = rootSignature.parameters; - var parameter = null; - - if (parameters) { - for (var j = 0; j < parameters.length; j++) { - parameter = new TypeScript.PullSymbol(parameters[j].name, 2048 /* Parameter */); - parameter.setRootSymbol(parameters[j]); - - if (parameters[j].isOptional) { - parameter.isOptional = true; - } - if (parameters[j].isVarArg) { - parameter.isVarArg = true; - instantiatedSignature.hasVarArgs = true; - } - instantiatedSignature.addParameter(parameter, parameter.isOptional); - - parameter.type = this.instantiateType(parameters[j].type, typeParameterArgumentMap); - } - } - - return instantiatedSignature; - }; - PullTypeResolver.globalTypeCheckPhase = 0; - return PullTypeResolver; - })(); - TypeScript.PullTypeResolver = PullTypeResolver; - - var TypeComparisonInfo = (function () { - function TypeComparisonInfo(sourceComparisonInfo, useSameIndent) { - this.onlyCaptureFirstError = false; - this.flags = 0 /* SuccessfulComparison */; - this.message = ""; - this.stringConstantVal = null; - this.indent = 1; - if (sourceComparisonInfo) { - this.flags = sourceComparisonInfo.flags; - this.onlyCaptureFirstError = sourceComparisonInfo.onlyCaptureFirstError; - this.stringConstantVal = sourceComparisonInfo.stringConstantVal; - this.indent = sourceComparisonInfo.indent; - if (!useSameIndent) { - this.indent++; - } - } - } - TypeComparisonInfo.prototype.indentString = function () { - var result = ""; - - for (var i = 0; i < this.indent; i++) { - result += "\t"; - } - - return result; - }; - - TypeComparisonInfo.prototype.addMessage = function (message) { - if (!this.onlyCaptureFirstError && this.message) { - this.message = this.message + TypeScript.newLine() + this.indentString() + message; - } else { - this.message = this.indentString() + message; - } - }; - return TypeComparisonInfo; - })(); - TypeScript.TypeComparisonInfo = TypeComparisonInfo; - - function getPropertyAssignmentNameTextFromIdentifier(identifier) { - if (identifier.kind() === 11 /* IdentifierName */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 14 /* StringLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 13 /* NumericLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - TypeScript.getPropertyAssignmentNameTextFromIdentifier = getPropertyAssignmentNameTextFromIdentifier; - - function isTypesOnlyLocation(ast) { - while (ast && ast.parent) { - switch (ast.parent.kind()) { - case 244 /* TypeAnnotation */: - return true; - case 127 /* TypeQuery */: - return false; - case 125 /* ConstructorType */: - var constructorType = ast.parent; - if (constructorType.type === ast) { - return true; - } - break; - case 123 /* FunctionType */: - var functionType = ast.parent; - if (functionType.type === ast) { - return true; - } - break; - case 239 /* Constraint */: - var constraint = ast.parent; - if (constraint.type === ast) { - return true; - } - break; - case 220 /* CastExpression */: - var castExpression = ast.parent; - return castExpression.type === ast; - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - return true; - case 228 /* TypeArgumentList */: - return true; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 129 /* FunctionDeclaration */: - case 145 /* MethodSignature */: - case 212 /* MemberAccessExpression */: - case 242 /* Parameter */: - return false; - } - - ast = ast.parent; - } - - return false; - } - TypeScript.isTypesOnlyLocation = isTypesOnlyLocation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.declCacheHit = 0; - TypeScript.declCacheMiss = 0; - TypeScript.symbolCacheHit = 0; - TypeScript.symbolCacheMiss = 0; - - var sentinalEmptyArray = []; - - var SemanticInfoChain = (function () { - function SemanticInfoChain(compiler, logger) { - this.compiler = compiler; - this.logger = logger; - this.documents = []; - this.fileNameToDocument = TypeScript.createIntrinsicsObject(); - this.anyTypeDecl = null; - this.booleanTypeDecl = null; - this.numberTypeDecl = null; - this.stringTypeDecl = null; - this.nullTypeDecl = null; - this.undefinedTypeDecl = null; - this.voidTypeDecl = null; - this.undefinedValueDecl = null; - this.anyTypeSymbol = null; - this.booleanTypeSymbol = null; - this.numberTypeSymbol = null; - this.stringTypeSymbol = null; - this.nullTypeSymbol = null; - this.undefinedTypeSymbol = null; - this.voidTypeSymbol = null; - this.undefinedValueSymbol = null; - this.emptyTypeSymbol = null; - this.astSymbolMap = []; - this.astAliasSymbolMap = []; - this.astCallResolutionDataMap = []; - this.declSymbolMap = []; - this.declSignatureSymbolMap = []; - this.declCache = null; - this.symbolCache = null; - this.fileNameToDiagnostics = null; - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - var globalDecl = new TypeScript.RootPullDecl("", "", 0 /* Global */, 0 /* None */, this, false); - this.documents[0] = new TypeScript.Document(this.compiler, this, "", [], null, 0 /* None */, 0, false, null, globalDecl); - - this.anyTypeDecl = new TypeScript.NormalPullDecl("any", "any", 2 /* Primitive */, 0 /* None */, globalDecl); - this.booleanTypeDecl = new TypeScript.NormalPullDecl("boolean", "boolean", 2 /* Primitive */, 0 /* None */, globalDecl); - this.numberTypeDecl = new TypeScript.NormalPullDecl("number", "number", 2 /* Primitive */, 0 /* None */, globalDecl); - this.stringTypeDecl = new TypeScript.NormalPullDecl("string", "string", 2 /* Primitive */, 0 /* None */, globalDecl); - this.voidTypeDecl = new TypeScript.NormalPullDecl("void", "void", 2 /* Primitive */, 0 /* None */, globalDecl); - - this.nullTypeDecl = new TypeScript.RootPullDecl("null", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedTypeDecl = new TypeScript.RootPullDecl("undefined", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedValueDecl = new TypeScript.NormalPullDecl("undefined", "undefined", 512 /* Variable */, 8 /* Ambient */, globalDecl); - - this.invalidate(); - } - SemanticInfoChain.prototype.getDocument = function (fileName) { - var document = this.fileNameToDocument[fileName]; - return document || null; - }; - - SemanticInfoChain.prototype.lineMap = function (fileName) { - return this.getDocument(fileName).lineMap(); - }; - - SemanticInfoChain.prototype.fileNames = function () { - if (this._fileNames === null) { - this._fileNames = this.documents.slice(1).map(function (s) { - return s.fileName; - }); - } - - return this._fileNames; - }; - - SemanticInfoChain.prototype.bindPrimitiveSymbol = function (decl, newSymbol) { - newSymbol.addDeclaration(decl); - decl.setSymbol(newSymbol); - newSymbol.setResolved(); - - return newSymbol; - }; - - SemanticInfoChain.prototype.addPrimitiveTypeSymbol = function (decl) { - var newSymbol = new TypeScript.PullPrimitiveTypeSymbol(decl.name); - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.addPrimitiveValueSymbol = function (decl, type) { - var newSymbol = new TypeScript.PullSymbol(decl.name, 512 /* Variable */); - newSymbol.type = type; - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.resetGlobalSymbols = function () { - this.anyTypeSymbol = this.addPrimitiveTypeSymbol(this.anyTypeDecl); - this.booleanTypeSymbol = this.addPrimitiveTypeSymbol(this.booleanTypeDecl); - this.numberTypeSymbol = this.addPrimitiveTypeSymbol(this.numberTypeDecl); - this.stringTypeSymbol = this.addPrimitiveTypeSymbol(this.stringTypeDecl); - this.voidTypeSymbol = this.addPrimitiveTypeSymbol(this.voidTypeDecl); - this.nullTypeSymbol = this.addPrimitiveTypeSymbol(this.nullTypeDecl); - this.undefinedTypeSymbol = this.addPrimitiveTypeSymbol(this.undefinedTypeDecl); - this.undefinedValueSymbol = this.addPrimitiveValueSymbol(this.undefinedValueDecl, this.undefinedTypeSymbol); - - var emptyTypeDecl = new TypeScript.PullSynthesizedDecl("{}", "{}", 8388608 /* ObjectType */, 0 /* None */, null, this); - var emptyTypeSymbol = new TypeScript.PullTypeSymbol("{}", 8388608 /* ObjectType */); - emptyTypeDecl.setSymbol(emptyTypeSymbol); - emptyTypeSymbol.addDeclaration(emptyTypeDecl); - emptyTypeSymbol.setResolved(); - this.emptyTypeSymbol = emptyTypeSymbol; - }; - - SemanticInfoChain.prototype.addDocument = function (document) { - var fileName = document.fileName; - - var existingIndex = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (existingIndex < 0) { - this.documents.push(document); - } else { - this.documents[existingIndex] = document; - } - - this.fileNameToDocument[fileName] = document; - - this.invalidate(); - }; - - SemanticInfoChain.prototype.removeDocument = function (fileName) { - TypeScript.Debug.assert(fileName !== "", "Can't remove the semantic info for the global decl."); - var index = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (index > 0) { - this.fileNameToDocument[fileName] = undefined; - this.documents.splice(index, 1); - this.invalidate(); - } - }; - - SemanticInfoChain.prototype.getDeclPathCacheID = function (declPath, declKind) { - var cacheID = ""; - - for (var i = 0; i < declPath.length; i++) { - cacheID += "#" + declPath[i]; - } - - return cacheID + "#" + declKind.toString(); - }; - - SemanticInfoChain.prototype.findTopLevelSymbol = function (name, kind, doNotGoPastThisDecl) { - var cacheID = this.getDeclPathCacheID([name], kind); - - var symbol = this.symbolCache[cacheID]; - - if (!symbol) { - for (var i = 0, n = this.documents.length; i < n; i++) { - var topLevelDecl = this.documents[i].topLevelDecl(); - - var symbol = this.findTopLevelSymbolInDecl(topLevelDecl, name, kind, doNotGoPastThisDecl); - if (symbol) { - break; - } - - if (doNotGoPastThisDecl && topLevelDecl.name === doNotGoPastThisDecl.fileName()) { - return null; - } - } - - if (symbol) { - this.symbolCache[cacheID] = symbol; - } - } - - return symbol; - }; - - SemanticInfoChain.prototype.findTopLevelSymbolInDecl = function (topLevelDecl, name, kind, doNotGoPastThisDecl) { - var doNotGoPastThisPosition = doNotGoPastThisDecl && doNotGoPastThisDecl.fileName() === topLevelDecl.fileName() ? doNotGoPastThisDecl.ast().start() : -1; - - var foundDecls = topLevelDecl.searchChildDecls(name, kind); - - for (var j = 0; j < foundDecls.length; j++) { - var foundDecl = foundDecls[j]; - - if (doNotGoPastThisPosition !== -1 && foundDecl.ast() && foundDecl.ast().start() > doNotGoPastThisPosition) { - break; - } - - var symbol = foundDecls[j].getSymbol(); - if (symbol) { - return symbol; - } - } - - return null; - }; - - SemanticInfoChain.prototype.findExternalModule = function (id) { - id = TypeScript.normalizePath(id); - - var tsFile = id + ".ts"; - var tsCacheID = this.getDeclPathCacheID([tsFile], 32 /* DynamicModule */); - symbol = this.symbolCache[tsCacheID]; - if (symbol != undefined) { - return symbol; - } - - var dtsFile = id + ".d.ts"; - var dtsCacheID = this.getDeclPathCacheID([dtsFile], 32 /* DynamicModule */); - var symbol = this.symbolCache[dtsCacheID]; - if (symbol) { - return symbol; - } - - var dtsSymbol; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (topLevelDecl.isExternalModule()) { - var isTsFile = document.fileName === tsFile; - if (isTsFile || document.fileName === dtsFile) { - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - symbol = dynamicModuleDecl.getSymbol(); - - if (isTsFile) { - this.symbolCache[tsCacheID] = symbol; - - return symbol; - } else { - dtsSymbol = symbol; - } - } - } - } - - if (dtsSymbol) { - this.symbolCache[dtsCacheID] = symbol; - return dtsSymbol; - } - - this.symbolCache[dtsCacheID] = null; - this.symbolCache[tsCacheID] = null; - - return null; - }; - - SemanticInfoChain.prototype.findAmbientExternalModuleInGlobalContext = function (id) { - var cacheID = this.getDeclPathCacheID([id], 32 /* DynamicModule */); - - var symbol = this.symbolCache[cacheID]; - if (symbol == undefined) { - symbol = null; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (!topLevelDecl.isExternalModule()) { - var dynamicModules = topLevelDecl.searchChildDecls(id, 32 /* DynamicModule */); - if (dynamicModules.length) { - symbol = dynamicModules[0].getSymbol(); - break; - } - } - } - - this.symbolCache[cacheID] = symbol; - } - - return symbol; - }; - - SemanticInfoChain.prototype.findDecls = function (declPath, declKind) { - var cacheID = this.getDeclPathCacheID(declPath, declKind); - - if (declPath.length) { - var cachedDecls = this.declCache[cacheID]; - - if (cachedDecls && cachedDecls.length) { - TypeScript.declCacheHit++; - return cachedDecls; - } - } - - TypeScript.declCacheMiss++; - - var declsToSearch = this.topLevelDecls(); - - var decls = TypeScript.sentinelEmptyArray; - var path; - var foundDecls = TypeScript.sentinelEmptyArray; - - for (var i = 0; i < declPath.length; i++) { - path = declPath[i]; - decls = TypeScript.sentinelEmptyArray; - - var kind = (i === declPath.length - 1) ? declKind : 164 /* SomeContainer */; - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(path, kind); - - for (var k = 0; k < foundDecls.length; k++) { - if (decls === TypeScript.sentinelEmptyArray) { - decls = []; - } - decls[decls.length] = foundDecls[k]; - } - } - - declsToSearch = decls; - - if (!declsToSearch) { - break; - } - } - - if (decls.length) { - this.declCache[cacheID] = decls; - } - - return decls; - }; - - SemanticInfoChain.prototype.findDeclsFromPath = function (declPath, declKind) { - var declString = []; - - for (var i = 0, n = declPath.length; i < n; i++) { - if (declPath[i].kind & 1 /* Script */) { - continue; - } - - declString.push(declPath[i].name); - } - - return this.findDecls(declString, declKind); - }; - - SemanticInfoChain.prototype.findSymbol = function (declPath, declType) { - var cacheID = this.getDeclPathCacheID(declPath, declType); - - if (declPath.length) { - var cachedSymbol = this.symbolCache[cacheID]; - - if (cachedSymbol) { - TypeScript.symbolCacheHit++; - return cachedSymbol; - } - } - - TypeScript.symbolCacheMiss++; - - var decls = this.findDecls(declPath, declType); - var symbol = null; - - if (decls.length) { - var decl = decls[0]; - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - var valueDecl = decl.getValueDecl(); - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - } - symbol = decl.getSymbol(); - - if (symbol) { - for (var i = 1; i < decls.length; i++) { - decls[i].ensureSymbolIsBound(); - } - - this.symbolCache[cacheID] = symbol; - } - } - - return symbol; - }; - - SemanticInfoChain.prototype.cacheGlobalSymbol = function (symbol, kind) { - var cacheID1 = this.getDeclPathCacheID([symbol.name], kind); - var cacheID2 = this.getDeclPathCacheID([symbol.name], symbol.kind); - - if (!this.symbolCache[cacheID1]) { - this.symbolCache[cacheID1] = symbol; - } - - if (!this.symbolCache[cacheID2]) { - this.symbolCache[cacheID2] = symbol; - } - }; - - SemanticInfoChain.prototype.invalidate = function (oldSettings, newSettings) { - if (typeof oldSettings === "undefined") { oldSettings = null; } - if (typeof newSettings === "undefined") { newSettings = null; } - TypeScript.PullTypeResolver.globalTypeCheckPhase++; - - var cleanStart = new Date().getTime(); - - this.astSymbolMap.length = 0; - this.astAliasSymbolMap.length = 0; - this.astCallResolutionDataMap.length = 0; - - this.declCache = TypeScript.createIntrinsicsObject(); - this.symbolCache = TypeScript.createIntrinsicsObject(); - this.fileNameToDiagnostics = TypeScript.createIntrinsicsObject(); - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - - this.declSymbolMap.length = 0; - this.declSignatureSymbolMap.length = 0; - - if (oldSettings && newSettings) { - if (this.settingsChangeAffectsSyntax(oldSettings, newSettings)) { - for (var i = 1, n = this.documents.length; i < n; i++) { - this.documents[i].invalidate(); - } - } - } - - TypeScript.pullSymbolID = 0; - - this.resetGlobalSymbols(); - - var cleanEnd = new Date().getTime(); - }; - - SemanticInfoChain.prototype.settingsChangeAffectsSyntax = function (before, after) { - return before.allowAutomaticSemicolonInsertion() !== after.allowAutomaticSemicolonInsertion() || before.codeGenTarget() !== after.codeGenTarget() || before.propagateEnumConstants() !== after.propagateEnumConstants(); - }; - - SemanticInfoChain.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()] || null; - }; - - SemanticInfoChain.prototype.setAliasSymbolForAST = function (ast, symbol) { - this.astAliasSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getAliasSymbolForAST = function (ast) { - return this.astAliasSymbolMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.getCallResolutionDataForAST = function (ast) { - return this.astCallResolutionDataMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.setCallResolutionDataForAST = function (ast, callResolutionData) { - if (callResolutionData) { - this.astCallResolutionDataMap[ast.syntaxID()] = callResolutionData; - } - }; - - SemanticInfoChain.prototype.setSymbolForDecl = function (decl, symbol) { - this.declSymbolMap[decl.declID] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForDecl = function (decl) { - return this.declSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.setSignatureSymbolForDecl = function (decl, signatureSymbol) { - this.declSignatureSymbolMap[decl.declID] = signatureSymbol; - }; - - SemanticInfoChain.prototype.getSignatureSymbolForDecl = function (decl) { - return this.declSignatureSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.addDiagnostic = function (diagnostic) { - var fileName = diagnostic.fileName(); - var diagnostics = this.fileNameToDiagnostics[fileName]; - if (!diagnostics) { - diagnostics = []; - this.fileNameToDiagnostics[fileName] = diagnostics; - } - - diagnostics.push(diagnostic); - }; - - SemanticInfoChain.prototype.getDiagnostics = function (fileName) { - var diagnostics = this.fileNameToDiagnostics[fileName]; - return diagnostics || []; - }; - - SemanticInfoChain.prototype.getBinder = function () { - if (!this._binder) { - this._binder = new TypeScript.PullSymbolBinder(this); - } - - return this._binder; - }; - - SemanticInfoChain.prototype.getResolver = function () { - if (!this._resolver) { - this._resolver = new TypeScript.PullTypeResolver(this.compiler.compilationSettings(), this); - } - - return this._resolver; - }; - - SemanticInfoChain.prototype.addSyntheticIndexSignature = function (containingDecl, containingSymbol, ast, indexParamName, indexParamType, returnType) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var indexParameterSymbol = new TypeScript.PullSymbol(indexParamName, 2048 /* Parameter */); - indexParameterSymbol.type = indexParamType; - indexSignature.addParameter(indexParameterSymbol); - indexSignature.returnType = returnType; - indexSignature.setResolved(); - indexParameterSymbol.setResolved(); - - containingSymbol.addIndexSignature(indexSignature); - - var indexSigDecl = new TypeScript.PullSynthesizedDecl("", "", 4194304 /* IndexSignature */, 2048 /* Signature */, containingDecl, containingDecl.semanticInfoChain); - var indexParamDecl = new TypeScript.PullSynthesizedDecl(indexParamName, indexParamName, 2048 /* Parameter */, 0 /* None */, indexSigDecl, containingDecl.semanticInfoChain); - indexSigDecl.setSignatureSymbol(indexSignature); - indexParamDecl.setSymbol(indexParameterSymbol); - indexSignature.addDeclaration(indexSigDecl); - indexParameterSymbol.addDeclaration(indexParamDecl); - }; - - SemanticInfoChain.prototype.getDeclForAST = function (ast) { - var document = this.getDocument(ast.fileName()); - - if (document) { - return document._getDeclForAST(ast); - } - - return null; - }; - - SemanticInfoChain.prototype.getEnclosingDecl = function (ast) { - return this.getDocument(ast.fileName()).getEnclosingDecl(ast); - }; - - SemanticInfoChain.prototype.setDeclForAST = function (ast, decl) { - this.getDocument(decl.fileName())._setDeclForAST(ast, decl); - }; - - SemanticInfoChain.prototype.getASTForDecl = function (decl) { - var document = this.getDocument(decl.fileName()); - if (document) { - return document._getASTForDecl(decl); - } - - return null; - }; - - SemanticInfoChain.prototype.setASTForDecl = function (decl, ast) { - this.getDocument(decl.fileName())._setASTForDecl(decl, ast); - }; - - SemanticInfoChain.prototype.topLevelDecl = function (fileName) { - var document = this.getDocument(fileName); - if (document) { - return document.topLevelDecl(); - } - - return null; - }; - - SemanticInfoChain.prototype.topLevelDecls = function () { - if (!this._topLevelDecls) { - this._topLevelDecls = TypeScript.ArrayUtilities.select(this.documents, function (u) { - return u.topLevelDecl(); - }); - } - - return this._topLevelDecls; - }; - - SemanticInfoChain.prototype.addDiagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - this.addDiagnostic(this.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations)); - }; - - SemanticInfoChain.prototype.diagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - return new TypeScript.Diagnostic(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width(), diagnosticKey, _arguments, additionalLocations); - }; - - SemanticInfoChain.prototype.locationFromAST = function (ast) { - return new TypeScript.Location(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width()); - }; - - SemanticInfoChain.prototype.duplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - return this.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0, [identifier], additionalLocationAST ? [this.locationFromAST(additionalLocationAST)] : null); - }; - - SemanticInfoChain.prototype.addDuplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - this.addDiagnostic(this.duplicateIdentifierDiagnosticFromAST(ast, identifier, additionalLocationAST)); - }; - return SemanticInfoChain; - })(); - TypeScript.SemanticInfoChain = SemanticInfoChain; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DeclCollectionContext = (function () { - function DeclCollectionContext(document, semanticInfoChain, propagateEnumConstants) { - this.document = document; - this.semanticInfoChain = semanticInfoChain; - this.propagateEnumConstants = propagateEnumConstants; - this.isDeclareFile = false; - this.parentChain = []; - } - DeclCollectionContext.prototype.getParent = function () { - return this.parentChain ? this.parentChain[this.parentChain.length - 1] : null; - }; - - DeclCollectionContext.prototype.pushParent = function (parentDecl) { - if (parentDecl) { - this.parentChain[this.parentChain.length] = parentDecl; - } - }; - - DeclCollectionContext.prototype.popParent = function () { - this.parentChain.length--; - }; - return DeclCollectionContext; - })(); - - function moduleElementsHasExportAssignment(moduleElements) { - return moduleElements.any(function (m) { - return m.kind() === 134 /* ExportAssignment */; - }); - } - - function containingModuleHasExportAssignment(ast) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = ast; - return moduleElementsHasExportAssignment(moduleDecl.moduleElements); - } else if (ast.kind() === 120 /* SourceUnit */) { - var sourceUnit = ast; - return moduleElementsHasExportAssignment(sourceUnit.moduleElements); - } - - ast = ast.parent; - } - - return false; - } - - function isParsingAmbientModule(ast, context) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.hasModifier(ast.modifiers, 8 /* Ambient */)) { - return true; - } - } - - ast = ast.parent; - } - - return false; - } - - function preCollectImportDecls(ast, context) { - var importDecl = ast; - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (TypeScript.hasModifier(importDecl.modifiers, 1 /* Exported */) && !containingModuleHasExportAssignment(ast)) { - declFlags |= 1 /* Exported */; - } - - var decl = new TypeScript.NormalPullDecl(importDecl.identifier.valueText(), importDecl.identifier.text(), 128 /* TypeAlias */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - } - - function preCollectScriptDecls(sourceUnit, context) { - var fileName = sourceUnit.fileName(); - - var isExternalModule = context.document.isExternalModule(); - - var decl = new TypeScript.RootPullDecl(fileName, fileName, 1 /* Script */, 0 /* None */, context.semanticInfoChain, isExternalModule); - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.isDeclareFile = context.document.isDeclareFile(); - - context.pushParent(decl); - - if (isExternalModule) { - var declFlags = 1 /* Exported */; - if (TypeScript.isDTSFile(fileName)) { - declFlags |= 8 /* Ambient */; - } - - var moduleContainsExecutableCode = containsExecutableCode(sourceUnit.moduleElements); - var kind = 32 /* DynamicModule */; - var valueText = TypeScript.quoteStr(fileName); - - var decl = new TypeScript.NormalPullDecl(valueText, fileName, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - - if (!moduleElementsHasExportAssignment(sourceUnit.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, sourceUnit, context); - } - - context.pushParent(decl); - } - } - - function preCollectEnumDecls(enumDecl, context) { - var declFlags = 0 /* None */; - var enumName = enumDecl.identifier.valueText(); - - if ((TypeScript.hasModifier(enumDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(enumDecl, context)) && !containingModuleHasExportAssignment(enumDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(enumDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(enumDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - declFlags |= 4096 /* Enum */; - var kind = 64 /* Enum */; - - var enumDeclaration = new TypeScript.NormalPullDecl(enumName, enumDecl.identifier.text(), kind, declFlags, context.getParent()); - context.semanticInfoChain.setDeclForAST(enumDecl, enumDeclaration); - context.semanticInfoChain.setASTForDecl(enumDeclaration, enumDecl); - - var valueDecl = new TypeScript.NormalPullDecl(enumDeclaration.name, enumDeclaration.getDisplayName(), 512 /* Variable */, enumDeclaration.flags, context.getParent()); - enumDeclaration.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, enumDecl); - - context.pushParent(enumDeclaration); - } - - function createEnumElementDecls(propertyDecl, context) { - var parent = context.getParent(); - - var decl = new TypeScript.PullEnumElementDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function preCollectModuleDecls(moduleDecl, context) { - var declFlags = 0 /* None */; - - var moduleContainsExecutableCode = containsExecutableCode(moduleDecl.moduleElements); - - var isDynamic = moduleDecl.stringLiteral !== null; - - if ((TypeScript.hasModifier(moduleDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(moduleDecl, context)) && !containingModuleHasExportAssignment(moduleDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(moduleDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(moduleDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var kind = isDynamic ? 32 /* DynamicModule */ : 4 /* Container */; - - if (moduleDecl.stringLiteral) { - var valueText = TypeScript.quoteStr(moduleDecl.stringLiteral.valueText()); - var text = moduleDecl.stringLiteral.text(); - - var decl = new TypeScript.NormalPullDecl(valueText, text, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleDecl.stringLiteral, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleDecl.stringLiteral); - - if (!moduleElementsHasExportAssignment(moduleDecl.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleDecl.stringLiteral, context); - } - - context.pushParent(decl); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - var moduleName = moduleNames[i]; - - var specificFlags = declFlags; - if (i > 0) { - specificFlags |= 1 /* Exported */; - } - - var decl = new TypeScript.NormalPullDecl(moduleName.valueText(), moduleName.text(), kind, specificFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleName, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleName); - - if (moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleName, context); - } - - context.pushParent(decl); - } - } - } - - function createModuleVariableDecl(decl, moduleNameAST, context) { - decl.setFlags(decl.flags | getInitializationFlag(decl)); - - var valueDecl = new TypeScript.NormalPullDecl(decl.name, decl.getDisplayName(), 512 /* Variable */, decl.flags, context.getParent()); - decl.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, moduleNameAST); - } - - function containsExecutableCode(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = member; - - if (containsExecutableCode(moduleDecl.moduleElements)) { - return true; - } - } else if (member.kind() === 133 /* ImportDeclaration */) { - if (TypeScript.hasModifier(member.modifiers, 1 /* Exported */)) { - return true; - } - } else if (member.kind() !== 128 /* InterfaceDeclaration */ && member.kind() !== 134 /* ExportAssignment */) { - return true; - } - } - - return false; - } - - function preCollectClassDecls(classDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(classDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(classDecl, context)) && !containingModuleHasExportAssignment(classDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(classDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(classDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 8 /* Class */, declFlags, parent); - - var constructorDecl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 512 /* Variable */, declFlags | 16384 /* ClassConstructorVariable */, parent); - - decl.setValueDecl(constructorDecl); - - context.semanticInfoChain.setDeclForAST(classDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, classDecl); - context.semanticInfoChain.setASTForDecl(constructorDecl, classDecl); - - context.pushParent(decl); - } - - function preCollectObjectTypeDecls(objectType, context) { - if (objectType.parent.kind() === 128 /* InterfaceDeclaration */) { - return; - } - - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", 8388608 /* ObjectType */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(objectType, decl); - context.semanticInfoChain.setASTForDecl(decl, objectType); - - context.pushParent(decl); - } - - function preCollectInterfaceDecls(interfaceDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(interfaceDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(interfaceDecl, context)) && !containingModuleHasExportAssignment(interfaceDecl)) { - declFlags |= 1 /* Exported */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(interfaceDecl.identifier.valueText(), interfaceDecl.identifier.text(), 16 /* Interface */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(interfaceDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, interfaceDecl); - - context.pushParent(decl); - } - - function preCollectParameterDecl(argDecl, context) { - var declFlags = 0 /* None */; - - if (TypeScript.hasModifier(argDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (argDecl.questionToken !== null || argDecl.equalsValueClause !== null || argDecl.dotDotDotToken !== null) { - declFlags |= 128 /* Optional */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - if (argDecl.equalsValueClause) { - parent.flags |= 33554432 /* HasDefaultArgs */; - } - - if (parent.kind === 32768 /* ConstructorMethod */) { - decl.setFlag(67108864 /* ConstructorParameter */); - } - - var isPublicOrPrivate = TypeScript.hasModifier(argDecl.modifiers, 4 /* Public */ | 2 /* Private */); - var isInConstructor = parent.kind === 32768 /* ConstructorMethod */; - if (isPublicOrPrivate && isInConstructor) { - var parentsParent = context.parentChain[context.parentChain.length - 2]; - - var propDeclFlags = declFlags & ~128 /* Optional */; - var propDecl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 4096 /* Property */, propDeclFlags, parentsParent); - propDecl.setValueDecl(decl); - decl.setFlag(8388608 /* PropertyParameter */); - propDecl.setFlag(8388608 /* PropertyParameter */); - - if (parent.kind === 32768 /* ConstructorMethod */) { - propDecl.setFlag(67108864 /* ConstructorParameter */); - } - - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setASTForDecl(propDecl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, propDecl); - } else { - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, decl); - } - - parent.addVariableDeclToGroup(decl); - } - - function preCollectTypeParameterDecl(typeParameterDecl, context) { - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(typeParameterDecl.identifier.valueText(), typeParameterDecl.identifier.text(), 8192 /* TypeParameter */, declFlags, parent); - context.semanticInfoChain.setASTForDecl(decl, typeParameterDecl); - context.semanticInfoChain.setDeclForAST(typeParameterDecl, decl); - } - - function createPropertySignature(propertyDecl, context) { - var declFlags = 4 /* Public */; - var parent = context.getParent(); - var declType = 4096 /* Property */; - - if (propertyDecl.questionToken !== null) { - declFlags |= 128 /* Optional */; - } - - var decl = new TypeScript.NormalPullDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function createMemberVariableDeclaration(memberDecl, context) { - var declFlags = 0 /* None */; - var declType = 4096 /* Property */; - - if (TypeScript.hasModifier(memberDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (TypeScript.hasModifier(memberDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(memberDecl.variableDeclarator.propertyName.valueText(), memberDecl.variableDeclarator.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(memberDecl, decl); - context.semanticInfoChain.setDeclForAST(memberDecl.variableDeclarator, decl); - context.semanticInfoChain.setASTForDecl(decl, memberDecl); - } - - function createVariableDeclaration(varDecl, context) { - var declFlags = 0 /* None */; - var declType = 512 /* Variable */; - - var modifiers = TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl); - if ((TypeScript.hasModifier(modifiers, 1 /* Exported */) || isParsingAmbientModule(varDecl, context)) && !containingModuleHasExportAssignment(varDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(modifiers, 8 /* Ambient */) || isParsingAmbientModule(varDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(varDecl.propertyName.valueText(), varDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(varDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, varDecl); - - if (parent) { - parent.addVariableDeclToGroup(decl); - } - } - - function preCollectVarDecls(ast, context) { - if (ast.parent.kind() === 136 /* MemberVariableDeclaration */) { - return; - } - - var varDecl = ast; - createVariableDeclaration(varDecl, context); - } - - function createFunctionTypeDeclaration(functionTypeDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 16777216 /* FunctionType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(functionTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionTypeDeclAST); - - context.pushParent(decl); - } - - function createConstructorTypeDeclaration(constructorTypeDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 33554432 /* ConstructorType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorTypeDeclAST); - - context.pushParent(decl); - } - - function createFunctionDeclaration(funcDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 16384 /* Function */; - - if ((TypeScript.hasModifier(funcDeclAST.modifiers, 1 /* Exported */) || isParsingAmbientModule(funcDeclAST, context)) && !containingModuleHasExportAssignment(funcDeclAST)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(funcDeclAST.modifiers, 8 /* Ambient */) || isParsingAmbientModule(funcDeclAST, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - if (!funcDeclAST.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(funcDeclAST.identifier.valueText(), funcDeclAST.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDeclAST); - - context.pushParent(decl); - } - - function createAnyFunctionExpressionDeclaration(functionExpressionDeclAST, id, context, displayName) { - if (typeof displayName === "undefined") { displayName = null; } - var declFlags = 0 /* None */; - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */ || functionExpressionDeclAST.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - declFlags |= 8192 /* ArrowFunction */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var name = id ? id.text() : ""; - var displayNameText = displayName ? displayName.text() : ""; - var decl = new TypeScript.PullFunctionExpressionDecl(name, declFlags, parent, displayNameText); - context.semanticInfoChain.setDeclForAST(functionExpressionDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionExpressionDeclAST); - - context.pushParent(decl); - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrow = functionExpressionDeclAST; - var declFlags = 4 /* Public */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(simpleArrow.identifier.valueText(), simpleArrow.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - context.semanticInfoChain.setASTForDecl(decl, simpleArrow.identifier); - context.semanticInfoChain.setDeclForAST(simpleArrow.identifier, decl); - - parent.addVariableDeclToGroup(decl); - } - } - - function createMemberFunctionDeclaration(funcDecl, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - if (TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (!funcDecl.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(funcDecl.propertyName.valueText(), funcDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDecl); - - context.pushParent(decl); - } - - function createIndexSignatureDeclaration(indexSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 4194304 /* IndexSignature */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(indexSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, indexSignatureDeclAST); - - context.pushParent(decl); - } - - function createCallSignatureDeclaration(callSignature, context) { - var isChildOfObjectType = callSignature.parent && callSignature.parent.parent && callSignature.parent.kind() === 2 /* SeparatedList */ && callSignature.parent.parent.kind() === 122 /* ObjectType */; - - if (!isChildOfObjectType) { - return; - } - - var declFlags = 2048 /* Signature */; - var declType = 1048576 /* CallSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(callSignature, decl); - context.semanticInfoChain.setASTForDecl(decl, callSignature); - - context.pushParent(decl); - } - - function createMethodSignatureDeclaration(method, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - declFlags |= 4 /* Public */; - declFlags |= 2048 /* Signature */; - - if (method.questionToken !== null) { - declFlags |= 128 /* Optional */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(method.propertyName.valueText(), method.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(method, decl); - context.semanticInfoChain.setASTForDecl(decl, method); - - context.pushParent(decl); - } - - function createConstructSignatureDeclaration(constructSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 2097152 /* ConstructSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructSignatureDeclAST); - - context.pushParent(decl); - } - - function createClassConstructorDeclaration(constructorDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 32768 /* ConstructorMethod */; - - if (!constructorDeclAST.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - if (parent) { - var parentFlags = parent.flags; - - if (parentFlags & 1 /* Exported */) { - declFlags |= 1 /* Exported */; - } - } - - var decl = new TypeScript.NormalPullDecl(parent.name, parent.getDisplayName(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorDeclAST); - - context.pushParent(decl); - } - - function createGetAccessorDeclaration(getAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 262144 /* GetAccessor */; - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(getAccessorDeclAST.propertyName.valueText(), getAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(getAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, getAccessorDeclAST); - - context.pushParent(decl); - } - - function createFunctionExpressionDeclaration(expression, context) { - createAnyFunctionExpressionDeclaration(expression, expression.identifier, context); - } - - function createSetAccessorDeclaration(setAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 524288 /* SetAccessor */; - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; - } - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(setAccessorDeclAST.propertyName.valueText(), setAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(setAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, setAccessorDeclAST); - - context.pushParent(decl); - } - - function preCollectCatchDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 268435456 /* CatchBlock */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - - var declFlags = 0 /* None */; - var declType = 1024 /* CatchVariable */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(ast.identifier.valueText(), ast.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast.identifier, decl); - context.semanticInfoChain.setASTForDecl(decl, ast.identifier); - - if (parent) { - parent.addVariableDeclToGroup(decl); - } - } - - function preCollectWithDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 134217728 /* WithBlock */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectObjectLiteralDecls(ast, context) { - var decl = new TypeScript.NormalPullDecl("", "", 256 /* ObjectLiteral */, 0 /* None */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectSimplePropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - var span = TypeScript.TextSpan.fromBounds(propertyAssignment.start(), propertyAssignment.end()); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - } - - function preCollectFunctionPropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - - createAnyFunctionExpressionDeclaration(propertyAssignment, propertyAssignment.propertyName, context, propertyAssignment.propertyName); - } - - function preCollectDecls(ast, context) { - switch (ast.kind()) { - case 120 /* SourceUnit */: - preCollectScriptDecls(ast, context); - break; - case 132 /* EnumDeclaration */: - preCollectEnumDecls(ast, context); - break; - case 243 /* EnumElement */: - createEnumElementDecls(ast, context); - break; - case 130 /* ModuleDeclaration */: - preCollectModuleDecls(ast, context); - break; - case 131 /* ClassDeclaration */: - preCollectClassDecls(ast, context); - break; - case 128 /* InterfaceDeclaration */: - preCollectInterfaceDecls(ast, context); - break; - case 122 /* ObjectType */: - preCollectObjectTypeDecls(ast, context); - break; - case 242 /* Parameter */: - preCollectParameterDecl(ast, context); - break; - case 136 /* MemberVariableDeclaration */: - createMemberVariableDeclaration(ast, context); - break; - case 141 /* PropertySignature */: - createPropertySignature(ast, context); - break; - case 225 /* VariableDeclarator */: - preCollectVarDecls(ast, context); - break; - case 137 /* ConstructorDeclaration */: - createClassConstructorDeclaration(ast, context); - break; - case 139 /* GetAccessor */: - createGetAccessorDeclaration(ast, context); - break; - case 140 /* SetAccessor */: - createSetAccessorDeclaration(ast, context); - break; - case 222 /* FunctionExpression */: - createFunctionExpressionDeclaration(ast, context); - break; - case 135 /* MemberFunctionDeclaration */: - createMemberFunctionDeclaration(ast, context); - break; - case 144 /* IndexSignature */: - createIndexSignatureDeclaration(ast, context); - break; - case 123 /* FunctionType */: - createFunctionTypeDeclaration(ast, context); - break; - case 125 /* ConstructorType */: - createConstructorTypeDeclaration(ast, context); - break; - case 142 /* CallSignature */: - createCallSignatureDeclaration(ast, context); - break; - case 143 /* ConstructSignature */: - createConstructSignatureDeclaration(ast, context); - break; - case 145 /* MethodSignature */: - createMethodSignatureDeclaration(ast, context); - break; - case 129 /* FunctionDeclaration */: - createFunctionDeclaration(ast, context); - break; - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - createAnyFunctionExpressionDeclaration(ast, null, context); - break; - case 133 /* ImportDeclaration */: - preCollectImportDecls(ast, context); - break; - case 238 /* TypeParameter */: - preCollectTypeParameterDecl(ast, context); - break; - case 236 /* CatchClause */: - preCollectCatchDecls(ast, context); - break; - case 163 /* WithStatement */: - preCollectWithDecls(ast, context); - break; - case 215 /* ObjectLiteralExpression */: - preCollectObjectLiteralDecls(ast, context); - break; - case 240 /* SimplePropertyAssignment */: - preCollectSimplePropertyAssignmentDecls(ast, context); - break; - case 241 /* FunctionPropertyAssignment */: - preCollectFunctionPropertyAssignmentDecls(ast, context); - break; - } - } - - function isContainer(decl) { - return decl.kind === 4 /* Container */ || decl.kind === 32 /* DynamicModule */ || decl.kind === 64 /* Enum */; - } - - function getInitializationFlag(decl) { - if (decl.kind & 4 /* Container */) { - return 32768 /* InitializedModule */; - } else if (decl.kind & 32 /* DynamicModule */) { - return 65536 /* InitializedDynamicModule */; - } - - return 0 /* None */; - } - - function hasInitializationFlag(decl) { - var kind = decl.kind; - - if (kind & 4 /* Container */) { - return (decl.flags & 32768 /* InitializedModule */) !== 0; - } else if (kind & 32 /* DynamicModule */) { - return (decl.flags & 65536 /* InitializedDynamicModule */) !== 0; - } - - return false; - } - - function postCollectDecls(ast, context) { - var currentDecl = context.getParent(); - - if (ast.kind() === 11 /* IdentifierName */ || ast.kind() === 14 /* StringLiteral */) { - if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - return; - } - } - - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDeclaration = ast; - if (moduleDeclaration.stringLiteral) { - TypeScript.Debug.assert(currentDecl.ast() === moduleDeclaration.stringLiteral); - context.popParent(); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDeclaration.name); - for (var i = moduleNames.length - 1; i >= 0; i--) { - var moduleName = moduleNames[i]; - TypeScript.Debug.assert(currentDecl.ast() === moduleName); - context.popParent(); - currentDecl = context.getParent(); - } - } - } - - if (ast.kind() === 132 /* EnumDeclaration */) { - computeEnumElementConstantValues(ast, currentDecl, context); - } - - while (currentDecl.getParentDecl() && currentDecl.ast() === ast) { - context.popParent(); - currentDecl = context.getParent(); - } - } - - function computeEnumElementConstantValues(ast, enumDecl, context) { - TypeScript.Debug.assert(enumDecl.kind === 64 /* Enum */); - - var isAmbientEnum = TypeScript.hasFlag(enumDecl.flags, 8 /* Ambient */); - var inConstantSection = !isAmbientEnum; - var currentConstantValue = 0; - var enumMemberDecls = enumDecl.getChildDecls(); - - for (var i = 0, n = ast.enumElements.nonSeparatorCount(); i < n; i++) { - var enumElement = ast.enumElements.nonSeparatorAt(i); - var enumElementDecl = TypeScript.ArrayUtilities.first(enumMemberDecls, function (d) { - return context.semanticInfoChain.getASTForDecl(d) === enumElement; - }); - - TypeScript.Debug.assert(enumElementDecl.kind === 67108864 /* EnumMember */); - - if (enumElement.equalsValueClause === null) { - if (inConstantSection) { - enumElementDecl.constantValue = currentConstantValue; - currentConstantValue++; - } - } else { - enumElementDecl.constantValue = computeEnumElementConstantValue(enumElement.equalsValueClause.value, enumMemberDecls, context); - if (enumElementDecl.constantValue !== null && !isAmbientEnum) { - inConstantSection = true; - currentConstantValue = enumElementDecl.constantValue + 1; - } else { - inConstantSection = false; - } - } - - TypeScript.Debug.assert(enumElementDecl.constantValue !== undefined); - } - } - - function computeEnumElementConstantValue(expression, enumMemberDecls, context) { - TypeScript.Debug.assert(expression); - - if (TypeScript.ASTHelpers.isIntegerLiteralAST(expression)) { - var token; - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - token = expression.operand; - break; - default: - token = expression; - } - - var value = token.value(); - return value && expression.kind() === 165 /* NegateExpression */ ? -value : value; - } else if (context.propagateEnumConstants) { - switch (expression.kind()) { - case 11 /* IdentifierName */: - var name = expression; - var matchingEnumElement = TypeScript.ArrayUtilities.firstOrDefault(enumMemberDecls, function (d) { - return d.name === name.valueText(); - }); - - return matchingEnumElement ? matchingEnumElement.constantValue : null; - - case 202 /* LeftShiftExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left << right; - - case 189 /* BitwiseOrExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left | right; - } - - return null; - } else { - return null; - } - } - - (function (DeclarationCreator) { - function create(document, semanticInfoChain, compilationSettings) { - var declCollectionContext = new DeclCollectionContext(document, semanticInfoChain, compilationSettings.propagateEnumConstants()); - - TypeScript.getAstWalkerFactory().simpleWalk(document.sourceUnit(), preCollectDecls, postCollectDecls, declCollectionContext); - - return declCollectionContext.getParent(); - } - DeclarationCreator.create = create; - })(TypeScript.DeclarationCreator || (TypeScript.DeclarationCreator = {})); - var DeclarationCreator = TypeScript.DeclarationCreator; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PullSymbolBinder = (function () { - function PullSymbolBinder(semanticInfoChain) { - this.semanticInfoChain = semanticInfoChain; - this.declsBeingBound = []; - this.inBindingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullSymbolBinder.prototype.getParent = function (decl, returnInstanceType) { - if (typeof returnInstanceType === "undefined") { returnInstanceType = false; } - var parentDecl = decl.getParentDecl(); - - if (parentDecl.kind === 1 /* Script */) { - return null; - } - - var parent = parentDecl.getSymbol(); - - if (!parent && parentDecl && !parentDecl.hasBeenBound()) { - this.bindDeclToPullSymbol(parentDecl); - } - - parent = parentDecl.getSymbol(); - if (parent) { - var parentDeclKind = parentDecl.kind; - if (parentDeclKind === 262144 /* GetAccessor */) { - parent = parent.getGetter(); - } else if (parentDeclKind === 524288 /* SetAccessor */) { - parent = parent.getSetter(); - } - } - - if (parent) { - if (returnInstanceType && parent.isType() && parent.isContainer()) { - var instanceSymbol = parent.getInstanceSymbol(); - - if (instanceSymbol) { - return instanceSymbol.type; - } - } - - return parent.type; - } - - return null; - }; - - PullSymbolBinder.prototype.findDeclsInContext = function (startingDecl, declKind, searchGlobally) { - if (!searchGlobally) { - var parentDecl = startingDecl.getParentDecl(); - return parentDecl.searchChildDecls(startingDecl.name, declKind); - } - - var contextSymbolPath = startingDecl.getParentPath(); - - if (contextSymbolPath.length) { - var copyOfContextSymbolPath = []; - - for (var i = 0; i < contextSymbolPath.length; i++) { - if (contextSymbolPath[i].kind & 1 /* Script */) { - continue; - } - copyOfContextSymbolPath[copyOfContextSymbolPath.length] = contextSymbolPath[i].name; - } - - return this.semanticInfoChain.findDecls(copyOfContextSymbolPath, declKind); - } - }; - - PullSymbolBinder.prototype.getExistingSymbol = function (decl, searchKind, parent) { - var lookingForValue = (searchKind & 68147712 /* SomeValue */) !== 0; - var lookingForType = (searchKind & 58728795 /* SomeType */) !== 0; - var lookingForContainer = (searchKind & 164 /* SomeContainer */) !== 0; - var name = decl.name; - if (parent) { - var isExported = (decl.flags & 1 /* Exported */) !== 0; - - var prevSymbol = null; - if (lookingForValue) { - prevSymbol = parent.findContainedNonMember(name); - } else if (lookingForType) { - prevSymbol = parent.findContainedNonMemberType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findContainedNonMemberContainer(name, searchKind); - } - var prevIsExported = !prevSymbol; - if (!prevSymbol) { - if (lookingForValue) { - prevSymbol = parent.findMember(name, false); - } else if (lookingForType) { - prevSymbol = parent.findNestedType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findNestedContainer(name, searchKind); - } - } - - if (isExported && prevIsExported) { - return prevSymbol; - } - if (prevSymbol) { - var prevDecls = prevSymbol.getDeclarations(); - var lastPrevDecl = prevDecls[prevDecls.length - 1]; - var parentDecl = decl.getParentDecl(); - var prevParentDecl = lastPrevDecl && lastPrevDecl.getParentDecl(); - if (parentDecl !== prevParentDecl) { - return null; - } - - return prevSymbol; - } - } else { - var parentDecl = decl.getParentDecl(); - if (parentDecl && parentDecl.kind === 1 /* Script */) { - return this.semanticInfoChain.findTopLevelSymbol(name, searchKind, decl); - } else { - var prevDecls = parentDecl && parentDecl.searchChildDecls(name, searchKind); - return prevDecls[0] && prevDecls[0].getSymbol(); - } - } - - return null; - }; - - PullSymbolBinder.prototype.checkThatExportsMatch = function (decl, prevSymbol, reportError) { - if (typeof reportError === "undefined") { reportError = true; } - var isExported = (decl.flags & 1 /* Exported */) !== 0; - var prevDecls = prevSymbol.getDeclarations(); - var prevIsExported = (prevDecls[prevDecls.length - 1].flags & 1 /* Exported */) !== 0; - if ((isExported !== prevIsExported) && !prevSymbol.isSignature() && (decl.kind & 7340032 /* SomeSignature */) === 0) { - if (reportError) { - var ast = this.semanticInfoChain.getASTForDecl(decl); - this.semanticInfoChain.addDiagnosticFromAST(ast, TypeScript.DiagnosticCode.All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported, [decl.getDisplayName()]); - } - return false; - } - - return true; - }; - - PullSymbolBinder.prototype.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList = function (signature, currentSignatures) { - var signatureDecl = signature.getDeclarations()[0]; - TypeScript.Debug.assert(signatureDecl); - var enclosingDecl = signatureDecl.getParentDecl(); - var indexToInsert = TypeScript.ArrayUtilities.indexOf(currentSignatures, function (someSignature) { - return someSignature.getDeclarations()[0].getParentDecl() !== enclosingDecl; - }); - return indexToInsert < 0 ? currentSignatures.length : indexToInsert; - }; - - PullSymbolBinder.prototype.bindEnumDeclarationToPullSymbol = function (enumContainerDecl) { - var enumName = enumContainerDecl.name; - - var enumContainerSymbol = null; - var enumInstanceSymbol = null; - var moduleInstanceTypeSymbol = null; - - var enumInstanceDecl = enumContainerDecl.getValueDecl(); - - var enumDeclKind = enumContainerDecl.kind; - - var parent = this.getParent(enumContainerDecl); - var parentInstanceSymbol = this.getParent(enumContainerDecl, true); - var parentDecl = enumContainerDecl.getParentDecl(); - var enumAST = this.semanticInfoChain.getASTForDecl(enumContainerDecl); - - var isExported = enumContainerDecl.flags & 1 /* Exported */; - - var createdNewSymbol = false; - - enumContainerSymbol = this.getExistingSymbol(enumContainerDecl, 64 /* Enum */, parent); - - if (enumContainerSymbol) { - if (enumContainerSymbol.kind !== enumDeclKind) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(enumAST.identifier, enumContainerDecl.getDisplayName(), enumContainerSymbol.getDeclarations()[0].ast()); - enumContainerSymbol = null; - } else if (!this.checkThatExportsMatch(enumContainerDecl, enumContainerSymbol)) { - enumContainerSymbol = null; - } - } - - if (enumContainerSymbol) { - enumInstanceSymbol = enumContainerSymbol.getInstanceSymbol(); - } else { - enumContainerSymbol = new TypeScript.PullContainerSymbol(enumName, enumDeclKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(enumContainerSymbol, 64 /* Enum */); - } - } - - enumContainerSymbol.addDeclaration(enumContainerDecl); - enumContainerDecl.setSymbol(enumContainerSymbol); - - this.semanticInfoChain.setSymbolForAST(enumAST.identifier, enumContainerSymbol); - this.semanticInfoChain.setSymbolForAST(enumAST, enumContainerSymbol); - - if (!enumInstanceSymbol) { - var variableSymbol = null; - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - } - } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - - if (parentDecl !== variableSymbolParentDecl) { - variableSymbol = null; - } - } - } - } else if (!(enumContainerDecl.flags & 1 /* Exported */)) { - var siblingDecls = parentDecl.getChildDecls(); - var augmentedDecl = null; - - for (var i = 0; i < siblingDecls.length; i++) { - if (siblingDecls[i] === enumContainerDecl) { - break; - } - - if ((siblingDecls[i].name === enumName) && (siblingDecls[i].kind & 68147712 /* SomeValue */)) { - augmentedDecl = siblingDecls[i]; - break; - } - } - - if (augmentedDecl) { - variableSymbol = augmentedDecl.getSymbol(); - - if (variableSymbol) { - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); - } - } - } - } - - if (variableSymbol) { - enumInstanceSymbol = variableSymbol; - moduleInstanceTypeSymbol = variableSymbol.type; - } else { - enumInstanceSymbol = new TypeScript.PullSymbol(enumName, 512 /* Variable */); - } - - enumContainerSymbol.setInstanceSymbol(enumInstanceSymbol); - - if (!moduleInstanceTypeSymbol) { - moduleInstanceTypeSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - enumInstanceSymbol.type = moduleInstanceTypeSymbol; - } - - moduleInstanceTypeSymbol.addDeclaration(enumContainerDecl); - - if (!moduleInstanceTypeSymbol.getAssociatedContainerType()) { - moduleInstanceTypeSymbol.setAssociatedContainerType(enumContainerSymbol); - } - } - - if (createdNewSymbol && parent) { - if (enumContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(enumContainerSymbol); - } else { - parent.addEnclosedNonMemberType(enumContainerSymbol); - } - } - - if (createdNewSymbol) { - this.bindEnumIndexerDeclsToPullSymbols(enumContainerSymbol); - } - var valueDecl = enumContainerDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - }; - - PullSymbolBinder.prototype.bindEnumIndexerDeclsToPullSymbols = function (enumContainerSymbol) { - var enumContainerInstanceTypeSymbol = enumContainerSymbol.getInstanceSymbol().type; - - var syntheticIndexerParameterSymbol = new TypeScript.PullSymbol("x", 2048 /* Parameter */); - syntheticIndexerParameterSymbol.type = this.semanticInfoChain.numberTypeSymbol; - syntheticIndexerParameterSymbol.setResolved(); - syntheticIndexerParameterSymbol.setIsSynthesized(); - - var syntheticIndexerSignatureSymbol = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - syntheticIndexerSignatureSymbol.addParameter(syntheticIndexerParameterSymbol); - syntheticIndexerSignatureSymbol.returnType = this.semanticInfoChain.stringTypeSymbol; - syntheticIndexerSignatureSymbol.setResolved(); - syntheticIndexerSignatureSymbol.setIsSynthesized(); - - enumContainerInstanceTypeSymbol.addIndexSignature(syntheticIndexerSignatureSymbol); - }; - - PullSymbolBinder.prototype.findExistingVariableSymbolForModuleValueDecl = function (decl) { - var isExported = TypeScript.hasFlag(decl.flags, 1 /* Exported */); - var modName = decl.name; - var parentInstanceSymbol = this.getParent(decl, true); - var parentDecl = decl.getParentDecl(); - - var variableSymbol = null; - - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); - } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); - } - } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - var isExportedOrHasTheSameParent = isExported || (parentDecl === variableSymbolParentDecl); - - var canReuseVariableSymbol = isExportedOrHasTheSameParent && this.checkThatExportsMatch(decl, variableSymbol, false); - - if (!canReuseVariableSymbol) { - variableSymbol = null; - } - } - } - } else if (!isExported) { - var siblingDecls = parentDecl.getChildDecls(); - - for (var i = 0; i < siblingDecls.length; i++) { - var sibling = siblingDecls[i]; - - var siblingIsSomeValue = TypeScript.hasFlag(sibling.kind, 68147712 /* SomeValue */); - var siblingIsFunctionOrHasImplictVarFlag = TypeScript.hasFlag(sibling.kind, 1032192 /* SomeFunction */) || TypeScript.hasFlag(sibling.flags, 118784 /* ImplicitVariable */); - - var isSiblingAnAugmentableVariable = sibling !== decl && sibling !== decl.getValueDecl() && sibling.name === modName && siblingIsSomeValue && siblingIsFunctionOrHasImplictVarFlag; - - if (isSiblingAnAugmentableVariable) { - if (sibling.hasSymbol()) { - variableSymbol = sibling.getSymbol(); - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); - } - - break; - } - } - } - } - return variableSymbol; - }; - - PullSymbolBinder.prototype.bindModuleDeclarationToPullSymbol = function (moduleContainerDecl) { - var modName = moduleContainerDecl.name; - - var moduleContainerTypeSymbol = null; - var moduleKind = moduleContainerDecl.kind; - - var parent = this.getParent(moduleContainerDecl); - var parentInstanceSymbol = this.getParent(moduleContainerDecl, true); - var parentDecl = moduleContainerDecl.getParentDecl(); - var moduleNameAST = this.semanticInfoChain.getASTForDecl(moduleContainerDecl); - var moduleDeclAST = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(moduleNameAST); - if (!moduleDeclAST) { - TypeScript.Debug.assert(moduleKind === 32 /* DynamicModule */); - TypeScript.Debug.assert(moduleNameAST.kind() === 120 /* SourceUnit */); - - moduleDeclAST = moduleNameAST; - } - - var isExported = TypeScript.hasFlag(moduleContainerDecl.flags, 1 /* Exported */); - var searchKind = 164 /* SomeContainer */; - var isInitializedModule = (moduleContainerDecl.flags & 102400 /* SomeInitializedModule */) !== 0; - - if (parent && moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_must_be_defined_in_global_context, null); - } - - var createdNewSymbol = false; - - moduleContainerTypeSymbol = this.getExistingSymbol(moduleContainerDecl, searchKind, parent); - - if (moduleContainerTypeSymbol) { - if (moduleContainerTypeSymbol.kind !== moduleKind) { - if (isInitializedModule) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(moduleNameAST, moduleContainerDecl.getDisplayName(), moduleContainerTypeSymbol.getDeclarations()[0].ast()); - } - - moduleContainerTypeSymbol = null; - } else if (moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_be_reopened); - } else if (!this.checkThatExportsMatch(moduleContainerDecl, moduleContainerTypeSymbol)) { - moduleContainerTypeSymbol = null; - } - } - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = new TypeScript.PullContainerSymbol(modName, moduleKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(moduleContainerTypeSymbol, searchKind); - } - } - - moduleContainerTypeSymbol.addDeclaration(moduleContainerDecl); - moduleContainerDecl.setSymbol(moduleContainerTypeSymbol); - - this.semanticInfoChain.setSymbolForAST(moduleNameAST, moduleContainerTypeSymbol); - this.semanticInfoChain.setSymbolForAST(moduleDeclAST, moduleContainerTypeSymbol); - - var currentModuleValueDecl = moduleContainerDecl.getValueDecl(); - - var moduleDeclarations = moduleContainerTypeSymbol.getDeclarations(); - - if (createdNewSymbol) { - if (parent) { - if (moduleContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(moduleContainerTypeSymbol); - } else { - parent.addEnclosedNonMemberContainer(moduleContainerTypeSymbol); - } - } - } - - if (currentModuleValueDecl) { - currentModuleValueDecl.ensureSymbolIsBound(); - - var instanceSymbol = null; - var instanceTypeSymbol = null; - if (currentModuleValueDecl.hasSymbol()) { - instanceSymbol = currentModuleValueDecl.getSymbol(); - } else { - instanceSymbol = new TypeScript.PullSymbol(modName, 512 /* Variable */); - currentModuleValueDecl.setSymbol(instanceSymbol); - if (!instanceSymbol.hasDeclaration(currentModuleValueDecl)) { - instanceSymbol.addDeclaration(currentModuleValueDecl); - } - } - - if (!instanceSymbol.type) { - instanceSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - } - - moduleContainerTypeSymbol.setInstanceSymbol(instanceSymbol); - - if (!instanceSymbol.type.getAssociatedContainerType()) { - instanceSymbol.type.setAssociatedContainerType(moduleContainerTypeSymbol); - } - } - }; - - PullSymbolBinder.prototype.bindImportDeclaration = function (importDeclaration) { - var declFlags = importDeclaration.flags; - var declKind = importDeclaration.kind; - var importDeclAST = this.semanticInfoChain.getASTForDecl(importDeclaration); - - var isExported = false; - var importSymbol = null; - var declName = importDeclaration.name; - var parentHadSymbol = false; - var parent = this.getParent(importDeclaration); - - importSymbol = this.getExistingSymbol(importDeclaration, 164 /* SomeContainer */, parent); - - if (importSymbol) { - parentHadSymbol = true; - } - - if (importSymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(importDeclAST, importDeclaration.getDisplayName(), importSymbol.getDeclarations()[0].ast()); - importSymbol = null; - } - - if (!importSymbol) { - importSymbol = new TypeScript.PullTypeAliasSymbol(declName); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(importSymbol, 164 /* SomeContainer */); - } - } - - importSymbol.addDeclaration(importDeclaration); - importDeclaration.setSymbol(importSymbol); - - this.semanticInfoChain.setSymbolForAST(importDeclAST, importSymbol); - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(importSymbol); - } else { - parent.addEnclosedNonMemberContainer(importSymbol); - } - } - }; - - PullSymbolBinder.prototype.ensurePriorDeclarationsAreBound = function (container, currentDecl) { - if (!container) { - return; - } - - var parentDecls = container.getDeclarations(); - for (var i = 0; i < parentDecls.length; ++i) { - var parentDecl = parentDecls[i]; - var childDecls = parentDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl === currentDecl) { - return; - } - - if (childDecl.name === currentDecl.name) { - childDecl.ensureSymbolIsBound(); - } - } - } - }; - - PullSymbolBinder.prototype.bindClassDeclarationToPullSymbol = function (classDecl) { - var className = classDecl.name; - var classSymbol = null; - - var constructorSymbol = null; - var constructorTypeSymbol = null; - - var classAST = this.semanticInfoChain.getASTForDecl(classDecl); - - var parent = this.getParent(classDecl); - - this.ensurePriorDeclarationsAreBound(parent, classDecl); - - var parentDecl = classDecl.getParentDecl(); - var isExported = classDecl.flags & 1 /* Exported */; - var isGeneric = false; - - classSymbol = this.getExistingSymbol(classDecl, 58728795 /* SomeType */, parent); - - if (classSymbol && classSymbol.kind === 16 /* Interface */) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(classAST.identifier, classDecl.getDisplayName(), classSymbol.getDeclarations()[0].ast()); - classSymbol = null; - } - - classSymbol = new TypeScript.PullTypeSymbol(className, 8 /* Class */); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(classSymbol, 8 /* Class */); - } - - classSymbol.addDeclaration(classDecl); - - classDecl.setSymbol(classSymbol); - - this.semanticInfoChain.setSymbolForAST(classAST.identifier, classSymbol); - this.semanticInfoChain.setSymbolForAST(classAST, classSymbol); - - if (parent) { - if (classDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(classSymbol); - } else { - parent.addEnclosedNonMemberType(classSymbol); - } - } - - var typeParameterDecls = classDecl.getTypeParameters(); - - for (var i = 0; i < typeParameterDecls.length; i++) { - var typeParameterSymbol = classSymbol.findTypeParameter(typeParameterDecls[i].name); - - if (typeParameterSymbol) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterSymbol.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameterSymbol.getName()]); - } - - typeParameterSymbol = new TypeScript.PullTypeParameterSymbol(typeParameterDecls[i].name); - - classSymbol.addTypeParameter(typeParameterSymbol); - typeParameterSymbol.addDeclaration(typeParameterDecls[i]); - typeParameterDecls[i].setSymbol(typeParameterSymbol); - } - - constructorSymbol = classSymbol.getConstructorMethod(); - constructorTypeSymbol = constructorSymbol ? constructorSymbol.type : null; - - if (!constructorSymbol) { - var siblingValueDecls = null; - if (parentDecl) { - siblingValueDecls = parentDecl.searchChildDecls(className, 68147712 /* SomeValue */); - - if (siblingValueDecls && siblingValueDecls[0] && siblingValueDecls[0].hasSymbol()) { - constructorSymbol = siblingValueDecls[0].getSymbol(); - } - } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(className, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - constructorSymbol.setIsSynthesized(); - constructorSymbol.type = constructorTypeSymbol; - } - - classSymbol.setConstructorMethod(constructorSymbol); - classSymbol.setHasDefaultConstructor(); - } - - if (constructorSymbol.getIsSynthesized()) { - constructorSymbol.addDeclaration(classDecl.getValueDecl()); - constructorTypeSymbol.addDeclaration(classDecl); - } else { - classSymbol.setHasDefaultConstructor(false); - } - - constructorTypeSymbol.setAssociatedContainerType(classSymbol); - - var valueDecl = classDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); - } - - this.bindStaticPrototypePropertyOfClass(classAST, classSymbol, constructorTypeSymbol); - }; - - PullSymbolBinder.prototype.bindInterfaceDeclarationToPullSymbol = function (interfaceDecl) { - var interfaceName = interfaceDecl.name; - var interfaceSymbol = null; - - var interfaceAST = this.semanticInfoChain.getASTForDecl(interfaceDecl); - var createdNewSymbol = false; - var parent = this.getParent(interfaceDecl); - - var acceptableSharedKind = 16 /* Interface */; - - interfaceSymbol = this.getExistingSymbol(interfaceDecl, 58728795 /* SomeType */, parent); - - if (interfaceSymbol) { - if (!(interfaceSymbol.kind & acceptableSharedKind)) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(interfaceAST.identifier, interfaceDecl.getDisplayName(), interfaceSymbol.getDeclarations()[0].ast()); - interfaceSymbol = null; - } else if (!this.checkThatExportsMatch(interfaceDecl, interfaceSymbol)) { - interfaceSymbol = null; - } - } - - if (!interfaceSymbol) { - interfaceSymbol = new TypeScript.PullTypeSymbol(interfaceName, 16 /* Interface */); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(interfaceSymbol, acceptableSharedKind); - } - } - - interfaceSymbol.addDeclaration(interfaceDecl); - interfaceDecl.setSymbol(interfaceSymbol); - - if (createdNewSymbol) { - if (parent) { - if (interfaceDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(interfaceSymbol); - } else { - parent.addEnclosedNonMemberType(interfaceSymbol); - } - } - } - - var typeParameters = interfaceDecl.getTypeParameters(); - var typeParameter; - var typeParameterDecls = null; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = interfaceSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - interfaceSymbol.addTypeParameter(typeParameter); - } else { - typeParameterDecls = typeParameter.getDeclarations(); - - for (var j = 0; j < typeParameterDecls.length; j++) { - var typeParameterDeclParent = typeParameterDecls[j].getParentDecl(); - - if (typeParameterDeclParent && typeParameterDeclParent === interfaceDecl) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecls[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - - break; - } - } - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - }; - - PullSymbolBinder.prototype.bindObjectTypeDeclarationToPullSymbol = function (objectDecl) { - var objectSymbolAST = this.semanticInfoChain.getASTForDecl(objectDecl); - - var objectSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - - objectSymbol.addDeclaration(objectDecl); - objectDecl.setSymbol(objectSymbol); - - this.semanticInfoChain.setSymbolForAST(objectSymbolAST, objectSymbol); - - var childDecls = objectDecl.getChildDecls(); - - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); - } - }; - - PullSymbolBinder.prototype.bindConstructorTypeDeclarationToPullSymbol = function (constructorTypeDeclaration) { - var declKind = constructorTypeDeclaration.kind; - var declFlags = constructorTypeDeclaration.flags; - var constructorTypeAST = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - - var constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - - constructorTypeDeclaration.setSymbol(constructorTypeSymbol); - constructorTypeSymbol.addDeclaration(constructorTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(constructorTypeAST, constructorTypeSymbol); - - var signature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - if (TypeScript.lastParameterIsRest(funcDecl.parameterList)) { - signature.hasVarArgs = true; - } - - signature.addDeclaration(constructorTypeDeclaration); - constructorTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), constructorTypeSymbol, signature); - - var typeParameters = constructorTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructorTypeSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - constructorTypeSymbol.appendConstructSignature(signature); - }; - - PullSymbolBinder.prototype.bindVariableDeclarationToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var varDeclAST = this.semanticInfoChain.getASTForDecl(variableDeclaration); - var nameAST = varDeclAST.kind() === 131 /* ClassDeclaration */ ? varDeclAST.identifier : varDeclAST.kind() === 225 /* VariableDeclarator */ ? varDeclAST.propertyName : varDeclAST.kind() === 132 /* EnumDeclaration */ ? varDeclAST.identifier : varDeclAST; - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var variableSymbol = null; - - var declName = variableDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(variableDeclaration, true); - - var parentDecl = variableDeclaration.getParentDecl(); - - var isImplicit = (declFlags & 118784 /* ImplicitVariable */) !== 0; - var isModuleValue = (declFlags & (32768 /* InitializedModule */)) !== 0; - var isEnumValue = (declFlags & 4096 /* Enum */) !== 0; - var isClassConstructorVariable = (declFlags & 16384 /* ClassConstructorVariable */) !== 0; - variableSymbol = this.getExistingSymbol(variableDeclaration, 68147712 /* SomeValue */, parent); - - if (!variableSymbol && isModuleValue) { - variableSymbol = this.findExistingVariableSymbolForModuleValueDecl(variableDeclaration.getContainerDecl()); - } - - if (variableSymbol && !variableSymbol.isType()) { - parentHadSymbol = true; - } - - var decl; - var decls; - var ast; - var members; - - if (variableSymbol) { - var prevKind = variableSymbol.kind; - var prevIsEnum = variableSymbol.anyDeclHasFlag(4096 /* Enum */); - var prevIsClassConstructorVariable = variableSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */); - var prevIsModuleValue = variableSymbol.allDeclsHaveFlag(32768 /* InitializedModule */); - var prevIsImplicit = variableSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */); - var prevIsFunction = TypeScript.ArrayUtilities.any(variableSymbol.getDeclarations(), function (decl) { - return decl.kind === 16384 /* Function */; - }); - var prevIsAmbient = variableSymbol.allDeclsHaveFlag(8 /* Ambient */); - var isAmbientOrPrevIsAmbient = prevIsAmbient || (variableDeclaration.flags & 8 /* Ambient */) !== 0; - var prevDecl = variableSymbol.getDeclarations()[0]; - var prevParentDecl = prevDecl.getParentDecl(); - var bothAreGlobal = parentDecl && (parentDecl.kind === 1 /* Script */) && (prevParentDecl.kind === 1 /* Script */); - var shareParent = bothAreGlobal || prevDecl.getParentDecl() === variableDeclaration.getParentDecl(); - var prevIsParam = shareParent && prevKind === 2048 /* Parameter */ && declKind == 512 /* Variable */; - - var acceptableRedeclaration = prevIsParam || (isImplicit && ((!isEnumValue && !isClassConstructorVariable && prevIsFunction) || ((isModuleValue || isEnumValue) && (prevIsModuleValue || prevIsEnum)) || (isClassConstructorVariable && prevIsModuleValue && isAmbientOrPrevIsAmbient) || (isModuleValue && prevIsClassConstructorVariable))); - - if (acceptableRedeclaration && (prevIsClassConstructorVariable || prevIsFunction) && !isAmbientOrPrevIsAmbient) { - if (prevDecl.fileName() !== variableDeclaration.fileName()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(variableDeclaration, TypeScript.DiagnosticCode.Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2, [declName, declName, prevDecl.fileName()])); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } - } - - if (!acceptableRedeclaration || prevIsParam) { - if (!prevIsParam && (isImplicit || prevIsImplicit || TypeScript.hasFlag(prevKind, 1032192 /* SomeFunction */)) || !shareParent) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(nameAST, variableDeclaration.getDisplayName(), variableSymbol.getDeclarations()[0].ast()); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } else { - this.checkThatExportsMatch(variableDeclaration, variableSymbol); - variableSymbol = null; - parentHadSymbol = false; - } - } - - if (variableSymbol && !(variableSymbol.type && variableSymbol.type.isError()) && !this.checkThatExportsMatch(variableDeclaration, variableSymbol, !(isModuleValue && prevIsModuleValue))) { - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } - } - - if ((declFlags & 118784 /* ImplicitVariable */) === 0) { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - if (!parent && parentDecl.kind === 1 /* Script */) { - this.semanticInfoChain.cacheGlobalSymbol(variableSymbol, declKind); - } - } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - this.semanticInfoChain.setSymbolForAST(nameAST, variableSymbol); - this.semanticInfoChain.setSymbolForAST(varDeclAST, variableSymbol); - } else if (!parentHadSymbol) { - if (isClassConstructorVariable) { - var classTypeSymbol = variableSymbol; - - if (parent) { - members = parent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].kind === 8 /* Class */)) { - classTypeSymbol = members[i]; - break; - } - } - } - - if (!classTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - classTypeSymbol = containerDecl.getSymbol(); - if (!classTypeSymbol) { - classTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 58728795 /* SomeType */, variableDeclaration); - } - } - - if (classTypeSymbol && (classTypeSymbol.kind !== 8 /* Class */)) { - classTypeSymbol = null; - } - - if (classTypeSymbol && classTypeSymbol.isClass()) { - variableSymbol = classTypeSymbol.getConstructorMethod(); - variableDeclaration.setSymbol(variableSymbol); - - decls = classTypeSymbol.getDeclarations(); - - if (decls.length) { - decl = decls[decls.length - 1]; - ast = this.semanticInfoChain.getASTForDecl(decl); - } - } else { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; - } - } else if (declFlags & 102400 /* SomeInitializedModule */) { - var moduleContainerTypeSymbol = null; - var moduleParent = this.getParent(variableDeclaration); - - if (moduleParent) { - members = moduleParent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].isContainer())) { - moduleContainerTypeSymbol = members[i]; - break; - } - } - } - - if (!moduleContainerTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - moduleContainerTypeSymbol = containerDecl.getSymbol(); - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 164 /* SomeContainer */, variableDeclaration); - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 64 /* Enum */, variableDeclaration); - } - } - } - - if (moduleContainerTypeSymbol && (!moduleContainerTypeSymbol.isContainer())) { - moduleContainerTypeSymbol = null; - } - - if (moduleContainerTypeSymbol) { - variableSymbol = moduleContainerTypeSymbol.getInstanceSymbol(); - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - variableSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - } - - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); - } - variableDeclaration.setSymbol(variableSymbol); - } else { - TypeScript.Debug.assert(false, "Attempted to bind invalid implicit variable symbol"); - } - } - } else { - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); - } - variableDeclaration.setSymbol(variableSymbol); - } - - var containerDecl = variableDeclaration.getContainerDecl(); - if (variableSymbol && variableSymbol.type && containerDecl && !variableSymbol.type.hasDeclaration(containerDecl)) { - variableSymbol.type.addDeclaration(containerDecl); - } - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addMember(variableSymbol); - } else { - parent.addEnclosedNonMember(variableSymbol); - } - } - }; - - PullSymbolBinder.prototype.bindCatchVariableToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var identifier = this.semanticInfoChain.getASTForDecl(variableDeclaration); - - var declName = variableDeclaration.name; - - var variableSymbol = new TypeScript.PullSymbol(declName, declKind); - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; - - this.semanticInfoChain.setSymbolForAST(identifier, variableSymbol); - }; - - PullSymbolBinder.prototype.bindEnumMemberDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - var propDeclAST = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - var propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(propDeclAST.propertyName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); - } - - if (propertySymbol) { - parentHadSymbol = true; - } - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); - } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(propDeclAST.propertyName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(propDeclAST, propertySymbol); - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); - } - }; - - PullSymbolBinder.prototype.bindPropertyDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - - var ast = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - var astName = ast.kind() === 136 /* MemberVariableDeclaration */ ? ast.variableDeclarator.propertyName : ast.kind() === 141 /* PropertySignature */ ? ast.propertyName : ast.kind() === 242 /* Parameter */ ? ast.identifier : ast.propertyName; - - var isStatic = false; - var isOptional = false; - - var propertySymbol = null; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - if (TypeScript.hasFlag(declFlags, 128 /* Optional */)) { - isOptional = true; - } - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; - } - - propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(astName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); - } - - if (propertySymbol) { - parentHadSymbol = true; - } - - var classTypeSymbol; - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); - } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(astName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(ast, propertySymbol); - - if (isOptional) { - propertySymbol.isOptional = true; - } - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); - } - }; - - PullSymbolBinder.prototype.bindParameterSymbols = function (functionDeclaration, parameterList, funcType, signatureSymbol) { - var parameters = []; - var params = TypeScript.createIntrinsicsObject(); - var funcDecl = this.semanticInfoChain.getDeclForAST(functionDeclaration); - - if (parameterList) { - for (var i = 0, n = parameterList.length; i < n; i++) { - var argDecl = parameterList.astAt(i); - var id = parameterList.identifierAt(i); - var decl = this.semanticInfoChain.getDeclForAST(argDecl); - var isProperty = TypeScript.hasFlag(decl.flags, 8388608 /* PropertyParameter */); - var parameterSymbol = new TypeScript.PullSymbol(id.valueText(), 2048 /* Parameter */); - - if ((i === (n - 1)) && parameterList.lastParameterIsRest()) { - parameterSymbol.isVarArg = true; - } - - if (params[id.valueText()]) { - this.semanticInfoChain.addDiagnosticFromAST(argDecl, TypeScript.DiagnosticCode.Duplicate_identifier_0, [id.text()]); - } else { - params[id.valueText()] = true; - } - - if (decl) { - var isParameterOptional = false; - - if (isProperty) { - decl.ensureSymbolIsBound(); - var valDecl = decl.getValueDecl(); - - if (valDecl) { - isParameterOptional = TypeScript.hasFlag(valDecl.flags, 128 /* Optional */); - - valDecl.setSymbol(parameterSymbol); - parameterSymbol.addDeclaration(valDecl); - } - } else { - isParameterOptional = TypeScript.hasFlag(decl.flags, 128 /* Optional */); - - parameterSymbol.addDeclaration(decl); - decl.setSymbol(parameterSymbol); - } - - parameterSymbol.isOptional = isParameterOptional; - } - - signatureSymbol.addParameter(parameterSymbol, parameterSymbol.isOptional); - - if (signatureSymbol.isDefinition()) { - funcType.addEnclosedNonMember(parameterSymbol); - } - } - } - }; - - PullSymbolBinder.prototype.bindFunctionDeclarationToPullSymbol = function (functionDeclaration) { - var declKind = functionDeclaration.kind; - var declFlags = functionDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(functionDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = functionDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(functionDeclaration, true); - - var parentDecl = functionDeclaration.getParentDecl(); - var parentHadSymbol = false; - - var functionSymbol = null; - var functionTypeSymbol = null; - - functionSymbol = this.getExistingSymbol(functionDeclaration, 68147712 /* SomeValue */, parent); - - if (functionSymbol) { - var acceptableRedeclaration; - - if (functionSymbol.kind === 16384 /* Function */) { - acceptableRedeclaration = isSignature || functionSymbol.allDeclsHaveFlag(2048 /* Signature */); - } else { - var isCurrentDeclAmbient = TypeScript.hasFlag(functionDeclaration.flags, 8 /* Ambient */); - acceptableRedeclaration = TypeScript.ArrayUtilities.all(functionSymbol.getDeclarations(), function (decl) { - var isInitializedModuleOrAmbientDecl = TypeScript.hasFlag(decl.flags, 32768 /* InitializedModule */) && (isCurrentDeclAmbient || TypeScript.hasFlag(decl.flags, 8 /* Ambient */)); - var isSignature = TypeScript.hasFlag(decl.flags, 2048 /* Signature */); - return isInitializedModuleOrAmbientDecl || isSignature; - }); - } - - if (!acceptableRedeclaration) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.identifier, functionDeclaration.getDisplayName(), functionSymbol.getDeclarations()[0].ast()); - functionSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(funcName); - } - } - - if (functionSymbol) { - functionTypeSymbol = functionSymbol.type; - parentHadSymbol = true; - } - - if (!functionSymbol) { - functionSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - } - - if (!functionTypeSymbol) { - functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionSymbol.type = functionTypeSymbol; - functionTypeSymbol.setFunctionSymbol(functionSymbol); - } - - functionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionDeclaration); - functionTypeSymbol.addDeclaration(functionDeclaration); - - this.semanticInfoChain.setSymbolForAST(funcDeclAST.identifier, functionSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, functionSymbol); - - if (parent && !parentHadSymbol) { - if (isExported) { - parent.addMember(functionSymbol); - } else { - parent.addEnclosedNonMember(functionSymbol); - } - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(functionDeclaration); - functionDeclaration.setSignatureSymbol(signature); - - if (TypeScript.lastParameterIsRest(funcDeclAST.callSignature.parameterList)) { - signature.hasVarArgs = true; - } - - var funcDecl = this.semanticInfoChain.getASTForDecl(functionDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), functionTypeSymbol, signature); - - var typeParameters = functionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionExpressionToPullSymbol = function (functionExpressionDeclaration) { - var declKind = functionExpressionDeclaration.kind; - var declFlags = functionExpressionDeclaration.flags; - var ast = this.semanticInfoChain.getASTForDecl(functionExpressionDeclaration); - - var parameters = ast.kind() === 219 /* SimpleArrowFunctionExpression */ ? TypeScript.ASTHelpers.parametersFromIdentifier(ast.identifier) : TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(ast)); - var funcExpAST = ast; - - var functionName = declKind === 131072 /* FunctionExpression */ ? functionExpressionDeclaration.getFunctionExpressionName() : functionExpressionDeclaration.name; - var functionSymbol = new TypeScript.PullSymbol(functionName, declKind); - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionTypeSymbol.setFunctionSymbol(functionSymbol); - - functionSymbol.type = functionTypeSymbol; - - functionExpressionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionExpressionDeclaration); - functionTypeSymbol.addDeclaration(functionExpressionDeclaration); - - var name = funcExpAST.kind() === 222 /* FunctionExpression */ ? funcExpAST.identifier : funcExpAST.kind() === 241 /* FunctionPropertyAssignment */ ? funcExpAST.propertyName : null; - if (name) { - this.semanticInfoChain.setSymbolForAST(name, functionSymbol); - } - - this.semanticInfoChain.setSymbolForAST(funcExpAST, functionSymbol); - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, true); - - if (parameters.lastParameterIsRest()) { - signature.hasVarArgs = true; - } - - var typeParameters = functionExpressionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(functionExpressionDeclaration); - functionExpressionDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcExpAST, parameters, functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionTypeDeclarationToPullSymbol = function (functionTypeDeclaration) { - var declKind = functionTypeDeclaration.kind; - var declFlags = functionTypeDeclaration.flags; - var funcTypeAST = this.semanticInfoChain.getASTForDecl(functionTypeDeclaration); - - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - - functionTypeDeclaration.setSymbol(functionTypeSymbol); - functionTypeSymbol.addDeclaration(functionTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(funcTypeAST, functionTypeSymbol); - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - if (TypeScript.lastParameterIsRest(funcTypeAST.parameterList)) { - signature.hasVarArgs = true; - } - - var typeParameters = functionTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(functionTypeDeclaration); - functionTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcTypeAST, TypeScript.ASTHelpers.parametersFromParameterList(funcTypeAST.parameterList), functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindMethodDeclarationToPullSymbol = function (methodDeclaration) { - var declKind = methodDeclaration.kind; - var declFlags = methodDeclaration.flags; - var methodAST = this.semanticInfoChain.getASTForDecl(methodDeclaration); - - var isPrivate = (declFlags & 2 /* Private */) !== 0; - var isStatic = (declFlags & 16 /* Static */) !== 0; - var isOptional = (declFlags & 128 /* Optional */) !== 0; - - var methodName = methodDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(methodDeclaration, true); - var parentHadSymbol = false; - - var methodSymbol = null; - var methodTypeSymbol = null; - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; - } - - methodSymbol = parent.findMember(methodName, false); - - if (methodSymbol && (methodSymbol.kind !== 65536 /* Method */ || (!isSignature && !methodSymbol.allDeclsHaveFlag(2048 /* Signature */)))) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(methodAST, methodDeclaration.getDisplayName(), methodSymbol.getDeclarations()[0].ast()); - methodSymbol = null; - } - - if (methodSymbol) { - methodTypeSymbol = methodSymbol.type; - parentHadSymbol = true; - } - - if (!methodSymbol) { - methodSymbol = new TypeScript.PullSymbol(methodName, 65536 /* Method */); - } - - if (!methodTypeSymbol) { - methodTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - methodSymbol.type = methodTypeSymbol; - methodTypeSymbol.setFunctionSymbol(methodSymbol); - } - - methodDeclaration.setSymbol(methodSymbol); - methodSymbol.addDeclaration(methodDeclaration); - methodTypeSymbol.addDeclaration(methodDeclaration); - - var nameAST = methodAST.kind() === 135 /* MemberFunctionDeclaration */ ? methodAST.propertyName : methodAST.propertyName; - - TypeScript.Debug.assert(nameAST); - - this.semanticInfoChain.setSymbolForAST(nameAST, methodSymbol); - this.semanticInfoChain.setSymbolForAST(methodAST, methodSymbol); - - if (isOptional) { - methodSymbol.isOptional = true; - } - - if (!parentHadSymbol) { - parent.addMember(methodSymbol); - } - - var sigKind = 1048576 /* CallSignature */; - - var signature = new TypeScript.PullSignatureSymbol(sigKind, !isSignature); - - var parameterList = TypeScript.ASTHelpers.getParameterList(methodAST); - if (TypeScript.lastParameterIsRest(parameterList)) { - signature.hasVarArgs = true; - } - - var typeParameters = methodDeclaration.getTypeParameters(); - var typeParameter; - var typeParameterName; - var typeParameterAST; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterName = typeParameters[i].name; - typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameters[i]); - - typeParameter = signature.findTypeParameter(typeParameterName); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameterName); - signature.addTypeParameter(typeParameter); - } else { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - signature.addDeclaration(methodDeclaration); - methodDeclaration.setSignatureSymbol(signature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(methodDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), methodTypeSymbol, signature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(signature, methodTypeSymbol.getOwnCallSignatures()); - methodTypeSymbol.insertCallSignatureAtIndex(signature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindStaticPrototypePropertyOfClass = function (classAST, classTypeSymbol, constructorTypeSymbol) { - var prototypeStr = "prototype"; - - var prototypeSymbol = constructorTypeSymbol.findMember(prototypeStr, false); - if (prototypeSymbol && !prototypeSymbol.getIsSynthesized()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(prototypeSymbol.getDeclarations()[0], TypeScript.DiagnosticCode.Duplicate_identifier_0, [prototypeSymbol.getDisplayName()])); - } - - if (!prototypeSymbol || !prototypeSymbol.getIsSynthesized()) { - var prototypeDecl = new TypeScript.PullSynthesizedDecl(prototypeStr, prototypeStr, 4096 /* Property */, 4 /* Public */ | 16 /* Static */, constructorTypeSymbol.getDeclarations()[0], this.semanticInfoChain); - - prototypeSymbol = new TypeScript.PullSymbol(prototypeStr, 4096 /* Property */); - prototypeSymbol.setIsSynthesized(); - prototypeSymbol.addDeclaration(prototypeDecl); - prototypeSymbol.type = classTypeSymbol; - constructorTypeSymbol.addMember(prototypeSymbol); - - if (prototypeSymbol.type && prototypeSymbol.type.isGeneric()) { - var resolver = this.semanticInfoChain.getResolver(); - prototypeSymbol.type = resolver.instantiateTypeToAny(prototypeSymbol.type, new TypeScript.PullTypeResolutionContext(resolver)); - } - prototypeSymbol.setResolved(); - } - }; - - PullSymbolBinder.prototype.bindConstructorDeclarationToPullSymbol = function (constructorDeclaration) { - var declKind = constructorDeclaration.kind; - var declFlags = constructorDeclaration.flags; - var constructorAST = this.semanticInfoChain.getASTForDecl(constructorDeclaration); - - var constructorName = constructorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(constructorDeclaration, true); - - var parentHadSymbol = false; - - var constructorSymbol = parent.getConstructorMethod(); - var constructorTypeSymbol = null; - - if (constructorSymbol && (constructorSymbol.kind !== 32768 /* ConstructorMethod */ || (!isSignature && constructorSymbol.type && constructorSymbol.type.hasOwnConstructSignatures()))) { - var hasDefinitionSignature = false; - var constructorSigs = constructorSymbol.type.getOwnDeclaredConstructSignatures(); - - for (var i = 0; i < constructorSigs.length; i++) { - if (!constructorSigs[i].anyDeclHasFlag(2048 /* Signature */)) { - hasDefinitionSignature = true; - break; - } - } - - if (hasDefinitionSignature) { - this.semanticInfoChain.addDiagnosticFromAST(constructorAST, TypeScript.DiagnosticCode.Multiple_constructor_implementations_are_not_allowed); - - constructorSymbol = null; - } - } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(constructorName, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - } - - parent.setConstructorMethod(constructorSymbol); - constructorSymbol.type = constructorTypeSymbol; - - constructorDeclaration.setSymbol(constructorSymbol); - constructorSymbol.addDeclaration(constructorDeclaration); - constructorTypeSymbol.addDeclaration(constructorDeclaration); - constructorSymbol.setIsSynthesized(false); - this.semanticInfoChain.setSymbolForAST(constructorAST, constructorSymbol); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */, !isSignature); - constructSignature.returnType = parent; - constructSignature.addTypeParametersFromReturnType(); - - constructSignature.addDeclaration(constructorDeclaration); - constructorDeclaration.setSignatureSymbol(constructSignature); - - this.bindParameterSymbols(constructorAST, TypeScript.ASTHelpers.parametersFromParameterList(constructorAST.callSignature.parameterList), constructorTypeSymbol, constructSignature); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; - } - - constructorTypeSymbol.appendConstructSignature(constructSignature); - }; - - PullSymbolBinder.prototype.bindConstructSignatureDeclarationToPullSymbol = function (constructSignatureDeclaration) { - var parent = this.getParent(constructSignatureDeclaration, true); - var constructorAST = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; - } - - var typeParameters = constructSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - constructSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - constructSignature.addDeclaration(constructSignatureDeclaration); - constructSignatureDeclaration.setSignatureSymbol(constructSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), null, constructSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration), constructSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(constructSignature, parent.getOwnDeclaredConstructSignatures()); - parent.insertConstructSignatureAtIndex(constructSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindCallSignatureDeclarationToPullSymbol = function (callSignatureDeclaration) { - var parent = this.getParent(callSignatureDeclaration, true); - var callSignatureAST = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - - var callSignature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */); - - if (TypeScript.lastParameterIsRest(callSignatureAST.parameterList)) { - callSignature.hasVarArgs = true; - } - - var typeParameters = callSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = callSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - callSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - - callSignature.addDeclaration(callSignatureDeclaration); - callSignatureDeclaration.setSignatureSymbol(callSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), null, callSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(callSignatureDeclaration), callSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(callSignature, parent.getOwnCallSignatures()); - parent.insertCallSignatureAtIndex(callSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindIndexSignatureDeclarationToPullSymbol = function (indexSignatureDeclaration) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - - indexSignature.addDeclaration(indexSignatureDeclaration); - indexSignatureDeclaration.setSignatureSymbol(indexSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter), null, indexSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration), indexSignature); - - var parent = this.getParent(indexSignatureDeclaration); - parent.addIndexSignature(indexSignature); - indexSignature.setContainer(parent); - }; - - PullSymbolBinder.prototype.bindGetAccessorDeclarationToPullSymbol = function (getAccessorDeclaration) { - var declKind = getAccessorDeclaration.kind; - var declFlags = getAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(getAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = getAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - var parent = this.getParent(getAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var getterSymbol = null; - var getterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; - } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, getAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - getterSymbol = accessorSymbol.getGetter(); - - if (getterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Getter_0_already_declared, [getAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - getterSymbol = null; - } - } - } - - if (accessorSymbol) { - parentHadSymbol = true; - } - - if (accessorSymbol && getterSymbol) { - getterTypeSymbol = getterSymbol.type; - } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); - } - - if (!getterSymbol) { - getterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - getterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - getterTypeSymbol.setFunctionSymbol(getterSymbol); - - getterSymbol.type = getterTypeSymbol; - - accessorSymbol.setGetter(getterSymbol); - } - - getAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(getAccessorDeclaration); - getterSymbol.addDeclaration(getAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, getterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(getAccessorDeclaration); - getAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), getterTypeSymbol, signature); - - getterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindSetAccessorDeclarationToPullSymbol = function (setAccessorDeclaration) { - var declKind = setAccessorDeclaration.kind; - var declFlags = setAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(setAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = setAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; - } - - var parent = this.getParent(setAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var setterSymbol = null; - var setterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; - } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, setAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - setterSymbol = accessorSymbol.getSetter(); - - if (setterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Setter_0_already_declared, [setAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - setterSymbol = null; - } - } - } - - if (accessorSymbol) { - parentHadSymbol = true; - - if (setterSymbol) { - setterTypeSymbol = setterSymbol.type; - } - } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); - } - - if (!setterSymbol) { - setterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - setterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - setterTypeSymbol.setFunctionSymbol(setterSymbol); - - setterSymbol.type = setterTypeSymbol; - - accessorSymbol.setSetter(setterSymbol); - } - - setAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(setAccessorDeclaration); - setterSymbol.addDeclaration(setAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, setterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); - } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(setAccessorDeclaration); - setAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), setterTypeSymbol, signature); - - setterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.getDeclsToBind = function (decl) { - var decls; - switch (decl.kind) { - case 64 /* Enum */: - case 32 /* DynamicModule */: - case 4 /* Container */: - case 16 /* Interface */: - decls = this.findDeclsInContext(decl, decl.kind, true); - break; - - case 512 /* Variable */: - case 16384 /* Function */: - case 65536 /* Method */: - case 32768 /* ConstructorMethod */: - decls = this.findDeclsInContext(decl, decl.kind, false); - break; - - default: - decls = [decl]; - } - TypeScript.Debug.assert(decls && decls.length > 0); - TypeScript.Debug.assert(TypeScript.ArrayUtilities.contains(decls, decl)); - return decls; - }; - - PullSymbolBinder.prototype.shouldBindDeclaration = function (decl) { - return !decl.hasBeenBound() && this.declsBeingBound.indexOf(decl.declID) < 0; - }; - - PullSymbolBinder.prototype.bindDeclToPullSymbol = function (decl) { - if (this.shouldBindDeclaration(decl)) { - this.bindAllDeclsToPullSymbol(decl); - } - }; - - PullSymbolBinder.prototype.bindAllDeclsToPullSymbol = function (askedDecl) { - var allDecls = this.getDeclsToBind(askedDecl); - for (var i = 0; i < allDecls.length; i++) { - var decl = allDecls[i]; - - if (this.shouldBindDeclaration(decl)) { - this.bindSingleDeclToPullSymbol(decl); - } - } - }; - - PullSymbolBinder.prototype.bindSingleDeclToPullSymbol = function (decl) { - this.declsBeingBound.push(decl.declID); - - switch (decl.kind) { - case 1 /* Script */: - var childDecls = decl.getChildDecls(); - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); - } - break; - - case 64 /* Enum */: - this.bindEnumDeclarationToPullSymbol(decl); - break; - - case 32 /* DynamicModule */: - case 4 /* Container */: - this.bindModuleDeclarationToPullSymbol(decl); - break; - - case 16 /* Interface */: - this.bindInterfaceDeclarationToPullSymbol(decl); - break; - - case 8 /* Class */: - this.bindClassDeclarationToPullSymbol(decl); - break; - - case 16384 /* Function */: - this.bindFunctionDeclarationToPullSymbol(decl); - break; - - case 512 /* Variable */: - this.bindVariableDeclarationToPullSymbol(decl); - break; - - case 1024 /* CatchVariable */: - this.bindCatchVariableToPullSymbol(decl); - break; - - case 67108864 /* EnumMember */: - this.bindEnumMemberDeclarationToPullSymbol(decl); - break; - - case 4096 /* Property */: - this.bindPropertyDeclarationToPullSymbol(decl); - break; - - case 65536 /* Method */: - this.bindMethodDeclarationToPullSymbol(decl); - break; - - case 32768 /* ConstructorMethod */: - this.bindConstructorDeclarationToPullSymbol(decl); - break; - - case 1048576 /* CallSignature */: - this.bindCallSignatureDeclarationToPullSymbol(decl); - break; - - case 2097152 /* ConstructSignature */: - this.bindConstructSignatureDeclarationToPullSymbol(decl); - break; - - case 4194304 /* IndexSignature */: - this.bindIndexSignatureDeclarationToPullSymbol(decl); - break; - - case 262144 /* GetAccessor */: - this.bindGetAccessorDeclarationToPullSymbol(decl); - break; - - case 524288 /* SetAccessor */: - this.bindSetAccessorDeclarationToPullSymbol(decl); - break; - - case 8388608 /* ObjectType */: - this.bindObjectTypeDeclarationToPullSymbol(decl); - break; - - case 16777216 /* FunctionType */: - this.bindFunctionTypeDeclarationToPullSymbol(decl); - break; - - case 33554432 /* ConstructorType */: - this.bindConstructorTypeDeclarationToPullSymbol(decl); - break; - - case 131072 /* FunctionExpression */: - this.bindFunctionExpressionToPullSymbol(decl); - break; - - case 128 /* TypeAlias */: - this.bindImportDeclaration(decl); - break; - - case 2048 /* Parameter */: - case 8192 /* TypeParameter */: - decl.getParentDecl().getSymbol(); - break; - - case 268435456 /* CatchBlock */: - case 134217728 /* WithBlock */: - break; - - default: - TypeScript.CompilerDiagnostics.assert(false, "Unrecognized type declaration"); - } - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(this.declsBeingBound) === decl.declID); - this.declsBeingBound.pop(); - }; - return PullSymbolBinder; - })(); - TypeScript.PullSymbolBinder = PullSymbolBinder; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullHelpers) { - function diagnosticFromDecl(decl, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - var ast = decl.ast(); - return decl.semanticInfoChain.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations); - } - PullHelpers.diagnosticFromDecl = diagnosticFromDecl; - - function resolveDeclaredSymbolToUseType(symbol) { - if (symbol.isSignature()) { - if (!symbol.returnType) { - symbol._resolveDeclaredSymbol(); - } - } else if (!symbol.type) { - symbol._resolveDeclaredSymbol(); - } - } - PullHelpers.resolveDeclaredSymbolToUseType = resolveDeclaredSymbolToUseType; - - function getSignatureForFuncDecl(functionDecl) { - var funcDecl = functionDecl.ast(); - var funcSymbol = functionDecl.getSymbol(); - - if (!funcSymbol) { - funcSymbol = functionDecl.getSignatureSymbol(); - } - - var functionSignature = null; - var typeSymbolWithAllSignatures = null; - if (funcSymbol.isSignature()) { - functionSignature = funcSymbol; - var parent = functionDecl.getParentDecl(); - typeSymbolWithAllSignatures = parent.getSymbol().type; - } else { - functionSignature = functionDecl.getSignatureSymbol(); - typeSymbolWithAllSignatures = funcSymbol.type; - } - var signatures; - - if (funcDecl.kind() === 137 /* ConstructorDeclaration */ || functionDecl.kind === 2097152 /* ConstructSignature */) { - signatures = typeSymbolWithAllSignatures.getConstructSignatures(); - } else if (functionDecl.kind === 4194304 /* IndexSignature */) { - signatures = typeSymbolWithAllSignatures.getIndexSignatures(); - } else { - signatures = typeSymbolWithAllSignatures.getCallSignatures(); - } - - return { - signature: functionSignature, - allSignatures: signatures - }; - } - PullHelpers.getSignatureForFuncDecl = getSignatureForFuncDecl; - - function getAccessorSymbol(getterOrSetter, semanticInfoChain) { - var functionDecl = semanticInfoChain.getDeclForAST(getterOrSetter); - var getterOrSetterSymbol = functionDecl.getSymbol(); - - return getterOrSetterSymbol; - } - PullHelpers.getAccessorSymbol = getAccessorSymbol; - - function getGetterAndSetterFunction(funcDecl, semanticInfoChain) { - var accessorSymbol = PullHelpers.getAccessorSymbol(funcDecl, semanticInfoChain); - var result = { - getter: null, - setter: null - }; - var getter = accessorSymbol.getGetter(); - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - result.getter = semanticInfoChain.getASTForDecl(getterDecl); - } - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - result.setter = semanticInfoChain.getASTForDecl(setterDecl); - } - - return result; - } - PullHelpers.getGetterAndSetterFunction = getGetterAndSetterFunction; - - function symbolIsEnum(source) { - return source && (source.kind & (64 /* Enum */ | 67108864 /* EnumMember */)) !== 0; - } - PullHelpers.symbolIsEnum = symbolIsEnum; - - function symbolIsModule(symbol) { - return symbol && (symbol.kind === 4 /* Container */ || isOneDeclarationOfKind(symbol, 4 /* Container */)); - } - PullHelpers.symbolIsModule = symbolIsModule; - - function isOneDeclarationOfKind(symbol, kind) { - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (decls[i].kind === kind) { - return true; - } - } - - return false; - } - - function isNameNumeric(name) { - return isFinite(+name); - } - PullHelpers.isNameNumeric = isNameNumeric; - - function typeSymbolsAreIdentical(a, b) { - if (a.isTypeReference() && !a.getIsSpecialized()) { - a = a.referencedTypeSymbol; - } - - if (b.isTypeReference() && !b.getIsSpecialized()) { - b = b.referencedTypeSymbol; - } - - return a === b; - } - PullHelpers.typeSymbolsAreIdentical = typeSymbolsAreIdentical; - - function getRootType(type) { - var rootType = type.getRootSymbol(); - - while (true) { - if (type === rootType) { - return type; - } - - type = rootType; - rootType = type.getRootSymbol(); - } - } - PullHelpers.getRootType = getRootType; - - function isSymbolLocal(symbol) { - var container = symbol.getContainer(); - if (container) { - var containerKind = container.kind; - if (containerKind & (1032192 /* SomeFunction */ | 16777216 /* FunctionType */)) { - return true; - } - - if (containerKind === 33554432 /* ConstructorType */ && !symbol.anyDeclHasFlag(16 /* Static */ | 1 /* Exported */)) { - return true; - } - } - - return false; - } - PullHelpers.isSymbolLocal = isSymbolLocal; - - function isExportedSymbolInClodule(symbol) { - var container = symbol.getContainer(); - return container && container.kind === 33554432 /* ConstructorType */ && symbolIsModule(container) && symbol.anyDeclHasFlag(1 /* Exported */); - } - PullHelpers.isExportedSymbolInClodule = isExportedSymbolInClodule; - - function isSymbolDeclaredInScopeChain(symbol, scopeSymbol) { - TypeScript.Debug.assert(symbol); - var symbolDeclarationScope = symbol.getContainer(); - - while (scopeSymbol) { - if (scopeSymbol === symbolDeclarationScope) { - return true; - } - - scopeSymbol = scopeSymbol.getContainer(); - } - - if (scopeSymbol === null && symbolDeclarationScope === null) { - return true; - } - - return false; - } - PullHelpers.isSymbolDeclaredInScopeChain = isSymbolDeclaredInScopeChain; - - - - function walkSignatureSymbol(signatureSymbol, walker) { - var continueWalk = true; - var parameters = signatureSymbol.parameters; - if (parameters) { - for (var i = 0; continueWalk && i < parameters.length; i++) { - continueWalk = walker.signatureParameterWalk(parameters[i]); - } - } - - if (continueWalk) { - continueWalk = walker.signatureReturnTypeWalk(signatureSymbol.returnType); - } - - return continueWalk; - } - - function walkPullTypeSymbolStructure(typeSymbol, walker) { - var continueWalk = true; - - var members = typeSymbol.getMembers(); - for (var i = 0; continueWalk && i < members.length; i++) { - continueWalk = walker.memberSymbolWalk(members[i]); - } - - if (continueWalk) { - var callSigantures = typeSymbol.getCallSignatures(); - for (var i = 0; continueWalk && i < callSigantures.length; i++) { - continueWalk = walker.callSignatureWalk(callSigantures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(callSigantures[i], walker); - } - } - } - - if (continueWalk) { - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; continueWalk && i < constructSignatures.length; i++) { - continueWalk = walker.constructSignatureWalk(constructSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(constructSignatures[i], walker); - } - } - } - - if (continueWalk) { - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; continueWalk && i < indexSignatures.length; i++) { - continueWalk = walker.indexSignatureWalk(indexSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(indexSignatures[i], walker); - } - } - } - } - PullHelpers.walkPullTypeSymbolStructure = walkPullTypeSymbolStructure; - - var OtherPullDeclsWalker = (function () { - function OtherPullDeclsWalker() { - this.currentlyWalkingOtherDecls = []; - } - OtherPullDeclsWalker.prototype.walkOtherPullDecls = function (currentDecl, otherDecls, callBack) { - if (otherDecls) { - var isAlreadyWalkingOtherDecl = TypeScript.ArrayUtilities.any(this.currentlyWalkingOtherDecls, function (inWalkingOtherDecl) { - return TypeScript.ArrayUtilities.contains(otherDecls, inWalkingOtherDecl); - }); - - if (!isAlreadyWalkingOtherDecl) { - this.currentlyWalkingOtherDecls.push(currentDecl); - for (var i = 0; i < otherDecls.length; i++) { - if (otherDecls[i] !== currentDecl) { - callBack(otherDecls[i]); - } - } - var currentlyWalkingOtherDeclsDecl = this.currentlyWalkingOtherDecls.pop(); - TypeScript.Debug.assert(currentlyWalkingOtherDeclsDecl == currentDecl); - } - } - }; - return OtherPullDeclsWalker; - })(); - PullHelpers.OtherPullDeclsWalker = OtherPullDeclsWalker; - })(TypeScript.PullHelpers || (TypeScript.PullHelpers = {})); - var PullHelpers = TypeScript.PullHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var WrapsTypeParameterCache = (function () { - function WrapsTypeParameterCache() { - this._wrapsTypeParameterCache = TypeScript.BitVector.getBitVector(true); - } - WrapsTypeParameterCache.prototype.getWrapsTypeParameter = function (typeParameterArgumentMap) { - var mapHasTypeParameterNotCached = false; - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - var cachedValue = this._wrapsTypeParameterCache.valueAt(typeParameterID); - if (cachedValue) { - return typeParameterID; - } - mapHasTypeParameterNotCached = mapHasTypeParameterNotCached || cachedValue === undefined; - } - } - - if (!mapHasTypeParameterNotCached) { - return 0; - } - - return undefined; - }; - - WrapsTypeParameterCache.prototype.setWrapsTypeParameter = function (typeParameterArgumentMap, wrappingTypeParameterID) { - if (wrappingTypeParameterID) { - this._wrapsTypeParameterCache.setValueAt(wrappingTypeParameterID, true); - } else { - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - this._wrapsTypeParameterCache.setValueAt(typeParameterID, false); - } - } - } - }; - return WrapsTypeParameterCache; - })(); - TypeScript.WrapsTypeParameterCache = WrapsTypeParameterCache; - - (function (PullInstantiationHelpers) { - var MutableTypeArgumentMap = (function () { - function MutableTypeArgumentMap(typeParameterArgumentMap) { - this.typeParameterArgumentMap = typeParameterArgumentMap; - this.createdDuplicateTypeArgumentMap = false; - } - MutableTypeArgumentMap.prototype.ensureTypeArgumentCopy = function () { - if (!this.createdDuplicateTypeArgumentMap) { - var passedInTypeArgumentMap = this.typeParameterArgumentMap; - this.typeParameterArgumentMap = []; - for (var typeParameterID in passedInTypeArgumentMap) { - if (passedInTypeArgumentMap.hasOwnProperty(typeParameterID)) { - this.typeParameterArgumentMap[typeParameterID] = passedInTypeArgumentMap[typeParameterID]; - } - } - this.createdDuplicateTypeArgumentMap = true; - } - }; - return MutableTypeArgumentMap; - })(); - PullInstantiationHelpers.MutableTypeArgumentMap = MutableTypeArgumentMap; - - function instantiateTypeArgument(resolver, symbol, mutableTypeParameterMap) { - if (symbol.getIsSpecialized()) { - var rootTypeArgumentMap = symbol.getTypeParameterArgumentMap(); - var newTypeArgumentMap = []; - var allowedTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - var typeArg = rootTypeArgumentMap[typeParameterID]; - if (typeArg) { - newTypeArgumentMap[typeParameterID] = resolver.instantiateType(typeArg, mutableTypeParameterMap.typeParameterArgumentMap); - } - } - - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - if (newTypeArgumentMap[typeParameterID] && mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] != newTypeArgumentMap[typeParameterID]) { - mutableTypeParameterMap.ensureTypeArgumentCopy(); - mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] = newTypeArgumentMap[typeParameterID]; - } - } - } - } - PullInstantiationHelpers.instantiateTypeArgument = instantiateTypeArgument; - - function cleanUpTypeArgumentMap(symbol, mutableTypeArgumentMap) { - var allowedToReferenceTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var typeParameterID in mutableTypeArgumentMap.typeParameterArgumentMap) { - if (mutableTypeArgumentMap.typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - if (!TypeScript.ArrayUtilities.any(allowedToReferenceTypeParameters, function (typeParameter) { - return typeParameter.pullSymbolID == typeParameterID; - })) { - mutableTypeArgumentMap.ensureTypeArgumentCopy(); - delete mutableTypeArgumentMap.typeParameterArgumentMap[typeParameterID]; - } - } - } - } - PullInstantiationHelpers.cleanUpTypeArgumentMap = cleanUpTypeArgumentMap; - - function getAllowedToReferenceTypeParametersFromDecl(decl) { - var allowedToReferenceTypeParameters = []; - - var allowedToUseDeclTypeParameters = false; - var getTypeParametersFromParentDecl = false; - - switch (decl.kind) { - case 65536 /* Method */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - allowedToUseDeclTypeParameters = true; - break; - } - - case 16777216 /* FunctionType */: - case 33554432 /* ConstructorType */: - case 2097152 /* ConstructSignature */: - case 1048576 /* CallSignature */: - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - allowedToUseDeclTypeParameters = true; - getTypeParametersFromParentDecl = true; - break; - - case 4096 /* Property */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - break; - } - - case 2048 /* Parameter */: - case 262144 /* GetAccessor */: - case 524288 /* SetAccessor */: - case 32768 /* ConstructorMethod */: - case 4194304 /* IndexSignature */: - case 8388608 /* ObjectType */: - case 256 /* ObjectLiteral */: - case 8192 /* TypeParameter */: - getTypeParametersFromParentDecl = true; - break; - - case 8 /* Class */: - case 16 /* Interface */: - allowedToUseDeclTypeParameters = true; - break; - } - - if (getTypeParametersFromParentDecl) { - allowedToReferenceTypeParameters = allowedToReferenceTypeParameters.concat(getAllowedToReferenceTypeParametersFromDecl(decl.getParentDecl())); - } - - if (allowedToUseDeclTypeParameters) { - var typeParameterDecls = decl.getTypeParameters(); - for (var i = 0; i < typeParameterDecls.length; i++) { - allowedToReferenceTypeParameters.push(typeParameterDecls[i].getSymbol()); - } - } - - return allowedToReferenceTypeParameters; - } - PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl = getAllowedToReferenceTypeParametersFromDecl; - - function createTypeParameterArgumentMap(typeParameters, typeArguments) { - return updateTypeParameterArgumentMap(typeParameters, typeArguments, {}); - } - PullInstantiationHelpers.createTypeParameterArgumentMap = createTypeParameterArgumentMap; - - function updateTypeParameterArgumentMap(typeParameters, typeArguments, typeParameterArgumentMap) { - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].getRootSymbol().pullSymbolID] = typeArguments[i]; - } - return typeParameterArgumentMap; - } - PullInstantiationHelpers.updateTypeParameterArgumentMap = updateTypeParameterArgumentMap; - - function updateMutableTypeParameterArgumentMap(typeParameters, typeArguments, mutableMap) { - for (var i = 0; i < typeParameters.length; i++) { - var typeParameterId = typeParameters[i].getRootSymbol().pullSymbolID; - if (mutableMap.typeParameterArgumentMap[typeParameterId] !== typeArguments[i]) { - mutableMap.ensureTypeArgumentCopy(); - mutableMap.typeParameterArgumentMap[typeParameterId] = typeArguments[i]; - } - } - } - PullInstantiationHelpers.updateMutableTypeParameterArgumentMap = updateMutableTypeParameterArgumentMap; - - function twoTypesAreInstantiationsOfSameNamedGenericType(type1, type2) { - var type1IsGeneric = type1.isGeneric() && type1.getTypeArguments() !== null; - var type2IsGeneric = type2.isGeneric() && type2.getTypeArguments() !== null; - - if (type1IsGeneric && type2IsGeneric) { - var type1Root = TypeScript.PullHelpers.getRootType(type1); - var type2Root = TypeScript.PullHelpers.getRootType(type2); - return type1Root === type2Root; - } - - return false; - } - PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType = twoTypesAreInstantiationsOfSameNamedGenericType; - })(TypeScript.PullInstantiationHelpers || (TypeScript.PullInstantiationHelpers = {})); - var PullInstantiationHelpers = TypeScript.PullInstantiationHelpers; -})(TypeScript || (TypeScript = {})); -if (Error) - Error.stackTraceLimit = 1000; - -var TypeScript; -(function (TypeScript) { - TypeScript.fileResolutionTime = 0; - TypeScript.fileResolutionIOTime = 0; - TypeScript.fileResolutionScanImportsTime = 0; - TypeScript.fileResolutionImportFileSearchTime = 0; - TypeScript.fileResolutionGetDefaultLibraryTime = 0; - TypeScript.sourceCharactersCompiled = 0; - TypeScript.syntaxTreeParseTime = 0; - TypeScript.syntaxDiagnosticsTime = 0; - TypeScript.astTranslationTime = 0; - TypeScript.typeCheckTime = 0; - - TypeScript.compilerResolvePathTime = 0; - TypeScript.compilerDirectoryNameTime = 0; - TypeScript.compilerDirectoryExistsTime = 0; - TypeScript.compilerFileExistsTime = 0; - - TypeScript.emitTime = 0; - TypeScript.emitWriteFileTime = 0; - - TypeScript.declarationEmitTime = 0; - TypeScript.declarationEmitIsExternallyVisibleTime = 0; - TypeScript.declarationEmitTypeSignatureTime = 0; - TypeScript.declarationEmitGetBoundDeclTypeTime = 0; - TypeScript.declarationEmitIsOverloadedCallSignatureTime = 0; - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime = 0; - TypeScript.declarationEmitGetBaseTypeTime = 0; - TypeScript.declarationEmitGetAccessorFunctionTime = 0; - TypeScript.declarationEmitGetTypeParameterSymbolTime = 0; - TypeScript.declarationEmitGetImportDeclarationSymbolTime = 0; - - TypeScript.ioHostResolvePathTime = 0; - TypeScript.ioHostDirectoryNameTime = 0; - TypeScript.ioHostCreateDirectoryStructureTime = 0; - TypeScript.ioHostWriteFileTime = 0; - - (function (EmitOutputResult) { - EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors"; - EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors"; - })(TypeScript.EmitOutputResult || (TypeScript.EmitOutputResult = {})); - var EmitOutputResult = TypeScript.EmitOutputResult; - - var EmitOutput = (function () { - function EmitOutput(emitOutputResult) { - if (typeof emitOutputResult === "undefined") { emitOutputResult = 0 /* Succeeded */; } - this.outputFiles = []; - this.emitOutputResult = emitOutputResult; - } - return EmitOutput; - })(); - TypeScript.EmitOutput = EmitOutput; - - (function (OutputFileType) { - OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; - OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; - OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; - })(TypeScript.OutputFileType || (TypeScript.OutputFileType = {})); - var OutputFileType = TypeScript.OutputFileType; - - var OutputFile = (function () { - function OutputFile(name, writeByteOrderMark, text, fileType, sourceMapEntries) { - if (typeof sourceMapEntries === "undefined") { sourceMapEntries = []; } - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.text = text; - this.fileType = fileType; - this.sourceMapEntries = sourceMapEntries; - } - return OutputFile; - })(); - TypeScript.OutputFile = OutputFile; - - var CompileResult = (function () { - function CompileResult() { - this.diagnostics = []; - this.outputFiles = []; - } - CompileResult.fromDiagnostics = function (diagnostics) { - var result = new CompileResult(); - result.diagnostics = diagnostics; - return result; - }; - - CompileResult.fromOutputFiles = function (outputFiles) { - var result = new CompileResult(); - result.outputFiles = outputFiles; - return result; - }; - return CompileResult; - })(); - TypeScript.CompileResult = CompileResult; - - var TypeScriptCompiler = (function () { - function TypeScriptCompiler(logger, _settings) { - if (typeof logger === "undefined") { logger = new TypeScript.NullLogger(); } - if (typeof _settings === "undefined") { _settings = TypeScript.ImmutableCompilationSettings.defaultSettings(); } - this.logger = logger; - this._settings = _settings; - this.semanticInfoChain = null; - this.semanticInfoChain = new TypeScript.SemanticInfoChain(this, logger); - } - TypeScriptCompiler.prototype.compilationSettings = function () { - return this._settings; - }; - - TypeScriptCompiler.prototype.setCompilationSettings = function (newSettings) { - var oldSettings = this._settings; - this._settings = newSettings; - - if (!compareDataObjects(oldSettings, newSettings)) { - this.semanticInfoChain.invalidate(oldSettings, newSettings); - } - }; - - TypeScriptCompiler.prototype.getDocument = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.semanticInfoChain.getDocument(fileName); - }; - - TypeScriptCompiler.prototype.cleanupSemanticCache = function () { - this.semanticInfoChain.invalidate(); - }; - - TypeScriptCompiler.prototype.addFile = function (fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - if (typeof referencedFiles === "undefined") { referencedFiles = []; } - fileName = TypeScript.switchToForwardSlashes(fileName); - - TypeScript.sourceCharactersCompiled += scriptSnapshot.getLength(); - - var document = TypeScript.Document.create(this, this.semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles); - - this.semanticInfoChain.addDocument(document); - }; - - TypeScriptCompiler.prototype.updateFile = function (fileName, scriptSnapshot, version, isOpen, textChangeRange) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - var updatedDocument = document.update(scriptSnapshot, version, isOpen, textChangeRange); - - this.semanticInfoChain.addDocument(updatedDocument); - }; - - TypeScriptCompiler.prototype.removeFile = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - this.semanticInfoChain.removeDocument(fileName); - }; - - TypeScriptCompiler.prototype.mapOutputFileName = function (document, emitOptions, extensionChanger) { - if (document.emitToOwnOutputFile()) { - var updatedFileName = document.fileName; - if (emitOptions.outputDirectory() !== "") { - updatedFileName = document.fileName.replace(emitOptions.commonDirectoryPath(), ""); - updatedFileName = emitOptions.outputDirectory() + updatedFileName; - } - return extensionChanger(updatedFileName, false); - } else { - return extensionChanger(emitOptions.sharedOutputFile(), true); - } - }; - - TypeScriptCompiler.prototype.writeByteOrderMarkForDocument = function (document) { - var printReason = false; - - if (document.emitToOwnOutputFile()) { - var result = document.byteOrderMark !== 0 /* None */; - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); - } - return result; - } else { - var fileNames = this.fileNames(); - - var result = false; - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = this.getDocument(fileNames[i]); - - if (document.isExternalModule()) { - continue; - } - - if (document.byteOrderMark !== 0 /* None */) { - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); - result = true; - } else { - return true; - } - } - } - - return result; - } - }; - - TypeScriptCompiler.mapToDTSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScript.getDeclareFilePath(fileName); - }; - - TypeScriptCompiler.prototype._shouldEmit = function (document) { - return !document.isDeclareFile(); - }; - - TypeScriptCompiler.prototype._shouldEmitDeclarations = function (document) { - if (!this.compilationSettings().generateDeclarationFiles()) { - return false; - } - - return this._shouldEmit(document); - }; - - TypeScriptCompiler.prototype.emitDocumentDeclarationsWorker = function (document, emitOptions, declarationEmitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmitDeclarations(document)); - - if (declarationEmitter) { - declarationEmitter.document = document; - } else { - var declareFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToDTSFileName); - declarationEmitter = new TypeScript.DeclarationEmitter(declareFileName, document, this, emitOptions, this.semanticInfoChain); - } - - declarationEmitter.emitDeclarations(sourceUnit); - return declarationEmitter; - }; - - TypeScriptCompiler.prototype._emitDocumentDeclarations = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmitDeclarations(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFile()); - } - } else { - sharedEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions, sharedEmitter); - } - } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAllDeclarations = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var sharedEmitter = null; - var fileNames = this.fileNames(); - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileNames[i]); - - sharedEmitter = this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, sharedEmitter); - } - - if (sharedEmitter) { - emitOutput.outputFiles.push(sharedEmitter.getOutputFile()); - } - - TypeScript.declarationEmitTime += new Date().getTime() - start; - - return emitOutput; - }; - - TypeScriptCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, null); - return emitOutput; - } else { - return this.emitAllDeclarations(resolvePath); - } - }; - - TypeScriptCompiler.prototype.canEmitDeclarations = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var document = this.getDocument(fileName); - return this._shouldEmitDeclarations(document); - }; - - TypeScriptCompiler.mapToFileNameExtension = function (extension, fileName, wholeFileNameReplaced) { - if (wholeFileNameReplaced) { - return fileName; - } else { - var splitFname = fileName.split("."); - splitFname.pop(); - return splitFname.join(".") + extension; - } - }; - - TypeScriptCompiler.mapToJSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScriptCompiler.mapToFileNameExtension(".js", fileName, wholeFileNameReplaced); - }; - - TypeScriptCompiler.prototype.emitDocumentWorker = function (document, emitOptions, emitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmit(document)); - - var typeScriptFileName = document.fileName; - if (!emitter) { - var javaScriptFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToJSFileName); - var outFile = new TypeScript.TextWriter(javaScriptFileName, this.writeByteOrderMarkForDocument(document), 0 /* JavaScript */); - - emitter = new TypeScript.Emitter(javaScriptFileName, outFile, emitOptions, this.semanticInfoChain); - - if (this.compilationSettings().mapSourceFiles()) { - var sourceMapFile = new TypeScript.TextWriter(javaScriptFileName + TypeScript.SourceMapper.MapFileExtension, false, 1 /* SourceMap */); - emitter.createSourceMapper(document, javaScriptFileName, outFile, sourceMapFile, emitOptions.resolvePath); - } - } else if (this.compilationSettings().mapSourceFiles()) { - emitter.setSourceMapperNewSourceFile(document); - } - - emitter.setDocument(document); - emitter.emitJavascript(sourceUnit, false); - - return emitter; - }; - - TypeScriptCompiler.prototype._emitDocument = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmit(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFiles()); - } - } else { - sharedEmitter = this.emitDocumentWorker(document, emitOptions, sharedEmitter); - } - } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAll = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var fileNames = this.fileNames(); - var sharedEmitter = null; - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileName); - - sharedEmitter = this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, sharedEmitter); - } - - if (sharedEmitter) { - emitOutput.outputFiles.push.apply(emitOutput.outputFiles, sharedEmitter.getOutputFiles()); - } - - TypeScript.emitTime += new Date().getTime() - start; - return emitOutput; - }; - - TypeScriptCompiler.prototype.emit = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, null); - return emitOutput; - } else { - return this.emitAll(resolvePath); - } - }; - - TypeScriptCompiler.prototype.compile = function (resolvePath, continueOnDiagnostics) { - if (typeof continueOnDiagnostics === "undefined") { continueOnDiagnostics = false; } - return new CompilerIterator(this, resolvePath, continueOnDiagnostics); - }; - - TypeScriptCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.getDocument(fileName).diagnostics(); - }; - - TypeScriptCompiler.prototype.getSyntaxTree = function (fileName) { - return this.getDocument(fileName).syntaxTree(); - }; - - TypeScriptCompiler.prototype.getSourceUnit = function (fileName) { - return this.getDocument(fileName).sourceUnit(); - }; - - TypeScriptCompiler.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - - var startTime = (new Date()).getTime(); - TypeScript.PullTypeResolver.typeCheck(this.compilationSettings(), this.semanticInfoChain, document); - var endTime = (new Date()).getTime(); - - TypeScript.typeCheckTime += endTime - startTime; - - var errors = this.semanticInfoChain.getDiagnostics(fileName); - - errors = TypeScript.ArrayUtilities.distinct(errors, TypeScript.Diagnostic.equals); - errors.sort(function (d1, d2) { - if (d1.fileName() < d2.fileName()) { - return -1; - } else if (d1.fileName() > d2.fileName()) { - return 1; - } - - if (d1.start() < d2.start()) { - return -1; - } else if (d1.start() > d2.start()) { - return 1; - } - - var code1 = TypeScript.diagnosticInformationMap[d1.diagnosticKey()].code; - var code2 = TypeScript.diagnosticInformationMap[d2.diagnosticKey()].code; - if (code1 < code2) { - return -1; - } else if (code1 > code2) { - return 1; - } - - return 0; - }); - - return errors; - }; - - TypeScriptCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - var emitDiagnostic = emitOptions.diagnostic(); - if (emitDiagnostic) { - return [emitDiagnostic]; - } - return TypeScript.sentinelEmptyArray; - }; - - TypeScriptCompiler.prototype.resolveAllFiles = function () { - var fileNames = this.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - this.getSemanticDiagnostics(fileNames[i]); - } - }; - - TypeScriptCompiler.prototype.getSymbolOfDeclaration = function (decl) { - if (!decl) { - return null; - } - - var resolver = this.semanticInfoChain.getResolver(); - var ast = this.semanticInfoChain.getASTForDecl(decl); - if (!ast) { - return null; - } - - var enclosingDecl = resolver.getEnclosingDecl(decl); - if (ast.kind() === 139 /* GetAccessor */ || ast.kind() === 140 /* SetAccessor */) { - return this.getSymbolOfDeclaration(enclosingDecl); - } - - return resolver.resolveAST(ast, false, new TypeScript.PullTypeResolutionContext(resolver)); - }; - - TypeScriptCompiler.prototype.extractResolutionContextFromAST = function (resolver, ast, document, propagateContextualTypes) { - var scriptName = document.fileName; - - var enclosingDecl = null; - var enclosingDeclAST = null; - var inContextuallyTypedAssignment = false; - var inWithBlock = false; - - var resolutionContext = new TypeScript.PullTypeResolutionContext(resolver); - - if (!ast) { - return null; - } - - var path = this.getASTPath(ast); - - for (var i = 0, n = path.length; i < n; i++) { - var current = path[i]; - - switch (current.kind()) { - case 222 /* FunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - if (propagateContextualTypes) { - resolver.resolveAST(current, true, resolutionContext); - } - break; - - case 136 /* MemberVariableDeclaration */: - var memberVariable = current; - inContextuallyTypedAssignment = memberVariable.variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, memberVariable, memberVariable.variableDeclarator.equalsValueClause); - break; - - case 225 /* VariableDeclarator */: - var variableDeclarator = current; - inContextuallyTypedAssignment = variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, variableDeclarator, variableDeclarator.equalsValueClause); - break; - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - if (propagateContextualTypes) { - var isNew = current.kind() === 216 /* ObjectCreationExpression */; - var callExpression = current; - var contextualType = null; - - if ((i + 2 < n) && callExpression.argumentList === path[i + 1] && callExpression.argumentList.arguments === path[i + 2]) { - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext, callResolutionResults); - } - - if (callResolutionResults.actualParametersContextTypeSymbols) { - var argExpression = path[i + 3]; - if (argExpression) { - for (var j = 0, m = callExpression.argumentList.arguments.nonSeparatorCount(); j < m; j++) { - if (callExpression.argumentList.arguments.nonSeparatorAt(j) === argExpression) { - var callContextualType = callResolutionResults.actualParametersContextTypeSymbols[j]; - if (callContextualType) { - contextualType = callContextualType; - break; - } - } - } - } - } - } else { - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext); - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 214 /* ArrayLiteralExpression */: - if (propagateContextualTypes) { - var contextualType = null; - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isArrayNamedTypeReference()) { - contextualType = currentContextualType.getElementType(); - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 215 /* ObjectLiteralExpression */: - if (propagateContextualTypes) { - var objectLiteralExpression = current; - var objectLiteralResolutionContext = new TypeScript.PullAdditionalObjectLiteralResolutionData(); - resolver.resolveObjectLiteralExpression(objectLiteralExpression, inContextuallyTypedAssignment, resolutionContext, objectLiteralResolutionContext); - - var memeberAST = (path[i + 1] && path[i + 1].kind() === 2 /* SeparatedList */) ? path[i + 2] : path[i + 1]; - if (memeberAST) { - var contextualType = null; - var memberDecls = objectLiteralExpression.propertyAssignments; - if (memberDecls && objectLiteralResolutionContext.membersContextTypeSymbols) { - for (var j = 0, m = memberDecls.nonSeparatorCount(); j < m; j++) { - if (memberDecls.nonSeparatorAt(j) === memeberAST) { - var memberContextualType = objectLiteralResolutionContext.membersContextTypeSymbols[j]; - if (memberContextualType) { - contextualType = memberContextualType; - break; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - } - - break; - - case 174 /* AssignmentExpression */: - if (propagateContextualTypes) { - var assignmentExpression = current; - var contextualType = null; - - if (path[i + 1] && path[i + 1] === assignmentExpression.right) { - var leftType = resolver.resolveAST(assignmentExpression.left, inContextuallyTypedAssignment, resolutionContext).type; - if (leftType) { - inContextuallyTypedAssignment = true; - contextualType = leftType; - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 220 /* CastExpression */: - var castExpression = current; - if (!(i + 1 < n && path[i + 1] === castExpression.type)) { - if (propagateContextualTypes) { - var contextualType = null; - var typeSymbol = resolver.resolveAST(castExpression, inContextuallyTypedAssignment, resolutionContext).type; - - if (typeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = typeSymbol; - } - - resolutionContext.pushNewContextualType(contextualType); - } - } - - break; - - case 150 /* ReturnStatement */: - if (propagateContextualTypes) { - var returnStatement = current; - var contextualType = null; - - if (enclosingDecl && (enclosingDecl.kind & 1032192 /* SomeFunction */)) { - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeSymbol = resolver.resolveTypeReference(typeAnnotation, resolutionContext); - if (returnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = returnTypeSymbol; - } - } else { - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = currentContextualTypeReturnTypeSymbol; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 122 /* ObjectType */: - if (propagateContextualTypes && TypeScript.isTypesOnlyLocation(current)) { - resolver.resolveAST(current, false, resolutionContext); - } - - break; - - case 163 /* WithStatement */: - inWithBlock = true; - break; - - case 146 /* Block */: - inContextuallyTypedAssignment = false; - break; - } - - var decl = this.semanticInfoChain.getDeclForAST(current); - if (decl) { - enclosingDecl = decl; - enclosingDeclAST = current; - } - } - - if (ast && ast.parent && ast.kind() === 11 /* IdentifierName */) { - if (ast.parent.kind() === 212 /* MemberAccessExpression */) { - if (ast.parent.name === ast) { - ast = ast.parent; - } - } else if (ast.parent.kind() === 121 /* QualifiedName */) { - if (ast.parent.right === ast) { - ast = ast.parent; - } - } - } - - return { - ast: ast, - enclosingDecl: enclosingDecl, - resolutionContext: resolutionContext, - inContextuallyTypedAssignment: inContextuallyTypedAssignment, - inWithBlock: inWithBlock - }; - }; - - TypeScriptCompiler.prototype.extractResolutionContextForVariable = function (inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, assigningAST, init) { - if (inContextuallyTypedAssignment) { - if (propagateContextualTypes) { - resolver.resolveAST(assigningAST, false, resolutionContext); - var varSymbol = this.semanticInfoChain.getSymbolForAST(assigningAST); - - var contextualType = null; - if (varSymbol && inContextuallyTypedAssignment) { - contextualType = varSymbol.type; - } - - resolutionContext.pushNewContextualType(contextualType); - - if (init) { - resolver.resolveAST(init, inContextuallyTypedAssignment, resolutionContext); - } - } - } - }; - - TypeScriptCompiler.prototype.getASTPath = function (ast) { - var result = []; - - while (ast) { - result.unshift(ast); - ast = ast.parent; - } - - return result; - }; - - TypeScriptCompiler.prototype.pullGetSymbolInformationFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - ast = context.ast; - var symbol = resolver.resolveAST(ast, context.inContextuallyTypedAssignment, context.resolutionContext); - - if (!symbol) { - TypeScript.Debug.assert(ast.kind() === 120 /* SourceUnit */, "No symbol was found for ast and ast was not source unit. Ast Kind: " + TypeScript.SyntaxKind[ast.kind()]); - return null; - } - - if (symbol.isTypeReference()) { - symbol = symbol.getReferencedTypeSymbol(); - } - - var aliasSymbol = this.semanticInfoChain.getAliasSymbolForAST(ast); - - return { - symbol: symbol, - aliasSymbol: aliasSymbol, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetCallInformationFromAST = function (ast, document) { - if (ast.kind() !== 213 /* InvocationExpression */ && ast.kind() !== 216 /* ObjectCreationExpression */) { - return null; - } - - var isNew = ast.kind() === 216 /* ObjectCreationExpression */; - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - - if (isNew) { - resolver.resolveObjectCreationExpression(ast, context.resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(ast, context.resolutionContext, callResolutionResults); - } - - return { - targetSymbol: callResolutionResults.targetSymbol, - resolvedSignatures: callResolutionResults.resolvedSignatures, - candidateSignature: callResolutionResults.candidateSignature, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl), - isConstructorCall: isNew - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleMemberSymbolsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var symbols = resolver.getVisibleMembersFromExpression(ast, context.enclosingDecl, context.resolutionContext); - if (!symbols) { - return null; - } - - return { - symbols: symbols, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleDeclsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, false); - if (!context || context.inWithBlock) { - return null; - } - - return resolver.getVisibleDecls(context.enclosingDecl); - }; - - TypeScriptCompiler.prototype.pullGetContextualMembersFromAST = function (ast, document) { - if (ast.kind() !== 215 /* ObjectLiteralExpression */) { - return null; - } - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var members = resolver.getVisibleContextSymbols(context.enclosingDecl, context.resolutionContext); - - return { - symbols: members, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; - } - - var astForDecl = decl.ast(); - if (!astForDecl) { - return null; - } - - var astForDeclContext = this.extractResolutionContextFromAST(resolver, astForDecl, this.getDocument(astForDecl.fileName()), true); - if (!astForDeclContext) { - return null; - } - - var symbol = decl.getSymbol(); - resolver.resolveDeclaredSymbol(symbol, context.resolutionContext); - symbol.setUnresolved(); - - return { - symbol: symbol, - aliasSymbol: null, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.topLevelDeclaration = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.prototype.getDeclForAST = function (ast) { - return this.semanticInfoChain.getDeclForAST(ast); - }; - - TypeScriptCompiler.prototype.fileNames = function () { - return this.semanticInfoChain.fileNames(); - }; - - TypeScriptCompiler.prototype.topLevelDecl = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.getLocationText = function (location, resolvePath) { - return resolvePath(location.fileName()) + "(" + (location.line() + 1) + "," + (location.character() + 1) + ")"; - }; - - TypeScriptCompiler.getFullDiagnosticText = function (diagnostic, resolvePath) { - var result = ""; - if (diagnostic.fileName()) { - result += this.getLocationText(diagnostic, resolvePath) + ": "; - } - - result += diagnostic.message(); - - var additionalLocations = diagnostic.additionalLocations(); - if (additionalLocations.length > 0) { - result += " " + TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Additional_locations, null) + TypeScript.Environment.newLine; - - for (var i = 0, n = additionalLocations.length; i < n; i++) { - result += "\t" + this.getLocationText(additionalLocations[i], resolvePath) + TypeScript.Environment.newLine; - } - } else { - result += TypeScript.Environment.newLine; - } - - return result; - }; - return TypeScriptCompiler; - })(); - TypeScript.TypeScriptCompiler = TypeScriptCompiler; - - var CompilerPhase; - (function (CompilerPhase) { - CompilerPhase[CompilerPhase["Syntax"] = 0] = "Syntax"; - CompilerPhase[CompilerPhase["Semantics"] = 1] = "Semantics"; - CompilerPhase[CompilerPhase["EmitOptionsValidation"] = 2] = "EmitOptionsValidation"; - CompilerPhase[CompilerPhase["Emit"] = 3] = "Emit"; - CompilerPhase[CompilerPhase["DeclarationEmit"] = 4] = "DeclarationEmit"; - })(CompilerPhase || (CompilerPhase = {})); - - var CompilerIterator = (function () { - function CompilerIterator(compiler, resolvePath, continueOnDiagnostics, startingPhase) { - if (typeof startingPhase === "undefined") { startingPhase = 0 /* Syntax */; } - this.compiler = compiler; - this.resolvePath = resolvePath; - this.continueOnDiagnostics = continueOnDiagnostics; - this.index = -1; - this.fileNames = null; - this._current = null; - this._emitOptions = null; - this._sharedEmitter = null; - this._sharedDeclarationEmitter = null; - this.hadSyntacticDiagnostics = false; - this.hadSemanticDiagnostics = false; - this.hadEmitDiagnostics = false; - this.fileNames = compiler.fileNames(); - this.compilerPhase = startingPhase; - } - CompilerIterator.prototype.current = function () { - return this._current; - }; - - CompilerIterator.prototype.moveNext = function () { - this._current = null; - - while (this.moveNextInternal()) { - if (this._current) { - return true; - } - } - - return false; - }; - - CompilerIterator.prototype.moveNextInternal = function () { - this.index++; - - while (this.shouldMoveToNextPhase()) { - this.index = 0; - this.compilerPhase++; - } - - if (this.compilerPhase > 4 /* DeclarationEmit */) { - return false; - } - - switch (this.compilerPhase) { - case 0 /* Syntax */: - return this.moveNextSyntaxPhase(); - case 1 /* Semantics */: - return this.moveNextSemanticsPhase(); - case 2 /* EmitOptionsValidation */: - return this.moveNextEmitOptionsValidationPhase(); - case 3 /* Emit */: - return this.moveNextEmitPhase(); - case 4 /* DeclarationEmit */: - return this.moveNextDeclarationEmitPhase(); - } - }; - - CompilerIterator.prototype.shouldMoveToNextPhase = function () { - switch (this.compilerPhase) { - case 2 /* EmitOptionsValidation */: - return this.index === 1; - - case 0 /* Syntax */: - case 1 /* Semantics */: - return this.index === this.fileNames.length; - - case 3 /* Emit */: - case 4 /* DeclarationEmit */: - return this.index === (this.fileNames.length + 1); - } - - return false; - }; - - CompilerIterator.prototype.moveNextSyntaxPhase = function () { - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - - var diagnostics = this.compiler.getSyntacticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSyntacticDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics(diagnostics); - } - - return true; - }; - - CompilerIterator.prototype.moveNextSemanticsPhase = function () { - if (this.hadSyntacticDiagnostics) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - var diagnostics = this.compiler.getSemanticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSemanticDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics(diagnostics); - } - - return true; - }; - - CompilerIterator.prototype.moveNextEmitOptionsValidationPhase = function () { - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - - if (!this._emitOptions) { - this._emitOptions = new TypeScript.EmitOptions(this.compiler, this.resolvePath); - } - - if (this._emitOptions.diagnostic()) { - if (!this.continueOnDiagnostics) { - this.hadEmitDiagnostics = true; - } - - this._current = CompileResult.fromDiagnostics([this._emitOptions.diagnostic()]); - } - - return true; - }; - - CompilerIterator.prototype.moveNextEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(this._emitOptions); - - if (this.hadEmitDiagnostics) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedEmitter = this.compiler._emitDocument(document, this._emitOptions, function (outputFiles) { - _this._current = CompileResult.fromOutputFiles(outputFiles); - }, this._sharedEmitter); - return true; - } - - if (this.index === this.fileNames.length && this._sharedEmitter) { - this._current = CompileResult.fromOutputFiles(this._sharedEmitter.getOutputFiles()); - } - - return true; - }; - - CompilerIterator.prototype.moveNextDeclarationEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(!this.hadEmitDiagnostics); - if (this.hadSemanticDiagnostics) { - return false; - } - - if (!this.compiler.compilationSettings().generateDeclarationFiles()) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedDeclarationEmitter = this.compiler._emitDocumentDeclarations(document, this._emitOptions, function (file) { - _this._current = CompileResult.fromOutputFiles([file]); - }, this._sharedDeclarationEmitter); - return true; - } - - if (this.index === this.fileNames.length && this._sharedDeclarationEmitter) { - this._current = CompileResult.fromOutputFiles([this._sharedDeclarationEmitter.getOutputFile()]); - } - - return true; - }; - return CompilerIterator; - })(); - - function compareDataObjects(dst, src) { - for (var e in dst) { - if (typeof dst[e] === "object") { - if (!compareDataObjects(dst[e], src[e])) - return false; - } else if (typeof dst[e] !== "function") { - if (dst[e] !== src[e]) - return false; - } - } - return true; - } - TypeScript.compareDataObjects = compareDataObjects; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (GenerativeTypeClassification) { - GenerativeTypeClassification[GenerativeTypeClassification["Unknown"] = 0] = "Unknown"; - GenerativeTypeClassification[GenerativeTypeClassification["Open"] = 1] = "Open"; - GenerativeTypeClassification[GenerativeTypeClassification["Closed"] = 2] = "Closed"; - GenerativeTypeClassification[GenerativeTypeClassification["InfinitelyExpanding"] = 3] = "InfinitelyExpanding"; - })(TypeScript.GenerativeTypeClassification || (TypeScript.GenerativeTypeClassification = {})); - var GenerativeTypeClassification = TypeScript.GenerativeTypeClassification; - - var PullTypeReferenceSymbol = (function (_super) { - __extends(PullTypeReferenceSymbol, _super); - function PullTypeReferenceSymbol(referencedTypeSymbol) { - _super.call(this, referencedTypeSymbol.name, referencedTypeSymbol.kind); - this.referencedTypeSymbol = referencedTypeSymbol; - this.isResolved = true; - - TypeScript.Debug.assert(referencedTypeSymbol !== null, "Type root symbol may not be null"); - - this.setRootSymbol(referencedTypeSymbol); - - this.typeReference = this; - } - PullTypeReferenceSymbol.createTypeReference = function (type) { - if (type.isTypeReference()) { - return type; - } - - var typeReference = type.typeReference; - - if (!typeReference) { - typeReference = new PullTypeReferenceSymbol(type); - type.typeReference = typeReference; - } - - return typeReference; - }; - - PullTypeReferenceSymbol.prototype.isTypeReference = function () { - return true; - }; - - PullTypeReferenceSymbol.prototype.setResolved = function () { - }; - - PullTypeReferenceSymbol.prototype.setUnresolved = function () { - }; - PullTypeReferenceSymbol.prototype.invalidate = function () { - }; - - PullTypeReferenceSymbol.prototype.ensureReferencedTypeIsResolved = function () { - this._getResolver().resolveDeclaredSymbol(this.referencedTypeSymbol); - }; - - PullTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol; - }; - - PullTypeReferenceSymbol.prototype._getResolver = function () { - return this.referencedTypeSymbol._getResolver(); - }; - - PullTypeReferenceSymbol.prototype.hasMembers = function () { - return this.referencedTypeSymbol.hasMembers(); - }; - - PullTypeReferenceSymbol.prototype.setAssociatedContainerType = function (type) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setAssociatedContainerType"); - }; - - PullTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - return this.referencedTypeSymbol.getAssociatedContainerType(); - }; - - PullTypeReferenceSymbol.prototype.getFunctionSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getFunctionSymbol(); - }; - PullTypeReferenceSymbol.prototype.setFunctionSymbol = function (symbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setFunctionSymbol"); - }; - - PullTypeReferenceSymbol.prototype.addContainedNonMember = function (nonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addContainedNonMember"); - }; - PullTypeReferenceSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.findContainedNonMemberContainer(containerName, kind); - }; - - PullTypeReferenceSymbol.prototype.addMember = function (memberSymbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberType"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberContainer"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberType"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberContainer"); - }; - PullTypeReferenceSymbol.prototype.addTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addTypeParameter"); - }; - PullTypeReferenceSymbol.prototype.addConstructorTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addConstructorTypeParameter"); - }; - - PullTypeReferenceSymbol.prototype.findContainedNonMember = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMember(name); - }; - - PullTypeReferenceSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMemberType(typeName, kind); - }; - - PullTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getMembers(); - }; - - PullTypeReferenceSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ":setHasDefaultConstructor"); - }; - PullTypeReferenceSymbol.prototype.getHasDefaultConstructor = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getHasDefaultConstructor(); - }; - PullTypeReferenceSymbol.prototype.getConstructorMethod = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructorMethod(); - }; - PullTypeReferenceSymbol.prototype.setConstructorMethod = function (constructorMethod) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setConstructorMethod"); - }; - PullTypeReferenceSymbol.prototype.getTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeParameters(); - }; - - PullTypeReferenceSymbol.prototype.isGeneric = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isGeneric(); - }; - - PullTypeReferenceSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.addSpecialization(specializedVersionOfThisType, substitutingTypes); - }; - PullTypeReferenceSymbol.prototype.getSpecialization = function (substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getSpecialization(substitutingTypes); - }; - PullTypeReferenceSymbol.prototype.getKnownSpecializations = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getKnownSpecializations(); - }; - PullTypeReferenceSymbol.prototype.getTypeArguments = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArguments(); - }; - PullTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArgumentsOrTypeParameters(); - }; - - PullTypeReferenceSymbol.prototype.appendCallSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendCallSignature"); - }; - PullTypeReferenceSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertCallSignatureAtIndex"); - }; - PullTypeReferenceSymbol.prototype.appendConstructSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendConstructSignature"); - }; - PullTypeReferenceSymbol.prototype.insertConstructSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertConstructSignatureAtIndex"); - }; - PullTypeReferenceSymbol.prototype.addIndexSignature = function (indexSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addIndexSignature"); - }; - - PullTypeReferenceSymbol.prototype.hasOwnCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnCallSignatures(); - }; - PullTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getCallSignatures(); - }; - PullTypeReferenceSymbol.prototype.hasOwnConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnConstructSignatures(); - }; - PullTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructSignatures(); - }; - PullTypeReferenceSymbol.prototype.hasOwnIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnIndexSignatures(); - }; - PullTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getIndexSignatures(); - }; - - PullTypeReferenceSymbol.prototype.addImplementedType = function (implementedType) { - this.referencedTypeSymbol.addImplementedType(implementedType); - }; - PullTypeReferenceSymbol.prototype.getImplementedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getImplementedTypes(); - }; - PullTypeReferenceSymbol.prototype.addExtendedType = function (extendedType) { - this.referencedTypeSymbol.addExtendedType(extendedType); - }; - PullTypeReferenceSymbol.prototype.getExtendedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getExtendedTypes(); - }; - PullTypeReferenceSymbol.prototype.addTypeThatExtendsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExtendsThisType(type); - }; - PullTypeReferenceSymbol.prototype.getTypesThatExtendThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExtendThisType(); - }; - PullTypeReferenceSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExplicitlyImplementsThisType(type); - }; - PullTypeReferenceSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExplicitlyImplementThisType(); - }; - - PullTypeReferenceSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isValidBaseKind(baseType, isExtendedType); - }; - - PullTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findMember(name, lookInParent); - }; - PullTypeReferenceSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedType(name, kind); - }; - PullTypeReferenceSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedContainer(name, kind); - }; - PullTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - }; - - PullTypeReferenceSymbol.prototype.findTypeParameter = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findTypeParameter(name); - }; - - PullTypeReferenceSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - return this.referencedTypeSymbol.hasOnlyOverloadCallSignatures(); - }; - return PullTypeReferenceSymbol; - })(TypeScript.PullTypeSymbol); - TypeScript.PullTypeReferenceSymbol = PullTypeReferenceSymbol; - - TypeScript.nSpecializationsCreated = 0; - TypeScript.nSpecializedSignaturesCreated = 0; - TypeScript.nSpecializedTypeParameterCreated = 0; - - var PullInstantiatedTypeReferenceSymbol = (function (_super) { - __extends(PullInstantiatedTypeReferenceSymbol, _super); - function PullInstantiatedTypeReferenceSymbol(referencedTypeSymbol, _typeParameterArgumentMap, isInstanceReferenceType) { - _super.call(this, referencedTypeSymbol); - this.referencedTypeSymbol = referencedTypeSymbol; - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.isInstanceReferenceType = isInstanceReferenceType; - this._instantiatedMembers = null; - this._allInstantiatedMemberNameCache = null; - this._instantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - this._instantiatedCallSignatures = null; - this._instantiatedConstructSignatures = null; - this._instantiatedIndexSignatures = null; - this._typeArgumentReferences = undefined; - this._instantiatedConstructorMethod = null; - this._instantiatedAssociatedContainerType = null; - this._isArray = undefined; - this._generativeTypeClassification = []; - - TypeScript.nSpecializationsCreated++; - } - PullInstantiatedTypeReferenceSymbol.prototype.getIsSpecialized = function () { - return !this.isInstanceReferenceType; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - if (!this.isNamedTypeSymbol()) { - return 0 /* Unknown */; - } - - var generativeTypeClassification = this._generativeTypeClassification[enclosingType.pullSymbolID] || 0 /* Unknown */; - if (generativeTypeClassification === 0 /* Unknown */) { - var typeParameters = enclosingType.getTypeParameters(); - var enclosingTypeParameterMap = []; - for (var i = 0; i < typeParameters.length; i++) { - enclosingTypeParameterMap[typeParameters[i].pullSymbolID] = typeParameters[i]; - } - - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (typeArguments[i].wrapsSomeTypeParameter(enclosingTypeParameterMap, true)) { - generativeTypeClassification = 1 /* Open */; - break; - } - } - - if (generativeTypeClassification === 1 /* Open */) { - if (this.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType)) { - generativeTypeClassification = 3 /* InfinitelyExpanding */; - } - } else { - generativeTypeClassification = 2 /* Closed */; - } - - this._generativeTypeClassification[enclosingType.pullSymbolID] = generativeTypeClassification; - } - - return generativeTypeClassification; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArray === undefined) { - this._isArray = this.getRootSymbol().isArrayNamedTypeReference() || (this.getRootSymbol() === this._getResolver().getArrayNamedType()); - } - return this._isArray; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getElementType = function () { - if (!this.isArrayNamedTypeReference()) { - return null; - } - - var typeArguments = this.getTypeArguments(); - return typeArguments ? typeArguments[0] : null; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.getIsSpecialized()) { - return this; - } - - return this.referencedTypeSymbol; - }; - - PullInstantiatedTypeReferenceSymbol.create = function (resolver, type, typeParameterArgumentMap) { - TypeScript.Debug.assert(resolver); - - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(resolver, type, mutableTypeParameterMap); - - var rootType = type.getRootSymbol(); - var instantiation = rootType.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiation) { - return instantiation; - } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(type, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - var isInstanceReferenceType = (type.kind & 8216 /* SomeInstantiatableType */) != 0; - var resolvedTypeParameterArgumentMap = typeParameterArgumentMap; - if (isInstanceReferenceType) { - var typeParameters = rootType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - if (!TypeScript.PullHelpers.typeSymbolsAreIdentical(typeParameters[i], typeParameterArgumentMap[typeParameters[i].pullSymbolID])) { - isInstanceReferenceType = false; - break; - } - } - - if (isInstanceReferenceType) { - typeParameterArgumentMap = []; - } - } - - instantiation = new PullInstantiatedTypeReferenceSymbol(rootType, typeParameterArgumentMap, isInstanceReferenceType); - - rootType.addSpecialization(instantiation, resolvedTypeParameterArgumentMap); - - return instantiation; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.isGeneric = function () { - return this.getRootSymbol().isGeneric(); - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArguments = function () { - if (this.isInstanceReferenceType) { - return this.getTypeParameters(); - } - - if (this._typeArgumentReferences === undefined) { - var typeParameters = this.referencedTypeSymbol.getTypeParameters(); - - if (typeParameters.length) { - var typeArgument = null; - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArgument = this._typeParameterArgumentMap[typeParameters[i].pullSymbolID]; - - if (!typeArgument) { - TypeScript.Debug.fail("type argument count mismatch"); - } - - if (typeArgument) { - typeArguments[typeArguments.length] = typeArgument; - } - } - - this._typeArgumentReferences = typeArguments; - } else { - this._typeArgumentReferences = null; - } - } - - return this._typeArgumentReferences; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeArguments(); - }; - - PullInstantiatedTypeReferenceSymbol.prototype.populateInstantiatedMemberFromReferencedMember = function (referencedMember) { - var instantiatedMember; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(referencedMember); - - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - instantiatedMember = referencedMember; - } else { - instantiatedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - instantiatedMember.setRootSymbol(referencedMember); - instantiatedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - instantiatedMember.isOptional = referencedMember.isOptional; - } - this._instantiatedMemberNameCache[instantiatedMember.name] = instantiatedMember; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getMembers(); - } - - if (!this._instantiatedMembers) { - var referencedMembers = this.referencedTypeSymbol.getMembers(); - var referencedMember = null; - var instantiatedMember = null; - - this._instantiatedMembers = []; - - for (var i = 0; i < referencedMembers.length; i++) { - referencedMember = referencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (!this._instantiatedMemberNameCache[referencedMember.name]) { - this.populateInstantiatedMemberFromReferencedMember(referencedMember); - } - - this._instantiatedMembers[this._instantiatedMembers.length] = this._instantiatedMemberNameCache[referencedMember.name]; - } - } - - return this._instantiatedMembers; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.findMember(name, lookInParent); - } - - var memberSymbol = this._instantiatedMemberNameCache[name]; - - if (!memberSymbol) { - var referencedMemberSymbol = this.referencedTypeSymbol.findMember(name, lookInParent); - - if (referencedMemberSymbol) { - this.populateInstantiatedMemberFromReferencedMember(referencedMemberSymbol); - memberSymbol = this._instantiatedMemberNameCache[name]; - } else { - memberSymbol = null; - } - } - - return memberSymbol; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - } - - var requestedMembers = []; - var allReferencedMembers = this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - - if (!this._allInstantiatedMemberNameCache) { - this._allInstantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - - var members = this.getMembers(); - - for (var i = 0; i < members.length; i++) { - this._allInstantiatedMemberNameCache[members[i].name] = members[i]; - } - } - - var referencedMember = null; - var requestedMember = null; - - for (var i = 0; i < allReferencedMembers.length; i++) { - referencedMember = allReferencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (this._allInstantiatedMemberNameCache[referencedMember.name]) { - requestedMembers[requestedMembers.length] = this._allInstantiatedMemberNameCache[referencedMember.name]; - } else { - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._allInstantiatedMemberNameCache[referencedMember.name] = referencedMember; - requestedMembers[requestedMembers.length] = referencedMember; - } else { - requestedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - requestedMember.setRootSymbol(referencedMember); - - requestedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - requestedMember.isOptional = referencedMember.isOptional; - - this._allInstantiatedMemberNameCache[requestedMember.name] = requestedMember; - requestedMembers[requestedMembers.length] = requestedMember; - } - } - } - - return requestedMembers; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructorMethod = function () { - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructorMethod(); - } - - if (!this._instantiatedConstructorMethod) { - var referencedConstructorMethod = this.referencedTypeSymbol.getConstructorMethod(); - this._instantiatedConstructorMethod = new TypeScript.PullSymbol(referencedConstructorMethod.name, referencedConstructorMethod.kind); - this._instantiatedConstructorMethod.setRootSymbol(referencedConstructorMethod); - this._instantiatedConstructorMethod.setResolved(); - - this._instantiatedConstructorMethod.type = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedConstructorMethod.type, this._typeParameterArgumentMap); - } - - return this._instantiatedConstructorMethod; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - if (!this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAssociatedContainerType(); - } - - if (!this._instantiatedAssociatedContainerType) { - var referencedAssociatedContainerType = this.referencedTypeSymbol.getAssociatedContainerType(); - - if (referencedAssociatedContainerType) { - this._instantiatedAssociatedContainerType = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedAssociatedContainerType, this._typeParameterArgumentMap); - } - } - - return this._instantiatedAssociatedContainerType; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getCallSignatures(); - } - - if (this._instantiatedCallSignatures) { - return this._instantiatedCallSignatures; - } - - var referencedCallSignatures = this.referencedTypeSymbol.getCallSignatures(); - this._instantiatedCallSignatures = []; - - for (var i = 0; i < referencedCallSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedCallSignatures[i]); - - if (!referencedCallSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = referencedCallSignatures[i]; - } else { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = this._getResolver().instantiateSignature(referencedCallSignatures[i], this._typeParameterArgumentMap); - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedCallSignatures; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructSignatures(); - } - - if (this._instantiatedConstructSignatures) { - return this._instantiatedConstructSignatures; - } - - var referencedConstructSignatures = this.referencedTypeSymbol.getConstructSignatures(); - this._instantiatedConstructSignatures = []; - - for (var i = 0; i < referencedConstructSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedConstructSignatures[i]); - - if (!referencedConstructSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = referencedConstructSignatures[i]; - } else { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = this._getResolver().instantiateSignature(referencedConstructSignatures[i], this._typeParameterArgumentMap); - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedConstructSignatures; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getIndexSignatures(); - } - - if (this._instantiatedIndexSignatures) { - return this._instantiatedIndexSignatures; - } - - var referencedIndexSignatures = this.referencedTypeSymbol.getIndexSignatures(); - this._instantiatedIndexSignatures = []; - - for (var i = 0; i < referencedIndexSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedIndexSignatures[i]); - - if (!referencedIndexSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = referencedIndexSignatures[i]; - } else { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = this._getResolver().instantiateSignature(referencedIndexSignatures[i], this._typeParameterArgumentMap); - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedIndexSignatures; - }; - return PullInstantiatedTypeReferenceSymbol; - })(PullTypeReferenceSymbol); - TypeScript.PullInstantiatedTypeReferenceSymbol = PullInstantiatedTypeReferenceSymbol; - - var PullInstantiatedSignatureSymbol = (function (_super) { - __extends(PullInstantiatedSignatureSymbol, _super); - function PullInstantiatedSignatureSymbol(rootSignature, _typeParameterArgumentMap) { - _super.call(this, rootSignature.kind, rootSignature.isDefinition()); - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.setRootSymbol(rootSignature); - TypeScript.nSpecializedSignaturesCreated++; - - rootSignature.addSpecialization(this, _typeParameterArgumentMap); - } - PullInstantiatedSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; - }; - - PullInstantiatedSignatureSymbol.prototype.getIsSpecialized = function () { - return true; - }; - - PullInstantiatedSignatureSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - - PullInstantiatedSignatureSymbol.prototype.getTypeParameters = function () { - var _this = this; - if (!this._typeParameters) { - var rootSymbol = this.getRootSymbol(); - var typeParameters = rootSymbol.getTypeParameters(); - var hasInstantiatedTypeParametersOfThisSignature = TypeScript.ArrayUtilities.all(typeParameters, function (typeParameter) { - return _this._typeParameterArgumentMap[typeParameter.pullSymbolID] !== undefined; - }); - - if (!hasInstantiatedTypeParametersOfThisSignature && typeParameters.length) { - this._typeParameters = []; - for (var i = 0; i < typeParameters.length; i++) { - this._typeParameters[this._typeParameters.length] = this._getResolver().instantiateTypeParameter(typeParameters[i], this._typeParameterArgumentMap); - } - } else { - this._typeParameters = TypeScript.sentinelEmptyArray; - } - } - - return this._typeParameters; - }; - - PullInstantiatedSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - var rootSymbol = this.getRootSymbol(); - return rootSymbol.getAllowedToReferenceTypeParameters(); - }; - return PullInstantiatedSignatureSymbol; - })(TypeScript.PullSignatureSymbol); - TypeScript.PullInstantiatedSignatureSymbol = PullInstantiatedSignatureSymbol; - - var PullInstantiatedTypeParameterSymbol = (function (_super) { - __extends(PullInstantiatedTypeParameterSymbol, _super); - function PullInstantiatedTypeParameterSymbol(rootTypeParameter, constraintType) { - _super.call(this, rootTypeParameter.name); - TypeScript.nSpecializedTypeParameterCreated++; - - this.setRootSymbol(rootTypeParameter); - this.setConstraint(constraintType); - - rootTypeParameter.addSpecialization(this, [constraintType]); - } - PullInstantiatedTypeParameterSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - return PullInstantiatedTypeParameterSymbol; - })(TypeScript.PullTypeParameterSymbol); - TypeScript.PullInstantiatedTypeParameterSymbol = PullInstantiatedTypeParameterSymbol; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTreeToAstVisitor = (function () { - function SyntaxTreeToAstVisitor(fileName, lineMap, compilationSettings) { - this.fileName = fileName; - this.lineMap = lineMap; - this.compilationSettings = compilationSettings; - this.position = 0; - this.previousTokenTrailingComments = null; - } - SyntaxTreeToAstVisitor.visit = function (syntaxTree, fileName, compilationSettings, incrementalAST) { - var visitor = incrementalAST ? new SyntaxTreeToIncrementalAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings) : new SyntaxTreeToAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings); - return syntaxTree.sourceUnit().accept(visitor); - }; - - SyntaxTreeToAstVisitor.prototype.movePast = function (element) { - if (element !== null) { - this.position += element.fullWidth(); - } - }; - - SyntaxTreeToAstVisitor.prototype.moveTo = function (element1, element2) { - if (element2 !== null) { - this.position += TypeScript.Syntax.childOffset(element1, element2); - } - }; - - SyntaxTreeToAstVisitor.prototype.setCommentsAndSpan = function (ast, fullStart, node) { - var firstToken = node.firstToken(); - var lastToken = node.lastToken(); - - this.setSpan(ast, fullStart, node, firstToken, lastToken); - ast.setPreComments(this.convertTokenLeadingComments(firstToken, fullStart)); - ast.setPostComments(this.convertNodeTrailingComments(node, lastToken, fullStart)); - }; - - SyntaxTreeToAstVisitor.prototype.createTokenSpan = function (fullStart, element) { - if (element === null) { - return null; - } - - if (element.fullWidth() === 0) { - return new TypeScript.ASTSpan(-1, -1); - } - - var leadingTriviaWidth = element.leadingTriviaWidth(); - var trailingTriviaWidth = element.trailingTriviaWidth(); - - var start = fullStart + leadingTriviaWidth; - var end = fullStart + element.fullWidth() - trailingTriviaWidth; - - return new TypeScript.ASTSpan(start, end); - }; - - SyntaxTreeToAstVisitor.prototype.setSpan = function (span, fullStart, element, firstToken, lastToken) { - if (typeof firstToken === "undefined") { firstToken = element.firstToken(); } - if (typeof lastToken === "undefined") { lastToken = element.lastToken(); } - var leadingTriviaWidth = firstToken ? firstToken.leadingTriviaWidth() : 0; - var trailingTriviaWidth = lastToken ? lastToken.trailingTriviaWidth() : 0; - - var desiredMinChar = fullStart + leadingTriviaWidth; - var desiredLimChar = fullStart + element.fullWidth() - trailingTriviaWidth; - - this.setSpanExplicit(span, desiredMinChar, desiredLimChar); - - span._trailingTriviaWidth = trailingTriviaWidth; - }; - - SyntaxTreeToAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - span._start = start; - span._end = end; - }; - - SyntaxTreeToAstVisitor.prototype.visitSyntaxList = function (node) { - var start = this.position; - var array = new Array(node.childCount()); - - for (var i = 0, n = node.childCount(); i < n; i++) { - array[i] = node.childAt(i).accept(this); - } - - var result = new TypeScript.ISyntaxList2(this.fileName, array); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var start = this.position; - var array = new Array(list.nonSeparatorCount()); - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i % 2 === 0) { - array[i / 2] = list.childAt(i).accept(this); - this.previousTokenTrailingComments = null; - } else { - var separatorToken = list.childAt(i); - this.previousTokenTrailingComments = this.convertTokenTrailingComments(separatorToken, this.position + separatorToken.leadingTriviaWidth() + separatorToken.width()); - this.movePast(separatorToken); - } - } - - var result = new TypeScript.ISeparatedSyntaxList2(this.fileName, array, list.separatorCount()); - this.setSpan(result, start, list); - - result.setPostComments(this.previousTokenTrailingComments); - this.previousTokenTrailingComments = null; - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.convertComment = function (trivia, commentStartPosition, hasTrailingNewLine) { - var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth()); - - return comment; - }; - - SyntaxTreeToAstVisitor.prototype.convertComments = function (triviaList, commentStartPosition) { - var result = []; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment()) { - var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine(); - result.push(this.convertComment(trivia, commentStartPosition, hasTrailingNewLine)); - } - - commentStartPosition += trivia.fullWidth(); - } - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.mergeComments = function (comments1, comments2) { - if (comments1 === null) { - return comments2; - } - - if (comments2 === null) { - return comments1; - } - - return comments1.concat(comments2); - }; - - SyntaxTreeToAstVisitor.prototype.convertTokenLeadingComments = function (token, commentStartPosition) { - if (token === null) { - return null; - } - - var preComments = token.hasLeadingComment() ? this.convertComments(token.leadingTrivia(), commentStartPosition) : null; - - var previousTokenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; - - return this.mergeComments(previousTokenTrailingComments, preComments); - }; - - SyntaxTreeToAstVisitor.prototype.convertTokenTrailingComments = function (token, commentStartPosition) { - if (token === null || !token.hasTrailingComment() || token.hasTrailingNewLine()) { - return null; - } - - return this.convertComments(token.trailingTrivia(), commentStartPosition); - }; - - SyntaxTreeToAstVisitor.prototype.convertNodeTrailingComments = function (node, lastToken, nodeStart) { - if (lastToken === null || !lastToken.hasTrailingComment() || lastToken.hasTrailingNewLine()) { - return null; - } - - return this.convertComments(lastToken.trailingTrivia(), nodeStart + node.fullWidth() - lastToken.trailingTriviaWidth()); - }; - - SyntaxTreeToAstVisitor.prototype.visitIdentifier = function (token) { - return this.visitToken(token); - }; - - SyntaxTreeToAstVisitor.prototype.visitToken = function (token) { - var fullStart = this.position; - - var result = this.visitTokenWorker(token); - - this.movePast(token); - - var start = fullStart + token.leadingTriviaWidth(); - this.setSpanExplicit(result, start, start + token.width()); - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTokenWorker = function (token) { - switch (token.tokenKind) { - case 60 /* AnyKeyword */: - return new TypeScript.BuiltInType(60 /* AnyKeyword */, token.text(), token.valueText()); - case 61 /* BooleanKeyword */: - return new TypeScript.BuiltInType(61 /* BooleanKeyword */, token.text(), token.valueText()); - case 67 /* NumberKeyword */: - return new TypeScript.BuiltInType(67 /* NumberKeyword */, token.text(), token.valueText()); - case 69 /* StringKeyword */: - return new TypeScript.BuiltInType(69 /* StringKeyword */, token.text(), token.valueText()); - case 41 /* VoidKeyword */: - return new TypeScript.BuiltInType(41 /* VoidKeyword */, token.text(), token.valueText()); - case 35 /* ThisKeyword */: - return new TypeScript.ThisExpression(token.text(), token.valueText()); - case 50 /* SuperKeyword */: - return new TypeScript.SuperExpression(token.text(), token.valueText()); - case 37 /* TrueKeyword */: - return new TypeScript.LiteralExpression(37 /* TrueKeyword */, token.text(), token.valueText()); - case 24 /* FalseKeyword */: - return new TypeScript.LiteralExpression(24 /* FalseKeyword */, token.text(), token.valueText()); - case 32 /* NullKeyword */: - return new TypeScript.LiteralExpression(32 /* NullKeyword */, token.text(), token.valueText()); - case 14 /* StringLiteral */: - return new TypeScript.StringLiteral(token.text(), token.valueText()); - case 12 /* RegularExpressionLiteral */: - return new TypeScript.RegularExpressionLiteral(token.text(), token.valueText()); - case 13 /* NumericLiteral */: - var fullStart = this.position; - var preComments = this.convertTokenLeadingComments(token, fullStart); - - var result = new TypeScript.NumericLiteral(token.value(), token.text(), token.valueText()); - - result.setPreComments(preComments); - return result; - case 11 /* IdentifierName */: - return new TypeScript.Identifier(token.text()); - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SyntaxTreeToAstVisitor.prototype.visitSourceUnit = function (node) { - var start = this.position; - TypeScript.Debug.assert(start === 0); - - var bod = this.visitSyntaxList(node.moduleElements); - var comments = this.convertTokenLeadingComments(node.endOfFileToken, TypeScript.Syntax.childOffset(node, node.endOfFileToken)); - var result = new TypeScript.SourceUnit(bod, comments, this.fileName); - this.setSpanExplicit(result, start, start + node.fullWidth()); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExternalModuleReference = function (node) { - var start = this.position; - - this.moveTo(node, node.stringLiteral); - var stringLiteral = node.stringLiteral.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ExternalModuleReference(stringLiteral); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleNameModuleReference = function (node) { - var start = this.position; - var moduleName = node.moduleName.accept(this); - - var result = new TypeScript.ModuleNameModuleReference(moduleName); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitClassDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - this.movePast(node.openBraceToken); - var members = this.visitSyntaxList(node.classElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ClassDeclaration(modifiers, name, typeParameters, heritageClauses, members, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModifiers = function (modifiers) { - var result = null; - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result = result || []; - result.push(1 /* Exported */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result = result || []; - result.push(8 /* Ambient */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result = result || []; - result.push(16 /* Static */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result = result || []; - result.push(4 /* Public */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result = result || []; - result.push(2 /* Private */); - } - - return result || TypeScript.sentinelEmptyArray; - }; - - SyntaxTreeToAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - var body = this.visitObjectType(node.body); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.InterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, body); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitHeritageClause = function (node) { - var start = this.position; - - this.movePast(node.extendsOrImplementsKeyword); - var typeNames = this.visitSeparatedSyntaxList(node.typeNames); - - var result = new TypeScript.HeritageClause(node.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, typeNames); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleDeclaration = function (node) { - var start = this.position; - - var modifiers = this.visitModifiers(node.modifiers); - - this.moveTo(node, node.moduleKeyword); - this.movePast(node.moduleKeyword); - - var moduleName = node.name ? node.name.accept(this) : null; - var stringLiteral = node.stringLiteral ? node.stringLiteral.accept(this) : null; - - this.movePast(node.openBraceToken); - - var moduleElements = this.visitSyntaxList(node.moduleElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ModuleDeclaration(modifiers, moduleName, stringLiteral, moduleElements, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.FunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - this.movePast(node.openBraceToken); - - var enumElements = this.visitSeparatedSyntaxList(node.enumElements); - - this.movePast(node.closeBraceToken); - - var result = new TypeScript.EnumDeclaration(this.visitModifiers(node.modifiers), identifier, enumElements); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumElement = function (node) { - var start = this.position; - - var memberName = this.visitToken(node.propertyName); - - var value = node.equalsValueClause !== null ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.EnumElement(memberName, value); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitImportDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.equalsToken); - var alias = node.moduleReference.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ImportDeclaration(modifiers, name, alias); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExportAssignment = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExportAssignment(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclaration); - - var declaration = node.variableDeclaration.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.VariableStatement(modifiers, declaration); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarators); - var variableDecls = this.visitSeparatedSyntaxList(node.variableDeclarators); - - var result = new TypeScript.VariableDeclaration(variableDecls); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclarator = function (node) { - var start = this.position; - var propertyName = this.visitToken(node.propertyName); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.VariableDeclarator(propertyName, typeExpr, init); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEqualsValueClause = function (node) { - var start = this.position; - var afterEqualsComments = this.convertTokenTrailingComments(node.equalsToken, this.position + node.equalsToken.leadingTriviaWidth() + node.equalsToken.width()); - - this.movePast(node.equalsToken); - var value = node.value.accept(this); - value.setPreComments(this.mergeComments(afterEqualsComments, value.preComments())); - - var result = new TypeScript.EqualsValueClause(value); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var start = this.position; - - this.movePast(node.operatorToken); - var operand = node.operand.accept(this); - - var result = new TypeScript.PrefixUnaryExpression(node.kind(), operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var start = this.position; - var openStart = this.position + node.openBracketToken.leadingTriviaWidth(); - this.movePast(node.openBracketToken); - - var expressions = this.visitSeparatedSyntaxList(node.expressions); - - var closeStart = this.position + node.closeBracketToken.leadingTriviaWidth(); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayLiteralExpression(expressions); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitOmittedExpression = function (node) { - var start = this.position; - - var result = new TypeScript.OmittedExpression(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var start = this.position; - - var openParenToken = node.openParenToken; - var openParenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - - this.movePast(openParenToken); - - var expr = node.expression.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParenthesizedExpression(openParenTrailingComments, expr); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var start = this.position; - - var identifier = node.identifier.accept(this); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.SimpleArrowFunctionExpression(identifier, block, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var start = this.position; - - var callSignature = this.visitCallSignature(node.callSignature); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.ParenthesizedArrowFunctionExpression(callSignature, block, expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitType = function (type) { - return type ? type.accept(this) : null; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeQuery = function (node) { - var start = this.position; - this.movePast(node.typeOfKeyword); - var name = node.name.accept(this); - - var result = new TypeScript.TypeQuery(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitQualifiedName = function (node) { - var start = this.position; - var left = this.visitType(node.left); - this.movePast(node.dotToken); - var right = this.visitIdentifier(node.right); - - var result = new TypeScript.QualifiedName(left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeArgumentList = function (node) { - if (node === null) { - return null; - } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeArguments = this.visitSeparatedSyntaxList(node.typeArguments); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeArgumentList(typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorType = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.ConstructorType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionType = function (node) { - var start = this.position; - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.FunctionType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectType = function (node) { - var start = this.position; - - this.movePast(node.openBraceToken); - var typeMembers = this.visitSeparatedSyntaxList(node.typeMembers); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectType(typeMembers); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.type); - this.movePast(node.openBracketToken); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayType(underlying); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGenericType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.name); - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - var result = new TypeScript.GenericType(underlying, typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeAnnotation = function (node) { - if (!node) { - return null; - } - - var start = this.position; - this.movePast(node.colonToken); - var type = this.visitType(node.type); - - var result = new TypeScript.TypeAnnotation(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBlock = function (node) { - if (!node) { - return null; - } - - var start = this.position; - - this.movePast(node.openBraceToken); - var statements = this.visitSyntaxList(node.statements); - var closeBracePosition = this.position; - - var closeBraceLeadingComments = this.convertTokenLeadingComments(node.closeBraceToken, this.position); - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.Block(statements, closeBraceLeadingComments, closeBraceToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameter = function (node) { - var start = this.position; - - var dotDotDotToken = this.createTokenSpan(this.position, node.dotDotDotToken); - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? node.equalsValueClause.accept(this) : null; - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeExpr, init); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.dotToken); - var name = this.visitIdentifier(node.name); - - var result = new TypeScript.MemberAccessExpression(expression, name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var start = this.position; - - var operand = node.operand.accept(this); - this.movePast(node.operatorToken); - - var result = new TypeScript.PostfixUnaryExpression(node.kind() === 210 /* PostIncrementExpression */ ? 210 /* PostIncrementExpression */ : 211 /* PostDecrementExpression */, operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElementAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.openBracketToken); - var argumentExpression = node.argumentExpression.accept(this); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ElementAccessExpression(expression, argumentExpression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitInvocationExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.InvocationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArgumentList = function (node) { - if (node === null) { - return null; - } - - var start = this.position; - - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - this.movePast(node.openParenToken); - - var _arguments = this.visitSeparatedSyntaxList(node.arguments); - - if (node.arguments.fullWidth() === 0 && node.closeParenToken.fullWidth() === 0) { - var openParenTokenEnd = start + node.openParenToken.leadingTriviaWidth() + node.openParenToken.width(); - this.setSpanExplicit(_arguments, openParenTokenEnd, openParenTokenEnd + node.openParenToken.trailingTriviaWidth()); - } - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ArgumentList(typeArguments, _arguments, closeParenToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBinaryExpression = function (node) { - var start = this.position; - - var left = node.left.accept(this); - this.movePast(node.operatorToken); - var right = node.right.accept(this); - - var result = new TypeScript.BinaryExpression(node.kind(), left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConditionalExpression = function (node) { - var start = this.position; - - var condition = node.condition.accept(this); - this.movePast(node.questionToken); - var whenTrue = node.whenTrue.accept(this); - this.movePast(node.colonToken); - var whenFalse = node.whenFalse.accept(this); - - var result = new TypeScript.ConditionalExpression(condition, whenTrue, whenFalse); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructSignature = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.ConstructSignature(callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMethodSignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.MethodSignature(name, questionToken, callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexSignature = function (node) { - var start = this.position; - - this.movePast(node.openBracketToken); - - var parameter = node.parameter.accept(this); - - this.movePast(node.closeBracketToken); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.IndexSignature(parameter, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPropertySignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.PropertySignature(name, questionToken, typeExpr); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameterList = function (node) { - if (!node) { - return null; - } - - var start = this.position; - - var openParenToken = node.openParenToken; - - this.previousTokenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - var openParenTrailingComments = null; - if (node.parameters.childCount() === 0) { - openParenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; - } - - this.movePast(node.openParenToken); - var parameters = this.visitSeparatedSyntaxList(node.parameters); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParameterList(openParenTrailingComments, parameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCallSignature = function (node) { - var start = this.position; - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.CallSignature(typeParameters, parameters, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameterList = function (node) { - if (!node) { - return null; - } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeParameters = this.visitSeparatedSyntaxList(node.typeParameters); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeParameterList(typeParameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameter = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - var constraint = node.constraint ? node.constraint.accept(this) : null; - - var result = new TypeScript.TypeParameter(identifier, constraint); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstraint = function (node) { - var start = this.position; - this.movePast(node.extendsKeyword); - var type = this.visitType(node.type); - - var result = new TypeScript.Constraint(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIfStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var thenBod = node.statement.accept(this); - var elseBod = node.elseClause ? node.elseClause.accept(this) : null; - - var result = new TypeScript.IfStatement(condition, thenBod, elseBod); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElseClause = function (node) { - var start = this.position; - - this.movePast(node.elseKeyword); - var statement = node.statement.accept(this); - - var result = new TypeScript.ElseClause(statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExpressionStatement = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var expression = node.expression.accept(this); - - var semicolonPosition = this.position; - - var postComments = this.convertComments(node.semicolonToken.trailingTrivia(), this.position + node.semicolonToken.leadingTriviaWidth() + node.semicolonToken.width()); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExpressionStatement(expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.callSignature); - var callSignature = this.visitCallSignature(node.callSignature); - - var block = node.block ? node.block.accept(this) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.ConstructorDeclaration(callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexMemberDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.indexSignature); - var indexSignature = node.indexSignature.accept(this); - - this.movePast(node.semicolonToken); - - var result = new TypeScript.IndexMemberDeclaration(indexSignature); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.MemberFunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.GetAccessor(this.visitModifiers(node.modifiers), name, parameters, returnType, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.SetAccessor(this.visitModifiers(node.modifiers), name, parameters, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarator); - var variableDeclarator = node.variableDeclarator.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.MemberVariableDeclaration(modifiers, variableDeclarator); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitThrowStatement = function (node) { - var start = this.position; - - this.movePast(node.throwKeyword); - var expression = node.expression.accept(this); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ThrowStatement(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitReturnStatement = function (node) { - var start = this.position; - - this.movePast(node.returnKeyword); - var expression = node.expression ? node.expression.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ReturnStatement(expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.ObjectCreationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSwitchStatement = function (node) { - var start = this.position; - - this.movePast(node.switchKeyword); - this.movePast(node.openParenToken); - var expression = node.expression.accept(this); - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - this.movePast(node.openBraceToken); - var switchClauses = this.visitSyntaxList(node.switchClauses); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.SwitchStatement(expression, closeParenToken, switchClauses); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.caseKeyword); - var expression = node.expression.accept(this); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.CaseSwitchClause(expression, statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.defaultKeyword); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.DefaultSwitchClause(statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBreakStatement = function (node) { - var start = this.position; - - this.movePast(node.breakKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.BreakStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitContinueStatement = function (node) { - var start = this.position; - - this.movePast(node.continueKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ContinueStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var initializer = node.initializer ? node.initializer.accept(this) : null; - - this.movePast(node.firstSemicolonToken); - var cond = node.condition ? node.condition.accept(this) : null; - this.movePast(node.secondSemicolonToken); - var incr = node.incrementor ? node.incrementor.accept(this) : null; - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForStatement(variableDeclaration, initializer, cond, incr, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForInStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var left = node.left ? node.left.accept(this) : null; - - this.movePast(node.inKeyword); - var expression = node.expression.accept(this); - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForInStatement(variableDeclaration, left, expression, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWhileStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WhileStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWithStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WithStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCastExpression = function (node) { - var start = this.position; - - this.movePast(node.lessThanToken); - var castTerm = this.visitType(node.type); - this.movePast(node.greaterThanToken); - var expression = node.expression.accept(this); - - var result = new TypeScript.CastExpression(castTerm, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var start = this.position; - - var openStart = this.position + node.openBraceToken.leadingTriviaWidth(); - this.movePast(node.openBraceToken); - - var propertyAssignments = this.visitSeparatedSyntaxList(node.propertyAssignments); - - var closeStart = this.position + node.closeBraceToken.leadingTriviaWidth(); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectLiteralExpression(propertyAssignments); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var postComments = this.convertNodeTrailingComments(node, node.lastToken(), start); - - var propertyName = node.propertyName.accept(this); - - var afterColonComments = this.convertTokenTrailingComments(node.colonToken, this.position + node.colonToken.leadingTriviaWidth() + node.colonToken.width()); - - this.movePast(node.colonToken); - var expression = node.expression.accept(this); - expression.setPreComments(this.mergeComments(afterColonComments, expression.preComments())); - - var result = new TypeScript.SimplePropertyAssignment(propertyName, expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var start = this.position; - - var propertyName = node.propertyName.accept(this); - var callSignature = this.visitCallSignature(node.callSignature); - var block = this.visitBlock(node.block); - - var result = new TypeScript.FunctionPropertyAssignment(propertyName, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionExpression = function (node) { - var start = this.position; - - this.movePast(node.functionKeyword); - var name = node.identifier === null ? null : this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? node.block.accept(this) : null; - - var result = new TypeScript.FunctionExpression(name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEmptyStatement = function (node) { - var start = this.position; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.EmptyStatement(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTryStatement = function (node) { - var start = this.position; - - this.movePast(node.tryKeyword); - var tryBody = node.block.accept(this); - - var catchClause = null; - if (node.catchClause !== null) { - catchClause = node.catchClause.accept(this); - } - - var finallyBody = null; - if (node.finallyClause !== null) { - finallyBody = node.finallyClause.accept(this); - } - - var result = new TypeScript.TryStatement(tryBody, catchClause, finallyBody); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCatchClause = function (node) { - var start = this.position; - - this.movePast(node.catchKeyword); - this.movePast(node.openParenToken); - var identifier = this.visitIdentifier(node.identifier); - var typeAnnotation = this.visitTypeAnnotation(node.typeAnnotation); - this.movePast(node.closeParenToken); - var block = node.block.accept(this); - - var result = new TypeScript.CatchClause(identifier, typeAnnotation, block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFinallyClause = function (node) { - var start = this.position; - this.movePast(node.finallyKeyword); - var block = node.block.accept(this); - - var result = new TypeScript.FinallyClause(block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitLabeledStatement = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - this.movePast(node.colonToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.LabeledStatement(identifier, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDoStatement = function (node) { - var start = this.position; - - this.movePast(node.doKeyword); - var statement = node.statement.accept(this); - var whileKeyword = this.createTokenSpan(this.position, node.whileKeyword); - - this.movePast(node.whileKeyword); - this.movePast(node.openParenToken); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DoStatement(statement, whileKeyword, condition); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeOfExpression = function (node) { - var start = this.position; - - this.movePast(node.typeOfKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.TypeOfExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDeleteExpression = function (node) { - var start = this.position; - - this.movePast(node.deleteKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.DeleteExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVoidExpression = function (node) { - var start = this.position; - - this.movePast(node.voidKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.VoidExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDebuggerStatement = function (node) { - var start = this.position; - - this.movePast(node.debuggerKeyword); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DebuggerStatement(); - this.setSpan(result, start, node); - - return result; - }; - return SyntaxTreeToAstVisitor; - })(); - TypeScript.SyntaxTreeToAstVisitor = SyntaxTreeToAstVisitor; - - function applyDelta(ast, delta) { - if (ast) { - if (ast._start !== -1) { - ast._start += delta; - } - - if (ast._end !== -1) { - ast._end += delta; - } - } - } - - function applyDeltaToComments(comments, delta) { - if (comments && comments.length > 0) { - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; - applyDelta(comment, delta); - } - } - } - - var SyntaxTreeToIncrementalAstVisitor = (function (_super) { - __extends(SyntaxTreeToIncrementalAstVisitor, _super); - function SyntaxTreeToIncrementalAstVisitor() { - _super.apply(this, arguments); - } - SyntaxTreeToIncrementalAstVisitor.prototype.applyDelta = function (ast, delta) { - if (delta === 0) { - return; - } - - var pre = function (cur) { - applyDelta(cur, delta); - applyDeltaToComments(cur.preComments(), delta); - applyDeltaToComments(cur.postComments(), delta); - - switch (cur.kind()) { - case 146 /* Block */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 226 /* ArgumentList */: - applyDelta(cur.closeParenToken, delta); - break; - - case 130 /* ModuleDeclaration */: - applyDelta(cur.endingToken, delta); - break; - - case 131 /* ClassDeclaration */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 161 /* DoStatement */: - applyDelta(cur.whileKeyword, delta); - break; - - case 151 /* SwitchStatement */: - applyDelta(cur.closeParenToken, delta); - break; - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(ast, pre); - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - if (span._start !== -1) { - var delta = start - span._start; - this.applyDelta(span, delta); - - span._end = end; - } else { - _super.prototype.setSpanExplicit.call(this, span, start, end); - } - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.getAndMovePastAST = function (element) { - if (this.previousTokenTrailingComments !== null) { - return null; - } - - var result = element._ast; - if (!result) { - return null; - } - - var start = this.position; - this.movePast(element); - this.setSpan(result, start, element); - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setAST = function (element, ast) { - element._ast = ast; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); - } - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSeparatedSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); - } - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitToken = function (token) { - var result = this.getAndMovePastAST(token); - - if (!result) { - result = _super.prototype.visitToken.call(this, token); - this.setAST(token, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitClassDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitClassDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInterfaceDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitHeritageClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitHeritageClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitModuleDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitModuleDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitImportDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitImportDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExportAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExportAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPrefixUnaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayLiteralExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitOmittedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitOmittedExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimpleArrowFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedArrowFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitQualifiedName = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - var result = _super.prototype.visitQualifiedName.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGenericType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGenericType.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBlock = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBlock.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParameter.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberAccessExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPostfixUnaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitElementAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitElementAccessExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInvocationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInvocationExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBinaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBinaryExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConditionalExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConditionalExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMethodSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMethodSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIndexSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIndexSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPropertySignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPropertySignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCallSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCallSignature.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeParameter.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIfStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIfStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExpressionStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExpressionStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberFunctionDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGetAccessor.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSetAccessor.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitThrowStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitThrowStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitReturnStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitReturnStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectCreationExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSwitchStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSwitchStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCaseSwitchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDefaultSwitchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBreakStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBreakStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitContinueStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitContinueStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForInStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForInStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWhileStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWhileStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWithStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWithStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCastExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCastExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectLiteralExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimplePropertyAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionPropertyAssignment.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitEmptyStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitEmptyStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTryStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTryStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCatchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCatchClause.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitLabeledStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitLabeledStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDoStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDoStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeOfExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeOfExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDeleteExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDeleteExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitVoidExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitVoidExpression.call(this, node); - this.setAST(node, result); - } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDebuggerStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDebuggerStatement.call(this, node); - this.setAST(node, result); - } - - return result; - }; - return SyntaxTreeToIncrementalAstVisitor; - })(SyntaxTreeToAstVisitor); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ASTSpan = (function () { - function ASTSpan(_start, _end) { - this._start = _start; - this._end = _end; - } - ASTSpan.prototype.start = function () { - return this._start; - }; - - ASTSpan.prototype.end = function () { - return this._end; - }; - return ASTSpan; - })(); - TypeScript.ASTSpan = ASTSpan; - - var astID = 0; - - function structuralEqualsNotIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, false); - } - TypeScript.structuralEqualsNotIncludingPosition = structuralEqualsNotIncludingPosition; - - function structuralEqualsIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, true); - } - TypeScript.structuralEqualsIncludingPosition = structuralEqualsIncludingPosition; - - function commentStructuralEqualsNotIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, false); - } - - function commentStructuralEqualsIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, true); - } - - function structuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { - return true; - } - - return ast1 !== null && ast2 !== null && ast1.kind() === ast2.kind() && ast1.structuralEquals(ast2, includingPosition); - } - - function commentStructuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { - return true; - } - - return ast1 !== null && ast2 !== null && ast1.structuralEquals(ast2, includingPosition); - } - - function astArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? structuralEqualsIncludingPosition : structuralEqualsNotIncludingPosition); - } - - function commentArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? commentStructuralEqualsIncludingPosition : commentStructuralEqualsNotIncludingPosition); - } - - var AST = (function () { - function AST() { - this.parent = null; - this._start = -1; - this._end = -1; - this._trailingTriviaWidth = 0; - this._astID = astID++; - this._preComments = null; - this._postComments = null; - } - AST.prototype.syntaxID = function () { - return this._astID; - }; - - AST.prototype.start = function () { - return this._start; - }; - - AST.prototype.end = function () { - return this._end; - }; - - AST.prototype.trailingTriviaWidth = function () { - return this._trailingTriviaWidth; - }; - - AST.prototype.fileName = function () { - return this.parent.fileName(); - }; - - AST.prototype.kind = function () { - throw TypeScript.Errors.abstract(); - }; - - AST.prototype.preComments = function () { - return this._preComments; - }; - - AST.prototype.postComments = function () { - return this._postComments; - }; - - AST.prototype.setPreComments = function (comments) { - if (comments && comments.length) { - this._preComments = comments; - } else if (this._preComments) { - this._preComments = null; - } - }; - - AST.prototype.setPostComments = function (comments) { - if (comments && comments.length) { - this._postComments = comments; - } else if (this._postComments) { - this._postComments = null; - } - }; - - AST.prototype.width = function () { - return this.end() - this.start(); - }; - - AST.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { - return false; - } - } - - return commentArrayStructuralEquals(this.preComments(), ast.preComments(), includingPosition) && commentArrayStructuralEquals(this.postComments(), ast.postComments(), includingPosition); - }; - - AST.prototype.isExpression = function () { - return false; - }; - return AST; - })(); - TypeScript.AST = AST; - - var ISyntaxList2 = (function (_super) { - __extends(ISyntaxList2, _super); - function ISyntaxList2(_fileName, members) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; - } - } - ISyntaxList2.prototype.childCount = function () { - return this.members.length; - }; - - ISyntaxList2.prototype.childAt = function (index) { - return this.members[index]; - }; - - ISyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISyntaxList2.prototype.kind = function () { - return 1 /* List */; - }; - - ISyntaxList2.prototype.firstOrDefault = function (func) { - return TypeScript.ArrayUtilities.firstOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.lastOrDefault = function (func) { - return TypeScript.ArrayUtilities.lastOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.any = function (func) { - return TypeScript.ArrayUtilities.any(this.members, func); - }; - - ISyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISyntaxList2; - })(AST); - TypeScript.ISyntaxList2 = ISyntaxList2; - - var ISeparatedSyntaxList2 = (function (_super) { - __extends(ISeparatedSyntaxList2, _super); - function ISeparatedSyntaxList2(_fileName, members, _separatorCount) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - this._separatorCount = _separatorCount; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; - } - } - ISeparatedSyntaxList2.prototype.nonSeparatorCount = function () { - return this.members.length; - }; - - ISeparatedSyntaxList2.prototype.separatorCount = function () { - return this._separatorCount; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorAt = function (index) { - return this.members[index]; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorIndexOf = function (ast) { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i) === ast) { - return i; - } - } - - return -1; - }; - - ISeparatedSyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISeparatedSyntaxList2.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - ISeparatedSyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISeparatedSyntaxList2; - })(AST); - TypeScript.ISeparatedSyntaxList2 = ISeparatedSyntaxList2; - - var SourceUnit = (function (_super) { - __extends(SourceUnit, _super); - function SourceUnit(moduleElements, endOfFileTokenLeadingComments, _fileName) { - _super.call(this); - this.moduleElements = moduleElements; - this.endOfFileTokenLeadingComments = endOfFileTokenLeadingComments; - this._fileName = _fileName; - moduleElements && (moduleElements.parent = this); - } - SourceUnit.prototype.fileName = function () { - return this._fileName; - }; - - SourceUnit.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnit.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return SourceUnit; - })(AST); - TypeScript.SourceUnit = SourceUnit; - - var Identifier = (function (_super) { - __extends(Identifier, _super); - function Identifier(_text) { - _super.call(this); - this._text = _text; - this._valueText = null; - } - Identifier.prototype.text = function () { - return this._text; - }; - Identifier.prototype.valueText = function () { - if (!this._valueText) { - var text = this._text; - if (text === "__proto__") { - this._valueText = "#__proto__"; - } else { - this._valueText = TypeScript.Syntax.massageEscapes(text); - } - } - - return this._valueText; - }; - - Identifier.prototype.kind = function () { - return 11 /* IdentifierName */; - }; - - Identifier.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - Identifier.prototype.isExpression = function () { - return true; - }; - return Identifier; - })(AST); - TypeScript.Identifier = Identifier; - - var LiteralExpression = (function (_super) { - __extends(LiteralExpression, _super); - function LiteralExpression(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; - } - LiteralExpression.prototype.text = function () { - return this._text; - }; - - LiteralExpression.prototype.valueText = function () { - return this._valueText; - }; - - LiteralExpression.prototype.kind = function () { - return this._nodeType; - }; - - LiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - LiteralExpression.prototype.isExpression = function () { - return true; - }; - return LiteralExpression; - })(AST); - TypeScript.LiteralExpression = LiteralExpression; - - var ThisExpression = (function (_super) { - __extends(ThisExpression, _super); - function ThisExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - ThisExpression.prototype.text = function () { - return this._text; - }; - - ThisExpression.prototype.valueText = function () { - return this._valueText; - }; - - ThisExpression.prototype.kind = function () { - return 35 /* ThisKeyword */; - }; - - ThisExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - ThisExpression.prototype.isExpression = function () { - return true; - }; - return ThisExpression; - })(AST); - TypeScript.ThisExpression = ThisExpression; - - var SuperExpression = (function (_super) { - __extends(SuperExpression, _super); - function SuperExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - SuperExpression.prototype.text = function () { - return this._text; - }; - - SuperExpression.prototype.valueText = function () { - return this._valueText; - }; - - SuperExpression.prototype.kind = function () { - return 50 /* SuperKeyword */; - }; - - SuperExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - SuperExpression.prototype.isExpression = function () { - return true; - }; - return SuperExpression; - })(AST); - TypeScript.SuperExpression = SuperExpression; - - var NumericLiteral = (function (_super) { - __extends(NumericLiteral, _super); - function NumericLiteral(_value, _text, _valueText) { - _super.call(this); - this._value = _value; - this._text = _text; - this._valueText = _valueText; - } - NumericLiteral.prototype.text = function () { - return this._text; - }; - NumericLiteral.prototype.valueText = function () { - return this._valueText; - }; - NumericLiteral.prototype.value = function () { - return this._value; - }; - - NumericLiteral.prototype.kind = function () { - return 13 /* NumericLiteral */; - }; - - NumericLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && (this._value === ast._value || (isNaN(this._value) && isNaN(ast._value))) && this._text === ast._text; - }; - - NumericLiteral.prototype.isExpression = function () { - return true; - }; - return NumericLiteral; - })(AST); - TypeScript.NumericLiteral = NumericLiteral; - - var RegularExpressionLiteral = (function (_super) { - __extends(RegularExpressionLiteral, _super); - function RegularExpressionLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - } - RegularExpressionLiteral.prototype.text = function () { - return this._text; - }; - - RegularExpressionLiteral.prototype.valueText = function () { - return this._valueText; - }; - - RegularExpressionLiteral.prototype.kind = function () { - return 12 /* RegularExpressionLiteral */; - }; - - RegularExpressionLiteral.prototype.isExpression = function () { - return true; - }; - return RegularExpressionLiteral; - })(AST); - TypeScript.RegularExpressionLiteral = RegularExpressionLiteral; - - var StringLiteral = (function (_super) { - __extends(StringLiteral, _super); - function StringLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - this._valueText = _valueText === "__proto__" ? "#__proto__" : _valueText; - } - StringLiteral.prototype.text = function () { - return this._text; - }; - StringLiteral.prototype.valueText = function () { - return this._valueText; - }; - - StringLiteral.prototype.kind = function () { - return 14 /* StringLiteral */; - }; - - StringLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - StringLiteral.prototype.isExpression = function () { - return true; - }; - return StringLiteral; - })(AST); - TypeScript.StringLiteral = StringLiteral; - - var TypeAnnotation = (function (_super) { - __extends(TypeAnnotation, _super); - function TypeAnnotation(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - TypeAnnotation.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - return TypeAnnotation; - })(AST); - TypeScript.TypeAnnotation = TypeAnnotation; - - var BuiltInType = (function (_super) { - __extends(BuiltInType, _super); - function BuiltInType(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; - } - BuiltInType.prototype.text = function () { - return this._text; - }; - - BuiltInType.prototype.valueText = function () { - return this._valueText; - }; - - BuiltInType.prototype.kind = function () { - return this._nodeType; - }; - return BuiltInType; - })(AST); - TypeScript.BuiltInType = BuiltInType; - - var ExternalModuleReference = (function (_super) { - __extends(ExternalModuleReference, _super); - function ExternalModuleReference(stringLiteral) { - _super.call(this); - this.stringLiteral = stringLiteral; - stringLiteral && (stringLiteral.parent = this); - } - ExternalModuleReference.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - return ExternalModuleReference; - })(AST); - TypeScript.ExternalModuleReference = ExternalModuleReference; - - var ModuleNameModuleReference = (function (_super) { - __extends(ModuleNameModuleReference, _super); - function ModuleNameModuleReference(moduleName) { - _super.call(this); - this.moduleName = moduleName; - moduleName && (moduleName.parent = this); - } - ModuleNameModuleReference.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - return ModuleNameModuleReference; - })(AST); - TypeScript.ModuleNameModuleReference = ModuleNameModuleReference; - - var ImportDeclaration = (function (_super) { - __extends(ImportDeclaration, _super); - function ImportDeclaration(modifiers, identifier, moduleReference) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.moduleReference = moduleReference; - identifier && (identifier.parent = this); - moduleReference && (moduleReference.parent = this); - } - ImportDeclaration.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.moduleReference, ast.moduleReference, includingPosition); - }; - return ImportDeclaration; - })(AST); - TypeScript.ImportDeclaration = ImportDeclaration; - - var ExportAssignment = (function (_super) { - __extends(ExportAssignment, _super); - function ExportAssignment(identifier) { - _super.call(this); - this.identifier = identifier; - identifier && (identifier.parent = this); - } - ExportAssignment.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignment.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition); - }; - return ExportAssignment; - })(AST); - TypeScript.ExportAssignment = ExportAssignment; - - var TypeParameterList = (function (_super) { - __extends(TypeParameterList, _super); - function TypeParameterList(typeParameters) { - _super.call(this); - this.typeParameters = typeParameters; - typeParameters && (typeParameters.parent = this); - } - TypeParameterList.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - return TypeParameterList; - })(AST); - TypeScript.TypeParameterList = TypeParameterList; - - var ClassDeclaration = (function (_super) { - __extends(ClassDeclaration, _super); - function ClassDeclaration(modifiers, identifier, typeParameterList, heritageClauses, classElements, closeBraceToken) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - heritageClauses && (heritageClauses.parent = this); - classElements && (classElements.parent = this); - } - ClassDeclaration.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.classElements, ast.classElements, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return ClassDeclaration; - })(AST); - TypeScript.ClassDeclaration = ClassDeclaration; - - var InterfaceDeclaration = (function (_super) { - __extends(InterfaceDeclaration, _super); - function InterfaceDeclaration(modifiers, identifier, typeParameterList, heritageClauses, body) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - body && (body.parent = this); - heritageClauses && (heritageClauses.parent = this); - } - InterfaceDeclaration.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.body, ast.body, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return InterfaceDeclaration; - })(AST); - TypeScript.InterfaceDeclaration = InterfaceDeclaration; - - var HeritageClause = (function (_super) { - __extends(HeritageClause, _super); - function HeritageClause(_nodeType, typeNames) { - _super.call(this); - this._nodeType = _nodeType; - this.typeNames = typeNames; - typeNames && (typeNames.parent = this); - } - HeritageClause.prototype.kind = function () { - return this._nodeType; - }; - - HeritageClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeNames, ast.typeNames, includingPosition); - }; - return HeritageClause; - })(AST); - TypeScript.HeritageClause = HeritageClause; - - var ModuleDeclaration = (function (_super) { - __extends(ModuleDeclaration, _super); - function ModuleDeclaration(modifiers, name, stringLiteral, moduleElements, endingToken) { - _super.call(this); - this.modifiers = modifiers; - this.name = name; - this.stringLiteral = stringLiteral; - this.moduleElements = moduleElements; - this.endingToken = endingToken; - name && (name.parent = this); - stringLiteral && (stringLiteral.parent = this); - moduleElements && (moduleElements.parent = this); - } - ModuleDeclaration.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return ModuleDeclaration; - })(AST); - TypeScript.ModuleDeclaration = ModuleDeclaration; - - var FunctionDeclaration = (function (_super) { - __extends(FunctionDeclaration, _super); - function FunctionDeclaration(modifiers, identifier, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionDeclaration.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.callSignature, ast.callSignature, includingPosition); - }; - return FunctionDeclaration; - })(AST); - TypeScript.FunctionDeclaration = FunctionDeclaration; - - var VariableStatement = (function (_super) { - __extends(VariableStatement, _super); - function VariableStatement(modifiers, declaration) { - _super.call(this); - this.modifiers = modifiers; - this.declaration = declaration; - declaration && (declaration.parent = this); - } - VariableStatement.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declaration, ast.declaration, includingPosition); - }; - return VariableStatement; - })(AST); - TypeScript.VariableStatement = VariableStatement; - - var VariableDeclaration = (function (_super) { - __extends(VariableDeclaration, _super); - function VariableDeclaration(declarators) { - _super.call(this); - this.declarators = declarators; - declarators && (declarators.parent = this); - } - VariableDeclaration.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declarators, ast.declarators, includingPosition); - }; - return VariableDeclaration; - })(AST); - TypeScript.VariableDeclaration = VariableDeclaration; - - var VariableDeclarator = (function (_super) { - __extends(VariableDeclarator, _super); - function VariableDeclarator(propertyName, typeAnnotation, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - VariableDeclarator.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - return VariableDeclarator; - })(AST); - TypeScript.VariableDeclarator = VariableDeclarator; - - var EqualsValueClause = (function (_super) { - __extends(EqualsValueClause, _super); - function EqualsValueClause(value) { - _super.call(this); - this.value = value; - value && (value.parent = this); - } - EqualsValueClause.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - return EqualsValueClause; - })(AST); - TypeScript.EqualsValueClause = EqualsValueClause; - - var PrefixUnaryExpression = (function (_super) { - __extends(PrefixUnaryExpression, _super); - function PrefixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); - } - PrefixUnaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - PrefixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); - }; - - PrefixUnaryExpression.prototype.isExpression = function () { - return true; - }; - return PrefixUnaryExpression; - })(AST); - TypeScript.PrefixUnaryExpression = PrefixUnaryExpression; - - var ArrayLiteralExpression = (function (_super) { - __extends(ArrayLiteralExpression, _super); - function ArrayLiteralExpression(expressions) { - _super.call(this); - this.expressions = expressions; - expressions && (expressions.parent = this); - } - ArrayLiteralExpression.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expressions, ast.expressions, includingPosition); - }; - - ArrayLiteralExpression.prototype.isExpression = function () { - return true; - }; - return ArrayLiteralExpression; - })(AST); - TypeScript.ArrayLiteralExpression = ArrayLiteralExpression; - - var OmittedExpression = (function (_super) { - __extends(OmittedExpression, _super); - function OmittedExpression() { - _super.apply(this, arguments); - } - OmittedExpression.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - OmittedExpression.prototype.isExpression = function () { - return true; - }; - return OmittedExpression; - })(AST); - TypeScript.OmittedExpression = OmittedExpression; - - var ParenthesizedExpression = (function (_super) { - __extends(ParenthesizedExpression, _super); - function ParenthesizedExpression(openParenTrailingComments, expression) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.expression = expression; - expression && (expression.parent = this); - } - ParenthesizedExpression.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - ParenthesizedExpression.prototype.isExpression = function () { - return true; - }; - return ParenthesizedExpression; - })(AST); - TypeScript.ParenthesizedExpression = ParenthesizedExpression; - - var SimpleArrowFunctionExpression = (function (_super) { - __extends(SimpleArrowFunctionExpression, _super); - function SimpleArrowFunctionExpression(identifier, block, expression) { - _super.call(this); - this.identifier = identifier; - this.block = block; - this.expression = expression; - identifier && (identifier.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - SimpleArrowFunctionExpression.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpression.prototype.isExpression = function () { - return true; - }; - return SimpleArrowFunctionExpression; - })(AST); - TypeScript.SimpleArrowFunctionExpression = SimpleArrowFunctionExpression; - - var ParenthesizedArrowFunctionExpression = (function (_super) { - __extends(ParenthesizedArrowFunctionExpression, _super); - function ParenthesizedArrowFunctionExpression(callSignature, block, expression) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - this.expression = expression; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - ParenthesizedArrowFunctionExpression.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; - }; - - ParenthesizedArrowFunctionExpression.prototype.isExpression = function () { - return true; - }; - return ParenthesizedArrowFunctionExpression; - })(AST); - TypeScript.ParenthesizedArrowFunctionExpression = ParenthesizedArrowFunctionExpression; - - var QualifiedName = (function (_super) { - __extends(QualifiedName, _super); - function QualifiedName(left, right) { - _super.call(this); - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - QualifiedName.prototype.kind = function () { - return 121 /* QualifiedName */; - }; - - QualifiedName.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); - }; - return QualifiedName; - })(AST); - TypeScript.QualifiedName = QualifiedName; - - var ParameterList = (function (_super) { - __extends(ParameterList, _super); - function ParameterList(openParenTrailingComments, parameters) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.parameters = parameters; - parameters && (parameters.parent = this); - } - ParameterList.prototype.kind = function () { - return 227 /* ParameterList */; - }; - return ParameterList; - })(AST); - TypeScript.ParameterList = ParameterList; - - var ConstructorType = (function (_super) { - __extends(ConstructorType, _super); - function ConstructorType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - ConstructorType.prototype.kind = function () { - return 125 /* ConstructorType */; - }; - return ConstructorType; - })(AST); - TypeScript.ConstructorType = ConstructorType; - - var FunctionType = (function (_super) { - __extends(FunctionType, _super); - function FunctionType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - FunctionType.prototype.kind = function () { - return 123 /* FunctionType */; - }; - return FunctionType; - })(AST); - TypeScript.FunctionType = FunctionType; - - var ObjectType = (function (_super) { - __extends(ObjectType, _super); - function ObjectType(typeMembers) { - _super.call(this); - this.typeMembers = typeMembers; - typeMembers && (typeMembers.parent = this); - } - ObjectType.prototype.kind = function () { - return 122 /* ObjectType */; - }; - - ObjectType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeMembers, ast.typeMembers, includingPosition); - }; - return ObjectType; - })(AST); - TypeScript.ObjectType = ObjectType; - - var ArrayType = (function (_super) { - __extends(ArrayType, _super); - function ArrayType(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - ArrayType.prototype.kind = function () { - return 124 /* ArrayType */; - }; - - ArrayType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition); - }; - return ArrayType; - })(AST); - TypeScript.ArrayType = ArrayType; - - var TypeArgumentList = (function (_super) { - __extends(TypeArgumentList, _super); - function TypeArgumentList(typeArguments) { - _super.call(this); - this.typeArguments = typeArguments; - typeArguments && (typeArguments.parent = this); - } - TypeArgumentList.prototype.kind = function () { - return 228 /* TypeArgumentList */; - }; - return TypeArgumentList; - })(AST); - TypeScript.TypeArgumentList = TypeArgumentList; - - var GenericType = (function (_super) { - __extends(GenericType, _super); - function GenericType(name, typeArgumentList) { - _super.call(this); - this.name = name; - this.typeArgumentList = typeArgumentList; - name && (name.parent = this); - typeArgumentList && (typeArgumentList.parent = this); - } - GenericType.prototype.kind = function () { - return 126 /* GenericType */; - }; - - GenericType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.typeArgumentList, ast.typeArgumentList, includingPosition); - }; - return GenericType; - })(AST); - TypeScript.GenericType = GenericType; - - var TypeQuery = (function (_super) { - __extends(TypeQuery, _super); - function TypeQuery(name) { - _super.call(this); - this.name = name; - name && (name.parent = this); - } - TypeQuery.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuery.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); - }; - return TypeQuery; - })(AST); - TypeScript.TypeQuery = TypeQuery; - - var Block = (function (_super) { - __extends(Block, _super); - function Block(statements, closeBraceLeadingComments, closeBraceToken) { - _super.call(this); - this.statements = statements; - this.closeBraceLeadingComments = closeBraceLeadingComments; - this.closeBraceToken = closeBraceToken; - statements && (statements.parent = this); - } - Block.prototype.kind = function () { - return 146 /* Block */; - }; - - Block.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return Block; - })(AST); - TypeScript.Block = Block; - - var Parameter = (function (_super) { - __extends(Parameter, _super); - function Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - _super.call(this); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - Parameter.prototype.kind = function () { - return 242 /* Parameter */; - }; - return Parameter; - })(AST); - TypeScript.Parameter = Parameter; - - var MemberAccessExpression = (function (_super) { - __extends(MemberAccessExpression, _super); - function MemberAccessExpression(expression, name) { - _super.call(this); - this.expression = expression; - this.name = name; - expression && (expression.parent = this); - name && (name.parent = this); - } - MemberAccessExpression.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); - }; - - MemberAccessExpression.prototype.isExpression = function () { - return true; - }; - return MemberAccessExpression; - })(AST); - TypeScript.MemberAccessExpression = MemberAccessExpression; - - var PostfixUnaryExpression = (function (_super) { - __extends(PostfixUnaryExpression, _super); - function PostfixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); - } - PostfixUnaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - PostfixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); - }; - - PostfixUnaryExpression.prototype.isExpression = function () { - return true; - }; - return PostfixUnaryExpression; - })(AST); - TypeScript.PostfixUnaryExpression = PostfixUnaryExpression; - - var ElementAccessExpression = (function (_super) { - __extends(ElementAccessExpression, _super); - function ElementAccessExpression(expression, argumentExpression) { - _super.call(this); - this.expression = expression; - this.argumentExpression = argumentExpression; - expression && (expression.parent = this); - argumentExpression && (argumentExpression.parent = this); - } - ElementAccessExpression.prototype.kind = function () { - return 221 /* ElementAccessExpression */; - }; - - ElementAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentExpression, ast.argumentExpression, includingPosition); - }; - - ElementAccessExpression.prototype.isExpression = function () { - return true; - }; - return ElementAccessExpression; - })(AST); - TypeScript.ElementAccessExpression = ElementAccessExpression; - - var InvocationExpression = (function (_super) { - __extends(InvocationExpression, _super); - function InvocationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - InvocationExpression.prototype.kind = function () { - return 213 /* InvocationExpression */; - }; - - InvocationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); - }; - - InvocationExpression.prototype.isExpression = function () { - return true; - }; - return InvocationExpression; - })(AST); - TypeScript.InvocationExpression = InvocationExpression; - - var ArgumentList = (function (_super) { - __extends(ArgumentList, _super); - function ArgumentList(typeArgumentList, _arguments, closeParenToken) { - _super.call(this); - this.typeArgumentList = typeArgumentList; - this.closeParenToken = closeParenToken; - this.arguments = _arguments; - - typeArgumentList && (typeArgumentList.parent = this); - _arguments && (_arguments.parent = this); - } - ArgumentList.prototype.kind = function () { - return 226 /* ArgumentList */; - }; - return ArgumentList; - })(AST); - TypeScript.ArgumentList = ArgumentList; - - var BinaryExpression = (function (_super) { - __extends(BinaryExpression, _super); - function BinaryExpression(_nodeType, left, right) { - _super.call(this); - this._nodeType = _nodeType; - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - BinaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - BinaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); - }; - - BinaryExpression.prototype.isExpression = function () { - return true; - }; - return BinaryExpression; - })(AST); - TypeScript.BinaryExpression = BinaryExpression; - - var ConditionalExpression = (function (_super) { - __extends(ConditionalExpression, _super); - function ConditionalExpression(condition, whenTrue, whenFalse) { - _super.call(this); - this.condition = condition; - this.whenTrue = whenTrue; - this.whenFalse = whenFalse; - condition && (condition.parent = this); - whenTrue && (whenTrue.parent = this); - whenFalse && (whenFalse.parent = this); - } - ConditionalExpression.prototype.kind = function () { - return 186 /* ConditionalExpression */; - }; - - ConditionalExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.whenTrue, ast.whenTrue, includingPosition) && structuralEquals(this.whenFalse, ast.whenFalse, includingPosition); - }; - - ConditionalExpression.prototype.isExpression = function () { - return true; - }; - return ConditionalExpression; - })(AST); - TypeScript.ConditionalExpression = ConditionalExpression; - - var ConstructSignature = (function (_super) { - __extends(ConstructSignature, _super); - function ConstructSignature(callSignature) { - _super.call(this); - this.callSignature = callSignature; - callSignature && (callSignature.parent = this); - } - ConstructSignature.prototype.kind = function () { - return 143 /* ConstructSignature */; - }; - return ConstructSignature; - })(AST); - TypeScript.ConstructSignature = ConstructSignature; - - var MethodSignature = (function (_super) { - __extends(MethodSignature, _super); - function MethodSignature(propertyName, questionToken, callSignature) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - } - MethodSignature.prototype.kind = function () { - return 145 /* MethodSignature */; - }; - return MethodSignature; - })(AST); - TypeScript.MethodSignature = MethodSignature; - - var IndexSignature = (function (_super) { - __extends(IndexSignature, _super); - function IndexSignature(parameter, typeAnnotation) { - _super.call(this); - this.parameter = parameter; - this.typeAnnotation = typeAnnotation; - parameter && (parameter.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - IndexSignature.prototype.kind = function () { - return 144 /* IndexSignature */; - }; - return IndexSignature; - })(AST); - TypeScript.IndexSignature = IndexSignature; - - var PropertySignature = (function (_super) { - __extends(PropertySignature, _super); - function PropertySignature(propertyName, questionToken, typeAnnotation) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - PropertySignature.prototype.kind = function () { - return 141 /* PropertySignature */; - }; - return PropertySignature; - })(AST); - TypeScript.PropertySignature = PropertySignature; - - var CallSignature = (function (_super) { - __extends(CallSignature, _super); - function CallSignature(typeParameterList, parameterList, typeAnnotation) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - CallSignature.prototype.kind = function () { - return 142 /* CallSignature */; - }; - return CallSignature; - })(AST); - TypeScript.CallSignature = CallSignature; - - var TypeParameter = (function (_super) { - __extends(TypeParameter, _super); - function TypeParameter(identifier, constraint) { - _super.call(this); - this.identifier = identifier; - this.constraint = constraint; - identifier && (identifier.parent = this); - constraint && (constraint.parent = this); - } - TypeParameter.prototype.kind = function () { - return 238 /* TypeParameter */; - }; - - TypeParameter.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.constraint, ast.constraint, includingPosition); - }; - return TypeParameter; - })(AST); - TypeScript.TypeParameter = TypeParameter; - - var Constraint = (function (_super) { - __extends(Constraint, _super); - function Constraint(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - Constraint.prototype.kind = function () { - return 239 /* Constraint */; - }; - return Constraint; - })(AST); - TypeScript.Constraint = Constraint; - - var ElseClause = (function (_super) { - __extends(ElseClause, _super); - function ElseClause(statement) { - _super.call(this); - this.statement = statement; - statement && (statement.parent = this); - } - ElseClause.prototype.kind = function () { - return 235 /* ElseClause */; - }; - - ElseClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ElseClause; - })(AST); - TypeScript.ElseClause = ElseClause; - - var IfStatement = (function (_super) { - __extends(IfStatement, _super); - function IfStatement(condition, statement, elseClause) { - _super.call(this); - this.condition = condition; - this.statement = statement; - this.elseClause = elseClause; - condition && (condition.parent = this); - statement && (statement.parent = this); - elseClause && (elseClause.parent = this); - } - IfStatement.prototype.kind = function () { - return 147 /* IfStatement */; - }; - - IfStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.elseClause, ast.elseClause, includingPosition); - }; - return IfStatement; - })(AST); - TypeScript.IfStatement = IfStatement; - - var ExpressionStatement = (function (_super) { - __extends(ExpressionStatement, _super); - function ExpressionStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ExpressionStatement.prototype.kind = function () { - return 149 /* ExpressionStatement */; - }; - - ExpressionStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ExpressionStatement; - })(AST); - TypeScript.ExpressionStatement = ExpressionStatement; - - var ConstructorDeclaration = (function (_super) { - __extends(ConstructorDeclaration, _super); - function ConstructorDeclaration(callSignature, block) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - ConstructorDeclaration.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; - }; - return ConstructorDeclaration; - })(AST); - TypeScript.ConstructorDeclaration = ConstructorDeclaration; - - var MemberFunctionDeclaration = (function (_super) { - __extends(MemberFunctionDeclaration, _super); - function MemberFunctionDeclaration(modifiers, propertyName, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - MemberFunctionDeclaration.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; - }; - return MemberFunctionDeclaration; - })(AST); - TypeScript.MemberFunctionDeclaration = MemberFunctionDeclaration; - - var GetAccessor = (function (_super) { - __extends(GetAccessor, _super); - function GetAccessor(modifiers, propertyName, parameterList, typeAnnotation, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - GetAccessor.prototype.kind = function () { - return 139 /* GetAccessor */; - }; - return GetAccessor; - })(AST); - TypeScript.GetAccessor = GetAccessor; - - var SetAccessor = (function (_super) { - __extends(SetAccessor, _super); - function SetAccessor(modifiers, propertyName, parameterList, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - block && (block.parent = this); - } - SetAccessor.prototype.kind = function () { - return 140 /* SetAccessor */; - }; - return SetAccessor; - })(AST); - TypeScript.SetAccessor = SetAccessor; - - var MemberVariableDeclaration = (function (_super) { - __extends(MemberVariableDeclaration, _super); - function MemberVariableDeclaration(modifiers, variableDeclarator) { - _super.call(this); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - variableDeclarator && (variableDeclarator.parent = this); - } - MemberVariableDeclaration.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; - }; - return MemberVariableDeclaration; - })(AST); - TypeScript.MemberVariableDeclaration = MemberVariableDeclaration; - - var IndexMemberDeclaration = (function (_super) { - __extends(IndexMemberDeclaration, _super); - function IndexMemberDeclaration(indexSignature) { - _super.call(this); - this.indexSignature = indexSignature; - indexSignature && (indexSignature.parent = this); - } - IndexMemberDeclaration.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; - }; - return IndexMemberDeclaration; - })(AST); - TypeScript.IndexMemberDeclaration = IndexMemberDeclaration; - - var ThrowStatement = (function (_super) { - __extends(ThrowStatement, _super); - function ThrowStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ThrowStatement.prototype.kind = function () { - return 157 /* ThrowStatement */; - }; - - ThrowStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ThrowStatement; - })(AST); - TypeScript.ThrowStatement = ThrowStatement; - - var ReturnStatement = (function (_super) { - __extends(ReturnStatement, _super); - function ReturnStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ReturnStatement.prototype.kind = function () { - return 150 /* ReturnStatement */; - }; - - ReturnStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return ReturnStatement; - })(AST); - TypeScript.ReturnStatement = ReturnStatement; - - var ObjectCreationExpression = (function (_super) { - __extends(ObjectCreationExpression, _super); - function ObjectCreationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - ObjectCreationExpression.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; - }; - - ObjectCreationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); - }; - - ObjectCreationExpression.prototype.isExpression = function () { - return true; - }; - return ObjectCreationExpression; - })(AST); - TypeScript.ObjectCreationExpression = ObjectCreationExpression; - - var SwitchStatement = (function (_super) { - __extends(SwitchStatement, _super); - function SwitchStatement(expression, closeParenToken, switchClauses) { - _super.call(this); - this.expression = expression; - this.closeParenToken = closeParenToken; - this.switchClauses = switchClauses; - expression && (expression.parent = this); - switchClauses && (switchClauses.parent = this); - } - SwitchStatement.prototype.kind = function () { - return 151 /* SwitchStatement */; - }; - - SwitchStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.switchClauses, ast.switchClauses, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - return SwitchStatement; - })(AST); - TypeScript.SwitchStatement = SwitchStatement; - - var CaseSwitchClause = (function (_super) { - __extends(CaseSwitchClause, _super); - function CaseSwitchClause(expression, statements) { - _super.call(this); - this.expression = expression; - this.statements = statements; - expression && (expression.parent = this); - statements && (statements.parent = this); - } - CaseSwitchClause.prototype.kind = function () { - return 233 /* CaseSwitchClause */; - }; - - CaseSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return CaseSwitchClause; - })(AST); - TypeScript.CaseSwitchClause = CaseSwitchClause; - - var DefaultSwitchClause = (function (_super) { - __extends(DefaultSwitchClause, _super); - function DefaultSwitchClause(statements) { - _super.call(this); - this.statements = statements; - statements && (statements.parent = this); - } - DefaultSwitchClause.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; - }; - - DefaultSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return DefaultSwitchClause; - })(AST); - TypeScript.DefaultSwitchClause = DefaultSwitchClause; - - var BreakStatement = (function (_super) { - __extends(BreakStatement, _super); - function BreakStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - BreakStatement.prototype.kind = function () { - return 152 /* BreakStatement */; - }; - - BreakStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return BreakStatement; - })(AST); - TypeScript.BreakStatement = BreakStatement; - - var ContinueStatement = (function (_super) { - __extends(ContinueStatement, _super); - function ContinueStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - ContinueStatement.prototype.kind = function () { - return 153 /* ContinueStatement */; - }; - - ContinueStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return ContinueStatement; - })(AST); - TypeScript.ContinueStatement = ContinueStatement; - - var ForStatement = (function (_super) { - __extends(ForStatement, _super); - function ForStatement(variableDeclaration, initializer, condition, incrementor, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.condition = condition; - this.incrementor = incrementor; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - initializer && (initializer.parent = this); - condition && (condition.parent = this); - incrementor && (incrementor.parent = this); - statement && (statement.parent = this); - } - ForStatement.prototype.kind = function () { - return 154 /* ForStatement */; - }; - - ForStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.initializer, ast.initializer, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.incrementor, ast.incrementor, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ForStatement; - })(AST); - TypeScript.ForStatement = ForStatement; - - var ForInStatement = (function (_super) { - __extends(ForInStatement, _super); - function ForInStatement(variableDeclaration, left, expression, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.left = left; - this.expression = expression; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - left && (left.parent = this); - expression && (expression.parent = this); - statement && (statement.parent = this); - } - ForInStatement.prototype.kind = function () { - return 155 /* ForInStatement */; - }; - - ForInStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.variableDeclaration, ast.variableDeclaration, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return ForInStatement; - })(AST); - TypeScript.ForInStatement = ForInStatement; - - var WhileStatement = (function (_super) { - __extends(WhileStatement, _super); - function WhileStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WhileStatement.prototype.kind = function () { - return 158 /* WhileStatement */; - }; - - WhileStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return WhileStatement; - })(AST); - TypeScript.WhileStatement = WhileStatement; - - var WithStatement = (function (_super) { - __extends(WithStatement, _super); - function WithStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WithStatement.prototype.kind = function () { - return 163 /* WithStatement */; - }; - - WithStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return WithStatement; - })(AST); - TypeScript.WithStatement = WithStatement; - - var EnumDeclaration = (function (_super) { - __extends(EnumDeclaration, _super); - function EnumDeclaration(modifiers, identifier, enumElements) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.enumElements = enumElements; - identifier && (identifier.parent = this); - enumElements && (enumElements.parent = this); - } - EnumDeclaration.prototype.kind = function () { - return 132 /* EnumDeclaration */; - }; - return EnumDeclaration; - })(AST); - TypeScript.EnumDeclaration = EnumDeclaration; - - var EnumElement = (function (_super) { - __extends(EnumElement, _super); - function EnumElement(propertyName, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - EnumElement.prototype.kind = function () { - return 243 /* EnumElement */; - }; - return EnumElement; - })(AST); - TypeScript.EnumElement = EnumElement; - - var CastExpression = (function (_super) { - __extends(CastExpression, _super); - function CastExpression(type, expression) { - _super.call(this); - this.type = type; - this.expression = expression; - type && (type.parent = this); - expression && (expression.parent = this); - } - CastExpression.prototype.kind = function () { - return 220 /* CastExpression */; - }; - - CastExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - CastExpression.prototype.isExpression = function () { - return true; - }; - return CastExpression; - })(AST); - TypeScript.CastExpression = CastExpression; - - var ObjectLiteralExpression = (function (_super) { - __extends(ObjectLiteralExpression, _super); - function ObjectLiteralExpression(propertyAssignments) { - _super.call(this); - this.propertyAssignments = propertyAssignments; - propertyAssignments && (propertyAssignments.parent = this); - } - ObjectLiteralExpression.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; - }; - - ObjectLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.propertyAssignments, ast.propertyAssignments, includingPosition); - }; - - ObjectLiteralExpression.prototype.isExpression = function () { - return true; - }; - return ObjectLiteralExpression; - })(AST); - TypeScript.ObjectLiteralExpression = ObjectLiteralExpression; - - var SimplePropertyAssignment = (function (_super) { - __extends(SimplePropertyAssignment, _super); - function SimplePropertyAssignment(propertyName, expression) { - _super.call(this); - this.propertyName = propertyName; - this.expression = expression; - propertyName && (propertyName.parent = this); - expression && (expression.parent = this); - } - SimplePropertyAssignment.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; - }; - return SimplePropertyAssignment; - })(AST); - TypeScript.SimplePropertyAssignment = SimplePropertyAssignment; - - var FunctionPropertyAssignment = (function (_super) { - __extends(FunctionPropertyAssignment, _super); - function FunctionPropertyAssignment(propertyName, callSignature, block) { - _super.call(this); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionPropertyAssignment.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; - }; - return FunctionPropertyAssignment; - })(AST); - TypeScript.FunctionPropertyAssignment = FunctionPropertyAssignment; - - var FunctionExpression = (function (_super) { - __extends(FunctionExpression, _super); - function FunctionExpression(identifier, callSignature, block) { - _super.call(this); - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionExpression.prototype.kind = function () { - return 222 /* FunctionExpression */; - }; - - FunctionExpression.prototype.isExpression = function () { - return true; - }; - return FunctionExpression; - })(AST); - TypeScript.FunctionExpression = FunctionExpression; - - var EmptyStatement = (function (_super) { - __extends(EmptyStatement, _super); - function EmptyStatement() { - _super.apply(this, arguments); - } - EmptyStatement.prototype.kind = function () { - return 156 /* EmptyStatement */; - }; - - EmptyStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - return EmptyStatement; - })(AST); - TypeScript.EmptyStatement = EmptyStatement; - - var TryStatement = (function (_super) { - __extends(TryStatement, _super); - function TryStatement(block, catchClause, finallyClause) { - _super.call(this); - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - block && (block.parent = this); - catchClause && (catchClause.parent = this); - finallyClause && (finallyClause.parent = this); - } - TryStatement.prototype.kind = function () { - return 159 /* TryStatement */; - }; - - TryStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.catchClause, ast.catchClause, includingPosition) && structuralEquals(this.finallyClause, ast.finallyClause, includingPosition); - }; - return TryStatement; - })(AST); - TypeScript.TryStatement = TryStatement; - - var CatchClause = (function (_super) { - __extends(CatchClause, _super); - function CatchClause(identifier, typeAnnotation, block) { - _super.call(this); - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.block = block; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - CatchClause.prototype.kind = function () { - return 236 /* CatchClause */; - }; - - CatchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.typeAnnotation, ast.typeAnnotation, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); - }; - return CatchClause; - })(AST); - TypeScript.CatchClause = CatchClause; - - var FinallyClause = (function (_super) { - __extends(FinallyClause, _super); - function FinallyClause(block) { - _super.call(this); - this.block = block; - block && (block.parent = this); - } - FinallyClause.prototype.kind = function () { - return 237 /* FinallyClause */; - }; - - FinallyClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); - }; - return FinallyClause; - })(AST); - TypeScript.FinallyClause = FinallyClause; - - var LabeledStatement = (function (_super) { - __extends(LabeledStatement, _super); - function LabeledStatement(identifier, statement) { - _super.call(this); - this.identifier = identifier; - this.statement = statement; - identifier && (identifier.parent = this); - statement && (statement.parent = this); - } - LabeledStatement.prototype.kind = function () { - return 160 /* LabeledStatement */; - }; - - LabeledStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); - }; - return LabeledStatement; - })(AST); - TypeScript.LabeledStatement = LabeledStatement; - - var DoStatement = (function (_super) { - __extends(DoStatement, _super); - function DoStatement(statement, whileKeyword, condition) { - _super.call(this); - this.statement = statement; - this.whileKeyword = whileKeyword; - this.condition = condition; - statement && (statement.parent = this); - condition && (condition.parent = this); - } - DoStatement.prototype.kind = function () { - return 161 /* DoStatement */; - }; - - DoStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition); - }; - return DoStatement; - })(AST); - TypeScript.DoStatement = DoStatement; - - var TypeOfExpression = (function (_super) { - __extends(TypeOfExpression, _super); - function TypeOfExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - TypeOfExpression.prototype.kind = function () { - return 171 /* TypeOfExpression */; - }; - - TypeOfExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - TypeOfExpression.prototype.isExpression = function () { - return true; - }; - return TypeOfExpression; - })(AST); - TypeScript.TypeOfExpression = TypeOfExpression; - - var DeleteExpression = (function (_super) { - __extends(DeleteExpression, _super); - function DeleteExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - DeleteExpression.prototype.kind = function () { - return 170 /* DeleteExpression */; - }; - - DeleteExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - DeleteExpression.prototype.isExpression = function () { - return true; - }; - return DeleteExpression; - })(AST); - TypeScript.DeleteExpression = DeleteExpression; - - var VoidExpression = (function (_super) { - __extends(VoidExpression, _super); - function VoidExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - VoidExpression.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - VoidExpression.prototype.isExpression = function () { - return true; - }; - return VoidExpression; - })(AST); - TypeScript.VoidExpression = VoidExpression; - - var DebuggerStatement = (function (_super) { - __extends(DebuggerStatement, _super); - function DebuggerStatement() { - _super.apply(this, arguments); - } - DebuggerStatement.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - return DebuggerStatement; - })(AST); - TypeScript.DebuggerStatement = DebuggerStatement; - - var Comment = (function () { - function Comment(_trivia, endsLine, _start, _end) { - this._trivia = _trivia; - this.endsLine = endsLine; - this._start = _start; - this._end = _end; - } - Comment.prototype.start = function () { - return this._start; - }; - - Comment.prototype.end = function () { - return this._end; - }; - - Comment.prototype.fullText = function () { - return this._trivia.fullText(); - }; - - Comment.prototype.kind = function () { - return this._trivia.kind(); - }; - - Comment.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { - return false; - } - } - - return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine; - }; - return Comment; - })(); - TypeScript.Comment = Comment; -})(TypeScript || (TypeScript = {})); -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement, fromIndex) { - "use strict"; - if (this == null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { - n = 0; - } else if (n != 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; -} - -if (!Array.prototype.filter) { - Array.prototype.filter = function (fun, thisp) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - if (fun.call(thisp, val, i, t)) - res.push(val); - } - } - - return res; - }; -} - -if (!Array.prototype.map) { - Array.prototype.map = function (callback, thisArg) { - var T = undefined, A, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } - - A = new Array(len); - - k = 0; - - while (k < len) { - var kValue, mappedValue; - - if (k in O) { - kValue = O[k]; - - mappedValue = callback.call(T, kValue, k, O); - - A[k] = mappedValue; - } - - k++; - } - - return A; - }; -} - -if (!Array.prototype.reduce) { - Array.prototype.reduce = function reduce(accumulator) { - if (this === null || this === undefined) - throw new TypeError("Object is null or undefined"); - var i = 0, l = this.length >> 0, curr; - - if (typeof accumulator !== "function") - throw new TypeError("First argument is not callable"); - - if (arguments.length < 2) { - if (l === 0) - throw new TypeError("Array length is 0 and no second argument"); - curr = this[0]; - i = 1; - } else - curr = arguments[1]; - - while (i < l) { - if (i in this) - curr = accumulator.call(undefined, curr, this[i], i, this); - ++i; - } - - return curr; - }; -} - -if (!Array.prototype.forEach) { - Array.prototype.forEach = function (callback, thisArg) { - var T, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } else { - T = undefined; - } - - k = 0; - - while (k < len) { - var kValue; - - if (k in O) { - kValue = O[k]; - - callback.call(T, kValue, k, O); - } - - k++; - } - }; -} - -if (!Date.now) { - Date.now = function () { - return (new Date()).getTime(); - }; -} - -if (!Array.prototype.some) { - Array.prototype.some = function (fun) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var thisp = arguments[1]; - for (var i = 0; i < len; i++) { - var idx = i.toString(); - if (idx in t && fun.call(thisp, t[i], i, t)) - return true; - } - - return false; - }; -} -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (EndOfLineState) { - EndOfLineState[EndOfLineState["Start"] = 0] = "Start"; - EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; - EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; - EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; - })(Services.EndOfLineState || (Services.EndOfLineState = {})); - var EndOfLineState = Services.EndOfLineState; - - (function (TokenClass) { - TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; - TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; - TokenClass[TokenClass["Operator"] = 2] = "Operator"; - TokenClass[TokenClass["Comment"] = 3] = "Comment"; - TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; - TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; - TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; - TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; - TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; - })(Services.TokenClass || (Services.TokenClass = {})); - var TokenClass = Services.TokenClass; - - var noRegexTable = []; - noRegexTable[11 /* IdentifierName */] = true; - noRegexTable[14 /* StringLiteral */] = true; - noRegexTable[13 /* NumericLiteral */] = true; - noRegexTable[12 /* RegularExpressionLiteral */] = true; - noRegexTable[35 /* ThisKeyword */] = true; - noRegexTable[93 /* PlusPlusToken */] = true; - noRegexTable[94 /* MinusMinusToken */] = true; - noRegexTable[73 /* CloseParenToken */] = true; - noRegexTable[75 /* CloseBracketToken */] = true; - noRegexTable[71 /* CloseBraceToken */] = true; - noRegexTable[37 /* TrueKeyword */] = true; - noRegexTable[24 /* FalseKeyword */] = true; - - var Classifier = (function () { - function Classifier(host) { - this.host = host; - this.characterWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - this.diagnostics = []; - } - Classifier.prototype.getClassificationsForLine = function (text, lexState) { - var offset = 0; - if (lexState !== 0 /* Start */) { - if (lexState === 3 /* InDoubleQuoteStringLiteral */) { - text = '"\\\n' + text; - } else if (lexState === 2 /* InSingleQuoteStringLiteral */) { - text = "'\\\n" + text; - } else if (lexState === 1 /* InMultiLineCommentTrivia */) { - text = "/*\n" + text; - } - - offset = 3; - } - - var result = new ClassificationResult(); - this.scanner = new TypeScript.Scanner("", TypeScript.SimpleText.fromString(text), 1 /* EcmaScript5 */, this.characterWindow); - - var lastTokenKind = 0 /* None */; - - while (this.scanner.absoluteIndex() < text.length) { - this.diagnostics.length = 0; - var token = this.scanner.scan(this.diagnostics, !noRegexTable[lastTokenKind]); - lastTokenKind = token.tokenKind; - - this.processToken(text, offset, token, result); - } - - return result; - }; - - Classifier.prototype.processToken = function (text, offset, token, result) { - this.processTriviaList(text, offset, token.leadingTrivia(), result); - this.addResult(text, offset, result, token.width(), token.tokenKind); - this.processTriviaList(text, offset, token.trailingTrivia(), result); - - if (this.scanner.absoluteIndex() >= text.length) { - if (this.diagnostics.length > 0) { - if (this.diagnostics[this.diagnostics.length - 1].diagnosticKey() === TypeScript.DiagnosticCode.AsteriskSlash_expected) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; - return; - } - } - - if (token.tokenKind === 14 /* StringLiteral */) { - var tokenText = token.text(); - if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { - var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; - return; - } - } - } - }; - - Classifier.prototype.processTriviaList = function (text, offset, triviaList, result) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - this.addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); - } - }; - - Classifier.prototype.addResult = function (text, offset, result, length, kind) { - if (length > 0) { - if (result.entries.length === 0) { - length -= offset; - } - - result.entries.push(new ClassificationInfo(length, this.classFromKind(kind))); - } - }; - - Classifier.prototype.classFromKind = function (kind) { - if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { - return 1 /* Keyword */; - } else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { - return 2 /* Operator */; - } else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return 0 /* Punctuation */; - } - - switch (kind) { - case 4 /* WhitespaceTrivia */: - return 4 /* Whitespace */; - case 6 /* MultiLineCommentTrivia */: - case 7 /* SingleLineCommentTrivia */: - return 3 /* Comment */; - case 13 /* NumericLiteral */: - return 6 /* NumberLiteral */; - case 14 /* StringLiteral */: - return 7 /* StringLiteral */; - case 12 /* RegularExpressionLiteral */: - return 8 /* RegExpLiteral */; - case 11 /* IdentifierName */: - default: - return 5 /* Identifier */; - } - }; - return Classifier; - })(); - Services.Classifier = Classifier; - - var ClassificationResult = (function () { - function ClassificationResult() { - this.finalLexState = 0 /* Start */; - this.entries = []; - } - return ClassificationResult; - })(); - Services.ClassificationResult = ClassificationResult; - - var ClassificationInfo = (function () { - function ClassificationInfo(length, classification) { - this.length = length; - this.classification = classification; - } - return ClassificationInfo; - })(); - Services.ClassificationInfo = ClassificationInfo; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - - - - - function logInternalError(logger, err) { - logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); - } - Services.logInternalError = logInternalError; - - var ReferenceEntry = (function () { - function ReferenceEntry(fileName, minChar, limChar, isWriteAccess) { - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.isWriteAccess = false; - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.isWriteAccess = isWriteAccess; - } - return ReferenceEntry; - })(); - Services.ReferenceEntry = ReferenceEntry; - - var NavigateToItem = (function () { - function NavigateToItem() { - this.name = ""; - this.kind = ""; - this.kindModifiers = ""; - this.matchKind = ""; - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.additionalSpans = null; - this.containerName = ""; - this.containerKind = ""; - } - return NavigateToItem; - })(); - Services.NavigateToItem = NavigateToItem; - - var TextEdit = (function () { - function TextEdit(minChar, limChar, text) { - this.minChar = minChar; - this.limChar = limChar; - this.text = text; - } - TextEdit.createInsert = function (pos, text) { - return new TextEdit(pos, pos, text); - }; - TextEdit.createDelete = function (minChar, limChar) { - return new TextEdit(minChar, limChar, ""); - }; - TextEdit.createReplace = function (minChar, limChar, text) { - return new TextEdit(minChar, limChar, text); - }; - return TextEdit; - })(); - Services.TextEdit = TextEdit; - - var EditorOptions = (function () { - function EditorOptions() { - this.IndentSize = 4; - this.TabSize = 4; - this.NewLineCharacter = "\r\n"; - this.ConvertTabsToSpaces = true; - } - EditorOptions.clone = function (objectToClone) { - var editorOptions = new EditorOptions(); - editorOptions.IndentSize = objectToClone.IndentSize; - editorOptions.TabSize = objectToClone.TabSize; - editorOptions.NewLineCharacter = objectToClone.NewLineCharacter; - editorOptions.ConvertTabsToSpaces = objectToClone.ConvertTabsToSpaces; - return editorOptions; - }; - return EditorOptions; - })(); - Services.EditorOptions = EditorOptions; - - var FormatCodeOptions = (function (_super) { - __extends(FormatCodeOptions, _super); - function FormatCodeOptions() { - _super.apply(this, arguments); - this.InsertSpaceAfterCommaDelimiter = true; - this.InsertSpaceAfterSemicolonInForStatements = true; - this.InsertSpaceBeforeAndAfterBinaryOperators = true; - this.InsertSpaceAfterKeywordsInControlFlowStatements = true; - this.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = false; - this.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = false; - this.PlaceOpenBraceOnNewLineForFunctions = false; - this.PlaceOpenBraceOnNewLineForControlBlocks = false; - } - FormatCodeOptions.clone = function (objectToClone) { - var formatCodeOptions = EditorOptions.clone(objectToClone); - formatCodeOptions.InsertSpaceAfterCommaDelimiter = objectToClone.InsertSpaceAfterCommaDelimiter; - formatCodeOptions.InsertSpaceAfterSemicolonInForStatements = objectToClone.InsertSpaceAfterSemicolonInForStatements; - formatCodeOptions.InsertSpaceBeforeAndAfterBinaryOperators = objectToClone.InsertSpaceBeforeAndAfterBinaryOperators; - formatCodeOptions.InsertSpaceAfterKeywordsInControlFlowStatements = objectToClone.InsertSpaceAfterKeywordsInControlFlowStatements; - formatCodeOptions.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = objectToClone.InsertSpaceAfterFunctionKeywordForAnonymousFunctions; - formatCodeOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = objectToClone.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis; - formatCodeOptions.PlaceOpenBraceOnNewLineForFunctions = objectToClone.PlaceOpenBraceOnNewLineForFunctions; - formatCodeOptions.PlaceOpenBraceOnNewLineForControlBlocks = objectToClone.PlaceOpenBraceOnNewLineForControlBlocks; - return formatCodeOptions; - }; - return FormatCodeOptions; - })(EditorOptions); - Services.FormatCodeOptions = FormatCodeOptions; - - var DefinitionInfo = (function () { - function DefinitionInfo(fileName, minChar, limChar, kind, name, containerKind, containerName) { - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.kind = kind; - this.name = name; - this.containerKind = containerKind; - this.containerName = containerName; - } - return DefinitionInfo; - })(); - Services.DefinitionInfo = DefinitionInfo; - - var TypeInfo = (function () { - function TypeInfo(memberName, docComment, fullSymbolName, kind, minChar, limChar) { - this.memberName = memberName; - this.docComment = docComment; - this.fullSymbolName = fullSymbolName; - this.kind = kind; - this.minChar = minChar; - this.limChar = limChar; - } - return TypeInfo; - })(); - Services.TypeInfo = TypeInfo; - - var SpanInfo = (function () { - function SpanInfo(minChar, limChar, text) { - if (typeof text === "undefined") { text = null; } - this.minChar = minChar; - this.limChar = limChar; - this.text = text; - } - return SpanInfo; - })(); - Services.SpanInfo = SpanInfo; - - var SignatureInfo = (function () { - function SignatureInfo() { - this.formal = []; - } - return SignatureInfo; - })(); - Services.SignatureInfo = SignatureInfo; - - var FormalSignatureItemInfo = (function () { - function FormalSignatureItemInfo() { - this.typeParameters = []; - this.parameters = []; - } - return FormalSignatureItemInfo; - })(); - Services.FormalSignatureItemInfo = FormalSignatureItemInfo; - - var FormalTypeParameterInfo = (function () { - function FormalTypeParameterInfo() { - } - return FormalTypeParameterInfo; - })(); - Services.FormalTypeParameterInfo = FormalTypeParameterInfo; - - var FormalParameterInfo = (function () { - function FormalParameterInfo() { - } - return FormalParameterInfo; - })(); - Services.FormalParameterInfo = FormalParameterInfo; - - var ActualSignatureInfo = (function () { - function ActualSignatureInfo() { - } - return ActualSignatureInfo; - })(); - Services.ActualSignatureInfo = ActualSignatureInfo; - - var CompletionInfo = (function () { - function CompletionInfo() { - this.maybeInaccurate = false; - this.isMemberCompletion = false; - this.entries = []; - } - return CompletionInfo; - })(); - Services.CompletionInfo = CompletionInfo; - - var ScriptElementKind = (function () { - function ScriptElementKind() { - } - ScriptElementKind.unknown = ""; - - ScriptElementKind.keyword = "keyword"; - - ScriptElementKind.scriptElement = "script"; - - ScriptElementKind.moduleElement = "module"; - - ScriptElementKind.classElement = "class"; - - ScriptElementKind.interfaceElement = "interface"; - - ScriptElementKind.enumElement = "enum"; - - ScriptElementKind.variableElement = "var"; - - ScriptElementKind.localVariableElement = "local var"; - - ScriptElementKind.functionElement = "function"; - - ScriptElementKind.localFunctionElement = "local function"; - - ScriptElementKind.memberFunctionElement = "method"; - - ScriptElementKind.memberGetAccessorElement = "getter"; - ScriptElementKind.memberSetAccessorElement = "setter"; - - ScriptElementKind.memberVariableElement = "property"; - - ScriptElementKind.constructorImplementationElement = "constructor"; - - ScriptElementKind.callSignatureElement = "call"; - - ScriptElementKind.indexSignatureElement = "index"; - - ScriptElementKind.constructSignatureElement = "construct"; - - ScriptElementKind.parameterElement = "parameter"; - - ScriptElementKind.typeParameterElement = "type parameter"; - - ScriptElementKind.primitiveType = "primitive type"; - return ScriptElementKind; - })(); - Services.ScriptElementKind = ScriptElementKind; - - var ScriptElementKindModifier = (function () { - function ScriptElementKindModifier() { - } - ScriptElementKindModifier.none = ""; - ScriptElementKindModifier.publicMemberModifier = "public"; - ScriptElementKindModifier.privateMemberModifier = "private"; - ScriptElementKindModifier.exportedModifier = "export"; - ScriptElementKindModifier.ambientModifier = "declare"; - ScriptElementKindModifier.staticModifier = "static"; - return ScriptElementKindModifier; - })(); - Services.ScriptElementKindModifier = ScriptElementKindModifier; - - var MatchKind = (function () { - function MatchKind() { - } - MatchKind.none = null; - MatchKind.exact = "exact"; - MatchKind.subString = "substring"; - MatchKind.prefix = "prefix"; - return MatchKind; - })(); - Services.MatchKind = MatchKind; - - var DiagnosticCategory = (function () { - function DiagnosticCategory() { - } - DiagnosticCategory.none = ""; - DiagnosticCategory.error = "error"; - DiagnosticCategory.warning = "warning"; - DiagnosticCategory.message = "message"; - return DiagnosticCategory; - })(); - Services.DiagnosticCategory = DiagnosticCategory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshot = (function () { - function TextSnapshot(snapshot) { - this.snapshot = snapshot; - this.lines = []; - } - TextSnapshot.prototype.getText = function (span) { - return this.snapshot.substr(span.start(), span.length(), false); - }; - - TextSnapshot.prototype.getLineNumberFromPosition = function (position) { - return this.snapshot.lineMap().getLineNumberFromPosition(position); - }; - - TextSnapshot.prototype.getLineFromPosition = function (position) { - var lineNumber = this.getLineNumberFromPosition(position); - return this.getLineFromLineNumber(lineNumber); - }; - - TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) { - var line = this.lines[lineNumber]; - if (line === undefined) { - line = this.getLineFromLineNumberWorker(lineNumber); - this.lines[lineNumber] = line; - } - return line; - }; - - TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) { - var lineMap = this.snapshot.lineMap().lineStarts(); - var lineMapIndex = lineNumber; - if (lineMapIndex < 0 || lineMapIndex >= lineMap.length) - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex])); - var start = lineMap[lineMapIndex]; - - var end; - var endIncludingLineBreak; - var lineBreak = ""; - if (lineMapIndex == lineMap.length) { - end = endIncludingLineBreak = this.snapshot.length(); - } else { - endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]); - for (var p = endIncludingLineBreak - 1; p >= start; p--) { - var c = this.snapshot.substr(p, 1, false); - - if (c != "\r" && c != "\n") { - break; - } - } - end = p + 1; - lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end, false); - } - var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak); - return result; - }; - return TextSnapshot; - })(); - Formatting.TextSnapshot = TextSnapshot; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshotLine = (function () { - function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) { - this._snapshot = _snapshot; - this._lineNumber = _lineNumber; - this._start = _start; - this._end = _end; - this._lineBreak = _lineBreak; - } - TextSnapshotLine.prototype.snapshot = function () { - return this._snapshot; - }; - - TextSnapshotLine.prototype.start = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._start); - }; - - TextSnapshotLine.prototype.startPosition = function () { - return this._start; - }; - - TextSnapshotLine.prototype.end = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end); - }; - - TextSnapshotLine.prototype.endPosition = function () { - return this._end; - }; - - TextSnapshotLine.prototype.endIncludingLineBreak = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length); - }; - - TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () { - return this._end + this._lineBreak.length; - }; - - TextSnapshotLine.prototype.length = function () { - return this._end - this._start; - }; - - TextSnapshotLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - - TextSnapshotLine.prototype.getText = function () { - return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end)); - }; - return TextSnapshotLine; - })(); - Formatting.TextSnapshotLine = TextSnapshotLine; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SnapshotPoint = (function () { - function SnapshotPoint(snapshot, position) { - this.snapshot = snapshot; - this.position = position; - } - SnapshotPoint.prototype.getContainingLine = function () { - return this.snapshot.getLineFromPosition(this.position); - }; - SnapshotPoint.prototype.add = function (offset) { - return new SnapshotPoint(this.snapshot, this.position + offset); - }; - return SnapshotPoint; - })(); - Formatting.SnapshotPoint = SnapshotPoint; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingContext = (function () { - function FormattingContext(snapshot, formattingRequestKind) { - this.snapshot = snapshot; - this.formattingRequestKind = formattingRequestKind; - this.currentTokenSpan = null; - this.nextTokenSpan = null; - this.contextNode = null; - this.currentTokenParent = null; - this.nextTokenParent = null; - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - TypeScript.Debug.assert(this.snapshot != null, "snapshot is null"); - } - FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) { - TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null"); - TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null"); - TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null"); - TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null"); - TypeScript.Debug.assert(commonParent != null, "commonParent is null"); - - this.currentTokenSpan = currentTokenSpan; - this.currentTokenParent = currentTokenParent; - this.nextTokenSpan = nextTokenSpan; - this.nextTokenParent = nextTokenParent; - this.contextNode = commonParent; - - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - }; - - FormattingContext.prototype.ContextNodeAllOnSameLine = function () { - if (this.contextNodeAllOnSameLine === null) { - this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); - } - - return this.contextNodeAllOnSameLine; - }; - - FormattingContext.prototype.NextNodeAllOnSameLine = function () { - if (this.nextNodeAllOnSameLine === null) { - this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); - } - - return this.nextNodeAllOnSameLine; - }; - - FormattingContext.prototype.TokensAreOnSameLine = function () { - if (this.tokensAreOnSameLine === null) { - var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start()); - var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start()); - - this.tokensAreOnSameLine = (startLine == endLine); - } - - return this.tokensAreOnSameLine; - }; - - FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { - if (this.contextNodeBlockIsOnOneLine === null) { - this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); - } - - return this.contextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { - if (this.nextNodeBlockIsOnOneLine === null) { - this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); - } - - return this.nextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NodeIsOnOneLine = function (node) { - var startLine = this.snapshot.getLineNumberFromPosition(node.start()); - var endLine = this.snapshot.getLineNumberFromPosition(node.end()); - - return startLine == endLine; - }; - - FormattingContext.prototype.BlockIsOnOneLine = function (node) { - var start = node.fullStart(); - var block = node.node(); - var openBracePosition = start + TypeScript.Syntax.childOffset(block, block.openBraceToken); - var closeBracePosition = start + TypeScript.Syntax.childOffset(block, block.closeBraceToken); - - var startLine = this.snapshot.getLineNumberFromPosition(openBracePosition); - var endLine = this.snapshot.getLineNumberFromPosition(closeBracePosition); - - return startLine == endLine; - }; - return FormattingContext; - })(); - Formatting.FormattingContext = FormattingContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingManager = (function () { - function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) { - this.syntaxTree = syntaxTree; - this.snapshot = snapshot; - this.rulesProvider = rulesProvider; - this.options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); - } - FormattingManager.prototype.formatSelection = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 1 /* FormatSelection */); - }; - - FormattingManager.prototype.formatDocument = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 0 /* FormatDocument */); - }; - - FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 5 /* FormatOnPaste */); - }; - - FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var semicolonPositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (semicolonPositionedToken.kind() === 78 /* SemicolonToken */) { - var current = semicolonPositionedToken; - while (current.parent() !== null && current.parent().end() === semicolonPositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); - } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 3 /* FormatOnSemicolon */); - } - - return []; - }; - - FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var closeBracePositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (closeBracePositionedToken.kind() === 71 /* CloseBraceToken */) { - var current = closeBracePositionedToken; - while (current.parent() !== null && current.parent().end() === closeBracePositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); - } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */); - } - - return []; - }; - - FormattingManager.prototype.formatOnEnter = function (caretPosition) { - var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); - - if (lineNumber > 0) { - var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1); - var currentLine = this.snapshot.getLineFromLineNumber(lineNumber); - var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition()); - - return this.formatSpan(span, 2 /* FormatOnEnter */); - } - - return []; - }; - - FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) { - var startLine = this.snapshot.getLineFromPosition(span.start()); - span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end()); - - var result = []; - - var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); - - formattingEdits.forEach(function (item) { - var edit = new TypeScript.Services.TextEdit(item.position, item.position + item.length, item.replaceWith); - result.push(edit); - }); - - return result; - }; - return FormattingManager; - })(); - Formatting.FormattingManager = FormattingManager; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (FormattingRequestKind) { - FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; - FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; - FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; - FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; - FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace"; - FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste"; - })(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {})); - var FormattingRequestKind = Formatting.FormattingRequestKind; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rule = (function () { - function Rule(Descriptor, Operation, Flag) { - if (typeof Flag === "undefined") { Flag = 0 /* None */; } - this.Descriptor = Descriptor; - this.Operation = Operation; - this.Flag = Flag; - } - Rule.prototype.toString = function () { - return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]"; - }; - return Rule; - })(); - Formatting.Rule = Rule; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleAction) { - RuleAction[RuleAction["Ignore"] = 0] = "Ignore"; - RuleAction[RuleAction["Space"] = 1] = "Space"; - RuleAction[RuleAction["NewLine"] = 2] = "NewLine"; - RuleAction[RuleAction["Delete"] = 3] = "Delete"; - })(Formatting.RuleAction || (Formatting.RuleAction = {})); - var RuleAction = Formatting.RuleAction; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleDescriptor = (function () { - function RuleDescriptor(LeftTokenRange, RightTokenRange) { - this.LeftTokenRange = LeftTokenRange; - this.RightTokenRange = RightTokenRange; - } - RuleDescriptor.prototype.toString = function () { - return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]"; - }; - - RuleDescriptor.create1 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create2 = function (left, right) { - return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create3 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right); - }; - - RuleDescriptor.create4 = function (left, right) { - return new RuleDescriptor(left, right); - }; - return RuleDescriptor; - })(); - Formatting.RuleDescriptor = RuleDescriptor; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleFlags) { - RuleFlags[RuleFlags["None"] = 0] = "None"; - RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; - })(Formatting.RuleFlags || (Formatting.RuleFlags = {})); - var RuleFlags = Formatting.RuleFlags; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperation = (function () { - function RuleOperation() { - this.Context = null; - this.Action = null; - } - RuleOperation.prototype.toString = function () { - return "[context=" + this.Context + "," + "action=" + this.Action + "]"; - }; - - RuleOperation.create1 = function (action) { - return RuleOperation.create2(Formatting.RuleOperationContext.Any, action); - }; - - RuleOperation.create2 = function (context, action) { - var result = new RuleOperation(); - result.Context = context; - result.Action = action; - return result; - }; - return RuleOperation; - })(); - Formatting.RuleOperation = RuleOperation; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperationContext = (function () { - function RuleOperationContext() { - var funcs = []; - for (var _i = 0; _i < (arguments.length - 0); _i++) { - funcs[_i] = arguments[_i + 0]; - } - this.customContextChecks = funcs; - } - RuleOperationContext.prototype.IsAny = function () { - { - return this == RuleOperationContext.Any; - } - }; - - RuleOperationContext.prototype.InContext = function (context) { - if (this.IsAny()) { - return true; - } - - for (var i = 0, len = this.customContextChecks.length; i < len; i++) { - if (!this.customContextChecks[i](context)) { - return false; - } - } - return true; - }; - RuleOperationContext.Any = new RuleOperationContext(); - return RuleOperationContext; - })(); - Formatting.RuleOperationContext = RuleOperationContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rules = (function () { - function Rules() { - this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */)); - this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(7 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */)); - - this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 106 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 105 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(106 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */)); - - this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 23 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 42 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 75 /* CloseBracketToken */, 79 /* CommaToken */, 78 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(75 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments; - this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([11 /* IdentifierName */, 6 /* MultiLineCommentTrivia */]); - this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 6 /* MultiLineCommentTrivia */, 22 /* DoKeyword */, 38 /* TryKeyword */, 25 /* FinallyKeyword */, 23 /* ElseKeyword */]); - this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */)); - - this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(93 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(94 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(93 /* PlusPlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(94 /* MinusMinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 79 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([40 /* VarKeyword */, 36 /* ThrowKeyword */, 31 /* NewKeyword */, 21 /* DeleteKeyword */, 33 /* ReturnKeyword */, 39 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */)); - this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(27 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */)); - this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(41 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */)); - - this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(33 /* ReturnKeyword */, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 22 /* DoKeyword */, 23 /* ElseKeyword */, 16 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */)); - - this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([38 /* TryKeyword */, 25 /* FinallyKeyword */]), 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([64 /* GetKeyword */, 68 /* SetKeyword */]), 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - - this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(62 /* ConstructorKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([65 /* ModuleKeyword */, 66 /* RequireKeyword */]), 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([44 /* ClassKeyword */, 63 /* DeclareKeyword */, 46 /* EnumKeyword */, 47 /* ExportKeyword */, 48 /* ExtendsKeyword */, 64 /* GetKeyword */, 51 /* ImplementsKeyword */, 49 /* ImportKeyword */, 52 /* InterfaceKeyword */, 65 /* ModuleKeyword */, 55 /* PrivateKeyword */, 57 /* PublicKeyword */, 68 /* SetKeyword */, 58 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([48 /* ExtendsKeyword */, 51 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(14 /* StringLiteral */, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */)); - - this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(85 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(77 /* DotDotDotToken */, 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - - this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseParenToken */, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([72 /* OpenParenToken */, 74 /* OpenBracketToken */, 81 /* GreaterThanToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - - this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */)); - - this.HighPriorityCommonRules = [ - this.IgnoreBeforeComment, this.IgnoreAfterLineComment, - this.NoSpaceBeforeColon, this.SpaceAfterColon, this.NoSpaceBeforeQMark, this.SpaceAfterQMark, - this.NoSpaceBeforeDot, this.NoSpaceAfterDot, - this.NoSpaceAfterUnaryPrefixOperator, - this.NoSpaceAfterUnaryPreincrementOperator, this.NoSpaceAfterUnaryPredecrementOperator, - this.NoSpaceBeforeUnaryPostincrementOperator, this.NoSpaceBeforeUnaryPostdecrementOperator, - this.SpaceAfterPostincrementWhenFollowedByAdd, - this.SpaceAfterAddWhenFollowedByUnaryPlus, this.SpaceAfterAddWhenFollowedByPreincrement, - this.SpaceAfterPostdecrementWhenFollowedBySubtract, - this.SpaceAfterSubtractWhenFollowedByUnaryMinus, this.SpaceAfterSubtractWhenFollowedByPredecrement, - this.NoSpaceAfterCloseBrace, - this.SpaceAfterOpenBrace, this.SpaceBeforeCloseBrace, this.NewLineBeforeCloseBraceInBlockContext, - this.SpaceAfterCloseBrace, this.SpaceBetweenCloseBraceAndElse, this.SpaceBetweenCloseBraceAndWhile, this.NoSpaceBetweenEmptyBraceBrackets, - this.SpaceAfterFunctionInFuncDecl, this.NewLineAfterOpenBraceInBlockContext, this.SpaceAfterGetSetInMember, - this.NoSpaceBetweenReturnAndSemicolon, - this.SpaceAfterCertainKeywords, - this.NoSpaceBeforeOpenParenInFuncCall, - this.SpaceBeforeBinaryKeywordOperator, this.SpaceAfterBinaryKeywordOperator, - this.SpaceAfterVoidOperator, - this.NoSpaceAfterConstructor, this.NoSpaceAfterModuleImport, - this.SpaceAfterCertainTypeScriptKeywords, this.SpaceBeforeCertainTypeScriptKeywords, - this.SpaceAfterModuleName, - this.SpaceAfterArrow, - this.NoSpaceAfterEllipsis, - this.NoSpaceAfterOptionalParameters, - this.NoSpaceBetweenEmptyInterfaceBraceBrackets, - this.NoSpaceBeforeOpenAngularBracket, - this.NoSpaceBetweenCloseParenAndAngularBracket, - this.NoSpaceAfterOpenAngularBracket, - this.NoSpaceBeforeCloseAngularBracket, - this.NoSpaceAfterCloseAngularBracket - ]; - - this.LowPriorityCommonRules = [ - this.NoSpaceBeforeSemicolon, - this.SpaceBeforeOpenBraceInControl, this.SpaceBeforeOpenBraceInFunction, this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, - this.NoSpaceBeforeComma, - this.NoSpaceBeforeOpenBracket, this.NoSpaceAfterOpenBracket, - this.NoSpaceBeforeCloseBracket, this.NoSpaceAfterCloseBracket, - this.SpaceAfterSemicolon, - this.NoSpaceBeforeOpenParenInFuncDecl, - this.SpaceBetweenStatements, this.SpaceAfterTryFinally - ]; - - this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - - this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */)); - this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */)); - - this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */)); - this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */)); - - this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenParenToken */, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */)); - } - Rules.prototype.getRuleName = function (rule) { - var o = this; - for (var name in o) { - if (o[name] === rule) { - return name; - } - } - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null)); - }; - - Rules.IsForContext = function (context) { - return context.contextNode.kind() === 154 /* ForStatement */; - }; - - Rules.IsNotForContext = function (context) { - return !Rules.IsForContext(context); - }; - - Rules.IsBinaryOpContext = function (context) { - switch (context.contextNode.kind()) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 186 /* ConditionalExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return true; - - case 133 /* ImportDeclaration */: - - case 225 /* VariableDeclarator */: - case 232 /* EqualsValueClause */: - return context.currentTokenSpan.kind() === 107 /* EqualsToken */ || context.nextTokenSpan.kind() === 107 /* EqualsToken */; - - case 155 /* ForInStatement */: - return context.currentTokenSpan.kind() === 29 /* InKeyword */ || context.nextTokenSpan.kind() === 29 /* InKeyword */; - } - return false; - }; - - Rules.IsNotBinaryOpContext = function (context) { - return !Rules.IsBinaryOpContext(context); - }; - - Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { - return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); - }; - - Rules.IsBeforeMultilineBlockContext = function (context) { - return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); - }; - - Rules.IsMultilineBlockContext = function (context) { - return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsSingleLineBlockContext = function (context) { - return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.contextNode); - }; - - Rules.IsBeforeBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.nextTokenParent); - }; - - Rules.NodeIsBlockContext = function (node) { - if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { - return true; - } - - switch (node.kind()) { - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - return true; - } - - return false; - }; - - Rules.IsFunctionDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 145 /* MethodSignature */: - case 142 /* CallSignature */: - case 222 /* FunctionExpression */: - case 137 /* ConstructorDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 128 /* InterfaceDeclaration */: - return true; - } - - return false; - }; - - Rules.IsTypeScriptDeclWithBlockContext = function (context) { - return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); - }; - - Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { - switch (node.kind()) { - case 131 /* ClassDeclaration */: - case 132 /* EnumDeclaration */: - case 122 /* ObjectType */: - case 130 /* ModuleDeclaration */: - return true; - } - - return false; - }; - - Rules.IsAfterCodeBlockContext = function (context) { - switch (context.currentTokenParent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: - return true; - } - return false; - }; - - Rules.IsControlDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 147 /* IfStatement */: - case 151 /* SwitchStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 159 /* TryStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 235 /* ElseClause */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - return true; - - default: - return false; - } - }; - - Rules.IsObjectContext = function (context) { - return context.contextNode.kind() === 215 /* ObjectLiteralExpression */; - }; - - Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind() === 213 /* InvocationExpression */; - }; - - Rules.IsNewContext = function (context) { - return context.contextNode.kind() === 216 /* ObjectCreationExpression */; - }; - - Rules.IsFunctionCallOrNewContext = function (context) { - return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); - }; - - Rules.IsSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine(); - }; - - Rules.IsNotFormatOnEnter = function (context) { - return context.formattingRequestKind != 2 /* FormatOnEnter */; - }; - - Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind() === 130 /* ModuleDeclaration */; - }; - - Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind() === 122 /* ObjectType */ && context.contextNode.parent().kind() !== 128 /* InterfaceDeclaration */; - }; - - Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) { - return ((tokenKind === 80 /* LessThanToken */ || tokenKind === 81 /* GreaterThanToken */) && (parentKind === 229 /* TypeParameterList */ || parentKind === 228 /* TypeArgumentList */)); - }; - - Rules.IsTypeArgumentOrParameterContext = function (context) { - return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind(), context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind(), context.nextTokenParent.kind()); - }; - - Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind() === 41 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */; - }; - return Rules; - })(); - Formatting.Rules = Rules; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesMap = (function () { - function RulesMap() { - this.map = []; - this.mapRowLength = 0; - } - RulesMap.create = function (rules) { - var result = new RulesMap(); - result.Initialize(rules); - return result; - }; - - RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 119 /* LastToken */ + 1; - this.map = new Array(this.mapRowLength * this.mapRowLength); - - var rulesBucketConstructionStateList = new Array(this.map.length); - - this.FillRules(rules, rulesBucketConstructionStateList); - return this.map; - }; - - RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { - var _this = this; - rules.forEach(function (rule) { - _this.FillRule(rule, rulesBucketConstructionStateList); - }); - }; - - RulesMap.prototype.GetRuleBucketIndex = function (row, column) { - var rulesBucketIndex = (row * this.mapRowLength) + column; - - return rulesBucketIndex; - }; - - RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { - var _this = this; - var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any; - - rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { - rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { - var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); - - var rulesBucket = _this.map[rulesBucketIndex]; - if (rulesBucket == undefined) { - rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); - } - - rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); - }); - }); - }; - - RulesMap.prototype.GetRule = function (context) { - var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind(), context.nextTokenSpan.kind()); - var bucket = this.map[bucketIndex]; - if (bucket != null) { - for (var i = 0, len = bucket.Rules().length; i < len; i++) { - var rule = bucket.Rules()[i]; - if (rule.Operation.Context.InContext(context)) - return rule; - } - } - return null; - }; - return RulesMap; - })(); - Formatting.RulesMap = RulesMap; - - var MaskBitSize = 5; - var Mask = 0x1f; - - (function (RulesPosition) { - RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; - RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; - RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; - RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; - RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; - RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; - })(Formatting.RulesPosition || (Formatting.RulesPosition = {})); - var RulesPosition = Formatting.RulesPosition; - - var RulesBucketConstructionState = (function () { - function RulesBucketConstructionState() { - this.rulesInsertionIndexBitmap = 0; - } - RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { - var index = 0; - - var pos = 0; - var indexBitmap = this.rulesInsertionIndexBitmap; - - while (pos <= maskPosition) { - index += (indexBitmap & Mask); - indexBitmap >>= MaskBitSize; - pos += MaskBitSize; - } - - return index; - }; - - RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { - var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; - value++; - TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); - - var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); - temp |= value << maskPosition; - - this.rulesInsertionIndexBitmap = temp; - }; - return RulesBucketConstructionState; - })(); - Formatting.RulesBucketConstructionState = RulesBucketConstructionState; - - var RulesBucket = (function () { - function RulesBucket() { - this.rules = []; - } - RulesBucket.prototype.Rules = function () { - return this.rules; - }; - - RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { - var position; - - if (rule.Operation.Action == 0 /* Ignore */) { - position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; - } else if (!rule.Operation.Context.IsAny()) { - position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; - } else { - position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; - } - - var state = constructionState[rulesBucketIndex]; - if (state === undefined) { - state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); - } - var index = state.GetInsertionIndex(position); - this.rules.splice(index, 0, rule); - state.IncreaseInsertionIndex(position); - }; - return RulesBucket; - })(); - Formatting.RulesBucket = RulesBucket; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesProvider = (function () { - function RulesProvider(logger) { - this.logger = logger; - this.globalRules = new Formatting.Rules(); - } - RulesProvider.prototype.getRuleName = function (rule) { - return this.globalRules.getRuleName(rule); - }; - - RulesProvider.prototype.getRuleByName = function (name) { - return this.globalRules[name]; - }; - - RulesProvider.prototype.getRulesMap = function () { - return this.rulesMap; - }; - - RulesProvider.prototype.ensureUpToDate = function (options) { - var _this = this; - if (this.options == null || !TypeScript.compareDataObjects(this.options, options)) { - var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { - return _this.createActiveRules(options); - }); - var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { - return Formatting.RulesMap.create(activeRules); - }); - - this.activeRules = activeRules; - this.rulesMap = rulesMap; - this.options = TypeScript.Services.FormatCodeOptions.clone(options); - } - }; - - RulesProvider.prototype.createActiveRules = function (options) { - var rules = this.globalRules.HighPriorityCommonRules.slice(0); - - if (options.InsertSpaceAfterCommaDelimiter) { - rules.push(this.globalRules.SpaceAfterComma); - } else { - rules.push(this.globalRules.NoSpaceAfterComma); - } - - if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { - rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); - } else { - rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); - } - - if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { - rules.push(this.globalRules.SpaceAfterKeywordInControl); - } else { - rules.push(this.globalRules.NoSpaceAfterKeywordInControl); - } - - if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { - rules.push(this.globalRules.SpaceAfterOpenParen); - rules.push(this.globalRules.SpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); - } else { - rules.push(this.globalRules.NoSpaceAfterOpenParen); - rules.push(this.globalRules.NoSpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); - } - - if (options.InsertSpaceAfterSemicolonInForStatements) { - rules.push(this.globalRules.SpaceAfterSemicolonInFor); - } else { - rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); - } - - if (options.InsertSpaceBeforeAndAfterBinaryOperators) { - rules.push(this.globalRules.SpaceBeforeBinaryOperator); - rules.push(this.globalRules.SpaceAfterBinaryOperator); - } else { - rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); - rules.push(this.globalRules.NoSpaceAfterBinaryOperator); - } - - if (options.PlaceOpenBraceOnNewLineForControlBlocks) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); - } - - if (options.PlaceOpenBraceOnNewLineForFunctions) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); - rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); - } - - rules = rules.concat(this.globalRules.LowPriorityCommonRules); - - return rules; - }; - return RulesProvider; - })(); - Formatting.RulesProvider = RulesProvider; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextEditInfo = (function () { - function TextEditInfo(position, length, replaceWith) { - this.position = position; - this.length = length; - this.replaceWith = replaceWith; - } - TextEditInfo.prototype.toString = function () { - return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]"; - }; - return TextEditInfo; - })(); - Formatting.TextEditInfo = TextEditInfo; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (Shared) { - var TokenRangeAccess = (function () { - function TokenRangeAccess(from, to, except) { - this.tokens = []; - for (var token = from; token <= to; token++) { - if (except.indexOf(token) < 0) { - this.tokens.push(token); - } - } - } - TokenRangeAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenRangeAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - - TokenRangeAccess.prototype.toString = function () { - return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]"; - }; - return TokenRangeAccess; - })(); - Shared.TokenRangeAccess = TokenRangeAccess; - - var TokenValuesAccess = (function () { - function TokenValuesAccess(tks) { - this.tokens = tks && tks.length ? tks : []; - } - TokenValuesAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenValuesAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - return TokenValuesAccess; - })(); - Shared.TokenValuesAccess = TokenValuesAccess; - - var TokenSingleValueAccess = (function () { - function TokenSingleValueAccess(token) { - this.token = token; - } - TokenSingleValueAccess.prototype.GetTokens = function () { - return [this.token]; - }; - - TokenSingleValueAccess.prototype.Contains = function (tokenValue) { - return tokenValue == this.token; - }; - - TokenSingleValueAccess.prototype.toString = function () { - return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]"; - }; - return TokenSingleValueAccess; - })(); - Shared.TokenSingleValueAccess = TokenSingleValueAccess; - - var TokenAllAccess = (function () { - function TokenAllAccess() { - } - TokenAllAccess.prototype.GetTokens = function () { - var result = []; - for (var token = 9 /* FirstToken */; token <= 119 /* LastToken */; token++) { - result.push(token); - } - return result; - }; - - TokenAllAccess.prototype.Contains = function (tokenValue) { - return true; - }; - - TokenAllAccess.prototype.toString = function () { - return "[allTokens]"; - }; - return TokenAllAccess; - })(); - Shared.TokenAllAccess = TokenAllAccess; - - var TokenRange = (function () { - function TokenRange(tokenAccess) { - this.tokenAccess = tokenAccess; - } - TokenRange.FromToken = function (token) { - return new TokenRange(new TokenSingleValueAccess(token)); - }; - - TokenRange.FromTokens = function (tokens) { - return new TokenRange(new TokenValuesAccess(tokens)); - }; - - TokenRange.FromRange = function (f, to, except) { - if (typeof except === "undefined") { except = []; } - return new TokenRange(new TokenRangeAccess(f, to, except)); - }; - - TokenRange.AllTokens = function () { - return new TokenRange(new TokenAllAccess()); - }; - - TokenRange.prototype.GetTokens = function () { - return this.tokenAccess.GetTokens(); - }; - - TokenRange.prototype.Contains = function (token) { - return this.tokenAccess.Contains(token); - }; - - TokenRange.prototype.toString = function () { - return this.tokenAccess.toString(); - }; - - TokenRange.Any = TokenRange.AllTokens(); - TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([6 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(15 /* FirstKeyword */, 69 /* LastKeyword */); - TokenRange.Operators = TokenRange.FromRange(78 /* SemicolonToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryOperators = TokenRange.FromRange(80 /* LessThanToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([29 /* InKeyword */, 30 /* InstanceOfKeyword */]); - TokenRange.ReservedKeywords = TokenRange.FromRange(51 /* FirstFutureReservedStrictKeyword */, 59 /* LastFutureReservedStrictKeyword */); - TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([93 /* PlusPlusToken */, 94 /* MinusMinusToken */, 102 /* TildeToken */, 101 /* ExclamationToken */]); - TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([13 /* NumericLiteral */, 11 /* IdentifierName */, 72 /* OpenParenToken */, 74 /* OpenBracketToken */, 70 /* OpenBraceToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.Comments = TokenRange.FromTokens([7 /* SingleLineCommentTrivia */, 6 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([11 /* IdentifierName */, 67 /* NumberKeyword */, 69 /* StringKeyword */, 61 /* BooleanKeyword */, 41 /* VoidKeyword */, 60 /* AnyKeyword */]); - return TokenRange; - })(); - Shared.TokenRange = TokenRange; - })(Formatting.Shared || (Formatting.Shared = {})); - var Shared = Formatting.Shared; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TokenSpan = (function (_super) { - __extends(TokenSpan, _super); - function TokenSpan(kind, start, length) { - _super.call(this, start, length); - this._kind = kind; - } - TokenSpan.prototype.kind = function () { - return this._kind; - }; - return TokenSpan; - })(TypeScript.TextSpan); - Formatting.TokenSpan = TokenSpan; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContext = (function () { - function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta); - } - IndentationNodeContext.prototype.parent = function () { - return this._parent; - }; - - IndentationNodeContext.prototype.node = function () { - return this._node; - }; - - IndentationNodeContext.prototype.fullStart = function () { - return this._fullStart; - }; - - IndentationNodeContext.prototype.fullWidth = function () { - return this._node.fullWidth(); - }; - - IndentationNodeContext.prototype.start = function () { - return this._fullStart + this._node.leadingTriviaWidth(); - }; - - IndentationNodeContext.prototype.end = function () { - return this._fullStart + this._node.leadingTriviaWidth() + this._node.width(); - }; - - IndentationNodeContext.prototype.indentationAmount = function () { - return this._indentationAmount; - }; - - IndentationNodeContext.prototype.childIndentationAmountDelta = function () { - return this._childIndentationAmountDelta; - }; - - IndentationNodeContext.prototype.depth = function () { - return this._depth; - }; - - IndentationNodeContext.prototype.kind = function () { - return this._node.kind(); - }; - - IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () { - if (this._hasSkippedOrMissingTokenChild === null) { - this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node); - } - return this._hasSkippedOrMissingTokenChild; - }; - - IndentationNodeContext.prototype.clone = function (pool) { - var parent = null; - if (this._parent) { - parent = this._parent.clone(pool); - } - return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta); - }; - - IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this._parent = parent; - this._node = node; - this._fullStart = fullStart; - this._indentationAmount = indentationAmount; - this._childIndentationAmountDelta = childIndentationAmountDelta; - this._hasSkippedOrMissingTokenChild = null; - - if (parent) { - this._depth = parent.depth() + 1; - } else { - this._depth = 0; - } - }; - return IndentationNodeContext; - })(); - Formatting.IndentationNodeContext = IndentationNodeContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContextPool = (function () { - function IndentationNodeContextPool() { - this.nodes = []; - } - IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) { - if (this.nodes.length > 0) { - var cachedNode = this.nodes.pop(); - cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - return cachedNode; - } - - return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - }; - - IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) { - if (typeof recursive === "undefined") { recursive = false; } - this.nodes.push(node); - - if (recursive) { - var parent = node.parent(); - if (parent) { - this.releaseNode(parent, recursive); - } - } - }; - return IndentationNodeContextPool; - })(); - Formatting.IndentationNodeContextPool = IndentationNodeContextPool; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationTrackingWalker = (function (_super) { - __extends(IndentationTrackingWalker, _super); - function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this); - this.options = options; - this._position = 0; - this._parent = null; - - this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool(); - - this._textSpan = textSpan; - this._snapshot = snapshot; - this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0); - - this._lastTriviaWasNewLine = indentFirstToken; - } - IndentationTrackingWalker.prototype.position = function () { - return this._position; - }; - - IndentationTrackingWalker.prototype.parent = function () { - return this._parent; - }; - - IndentationTrackingWalker.prototype.textSpan = function () { - return this._textSpan; - }; - - IndentationTrackingWalker.prototype.snapshot = function () { - return this._snapshot; - }; - - IndentationTrackingWalker.prototype.indentationNodeContextPool = function () { - return this._indentationNodeContextPool; - }; - - IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = true; - this.forceRecomputeIndentationOfParent(tokenStart, true); - }; - - IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = false; - this.forceRecomputeIndentationOfParent(tokenStart, false); - }; - - IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - throw TypeScript.Errors.abstract(); - }; - - IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) { - if (this._lastTriviaWasNewLine) { - var indentationAmount = this.getTokenIndentationAmount(token); - var commentIndentationAmount = this.getCommentIndentationAmount(token); - - this.indentToken(token, indentationAmount, commentIndentationAmount); - } - }; - - IndentationTrackingWalker.prototype.visitToken = function (token) { - var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth()); - - if (tokenSpan.intersectsWithTextSpan(this._textSpan)) { - this.visitTokenInSpan(token); - - var trivia = token.trailingTrivia(); - this._lastTriviaWasNewLine = token.hasTrailingNewLine() && trivia.syntaxTriviaAt(trivia.count() - 1).kind() == 5 /* NewLineTrivia */; - } - - this._position += token.fullWidth(); - }; - - IndentationTrackingWalker.prototype.visitNode = function (node) { - var nodeSpan = new TypeScript.TextSpan(this._position, node.fullWidth()); - - if (nodeSpan.intersectsWithTextSpan(this._textSpan)) { - var indentation = this.getNodeIndentation(node); - - var currentParent = this._parent; - this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); - - node.accept(this); - - this._indentationNodeContextPool.releaseNode(this._parent); - this._parent = currentParent; - } else { - this._position += node.fullWidth(); - } - }; - - IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) { - if (this._parent.node().firstToken() === token || token.kind() === 70 /* OpenBraceToken */ || token.kind() === 71 /* CloseBraceToken */ || token.kind() === 74 /* OpenBracketToken */ || token.kind() === 75 /* CloseBracketToken */ || (token.kind() === 42 /* WhileKeyword */ && this._parent.node().kind() == 161 /* DoStatement */)) { - return this._parent.indentationAmount(); - } - - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - }; - - IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) { - if (token.kind() === 71 /* CloseBraceToken */ || token.kind() === 75 /* CloseBracketToken */) { - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - } - return this._parent.indentationAmount(); - }; - - IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) { - var parent = this._parent; - - var parentIndentationAmount; - if (this._textSpan.containsPosition(parent.start())) { - parentIndentationAmount = parent.indentationAmount(); - } else { - if (parent.kind() === 146 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) { - parent = this._parent.parent(); - } - - var line = this._snapshot.getLineFromPosition(parent.start()).getText(); - var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line); - parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options); - } - var parentIndentationAmountDelta = parent.childIndentationAmountDelta(); - - var indentationAmount; - - var indentationAmountDelta; - var parentNode = parent.node(); - - switch (node.kind()) { - default: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = 0; - break; - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 122 /* ObjectType */: - case 132 /* EnumDeclaration */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 222 /* FunctionExpression */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 138 /* IndexMemberDeclaration */: - case 236 /* CatchClause */: - - case 214 /* ArrayLiteralExpression */: - case 124 /* ArrayType */: - case 221 /* ElementAccessExpression */: - case 144 /* IndexSignature */: - - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 150 /* ReturnStatement */: - case 157 /* ThrowStatement */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 224 /* VariableDeclaration */: - case 134 /* ExportAssignment */: - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = this.options.indentSpaces; - break; - - case 147 /* IfStatement */: - if (parent.kind() === 235 /* ElseClause */ && !parentNode.elseKeyword.hasTrailingNewLine() && !node.ifKeyword.hasLeadingNewLine()) { - indentationAmount = parentIndentationAmount; - } else { - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - } - indentationAmountDelta = this.options.indentSpaces; - break; - - case 235 /* ElseClause */: - indentationAmount = parentIndentationAmount; - indentationAmountDelta = this.options.indentSpaces; - break; - - case 146 /* Block */: - if (this.shouldIndentBlockInParent(parent)) { - indentationAmount = parentIndentationAmount + parentIndentationAmountDelta; - } else { - indentationAmount = parentIndentationAmount; - } - - indentationAmountDelta = this.options.indentSpaces; - break; - } - - if (parentNode) { - if (!newLineInsertedByFormatting) { - var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start()); - var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + node.leadingTriviaWidth()); - if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) { - indentationAmount = parentIndentationAmount; - indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta); - } - } - } - - return { - indentationAmount: indentationAmount, - indentationAmountDelta: indentationAmountDelta - }; - }; - - IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) { - switch (parent.kind()) { - case 120 /* SourceUnit */: - case 130 /* ModuleDeclaration */: - case 146 /* Block */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - default: - return false; - } - }; - - IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) { - var parent = this._parent; - if (parent.fullStart() === tokenStart) { - this._parent = parent.parent(); - var indentation = this.getNodeIndentation(parent.node(), newLineAdded); - parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta); - this._parent = parent; - } - }; - return IndentationTrackingWalker; - })(TypeScript.SyntaxWalker); - Formatting.IndentationTrackingWalker = IndentationTrackingWalker; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var MultipleTokenIndenter = (function (_super) { - __extends(MultipleTokenIndenter, _super); - function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this._edits = []; - } - MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0) { - return; - } - - if (this.parent().hasSkippedOrMissingTokenChild()) { - return; - } - - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (!this.textSpan().containsTextSpan(tokenSpan)) { - return; - } - - var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options); - - var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options); - - this.recordIndentationEditsForToken(token, indentationString, commentIndentationString); - }; - - MultipleTokenIndenter.prototype.edits = function () { - return this._edits; - }; - - MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) { - this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith)); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) { - var position = this.position(); - var indentNextTokenOrTrivia = true; - var leadingWhiteSpace = ""; - - var triviaList = token.leadingTrivia(); - if (triviaList) { - for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) { - continue; - } - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia); - indentNextTokenOrTrivia = false; - leadingWhiteSpace = ""; - break; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - if (indentNextTokenOrTrivia) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString); - indentNextTokenOrTrivia = false; - } - break; - - case 4 /* WhitespaceTrivia */: - var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1); - var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString; - if (indentNextTokenOrTrivia) { - if (!(nextTrivia && nextTrivia.isNewLine())) { - this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString); - } - indentNextTokenOrTrivia = false; - } - leadingWhiteSpace += trivia.fullText(); - break; - - case 5 /* NewLineTrivia */: - indentNextTokenOrTrivia = true; - leadingWhiteSpace = ""; - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - } - - if (token.kind() !== 10 /* EndOfFileToken */ && indentNextTokenOrTrivia) { - if (indentationString.length > 0) { - this.recordEdit(position, 0, indentationString); - } - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) { - if (indentationString.length > 0) { - this.recordEdit(fullStart, 0, indentationString); - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) { - var text = trivia.fullText(); - - if (indentationString === text) { - return; - } - - this.recordEdit(fullStart, text.length, indentationString); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) { - var position = fullStart; - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - if (segments.length <= 1) { - if (!firstLineAlreadyIndented) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); - } - return; - } - - var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options); - - var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options); - var startIndex = 0; - if (firstLineAlreadyIndented) { - startIndex = 1; - position += segments[0].length; - } - for (var i = startIndex; i < segments.length; i++) { - var segment = segments[i]; - this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment); - position += segment.length; - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment; - var finalColumns = indentationColumns + deltaFromFirstSegment; - if (finalColumns < 0) { - finalColumns = 0; - } - var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return; - } - - if (indentationString === segment.substring(0, firstNonWhitespacePosition)) { - return; - } - - this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString); - }; - return MultipleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.MultipleTokenIndenter = MultipleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SingleTokenIndenter = (function (_super) { - __extends(SingleTokenIndenter, _super); - function SingleTokenIndenter(indentationPosition, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, new TypeScript.TextSpan(indentationPosition, 1), sourceUnit, snapshot, indentFirstToken, options); - this.indentationAmount = null; - - this.indentationPosition = indentationPosition; - } - SingleTokenIndenter.getIndentationAmount = function (position, sourceUnit, snapshot, options) { - var walker = new SingleTokenIndenter(position, sourceUnit, snapshot, true, options); - sourceUnit.accept(walker); - return walker.indentationAmount; - }; - - SingleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0 || (this.indentationPosition - this.position() < token.leadingTriviaWidth())) { - this.indentationAmount = commentIndentationAmount; - } else { - this.indentationAmount = indentationAmount; - } - }; - return SingleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.SingleTokenIndenter = SingleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Formatter = (function (_super) { - __extends(Formatter, _super); - function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this.previousTokenSpan = null; - this.previousTokenParent = null; - this.scriptHasErrors = false; - - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - - this.rulesProvider = rulesProvider; - this.formattingRequestKind = formattingRequestKind; - this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind); - } - Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) { - var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind); - sourceUnit.accept(walker); - return walker.edits(); - }; - - Formatter.prototype.visitTokenInSpan = function (token) { - if (token.fullWidth() !== 0) { - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (this.textSpan().containsTextSpan(tokenSpan)) { - this.processToken(token); - } - } - - _super.prototype.visitTokenInSpan.call(this, token); - }; - - Formatter.prototype.processToken = function (token) { - var position = this.position(); - - if (token.leadingTriviaWidth() !== 0) { - this.processTrivia(token.leadingTrivia(), position); - position += token.leadingTriviaWidth(); - } - - var currentTokenSpan = new Formatting.TokenSpan(token.kind(), position, token.width()); - if (!this.parent().hasSkippedOrMissingTokenChild()) { - if (this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan)); - } - } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); - } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - position += token.width(); - - if (token.trailingTriviaWidth() !== 0) { - this.processTrivia(token.trailingTrivia(), position); - } - }; - - Formatter.prototype.processTrivia = function (triviaList, fullStart) { - var position = fullStart; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment() || trivia.isSkippedToken()) { - var currentTokenSpan = new Formatting.TokenSpan(trivia.kind(), position, trivia.fullWidth()); - if (this.textSpan().containsTextSpan(currentTokenSpan)) { - if (trivia.isComment() && this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan()); - this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan)); - } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); - } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - } - } - - position += trivia.fullWidth(); - } - }; - - Formatter.prototype.findCommonParents = function (parent1, parent2) { - var shallowParent; - var shallowParentDepth; - var deepParent; - var deepParentDepth; - - if (parent1.depth() < parent2.depth()) { - shallowParent = parent1; - shallowParentDepth = parent1.depth(); - deepParent = parent2; - deepParentDepth = parent2.depth(); - } else { - shallowParent = parent2; - shallowParentDepth = parent2.depth(); - deepParent = parent1; - deepParentDepth = parent1.depth(); - } - - TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth"); - - while (deepParentDepth > shallowParentDepth) { - deepParent = deepParent.parent(); - deepParentDepth--; - } - - TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth"); - - while (deepParent.node() && shallowParent.node()) { - if (deepParent.node() === shallowParent.node()) { - return deepParent; - } - deepParent = deepParent.parent(); - shallowParent = shallowParent.parent(); - } - - throw TypeScript.Errors.invalidOperation(); - }; - - Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) { - var token1Line = this.getLineNumber(t1); - var token2Line = this.getLineNumber(t2); - - var commonParent = this.findCommonParents(t1Parent, t2Parent); - - this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent); - - var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext); - - if (rule != null) { - this.RecordRuleEdits(rule, t1, t2); - - if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) { - this.forceSkipIndentingNextToken(t2.start()); - } - - if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) { - this.forceIndentNextToken(t2.start()); - } - } - - if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) { - this.trimWhitespaceInLineRange(token1Line, token2Line, t1); - } - }; - - Formatter.prototype.getLineNumber = function (span) { - return this.snapshot().getLineNumberFromPosition(span.start()); - }; - - Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) { - for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) { - var line = this.snapshot().getLineFromLineNumber(lineNumber); - - this.trimWhitespace(line, token); - } - }; - - Formatter.prototype.trimWhitespace = function (line, token) { - if (token && (token.kind() == 6 /* MultiLineCommentTrivia */ || token.kind() == 7 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition()) - return; - - var text = line.getText(); - var index = 0; - - for (index = text.length - 1; index >= 0; --index) { - if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) { - break; - } - } - - ++index; - - if (index < text.length) { - this.recordEdit(line.startPosition() + index, line.length() - index, ""); - } - }; - - Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) { - if (rule.Operation.Action == 0 /* Ignore */) { - return; - } - - var betweenSpan; - - switch (rule.Operation.Action) { - case 3 /* Delete */: - { - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 0) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), ""); - return; - } - } - break; - - case 2 /* NewLine */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - var doEdit = false; - var betweenText = this.snapshot().getText(betweenSpan); - - var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter); - if (lineFeedLoc < 0) { - doEdit = true; - } else { - lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1); - if (lineFeedLoc >= 0) { - doEdit = true; - } - } - - if (doEdit) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter); - return; - } - } - break; - - case 1 /* Space */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), " "); - return; - } - } - break; - } - }; - return Formatter; - })(Formatting.MultipleTokenIndenter); - Formatting.Formatter = Formatter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var debugObjectHost = this; - -var TypeScript; -(function (TypeScript) { - (function (Services) { - var CoreServices = (function () { - function CoreServices(host) { - this.host = host; - } - CoreServices.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - return TypeScript.preProcessFile(fileName, sourceText); - }; - - CoreServices.prototype.getDefaultCompilationSettings = function () { - var settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - return settings; - }; - - CoreServices.prototype.dumpMemory = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.dumpHeap) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.dumpHeap()'])); - } - - var objects = debugObjectHost.Debug.dumpHeap(2); - var totalSize = 0; - for (var i = 0; i < objects.length; i++) { - totalSize += objects[i].size; - } - - return "There are " + objects.length + " object(s) accessible from 'global', for a total of " + totalSize + " byte(s)."; - }; - - CoreServices.prototype.getMemoryInfo = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.getMemoryInfo) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.getMemoryInfo()'])); - } - - return debugObjectHost.Debug.getMemoryInfo(); - }; - - CoreServices.prototype.collectGarbage = function () { - if (!debugObjectHost || !debugObjectHost.CollectGarbage) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['collectGarbage()'])); - } - - debugObjectHost.CollectGarbage(); - }; - return CoreServices; - })(); - Services.CoreServices = CoreServices; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var HostFileInformation = (function () { - function HostFileInformation(fileName, host, version, isOpen, byteOrderMark) { - this.fileName = fileName; - this.host = host; - this.version = version; - this.isOpen = isOpen; - this.byteOrderMark = byteOrderMark; - this._sourceText = null; - } - HostFileInformation.prototype.getScriptSnapshot = function () { - if (this._sourceText === null) { - this._sourceText = this.host.getScriptSnapshot(this.fileName); - } - - return this._sourceText; - }; - return HostFileInformation; - })(); - - var HostCache = (function () { - function HostCache(host) { - this._fileNameToEntry = new TypeScript.StringHashTable(); - - var fileNames = host.getScriptFileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - this._fileNameToEntry.add(TypeScript.switchToForwardSlashes(fileName), new HostFileInformation(fileName, host, host.getScriptVersion(fileName), host.getScriptIsOpen(fileName), host.getScriptByteOrderMark(fileName))); - } - - var settings = host.getCompilationSettings(); - if (!settings) { - settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - } - - this._compilationSettings = TypeScript.ImmutableCompilationSettings.fromCompilationSettings(settings); - } - HostCache.prototype.compilationSettings = function () { - return this._compilationSettings; - }; - - HostCache.prototype.contains = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)) !== null; - }; - - HostCache.prototype.getHostFileName = function (fileName) { - var hostCacheEntry = this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)); - if (hostCacheEntry) { - return hostCacheEntry.fileName; - } - return fileName; - }; - - HostCache.prototype.getFileNames = function () { - return this._fileNameToEntry.getAllKeys(); - }; - - HostCache.prototype.getVersion = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).version; - }; - - HostCache.prototype.isOpen = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).isOpen; - }; - - HostCache.prototype.getByteOrderMark = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).byteOrderMark; - }; - - HostCache.prototype.getScriptSnapshot = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).getScriptSnapshot(); - }; - - HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (fileName, lastKnownVersion) { - var currentVersion = this.getVersion(fileName); - if (lastKnownVersion === currentVersion) { - return TypeScript.TextChangeRange.unchanged; - } - - var scriptSnapshot = this.getScriptSnapshot(fileName); - return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); - }; - return HostCache; - })(); - - var SyntaxTreeCache = (function () { - function SyntaxTreeCache(_host) { - this._host = _host; - this._currentFileName = ""; - this._currentFileVersion = -1; - this._currentFileSyntaxTree = null; - this._currentFileScriptSnapshot = null; - this._hostCache = new HostCache(_host); - } - SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (fileName) { - this._hostCache = new HostCache(this._host); - - var version = this._hostCache.getVersion(fileName); - var syntaxTree = null; - - if (this._currentFileSyntaxTree === null || this._currentFileName !== fileName) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.createSyntaxTree(fileName, scriptSnapshot); - } else if (this._currentFileVersion !== version) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.updateSyntaxTree(fileName, scriptSnapshot, this._currentFileSyntaxTree, this._currentFileVersion); - } - - if (syntaxTree !== null) { - this._currentFileScriptSnapshot = scriptSnapshot; - this._currentFileVersion = version; - this._currentFileName = fileName; - this._currentFileSyntaxTree = syntaxTree; - } - - return this._currentFileSyntaxTree; - }; - - SyntaxTreeCache.prototype.createSyntaxTree = function (fileName, scriptSnapshot) { - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var syntaxTree = TypeScript.Parser.parse(fileName, text, TypeScript.isDTSFile(fileName), TypeScript.getParseOptions(TypeScript.ImmutableCompilationSettings.defaultSettings())); - - return syntaxTree; - }; - - SyntaxTreeCache.prototype.updateSyntaxTree = function (fileName, scriptSnapshot, previousSyntaxTree, previousFileVersion) { - var editRange = this._hostCache.getScriptTextChangeRangeSinceVersion(fileName, previousFileVersion); - - if (editRange === null) { - return this.createSyntaxTree(fileName, scriptSnapshot); - } - - var nextSyntaxTree = TypeScript.Parser.incrementalParse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - - this.ensureInvariants(fileName, editRange, nextSyntaxTree, this._currentFileScriptSnapshot, scriptSnapshot); - - return nextSyntaxTree; - }; - - SyntaxTreeCache.prototype.ensureInvariants = function (fileName, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { - var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength(); - var actualNewLength = newScriptSnapshot.getLength(); - - function provideMoreDebugInfo() { - var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"]; - - var oldSpan = editRange.span(); - - function prettyPrintString(s) { - return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"'; - } - - debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n'); - debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end()))); - - var newSpan = editRange.newSpan(); - - debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n'); - debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end()))); - - return debugInformation.join(' '); - } - - TypeScript.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start()); - var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start()); - TypeScript.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!'); - - var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength()); - var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength()); - TypeScript.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!'); - - var normalTree = this.createSyntaxTree(fileName, newScriptSnapshot); - TypeScript.Debug.assert(normalTree.structuralEquals(incrementalTree), 'Expected equal incremental and normal trees'); - - var incrementalTreeText = incrementalTree.sourceUnit().fullText(); - var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength()); - TypeScript.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal'); - } - }; - return SyntaxTreeCache; - })(); - Services.SyntaxTreeCache = SyntaxTreeCache; - - var LanguageServiceCompiler = (function () { - function LanguageServiceCompiler(host) { - this.host = host; - this.compiler = null; - this.hostCache = null; - this.logger = this.host; - } - LanguageServiceCompiler.prototype.synchronizeHostData = function () { - var _this = this; - TypeScript.timeFunction(this.logger, "synchronizeHostData()", function () { - _this.synchronizeHostDataWorker(); - }); - }; - - LanguageServiceCompiler.prototype.synchronizeHostDataWorker = function () { - this.hostCache = new HostCache(this.host); - - var compilationSettings = this.hostCache.compilationSettings(); - - if (this.compiler === null) { - this.compiler = new TypeScript.TypeScriptCompiler(this.logger, compilationSettings); - } - - this.compiler.setCompilationSettings(compilationSettings); - - var compilerFileNames = this.compiler.fileNames(); - for (var i = 0, n = compilerFileNames.length; i < n; i++) { - var fileName = compilerFileNames[i]; - - if (!this.hostCache.contains(fileName)) { - this.compiler.removeFile(fileName); - } - } - - var cache = this.hostCache; - var hostFileNames = cache.getFileNames(); - for (var i = 0, n = hostFileNames.length; i < n; i++) { - var fileName = hostFileNames[i]; - - if (this.compiler.getDocument(fileName)) { - this.tryUpdateFile(this.compiler, fileName); - } else { - this.compiler.addFile(fileName, cache.getScriptSnapshot(fileName), cache.getByteOrderMark(fileName), cache.getVersion(fileName), cache.isOpen(fileName)); - } - } - }; - - LanguageServiceCompiler.prototype.tryUpdateFile = function (compiler, fileName) { - var document = this.compiler.getDocument(fileName); - - var version = this.hostCache.getVersion(fileName); - var isOpen = this.hostCache.isOpen(fileName); - if (document.version === version && document.isOpen === isOpen) { - return; - } - - var textChangeRange = null; - if (document.isOpen && isOpen) { - textChangeRange = this.hostCache.getScriptTextChangeRangeSinceVersion(fileName, document.version); - } - - compiler.updateFile(fileName, this.hostCache.getScriptSnapshot(fileName), version, isOpen, textChangeRange); - }; - - LanguageServiceCompiler.prototype.getScriptSnapshot = function (fileName) { - this.synchronizeHostData(); - return this.hostCache.getScriptSnapshot(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedHostFileName = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.hostCache.getHostFileName(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedTopLevelDeclaration = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.compilationSettings = function () { - this.synchronizeHostData(); - return this.compiler.compilationSettings(); - }; - - LanguageServiceCompiler.prototype.fileNames = function () { - this.synchronizeHostData(); - return this.compiler.fileNames(); - }; - - LanguageServiceCompiler.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageServiceCompiler.prototype.getDocument = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getDocument(fileName); - }; - - LanguageServiceCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getSemanticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - this.synchronizeHostData(); - return this.compiler.getCompilerOptionsDiagnostics(resolvePath); - }; - - LanguageServiceCompiler.prototype.getSymbolInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetSymbolInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getCallInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetCallInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleMemberSymbolsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleMemberSymbolsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleDeclsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleDeclsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getContextualMembersFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetContextualMembersFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetDeclInformation(decl, ast, document); - }; - - LanguageServiceCompiler.prototype.topLevelDeclaration = function (fileName) { - this.synchronizeHostData(); - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.getDeclForAST = function (ast) { - this.synchronizeHostData(); - return this.compiler.getDeclForAST(ast); - }; - - LanguageServiceCompiler.prototype.emit = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emit(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emitDeclarations(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.canEmitDeclarations = function (fileName) { - this.synchronizeHostData(); - return this.compiler.canEmitDeclarations(fileName); - }; - return LanguageServiceCompiler; - })(); - Services.LanguageServiceCompiler = LanguageServiceCompiler; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var CompletionHelpers = (function () { - function CompletionHelpers() { - } - CompletionHelpers.getSpan = function (ast) { - return new TypeScript.TextSpan(ast.start(), ast.width()); - }; - - CompletionHelpers.symbolDeclarationIntersectsPosition = function (symbol, fileName, position) { - var decl = symbol.getDeclarations()[0]; - if (decl.fileName() === fileName && this.getSpan(decl.ast()).intersectsWithPosition(position)) { - return true; - } - - return false; - }; - - CompletionHelpers.filterContextualMembersList = function (contextualMemberSymbols, existingMembers, fileName, position) { - if (!existingMembers || !existingMembers.symbols || existingMembers.symbols.length === 0) { - return contextualMemberSymbols; - } - - var existingMemberSymbols = existingMembers.symbols; - var existingMemberNames = TypeScript.createIntrinsicsObject(); - for (var i = 0, n = existingMemberSymbols.length; i < n; i++) { - if (this.symbolDeclarationIntersectsPosition(existingMemberSymbols[i], fileName, position)) { - continue; - } - - existingMemberNames[TypeScript.stripStartAndEndQuotes(existingMemberSymbols[i].getDisplayName())] = true; - } - - var filteredMembers = []; - for (var j = 0, m = contextualMemberSymbols.length; j < m; j++) { - var contextualMemberSymbol = contextualMemberSymbols[j]; - if (!existingMemberNames[TypeScript.stripStartAndEndQuotes(contextualMemberSymbol.getDisplayName())]) { - if (this.symbolDeclarationIntersectsPosition(contextualMemberSymbol, fileName, position)) { - continue; - } - filteredMembers.push(contextualMemberSymbol); - } - } - - return filteredMembers; - }; - - CompletionHelpers.isCompletionListBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position) || TypeScript.Syntax.isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) || CompletionHelpers.isIdentifierDefinitionLocation(sourceUnit, position) || CompletionHelpers.isRightOfIllegalDot(sourceUnit, position); - }; - - CompletionHelpers.getContainingObjectLiteralApplicableForCompletion = function (sourceUnit, position) { - var previousToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (previousToken) { - var parent = previousToken.parent(); - - switch (previousToken.kind()) { - case 70 /* OpenBraceToken */: - case 79 /* CommaToken */: - if (parent && parent.kind() === 2 /* SeparatedList */) { - parent = parent.parent(); - } - - if (parent && parent.kind() === 215 /* ObjectLiteralExpression */) { - return parent; - } - - break; - } - } - - return null; - }; - - CompletionHelpers.isIdentifierDefinitionLocation = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - var containingNodeKind = positionedToken.containingNode() && positionedToken.containingNode().kind(); - switch (positionedToken.kind()) { - case 79 /* CommaToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 224 /* VariableDeclaration */ || containingNodeKind === 132 /* EnumDeclaration */; - - case 72 /* OpenParenToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 236 /* CatchClause */; - - case 70 /* OpenBraceToken */: - return containingNodeKind === 132 /* EnumDeclaration */; - - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 77 /* DotDotDotToken */: - return containingNodeKind === 242 /* Parameter */; - - case 44 /* ClassKeyword */: - case 65 /* ModuleKeyword */: - case 46 /* EnumKeyword */: - case 52 /* InterfaceKeyword */: - case 27 /* FunctionKeyword */: - case 40 /* VarKeyword */: - case 64 /* GetKeyword */: - case 68 /* SetKeyword */: - return true; - } - - switch (positionedToken.token().text()) { - case "class": - case "interface": - case "enum": - case "module": - return true; - } - } - - return false; - }; - - CompletionHelpers.getNonIdentifierCompleteTokenOnLeft = function (sourceUnit, position) { - var positionedToken = sourceUnit.findCompleteTokenOnLeft(position, true); - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() == 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(true); - } - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() === 11 /* IdentifierName */) { - positionedToken = positionedToken.previousToken(true); - } - - return positionedToken; - }; - - CompletionHelpers.isRightOfIllegalDot = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - switch (positionedToken.kind()) { - case 76 /* DotToken */: - var leftOfDotPositionedToken = positionedToken.previousToken(true); - return leftOfDotPositionedToken && leftOfDotPositionedToken.kind() === 13 /* NumericLiteral */; - - case 13 /* NumericLiteral */: - var text = positionedToken.token().text(); - return text.charAt(text.length - 1) === "."; - } - } - - return false; - }; - - CompletionHelpers.getValidCompletionEntryDisplayName = function (displayName) { - if (displayName && displayName.length > 0) { - var firstChar = displayName.charCodeAt(0); - if (firstChar === 39 /* singleQuote */ || firstChar === 34 /* doubleQuote */) { - displayName = TypeScript.stripStartAndEndQuotes(displayName); - } - - if (TypeScript.Scanner.isValidIdentifier(TypeScript.SimpleText.fromString(displayName), 1 /* EcmaScript5 */)) { - return displayName; - } - } - - return null; - }; - return CompletionHelpers; - })(); - Services.CompletionHelpers = CompletionHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var KeywordCompletions = (function () { - function KeywordCompletions() { - } - KeywordCompletions.getKeywordCompltions = function () { - if (KeywordCompletions.keywordCompletions === null) { - var completions = []; - for (var i = 0, n = KeywordCompletions.keywords.length; i < n; i++) { - var keyword = KeywordCompletions.keywords[i]; - var entry = new Services.ResolvedCompletionEntry(keyword, Services.ScriptElementKind.keyword, Services.ScriptElementKindModifier.none, null, keyword, null); - completions.push(entry); - } - - KeywordCompletions.keywordCompletions = completions; - } - - return KeywordCompletions.keywordCompletions; - }; - KeywordCompletions.keywords = [ - "break", - "case", - "catch", - "class", - "constructor", - "continue", - "debugger", - "declare", - "default", - "delete", - "do", - "else", - "enum", - "export", - "extends", - "false", - "finally", - "for", - "function", - "get", - "if", - "implements", - "import", - "in", - "instanceof", - "interface", - "module", - "new", - "null", - "private", - "public", - "require", - "return", - "set", - "static", - "super", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "var", - "while", - "with" - ]; - - KeywordCompletions.keywordCompletions = null; - return KeywordCompletions; - })(); - Services.KeywordCompletions = KeywordCompletions; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var SignatureInfoHelpers = (function () { - function SignatureInfoHelpers() { - } - SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList = function (syntaxTree, position) { - var token = syntaxTree.sourceUnit().findTokenOnLeft(position, true); - - if (token && TypeScript.Syntax.hasAncestorOfKind(token, 229 /* TypeParameterList */)) { - return null; - } - - var stack = 0; - var argumentIndex = 0; - - whileLoop: - while (token) { - switch (token.kind()) { - case 80 /* LessThanToken */: - if (stack === 0) { - var lessThanToken = token; - token = token.previousToken(true); - if (!token || token.kind() !== 11 /* IdentifierName */) { - break whileLoop; - } - - return { - genericIdentifer: token, - lessThanToken: lessThanToken, - argumentIndex: argumentIndex - }; - } else if (stack < 0) { - break whileLoop; - } else { - stack--; - } - - break; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - stack++; - - case 81 /* GreaterThanToken */: - stack++; - break; - - case 79 /* CommaToken */: - if (stack == 0) { - argumentIndex++; - } - - break; - - case 71 /* CloseBraceToken */: - var unmatchedOpenBraceTokens = 0; - - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 71 /* CloseBraceToken */, 70 /* OpenBraceToken */); - if (!token) { - break whileLoop; - } - - break; - - case 85 /* EqualsGreaterThanToken */: - token = token.previousToken(true); - - if (token && token.kind() === 73 /* CloseParenToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 73 /* CloseParenToken */, 72 /* OpenParenToken */); - - if (token && token.kind() === 81 /* GreaterThanToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 81 /* GreaterThanToken */, 80 /* LessThanToken */); - } - - if (token && token.kind() === 31 /* NewKeyword */) { - token = token.previousToken(true); - } - - if (!token) { - break whileLoop; - } - } else { - break whileLoop; - } - - break; - - case 11 /* IdentifierName */: - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - case 61 /* BooleanKeyword */: - case 76 /* DotToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: - break; - - default: - break whileLoop; - } - - token = token.previousToken(true); - } - - return null; - }; - - SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol = function (symbol, signatures, enclosingScopeSymbol, compilerState) { - var signatureGroup = []; - - var hasOverloads = signatures.length > 1; - - for (var i = 0, n = signatures.length; i < n; i++) { - var signature = signatures[i]; - - if (hasOverloads && signature.isDefinition()) { - continue; - } - - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - var paramIndexInfo = []; - var functionName = signature.getScopedNameEx(enclosingScopeSymbol).toString(); - if (!functionName && (!symbol.isType() || symbol.isNamedTypeSymbol())) { - functionName = symbol.getScopedNameEx(enclosingScopeSymbol).toString(); - } - - var signatureMemberName = signature.getSignatureTypeNameEx(functionName, false, false, enclosingScopeSymbol, true, true); - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(signatureMemberName, paramIndexInfo); - signatureGroupInfo.docComment = signature.docComments(); - - var parameterMarkerIndex = 0; - - if (signature.isGeneric()) { - var typeParameters = signature.getTypeParameters(); - for (var j = 0, m = typeParameters.length; j < m; j++) { - var typeParameter = typeParameters[j]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - } - - var parameters = signature.parameters; - for (var j = 0, m = parameters.length; j < m; j++) { - var parameter = parameters[j]; - var signatureParameterInfo = new Services.FormalParameterInfo(); - signatureParameterInfo.isVariable = signature.hasVarArgs && (j === parameters.length - 1); - signatureParameterInfo.name = parameter.getDisplayName(); - signatureParameterInfo.docComment = parameter.docComments(); - signatureParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.parameters.push(signatureParameterInfo); - } - - signatureGroup.push(signatureGroupInfo); - } - - return signatureGroup; - }; - - SignatureInfoHelpers.getSignatureInfoFromGenericSymbol = function (symbol, enclosingScopeSymbol, compilerState) { - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - - var paramIndexInfo = []; - var symbolName = symbol.getScopedNameEx(enclosingScopeSymbol, false, true, false, true); - - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(symbolName, paramIndexInfo); - signatureGroupInfo.docComment = symbol.docComments(); - - var parameterMarkerIndex = 0; - - var typeSymbol = symbol.type; - - var typeParameters = typeSymbol.getTypeParameters(); - for (var i = 0, n = typeParameters.length; i < n; i++) { - var typeParameter = typeParameters[i]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * i]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * i + 1]; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - - return [signatureGroupInfo]; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromCallExpression = function (ast, caretPosition, typeParameterInformation) { - if (!ast) { - return null; - } - - var result = new Services.ActualSignatureInfo(); - - var parameterMinChar = caretPosition; - var parameterLimChar = caretPosition; - - if (ast.argumentList.typeArgumentList) { - parameterMinChar = Math.min(ast.argumentList.typeArgumentList.start()); - parameterLimChar = Math.max(Math.max(ast.argumentList.typeArgumentList.start(), ast.argumentList.typeArgumentList.end() + ast.argumentList.typeArgumentList.trailingTriviaWidth())); - } - - if (ast.argumentList.arguments) { - parameterMinChar = Math.min(parameterMinChar, ast.argumentList.arguments.start()); - parameterLimChar = Math.max(parameterLimChar, Math.max(ast.argumentList.arguments.start(), ast.argumentList.arguments.end() + ast.argumentList.arguments.trailingTriviaWidth())); - } - - result.parameterMinChar = parameterMinChar; - result.parameterLimChar = parameterLimChar; - result.currentParameterIsTypeParameter = false; - result.currentParameter = -1; - - if (typeParameterInformation) { - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - } else if (ast.argumentList.arguments && ast.argumentList.arguments.nonSeparatorCount() > 0) { - result.currentParameter = 0; - for (var index = 0; index < ast.argumentList.arguments.nonSeparatorCount(); index++) { - if (caretPosition > ast.argumentList.arguments.nonSeparatorAt(index).end() + ast.argumentList.arguments.nonSeparatorAt(index).trailingTriviaWidth()) { - result.currentParameter++; - } - } - } - - return result; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression = function (caretPosition, typeParameterInformation) { - var result = new Services.ActualSignatureInfo(); - - result.parameterMinChar = typeParameterInformation.lessThanToken.start(); - result.parameterLimChar = Math.max(typeParameterInformation.lessThanToken.fullEnd(), caretPosition); - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - - return result; - }; - - SignatureInfoHelpers.isSignatureHelpBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position); - }; - - SignatureInfoHelpers.isTargetOfObjectCreationExpression = function (positionedToken) { - var positionedParent = TypeScript.Syntax.getAncestorOfKind(positionedToken, 216 /* ObjectCreationExpression */); - if (positionedParent) { - var objectCreationExpression = positionedParent.element(); - var expressionRelativeStart = objectCreationExpression.newKeyword.fullWidth(); - var tokenRelativeStart = positionedToken.fullStart() - positionedParent.fullStart(); - return tokenRelativeStart >= expressionRelativeStart && tokenRelativeStart <= (expressionRelativeStart + objectCreationExpression.expression.fullWidth()); - } - - return false; - }; - - SignatureInfoHelpers.moveBackUpTillMatchingTokenKind = function (token, tokenKind, matchingTokenKind) { - if (!token || token.kind() !== tokenKind) { - throw TypeScript.Errors.invalidOperation(); - } - - token = token.previousToken(true); - - var stack = 0; - - while (token) { - if (token.kind() === matchingTokenKind) { - if (stack === 0) { - return token; - } else if (stack < 0) { - break; - } else { - stack--; - } - } else if (token.kind() === tokenKind) { - stack++; - } - - token = token.previousToken(true); - } - - return null; - }; - return SignatureInfoHelpers; - })(); - Services.SignatureInfoHelpers = SignatureInfoHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var ResolvedCompletionEntry = (function () { - function ResolvedCompletionEntry(name, kind, kindModifiers, type, fullSymbolName, docComment) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComment; - } - ResolvedCompletionEntry.prototype.isResolved = function () { - return true; - }; - return ResolvedCompletionEntry; - })(); - Services.ResolvedCompletionEntry = ResolvedCompletionEntry; - - var DeclReferenceCompletionEntry = (function () { - function DeclReferenceCompletionEntry(name, kind, kindModifiers, decl) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.decl = decl; - this.type = null; - this.fullSymbolName = null; - this.docComment = null; - this.hasBeenResolved = false; - } - DeclReferenceCompletionEntry.prototype.isResolved = function () { - return this.hasBeenResolved; - }; - - DeclReferenceCompletionEntry.prototype.resolve = function (type, fullSymbolName, docComments) { - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComments; - this.hasBeenResolved = true; - }; - return DeclReferenceCompletionEntry; - })(); - Services.DeclReferenceCompletionEntry = DeclReferenceCompletionEntry; - - var CompletionSession = (function () { - function CompletionSession(fileName, position, entries) { - this.fileName = fileName; - this.position = position; - this.entries = entries; - } - return CompletionSession; - })(); - Services.CompletionSession = CompletionSession; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var LanguageService = (function () { - function LanguageService(host) { - this.host = host; - this.activeCompletionSession = null; - this.logger = this.host; - this.compiler = new Services.LanguageServiceCompiler(this.host); - this._syntaxTreeCache = new Services.SyntaxTreeCache(this.host); - - if (!TypeScript.LocalizedDiagnosticMessages) { - TypeScript.LocalizedDiagnosticMessages = this.host.getLocalizedDiagnosticMessages(); - } - } - LanguageService.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageService.prototype.refresh = function () { - }; - - LanguageService.prototype.getSymbolInfoAtPosition = function (fileName, pos, requireName) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var topNode = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (topNode === null || (requireName && topNode.kind() !== 11 /* IdentifierName */)) { - this.logger.log("No name found at the given position"); - return null; - } - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(topNode, document); - if (symbolInfoAtPosition === null || (symbolInfoAtPosition.symbol === null && symbolInfoAtPosition.aliasSymbol)) { - this.logger.log("No symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; - } - - var symbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - var symbolName = symbol.getName(); - - if (requireName) { - var actualNameAtPosition = topNode.valueText(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; - } - } - - var containingASTOpt = this.getSymbolScopeAST(symbol, topNode); - - return { symbol: symbol, containingASTOpt: containingASTOpt }; - }; - - LanguageService.prototype.getReferencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var result = []; - var symbol = symbolAndContainingAST.symbol; - var symbolName = symbol.getName(); - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - if (containingASTOpt && fileName != tempFileName) { - continue; - } - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - if (filter.probablyContains(symbolName)) { - result = result.concat(this.getReferencesInFile(tempFileName, symbol, containingASTOpt)); - } - } - - return result; - }; - - LanguageService.prototype.getSymbolScopeAST = function (symbol, ast) { - if (symbol.kind === 8192 /* TypeParameter */ && symbol.getDeclarations().length > 0 && symbol.getDeclarations()[0].getParentDecl() && symbol.getDeclarations()[0].getParentDecl().kind === 65536 /* Method */) { - while (ast) { - if (ast.kind() === 129 /* FunctionDeclaration */ || ast.kind() === 135 /* MemberFunctionDeclaration */) { - return ast; - } - - ast = ast.parent; - } - } - - return null; - }; - - LanguageService.prototype.getOccurrencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var symbol = symbolAndContainingAST.symbol; - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - return this.getReferencesInFile(fileName, symbol, containingASTOpt); - }; - - LanguageService.prototype.getSingleNodeReferenceAtPosition = function (fileName, position) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (node === null || node.kind() !== 11 /* IdentifierName */) { - return []; - } - - var isWriteAccess = this.isWriteAccess(node); - return [new Services.ReferenceEntry(this._getHostFileName(fileName), node.start(), node.end(), isWriteAccess)]; - }; - - LanguageService.prototype.getImplementorsAtPosition = function (fileName, pos) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var result = []; - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log("No identifier at the specified location."); - return result; - } - - var actualNameAtPosition = ast.valueText(); - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(ast, document); - var symbol = symbolInfoAtPosition.symbol; - - if (symbol === null) { - this.logger.log("No symbol annotation on the identifier AST."); - return result; - } - - var symbolName = symbol.getName(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - return result; - } - - var typeSymbol = symbol.type; - var typesToSearch; - - if (typeSymbol.isClass() || typeSymbol.isInterface()) { - typesToSearch = typeSymbol.getTypesThatExtendThisType(); - } else if (symbol.kind == 4096 /* Property */ || symbol.kind == 16384 /* Function */ || typeSymbol.isMethod() || typeSymbol.isProperty()) { - var declaration = symbol.getDeclarations()[0]; - var classSymbol = declaration.getParentDecl().getSymbol().type; - - typesToSearch = []; - var extendingTypes = classSymbol.getTypesThatExtendThisType(); - var extendedTypes = classSymbol.getExtendedTypes(); - extendingTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - extendedTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - } - - if (typesToSearch) { - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - typesToSearch.forEach(function (typeToSearch) { - var symbolName = typeToSearch.getName(); - if (filter.probablyContains(symbolName)) { - result = result.concat(_this.getImplementorsInFile(tempFileName, typeToSearch)); - } - }); - } - } - return result; - }; - - LanguageService.prototype.getOverrides = function (container, memberSym) { - var result = []; - var members; - if (container.isClass()) { - members = container.getMembers(); - } else if (container.isInterface()) { - members = container.getMembers(); - } - - if (members == null) - return null; - - members.forEach(function (member) { - var typeMember = member; - if (typeMember.getName() === memberSym.getName()) { - result.push(typeMember); - } - }); - - return result; - }; - - LanguageService.prototype.getImplementorsInFile = function (fileName, symbol) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p); - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */) { - return; - } - var searchSymbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (searchSymbolInfoAtPosition !== null) { - var normalizedSymbol; - if (symbol.kind === 8 /* Class */ || symbol.kind === 16 /* Interface */) { - normalizedSymbol = searchSymbolInfoAtPosition.symbol.type; - } else { - var declaration = searchSymbolInfoAtPosition.symbol.getDeclarations()[0]; - normalizedSymbol = declaration.getSymbol(); - } - - if (normalizedSymbol === symbol) { - var isWriteAccess = _this.isWriteAccess(nameAST); - - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } - } - }); - } - - return result; - }; - - LanguageService.prototype.getReferencesInFile = function (fileName, symbol, containingASTOpt) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - if (containingASTOpt && (p < containingASTOpt.start() || p > containingASTOpt.end())) { - return; - } - - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p, false); - - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */ || (nameAST.end() - nameAST.start() !== symbolName.length)) { - return; - } - - var symbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (symbolInfoAtPosition !== null) { - var searchSymbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - - if (Services.FindReferenceHelpers.compareSymbolsForLexicalIdentity(searchSymbol, symbol)) { - var isWriteAccess = _this.isWriteAccess(nameAST); - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } - } - }); - } - - return result; - }; - - LanguageService.prototype.isWriteAccess = function (current) { - var parent = current.parent; - if (parent !== null) { - var parentNodeType = parent.kind(); - switch (parentNodeType) { - case 131 /* ClassDeclaration */: - return parent.identifier === current; - - case 128 /* InterfaceDeclaration */: - return parent.identifier === current; - - case 130 /* ModuleDeclaration */: - return parent.name === current || parent.stringLiteral === current; - - case 129 /* FunctionDeclaration */: - return parent.identifier === current; - - case 133 /* ImportDeclaration */: - return parent.identifier === current; - - case 225 /* VariableDeclarator */: - var varDeclarator = parent; - return !!(varDeclarator.equalsValueClause && varDeclarator.propertyName === current); - - case 242 /* Parameter */: - return true; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - return parent.left === current; - - case 168 /* PreIncrementExpression */: - case 210 /* PostIncrementExpression */: - return true; - - case 169 /* PreDecrementExpression */: - case 211 /* PostDecrementExpression */: - return true; - } - } - - return false; - }; - - LanguageService.prototype.isLetterOrDigit = function (char) { - return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */) || char === 95 /* _ */ || char === 36 /* $ */ || (char > 127 && TypeScript.Unicode.isIdentifierPart(char, 1 /* EcmaScript5 */)); - }; - - LanguageService.prototype.getPossibleSymbolReferencePositions = function (fileName, symbolName) { - var positions = []; - - if (!symbolName || !symbolName.length) { - return positions; - } - - var sourceText = this.compiler.getScriptSnapshot(fileName); - var sourceLength = sourceText.getLength(); - var text = sourceText.getText(0, sourceLength); - var symbolNameLength = symbolName.length; - - var position = text.indexOf(symbolName); - while (position >= 0) { - var endPosition = position + symbolNameLength; - - if ((position <= 0 || !this.isLetterOrDigit(text.charCodeAt(position - 1))) && (endPosition >= sourceLength || !this.isLetterOrDigit(text.charCodeAt(endPosition)))) { - positions.push(position); - } - - position = text.indexOf(symbolName, position + symbolNameLength + 1); - } - - return positions; - }; - - LanguageService.prototype.getSignatureAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - - if (Services.SignatureInfoHelpers.isSignatureHelpBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("position is not a valid singature help location"); - return null; - } - - var genericTypeArgumentListInfo = Services.SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList(document.syntaxTree(), position); - if (genericTypeArgumentListInfo) { - return this.getTypeParameterSignatureFromPartiallyWrittenExpression(document, position, genericTypeArgumentListInfo); - } - - var sourceUnit = document.sourceUnit(); - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (!node) { - return null; - } - - while (node) { - if (node.kind() === 213 /* InvocationExpression */ || node.kind() === 216 /* ObjectCreationExpression */ || (isSignatureHelpBlocker(node) && position > node.start())) { - break; - } - - node = node.parent; - } - - if (!node) { - return null; - } - - if (node.kind() !== 213 /* InvocationExpression */ && node.kind() !== 216 /* ObjectCreationExpression */) { - this.logger.log("No call expression or generic arguments found for the given position"); - return null; - } - - var callExpression = node; - var isNew = (callExpression.kind() === 216 /* ObjectCreationExpression */); - - if (isNew && callExpression.argumentList === null) { - this.logger.log("No signature help for a object creation expression without arguments"); - return null; - } - - TypeScript.Debug.assert(callExpression.argumentList.arguments !== null, "Expected call expression to have arguments, but it did not"); - - var argumentsStart = callExpression.expression.end() + callExpression.expression.trailingTriviaWidth(); - var argumentsEnd = callExpression.argumentList.arguments.end() + callExpression.argumentList.arguments.trailingTriviaWidth(); - - if (position <= argumentsStart || position > argumentsEnd) { - this.logger.log("Outside argument list"); - return null; - } - - var callSymbolInfo = this.compiler.getCallInformationFromAST(node, document); - if (!callSymbolInfo || !callSymbolInfo.targetSymbol || !callSymbolInfo.resolvedSignatures) { - this.logger.log("Could not find symbol for call expression"); - return null; - } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(callSymbolInfo.targetSymbol, callSymbolInfo.resolvedSignatures, callSymbolInfo.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromCallExpression(callExpression, position, genericTypeArgumentListInfo); - result.activeFormal = (callSymbolInfo.resolvedSignatures && callSymbolInfo.candidateSignature) ? callSymbolInfo.resolvedSignatures.indexOf(callSymbolInfo.candidateSignature) : -1; - - if (result.actual === null || result.formal === null || result.activeFormal === null) { - this.logger.log("Can't compute actual and/or formal signature of the call expression"); - return null; - } - - return result; - }; - - LanguageService.prototype.getTypeParameterSignatureFromPartiallyWrittenExpression = function (document, position, genericTypeArgumentListInfo) { - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, genericTypeArgumentListInfo.genericIdentifer.start()); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log(["getTypeParameterSignatureAtPosition: Unexpected ast found at position:", position, ast === null ? "ast was null" : "ast kind: " + TypeScript.SyntaxKind[ast.kind()]].join(' ')); - return null; - } - - var symbolInformation = this.compiler.getSymbolInformationFromAST(ast, document); - - if (!symbolInformation.symbol) { - return null; - } - - var isNew = Services.SignatureInfoHelpers.isTargetOfObjectCreationExpression(genericTypeArgumentListInfo.genericIdentifer); - - var typeSymbol = symbolInformation.symbol.type; - - if (typeSymbol.kind === 16777216 /* FunctionType */ || (isNew && typeSymbol.kind === 33554432 /* ConstructorType */)) { - var signatures = isNew ? typeSymbol.getConstructSignatures() : typeSymbol.getCallSignatures(); - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(symbolInformation.symbol, signatures, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } else if (typeSymbol.isGeneric()) { - if (typeSymbol.kind === 33554432 /* ConstructorType */) { - typeSymbol = typeSymbol.getAssociatedContainerType(); - } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromGenericSymbol(typeSymbol, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } - - return null; - }; - - LanguageService.prototype.getDefinitionAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolInfo = this.getSymbolInfoAtPosition(fileName, position, false); - if (symbolInfo === null || symbolInfo.symbol === null) { - return null; - } - - var symbol = symbolInfo.symbol; - - TypeScript.Debug.assert(symbol.kind !== 0 /* None */ && symbol.kind !== 0 /* Global */ && symbol.kind !== 1 /* Script */, "getDefinitionAtPosition - Invalid symbol kind"); - - if (symbol.kind === 2 /* Primitive */) { - return null; - } - - var declarations = symbol.getDeclarations(); - var symbolName = symbol.getDisplayName(); - var symbolKind = this.mapPullElementKind(symbol.kind, symbol); - var container = symbol.getContainer(); - var containerName = container ? container.fullName() : ""; - var containerKind = container ? this.mapPullElementKind(container.kind, container) : ""; - - var result = []; - - if (!this.tryAddDefinition(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddSignatures(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddConstructor(symbolKind, symbolName, containerKind, containerName, declarations, result)) { - this.addDeclarations(symbolKind, symbolName, containerKind, containerName, declarations, result); - } - - return result; - }; - - LanguageService.prototype.addDeclarations = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - for (var i = 0, n = declarations.length; i < n; i++) { - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, declarations[i], result); - } - }; - - LanguageService.prototype.addDeclaration = function (symbolKind, symbolName, containerKind, containerName, declaration, result) { - var ast = declaration.ast(); - result.push(new Services.DefinitionInfo(this._getHostFileName(declaration.fileName()), ast.start(), ast.end(), symbolKind, symbolName, containerKind, containerName)); - }; - - LanguageService.prototype.tryAddDefinition = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var definitionDeclaration = TypeScript.ArrayUtilities.firstOrDefault(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && signature.isDefinition(); - }); - - if (!definitionDeclaration) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, definitionDeclaration, result); - return true; - }; - - LanguageService.prototype.tryAddSignatures = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var signatureDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && !signature.isDefinition(); - }); - - if (signatureDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(signatureDeclarations), result); - return true; - }; - - LanguageService.prototype.tryAddConstructor = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var constructorDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - return d.kind === 32768 /* ConstructorMethod */; - }); - - if (constructorDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(constructorDeclarations), result); - return true; - }; - - LanguageService.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - TypeScript.Debug.assert(searchValue !== null && searchValue !== undefined, "The searchValue argument was not supplied or null"); - - var terms = searchValue.split(" "); - - var searchTerms = terms.map(function (t) { - return ({ caseSensitive: _this.hasAnyUpperCaseCharacter(t), term: t }); - }); - - var items = []; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - var declaration = this.compiler.getCachedTopLevelDeclaration(fileName); - this.findSearchValueInPullDecl(fileName, [declaration], items, searchTerms); - } - return items; - }; - - LanguageService.prototype.hasAnyUpperCaseCharacter = function (s) { - for (var i = 0; i < s.length; ++i) { - if (s.charAt(i).toLocaleLowerCase() !== s.charAt(i)) { - return true; - } - } - - return false; - }; - - LanguageService.prototype.findSearchValueInPullDecl = function (fileName, declarations, results, searchTerms, parentName, parentkindName) { - var item; - var declaration; - var declName; - var kindName; - var matchKind; - var fullName; - - for (var i = 0, declLength = declarations.length; i < declLength; ++i) { - declaration = declarations[i]; - declName = declaration.getDisplayName(); - kindName = this.mapPullElementKind(declaration.kind); - matchKind = null; - - for (var j = 0, termsLength = searchTerms.length; j < termsLength; ++j) { - var searchTerm = searchTerms[j]; - var declNameToSearch = searchTerm.caseSensitive ? declName : declName.toLocaleLowerCase(); - - var index = declNameToSearch.indexOf(searchTerm.term); - - if (index !== -1) { - if (index === 0) { - matchKind = declName.length === searchTerm.term.length ? Services.MatchKind.exact : Services.MatchKind.prefix; - } else { - matchKind = Services.MatchKind.subString; - } - } - } - - if (this.shouldIncludeDeclarationInNavigationItems(declaration)) { - fullName = parentName ? parentName + "." + declName : declName; - var ast = declaration.ast(); - if (matchKind) { - item = new Services.NavigateToItem(); - item.name = declName; - item.matchKind = matchKind; - item.kind = this.mapPullElementKind(declaration.kind); - item.kindModifiers = this.getScriptElementKindModifiersFromDecl(declaration); - item.fileName = this._getHostFileName(fileName); - item.minChar = ast.start(); - item.limChar = ast.end(); - item.containerName = parentName || ""; - item.containerKind = parentkindName || ""; - results.push(item); - } - } - if (this.isContainerDeclaration(declaration)) { - this.findSearchValueInPullDecl(fileName, declaration.getChildDecls(), results, searchTerms, fullName, kindName); - } - } - }; - - LanguageService.prototype.getScriptElementKindModifiersFromDecl = function (decl) { - var result = []; - var flags = decl.flags; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.isContainerDeclaration = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - case 4 /* Container */: - case 8 /* Class */: - case 16 /* Interface */: - case 32 /* DynamicModule */: - case 64 /* Enum */: - return true; - } - - return false; - }; - - LanguageService.prototype.shouldIncludeDeclarationInNavigationItems = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - return false; - case 512 /* Variable */: - case 4096 /* Property */: - return (declaration.flags & (16384 /* ClassConstructorVariable */ | 32768 /* InitializedModule */ | 65536 /* InitializedDynamicModule */ | 4096 /* Enum */)) === 0; - case 67108864 /* EnumMember */: - return true; - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - return declaration.name !== ""; - case 32768 /* ConstructorMethod */: - return false; - } - - if (this.isContainerDeclaration(declaration)) { - return true; - } - - return true; - }; - - LanguageService.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageService.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageService.prototype._getHostSpecificDiagnosticWithFileName = function (diagnostic) { - return new TypeScript.Diagnostic(this._getHostFileName(diagnostic.fileName()), diagnostic.lineMap(), diagnostic.start(), diagnostic.length(), diagnostic.diagnosticKey(), diagnostic.arguments(), diagnostic.additionalLocations()); - }; - - LanguageService.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); - }; - var compilerOptionsDiagnostics = this.compiler.getCompilerOptionsDiagnostics(resolvePath); - return compilerOptionsDiagnostics.map(function (d) { - return _this._getHostSpecificDiagnosticWithFileName(d); - }); - }; - - LanguageService.prototype._getHostFileName = function (fileName) { - if (fileName) { - return this.compiler.getCachedHostFileName(fileName); - } - return fileName; - }; - - LanguageService.prototype.getEmitOutput = function (fileName) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); - }; - - var document = this.compiler.getDocument(fileName); - var emitToSingleFile = document.emitToOwnOutputFile(); - - var syntacticDiagnostics = emitToSingleFile ? this.getSyntacticDiagnostics(fileName) : this.getAllSyntacticDiagnostics(); - if (this.containErrors(syntacticDiagnostics)) { - return new TypeScript.EmitOutput(1 /* FailedBecauseOfSyntaxErrors */); - } - - var semanticDiagnostics = emitToSingleFile ? this.getSemanticDiagnostics(fileName) : this.getAllSemanticDiagnostics(); - - var emitResult = this.compiler.emit(fileName, resolvePath); - if (emitResult.emitOutputResult == 0 /* Succeeded */) { - if (!this.containErrors(semanticDiagnostics)) { - var declarationEmitOutput = this.compiler.emitDeclarations(fileName, resolvePath); - emitResult.outputFiles.push.apply(emitResult.outputFiles, declarationEmitOutput.outputFiles); - TypeScript.Debug.assert(declarationEmitOutput.emitOutputResult == 0 /* Succeeded */); - } else if (this.compiler.canEmitDeclarations(fileName)) { - emitResult.emitOutputResult = 3 /* FailedToGenerateDeclarationsBecauseOfSemanticErrors */; - } - } - - return emitResult; - }; - - LanguageService.prototype.getAllSyntacticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().forEach(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSyntacticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.getAllSemanticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().map(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSemanticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.containErrors = function (diagnostics) { - if (diagnostics && diagnostics.length > 0) { - for (var i = 0; i < diagnostics.length; i++) { - var diagnosticInfo = diagnostics[i].info(); - if (diagnosticInfo.category === 1 /* Error */) { - return true; - } - } - } - - return false; - }; - - LanguageService.prototype.getFullNameOfSymbol = function (symbol, enclosingScopeSymbol) { - var container = symbol.getContainer(); - if (TypeScript.PullHelpers.isSymbolLocal(symbol) || symbol.kind == 2048 /* Parameter */) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - var symbolKind = symbol.kind; - if (symbol.kind == 2 /* Primitive */) { - return ""; - } - - if (symbolKind == 33554432 /* ConstructorType */) { - symbol = symbol.getAssociatedContainerType(); - } - - if (symbolKind != 4096 /* Property */ && symbolKind != 67108864 /* EnumMember */ && symbolKind != 65536 /* Method */ && symbolKind != 8192 /* TypeParameter */ && !symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - return symbol.fullName(enclosingScopeSymbol); - }; - - LanguageService.prototype.getTypeInfoEligiblePath = function (fileName, position, isConstructorValidPosition) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, false, true); - if (ast === null) { - return null; - } - - if (ast.kind() === 227 /* ParameterList */ && ast.parent.kind() === 142 /* CallSignature */ && ast.parent.parent.kind() === 137 /* ConstructorDeclaration */) { - ast = ast.parent.parent; - } - - switch (ast.kind()) { - default: - return null; - case 137 /* ConstructorDeclaration */: - var constructorAST = ast; - if (!isConstructorValidPosition || !(position >= constructorAST.start() && position <= constructorAST.start() + "constructor".length)) { - return null; - } else { - return ast; - } - - case 129 /* FunctionDeclaration */: - return null; - - case 212 /* MemberAccessExpression */: - case 121 /* QualifiedName */: - case 50 /* SuperKeyword */: - case 14 /* StringLiteral */: - case 35 /* ThisKeyword */: - case 11 /* IdentifierName */: - return ast; - } - }; - - LanguageService.prototype.getTypeAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, position, true); - if (!node) { - return null; - } - - var document = this.compiler.getDocument(fileName); - var ast; - var symbol; - var typeSymbol; - var enclosingScopeSymbol; - var _isCallExpression = false; - var resolvedSignatures; - var candidateSignature; - var isConstructorCall; - - if (TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(node)) { - var declarationInformation = this.compiler.getSymbolInformationFromAST(node, document); - if (!declarationInformation) { - return null; - } - - ast = declarationInformation.ast; - symbol = declarationInformation.symbol; - enclosingScopeSymbol = declarationInformation.enclosingScopeSymbol; - - if (node.kind() === 137 /* ConstructorDeclaration */ || node.kind() === 129 /* FunctionDeclaration */ || node.kind() === 218 /* ParenthesizedArrowFunctionExpression */ || node.kind() === 219 /* SimpleArrowFunctionExpression */ || node.kind() === 135 /* MemberFunctionDeclaration */ || TypeScript.ASTHelpers.isNameOfFunction(node) || TypeScript.ASTHelpers.isNameOfMemberFunction(node)) { - var funcDecl = node.kind() === 11 /* IdentifierName */ ? node.parent : node; - if (symbol && symbol.kind != 4096 /* Property */) { - var signatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.compiler.getDeclForAST(funcDecl)); - _isCallExpression = true; - candidateSignature = signatureInfo.signature; - resolvedSignatures = signatureInfo.allSignatures; - } - } - } else if (TypeScript.ASTHelpers.isCallExpression(node) || TypeScript.ASTHelpers.isCallExpressionTarget(node)) { - while (!TypeScript.ASTHelpers.isCallExpression(node)) { - node = node.parent; - } - - var callExpressionInformation = this.compiler.getCallInformationFromAST(node, document); - - if (!callExpressionInformation || !callExpressionInformation.targetSymbol) { - return null; - } - - ast = callExpressionInformation.ast; - symbol = callExpressionInformation.targetSymbol; - enclosingScopeSymbol = callExpressionInformation.enclosingScopeSymbol; - - var isPropertyOrVar = symbol.kind == 4096 /* Property */ || symbol.kind == 512 /* Variable */; - typeSymbol = symbol.type; - if (isPropertyOrVar) { - if (typeSymbol.getName() != "") { - symbol = typeSymbol; - } - isPropertyOrVar = (typeSymbol.kind != 16 /* Interface */ && typeSymbol.kind != 8388608 /* ObjectType */) || typeSymbol.getName() == ""; - } - - if (!isPropertyOrVar) { - _isCallExpression = true; - resolvedSignatures = callExpressionInformation.resolvedSignatures; - candidateSignature = callExpressionInformation.candidateSignature; - isConstructorCall = callExpressionInformation.isConstructorCall; - } - } else { - var symbolInformation = this.compiler.getSymbolInformationFromAST(node, document); - - if (!symbolInformation || !symbolInformation.symbol) { - return null; - } - - ast = symbolInformation.ast; - symbol = symbolInformation.symbol; - enclosingScopeSymbol = symbolInformation.enclosingScopeSymbol; - - if (symbol.kind === 65536 /* Method */ || symbol.kind == 16384 /* Function */) { - typeSymbol = symbol.type; - if (typeSymbol) { - _isCallExpression = true; - resolvedSignatures = typeSymbol.getCallSignatures(); - } - } - } - - if (resolvedSignatures && (!candidateSignature || candidateSignature.isDefinition())) { - for (var i = 0, len = resolvedSignatures.length; i < len; i++) { - if (len > 1 && resolvedSignatures[i].isDefinition()) { - continue; - } - - candidateSignature = resolvedSignatures[i]; - break; - } - } - - var memberName = _isCallExpression ? TypeScript.PullSignatureSymbol.getSignatureTypeMemberName(candidateSignature, resolvedSignatures, enclosingScopeSymbol) : symbol.getTypeNameEx(enclosingScopeSymbol, true); - var kind = this.mapPullElementKind(symbol.kind, symbol, !_isCallExpression, _isCallExpression, isConstructorCall); - - var docCommentSymbol = candidateSignature || symbol; - var docComment = docCommentSymbol.docComments(!_isCallExpression); - var symbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - var minChar = ast ? ast.start() : -1; - var limChar = ast ? ast.end() : -1; - - return new Services.TypeInfo(memberName, docComment, symbolName, kind, minChar, limChar); - }; - - LanguageService.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - if (Services.CompletionHelpers.isCompletionListBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("Returning an empty list because completion was blocked."); - return null; - } - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, true, true); - - if (node && node.kind() === 11 /* IdentifierName */ && node.start() === node.end()) { - node = node.parent; - } - - var isRightOfDot = false; - if (node && node.kind() === 212 /* MemberAccessExpression */ && node.expression.end() < position) { - isRightOfDot = true; - node = node.expression; - } else if (node && node.kind() === 121 /* QualifiedName */ && node.left.end() < position) { - isRightOfDot = true; - node = node.left; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 212 /* MemberAccessExpression */ && node.parent.name === node) { - isRightOfDot = true; - node = node.parent.expression; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 121 /* QualifiedName */ && node.parent.right === node) { - isRightOfDot = true; - node = node.parent.left; - } - - var entries = new TypeScript.IdentiferNameHashTable(); - - if (isRightOfDot) { - var members = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - if (!members) { - return null; - } - - isMemberCompletion = true; - this.getCompletionEntriesFromSymbols(members, entries); - } else { - var containingObjectLiteral = Services.CompletionHelpers.getContainingObjectLiteralApplicableForCompletion(document.syntaxTree().sourceUnit(), position); - - if (containingObjectLiteral) { - var searchPosition = Math.min(position, containingObjectLiteral.end()); - var path = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, searchPosition); - - while (node && node.kind() !== 215 /* ObjectLiteralExpression */) { - node = node.parent; - } - - if (!node || node.kind() !== 215 /* ObjectLiteralExpression */) { - return null; - } - - isMemberCompletion = true; - - var contextualMembers = this.compiler.getContextualMembersFromAST(node, document); - if (contextualMembers && contextualMembers.symbols && contextualMembers.symbols.length > 0) { - var existingMembers = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - - this.getCompletionEntriesFromSymbols({ - symbols: Services.CompletionHelpers.filterContextualMembersList(contextualMembers.symbols, existingMembers, fileName, position), - enclosingScopeSymbol: contextualMembers.enclosingScopeSymbol - }, entries); - } - } else { - isMemberCompletion = false; - var decls = this.compiler.getVisibleDeclsFromAST(node, document); - this.getCompletionEntriesFromDecls(decls, entries); - } - } - - if (!isMemberCompletion) { - this.getCompletionEntriesForKeywords(Services.KeywordCompletions.getKeywordCompltions(), entries); - } - - var completions = new Services.CompletionInfo(); - completions.isMemberCompletion = isMemberCompletion; - completions.entries = []; - entries.map(function (key, value) { - completions.entries.push({ - name: value.name, - kind: value.kind, - kindModifiers: value.kindModifiers - }); - }, null); - - this.activeCompletionSession = new Services.CompletionSession(fileName, position, entries); - - return completions; - }; - - LanguageService.prototype.getCompletionEntriesFromSymbols = function (symbolInfo, result) { - for (var i = 0, n = symbolInfo.symbols.length; i < n; i++) { - var symbol = symbolInfo.symbols[i]; - - var symbolDisplayName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(symbol.getDisplayName()); - if (!symbolDisplayName) { - continue; - } - - var symbolKind = symbol.kind; - - var exitingEntry = result.lookup(symbolDisplayName); - - if (exitingEntry && (symbolKind & 68147712 /* SomeValue */)) { - continue; - } - - var entry; - var kindName = this.mapPullElementKind(symbolKind, symbol, true); - var kindModifiersName = this.getScriptElementKindModifiers(symbol); - - if (symbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry = new Services.ResolvedCompletionEntry(symbolDisplayName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(symbolDisplayName, kindName, kindModifiersName, symbol.getDeclarations()[0]); - } - - result.addOrUpdate(symbolDisplayName, entry); - } - }; - - LanguageService.prototype.getCompletionEntriesFromDecls = function (decls, result) { - for (var i = 0, n = decls ? decls.length : 0; i < n; i++) { - var decl = decls[i]; - - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - if (!declDisplaylName) { - continue; - } - - var declKind = decl.kind; - - var exitingEntry = result.lookup(declDisplaylName); - - if (exitingEntry && (declKind & 68147712 /* SomeValue */)) { - continue; - } - - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - var entry = null; - - var symbol = decl.hasSymbol() && decl.getSymbol(); - - var enclosingDecl = decl.getEnclosingDecl(); - var enclosingScopeSymbol = (enclosingDecl && enclosingDecl.hasSymbol()) ? enclosingDecl.getSymbol() : null; - - if (symbol && symbol.isResolved && enclosingScopeSymbol && enclosingScopeSymbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, enclosingScopeSymbol); - entry = new Services.ResolvedCompletionEntry(declDisplaylName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); - } - - result.addOrUpdate(declDisplaylName, entry); - } - }; - - LanguageService.prototype.getResolvedCompletionEntryDetailsFromSymbol = function (symbol, enclosingScopeSymbol) { - var typeName = symbol.getTypeName(enclosingScopeSymbol, true); - var fullSymbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - - var type = symbol.type; - var symbolForDocComments = symbol; - if (type && type.hasOnlyOverloadCallSignatures()) { - symbolForDocComments = type.getCallSignatures()[0]; - } - - var docComments = symbolForDocComments.docComments(true); - return { - typeName: typeName, - fullSymbolName: fullSymbolName, - docComments: docComments - }; - }; - - LanguageService.prototype.getCompletionEntriesForKeywords = function (keywords, result) { - for (var i = 0, n = keywords.length; i < n; i++) { - var keyword = keywords[i]; - result.addOrUpdate(keyword.name, keyword); - } - }; - - LanguageService.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - if (!this.activeCompletionSession || this.activeCompletionSession.fileName !== fileName || this.activeCompletionSession.position !== position) { - return null; - } - - var entry = this.activeCompletionSession.entries.lookup(entryName); - if (!entry) { - return null; - } - - if (!entry.isResolved()) { - var decl = entry.decl; - - var document = this.compiler.getDocument(fileName); - if (decl.fileName() === TypeScript.switchToForwardSlashes(fileName)) { - decl = this.tryFindDeclFromPreviousCompilerVersion(decl); - - if (decl) { - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - var declKind = decl.kind; - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); - this.activeCompletionSession.entries.addOrUpdate(entryName, entry); - } - } - - if (decl) { - var node = TypeScript.ASTHelpers.getAstAtPosition(document.sourceUnit(), position); - var symbolInfo = this.compiler.pullGetDeclInformation(decl, node, document); - - if (!symbolInfo) { - return null; - } - - var symbol = symbolInfo.symbol; - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry.resolve(completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } - } - - return { - name: entry.name, - kind: entry.kind, - kindModifiers: entry.kindModifiers, - type: entry.type, - fullSymbolName: entry.fullSymbolName, - docComment: entry.docComment - }; - }; - - LanguageService.prototype.tryFindDeclFromPreviousCompilerVersion = function (invalidatedDecl) { - var fileName = invalidatedDecl.fileName(); - - var declsInPath = []; - var current = invalidatedDecl; - while (current) { - if (current.kind !== 1 /* Script */) { - declsInPath.unshift(current); - } - - current = current.getParentDecl(); - } - - var topLevelDecl = this.compiler.topLevelDeclaration(fileName); - if (!topLevelDecl) { - return null; - } - - var declsToSearch = [topLevelDecl]; - var foundDecls = []; - var keepSearching = (invalidatedDecl.kind & 4 /* Container */) || (invalidatedDecl.kind & 16 /* Interface */) || (invalidatedDecl.kind & 8 /* Class */) || (invalidatedDecl.kind & 64 /* Enum */); - - for (var i = 0; i < declsInPath.length; i++) { - var declInPath = declsInPath[i]; - var decls = []; - - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(declInPath.name, declInPath.kind); - - decls.push.apply(decls, foundDecls); - - if (foundDecls.length && !keepSearching) { - break; - } - } - - declsToSearch = decls; - - if (declsToSearch.length == 0) { - break; - } - } - - return declsToSearch.length === 0 ? null : declsToSearch[0]; - }; - - LanguageService.prototype.getModuleOrEnumKind = function (symbol) { - if (symbol) { - var declarations = symbol.getDeclarations(); - for (var i = 0; i < declarations.length; i++) { - var declKind = declarations[i].kind; - if (declKind == 4 /* Container */) { - return Services.ScriptElementKind.moduleElement; - } else if (declKind == 64 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } else if (declKind == 512 /* Variable */) { - var declFlags = declarations[i].flags; - if (declFlags & 32768 /* InitializedModule */) { - return Services.ScriptElementKind.moduleElement; - } else if (declFlags & 4096 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } - } - } - } - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.mapPullElementKind = function (kind, symbol, useConstructorAsClass, varIsFunction, functionIsConstructor) { - if (functionIsConstructor) { - return Services.ScriptElementKind.constructorImplementationElement; - } - - if (varIsFunction) { - switch (kind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - case 16 /* Interface */: - case 8 /* Class */: - case 2048 /* Parameter */: - return Services.ScriptElementKind.functionElement; - case 512 /* Variable */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberFunctionElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } else { - switch (kind) { - case 1 /* Script */: - return Services.ScriptElementKind.scriptElement; - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - return Services.ScriptElementKind.moduleElement; - case 16 /* Interface */: - return Services.ScriptElementKind.interfaceElement; - case 8 /* Class */: - return Services.ScriptElementKind.classElement; - case 64 /* Enum */: - return Services.ScriptElementKind.enumElement; - case 512 /* Variable */: - var scriptElementKind = this.getModuleOrEnumKind(symbol); - if (scriptElementKind != Services.ScriptElementKind.unknown) { - return scriptElementKind; - } - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localVariableElement : Services.ScriptElementKind.variableElement; - case 2048 /* Parameter */: - return Services.ScriptElementKind.parameterElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberVariableElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return useConstructorAsClass ? Services.ScriptElementKind.classElement : Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 67108864 /* EnumMember */: - return Services.ScriptElementKind.memberVariableElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } - - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.getScriptElementKindModifiers = function (symbol) { - var result = []; - - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - if (symbol.anyDeclHasFlag(8 /* Ambient */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - if (symbol.anyDeclHasFlag(4 /* Public */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - if (symbol.anyDeclHasFlag(2 /* Private */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - if (symbol.anyDeclHasFlag(16 /* Static */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getScriptElementKindModifiersFromFlags = function (flags) { - var result = []; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, startPos, false); - - if (!node) { - return null; - } - - while (node) { - if (TypeScript.ASTHelpers.isNameOfMemberAccessExpression(node) || TypeScript.ASTHelpers.isRightSideOfQualifiedName(node)) { - node = node.parent; - } else { - break; - } - } - - var spanInfo = new Services.SpanInfo(node.start(), node.end()); - return spanInfo; - }; - - LanguageService.prototype.getBreakpointStatementAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxtree = this.getSyntaxTree(fileName); - return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, pos); - }; - - LanguageService.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatSelection(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatDocument(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatOnPaste(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - - if (key === "}") { - return manager.formatOnClosingCurlyBrace(position); - } else if (key === ";") { - return manager.formatOnSemicolon(position); - } else if (key === "\n") { - return manager.formatOnEnter(position); - } - - return []; - }; - - LanguageService.prototype.getFormattingManager = function (fileName, options) { - if (this.formattingRulesProvider == null) { - this.formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(this.logger); - } - - this.formattingRulesProvider.ensureUpToDate(options); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - - var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, this.formattingRulesProvider, options); - - return manager; - }; - - LanguageService.prototype.getOutliningRegions = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.OutliningElementsCollector.collectElements(syntaxTree.sourceUnit()); - }; - - LanguageService.prototype.getIndentationAtPosition = function (fileName, position, editorOptions) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - var options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); - - return TypeScript.Services.Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); - }; - - LanguageService.prototype.getBraceMatchingAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.BraceMatcher.getMatchSpans(syntaxTree, position); - }; - - LanguageService.prototype.getScriptLexicalStructure = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - var items = []; - Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, fileName, syntaxTree.sourceUnit()); - - return items; - }; - - LanguageService.prototype.getSyntaxTree = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this._syntaxTreeCache.getCurrentFileSyntaxTree(fileName); - }; - return LanguageService; - })(); - Services.LanguageService = LanguageService; - - function isSignatureHelpBlocker(ast) { - if (ast) { - switch (ast.kind()) { - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 225 /* VariableDeclarator */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return true; - } - } - - return false; - } - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var FindReferenceHelpers = (function () { - function FindReferenceHelpers() { - } - FindReferenceHelpers.compareSymbolsForLexicalIdentity = function (firstSymbol, secondSymbol) { - if (!firstSymbol.isAlias() && firstSymbol.isContainer()) { - var containerForFirstSymbol = firstSymbol; - if (containerForFirstSymbol.getInstanceSymbol()) { - firstSymbol = containerForFirstSymbol.getInstanceSymbol(); - } - } - - if (!secondSymbol.isAlias() && secondSymbol.isContainer()) { - var containerForSecondSymbol = secondSymbol; - if (containerForSecondSymbol.getInstanceSymbol()) { - secondSymbol = containerForSecondSymbol.getInstanceSymbol(); - } - } - - if (firstSymbol.kind === secondSymbol.kind) { - if (firstSymbol === secondSymbol) { - return true; - } - - if (firstSymbol.kind === 512 /* Variable */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - return firstSymbolDecl.getParentDecl() === secondSymbolDecl.getParentDecl(); - } - - if (firstSymbol.kind === 4096 /* Property */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - var firstParentDecl = firstSymbolDecl.getParentDecl(); - var secondParentDecl = secondSymbolDecl.getParentDecl(); - - if (firstParentDecl.kind === 256 /* ObjectLiteral */ && secondParentDecl.kind === 256 /* ObjectLiteral */) { - return firstParentDecl.ast() === secondParentDecl.ast(); - } - } - - return false; - } else { - switch (firstSymbol.kind) { - case 8 /* Class */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } - case 4096 /* Property */: { - if (firstSymbol.isAccessor()) { - var getterSymbol = firstSymbol.getGetter(); - var setterSymbol = firstSymbol.getSetter(); - - if (getterSymbol && getterSymbol === secondSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === secondSymbol) { - return true; - } - } - return false; - } - case 16384 /* Function */: { - if (secondSymbol.isAccessor()) { - var getterSymbol = secondSymbol.getGetter(); - var setterSymbol = secondSymbol.getSetter(); - - if (getterSymbol && getterSymbol === firstSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === firstSymbol) { - return true; - } - } - return false; - } - case 32768 /* ConstructorMethod */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } - } - } - - return firstSymbol === secondSymbol; - }; - - FindReferenceHelpers.checkSymbolsForDeclarationEquality = function (firstSymbol, secondSymbol) { - var firstSymbolDeclarations = firstSymbol.getDeclarations(); - var secondSymbolDeclarations = secondSymbol.getDeclarations(); - for (var i = 0, iLen = firstSymbolDeclarations.length; i < iLen; i++) { - for (var j = 0, jLen = secondSymbolDeclarations.length; j < jLen; j++) { - if (this.declarationsAreSameOrParents(firstSymbolDeclarations[i], secondSymbolDeclarations[j])) { - return true; - } - } - } - return false; - }; - - FindReferenceHelpers.declarationsAreSameOrParents = function (firstDecl, secondDecl) { - var firstParent = firstDecl.getParentDecl(); - var secondParent = secondDecl.getParentDecl(); - if (firstDecl === secondDecl || firstDecl === secondParent || firstParent === secondDecl || firstParent === secondParent) { - return true; - } - return false; - }; - return FindReferenceHelpers; - })(); - Services.FindReferenceHelpers = FindReferenceHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - - - - - var ShimBase = (function () { - function ShimBase(factory) { - this.factory = factory; - factory.registerShim(this); - } - ShimBase.prototype.dispose = function (dummy) { - this.factory.unregisterShim(this); - }; - return ShimBase; - })(); - Services.ShimBase = ShimBase; - - var ScriptSnapshotShimAdapter = (function () { - function ScriptSnapshotShimAdapter(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - this.lineStartPositions = null; - } - ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { - return this.scriptSnapshotShim.getText(start, end); - }; - - ScriptSnapshotShimAdapter.prototype.getLength = function () { - return this.scriptSnapshotShim.getLength(); - }; - - ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { - if (this.lineStartPositions == null) { - this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); - } - - return this.lineStartPositions; - }; - - ScriptSnapshotShimAdapter.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); - if (encoded == null) { - return null; - } - - var decoded = JSON.parse(encoded); - return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); - }; - return ScriptSnapshotShimAdapter; - })(); - - var LanguageServiceShimHostAdapter = (function () { - function LanguageServiceShimHostAdapter(shimHost) { - this.shimHost = shimHost; - } - LanguageServiceShimHostAdapter.prototype.information = function () { - return this.shimHost.information(); - }; - - LanguageServiceShimHostAdapter.prototype.debug = function () { - return this.shimHost.debug(); - }; - - LanguageServiceShimHostAdapter.prototype.warning = function () { - return this.shimHost.warning(); - }; - - LanguageServiceShimHostAdapter.prototype.error = function () { - return this.shimHost.error(); - }; - - LanguageServiceShimHostAdapter.prototype.fatal = function () { - return this.shimHost.fatal(); - }; - - LanguageServiceShimHostAdapter.prototype.log = function (s) { - this.shimHost.log(s); - }; - - LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { - var settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson == null || settingsJson == "") { - return null; - } - var settings = JSON.parse(settingsJson); - return settings; - }; - - LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { - var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { - return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { - return this.shimHost.getScriptVersion(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { - return this.shimHost.getScriptIsOpen(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptByteOrderMark = function (fileName) { - return this.shimHost.getScriptByteOrderMark(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getDiagnosticsObject = function () { - return this.shimHost.getDiagnosticsObject(); - }; - - LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { - var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - }; - - LanguageServiceShimHostAdapter.prototype.resolveRelativePath = function (path, directory) { - return this.shimHost.resolveRelativePath(path, directory); - }; - - LanguageServiceShimHostAdapter.prototype.fileExists = function (path) { - return this.shimHost.fileExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.directoryExists = function (path) { - return this.shimHost.directoryExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.getParentDirectory = function (path) { - return this.shimHost.getParentDirectory(path); - }; - return LanguageServiceShimHostAdapter; - })(); - Services.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; - - function simpleForwardCall(logger, actionDescription, action) { - logger.log(actionDescription); - var start = Date.now(); - var result = action(); - var end = Date.now(); - logger.log(actionDescription + " completed in " + (end - start) + " msec"); - if (typeof (result) === "string") { - var str = result; - if (str.length > 128) { - str = str.substring(0, 128) + "..."; - } - logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); - } - return result; - } - Services.simpleForwardCall = simpleForwardCall; - - function forwardJSONCall(logger, actionDescription, action) { - try { - var result = simpleForwardCall(logger, actionDescription, action); - return JSON.stringify({ result: result }); - } catch (err) { - TypeScript.Services.logInternalError(logger, err); - err.description = actionDescription; - return JSON.stringify({ error: err }); - } - } - Services.forwardJSONCall = forwardJSONCall; - - var LanguageServiceShim = (function (_super) { - __extends(LanguageServiceShim, _super); - function LanguageServiceShim(factory, host, languageService) { - _super.call(this, factory); - this.host = host; - this.languageService = languageService; - this.logger = this.host; - } - LanguageServiceShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - LanguageServiceShim.prototype.dispose = function (dummy) { - this.logger.log("dispose()"); - this.languageService = null; - - if (debugObjectHost && debugObjectHost.CollectGarbage) { - debugObjectHost.CollectGarbage(); - this.logger.log("CollectGarbage()"); - } - - this.logger = null; - - _super.prototype.dispose.call(this, dummy); - }; - - LanguageServiceShim.prototype.refresh = function (throwOnError) { - var _this = this; - this.forwardJSONCall("refresh(" + throwOnError + ")", function () { - _this.languageService.refresh(); - return null; - }); - }; - - LanguageServiceShim.prototype.cleanupSemanticCache = function () { - var _this = this; - this.forwardJSONCall("cleanupSemanticCache()", function () { - _this.languageService.cleanupSemanticCache(); - return null; - }); - }; - - LanguageServiceShim.realizeDiagnosticCategory = function (category) { - switch (category) { - case 1 /* Error */: - return Services.DiagnosticCategory.error; - case 0 /* Warning */: - return Services.DiagnosticCategory.warning; - case 2 /* Message */: - return Services.DiagnosticCategory.message; - default: - return Services.DiagnosticCategory.none; - } - }; - - LanguageServiceShim.realizeDiagnostic = function (diagnostic) { - return { - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) - }; - }; - - LanguageServiceShim.prototype.realizeDiagnosticWithFileName = function (diagnostic) { - return { - fileName: diagnostic.fileName(), - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) - }; - }; - - LanguageServiceShim.prototype.getSyntacticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSyntacticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getSemanticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSemanticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSemanticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { - var errors = _this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(function (d) { - return _this.realizeDiagnosticWithFileName(d); - }); - }); - }; - - LanguageServiceShim.prototype.getTypeAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getTypeAtPosition(\"" + fileName + "\", " + position + ")", function () { - var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); - return typeInfo; - }); - }; - - LanguageServiceShim.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - var _this = this; - return this.forwardJSONCall("getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", function () { - var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getBreakpointStatementAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", function () { - var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getSignatureAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getSignatureAtPosition(\"" + fileName + "\", " + position + ")", function () { - var signatureInfo = _this.languageService.getSignatureAtPosition(fileName, position); - return signatureInfo; - }); - }; - - LanguageServiceShim.prototype.getDefinitionAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getDefinitionAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getBraceMatchingAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", function () { - var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position); - return textRanges; - }); - }; - - LanguageServiceShim.prototype.getIndentationAtPosition = function (fileName, position, options) { - var _this = this; - return this.forwardJSONCall("getIndentationAtPosition(\"" + fileName + "\", " + position + ")", function () { - var localOptions = JSON.parse(options); - var columnOffset = _this.languageService.getIndentationAtPosition(fileName, position, localOptions); - return { value: columnOffset }; - }); - }; - - LanguageServiceShim.prototype.getReferencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getReferencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getReferencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getOccurrencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getOccurrencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getImplementorsAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getImplementorsAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - var _this = this; - return this.forwardJSONCall("getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", function () { - var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); - return completion; - }); - }; - - LanguageServiceShim.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - var _this = this; - return this.forwardJSONCall("getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", function () { - var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName); - return details; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - return this.forwardJSONCall("getNavigateToItems(\"" + searchValue + "\")", function () { - var items = _this.languageService.getNavigateToItems(searchValue); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getScriptLexicalStructure = function (fileName) { - var _this = this; - return this.forwardJSONCall("getScriptLexicalStructure(\"" + fileName + "\")", function () { - var items = _this.languageService.getScriptLexicalStructure(fileName); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getOutliningRegions = function (fileName) { - var _this = this; - return this.forwardJSONCall("getOutliningRegions(\"" + fileName + "\")", function () { - var items = _this.languageService.getOutliningRegions(fileName); - return items; - }); - }; - - LanguageServiceShim.prototype.getEmitOutput = function (fileName) { - var _this = this; - return this.forwardJSONCall("getEmitOutput(\"" + fileName + "\")", function () { - var output = _this.languageService.getEmitOutput(fileName); - return output; - }); - }; - - LanguageServiceShim.prototype._navigateToItemsToString = function (items) { - var result = []; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - - result.push({ - name: item.name, - kind: item.kind, - kindModifiers: item.kindModifiers, - containerName: item.containerName, - containerKind: item.containerKind, - matchKind: item.matchKind, - fileName: item.fileName, - minChar: item.minChar, - limChar: item.limChar, - additionalSpans: item.additionalSpans ? item.additionalSpans.map(function (i) { - return { start: i.minChar, end: i.limChar }; - }) : undefined - }); - } - - return result; - }; - return LanguageServiceShim; - })(ShimBase); - Services.LanguageServiceShim = LanguageServiceShim; - - var ClassifierShim = (function (_super) { - __extends(ClassifierShim, _super); - function ClassifierShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.classifier = new TypeScript.Services.Classifier(this.host); - } - ClassifierShim.prototype.getClassificationsForLine = function (text, lexState) { - var classification = this.classifier.getClassificationsForLine(text, lexState); - var items = classification.entries; - var result = ""; - for (var i = 0; i < items.length; i++) { - result += items[i].length + "\n"; - result += items[i].classification + "\n"; - } - result += classification.finalLexState; - return result; - }; - return ClassifierShim; - })(ShimBase); - Services.ClassifierShim = ClassifierShim; - - var CoreServicesShim = (function (_super) { - __extends(CoreServicesShim, _super); - function CoreServicesShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.logger = this.host.logger; - this.services = new TypeScript.Services.CoreServices(this.host); - } - CoreServicesShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - CoreServicesShim.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - var _this = this; - return this.forwardJSONCall("getPreProcessedFileInfo(\"" + fileName + "\")", function () { - var result = _this.services.getPreProcessedFileInfo(fileName, sourceText); - return result; - }); - }; - - CoreServicesShim.prototype.getDefaultCompilationSettings = function () { - var _this = this; - return this.forwardJSONCall("getDefaultCompilationSettings()", function () { - var result = _this.services.getDefaultCompilationSettings(); - return result; - }); - }; - - CoreServicesShim.prototype.dumpMemory = function (dummy) { - var _this = this; - return this.forwardJSONCall("dumpMemory()", function () { - return _this.services.dumpMemory(); - }); - }; - - CoreServicesShim.prototype.getMemoryInfo = function (dummy) { - var _this = this; - return this.forwardJSONCall("getMemoryInfo()", function () { - var result = _this.services.getMemoryInfo(); - return result; - }); - }; - return CoreServicesShim; - })(ShimBase); - Services.CoreServicesShim = CoreServicesShim; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var OutliningElementsCollector = (function (_super) { - __extends(OutliningElementsCollector, _super); - function OutliningElementsCollector() { - _super.call(this, OutliningElementsCollector.MaximumDepth); - this.inObjectLiteralExpression = false; - this.elements = []; - } - OutliningElementsCollector.prototype.visitClassDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitClassDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitInterfaceDeclaration = function (node) { - this.addOutlineRange(node, node.body, node.body); - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitModuleDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitModuleDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitEnumDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitEnumDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionExpression = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionExpression.call(this, node); - }; - - OutliningElementsCollector.prototype.visitConstructorDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitConstructorDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitMemberFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitGetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitGetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitSetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitSetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - OutliningElementsCollector.prototype.addOutlineRange = function (node, startElement, endElement) { - if (startElement && endElement) { - var start = this.position() + TypeScript.Syntax.childOffset(node, startElement); - var end = this.position() + TypeScript.Syntax.childOffset(node, endElement) + endElement.leadingTriviaWidth() + endElement.width(); - - this.elements.push(TypeScript.TextSpan.fromBounds(start, end)); - } - }; - - OutliningElementsCollector.collectElements = function (node) { - var collector = new OutliningElementsCollector(); - node.accept(collector); - return collector.elements; - }; - OutliningElementsCollector.MaximumDepth = 10; - return OutliningElementsCollector; - })(TypeScript.DepthLimitedWalker); - Services.OutliningElementsCollector = OutliningElementsCollector; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var Indenter = (function () { - function Indenter() { - } - Indenter.getIndentation = function (node, soruceText, position, editorOptions) { - var indentation = 0; - var currentToken = node.findToken(position); - var currentNode = currentToken; - - if (currentToken.token().kind() === 10 /* EndOfFileToken */) { - currentNode = currentToken.previousToken(); - } else if (Indenter.belongsToBracket(soruceText, currentToken, position)) { - currentNode = currentToken.parent(); - } - - if (currentNode === null) { - return indentation; - } - - if (currentNode.kind() === 14 /* StringLiteral */ || currentNode.kind() === 12 /* RegularExpressionLiteral */) { - return indentation; - } - - var currentElement = currentNode.element(); - var parent = currentNode.parent(); - - while (parent !== null) { - if (parent.fullStart() !== currentNode.fullStart()) { - if (Indenter.isInContainerNode(parent.element(), currentElement)) { - indentation += editorOptions.IndentSize; - } else { - var listIndentation = Indenter.getCustomListIndentation(parent.element(), currentElement); - if (listIndentation !== -1) { - return indentation + listIndentation; - } - } - } - currentNode = parent; - currentElement = parent.element(); - parent = parent.parent(); - } - - return indentation; - }; - - Indenter.belongsToBracket = function (sourceText, token, position) { - switch (token.token().kind()) { - case 70 /* OpenBraceToken */: - case 71 /* CloseBraceToken */: - case 72 /* OpenParenToken */: - case 73 /* CloseParenToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: - if (position < token.start()) { - var text = sourceText.getText(position, token.start()); - for (var i = 0; i < text.length; i++) { - if (TypeScript.CharacterInfo.isLineTerminator(text.charCodeAt(i))) { - return false; - } - } - } - return true; - } - return false; - }; - - Indenter.isInContainerNode = function (parent, element) { - switch (parent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 133 /* ImportDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - case 122 /* ObjectType */: - return true; - - case 128 /* InterfaceDeclaration */: - return element.kind() !== 122 /* ObjectType */; - - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 147 /* IfStatement */: - case 235 /* ElseClause */: - return element.kind() !== 146 /* Block */; - - case 159 /* TryStatement */: - return false; - default: - return parent.isNode() && parent.isStatement(); - } - }; - - Indenter.getCustomListIndentation = function (list, element) { - switch (list.kind()) { - case 2 /* SeparatedList */: - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (child !== null && child === element) - return Indenter.getListItemIndentation(list, i - 1); - } - break; - - case 226 /* ArgumentList */: - var argumentList = list; - var _arguments = argumentList.arguments; - if (_arguments !== null && argumentList.closeParenToken === element) { - return Indenter.getListItemIndentation(_arguments, _arguments.childCount() - 1); - } - break; - - case 227 /* ParameterList */: - var parameterList = list; - var parameters = parameterList.parameters; - if (parameters !== null && parameterList.closeParenToken === element) { - return Indenter.getListItemIndentation(parameters, parameters.childCount() - 1); - } - break; - - case 228 /* TypeArgumentList */: - var typeArgumentList = list; - var typeArguments = typeArgumentList.typeArguments; - if (typeArguments !== null && typeArgumentList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeArguments, typeArguments.childCount() - 1); - } - break; - - case 229 /* TypeParameterList */: - var typeParameterList = list; - var typeParameters = typeParameterList.typeParameters; - if (typeParameters !== null && typeParameterList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeParameters, typeParameters.childCount() - 1); - } - break; - } - return -1; - }; - - Indenter.getListItemIndentation = function (list, elementIndex) { - for (var i = elementIndex; i > 0; i--) { - var child = list.childAt(i); - var previousChild = list.childAt(i - 1); - if ((child !== null && child.leadingTrivia().hasNewLine()) || (previousChild !== null && previousChild.trailingTrivia().hasNewLine())) { - return child.leadingTriviaWidth(); - } - } - return -1; - }; - return Indenter; - })(); - Services.Indenter = Indenter; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Breakpoints) { - function createBreakpointSpanInfo(parentElement) { - var childElements = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - childElements[_i] = arguments[_i + 1]; - } - if (!parentElement) { - return null; - } - - if (childElements.length == 0) { - return new Services.SpanInfo(parentElement.start(), parentElement.end()); - } - - var start; - var end; - for (var i = 0; i < childElements.length; i++) { - var element = childElements[i]; - if (element) { - if (start == undefined) { - start = parentElement.childStart(element); - } - end = parentElement.childEnd(element); - } - } - - return new Services.SpanInfo(start, end); - } - - function createBreakpointSpanInfoWithLimChar(startElement, limChar) { - return new Services.SpanInfo(startElement.start(), limChar); - } - - var BreakpointResolver = (function () { - function BreakpointResolver(posLine, lineMap) { - this.posLine = posLine; - this.lineMap = lineMap; - } - BreakpointResolver.prototype.breakpointSpanOfToken = function (positionedToken) { - switch (positionedToken.token().tokenKind) { - case 70 /* OpenBraceToken */: - return this.breakpointSpanOfOpenBrace(positionedToken); - - case 71 /* CloseBraceToken */: - return this.breakpointSpanOfCloseBrace(positionedToken); - - case 79 /* CommaToken */: - return this.breakpointSpanOfComma(positionedToken); - - case 78 /* SemicolonToken */: - case 10 /* EndOfFileToken */: - return this.breakpointSpanIfStartsOnSameLine(positionedToken.previousToken()); - - case 73 /* CloseParenToken */: - return this.breakpointSpanOfCloseParen(positionedToken); - - case 22 /* DoKeyword */: - var parentElement = positionedToken.parent(); - if (parentElement && parentElement.kind() == 161 /* DoStatement */) { - return this.breakpointSpanIfStartsOnSameLine(positionedToken.nextToken()); - } - break; - } - - return this.breakpointSpanOfContainingNode(positionedToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfOpenBrace = function (openBraceToken) { - var container = openBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container && container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfFirstStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(container)); - } else { - return this.breakpointSpanOf(container); - } - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstEnumElement(container); - } else { - return this.breakpointSpanOf(container); - } - - case 147 /* IfStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 236 /* CatchClause */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(container); - } - - case 161 /* DoStatement */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 154 /* ForStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(openBraceToken.previousToken()); - } - - case 235 /* ElseClause */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 237 /* FinallyClause */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementOfFirstCaseClause(container); - } else { - return this.breakpointSpanOf(container); - } - } - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfCloseBrace = function (closeBraceToken) { - var container = closeBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfLastStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - var moduleSyntax = container.node(); - if (moduleSyntax.moduleElements && moduleSyntax.moduleElements.childCount() > 0) { - return createBreakpointSpanInfo(closeBraceToken); - } else { - return null; - } - - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfLastStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - return this.breakpointSpanOfLastStatementOfLastCaseClause(container); - } - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfComma = function (commaToken) { - var commaParent = commaToken.parent(); - if (commaParent && commaParent.element().isSeparatedList()) { - var grandParent = commaParent.parent(); - if (grandParent) { - switch (grandParent.kind()) { - case 224 /* VariableDeclaration */: - case 132 /* EnumDeclaration */: - case 227 /* ParameterList */: - var index = commaParent.childIndex(commaToken.token()); - - if (index > 0) { - var child = commaParent.childAt(index - 1); - return this.breakpointSpanOf(child); - } - - if (grandParent.kind() == 132 /* EnumDeclaration */) { - return null; - } - break; - } - } - } - - return this.breakpointSpanOfContainingNode(commaToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfCloseParen = function (closeParenToken) { - var closeParenParent = closeParenToken.parent(); - if (closeParenParent) { - switch (closeParenParent.kind()) { - case 154 /* ForStatement */: - case 227 /* ParameterList */: - return this.breakpointSpanOf(closeParenToken.previousToken()); - } - } - - return this.breakpointSpanOfContainingNode(closeParenToken); - }; - - BreakpointResolver.prototype.canHaveBreakpointInBlock = function (blockNode) { - if (!blockNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(blockNode)) { - return false; - } - - var blockSyntax = blockNode.node(); - return blockSyntax.statements && blockSyntax.statements.childCount() != 0; - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; - } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; - } - - var firstStatement = statementsNode.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - return null; - } else { - return this.breakpointSpanOf(firstStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; - } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; - } - - var lastStatement = statementsNode.childAt(statementsNode.childCount() - 1); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; - } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; - } - - var firstStatement = positionedList.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - - return null; - } else { - return this.breakpointSpanOf(firstStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfLastChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; - } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; - } - var lastStatement = positionedList.childAt(0); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfNode = function (positionedNode) { - var node = positionedNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - return this.breakpointSpanOfDeclarationWithElements(positionedNode); - - case 225 /* VariableDeclarator */: - return this.breakpointSpanOfVariableDeclarator(positionedNode); - - case 224 /* VariableDeclaration */: - return this.breakpointSpanOfVariableDeclaration(positionedNode); - - case 148 /* VariableStatement */: - return this.breakpointSpanOfVariableStatement(positionedNode); - - case 242 /* Parameter */: - return this.breakpointSpanOfParameter(positionedNode); - - case 136 /* MemberVariableDeclaration */: - return this.breakpointSpanOfMemberVariableDeclaration(positionedNode); - - case 133 /* ImportDeclaration */: - return this.breakpointSpanOfImportDeclaration(positionedNode); - - case 132 /* EnumDeclaration */: - return this.breakpointSpanOfEnumDeclaration(positionedNode); - - case 243 /* EnumElement */: - return this.breakpointSpanOfEnumElement(positionedNode); - - case 147 /* IfStatement */: - return this.breakpointSpanOfIfStatement(positionedNode); - case 235 /* ElseClause */: - return this.breakpointSpanOfElseClause(positionedNode); - case 155 /* ForInStatement */: - return this.breakpointSpanOfForInStatement(positionedNode); - case 154 /* ForStatement */: - return this.breakpointSpanOfForStatement(positionedNode); - case 158 /* WhileStatement */: - return this.breakpointSpanOfWhileStatement(positionedNode); - case 161 /* DoStatement */: - return this.breakpointSpanOfDoStatement(positionedNode); - case 151 /* SwitchStatement */: - return this.breakpointSpanOfSwitchStatement(positionedNode); - case 233 /* CaseSwitchClause */: - return this.breakpointSpanOfCaseSwitchClause(positionedNode); - case 234 /* DefaultSwitchClause */: - return this.breakpointSpanOfDefaultSwitchClause(positionedNode); - case 163 /* WithStatement */: - return this.breakpointSpanOfWithStatement(positionedNode); - case 159 /* TryStatement */: - return this.breakpointSpanOfTryStatement(positionedNode); - case 236 /* CatchClause */: - return this.breakpointSpanOfCatchClause(positionedNode); - case 237 /* FinallyClause */: - return this.breakpointSpanOfFinallyClause(positionedNode); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.breakpointSpanOfParenthesizedArrowFunctionExpression(positionedNode); - - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfSimpleArrowFunctionExpression(positionedNode); - - default: - if (node.isStatement()) { - return this.breakpointSpanOfStatement(positionedNode); - } else { - return this.breakpointOfExpression(positionedNode); - } - } - }; - - BreakpointResolver.prototype.isExpressionOfArrowExpressions = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent) { - if (expressionParent.kind() == 218 /* ParenthesizedArrowFunctionExpression */) { - var expression = expressionNode.element(); - var parenthesizedArrowExpression = expressionParent.element(); - var expressionOfParenthesizedArrowExpression = expressionParent.getPositionedChild(parenthesizedArrowExpression.expression); - return expressionOfParenthesizedArrowExpression && expressionOfParenthesizedArrowExpression.element() == expression; - } else if (expressionParent.kind() == 219 /* SimpleArrowFunctionExpression */) { - var expression = expressionNode.element(); - var simpleArrowExpression = expressionParent.element(); - var expressionOfSimpleArrowExpression = expressionParent.getPositionedChild(simpleArrowExpression.expression); - return expressionOfSimpleArrowExpression && expressionOfSimpleArrowExpression.element() == expression; - } else if (expressionParent.kind() == 173 /* CommaExpression */) { - return this.isExpressionOfArrowExpressions(expressionParent); - } - } - return false; - }; - - BreakpointResolver.prototype.isInitializerOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var initializer = expressionParent.getPositionedChild(forStatement.initializer); - return initializer && initializer.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isInitializerOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.isConditionOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var condition = expressionParent.getPositionedChild(forStatement.condition); - return condition && condition.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isConditionOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.isIncrememtorOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var incrementor = expressionParent.getPositionedChild(forStatement.incrementor); - return incrementor && incrementor.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isIncrememtorOfForStatement(expressionParent); - } - - return false; - }; - - BreakpointResolver.prototype.breakpointOfLeftOfCommaExpression = function (commaExpressionNode) { - var commaExpression = commaExpressionNode.node(); - return this.breakpointSpanOf(commaExpressionNode.getPositionedChild(commaExpression.left)); - }; - - BreakpointResolver.prototype.breakpointOfExpression = function (expressionNode) { - if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); - } - return createBreakpointSpanInfo(expressionNode); - } - - if (this.isExpressionOfArrowExpressions(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); - } - return createBreakpointSpanInfo(expressionNode); - } - - if (expressionNode.kind() == 134 /* ExportAssignment */) { - var exportAssignmentSyntax = expressionNode.node(); - return createBreakpointSpanInfo(expressionNode, exportAssignmentSyntax.exportKeyword, exportAssignmentSyntax.equalsToken, exportAssignmentSyntax.identifier); - } - - return this.breakpointSpanOfContainingNode(expressionNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfStatement = function (statementNode) { - var statement = statementNode.node(); - if (statement.kind() == 156 /* EmptyStatement */) { - return null; - } - - var containingNode = statementNode.containingNode(); - if (containingNode && containingNode.node().isStatement()) { - var useNodeForBreakpoint = false; - switch (containingNode.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 146 /* Block */: - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 146 /* Block */: - useNodeForBreakpoint = true; - } - - if (!useNodeForBreakpoint) { - return this.breakpointSpanOfContainingNode(statementNode); - } - } - - switch (statement.kind()) { - case 149 /* ExpressionStatement */: - var expressionSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(expressionSyntax.expression)); - - case 150 /* ReturnStatement */: - var returnStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, returnStatementSyntax.returnKeyword, returnStatementSyntax.expression); - - case 157 /* ThrowStatement */: - var throwStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, throwStatementSyntax.throwKeyword, throwStatementSyntax.expression); - - case 152 /* BreakStatement */: - var breakStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, breakStatementSyntax.breakKeyword, breakStatementSyntax.identifier); - - case 153 /* ContinueStatement */: - var continueStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, continueStatementSyntax.continueKeyword, continueStatementSyntax.identifier); - - case 162 /* DebuggerStatement */: - var debuggerStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(debuggerStatementSyntax.debuggerKeyword)); - - case 160 /* LabeledStatement */: - var labeledStatementSyntax = statement; - return this.breakpointSpanOf(statementNode.getPositionedChild(labeledStatementSyntax.statement)); - } - - return null; - }; - - BreakpointResolver.prototype.getSyntaxListOfDeclarationWithElements = function (positionedNode) { - var node = positionedNode.node(); - var elementsList; - var block; - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - elementsList = node.moduleElements; - break; - - case 131 /* ClassDeclaration */: - elementsList = node.classElements; - break; - - case 129 /* FunctionDeclaration */: - block = node.block; - break; - - case 137 /* ConstructorDeclaration */: - block = node.block; - break; - - case 135 /* MemberFunctionDeclaration */: - block = node.block; - break; - - case 139 /* GetAccessor */: - block = node.block; - break; - - case 140 /* SetAccessor */: - block = node.block; - break; - - case 222 /* FunctionExpression */: - block = node.block; - break; - - case 218 /* ParenthesizedArrowFunctionExpression */: - block = node.block; - break; - - case 219 /* SimpleArrowFunctionExpression */: - block = node.block; - break; - - default: - throw TypeScript.Errors.argument('positionNode', 'unknown node kind in getSyntaxListOfDeclarationWithElements'); - } - - var parentElement = positionedNode; - if (block) { - parentElement = positionedNode.getPositionedChild(block); - elementsList = block.statements; - } - - return parentElement.getPositionedChild(elementsList); - }; - - BreakpointResolver.prototype.canHaveBreakpointInDeclaration = function (positionedNode) { - return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfDeclarationWithElements = function (positionedNode) { - if (!this.canHaveBreakpointInDeclaration(positionedNode)) { - return null; - } - - var node = positionedNode.node(); - var moduleSyntax = positionedNode.node(); - if ((node.isModuleElement() && positionedNode.containingNode().kind() != 120 /* SourceUnit */) || node.isClassElement() || (moduleSyntax.kind() == 130 /* ModuleDeclaration */ && moduleSyntax.name && moduleSyntax.name.kind() == 121 /* QualifiedName */)) { - return createBreakpointSpanInfo(positionedNode); - } else { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(positionedNode)); - } - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclarator = function (varDeclaratorNode) { - if (!varDeclaratorNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclaratorNode)) { - return false; - } - - var varDeclaratorSyntax = varDeclaratorNode.node(); - return !!varDeclaratorSyntax.equalsValueClause; - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclarator = function (varDeclaratorNode) { - if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return null; - } - - var container = varDeclaratorNode.containingNode(); - if (container && container.kind() == 224 /* VariableDeclaration */) { - var parentDeclaratorsList = varDeclaratorNode.parent(); - - if (parentDeclaratorsList && parentDeclaratorsList.list().childAt(0) == varDeclaratorNode.node()) { - return this.breakpointSpanOfVariableDeclaration(container); - } - - if (this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return createBreakpointSpanInfo(varDeclaratorNode); - } else { - return null; - } - } else if (container) { - return this.breakpointSpanOfMemberVariableDeclaration(container); - } - - return null; - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclaration = function (varDeclarationNode) { - if (!varDeclarationNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclarationNode)) { - return false; - } - - var varDeclarationSyntax = varDeclarationNode.node(); - var containerChildren = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - if (!containerChildren || containerChildren.childCount() == 0) { - return false; - } - - var child = containerChildren.childAt(0); - if (child && child.element().isNode()) { - return this.canHaveBreakpointInVariableDeclarator(containerChildren.childAt(0)); - } - - return false; - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclaration = function (varDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { - return null; - } - - var container = varDeclarationNode.containingNode(); - var varDeclarationSyntax = varDeclarationNode.node(); - var varDeclarators = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - var varDeclaratorsCount = varDeclarators.childCount(); - - if (container && container.kind() == 148 /* VariableStatement */) { - return this.breakpointSpanOfVariableStatement(container); - } - - if (this.canHaveBreakpointInVariableDeclaration(varDeclarationNode)) { - return createBreakpointSpanInfoWithLimChar(varDeclarationNode, varDeclarators.childEndAt(0)); - } else { - return null; - } - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableStatement = function (varStatementNode) { - if (!varStatementNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varStatementNode)) { - return false; - } - - var variableStatement = varStatementNode.node(); - return this.canHaveBreakpointInVariableDeclaration(varStatementNode.getPositionedChild(variableStatement.variableDeclaration)); - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableStatement = function (varStatementNode) { - if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { - return null; - } - - var variableStatement = varStatementNode.node(); - var variableDeclaration = varStatementNode.getPositionedChild(variableStatement.variableDeclaration); - var varDeclarationSyntax = variableDeclaration.node(); - var varDeclarators = variableDeclaration.getPositionedChild(varDeclarationSyntax.variableDeclarators); - return createBreakpointSpanInfoWithLimChar(varStatementNode, varDeclarators.childEndAt(0)); - }; - - BreakpointResolver.prototype.breakpointSpanOfParameter = function (parameterNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(parameterNode)) { - return null; - } - - var parameterSyntax = parameterNode.node(); - if (parameterSyntax.dotDotDotToken || parameterSyntax.equalsValueClause || parameterSyntax.modifiers.childCount() > 0) { - return createBreakpointSpanInfo(parameterNode); - } else { - return null; - } - }; - - BreakpointResolver.prototype.breakpointSpanOfMemberVariableDeclaration = function (memberVarDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { - return null; - } - - var memberVariableDeclaration = memberVarDeclarationNode.node(); - if (this.canHaveBreakpointInVariableDeclarator(memberVarDeclarationNode.getPositionedChild(memberVariableDeclaration.variableDeclarator))) { - return createBreakpointSpanInfo(memberVarDeclarationNode, memberVariableDeclaration.modifiers, memberVariableDeclaration.variableDeclarator); - } else { - return null; - } - }; - - BreakpointResolver.prototype.breakpointSpanOfImportDeclaration = function (importDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { - return null; - } - - var importSyntax = importDeclarationNode.node(); - return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumDeclaration = function (enumDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { - return null; - } - - return createBreakpointSpanInfo(enumDeclarationNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstEnumElement = function (enumDeclarationNode) { - var enumDeclarationSyntax = enumDeclarationNode.node(); - var enumElements = enumDeclarationNode.getPositionedChild(enumDeclarationSyntax.enumElements); - if (enumElements && enumElements.childCount()) { - return this.breakpointSpanOf(enumElements.childAt(0)); - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumElement = function (enumElementNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { - return null; - } - - return createBreakpointSpanInfo(enumElementNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfIfStatement = function (ifStatementNode) { - var ifStatement = ifStatementNode.node(); - return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfElseClause = function (elseClauseNode) { - var elseClause = elseClauseNode.node(); - return this.breakpointSpanOf(elseClauseNode.getPositionedChild(elseClause.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfForInStatement = function (forInStatementNode) { - var forInStatement = forInStatementNode.node(); - return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfForStatement = function (forStatementNode) { - var forStatement = forStatementNode.node(); - return this.breakpointSpanOf(forStatementNode.getPositionedChild(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWhileStatement = function (whileStatementNode) { - var whileStatement = whileStatementNode.node(); - return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfDoStatement = function (doStatementNode) { - var doStatement = doStatementNode.node(); - return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfSwitchStatement = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementOfFirstCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { - return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { - return null; - } - - var firstCaseClause = switchClauses.childAt(0); - var statements = null; - if (firstCaseClause && firstCaseClause.kind() == 233 /* CaseSwitchClause */) { - var caseClause = firstCaseClause.node(); - statements = caseClause.statements; - } else if (firstCaseClause && firstCaseClause.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = firstCaseClause.node(); - statements = defaultClause.statements; - } else { - return null; - } - - return this.breakpointSpanOfFirstChildOfSyntaxList(firstCaseClause.getPositionedChild(statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementOfLastCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { - return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { - return null; - } - - var lastClauseNode = switchClauses.childAt(switchClauses.childCount() - 1); - var statements = null; - if (lastClauseNode && lastClauseNode.kind() == 233 /* CaseSwitchClause */) { - var caseClause = lastClauseNode.node(); - statements = caseClause.statements; - } else if (lastClauseNode && lastClauseNode.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = lastClauseNode.node(); - statements = defaultClause.statements; - } else { - return null; - } - - return this.breakpointSpanOfLastChildOfSyntaxList(lastClauseNode.getPositionedChild(statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCaseSwitchClause = function (caseClauseNode) { - var caseSwitchClause = caseClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(caseClauseNode.getPositionedChild(caseSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfDefaultSwitchClause = function (defaultSwithClauseNode) { - var defaultSwitchClause = defaultSwithClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwithClauseNode.getPositionedChild(defaultSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWithStatement = function (withStatementNode) { - var withStatement = withStatementNode.node(); - return this.breakpointSpanOf(withStatementNode.getPositionedChild(withStatement.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfTryStatement = function (tryStatementNode) { - var tryStatement = tryStatementNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(tryStatementNode.getPositionedChild(tryStatement.block)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCatchClause = function (catchClauseNode) { - var catchClause = catchClauseNode.node(); - return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFinallyClause = function (finallyClauseNode) { - var finallyClause = finallyClauseNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(finallyClauseNode.getPositionedChild(finallyClause.block)); - }; - - BreakpointResolver.prototype.breakpointSpanOfParenthesizedArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfSimpleArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); - } - }; - - BreakpointResolver.prototype.breakpointSpanOfContainingNode = function (positionedElement) { - return this.breakpointSpanOf(positionedElement.containingNode()); - }; - - BreakpointResolver.prototype.breakpointSpanIfStartsOnSameLine = function (positionedElement) { - if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(positionedElement.start())) { - return this.breakpointSpanOf(positionedElement); - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOf = function (positionedElement) { - if (!positionedElement) { - return null; - } - - for (var containingNode = positionedElement.containingNode(); containingNode != null; containingNode = containingNode.containingNode()) { - if (containingNode.kind() == 244 /* TypeAnnotation */) { - return this.breakpointSpanIfStartsOnSameLine(containingNode); - } - } - - var element = positionedElement.element(); - - if (element.isNode()) { - return this.breakpointSpanOfNode(positionedElement); - } - - if (element.isToken()) { - return this.breakpointSpanOfToken(positionedElement); - } - - return this.breakpointSpanOfContainingNode(positionedElement); - }; - return BreakpointResolver; - })(); - - function getBreakpointLocation(syntaxTree, askedPos) { - if (TypeScript.isDTSFile(syntaxTree.fileName())) { - return null; - } - - var sourceUnit = syntaxTree.sourceUnit(); - var positionedToken = sourceUnit.findToken(askedPos); - - var lineMap = syntaxTree.lineMap(); - var posLine = lineMap.getLineNumberFromPosition(askedPos); - var tokenStartLine = lineMap.getLineNumberFromPosition(positionedToken.start()); - if (posLine < tokenStartLine) { - return null; - } - - var breakpointResolver = new BreakpointResolver(posLine, lineMap); - return breakpointResolver.breakpointSpanOf(positionedToken); - } - Breakpoints.getBreakpointLocation = getBreakpointLocation; - })(Services.Breakpoints || (Services.Breakpoints = {})); - var Breakpoints = Services.Breakpoints; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var GetScriptLexicalStructureWalker = (function (_super) { - __extends(GetScriptLexicalStructureWalker, _super); - function GetScriptLexicalStructureWalker(fileName) { - _super.call(this); - this.fileName = fileName; - this.nameStack = []; - this.kindStack = []; - this.currentMemberVariableDeclaration = null; - this.currentVariableStatement = null; - this.currentInterfaceDeclaration = null; - this.parentScopes = []; - this.currentScope = this.createScope(); - } - GetScriptLexicalStructureWalker.prototype.createScope = function () { - return { - items: TypeScript.createIntrinsicsObject(), - childScopes: TypeScript.createIntrinsicsObject(), - childScopeNames: [], - itemNames: [] - }; - }; - - GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { - TypeScript.Debug.assert(containerName, "No scope name provided"); - - var key = kind + "+" + containerName; - this.nameStack.push(containerName); - this.kindStack.push(kind); - - var parentScope = this.currentScope; - this.parentScopes.push(parentScope); - - var scope = parentScope.childScopes[key]; - if (!scope) { - scope = this.createScope(); - parentScope.childScopes[key] = scope; - parentScope.childScopeNames.push(key); - } - - this.currentScope = scope; - return parentScope; - }; - - GetScriptLexicalStructureWalker.prototype.popScope = function () { - TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); - this.currentScope = this.parentScopes.pop(); - this.kindStack.pop(); - this.nameStack.pop(); - }; - - GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { - var _this = this; - if (typeof scope === "undefined") { scope = this.currentScope; } - scope.itemNames.forEach(function (item) { - items.push(scope.items[item]); - }); - - scope.childScopeNames.forEach(function (childScope) { - _this.collectItems(items, scope.childScopes[childScope]); - }); - }; - - GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { - var visitor = new GetScriptLexicalStructureWalker(fileName); - unit.accept(visitor); - visitor.collectItems(items); - }; - - GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { - var key = kind + "+" + name; - - if (this.currentScope.items[key] !== undefined) { - this.addAdditionalSpan(node, key); - return; - } - - var item = new Services.NavigateToItem(); - item.name = name; - item.kind = kind; - item.matchKind = Services.MatchKind.exact; - item.fileName = this.fileName; - item.kindModifiers = this.getKindModifiers(modifiers); - item.minChar = this.position() + node.leadingTriviaWidth(); - item.limChar = item.minChar + node.width(); - item.containerName = this.nameStack.join("."); - item.containerKind = this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack); - - this.currentScope.items[key] = item; - this.currentScope.itemNames.push(key); - }; - - GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { - var item = this.currentScope.items[key]; - TypeScript.Debug.assert(item !== undefined); - - var start = this.position() + node.leadingTriviaWidth(); - var span = new Services.SpanInfo(start, start + node.width()); - - if (item.additionalSpans) { - item.additionalSpans.push(span); - } else { - item.additionalSpans = [span]; - } - }; - - GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { - var result = []; - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { - var names = this.getModuleNames(node); - this.visitModuleDeclarationWorker(node, names, 0); - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { - if (nameIndex === names.length) { - _super.prototype.visitModuleDeclaration.call(this, node); - } else { - var modifiers = nameIndex === 0 ? node.modifiers : TypeScript.Syntax.list([TypeScript.Syntax.token(47 /* ExportKeyword */)]); - var name = names[nameIndex]; - if (name) { - var kind = Services.ScriptElementKind.moduleElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.visitModuleDeclarationWorker(node, names, nameIndex + 1); - - this.popScope(); - } - } - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { - var result = []; - - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } else { - this.getModuleNamesHelper(node.name, result); - } - - return result; - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { - if (name.kind() === 121 /* QualifiedName */) { - var qualifiedName = name; - this.getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } else { - result.push(name.text()); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.classElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitClassDeclaration.call(this, node); - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.interfaceElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.currentInterfaceDeclaration = node; - _super.prototype.visitInterfaceDeclaration.call(this, node); - this.currentInterfaceDeclaration = null; - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { - if (this.currentInterfaceDeclaration === null) { - this.skip(node); - } else { - _super.prototype.visitObjectType.call(this, node); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.enumElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitEnumDeclaration.call(this, node); - - this.popScope(); - } - }; - - GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructorImplementationElement, "constructor"); - - var parameters = node.callSignature.parameterList.parameters; - if (parameters) { - for (var i = 0, n = parameters.nonSeparatorCount(); i < n; i++) { - var parameter = parameters.nonSeparatorAt(i); - - TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); - - if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { - this.createItem(node, parameter.modifiers, Services.ScriptElementKind.memberVariableElement, parameter.identifier.text()); - } - } - } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.currentMemberVariableDeclaration = node; - _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.currentMemberVariableDeclaration = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableStatement = function (node) { - this.currentVariableStatement = node; - _super.prototype.visitVariableStatement.call(this, node); - this.currentVariableStatement = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { - var modifiers = this.currentMemberVariableDeclaration ? this.currentMemberVariableDeclaration.modifiers : TypeScript.Syntax.emptyList; - var kind = this.currentMemberVariableDeclaration ? Services.ScriptElementKind.memberVariableElement : Services.ScriptElementKind.variableElement; - this.createItem(node, modifiers, kind, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.indexSignatureElement, "[]"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.callSignatureElement, "()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructSignatureElement, "new()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { - if (node.identifier.width() > 0) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.functionElement, node.identifier.text()); - } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { - this.skip(node); - }; - return GetScriptLexicalStructureWalker; - })(TypeScript.PositionTrackingWalker); - Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - function copyDataObject(dst, src) { - for (var e in dst) { - if (typeof dst[e] == "object") { - copyDataObject(dst[e], src[e]); - } else if (typeof dst[e] != "function") { - dst[e] = src[e]; - } - } - return dst; - } - Services.copyDataObject = copyDataObject; - - var TypeScriptServicesFactory = (function () { - function TypeScriptServicesFactory() { - this._shims = []; - } - TypeScriptServicesFactory.prototype.createPullLanguageService = function (host) { - try { - return new TypeScript.Services.LanguageService(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { - try { - var hostAdapter = new Services.LanguageServiceShimHostAdapter(host); - var pullLanguageService = this.createPullLanguageService(hostAdapter); - return new Services.LanguageServiceShim(this, host, pullLanguageService); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifier = function (host) { - try { - return new TypeScript.Services.Classifier(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifierShim = function (host) { - try { - return new Services.ClassifierShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServices = function (host) { - try { - return new TypeScript.Services.CoreServices(host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { - try { - return new Services.CoreServicesShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.close = function () { - this._shims = []; - }; - - TypeScriptServicesFactory.prototype.registerShim = function (shim) { - this._shims.push(shim); - }; - - TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { - for (var i = 0, n = this._shims.length; i < n; i++) { - if (this._shims[i] === shim) { - delete this._shims[i]; - return; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - return TypeScriptServicesFactory; - })(); - Services.TypeScriptServicesFactory = TypeScriptServicesFactory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var BraceMatcher = (function () { - function BraceMatcher() { - } - BraceMatcher.getMatchSpans = function (syntaxTree, position) { - var result = []; - - var currentToken = syntaxTree.sourceUnit().findToken(position); - - BraceMatcher.getMatchingCloseBrace(currentToken, position, result); - BraceMatcher.getMatchingOpenBrace(currentToken, position, result); - - return result; - }; - - BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { - if (currentToken.start() === position) { - var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); - if (closingBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart(); - for (var i = 0, n = parentElement.childCount(); i < n; i++) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === closingBraceKind) { - var range1 = new TypeScript.TextSpan(position, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition + element.leadingTriviaWidth(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition += element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { - if (currentToken.fullStart() === position) { - currentToken = currentToken.previousToken(); - } - - if (currentToken !== null && currentToken.start() === (position - 1)) { - var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); - if (openBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart() + parentElement.fullWidth(); - for (var i = parentElement.childCount() - 1; i >= 0; i--) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === openBraceKind) { - var range1 = new TypeScript.TextSpan(position - 1, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition - element.trailingTriviaWidth() - element.width(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition -= element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 70 /* OpenBraceToken */: - return 71 /* CloseBraceToken */; - case 72 /* OpenParenToken */: - return 73 /* CloseParenToken */; - case 74 /* OpenBracketToken */: - return 75 /* CloseBracketToken */; - case 80 /* LessThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; - } - return null; - }; - - BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 71 /* CloseBraceToken */: - return 70 /* OpenBraceToken */; - case 73 /* CloseParenToken */: - return 72 /* OpenParenToken */; - case 75 /* CloseBracketToken */: - return 74 /* OpenBracketToken */; - case 81 /* GreaterThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; - } - return null; - }; - return BraceMatcher; - })(); - Services.BraceMatcher = BraceMatcher; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); - -; browserify_shim__define__module__export__(typeof TypeScript != "undefined" ? TypeScript : window.TypeScript); - -}).call(global, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; }); - -},{}],45:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// StringSet -// -//-------------------------------------------------------------------------- -/** -* Set that only accept string as value -*/ -var StringSet = (function () { - /** - * constructor - * @param array an array of string that will be added to the set - */ - function StringSet(array) { - this.map = Object.create(null); - if (array) { - for (var i = 0, l = array.length; i < l; i++) { - this.add(array[i]); - } - } - } - /** - * add a value to the set - * @param value - */ - StringSet.prototype.add = function (value) { - this.map[value] = true; - }; - - /** - * remove a value from the set - * @param value - */ - StringSet.prototype.remove = function (value) { - delete this.map[value]; - }; - - /** - * return true if the set contains the given value - * @param value - */ - StringSet.prototype.has = function (value) { - return !!this.map[value]; - }; - - Object.defineProperty(StringSet.prototype, "values", { - /** - * return an array containing the values of the set - */ - get: function () { - return Object.keys(this.map); - }, - enumerable: true, - configurable: true - }); - return StringSet; -})(); -exports.StringSet = StringSet; - -; - -/** -* Map that only accept string as key -*/ -var StringMap = (function () { - /** - * constructor - * @param obj initial values to set in the map each properties - * of the object will be treaded as a pair key/value - */ - function StringMap(obj) { - var _this = this; - this.map = Object.create(null); - this.mascot = {}; - if (obj) { - Object.keys(obj).forEach(function (key) { - return _this.map[key] = obj[key]; - }); - } - } - /** - * set a value in the map - * @param key the key - * @param value the value - */ - StringMap.prototype.set = function (key, value) { - this.map[key] = (typeof value === 'undefined' ? this.mascot : value); - }; - - /** - * retrive a value associated to the given key - * @param key the key to retrieve the value associated with - */ - StringMap.prototype.get = function (key) { - var value = this.map[key]; - return value === this.mascot ? undefined : value; - }; - - /** - * delete an entry corresponding to the given key - * @param key - */ - StringMap.prototype.delete = function (key) { - return delete this.map[key]; - }; - - /** - * return true if the map contains the given key - * @param key - */ - StringMap.prototype.has = function (key) { - return typeof this.map[key] !== 'undefined'; - }; - - /** - * clear the map - */ - StringMap.prototype.clear = function () { - this.map = Object.create(null); - }; - - Object.defineProperty(StringMap.prototype, "keys", { - /** - * return an array containing the keys of the map - */ - get: function () { - return Object.keys(this.map); - }, - enumerable: true, - configurable: true - }); - - Object.defineProperty(StringMap.prototype, "values", { - /** - * return an array containing the values of the map - */ - get: function () { - var _this = this; - return Object.keys(this.map).map(function (key) { - return _this.map[key]; - }); - }, - enumerable: true, - configurable: true - }); - - Object.defineProperty(StringMap.prototype, "entries", { - /** - * return an array containing the entries of the map - */ - get: function () { - var _this = this; - return Object.keys(this.map).map(function (key) { - return { - key: key, - value: _this.map[key] - }; - }); - }, - enumerable: true, - configurable: true - }); - - /** - * return an object representation - */ - StringMap.prototype.toObject = function () { - var _this = this; - return Object.keys(this.map).reduce(function (obj, key) { - obj[key] = _this.map[key]; - return obj; - }, {}); - }; - - /** - * return a clone of the map - */ - StringMap.prototype.clone = function () { - return new StringMap(this.toObject()); - }; - return StringMap; -})(); -exports.StringMap = StringMap; - -},{}],46:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/** -* An Enum representing the different kind of hint -*/ -(function (CompletionKind) { - /** - * the completion entry correspond to a class name - */ - CompletionKind[CompletionKind["CLASS"] = 0] = "CLASS"; - - /** - * the completion entry correspond to an interface name - */ - CompletionKind[CompletionKind["INTERFACE"] = 1] = "INTERFACE"; - - /** - * the completion entry correspond to an enum name - */ - CompletionKind[CompletionKind["ENUM"] = 2] = "ENUM"; - - /** - * the completion entry correspond to a module name - */ - CompletionKind[CompletionKind["MODULE"] = 3] = "MODULE"; - - /** - * the completion entry correspond to a variable name - */ - CompletionKind[CompletionKind["VARIABLE"] = 4] = "VARIABLE"; - - /** - * the completion entry correspond to a mehtod name - */ - CompletionKind[CompletionKind["METHOD"] = 5] = "METHOD"; - - /** - * the completion entry correspond to a function - */ - CompletionKind[CompletionKind["FUNCTION"] = 6] = "FUNCTION"; - - /** - * the completion entry correspond to a keyword - */ - CompletionKind[CompletionKind["KEYWORD"] = 7] = "KEYWORD"; - - /** - * Any other type - */ - CompletionKind[CompletionKind["DEFAULT"] = 8] = "DEFAULT"; -})(exports.CompletionKind || (exports.CompletionKind = {})); -var CompletionKind = exports.CompletionKind; - - - - -},{}],47:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//-------------------------------------------------------------------------- -// -// Change record -// -//-------------------------------------------------------------------------- -/** -* enum representing the kind change possible in the fileSysem -*/ -(function (FileChangeKind) { - /** - * a file has been added - */ - FileChangeKind[FileChangeKind["ADD"] = 0] = "ADD"; - - /** - * a file has been updated - */ - FileChangeKind[FileChangeKind["UPDATE"] = 1] = "UPDATE"; - - /** - * a file has been deleted - */ - FileChangeKind[FileChangeKind["DELETE"] = 2] = "DELETE"; - - /** - * the project files has been reset - */ - FileChangeKind[FileChangeKind["RESET"] = 3] = "RESET"; -})(exports.FileChangeKind || (exports.FileChangeKind = {})); -var FileChangeKind = exports.FileChangeKind; - - -},{}],48:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// Logger -// -//-------------------------------------------------------------------------- -/** -* hold the configured log level -*/ -var currentLogLevel = 1 /* error */; - -/** -* return true if the logging level is superior or equal to information -*/ -function information() { - return currentLogLevel >= 4 /* information */; -} -exports.information = information; - -/** -* return true if the logging level is superior or equal to debug -*/ -function debug() { - return currentLogLevel >= 3 /* debug */; -} -exports.debug = debug; - -/** -* return true if the logging level is superior or equal to warning -*/ -function warning() { - return currentLogLevel >= 2 /* warning */; -} -exports.warning = warning; - -/** -* return true if the logging level is superior or equal to error -*/ -function error() { - return currentLogLevel >= 1 /* error */; -} -exports.error = error; - -/** -* return true if the logging level is superior or equal to fatal -*/ -function fatal() { - return currentLogLevel >= 0 /* fatal */; -} -exports.fatal = fatal; - -/** -* log the given string -*/ -function log(s) { - console.log(s); -} -exports.log = log; - -/** -* Logging level -*/ -(function (Level) { - Level[Level["fatal"] = 0] = "fatal"; - Level[Level["error"] = 1] = "error"; - Level[Level["warning"] = 2] = "warning"; - Level[Level["debug"] = 3] = "debug"; - Level[Level["information"] = 4] = "information"; -})(exports.Level || (exports.Level = {})); -var Level = exports.Level; - -/** -* set the current log level, accepted level are : -* 'information', -* 'debug', -* 'warning', -* 'error', -* 'fatal' -*/ -function setLogLevel(level) { - currentLogLevel = Level[level]; -} -exports.setLogLevel = setLogLevel; - -/** -* base class reusing the logger for typescript -*/ -var LogingClass = (function () { - function LogingClass() { - this.information = exports.information; - this.debug = exports.debug; - this.warning = exports.warning; - this.error = exports.error; - this.fatal = exports.fatal; - this.log = exports.log; - } - return LogingClass; -})(); -exports.LogingClass = LogingClass; - -},{}],49:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var Promise = require('bluebird'); - -/** -* A simple Promise Queue -*/ -var PromiseQueue = (function () { - function PromiseQueue() { - var _this = this; - /** - * true if the queue has been initialized - */ - this.initialized = false; - this.promise = new Promise(function (resolve) { - _this.initializer = resolve; - }); - } - /** - * initialize the queue subsequent call reset the queue - * - * @param val the value passed as initialial result - */ - PromiseQueue.prototype.init = function (val) { - if (this.initialized) { - this.promise = Promise.cast(val); - } else { - this.initialized = true; - this.initializer(val); - return this.promise; - } - }; - - /** - * enqueue an action - */ - PromiseQueue.prototype.then = function (action) { - return this.promise = this.promise.then(function () { - return action(); - }, function () { - return action(); - }); - }; - return PromiseQueue; -})(); - -module.exports = PromiseQueue; - -},{"bluebird":3}],50:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; - -var Signal = (function () { - function Signal() { - /** - * list of listeners that have been suscribed to this signal - */ - this.listeners = []; - /** - * Priorities corresponding to the listeners - */ - this.priorities = []; - } - /** - * Subscribes a listener for the signal. - * - * @params listener the callback to call when events are dispatched - * @params priority an optional priority for this signal - */ - Signal.prototype.add = function (listener, priority) { - if (typeof priority === "undefined") { priority = 0; } - var index = this.listeners.indexOf(listener); - if (index !== -1) { - this.priorities[index] = priority; - return; - } - for (var i = 0, l = this.priorities.length; i < l; i++) { - if (this.priorities[i] < priority) { - this.priorities.splice(i, 0, priority); - this.listeners.splice(i, 0, listener); - return; - } - } - this.priorities.push(priority); - this.listeners.push(listener); - }; - - /** - * unsubscribe a listener for the signal - * - * @params listener the previously subscribed listener - */ - Signal.prototype.remove = function (listener) { - var index = this.listeners.indexOf(listener); - if (index >= 0) { - this.priorities.splice(index, 1); - this.listeners.splice(index, 1); - } - }; - - /** - * dispatch an event - * - * @params parameter the parameter attached to the event dispatching - */ - Signal.prototype.dispatch = function (parameter) { - var hasBeenCanceled = this.listeners.every(function (listener) { - var result = listener(parameter); - return result !== false; - }); - - return hasBeenCanceled; - }; - - /** - * Remove all listener from the signal - */ - Signal.prototype.clear = function () { - this.listeners = []; - this.priorities = []; - }; - - /** - * @return true if the listener has been subsribed to this signal - */ - Signal.prototype.hasListeners = function () { - return this.listeners.length > 0; - }; - return Signal; -})(); -exports.Signal = Signal; - -},{}],51:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -/** -* helper function that valid a config file -* @param config the config object to validate -*/ -function validateTypeScriptProjectConfig(config) { - if (!config) { - return false; - } - if (config.target && ['es3', 'es5'].indexOf(config.target.toLowerCase()) === -1) { - return false; - } - if (config.module && ['none', 'amd', 'commonjs'].indexOf(config.module.toLowerCase()) === -1) { - return false; - } - if (config.sourceRoot && typeof config.sourceRoot !== 'string') { - return false; - } - if (!config.sources || !Array.isArray(config.sources) || !config.sources.every(function (pattern) { - return typeof pattern === 'string'; - })) { - return false; - } - - return true; -} -exports.validateTypeScriptProjectConfig = validateTypeScriptProjectConfig; - -/** -* Default configuration for typescript project -*/ -exports.typeScriptProjectConfigDefault = { - noLib: false, - target: 'es3', - module: 'none', - noImplicitAny: false -}; - -},{}],52:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var path = require('path'); - -/** -* assign all properties of a list of object to an object -* @param target the object that will receive properties -* @param items items which properties will be assigned to a target -*/ -function assign(target) { - var items = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - items[_i] = arguments[_i + 1]; - } - return items.reduce(function (target, source) { - return Object.keys(source).reduce(function (target, key) { - target[key] = source[key]; - return target; - }, target); - }, target); -} -exports.assign = assign; - -/** -* clone an object (shallow) -* @param target the object to clone -*/ -function clone(target) { - return exports.assign(Array.isArray(target) ? [] : {}, target); -} -exports.clone = clone; - -/** -* clone an object (deep) -* -* @param target the object to clone -*/ -function deepClone(target) { - return Object.keys(target).reduce(function (result, key) { - var value = target[key]; - if (typeof value === 'object') { - value = exports.deepClone(value); - } - result[key] = value; - return result; - }, Array.isArray(target) ? [] : {}); -} -exports.deepClone = deepClone; - -/** -* retrieve all enumerable properties of an object in the prototype chain -* -* @param target the object to which we will retrieve properties -*/ -function getEnumerablePropertyNames(target) { - var result = []; - for (var key in target) { - result.push(key); - } - return result; -} -exports.getEnumerablePropertyNames = getEnumerablePropertyNames; - -/** -* merge multiple array in one -* -* @param array an array of array to be flattened -*/ -function mergeAll(array) { - var results = []; - array.forEach(function (subArray) { - Array.prototype.push.apply(results, subArray); - }); - - return results; -} -exports.mergeAll = mergeAll; -; - -/** -* browserify path.resolve is buggy on windows -*/ -function pathResolve(from, to) { - var result = path.resolve(from, to); - var index = result.indexOf(from[0]); - return result.slice(index); -} -exports.pathResolve = pathResolve; - -},{"path":39}],53:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -//-------------------------------------------------------------------------- -// -// WorkerBridge -// -//-------------------------------------------------------------------------- -var utils = require('./utils'); -var collections = require('./collections'); -var signal = require('./signal'); -var Promise = require('bluebird'); - -/** -* list of operations that can be requested -*/ -var Operation; -(function (Operation) { - Operation[Operation["REQUEST"] = 0] = "REQUEST"; - Operation[Operation["RESPONSE"] = 1] = "RESPONSE"; - Operation[Operation["ERROR"] = 2] = "ERROR"; - Operation[Operation["EXPOSE"] = 3] = "EXPOSE"; - Operation[Operation["SIGNAL"] = 4] = "SIGNAL"; -})(Operation || (Operation = {})); - -/** -* type of function exposed -*/ -var Type; -(function (Type) { - Type[Type["FUNCTION"] = 0] = "FUNCTION"; - Type[Type["SIGNAL"] = 1] = "SIGNAL"; -})(Type || (Type = {})); - -/** -* create a descriptor for a map of exposed services -* -* @param services -* @param observables -* @param baseKeys -*/ -function createProxyDescriptor(services, signals, baseKeys) { - if (typeof baseKeys === "undefined") { baseKeys = []; } - if (baseKeys.length > 5) { - return {}; - } - return utils.getEnumerablePropertyNames(services).reduce(function (descriptor, key) { - var value = services[key], keys = baseKeys.concat(key); - if (typeof value === 'function') { - descriptor[key] = 0 /* FUNCTION */; - } else if (typeof value === 'object') { - if (value instanceof signal.Signal) { - descriptor[key] = 1 /* SIGNAL */; - signals[keys.join('.')] = value; - } else if (!Array.isArray(value)) { - descriptor[key] = createProxyDescriptor(value, signals, keys); - } - } - return descriptor; - }, {}); -} - -var uidHelper = 0; - -/** -* create a query factory for a proxied service method -*/ -function newQuery(chain, sendMessage, resolverMap) { - return function () { - var args = []; - for (var _i = 0; _i < (arguments.length - 0); _i++) { - args[_i] = arguments[_i + 0]; - } - var uid = 'operation' + (uidHelper++); - sendMessage({ - operation: 0 /* REQUEST */, - chain: chain, - args: args, - uid: uid - }); - return new Promise(function (resolve, reject) { - resolverMap.set(uid, { - resolve: resolve, - reject: reject - }); - }); - }; -} - -/** -* create proxy from proxy descriptor -*/ -function createProxy(descriptor, sendMessage, resolverMap, baseKeys) { - if (typeof baseKeys === "undefined") { baseKeys = []; } - return Object.keys(descriptor).reduce(function (proxy, key) { - var value = descriptor[key], keys = baseKeys.concat(key); - if (value === 0 /* FUNCTION */) { - proxy[key] = newQuery(keys, sendMessage, resolverMap); - } else if (value === 1 /* SIGNAL */) { - proxy[key] = new signal.Signal(); - } else if (typeof value === 'object') { - proxy[key] = createProxy(descriptor[key], sendMessage, resolverMap, keys); - } - return proxy; - }, {}); -} - -/** -* a simple bridge that will expose services from the 2 sides of a web worker -*/ -var WorkerBridge = (function () { - function WorkerBridge(/** - * target - */ - target) { - var _this = this; - this.target = target; - /** - * stack of deferred bound to a requres - */ - this.resolverMap = new collections.StringMap(); - /** - * message handler - */ - this.messageHandler = function (message) { - var data = message.data; - switch (data.operation) { - case 3 /* EXPOSE */: - _this.proxy = createProxy(data.descriptor, function (args) { - return _this.target.postMessage(args); - }, _this.resolverMap); - - _this.initResolver.resolve(_this.proxy); - break; - - case 0 /* REQUEST */: - new Promise(function (resolve) { - var chain = data.chain.slice(), thisObject = null, method = _this.services; - while (chain.length) { - thisObject = method; - method = method[chain.shift()]; - } - resolve(method.apply(thisObject, data.args)); - }).then(function (result) { - _this.target.postMessage({ - operation: 1 /* RESPONSE */, - chain: data.chain, - result: result, - uid: data.uid - }); - }, function (error) { - _this.target.postMessage({ - operation: 2 /* ERROR */, - chain: data.chain, - errorMessage: error instanceof Error ? error.message : error, - uid: data.uid - }); - }); - - break; - - case 1 /* RESPONSE */: - var responseDeferred = _this.resolverMap.get(data.uid); - responseDeferred.resolve(data.result); - _this.resolverMap.delete(data.uid); - break; - - case 2 /* ERROR */: - var errorDeferred = _this.resolverMap.get(data.uid); - errorDeferred.reject(new Error(data.errorMessage)); - _this.resolverMap.delete(data.uid); - break; - - default: - var chain = data.chain.slice(), signal = _this.proxy; - while (chain.length) { - signal = signal[chain.shift()]; - } - signal.dispatch(data.value); - } - }; - } - /** - * initialize te bridge, return a promise that resolve to the created proxy - * @param services the exposed services - */ - WorkerBridge.prototype.init = function (services) { - var _this = this; - this.services = services; - return new Promise(function (resolve, reject) { - var target = _this.target; - target.onmessage = _this.messageHandler; - - var signals = {}; - target.postMessage({ - operation: 3 /* EXPOSE */, - descriptor: createProxyDescriptor(services, signals) - }); - - _this.signals = Object.keys(signals).map(function (key) { - var signal = signals[key]; - var handler = function (value) { - target.postMessage({ - operation: 4 /* SIGNAL */, - chain: key.split('.'), - value: value - }); - }; - signal.add(handler); - return { - signal: signal, - handler: handler - }; - }); - - _this.initResolver = { resolve: resolve, reject: reject }; - }); - }; - - /** - * dispose the bridge - */ - WorkerBridge.prototype.dispose = function () { - this.signals.forEach(function (signalDesc) { - return signalDesc.signal.remove(signalDesc.handler); - }); - this.target.onmessage = null; - }; - return WorkerBridge; -})(); - -module.exports = WorkerBridge; - -},{"./collections":45,"./signal":50,"./utils":52,"bluebird":3}],54:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; - - -/** -* enum listing the change kind that occur in a working set -*/ -(function (WorkingSetChangeKind) { - WorkingSetChangeKind[WorkingSetChangeKind["ADD"] = 0] = "ADD"; - WorkingSetChangeKind[WorkingSetChangeKind["REMOVE"] = 1] = "REMOVE"; -})(exports.WorkingSetChangeKind || (exports.WorkingSetChangeKind = {})); -var WorkingSetChangeKind = exports.WorkingSetChangeKind; - - - -},{}],55:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var completion = require('../commons/completion'); -var logger = require('../commons/logger'); - -var ScriptElementKind = TypeScript.Services.ScriptElementKind; - -/** -* implementation of the ICompletionService -*/ -var CompletionService = (function () { - /** - * @param projectManager the Project manager used by the service to retrieve project - */ - function CompletionService(projectManager) { - this.projectManager = projectManager; - } - /** - * Retrieve completion proposal at a given point in a given file - * @param fileName the absolute path of the file - * @param position in the file where you want to retrieve completion proposal - * - * @return a promise resolving to a list of proposals - */ - CompletionService.prototype.getCompletionAtPosition = function (fileName, position) { - var _this = this; - return this.projectManager.getProjectForFile(fileName).then(function (project) { - var languageService = project.getLanguageService(), languageServiceHost = project.getLanguageServiceHost(), index = languageServiceHost.getIndexFromPos(fileName, position), completionInfo = languageService.getCompletionsAtPosition(fileName, index, true), typeScriptEntries = completionInfo && completionInfo.entries; - - if (!typeScriptEntries) { - return { entries: [], match: '' }; - } - - var sourceUnit = languageService.getSyntaxTree(fileName).sourceUnit(), currentToken = sourceUnit.findTokenOnLeft(index), match; - - if (currentToken && _this.isValidTokenKind(currentToken.token().tokenKind)) { - match = currentToken.token().fullText(); - if (currentToken.element().leadingTrivia()) { - match = match.substr(currentToken.element().leadingTriviaWidth()); - } - - if (currentToken.element().trailingTrivia()) { - match = match.substr(0, match.length - currentToken.element().trailingTriviaWidth()); - } - - typeScriptEntries = typeScriptEntries.filter(function (entry) { - return entry.name && entry.name.toLowerCase().indexOf(match.toLowerCase()) === 0; - }); - } - - typeScriptEntries.sort(function (entry1, entry2) { - var match1 = entry1 ? entry1.name.indexOf(match) : -1, match2 = entry2 ? entry2.name.indexOf(match) : -1; - if (match1 === 0 && match2 !== 0) { - return -1; - } else if (match2 === 0 && match1 !== 0) { - return 1; - } else { - var name1 = entry1 && entry1.name.toLowerCase(), name2 = entry2 && entry2.name.toLowerCase(); - - if (name1 < name2) { - return -1; - } else if (name1 > name2) { - return 1; - } else { - return 0; - } - } - }); - - var completionEntries = typeScriptEntries.map(function (typeScriptEntry) { - var entryInfo = languageService.getCompletionEntryDetails(fileName, index, typeScriptEntry.name), completionEntry = { - name: typeScriptEntry.name, - kind: 8 /* DEFAULT */, - type: entryInfo && entryInfo.type, - doc: entryInfo && entryInfo.docComment - }; - - switch (typeScriptEntry.kind) { - case ScriptElementKind.unknown: - case ScriptElementKind.primitiveType: - case ScriptElementKind.scriptElement: - break; - case ScriptElementKind.keyword: - completionEntry.kind = 7 /* KEYWORD */; - break; - - case ScriptElementKind.classElement: - completionEntry.kind = 0 /* CLASS */; - break; - case ScriptElementKind.interfaceElement: - completionEntry.kind = 1 /* INTERFACE */; - break; - case ScriptElementKind.enumElement: - completionEntry.kind = 2 /* ENUM */; - break; - case ScriptElementKind.moduleElement: - completionEntry.kind = 3 /* MODULE */; - break; - - case ScriptElementKind.memberVariableElement: - case ScriptElementKind.variableElement: - case ScriptElementKind.localVariableElement: - case ScriptElementKind.parameterElement: - completionEntry.kind = 4 /* VARIABLE */; - break; - - case ScriptElementKind.memberFunctionElement: - case ScriptElementKind.functionElement: - case ScriptElementKind.localFunctionElement: - completionEntry.kind = 6 /* FUNCTION */; - break; - - case ScriptElementKind.typeParameterElement: - case ScriptElementKind.constructorImplementationElement: - case ScriptElementKind.constructSignatureElement: - case ScriptElementKind.callSignatureElement: - case ScriptElementKind.indexSignatureElement: - case ScriptElementKind.memberGetAccessorElement: - case ScriptElementKind.memberSetAccessorElement: - if (logger.information()) { - logger.log('un handled ScriptElementKind in completion list: ' + typeScriptEntry.kind); - } - break; - } - - return completionEntry; - }); - - return { - entries: completionEntries, - match: match - }; - }).catch(function () { - return ({ - entries: [], - match: '' - }); - }); - }; - - /** - * helper method return true if the token correspond to an 'completable' token - */ - CompletionService.prototype.isValidTokenKind = function (tokenKind) { - return tokenKind === 11 /* IdentifierName */ || (tokenKind >= 15 /* BreakKeyword */ && tokenKind < 70 /* OpenBraceToken */); - }; - return CompletionService; -})(); - -module.exports = CompletionService; - -},{"../commons/completion":46,"../commons/logger":48}],56:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -/** -* implementation of the IDefinitionService -*/ -var DefinitionService = (function () { - /** - * @param projectManager the Project manager used by the service to retrieve project - */ - function DefinitionService(projectManager) { - this.projectManager = projectManager; - } - /** - * retrieve definition info of a symbol at a given position in a given file - * @param fileName the absolute path of the file - * @param position in the file where you want to retrieve definition info - * - * @return a promise resolving to a list of definition info - */ - DefinitionService.prototype.getDefinitionForFile = function (fileName, position) { - return this.projectManager.getProjectForFile(fileName).then(function (project) { - var languageService = project.getLanguageService(), languageServiceHost = project.getLanguageServiceHost(), index = languageServiceHost.getIndexFromPos(fileName, position); - if (index < 0) { - return []; - } - return languageService.getDefinitionAtPosition(fileName, index).map(function (definition) { - var startPos = languageServiceHost.indexToPosition(definition.fileName, definition.minChar), endPos = languageServiceHost.indexToPosition(definition.fileName, definition.limChar); - return { - name: (definition.containerName ? (definition.containerName + '.') : '') + definition.name, - lineStart: startPos.line, - charStart: startPos.ch, - lineEnd: endPos.line, - charEnd: endPos.ch, - fileName: definition.fileName - }; - }); - }).catch(function () { - return []; - }); - }; - return DefinitionService; -})(); - -module.exports = DefinitionService; - -},{}],57:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -/** -* brackets Error message type -*/ -var Type = { - /** Unambiguous error, such as a syntax error */ - ERROR: 'problem_type_error', - /** Maintainability issue, probable error / bad smell, etc. */ - WARNING: 'problem_type_warning', - /** Inspector unable to continue, code too complex for static analysis, etc. Not counted in error/warning tally. */ - META: 'problem_type_meta' -}; - -/** -* implementation of the IErrorService -*/ -var ErrorService = (function () { - /** - * @param projectManager the Project manager used by the service to retrieve project - */ - function ErrorService(projectManager) { - this.projectManager = projectManager; - } - /** - * Retrieve a list of errors for a given file - * @param fileName the absolute path of the file - * - * @return a promise resolving to a list of errors - */ - ErrorService.prototype.getErrorsForFile = function (fileName) { - var _this = this; - return this.projectManager.getProjectForFile(fileName).then(function (project) { - var languageService = project.getLanguageService(), syntacticDiagnostics = languageService.getSyntacticDiagnostics(fileName), errors = _this.diagnosticToError(syntacticDiagnostics); - - if (errors.length === 0) { - var semanticDiagnostic = languageService.getSemanticDiagnostics(fileName); - errors = _this.diagnosticToError(semanticDiagnostic); - } - - return { - errors: errors, - aborted: false - }; - }).catch(function () { - return { - errors: [], - aborted: false - }; - }); - }; - - /** - * convert TypeScript Diagnostic to brackets error format - * @param diagnostics - */ - ErrorService.prototype.diagnosticToError = function (diagnostics) { - if (!diagnostics) { - return []; - } - return diagnostics.map(function (diagnostic) { - var info = diagnostic.info(), type; - - switch (info.category) { - case 1 /* Error */: - type = Type.ERROR; - break; - case 0 /* Warning */: - type = Type.WARNING; - break; - case 3 /* NoPrefix */: - type = Type.ERROR; - break; - case 2 /* Message */: - type = Type.META; - break; - } - - return { - pos: { - line: diagnostic.line(), - ch: diagnostic.character() - }, - endpos: { - line: diagnostic.line(), - ch: diagnostic.character() + diagnostic.length() - }, - message: diagnostic.message(), - type: type - }; - }); - }; - return ErrorService; -})(); - -module.exports = ErrorService; - -},{}],58:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var FormattingService = (function () { - /** - * @param projectManager the Project manager used by the service to retrieve project - */ - function FormattingService(projectManager) { - this.projectManager = projectManager; - } - /** - * Retrieve formating information for a givent file - * @param fileName the absolute path of the file - * @param options formation options - * @param startPos an option start position for the formating range - * @param endPos an optional end position for the formating range - * - * @return a promise resolving to a formating range info - */ - FormattingService.prototype.getFormatingForFile = function (fileName, options, startPos, endPos) { - return this.projectManager.getProjectForFile(fileName).then(function (project) { - var languageServiceHost = project.getLanguageServiceHost(), languageService = project.getLanguageService(), minChar, limChar; - - if (!startPos || !endPos) { - minChar = 0; - limChar = project.getLanguageServiceHost().getScriptContent(fileName).length - 1; - } else { - minChar = languageServiceHost.getIndexFromPos(fileName, startPos); - limChar = languageServiceHost.getIndexFromPos(fileName, endPos); - } - - var result = languageService.getFormattingEditsForRange(fileName, minChar, limChar, options); - - return result && result.reverse(); - }); - }; - return FormattingService; -})(); - -module.exports = FormattingService; - -},{}],59:[function(require,module,exports){ -(function (global){// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -// inject global in the worker -global.TypeScript = require('typescriptServices'); -global.window = self; - -var TypeScriptProjectManager = require('./projectManager'); -var TypeScriptProject = require('./project'); -var ErrorService = require('./errorService'); -var DefinitionService = require('./definitionService'); -var CompletionService = require('./completionService'); -var FormattingService = require('./formattingService'); -var LexicalStructureService = require('./lexicalStructureService'); -var WorkerBridge = require('../commons/workerBridge'); -var logger = require('../commons/logger'); - -//instantiate the different service -var projectManager = new TypeScriptProjectManager(), errorService = new ErrorService(projectManager), completionService = new CompletionService(projectManager), definitionService = new DefinitionService(projectManager), lexicalStructureService = new LexicalStructureService(projectManager), formattingService = new FormattingService(projectManager), bridge = new WorkerBridge(self); - -//expose the worker services -bridge.init({ - errorService: errorService, - completionService: completionService, - definitionService: definitionService, - lexicalStructureService: lexicalStructureService, - formattingService: formattingService -}).then(function (proxy) { - //inject main services into worker components - proxy.getTypeScriptLocation().then(function (location) { - proxy.getLogLevel().then(function (logLevel) { - self.console = proxy.console; - logger.setLogLevel(logLevel); - projectManager.init(location, proxy.preferencesManager, proxy.fileSystem, proxy.workingSet, TypeScriptProject.newProject).then(function () { - if (logger.information()) { - logger.log('TSWorker : initilialization complete'); - } - }); - }); - }); -}); -}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../commons/logger":48,"../commons/workerBridge":53,"./completionService":55,"./definitionService":56,"./errorService":57,"./formattingService":58,"./lexicalStructureService":61,"./project":62,"./projectManager":63,"typescriptServices":"rW6mcW"}],60:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var logger = require('../commons/logger'); -var collections = require('../commons/collections'); -var path = require('path'); -var utils = require('../commons/utils'); - -/** -* ILanguage Service host implementation -*/ -var LanguageServiceHost = (function (_super) { - __extends(LanguageServiceHost, _super); - function LanguageServiceHost() { - _super.apply(this, arguments); - /** - * a map associating file absolute path to ScriptInfo - */ - this.fileNameToScript = new collections.StringMap(); - } - /** - * add a script to the host - * - * @param fileName the absolute path of the file - * @param content the file content - */ - LanguageServiceHost.prototype.addScript = function (fileName, content) { - var script = new ScriptInfo(fileName, content); - this.fileNameToScript.set(fileName, script); - }; - - /** - * remove a script from the host - * - * @param fileName the absolute path of the file - */ - LanguageServiceHost.prototype.removeScript = function (fileName) { - this.fileNameToScript.delete(fileName); - }; - - /** - * remove all script from the host - * - * @param fileName the absolute path of the file - */ - LanguageServiceHost.prototype.removeAll = function () { - this.fileNameToScript.clear(); - }; - - /** - * update a script - * - * @param fileName the absolute path of the file - * @param content the new file content - */ - LanguageServiceHost.prototype.updateScript = function (fileName, content) { - var script = this.fileNameToScript.get(fileName); - if (script) { - script.updateContent(content); - return; - } - throw new Error('No script with name \'' + fileName + '\''); - }; - - /** - * edit a script - * - * @param fileName the absolute path of the file - * @param minChar the index in the file content where the edition begins - * @param limChar the index in the file content where the edition ends - * @param newText the text inserted - */ - LanguageServiceHost.prototype.editScript = function (fileName, minChar, limChar, newText) { - var script = this.fileNameToScript.get(fileName); - if (script) { - script.editContent(minChar, limChar, newText); - return; - } - - throw new Error('No script with name \'' + fileName + '\''); - }; - - /** - * set 'open' status of a script - * - * @param fileName the absolute path of the file - * @param isOpen open status - */ - LanguageServiceHost.prototype.setScriptIsOpen = function (fileName, isOpen) { - var script = this.fileNameToScript.get(fileName); - if (script) { - script.isOpen = isOpen; - return; - } - - throw new Error('No script with name \'' + fileName + '\''); - }; - - /** - * the the language service host compilation settings - * - * @param the settings to be applied to the host - */ - LanguageServiceHost.prototype.setCompilationSettings = function (settings) { - this.compilationSettings = Object.freeze(utils.clone(settings)); - }; - - /** - * retrieve the content of a given script - * - * @param fileName the absolute path of the file - */ - LanguageServiceHost.prototype.getScriptContent = function (fileName) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.content; - } - return null; - }; - - /** - * return an index from a positon in line/char - * - * @param path the path of the file - * @param position the position - */ - LanguageServiceHost.prototype.getIndexFromPos = function (fileName, position) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.getPositionFromLine(position.line, position.ch); - } - return -1; - }; - - /** - * return a positon in line/char from an index - * @param path the path of the file - * @param index the index - */ - LanguageServiceHost.prototype.indexToPosition = function (fileName, index) { - var script = this.fileNameToScript.get(fileName); - if (script) { - var tsPosition = script.getLineAndColForPositon(index); - return { - ch: tsPosition.character, - line: tsPosition.line - }; - } - return null; - }; - - ////////////////////////////////////////////////////////////////////// - // ILanguageServiceShimHost implementation - // - LanguageServiceHost.prototype.getCompilationSettings = function () { - return this.compilationSettings; - }; - - LanguageServiceHost.prototype.getScriptFileNames = function () { - return this.fileNameToScript.keys; - }; - - LanguageServiceHost.prototype.getScriptSnapshot = function (fileName) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return new ScriptSnapshot(script); - } - return null; - }; - - LanguageServiceHost.prototype.getScriptVersion = function (fileName) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.version; - } - return 0; - }; - - LanguageServiceHost.prototype.getScriptIsOpen = function (fileName) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.isOpen; - } - return false; - }; - - LanguageServiceHost.prototype.getScriptByteOrderMark = function (fileName) { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.byteOrderMark; - } - return 0 /* None */; - }; - - LanguageServiceHost.prototype.getDiagnosticsObject = function () { - return new LanguageServicesDiagnostics(''); - }; - - LanguageServiceHost.prototype.getLocalizedDiagnosticMessages = function () { - return ''; - }; - - LanguageServiceHost.prototype.fileExists = function (s) { - return this.fileNameToScript.has(s); - }; - - LanguageServiceHost.prototype.directoryExists = function (s) { - return true; - }; - - LanguageServiceHost.prototype.resolveRelativePath = function (fileName, directory) { - return utils.pathResolve(directory, fileName); - }; - - LanguageServiceHost.prototype.getParentDirectory = function (fileName) { - return path.dirname(fileName); - }; - return LanguageServiceHost; -})(logger.LogingClass); - -/** -* Manage a script in the language service host -*/ -var ScriptInfo = (function () { - /** - * @param fileName the absolute path of the file - * @param content the content of the file - * @param isOpen the open status of the script - * @param byteOrderMark - */ - function ScriptInfo(fileName, content, isOpen, byteOrderMark) { - if (typeof isOpen === "undefined") { isOpen = false; } - if (typeof byteOrderMark === "undefined") { byteOrderMark = 0 /* None */; } - this.version = 1; - this.editRanges = []; - this.lineMap = null; - this.fileName = fileName; - this.content = content; - this.isOpen = isOpen; - this.byteOrderMark = byteOrderMark; - this.setContent(content); - } - /** - * update the content of the script - * - * @param newContent the new script content - */ - ScriptInfo.prototype.updateContent = function (newContent) { - this.setContent(newContent); - this.editRanges = []; - this.version++; - }; - - /** - * edit the script content - * - * @param minChar the index in the file content where the edition begins - * @param limChar the index in the file content where the edition ends - * @param newText the text inserted - */ - ScriptInfo.prototype.editContent = function (minChar, limChar, newText) { - // Apply edits - var prefix = this.content.substring(0, minChar); - var middle = newText; - var suffix = this.content.substring(limChar); - this.setContent(prefix + middle + suffix); - - // Store edit range + new length of script - this.editRanges.push(new TypeScript.TextChangeRange(TypeScript.TextSpan.fromBounds(minChar, limChar), newText.length)); - - // Update version # - this.version++; - }; - - /** - * return an index position from line an character position - * - * @param line line number - * @param character charecter poisiton in the line - */ - ScriptInfo.prototype.getPositionFromLine = function (line, character) { - return this.lineMap.getPosition(line, character); - }; - - /** - * return line and chararacter position from index position - * - * @param position - */ - ScriptInfo.prototype.getLineAndColForPositon = function (position) { - var lineAndChar = { line: -1, character: -1 }; - this.lineMap.fillLineAndCharacterFromPosition(position, lineAndChar); - return lineAndChar; - }; - - /** - * set the script content - */ - ScriptInfo.prototype.setContent = function (content) { - this.content = content; - this.lineMap = TypeScript.LineMap1.fromString(content); - }; - return ScriptInfo; -})(); - -/** -* ScriptSnapshot implementation -* Simply a proxy over ScriptInfo -*/ -var ScriptSnapshot = (function () { - function ScriptSnapshot(scriptInfo) { - this.lineMap = null; - this.scriptInfo = scriptInfo; - this.textSnapshot = scriptInfo.content; - this.version = scriptInfo.version; - this.editRanges = scriptInfo.editRanges.slice(0); - } - ScriptSnapshot.prototype.getText = function (start, end) { - return this.textSnapshot.substring(start, end); - }; - - ScriptSnapshot.prototype.getLength = function () { - return this.textSnapshot.length; - }; - - ScriptSnapshot.prototype.getLineStartPositions = function () { - if (this.lineMap === null) { - this.lineMap = TypeScript.LineMap1.fromString(this.textSnapshot); - } - return this.lineMap.lineStarts(); - }; - - ScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - if (scriptVersion === this.version) { - // No edits! - return TypeScript.TextChangeRange.unchanged; - } - var initialEditRangeIndex = this.editRanges.length - (this.version - scriptVersion); - - if (initialEditRangeIndex < 0) { - return null; - } - - var entries = this.editRanges.slice(initialEditRangeIndex); - return TypeScript.TextChangeRange.collapseChangesAcrossMultipleVersions(entries); - }; - return ScriptSnapshot; -})(); - -var LanguageServicesDiagnostics = (function () { - function LanguageServicesDiagnostics(destination) { - this.destination = destination; - } - LanguageServicesDiagnostics.prototype.log = function (content) { - //Imitates the LanguageServicesDiagnostics object when not in Visual Studio - }; - return LanguageServicesDiagnostics; -})(); - -module.exports = LanguageServiceHost; - -},{"../commons/collections":45,"../commons/logger":48,"../commons/utils":52,"path":39}],61:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -/** -* ILexical structure implementation -*/ -var LexicalStructureService = (function () { - /** - * @param projectManager the Project manager used by the service to retrieve project - */ - function LexicalStructureService(projectManager) { - this.projectManager = projectManager; - } - /** - * retrieve Lexical structure for a given file - * - * @param fileName absolute path of the file - * - * @return a Promise that resolve to a list of LexicalStructureItem - */ - LexicalStructureService.prototype.getLexicalStructureForFile = function (fileName) { - return this.projectManager.getProjectForFile(fileName).then(function (project) { - var languageServiceHost = project.getLanguageServiceHost(); - var items = project.getLanguageService().getScriptLexicalStructure(fileName) || []; - return items.map(function (item) { - return ({ - name: item.name, - containerName: item.containerName, - position: languageServiceHost.indexToPosition(fileName, item.minChar) - }); - }); - }); - }; - return LexicalStructureService; -})(); - -module.exports = LexicalStructureService; - -},{}],62:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var path = require('path'); -var minimatch = require('minimatch'); -var Promise = require('bluebird'); -var PromiseQueue = require('../commons/promiseQueue'); -var Services = TypeScript.Services; - -var collections = require('../commons/collections'); -var fs = require('../commons/fileSystem'); -var ws = require('../commons/workingSet'); -var logger = require('../commons/logger'); - -var utils = require('../commons/utils'); - -var LanguageServiceHost = require('./languageServiceHost'); - -//-------------------------------------------------------------------------- -// -// TypeScriptProject -// -//-------------------------------------------------------------------------- -/** -* class representing a typescript project, responsible of synchronizing -* languageServiceHost with the file system -*/ -var TypeScriptProject = (function () { - //------------------------------- - // constructor - //------------------------------- - /** - * @param baseDirectory the baseDirectory of the project - * @param config the project config file - * @param fileSystem the fileSystem wrapper used by the project - * @param workingSet the working set wrapper used by the project - * @param defaultLibLocation the location of the default compiler 'lib.d.ts' file - */ - function TypeScriptProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation) { - var _this = this; - this.baseDirectory = baseDirectory; - this.config = config; - this.fileSystem = fileSystem; - this.workingSet = workingSet; - this.defaultLibLocation = defaultLibLocation; - /** - * a promise queue used to run in sequence file based operation - */ - this.queue = new PromiseQueue(); - //------------------------------- - // Events Handler - //------------------------------- - /** - * handle changes in the fileSystem - */ - this.filesChangeHandler = function (changeRecords) { - _this.queue.then(function () { - changeRecords.forEach(function (record) { - switch (record.kind) { - case 0 /* ADD */: - if (_this.isProjectSourceFile(record.fileName) || _this.references.has(record.fileName)) { - _this.addFile(record.fileName); - } - break; - case 2 /* DELETE */: - if (_this.projectFilesSet.has(record.fileName)) { - _this.removeFile(record.fileName); - } - break; - case 1 /* UPDATE */: - if (_this.projectFilesSet.has(record.fileName)) { - _this.updateFile(record.fileName); - } - break; - } - }); - }); - }; - /** - * handle changes in the workingSet - */ - this.workingSetChangedHandler = function (changeRecord) { - _this.queue.then(function () { - switch (changeRecord.kind) { - case 0 /* ADD */: - changeRecord.paths.forEach(function (fileName) { - if (_this.projectFilesSet.has(fileName)) { - _this.languageServiceHost.setScriptIsOpen(fileName, true); - } - }); - break; - case 1 /* REMOVE */: - changeRecord.paths.forEach(function (fileName) { - if (_this.projectFilesSet.has(fileName)) { - _this.languageServiceHost.setScriptIsOpen(fileName, false); - _this.updateFile(fileName); - } - }); - break; - } - }); - }; - /** - * handle document edition - */ - this.documentEditedHandler = function (record) { - _this.queue.then(function () { - if (_this.projectFilesSet.has(record.path)) { - var mustUpdate = false, oldPaths = new collections.StringSet(_this.getReferencedOrImportedFiles(record.path)), lastChange; - record.changeList.some(function (change) { - lastChange = change; - if (!change.from || !change.to) { - mustUpdate = true; - } else { - var minChar = _this.languageServiceHost.getIndexFromPos(record.path, change.from), limChar = _this.languageServiceHost.getIndexFromPos(record.path, change.to); - - _this.languageServiceHost.editScript(record.path, minChar, limChar, change.text); - } - return mustUpdate; - }); - if (mustUpdate || _this.languageServiceHost.getScriptContent(record.path) !== record.documentText) { - if (logger.warning()) { - if (mustUpdate) { - logger.log('TypeScriptProject: inconsistent change descriptor: ' + JSON.stringify(lastChange)); - } else { - logger.log('TypeScriptProject: text different before and after change'); - } - } - _this.languageServiceHost.updateScript(record.path, record.documentText); - } - - _this.updateReferences(record.path, oldPaths); - } - }); - }; - } - //------------------------------- - // public methods - //------------------------------- - /** - * Initialize the project an his component - */ - TypeScriptProject.prototype.init = function () { - var _this = this; - this.projectFilesSet = new collections.StringSet(); - this.references = new collections.StringMap(); - this.workingSet.workingSetChanged.add(this.workingSetChangedHandler); - this.workingSet.documentEdited.add(this.documentEditedHandler); - this.fileSystem.projectFilesChanged.add(this.filesChangeHandler); - - return this.queue.init(this.getTypeScriptInfosForPath(this.config.typescriptPath).then(function (typeScriptInfo) { - _this.libLocation = typeScriptInfo.libLocation; - _this.coreService = typeScriptInfo.factory.createCoreServices({ logger: new logger.LogingClass() }); - _this.languageServiceHost = new LanguageServiceHost(); - _this.languageServiceHost.setCompilationSettings(_this.createCompilationSettings()); - _this.languageService = typeScriptInfo.factory.createPullLanguageService(_this.languageServiceHost); - - return _this.collectFiles(); - }).then(function () { - _this.updateWorkingSet(); - })); - }; - - /** - * update a project with a new config - */ - TypeScriptProject.prototype.update = function (config) { - var _this = this; - if (this.config.typescriptPath !== config.typescriptPath) { - return this.init(); - } - - if (!this.config.noLib && config.noLib) { - this.removeFile(this.libLocation); - } - - var pojectSources = this.projectFilesSet.values.filter(function (fileName) { - return _this.isProjectSourceFile(fileName); - }); - this.config = config; - return this.queue.then(function () { - _this.languageServiceHost.setCompilationSettings(_this.createCompilationSettings()); - var promises = []; - pojectSources.forEach(function (fileName) { - if (!_this.isProjectSourceFile(fileName)) { - _this.removeFile(fileName); - } - }); - - return Promise.all(promises).then(function () { - return _this.collectFiles(); - }).then(function () { - return _this.updateWorkingSet(); - }); - }); - }; - - /** - * dispose the project - */ - TypeScriptProject.prototype.dispose = function () { - this.workingSet.workingSetChanged.remove(this.workingSetChangedHandler); - this.workingSet.documentEdited.remove(this.documentEditedHandler); - this.fileSystem.projectFilesChanged.remove(this.filesChangeHandler); - }; - - //------------------------------- - // exposed services - //------------------------------- - /** - * return the language service host of the project - */ - TypeScriptProject.prototype.getLanguageServiceHost = function () { - return this.languageServiceHost; - }; - - /** - * return the core service used by the project - */ - TypeScriptProject.prototype.getCoreService = function () { - return this.coreService; - }; - - /** - * return the languageService used by the project - */ - TypeScriptProject.prototype.getLanguageService = function () { - return this.languageService; - }; - - //------------------------------- - // exposed files informations - //------------------------------- - /** - * return the set of files contained in the project - */ - TypeScriptProject.prototype.getProjectFilesSet = function () { - return new collections.StringSet(this.projectFilesSet.values); - }; - - /** - * for a given path, give the relation between the project an the associated file - * @param path - */ - TypeScriptProject.prototype.getProjectFileKind = function (fileName) { - if (this.projectFilesSet.has(fileName)) { - return this.isProjectSourceFile(fileName) ? 1 /* SOURCE */ : 2 /* REFERENCE */; - } else { - return 0 /* NONE */; - } - }; - - //------------------------------- - // private methods - //------------------------------- - /** - * Retrieve a ServiceFactory from a given typeScriptService file path - * @param typescriptPath - */ - TypeScriptProject.prototype.getTypeScriptInfosForPath = function (typescriptPath) { - var _this = this; - if (!typescriptPath) { - return Promise.cast({ - factory: new Services.TypeScriptServicesFactory(), - libLocation: this.defaultLibLocation - }); - } else { - var typescriptServicesFile = path.join(typescriptPath, 'typescriptServices.js'); - - return this.fileSystem.readFile(typescriptServicesFile).then(function (code) { - var func = new Function('var TypeScript;' + code + ';return TypeScript;'), typeScript = func(); - - return { - factory: new typeScript.Services.TypeScriptServicesFactory(), - libLocation: path.join(typescriptPath, 'lib.d.ts') - }; - }).catch(function () { - if (logger.error()) { - logger.log('could not retrieve typescript compiler at path: ' + typescriptPath); - } - return { - factory: new Services.TypeScriptServicesFactory(), - libLocation: _this.defaultLibLocation - }; - }); - } - }; - - /** - * create Typescript compilation settings from config file - */ - TypeScriptProject.prototype.createCompilationSettings = function () { - var compilationSettings = new TypeScript.CompilationSettings(), moduleType = this.config.module.toLowerCase(); - - compilationSettings.noLib = this.config.noLib; - compilationSettings.noImplicitAny = this.config.noImplicitAny; - compilationSettings.sourceRoot = this.config.sourceRoot; - - compilationSettings.codeGenTarget = this.config.target.toLowerCase() === 'es3' ? 0 /* EcmaScript3 */ : 1 /* EcmaScript5 */; - - compilationSettings.moduleGenTarget = moduleType === 'none' ? 0 /* Unspecified */ : moduleType === 'amd' ? 2 /* Asynchronous */ : 1 /* Synchronous */; - - return compilationSettings; - }; - - /** - * update the languageService host script 'open' status - * according to file in the working set - */ - TypeScriptProject.prototype.updateWorkingSet = function () { - var _this = this; - this.workingSet.getFiles().then(function (files) { - return files.forEach(function (fileName) { - if (_this.projectFilesSet.has(fileName)) { - _this.languageServiceHost.setScriptIsOpen(fileName, true); - } - }); - }); - }; - - //------------------------------- - // Project Files Management - //------------------------------- - /** - * retrieve files content for path match described in the config - */ - TypeScriptProject.prototype.collectFiles = function () { - var _this = this; - return this.fileSystem.getProjectFiles().then(function (files) { - var promises = []; - files.forEach(function (fileName) { - if (_this.isProjectSourceFile(fileName) && !_this.projectFilesSet.has(fileName)) { - console.log(fileName); - promises.push(_this.addFile(fileName, false)); - } - }); - - if (!_this.config.noLib && !_this.projectFilesSet.has(_this.libLocation)) { - promises.push(_this.addFile(_this.libLocation)); - } - - return Promise.all(promises); - }); - }; - - /** - * return true a if a given file path match the config - * @param path - */ - TypeScriptProject.prototype.isProjectSourceFile = function (fileName) { - var relativeFileName = path.relative(this.baseDirectory, fileName); - return this.config.sources.some(function (pattern) { - return minimatch(relativeFileName, pattern) || minimatch(fileName, pattern); - }); - }; - - /** - * add a file to the project and all file that this file reference - * @param path - */ - TypeScriptProject.prototype.addFile = function (fileName, notify) { - var _this = this; - if (typeof notify === "undefined") { notify = true; } - if (!this.projectFilesSet.has(fileName)) { - this.projectFilesSet.add(fileName); - return this.fileSystem.readFile(fileName).then(function (content) { - var promises = []; - _this.languageServiceHost.addScript(fileName, content); - _this.getReferencedOrImportedFiles(fileName).forEach(function (referencedFile) { - promises.push(_this.addFile(referencedFile)); - _this.addReference(fileName, referencedFile); - }); - return Promise.all(promises); - }, function () { - _this.projectFilesSet.remove(fileName); - }); - } - return null; - }; - - /** - * remove a file from the project - * @param path - */ - TypeScriptProject.prototype.removeFile = function (fileName) { - var _this = this; - if (this.projectFilesSet.has(fileName)) { - this.getReferencedOrImportedFiles(fileName).forEach(function (referencedPath) { - _this.removeReference(fileName, referencedPath); - }); - this.projectFilesSet.remove(fileName); - this.languageServiceHost.removeScript(fileName); - } - }; - - /** - * update a project file - * @param path - */ - TypeScriptProject.prototype.updateFile = function (fileName) { - var _this = this; - this.fileSystem.readFile(fileName).then(function (content) { - var oldPaths = new collections.StringSet(_this.getReferencedOrImportedFiles(fileName)); - _this.languageServiceHost.updateScript(fileName, content); - _this.updateReferences(fileName, oldPaths); - }); - }; - - //------------------------------- - // References - //------------------------------- - /** - * for a given file retrives the file referenced or imported by this file - * @param path - */ - TypeScriptProject.prototype.getReferencedOrImportedFiles = function (fileName) { - if (!this.projectFilesSet.has(fileName)) { - return []; - } - var script = this.languageServiceHost.getScriptSnapshot(fileName), preProcessedFileInfo = this.coreService.getPreProcessedFileInfo(fileName, script), dir = path.dirname(fileName); - - return preProcessedFileInfo.referencedFiles.map(function (fileReference) { - return utils.pathResolve(dir, fileReference.path); - }).concat(preProcessedFileInfo.importedFiles.map(function (fileReference) { - return utils.pathResolve(dir, fileReference.path + '.ts'); - })); - }; - - /** - * add a reference - * - * @param fileName the path of the file referencing anothe file - * @param referencedPath the path of the file referenced - */ - TypeScriptProject.prototype.addReference = function (fileName, referencedPath) { - if (!this.references.has(referencedPath)) { - this.references.set(referencedPath, new collections.StringSet()); - } - this.references.get(referencedPath).add(fileName); - }; - - /** - * remove a reference - * - * @param fileName the path of the file referencing anothe file - * @param referencedPath the path of the file referenced - */ - TypeScriptProject.prototype.removeReference = function (fileName, referencedPath) { - var fileRefs = this.references.get(referencedPath); - if (!fileRefs) { - this.removeFile(referencedPath); - } - fileRefs.remove(fileName); - if (fileRefs.values.length === 0) { - this.references.delete(referencedPath); - this.removeFile(referencedPath); - } - }; - - /** - * update file references after an update - * - * @param fileName the absolute path of the file - * @param oldFileReferences list of file this file referenced before being updated - */ - TypeScriptProject.prototype.updateReferences = function (fileName, oldFileReferences) { - var _this = this; - this.getReferencedOrImportedFiles(fileName).forEach(function (referencedPath) { - oldFileReferences.remove(referencedPath); - if (!_this.projectFilesSet.has(referencedPath)) { - _this.addFile(referencedPath); - _this.addReference(fileName, referencedPath); - } - }); - - oldFileReferences.values.forEach(function (referencedPath) { - return _this.removeReference(fileName, referencedPath); - }); - }; - return TypeScriptProject; -})(); - -var TypeScriptProject; -(function (TypeScriptProject) { - /** - * enum describing the type of file ib a project - */ - (function (ProjectFileKind) { - /** - * the file is not a part of the project - */ - ProjectFileKind[ProjectFileKind["NONE"] = 0] = "NONE"; - - /** - * the file is a source file of the project - */ - ProjectFileKind[ProjectFileKind["SOURCE"] = 1] = "SOURCE"; - - /** - * the file is referenced by a source file of the project - */ - ProjectFileKind[ProjectFileKind["REFERENCE"] = 2] = "REFERENCE"; - })(TypeScriptProject.ProjectFileKind || (TypeScriptProject.ProjectFileKind = {})); - var ProjectFileKind = TypeScriptProject.ProjectFileKind; - - /** - * default Project factory - * @param baseDirectory the baseDirectory of the project - * @param config the project config file - * @param fileSystem the fileSystem wrapper used by the project - * @param workingSet the working set wrapper used by the project - * @param defaultLibLocation the location of the default compiler 'lib.d.ts' file - */ - function newProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation) { - return new TypeScriptProject(baseDirectory, config, fileSystem, workingSet, defaultLibLocation); - } - TypeScriptProject.newProject = newProject; -})(TypeScriptProject || (TypeScriptProject = {})); - -module.exports = TypeScriptProject; - -},{"../commons/collections":45,"../commons/fileSystem":47,"../commons/logger":48,"../commons/promiseQueue":49,"../commons/utils":52,"../commons/workingSet":54,"./languageServiceHost":60,"bluebird":3,"minimatch":40,"path":39}],63:[function(require,module,exports){ -// Copyright 2013-2014 François de Campredon -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -'use strict'; -var Promise = require('bluebird'); -var path = require('path'); -var PromiseQueue = require('../commons/promiseQueue'); - -var collections = require('../commons/collections'); -var tsUtils = require('../commons/typeScriptUtils'); -var utils = require('../commons/utils'); -var logger = require('../commons/logger'); -var TypeScriptProject = require('./project'); - -//-------------------------------------------------------------------------- -// -// TypeScriptProjectManager -// -//-------------------------------------------------------------------------- -/** -* The main facade class of the extentions, responsible to create, destroy, update -* projects by observing preferenreces. -*/ -var TypeScriptProjectManager = (function () { - function TypeScriptProjectManager() { - var _this = this; - /** - * a map containing the projects - */ - this.projectMap = new collections.StringMap(); - /** - * a promise queue used to insure async task are run sequentialy - */ - this.queue = new PromiseQueue(); - //------------------------------- - // Events Handler - //------------------------------- - /** - * handle changes in the preferences, update / delete / create project accordingly - */ - this.configChangeHandler = function () { - _this.queue.then(function () { - _this.preferenceManager.getProjectsConfig().then(function (configs) { - var promises = []; - _this.projectMap.entries.forEach(function (entry) { - var projectId = entry.key, project = entry.value, config = configs[projectId]; - if (!config) { - project.dispose(); - _this.projectMap.delete(projectId); - } else { - promises.push(project.update(config)); - } - }); - - Object.keys(configs).forEach(function (projectId) { - if (!_this.projectMap.has(projectId)) { - promises.push(_this.createProjectFromConfig(projectId, configs[projectId])); - } - }); - }); - }); - }; - } - //------------------------------- - // Public methods - //------------------------------- - /** - * initialize the project manager - * - * @param defaultTypeScriptLocation location of the default typescript compiler lib.d.ts file - * @param preferenceManager preferences manager used to retrieve project config - * @param fileSystem editor filesystem manager - * @param workingSet editor workingset manager - * @param projectFactory a factory used to create project - */ - TypeScriptProjectManager.prototype.init = function (defaultTypeScriptLocation, preferenceManager, fileSystem, workingSet, projectFactory) { - var _this = this; - this.defaultTypeScriptLocation = defaultTypeScriptLocation; - this.preferenceManager = preferenceManager; - this.workingSet = workingSet; - this.fileSystem = fileSystem; - this.projectFactory = projectFactory; - - this.preferenceManager.configChanged.add(this.configChangeHandler); - - return this.queue.init(this.fileSystem.getProjectRoot().then(function (projectRootDir) { - _this.projectRootDir = projectRootDir; - return _this.createProjects(); - })); - }; - - /** - * dispose the project manager - */ - TypeScriptProjectManager.prototype.dispose = function () { - var _this = this; - this.preferenceManager.configChanged.remove(this.configChangeHandler); - this.queue.then(function () { - return _this.disposeProjects(); - }); - }; - - /** - * this method will try to find a project referencing the given path - * it will by priority try to retrive project that have that file as part of 'direct source' - * before returning projects that just have 'reference' to this file - * - * @param fileName the path of the typesrcript file for which project are looked fo - */ - TypeScriptProjectManager.prototype.getProjectForFile = function (fileName) { - var _this = this; - return this.queue.then(function () { - var projects = _this.projectMap.values, project = null; - - //first we check for a project that have tha file as source - projects.some(function (tsProject) { - if (tsProject.getProjectFileKind(fileName) === 1 /* SOURCE */) { - project = tsProject; - return true; - } - }); - - //then we check if a project has a file referencing the given file - if (!project) { - projects.some(function (tsProject) { - if (tsProject.getProjectFileKind(fileName) === 2 /* REFERENCE */) { - project = tsProject; - return true; - } - }); - } - - //then we check if the current temp project has the file - if (!project) { - if (_this.tempProject && _this.tempProject.getProjectFilesSet().has(fileName)) { - project = _this.tempProject; - } else if (_this.tempProject) { - _this.tempProject.dispose(); - _this.tempProject = null; - } - } - - //then if still no project found we create the temp project - if (!project) { - var config = utils.clone(tsUtils.typeScriptProjectConfigDefault); - config.target = 'es5'; - config.sources = [fileName]; - _this.tempProject = project = _this.projectFactory(_this.projectRootDir, config, _this.fileSystem, _this.workingSet, path.join(_this.defaultTypeScriptLocation, 'lib.d.ts')); - return _this.tempProject.init().then(function () { - return _this.tempProject; - }); - } - - return project; - }); - }; - - //------------------------------- - // Private methods - //------------------------------- - /** - * create projects from project configs retrieved by the preferenceManager - */ - TypeScriptProjectManager.prototype.createProjects = function () { - var _this = this; - return this.preferenceManager.getProjectsConfig().then(function (configs) { - return Promise.all(Object.keys(configs).map(function (projectId) { - return _this.createProjectFromConfig(projectId, configs[projectId]); - })); - }); - }; - - /** - * dispose every projects created by the ProjectManager - */ - TypeScriptProjectManager.prototype.disposeProjects = function () { - var projectMap = this.projectMap; - projectMap.keys.forEach(function (path) { - projectMap.get(path).dispose(); - }); - this.projectMap.clear(); - if (this.tempProject) { - this.tempProject.dispose(); - this.tempProject = null; - } - }; - - /** - * for given config and projectId create a project - * - * @param projectId the id of the project - * @param config the project config - */ - TypeScriptProjectManager.prototype.createProjectFromConfig = function (projectId, config) { - var _this = this; - var project = this.projectFactory(this.projectRootDir, config, this.fileSystem, this.workingSet, path.join(this.defaultTypeScriptLocation, 'lib.d.ts')); - return project.init().then(function () { - _this.projectMap.set(projectId, project); - }, function () { - if (logger.fatal()) { - logger.log('could not create project:' + projectId); - } - }); - }; - return TypeScriptProjectManager; -})(); - -module.exports = TypeScriptProjectManager; +module.exports = TypeScriptProjectManager; -},{"../commons/collections":45,"../commons/logger":48,"../commons/promiseQueue":49,"../commons/typeScriptUtils":51,"../commons/utils":52,"./project":62,"bluebird":3,"path":39}]},{},[59]) \ No newline at end of file +},{"../commons/collections":43,"../commons/logger":46,"../commons/promiseQueue":47,"../commons/typeScriptUtils":49,"../commons/utils":50,"./project":60,"bluebird":5,"path":1}]},{},[57]) \ No newline at end of file diff --git a/main.js b/main.js index 362016f..e883a3b 100644 --- a/main.js +++ b/main.js @@ -1,30 +1,28 @@ /*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */ /*global define, $, brackets, window, Worker */ -define(function (require, exports, module) { +define(['require', 'text!config.json', './third_party/typescript/typescriptServices'], function (require, configText) { 'use strict'; - require(['text!config.json'], function (configText) { - var AppInit = brackets.getModule('utils/AppInit'), - config = JSON.parse(configText), - baseUrl = config.isDebug ? './built/' : './bin/'; + var AppInit = brackets.getModule('utils/AppInit'), + config = JSON.parse(configText), + baseUrl = config.isDebug ? './built/' : './bin/'; - require([baseUrl + 'main'], function (init) { - var initConfig = { - logLevel: config.logLevel, - typeScriptLocation: require.toUrl('./third_party/typescript/'), - workerLocation: require.toUrl(baseUrl + 'worker.js') - }; - - AppInit.appReady(function () { - try { - init(initConfig); - } catch(e) { - console.error(e.stack); - } - }); - + require([baseUrl + 'main'], function (init) { + var initConfig = { + logLevel: config.logLevel, + typeScriptLocation: require.toUrl('./third_party/typescript/'), + workerLocation: require.toUrl(baseUrl + 'worker.js') + }; + + AppInit.appReady(function () { + try { + init(initConfig); + } catch(e) { + console.error(e.stack); + } }); + }); }); diff --git a/src/commons/formattingService.ts b/src/commons/formattingService.ts index 65a0b8f..52e7a61 100644 --- a/src/commons/formattingService.ts +++ b/src/commons/formattingService.ts @@ -28,8 +28,8 @@ interface IFormattingService { * * @return a promise resolving to a formating range info */ - getFormatingForFile(fileName: string, options: TypeScript.Services.FormatCodeOptions, - startPos?: CodeMirror.Position, endPos?: CodeMirror.Position): Promise; + getFormatingForFile(fileName: string, options: ts.FormatCodeOptions, + startPos?: CodeMirror.Position, endPos?: CodeMirror.Position): Promise; } export = IFormattingService; diff --git a/src/commons/logger.ts b/src/commons/logger.ts index 6d7e4ad..e048dac 100644 --- a/src/commons/logger.ts +++ b/src/commons/logger.ts @@ -95,7 +95,7 @@ export function setLogLevel(level: string): void { /** * base class reusing the logger for typescript */ -export class LogingClass { +export class LogingClass implements ts.Logger { information = information; debug = debug; warning = warning; diff --git a/src/declarations/typescriptServices.d.ts b/src/declarations/typescriptServices.d.ts index 01bc49f..6d67419 100644 --- a/src/declarations/typescriptServices.d.ts +++ b/src/declarations/typescriptServices.d.ts @@ -1,3 +1,3067 @@ +declare module ts { + var Diagnostics: { + Unterminated_string_literal: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Identifier_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Trailing_comma_not_allowed: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Asterisk_Slash_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unexpected_token: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Catch_clause_parameter_cannot_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_rest_parameter_must_be_last_in_a_parameter_list: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_cannot_have_question_mark_and_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_required_parameter_cannot_follow_an_optional_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_cannot_have_a_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_parameter_cannot_have_a_question_mark: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_must_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_parameter_must_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_parameter_type_must_be_string_or_number: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_or_interface_declaration_can_only_have_one_extends_clause: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_extends_clause_must_precede_an_implements_clause: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_can_only_extend_a_single_class: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_declaration_can_only_have_one_implements_clause: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Accessibility_modifier_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_must_precede_1_modifier: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_cannot_appear_on_a_class_element: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_interface_declaration_cannot_have_an_implements_clause: { + code: number; + category: DiagnosticCategory; + key: string; + }; + super_must_be_followed_by_an_argument_list_or_member_access: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Only_ambient_modules_can_use_quoted_names: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Statements_are_not_allowed_in_ambient_contexts: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_function_implementation_cannot_be_declared_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Initializers_are_not_allowed_in_ambient_contexts: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_cannot_appear_on_a_module_element: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_rest_parameter_cannot_be_optional: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_rest_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_set_accessor_must_have_exactly_one_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_set_accessor_cannot_have_an_optional_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_set_accessor_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_set_accessor_cannot_have_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_get_accessor_cannot_have_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Enum_member_must_have_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_export_assignment_cannot_be_used_in_an_internal_module: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Ambient_enum_elements_can_only_have_integer_literal_initializers: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_declare_modifier_cannot_be_used_with_an_import_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Invalid_reference_directive_syntax: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_accessor_cannot_be_declared_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_modifier_cannot_appear_on_a_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameters_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_annotation_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_accessor_cannot_have_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_set_accessor_cannot_have_a_return_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_signature_must_have_exactly_one_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_argument_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Invalid_use_of_0_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + }; + with_statements_are_not_allowed_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + }; + delete_cannot_be_called_on_an_identifier_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Jump_target_cannot_cross_function_boundary: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_return_statement_can_only_be_used_within_a_function_body: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Expression_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_member_cannot_be_declared_optional: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_label_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_export_assignment_cannot_have_modifiers: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Octal_literals_are_not_allowed_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Variable_declaration_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Hexadecimal_digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unexpected_end_of_text: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Invalid_character: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Declaration_or_statement_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Statement_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + case_or_default_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_or_signature_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Enum_member_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_reference_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Variable_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Argument_expression_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_assignment_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Expression_or_comma_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_argument_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + String_literal_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Line_break_not_permitted_here: { + code: number; + category: DiagnosticCategory; + key: string; + }; + catch_or_finally_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Block_or_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Modifiers_not_permitted_on_index_signature_members: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Filename_0_differs_from_already_included_filename_1_only_in_casing: { + code: number; + category: DiagnosticCategory; + key: string; + }; + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_identifier_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Static_members_cannot_reference_class_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Circular_definition_of_import_alias_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_find_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Module_0_has_no_exported_member_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + File_0_is_not_an_external_module: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_find_external_module_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_module_cannot_have_more_than_one_export_assignment: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_recursively_references_itself_as_a_base_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_may_only_extend_another_class: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_interface_may_only_extend_a_class_or_another_interface: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Generic_type_0_requires_1_type_argument_s: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_is_not_generic: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Global_type_0_must_be_a_class_or_interface_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Global_type_0_must_have_1_type_parameter_s: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_find_global_type_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Named_properties_0_of_types_1_and_2_are_not_identical: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Excessive_stack_depth_comparing_types_0_and_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_is_not_assignable_to_type_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_is_not_assignable_to_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_is_missing_in_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Private_property_0_cannot_be_reimplemented: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Types_of_property_0_are_incompatible_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Types_of_parameters_0_and_1_are_incompatible_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Index_signature_is_missing_in_type_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Index_signatures_are_incompatible_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + this_cannot_be_referenced_in_a_module_body: { + code: number; + category: DiagnosticCategory; + key: string; + }; + this_cannot_be_referenced_in_current_location: { + code: number; + category: DiagnosticCategory; + key: string; + }; + this_cannot_be_referenced_in_constructor_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + }; + this_cannot_be_referenced_in_a_static_property_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + super_can_only_be_referenced_in_a_derived_class: { + code: number; + category: DiagnosticCategory; + key: string; + }; + super_cannot_be_referenced_in_constructor_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { + code: number; + category: DiagnosticCategory; + key: string; + }; + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_does_not_exist_on_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_is_inaccessible: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_index_expression_argument_must_be_of_type_string_number_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_does_not_satisfy_the_constraint_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_0_does_not_satisfy_the_constraint_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Supplied_parameters_do_not_match_any_signature_of_call_target: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Untyped_function_calls_may_not_accept_type_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Only_a_void_function_can_be_called_with_the_new_keyword: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Neither_type_0_nor_type_1_is_assignable_to_the_other: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + No_best_common_type_exists_among_return_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Invalid_left_hand_side_of_assignment_expression: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Operator_0_cannot_be_applied_to_types_1_and_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + No_best_common_type_exists_between_0_1_and_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + No_best_common_type_exists_between_0_and_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_rest_parameter_must_be_of_an_array_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_cannot_be_referenced_in_its_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_string_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_number_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Constructors_for_derived_classes_must_contain_a_super_call: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Getter_and_setter_accessors_do_not_agree_in_visibility: { + code: number; + category: DiagnosticCategory; + key: string; + }; + get_and_set_accessor_must_have_the_same_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Overload_signatures_must_all_be_exported_or_not_exported: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Overload_signatures_must_all_be_ambient_or_non_ambient: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Overload_signatures_must_all_be_public_or_private: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Overload_signatures_must_all_be_optional_or_required: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Function_overload_must_be_static: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Function_overload_must_not_be_static: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Function_implementation_name_must_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Constructor_implementation_is_missing: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Multiple_constructor_implementations_are_not_allowed: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_function_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Overload_signature_is_not_compatible_with_function_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Invalid_left_hand_side_in_for_in_statement: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Setters_cannot_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { + code: number; + category: DiagnosticCategory; + key: string; + }; + All_symbols_within_a_with_block_will_be_resolved_to_any: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_incorrectly_extends_base_class_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_incorrectly_extends_base_class_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_incorrectly_implements_interface_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_incorrectly_implements_interface_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_class_may_only_implement_another_class_or_interface: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Interface_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + All_declarations_of_an_interface_must_have_identical_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Interface_0_incorrectly_extends_interface_1_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Interface_0_incorrectly_extends_interface_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Enum_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { + code: number; + category: DiagnosticCategory; + key: string; + }; + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Ambient_external_modules_cannot_be_nested_in_other_modules: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Ambient_external_module_declaration_cannot_specify_relative_module_name: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Import_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Import_declaration_conflicts_with_local_declaration_of_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Import_declaration_0_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Exported_variable_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_of_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Return_type_of_exported_function_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + The_current_host_does_not_support_the_0_option: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_find_the_common_subdirectory_path_for_the_input_files: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Cannot_read_file_0_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unsupported_file_encoding: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unknown_compiler_option_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Could_not_write_file_0_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Concatenate_and_emit_output_to_single_file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Generates_corresponding_d_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Watch_input_files: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Redirect_output_structure_to_the_directory: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Do_not_emit_comments_to_output: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Specify_module_code_generation_Colon_commonjs_or_amd: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Print_this_message: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Print_the_compiler_s_version: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Syntax_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + options: { + code: number; + category: DiagnosticCategory; + key: string; + }; + file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Examples_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Options_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Version_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Insert_command_line_options_and_files_from_a_file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + File_change_detected_Compiling: { + code: number; + category: DiagnosticCategory; + key: string; + }; + KIND: { + code: number; + category: DiagnosticCategory; + key: string; + }; + FILE: { + code: number; + category: DiagnosticCategory; + key: string; + }; + VERSION: { + code: number; + category: DiagnosticCategory; + key: string; + }; + LOCATION: { + code: number; + category: DiagnosticCategory; + key: string; + }; + DIRECTORY: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Compilation_complete_Watching_for_file_changes: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Generates_corresponding_map_file: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Compiler_option_0_expects_an_argument: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unterminated_quoted_string_in_response_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Argument_for_module_option_must_be_commonjs_or_amd: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Argument_for_target_option_must_be_es3_or_es5: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unsupported_locale_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Unable_to_open_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Corrupted_locale_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Warn_on_expressions_and_declarations_with_an_implied_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + File_0_not_found: { + code: number; + category: DiagnosticCategory; + key: string; + }; + File_0_must_have_extension_ts_or_d_ts: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Variable_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Parameter_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Member_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Index_signature_of_object_type_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Object_literal_s_property_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Rest_parameter_0_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + }; + }; +} +declare module ts { + interface ErrorCallback { + (message: DiagnosticMessage): void; + } + interface CommentCallback { + (pos: number, end: number): void; + } + interface Scanner { + getStartPos(): number; + getToken(): SyntaxKind; + getTextPos(): number; + getTokenPos(): number; + getTokenText(): string; + getTokenValue(): string; + hasPrecedingLineBreak(): boolean; + isIdentifier(): boolean; + isReservedWord(): boolean; + reScanGreaterToken(): SyntaxKind; + reScanSlashToken(): SyntaxKind; + scan(): SyntaxKind; + setText(text: string): void; + setTextPos(textPos: number): void; + tryScan(callback: () => T): T; + } + function tokenToString(t: SyntaxKind): string; + function getLineStarts(text: string): number[]; + function getLineAndCharacterOfPosition(lineStarts: number[], position: number): { + line: number; + character: number; + }; + function positionToLineAndCharacter(text: string, pos: number): { + line: number; + character: number; + }; + function isOctalDigit(ch: number): boolean; + function skipTrivia(text: string, pos: number, stopAfterLineBreak?: boolean): number; + function getLeadingComments(text: string, pos: number): TextRange[]; + function getTrailingComments(text: string, pos: number): TextRange[]; + function createScanner(languageVersion: ScriptTarget, text?: string, onError?: ErrorCallback, onComment?: CommentCallback): Scanner; +} +declare module ts { + interface TextRange { + pos: number; + end: number; + } + enum SyntaxKind { + Unknown = 0, + EndOfFileToken = 1, + NumericLiteral = 2, + StringLiteral = 3, + RegularExpressionLiteral = 4, + OpenBraceToken = 5, + CloseBraceToken = 6, + OpenParenToken = 7, + CloseParenToken = 8, + OpenBracketToken = 9, + CloseBracketToken = 10, + DotToken = 11, + DotDotDotToken = 12, + SemicolonToken = 13, + CommaToken = 14, + LessThanToken = 15, + GreaterThanToken = 16, + LessThanEqualsToken = 17, + GreaterThanEqualsToken = 18, + EqualsEqualsToken = 19, + ExclamationEqualsToken = 20, + EqualsEqualsEqualsToken = 21, + ExclamationEqualsEqualsToken = 22, + EqualsGreaterThanToken = 23, + PlusToken = 24, + MinusToken = 25, + AsteriskToken = 26, + SlashToken = 27, + PercentToken = 28, + PlusPlusToken = 29, + MinusMinusToken = 30, + LessThanLessThanToken = 31, + GreaterThanGreaterThanToken = 32, + GreaterThanGreaterThanGreaterThanToken = 33, + AmpersandToken = 34, + BarToken = 35, + CaretToken = 36, + ExclamationToken = 37, + TildeToken = 38, + AmpersandAmpersandToken = 39, + BarBarToken = 40, + QuestionToken = 41, + ColonToken = 42, + EqualsToken = 43, + PlusEqualsToken = 44, + MinusEqualsToken = 45, + AsteriskEqualsToken = 46, + SlashEqualsToken = 47, + PercentEqualsToken = 48, + LessThanLessThanEqualsToken = 49, + GreaterThanGreaterThanEqualsToken = 50, + GreaterThanGreaterThanGreaterThanEqualsToken = 51, + AmpersandEqualsToken = 52, + BarEqualsToken = 53, + CaretEqualsToken = 54, + Identifier = 55, + BreakKeyword = 56, + CaseKeyword = 57, + CatchKeyword = 58, + ClassKeyword = 59, + ConstKeyword = 60, + ContinueKeyword = 61, + DebuggerKeyword = 62, + DefaultKeyword = 63, + DeleteKeyword = 64, + DoKeyword = 65, + ElseKeyword = 66, + EnumKeyword = 67, + ExportKeyword = 68, + ExtendsKeyword = 69, + FalseKeyword = 70, + FinallyKeyword = 71, + ForKeyword = 72, + FunctionKeyword = 73, + IfKeyword = 74, + ImportKeyword = 75, + InKeyword = 76, + InstanceOfKeyword = 77, + NewKeyword = 78, + NullKeyword = 79, + ReturnKeyword = 80, + SuperKeyword = 81, + SwitchKeyword = 82, + ThisKeyword = 83, + ThrowKeyword = 84, + TrueKeyword = 85, + TryKeyword = 86, + TypeOfKeyword = 87, + VarKeyword = 88, + VoidKeyword = 89, + WhileKeyword = 90, + WithKeyword = 91, + ImplementsKeyword = 92, + InterfaceKeyword = 93, + LetKeyword = 94, + PackageKeyword = 95, + PrivateKeyword = 96, + ProtectedKeyword = 97, + PublicKeyword = 98, + StaticKeyword = 99, + YieldKeyword = 100, + AnyKeyword = 101, + BooleanKeyword = 102, + ConstructorKeyword = 103, + DeclareKeyword = 104, + GetKeyword = 105, + ModuleKeyword = 106, + RequireKeyword = 107, + NumberKeyword = 108, + SetKeyword = 109, + StringKeyword = 110, + Missing = 111, + QualifiedName = 112, + TypeParameter = 113, + Parameter = 114, + Property = 115, + Method = 116, + Constructor = 117, + GetAccessor = 118, + SetAccessor = 119, + CallSignature = 120, + ConstructSignature = 121, + IndexSignature = 122, + TypeReference = 123, + TypeQuery = 124, + TypeLiteral = 125, + ArrayType = 126, + ArrayLiteral = 127, + ObjectLiteral = 128, + PropertyAssignment = 129, + PropertyAccess = 130, + IndexedAccess = 131, + CallExpression = 132, + NewExpression = 133, + TypeAssertion = 134, + ParenExpression = 135, + FunctionExpression = 136, + ArrowFunction = 137, + PrefixOperator = 138, + PostfixOperator = 139, + BinaryExpression = 140, + ConditionalExpression = 141, + OmittedExpression = 142, + Block = 143, + VariableStatement = 144, + EmptyStatement = 145, + ExpressionStatement = 146, + IfStatement = 147, + DoStatement = 148, + WhileStatement = 149, + ForStatement = 150, + ForInStatement = 151, + ContinueStatement = 152, + BreakStatement = 153, + ReturnStatement = 154, + WithStatement = 155, + SwitchStatement = 156, + CaseClause = 157, + DefaultClause = 158, + LabelledStatement = 159, + ThrowStatement = 160, + TryStatement = 161, + TryBlock = 162, + CatchBlock = 163, + FinallyBlock = 164, + DebuggerStatement = 165, + VariableDeclaration = 166, + FunctionDeclaration = 167, + FunctionBlock = 168, + ClassDeclaration = 169, + InterfaceDeclaration = 170, + EnumDeclaration = 171, + ModuleDeclaration = 172, + ModuleBlock = 173, + ImportDeclaration = 174, + ExportAssignment = 175, + EnumMember = 176, + SourceFile = 177, + Program = 178, + SyntaxList = 179, + Count = 180, + FirstAssignment, + LastAssignment, + FirstReservedWord, + LastReservedWord, + FirstKeyword, + LastKeyword, + FirstFutureReservedWord, + LastFutureReservedWord, + FirstTypeNode, + LastTypeNode, + FirstPunctuation, + LastPunctuation, + } + enum NodeFlags { + Export = 1, + Ambient = 2, + QuestionMark = 4, + Rest = 8, + Public = 16, + Private = 32, + Static = 64, + MultiLine = 128, + Synthetic = 256, + DeclarationFile = 512, + Modifier, + } + interface Node extends TextRange { + kind: SyntaxKind; + flags: NodeFlags; + id?: number; + parent?: Node; + symbol?: Symbol; + locals?: SymbolTable; + nextContainer?: Node; + localSymbol?: Symbol; + } + interface NodeArray extends Array, TextRange { + } + interface Identifier extends Node { + text: string; + } + interface QualifiedName extends Node { + left: EntityName; + right: Identifier; + } + interface EntityName extends Node { + } + interface ParsedSignature { + typeParameters?: NodeArray; + parameters: NodeArray; + type?: TypeNode; + } + interface Declaration extends Node { + name?: Identifier; + } + interface TypeParameterDeclaration extends Declaration { + constraint?: TypeNode; + } + interface SignatureDeclaration extends Declaration, ParsedSignature { + } + interface VariableDeclaration extends Declaration { + type?: TypeNode; + initializer?: Expression; + } + interface PropertyDeclaration extends VariableDeclaration { + } + interface ParameterDeclaration extends VariableDeclaration { + } + interface FunctionDeclaration extends Declaration, ParsedSignature { + body?: Node; + } + interface MethodDeclaration extends FunctionDeclaration { + } + interface ConstructorDeclaration extends FunctionDeclaration { + } + interface AccessorDeclaration extends FunctionDeclaration { + } + interface TypeNode extends Node { + } + interface TypeReferenceNode extends TypeNode { + typeName: EntityName; + typeArguments?: NodeArray; + } + interface TypeQueryNode extends TypeNode { + exprName: EntityName; + } + interface TypeLiteralNode extends TypeNode { + members: NodeArray; + } + interface ArrayTypeNode extends TypeNode { + elementType: TypeNode; + } + interface StringLiteralTypeNode extends TypeNode { + text: string; + } + interface Expression extends Node { + contextualType?: Type; + } + interface UnaryExpression extends Expression { + operator: SyntaxKind; + operand: Expression; + } + interface BinaryExpression extends Expression { + left: Expression; + operator: SyntaxKind; + right: Expression; + } + interface ConditionalExpression extends Expression { + condition: Expression; + whenTrue: Expression; + whenFalse: Expression; + } + interface FunctionExpression extends Expression, FunctionDeclaration { + body: Node; + } + interface LiteralExpression extends Expression { + text: string; + } + interface ParenExpression extends Expression { + expression: Expression; + } + interface ArrayLiteral extends Expression { + elements: NodeArray; + } + interface ObjectLiteral extends Expression { + properties: NodeArray; + } + interface PropertyAccess extends Expression { + left: Expression; + right: Identifier; + } + interface IndexedAccess extends Expression { + object: Expression; + index: Expression; + } + interface CallExpression extends Expression { + func: Expression; + typeArguments?: NodeArray; + arguments: NodeArray; + } + interface NewExpression extends CallExpression { + } + interface TypeAssertion extends Expression { + type: TypeNode; + operand: Expression; + } + interface Statement extends Node { + } + interface Block extends Statement { + statements: NodeArray; + } + interface VariableStatement extends Statement { + declarations: NodeArray; + } + interface ExpressionStatement extends Statement { + expression: Expression; + } + interface IfStatement extends Statement { + expression: Expression; + thenStatement: Statement; + elseStatement?: Statement; + } + interface IterationStatement extends Statement { + statement: Statement; + } + interface DoStatement extends IterationStatement { + expression: Expression; + } + interface WhileStatement extends IterationStatement { + expression: Expression; + } + interface ForStatement extends IterationStatement { + declarations?: NodeArray; + initializer?: Expression; + condition?: Expression; + iterator?: Expression; + } + interface ForInStatement extends IterationStatement { + declaration?: VariableDeclaration; + variable?: Expression; + expression: Expression; + } + interface BreakOrContinueStatement extends Statement { + label?: Identifier; + } + interface ReturnStatement extends Statement { + expression?: Expression; + } + interface WithStatement extends Statement { + expression: Expression; + statement: Statement; + } + interface SwitchStatement extends Statement { + expression: Expression; + clauses: NodeArray; + } + interface CaseOrDefaultClause extends Node { + expression?: Expression; + statements: NodeArray; + } + interface LabelledStatement extends Statement { + label: Identifier; + statement: Statement; + } + interface ThrowStatement extends Statement { + expression: Expression; + } + interface TryStatement extends Statement { + tryBlock: Block; + catchBlock?: CatchBlock; + finallyBlock?: Block; + } + interface CatchBlock extends Block { + variable: Identifier; + } + interface ClassDeclaration extends Declaration { + typeParameters?: NodeArray; + baseType?: TypeReferenceNode; + implementedTypes?: NodeArray; + members: NodeArray; + } + interface InterfaceDeclaration extends Declaration { + typeParameters?: NodeArray; + baseTypes?: NodeArray; + members: NodeArray; + } + interface EnumMember extends Declaration { + initializer?: Expression; + } + interface EnumDeclaration extends Declaration { + members: NodeArray; + } + interface ModuleDeclaration extends Declaration { + body: Node; + } + interface ImportDeclaration extends Declaration { + entityName?: EntityName; + externalModuleName?: LiteralExpression; + } + interface ExportAssignment extends Statement { + exportName: Identifier; + } + interface FileReference extends TextRange { + filename: string; + } + interface SourceFile extends Block { + filename: string; + text: string; + getLineAndCharacterFromPosition(position: number): { + line: number; + character: number; + }; + amdDependencies: string[]; + referencedFiles: FileReference[]; + syntacticErrors: Diagnostic[]; + semanticErrors: Diagnostic[]; + hasNoDefaultLib: boolean; + externalModuleIndicator: Node; + nodeCount: number; + identifierCount: number; + symbolCount: number; + isOpen: boolean; + version: number; + languageVersion: ScriptTarget; + } + interface Program { + getSourceFile(filename: string): SourceFile; + getSourceFiles(): SourceFile[]; + getCompilerOptions(): CompilerOptions; + getCompilerHost(): CompilerHost; + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getGlobalDiagnostics(): Diagnostic[]; + getTypeChecker(fullTypeCheckMode: boolean): TypeChecker; + getCommonSourceDirectory(): string; + } + interface SourceMapSpan { + emittedLine: number; + emittedColumn: number; + sourceLine: number; + sourceColumn: number; + nameIndex?: number; + sourceIndex: number; + } + interface SourceMapData { + sourceMapFilePath: string; + jsSourceMappingURL: string; + sourceMapFile: string; + sourceMapSourceRoot: string; + sourceMapSources: string[]; + inputSourceFileNames: string[]; + sourceMapNames?: string[]; + sourceMapMappings: string; + sourceMapDecodedMappings: SourceMapSpan[]; + } + interface EmitResult { + errors: Diagnostic[]; + sourceMaps: SourceMapData[]; + } + interface TypeChecker { + getProgram(): Program; + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getGlobalDiagnostics(): Diagnostic[]; + getNodeCount(): number; + getIdentifierCount(): number; + getSymbolCount(): number; + getTypeCount(): number; + checkProgram(): void; + emitFiles(): EmitResult; + getParentOfSymbol(symbol: Symbol): Symbol; + getTypeOfSymbol(symbol: Symbol): Type; + getPropertiesOfType(type: Type): Symbol[]; + getPropertyOfType(type: Type, propetyName: string): Symbol; + getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; + getIndexTypeOfType(type: Type, kind: IndexKind): Type; + getReturnTypeOfSignature(signature: Signature): Type; + getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolInfo(node: Node): Symbol; + getTypeOfNode(node: Node): Type; + getApparentType(type: Type): ApparentType; + typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; + symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; + getAugmentedPropertiesOfApparentType(type: Type): Symbol[]; + } + interface TextWriter { + write(s: string): void; + writeSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void; + writeLine(): void; + increaseIndent(): void; + decreaseIndent(): void; + getText(): string; + } + enum TypeFormatFlags { + None = 0, + WriteArrayAsGenericType = 1, + UseTypeOfFunction = 2, + } + enum SymbolAccessibility { + Accessible = 0, + NotAccessible = 1, + CannotBeNamed = 2, + } + interface SymbolAccessiblityResult { + accessibility: SymbolAccessibility; + errorSymbolName?: string; + errorModuleName?: string; + aliasesToMakeVisible?: ImportDeclaration[]; + } + interface EmitResolver { + getProgram(): Program; + getLocalNameOfContainer(container: Declaration): string; + getExpressionNamePrefix(node: Identifier): string; + getPropertyAccessSubstitution(node: PropertyAccess): string; + getExportAssignmentName(node: SourceFile): string; + isReferencedImportDeclaration(node: ImportDeclaration): boolean; + isTopLevelValueImportedViaEntityName(node: ImportDeclaration): boolean; + getNodeCheckFlags(node: Node): NodeCheckFlags; + getEnumMemberValue(node: EnumMember): number; + shouldEmitDeclarations(): boolean; + isDeclarationVisible(node: Declaration): boolean; + isImplementationOfOverload(node: FunctionDeclaration): boolean; + writeTypeAtLocation(location: Node, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: TextWriter): void; + writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: TextWriter): void; + writeSymbol(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags, writer: TextWriter): void; + isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): SymbolAccessiblityResult; + isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName: EntityName): SymbolAccessiblityResult; + } + enum SymbolFlags { + Variable = 1, + Property = 2, + EnumMember = 4, + Function = 8, + Class = 16, + Interface = 32, + Enum = 64, + ValueModule = 128, + NamespaceModule = 256, + TypeLiteral = 512, + ObjectLiteral = 1024, + Method = 2048, + Constructor = 4096, + GetAccessor = 8192, + SetAccessor = 16384, + CallSignature = 32768, + ConstructSignature = 65536, + IndexSignature = 131072, + TypeParameter = 262144, + ExportValue = 524288, + ExportType = 1048576, + ExportNamespace = 2097152, + Import = 4194304, + Instantiated = 8388608, + Merged = 16777216, + Transient = 33554432, + Prototype = 67108864, + Value, + Type, + Namespace, + Module, + Accessor, + Signature, + ParameterExcludes, + VariableExcludes, + PropertyExcludes, + EnumMemberExcludes, + FunctionExcludes, + ClassExcludes, + InterfaceExcludes, + EnumExcludes, + ValueModuleExcludes, + NamespaceModuleExcludes = 0, + MethodExcludes, + GetAccessorExcludes, + SetAccessorExcludes, + TypeParameterExcludes, + ImportExcludes, + ModuleMember, + ExportHasLocal, + HasLocals, + HasExports, + HasMembers, + IsContainer, + PropertyOrAccessor, + Export, + } + interface Symbol { + flags: SymbolFlags; + name: string; + id?: number; + mergeId?: number; + declarations?: Declaration[]; + parent?: Symbol; + members?: SymbolTable; + exports?: SymbolTable; + exportSymbol?: Symbol; + valueDeclaration?: Declaration; + } + interface SymbolLinks { + target?: Symbol; + type?: Type; + declaredType?: Type; + mapper?: TypeMapper; + referenced?: boolean; + exportAssignSymbol?: Symbol; + } + interface TransientSymbol extends Symbol, SymbolLinks { + } + interface SymbolTable { + [index: string]: Symbol; + } + enum NodeCheckFlags { + TypeChecked = 1, + LexicalThis = 2, + CaptureThis = 4, + EmitExtends = 8, + SuperInstance = 16, + SuperStatic = 32, + ContextChecked = 64, + } + interface NodeLinks { + resolvedType?: Type; + resolvedSignature?: Signature; + resolvedSymbol?: Symbol; + flags?: NodeCheckFlags; + enumMemberValue?: number; + isIllegalTypeReferenceInConstraint?: boolean; + isVisible?: boolean; + localModuleName?: string; + } + enum TypeFlags { + Any = 1, + String = 2, + Number = 4, + Boolean = 8, + Void = 16, + Undefined = 32, + Null = 64, + Enum = 128, + StringLiteral = 256, + TypeParameter = 512, + Class = 1024, + Interface = 2048, + Reference = 4096, + Anonymous = 8192, + FromSignature = 16384, + Intrinsic, + StringLike, + NumberLike, + ObjectType, + } + interface Type { + flags: TypeFlags; + id: number; + symbol?: Symbol; + } + interface IntrinsicType extends Type { + intrinsicName: string; + } + interface StringLiteralType extends Type { + text: string; + } + interface ObjectType extends Type { + } + interface ApparentType extends Type { + _apparentTypeBrand: any; + } + interface InterfaceType extends ObjectType { + typeParameters: TypeParameter[]; + baseTypes: ObjectType[]; + declaredProperties: Symbol[]; + declaredCallSignatures: Signature[]; + declaredConstructSignatures: Signature[]; + declaredStringIndexType: Type; + declaredNumberIndexType: Type; + } + interface TypeReference extends ObjectType { + target: GenericType; + typeArguments: Type[]; + } + interface GenericType extends InterfaceType, TypeReference { + instantiations: Map; + openReferenceTargets: GenericType[]; + openReferenceChecks: Map; + } + interface ResolvedObjectType extends ObjectType { + members: SymbolTable; + properties: Symbol[]; + callSignatures: Signature[]; + constructSignatures: Signature[]; + stringIndexType: Type; + numberIndexType: Type; + } + interface TypeParameter extends Type { + constraint: Type; + target?: TypeParameter; + mapper?: TypeMapper; + } + enum SignatureKind { + Call = 0, + Construct = 1, + } + interface Signature { + declaration: SignatureDeclaration; + typeParameters: TypeParameter[]; + parameters: Symbol[]; + resolvedReturnType: Type; + minArgumentCount: number; + hasRestParameter: boolean; + hasStringLiterals: boolean; + target?: Signature; + mapper?: TypeMapper; + erasedSignatureCache?: Signature; + isolatedSignatureType?: ObjectType; + } + enum IndexKind { + String = 0, + Number = 1, + } + interface TypeMapper { + (t: Type): Type; + } + interface InferenceContext { + typeParameters: TypeParameter[]; + inferences: Type[][]; + inferredTypes: Type[]; + } + interface DiagnosticMessage { + key: string; + category: DiagnosticCategory; + code: number; + } + interface DiagnosticMessageChain { + messageText: string; + category: DiagnosticCategory; + code: number; + next?: DiagnosticMessageChain; + } + interface Diagnostic { + file: SourceFile; + start: number; + length: number; + messageText: string; + category: DiagnosticCategory; + code: number; + } + enum DiagnosticCategory { + Warning = 0, + Error = 1, + Message = 2, + } + interface CompilerOptions { + charset?: string; + codepage?: number; + declaration?: boolean; + diagnostics?: boolean; + emitBOM?: boolean; + help?: boolean; + locale?: string; + mapRoot?: string; + module?: ModuleKind; + noImplicitAny?: boolean; + noLib?: boolean; + noLibCheck?: boolean; + noResolve?: boolean; + out?: string; + outDir?: string; + removeComments?: boolean; + sourceMap?: boolean; + sourceRoot?: string; + target?: ScriptTarget; + version?: boolean; + watch?: boolean; + [option: string]: any; + } + enum ModuleKind { + None = 0, + CommonJS = 1, + AMD = 2, + } + enum ScriptTarget { + ES3 = 0, + ES5 = 1, + } + interface ParsedCommandLine { + options: CompilerOptions; + filenames: string[]; + errors: Diagnostic[]; + } + interface CommandLineOption { + name: string; + type: any; + shortName?: string; + description?: DiagnosticMessage; + paramName?: DiagnosticMessage; + error?: DiagnosticMessage; + } + enum CharacterCodes { + nullCharacter = 0, + maxAsciiCharacter = 127, + lineFeed = 10, + carriageReturn = 13, + lineSeparator = 8232, + paragraphSeparator = 8233, + nextLine = 133, + space = 32, + nonBreakingSpace = 160, + enQuad = 8192, + emQuad = 8193, + enSpace = 8194, + emSpace = 8195, + threePerEmSpace = 8196, + fourPerEmSpace = 8197, + sixPerEmSpace = 8198, + figureSpace = 8199, + punctuationSpace = 8200, + thinSpace = 8201, + hairSpace = 8202, + zeroWidthSpace = 8203, + narrowNoBreakSpace = 8239, + ideographicSpace = 12288, + mathematicalSpace = 8287, + ogham = 5760, + _ = 95, + $ = 36, + _0 = 48, + _1 = 49, + _2 = 50, + _3 = 51, + _4 = 52, + _5 = 53, + _6 = 54, + _7 = 55, + _8 = 56, + _9 = 57, + a = 97, + b = 98, + c = 99, + d = 100, + e = 101, + f = 102, + g = 103, + h = 104, + i = 105, + j = 106, + k = 107, + l = 108, + m = 109, + n = 110, + o = 111, + p = 112, + q = 113, + r = 114, + s = 115, + t = 116, + u = 117, + v = 118, + w = 119, + x = 120, + y = 121, + z = 122, + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + ampersand = 38, + asterisk = 42, + at = 64, + backslash = 92, + bar = 124, + caret = 94, + closeBrace = 125, + closeBracket = 93, + closeParen = 41, + colon = 58, + comma = 44, + dot = 46, + doubleQuote = 34, + equals = 61, + exclamation = 33, + greaterThan = 62, + lessThan = 60, + minus = 45, + openBrace = 123, + openBracket = 91, + openParen = 40, + percent = 37, + plus = 43, + question = 63, + semicolon = 59, + singleQuote = 39, + slash = 47, + tilde = 126, + backspace = 8, + formFeed = 12, + byteOrderMark = 65279, + tab = 9, + verticalTab = 11, + } + interface CancellationToken { + isCancellationRequested(): boolean; + } + interface CompilerHost { + getSourceFile(filename: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getDefaultLibFilename(): string; + getCancellationToken?(): CancellationToken; + writeFile(filename: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + getCurrentDirectory(): string; + getCanonicalFileName(fileName: string): string; + useCaseSensitiveFileNames(): boolean; + getNewLine(): string; + } +} +declare module ts { + interface Map { + [index: string]: T; + } + interface StringSet extends Map { + } + function forEach(array: T[], callback: (element: T) => U): U; + function contains(array: T[], value: T): boolean; + function indexOf(array: T[], value: T): number; + function filter(array: T[], f: (x: T) => boolean): T[]; + function map(array: T[], f: (x: T) => U): U[]; + function concatenate(array1: T[], array2: T[]): T[]; + function sum(array: any[], prop: string): number; + function binarySearch(array: number[], value: number): number; + function hasProperty(map: Map, key: string): boolean; + function getProperty(map: Map, key: string): T; + function isEmpty(map: Map): boolean; + function clone(object: T): T; + function forEachValue(map: Map, callback: (value: T) => U): U; + function forEachKey(map: Map, callback: (key: string) => U): U; + function lookUp(map: Map, key: string): T; + function mapToArray(map: Map): T[]; + function arrayToMap(array: T[], makeKey: (value: T) => string): Map; + var localizedDiagnosticMessages: Map; + function createFileDiagnostic(file: SourceFile, start: number, length: number, message: DiagnosticMessage, ...args: any[]): Diagnostic; + function createFileDiagnostic(file: SourceFile, start: number, length: number, message: DiagnosticMessage): Diagnostic; + function createCompilerDiagnostic(message: DiagnosticMessage, ...args: any[]): Diagnostic; + function createCompilerDiagnostic(message: DiagnosticMessage): Diagnostic; + function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; + function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage): DiagnosticMessageChain; + function flattenDiagnosticChain(file: SourceFile, start: number, length: number, diagnosticChain: DiagnosticMessageChain, newLine: string): Diagnostic; + function compareValues(a: T, b: T): number; + function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): number; + function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; + function normalizeSlashes(path: string): string; + function getRootLength(path: string): number; + var directorySeparator: string; + function normalizePath(path: string): string; + function getDirectoryPath(path: string): string; + function isUrl(path: string): boolean; + function isRootedDiskPath(path: string): boolean; + function getNormalizedPathComponents(path: string, currentDirectory: string): string[]; + function getNormalizedPathFromPathCompoments(pathComponents: string[]): string; + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, isAbsolutePathAnUrl: boolean): string; + function getBaseFilename(path: string): string; + function combinePaths(path1: string, path2: string): string; + function fileExtensionIs(path: string, extension: string): boolean; + function getCanonicalFileName(fileName: string): string; + interface ObjectAllocator { + getNodeConstructor(kind: SyntaxKind): new () => Node; + getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; + getTypeConstructor(): new (checker: TypeChecker, flags: TypeFlags) => Type; + getSignatureConstructor(): new (checker: TypeChecker) => Signature; + } + var objectAllocator: ObjectAllocator; + enum AssertionLevel { + None = 0, + Normal = 1, + Aggressive = 2, + VeryAggressive = 3, + } + module Debug { + function shouldAssert(level: AssertionLevel): boolean; + function assert(expression: any, message?: string, verboseDebugInfo?: () => string): void; + function fail(message?: string): void; + } +} +interface System { + args: string[]; + newLine: string; + useCaseSensitiveFileNames: boolean; + write(s: string): void; + readFile(fileName: string, encoding?: string): string; + writeFile(fileName: string, data: string, writeByteOrderMark?: boolean): void; + watchFile?(fileName: string, callback: (fileName: string) => void): FileWatcher; + resolvePath(path: string): string; + fileExists(path: string): boolean; + directoryExists(path: string): boolean; + createDirectory(directoryName: string): void; + getExecutingFilePath(): string; + getCurrentDirectory(): string; + getMemoryUsage?(): number; + exit(exitCode?: number): void; +} +interface FileWatcher { + close(): void; +} +declare var require: any; +declare var module: any; +declare var process: any; +declare var global: any; +declare var sys: System; +declare module ts { + function getNodeConstructor(kind: SyntaxKind): new () => Node; + function getModuleNameFromFilename(filename: string): string; + function getSourceFileOfNode(node: Node): SourceFile; + function nodePosToString(node: Node): string; + function getStartPosOfNode(node: Node): number; + function getTokenPosOfNode(node: Node): number; + function getSourceTextOfNodeFromSourceText(sourceText: string, node: Node): string; + function getSourceTextOfNode(node: Node): string; + function escapeIdentifier(identifier: string): string; + function unescapeIdentifier(identifier: string): string; + function identifierToString(identifier: Identifier): string; + function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): Diagnostic; + function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain, newLine: string): Diagnostic; + function getErrorSpanForNode(node: Node): Node; + function isExternalModule(file: SourceFile): boolean; + function isPrologueDirective(node: Node): boolean; + function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodes?: (nodes: Node[]) => T): T; + function hasRestParameters(s: SignatureDeclaration): boolean; + function isInAmbientContext(node: Node): boolean; + function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version?: number, isOpen?: boolean): SourceFile; + function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; +} +declare module ts { + function isInstantiated(node: Node): boolean; + function bindSourceFile(file: SourceFile): void; +} +declare module ts { + function emitFiles(resolver: EmitResolver): EmitResult; +} +declare module ts { + function createTypeChecker(program: Program, fullTypeCheck: boolean): TypeChecker; +} declare module TypeScript { var DiagnosticCode: { error_TS_0_1: string; @@ -11,14 +3075,14 @@ declare module TypeScript { Identifier_expected_0_is_a_keyword: string; Automatic_semicolon_insertion_not_allowed: string; Unexpected_token_0_expected: string; - Trailing_separator_not_allowed: string; + Trailing_comma_not_allowed: string; AsteriskSlash_expected: string; public_or_private_modifier_must_precede_static: string; Unexpected_token: string; Catch_clause_parameter_cannot_have_a_type_annotation: string; - Rest_parameter_must_be_last_in_list: string; + A_rest_parameter_must_be_last_in_a_parameter_list: string; Parameter_cannot_have_question_mark_and_initializer: string; - Required_parameter_cannot_follow_optional_parameter: string; + A_required_parameter_cannot_follow_an_optional_parameter: string; Index_signatures_cannot_have_rest_parameters: string; Index_signature_parameter_cannot_have_accessibility_modifiers: string; Index_signature_parameter_cannot_have_a_question_mark: string; @@ -38,33 +3102,23 @@ declare module TypeScript { super_invocation_cannot_have_type_arguments: string; Only_ambient_modules_can_use_quoted_names: string; Statements_are_not_allowed_in_ambient_contexts: string; - Implementations_are_not_allowed_in_ambient_contexts: string; - declare_modifier_not_allowed_for_code_already_in_an_ambient_context: string; + A_function_implementation_cannot_be_declared_in_an_ambient_context: string; + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: string; Initializers_are_not_allowed_in_ambient_contexts: string; - Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration: string; - Function_implementation_expected: string; - Constructor_implementation_expected: string; - Function_overload_name_must_be_0: string; _0_modifier_cannot_appear_on_a_module_element: string; - declare_modifier_cannot_appear_on_an_interface_declaration: string; - declare_modifier_required_for_top_level_element: string; - Rest_parameter_cannot_be_optional: string; - Rest_parameter_cannot_have_an_initializer: string; - set_accessor_must_have_one_and_only_one_parameter: string; + A_declare_modifier_cannot_be_used_with_an_interface_declaration: string; + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: string; + A_rest_parameter_cannot_be_optional: string; + A_rest_parameter_cannot_have_an_initializer: string; + set_accessor_must_have_exactly_one_parameter: string; set_accessor_parameter_cannot_be_optional: string; set_accessor_parameter_cannot_have_an_initializer: string; set_accessor_cannot_have_rest_parameter: string; get_accessor_cannot_have_parameters: string; Modifiers_cannot_appear_here: string; Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: string; - Class_name_cannot_be_0: string; - Interface_name_cannot_be_0: string; - Enum_name_cannot_be_0: string; - Module_name_cannot_be_0: string; Enum_member_must_have_initializer: string; Export_assignment_cannot_be_used_in_internal_modules: string; - Export_assignment_not_allowed_in_module_with_exported_element: string; - Module_cannot_have_multiple_export_assignments: string; Ambient_enum_elements_can_only_have_integer_literal_initializers: string; module_class_interface_enum_import_or_statement: string; constructor_function_accessor_or_variable: string; @@ -78,10 +3132,7 @@ declare module TypeScript { parameter: string; type: string; type_parameter: string; - declare_modifier_not_allowed_on_import_declaration: string; - Function_overload_must_be_static: string; - Function_overload_must_not_be_static: string; - Parameter_property_declarations_cannot_be_used_in_a_constructor_overload: string; + A_declare_modifier_cannot_be_used_with_an_import_declaration: string; Invalid_reference_directive_syntax: string; Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: string; Accessors_are_not_allowed_in_ambient_contexts: string; @@ -90,6 +3141,23 @@ declare module TypeScript { Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: string; Type_parameters_cannot_appear_on_a_constructor_declaration: string; Type_annotation_cannot_appear_on_a_constructor_declaration: string; + Type_parameters_cannot_appear_on_an_accessor: string; + Type_annotation_cannot_appear_on_a_set_accessor: string; + Index_signature_must_have_exactly_one_parameter: string; + _0_list_cannot_be_empty: string; + variable_declaration: string; + type_argument: string; + Invalid_use_of_0_in_strict_mode: string; + with_statements_are_not_allowed_in_strict_mode: string; + delete_cannot_be_called_on_an_identifier_in_strict_mode: string; + Invalid_left_hand_side_in_for_in_statement: string; + continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: string; + break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: string; + Jump_target_not_found: string; + Jump_target_cannot_cross_function_boundary: string; + return_statement_must_be_contained_within_a_function_body: string; + Expression_expected: string; + Type_expected: string; Duplicate_identifier_0: string; The_name_0_does_not_exist_in_the_current_scope: string; The_name_0_does_not_refer_to_a_value: string; @@ -98,13 +3166,11 @@ declare module TypeScript { Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: string; Value_of_type_0_is_not_callable: string; Value_of_type_0_is_not_newable: string; - Value_of_type_0_is_not_indexable_by_type_1: string; + An_index_expression_argument_must_be_string_number_or_any: string; Operator_0_cannot_be_applied_to_types_1_and_2: string; - Operator_0_cannot_be_applied_to_types_1_and_2_3: string; - Cannot_convert_0_to_1: string; - Cannot_convert_0_to_1_NL_2: string; + Type_0_is_not_assignable_to_type_1: string; + Type_0_is_not_assignable_to_type_1_NL_2: string; Expected_var_class_interface_or_module: string; - Operator_0_cannot_be_applied_to_type_1: string; Getter_0_already_declared: string; Setter_0_already_declared: string; Exported_class_0_extends_private_class_1: string; @@ -160,45 +3226,44 @@ declare module TypeScript { new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: string; A_parameter_list_must_follow_a_generic_type_argument_list_expected: string; Multiple_constructor_implementations_are_not_allowed: string; - Unable_to_resolve_external_module_0: string; + Cannot_find_external_module_0: string; Module_cannot_be_aliased_to_a_non_module_type: string; A_class_may_only_extend_another_class: string; A_class_may_only_implement_another_class_or_interface: string; - An_interface_may_only_extend_another_class_or_interface: string; + An_interface_may_only_extend_a_class_or_another_interface: string; Unable_to_resolve_type: string; Unable_to_resolve_type_of_0: string; Unable_to_resolve_type_parameter_constraint: string; Type_parameter_constraint_cannot_be_a_primitive_type: string; Supplied_parameters_do_not_match_any_signature_of_call_target: string; Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: string; - Invalid_new_expression: string; - Call_signatures_used_in_a_new_expression_must_have_a_void_return_type: string; + Cannot_use_new_with_an_expression_whose_type_lacks_a_signature: string; + Only_a_void_function_can_be_called_with_the_new_keyword: string; Could_not_select_overload_for_new_expression: string; - Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2: string; + Type_0_does_not_satisfy_the_constraint_1: string; Could_not_select_overload_for_call_expression: string; Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: string; Calls_to_super_are_only_valid_inside_a_class: string; Generic_type_0_requires_1_type_argument_s: string; Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: string; Could_not_find_enclosing_symbol_for_dotted_name_0: string; - The_property_0_does_not_exist_on_value_of_type_1: string; - Could_not_find_symbol_0: string; + Property_0_does_not_exist_on_value_of_type_1: string; + Cannot_find_name_0: string; get_and_set_accessor_must_have_the_same_type: string; this_cannot_be_referenced_in_current_location: string; Static_members_cannot_reference_class_type_parameters: string; - Class_0_is_recursively_referenced_as_a_base_type_of_itself: string; - Interface_0_is_recursively_referenced_as_a_base_type_of_itself: string; + Type_0_recursively_references_itself_as_a_base_type: string; super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: string; - super_cannot_be_referenced_in_non_derived_classes: string; + super_can_only_be_referenced_in_a_derived_class: string; A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: string; Constructors_for_derived_classes_must_contain_a_super_call: string; Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: string; _0_1_is_inaccessible: string; - this_cannot_be_referenced_within_module_bodies: string; + this_cannot_be_referenced_in_a_module_body: string; Invalid_expression_types_not_known_to_support_the_addition_operator: string; The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: string; The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: string; - The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type: string; + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: string; Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: string; Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: string; The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: string; @@ -209,7 +3274,7 @@ declare module TypeScript { Setters_cannot_return_a_value: string; Tried_to_query_type_of_uninitialized_module_0: string; Tried_to_set_variable_type_to_uninitialized_module_type_0: string; - Type_0_does_not_have_type_parameters: string; + Type_0_is_not_generic: string; Getters_must_return_a_value: string; Getter_and_setter_accessors_do_not_agree_in_visibility: string; Invalid_left_hand_side_of_assignment_expression: string; @@ -222,14 +3287,10 @@ declare module TypeScript { Class_0_declares_interface_1_but_does_not_implement_it_NL_2: string; Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: string; The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: string; - this_cannot_be_referenced_in_static_initializers_in_a_class_body: string; + this_cannot_be_referenced_in_a_static_property_initializer: string; Class_0_cannot_extend_class_1_NL_2: string; Interface_0_cannot_extend_class_1_NL_2: string; Interface_0_cannot_extend_interface_1_NL_2: string; - Duplicate_overload_signature_for_0: string; - Duplicate_constructor_overload_signature: string; - Duplicate_overload_call_signature: string; - Duplicate_overload_construct_signature: string; Overload_signature_is_not_compatible_with_function_definition: string; Overload_signature_is_not_compatible_with_function_definition_NL_0: string; Overload_signatures_must_all_be_public_or_private: string; @@ -242,7 +3303,7 @@ declare module TypeScript { Untyped_function_calls_may_not_accept_type_arguments: string; Non_generic_functions_may_not_accept_type_arguments: string; A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: string; - Rest_parameters_must_be_array_types: string; + A_rest_parameter_must_be_of_an_array_type: string; Overload_signature_implementation_cannot_use_specialized_type: string; Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: string; Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: string; @@ -253,12 +3314,10 @@ declare module TypeScript { All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: string; All_named_properties_must_be_assignable_to_string_indexer_type_0: string; All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: string; - Generic_type_references_must_include_all_type_arguments: string; - Default_arguments_are_only_allowed_in_implementation: string; - Overloads_cannot_differ_only_by_return_type: string; + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: string; Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: string; Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: string; - Could_not_find_symbol_0_in_module_1: string; + Module_0_has_no_exported_member_1: string; Unable_to_resolve_module_reference_0: string; Could_not_find_module_0_in_module_1: string; Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: string; @@ -278,13 +3337,9 @@ declare module TypeScript { Ambient_external_module_declaration_must_be_defined_in_global_context: string; Ambient_external_module_declaration_cannot_specify_relative_module_name: string; Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: string; - Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions: string; + No_best_common_type_exists_among_return_expressions: string; Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: string; Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: string; - continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: string; - break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: string; - Jump_target_not_found: string; - Jump_target_cannot_cross_function_boundary: string; Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: string; Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: string; Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: string; @@ -306,8 +3361,8 @@ declare module TypeScript { TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: string; Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: string; Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: string; - Type_of_conditional_0_must_be_identical_to_1_or_2: string; - Type_of_conditional_0_must_be_identical_to_1_2_or_3: string; + No_best_common_type_exists_between_0_and_1: string; + No_best_common_type_exists_between_0_1_and_2: string; Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: string; Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: string; Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: string; @@ -316,6 +3371,20 @@ declare module TypeScript { Duplicate_number_index_signature: string; All_declarations_of_an_interface_must_have_identical_type_parameters: string; Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: string; + Neither_type_0_nor_type_1_is_assignable_to_the_other: string; + Neither_type_0_nor_type_1_is_assignable_to_the_other_NL_2: string; + Duplicate_function_implementation: string; + Function_implementation_expected: string; + Function_overload_name_must_be_0: string; + Constructor_implementation_expected: string; + Class_name_cannot_be_0: string; + Interface_name_cannot_be_0: string; + Enum_name_cannot_be_0: string; + A_module_cannot_have_multiple_export_assignments: string; + Export_assignment_not_allowed_in_module_with_exported_element: string; + A_parameter_property_is_only_allowed_in_a_constructor_implementation: string; + Function_overload_must_be_static: string; + Function_overload_must_not_be_static: string; Type_0_is_missing_property_1_from_type_2: string; Types_of_property_0_of_types_1_and_2_are_incompatible: string; Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: string; @@ -359,7 +3428,7 @@ declare module TypeScript { Types_0_and_1_define_static_property_2_as_private: string; Current_host_does_not_support_0_option: string; ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: string; - Module_code_generation_0_not_supported: string; + Argument_for_0_option_must_be_1_or_2: string; Could_not_find_file_0: string; A_file_cannot_have_a_reference_to_itself: string; Cannot_resolve_referenced_file_0: string; @@ -373,7 +3442,7 @@ declare module TypeScript { Invalid_call_to_up: string; Invalid_call_to_down: string; Base64_value_0_finished_with_a_continuation_bit: string; - Unknown_option_0: string; + Unknown_compiler_option_0: string; Expected_0_arguments_to_message_got_1_instead: string; Expected_the_message_0_to_have_1_arguments_but_it_had_2: string; Could_not_delete_file_0: string; @@ -437,17 +3506,22 @@ declare module TypeScript { Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: string; }; } -declare var require: any; -declare var module: any; +declare module TypeScript { + enum DiagnosticCategory { + Warning = 0, + Error = 1, + Message = 2, + NoPrefix = 3, + } +} +declare module TypeScript { + var diagnosticInformationMap: ts.Map; +} declare module TypeScript { class ArrayUtilities { - static isArray(value: any): boolean; static sequenceEquals(array1: T[], array2: T[], equals: (v1: T, v2: T) => boolean): boolean; static contains(array: T[], value: T): boolean; - static groupBy(array: T[], func: (v: T) => string): any; static distinct(array: T[], equalsFn?: (a: T, b: T) => boolean): T[]; - static min(array: T[], func: (v: T) => number): number; - static max(array: T[], func: (v: T) => number): number; static last(array: T[]): T; static lastOrDefault(array: T[], predicate: (v: T, index: number) => boolean): T; static firstOrDefault(array: T[], func: (v: T, index: number) => boolean): T; @@ -464,32 +3538,6 @@ declare module TypeScript { static indexOf(array: T[], predicate: (v: T) => boolean): number; } } -declare module TypeScript { - interface IBitVector { - valueAt(index: number): boolean; - setValueAt(index: number, value: boolean): void; - release(): void; - } - module BitVector { - function getBitVector(allowUndefinedValues: boolean): IBitVector; - } -} -declare module TypeScript { - interface IBitMatrix { - valueAt(x: number, y: number): boolean; - setValueAt(x: number, y: number, value: boolean): void; - release(): void; - } - module BitMatrix { - function getBitMatrix(allowUndefinedValues: boolean): IBitMatrix; - } -} -declare module TypeScript { - enum Constants { - Max31BitInteger = 1073741823, - Min31BitInteger = -1073741824, - } -} declare module TypeScript { enum AssertionLevel { None = 0, @@ -505,19 +3553,19 @@ declare module TypeScript { } } declare module TypeScript { - var LocalizedDiagnosticMessages: IIndexable; + var LocalizedDiagnosticMessages: ts.Map; class Location { private _fileName; private _lineMap; private _start; private _length; constructor(fileName: string, lineMap: LineMap, start: number, length: number); - public fileName(): string; - public lineMap(): LineMap; - public line(): number; - public character(): number; - public start(): number; - public length(): number; + fileName(): string; + lineMap(): LineMap; + line(): number; + character(): number; + start(): number; + length(): number; static equals(location1: Location, location2: Location): boolean; } class Diagnostic extends Location { @@ -525,14 +3573,14 @@ declare module TypeScript { private _arguments; private _additionalLocations; constructor(fileName: string, lineMap: LineMap, start: number, length: number, diagnosticKey: string, _arguments?: any[], additionalLocations?: Location[]); - public toJSON(key: any): any; - public diagnosticKey(): string; - public arguments(): any[]; - public text(): string; - public message(): string; - public additionalLocations(): Location[]; + toJSON(key: any): any; + diagnosticKey(): string; + arguments(): any[]; + text(): string; + message(): string; + additionalLocations(): Location[]; static equals(diagnostic1: Diagnostic, diagnostic2: Diagnostic): boolean; - public info(): DiagnosticInfo; + info(): DiagnosticInfo; } function newLine(): string; function getLocalizedText(diagnosticKey: string, args: any[]): string; @@ -563,114 +3611,17 @@ declare module TypeScript { static computeSimple31BitCharArrayHashCode(key: number[], start: number, len: number): number; static computeSimple31BitStringHashCode(key: string): number; static computeMurmur2StringHashCode(key: string, seed: number): number; - private static primes; - static getPrime(min: number): number; - static expandPrime(oldSize: number): number; static combine(value: number, currentHash: number): number; } } -declare module TypeScript.Collections { - var DefaultHashTableCapacity: number; - class HashTable { - private hash; - private entries; - private count; - constructor(capacity: number, hash: (k: TKey) => number); - public set(key: TKey, value: TValue): void; - public add(key: TKey, value: TValue): void; - public containsKey(key: TKey): boolean; - public get(key: TKey): TValue; - private computeHashCode(key); - private addOrSet(key, value, throwOnExistingEntry); - private findEntry(key, hashCode); - private addEntry(key, value, hashCode); - private grow(); - } - function createHashTable(capacity?: number, hash?: (k: TKey) => number): HashTable; - function identityHashCode(value: any): number; -} -declare class Enumerator { - public atEnd(): boolean; - public moveNext(): boolean; - public item(): any; - constructor(o: any); -} -declare module process { - var argv: string[]; - var platform: string; - function on(event: string, handler: (arg: any) => void): void; - module stdout { - function write(str: string): any; - function on(event: string, action: () => void): void; - } - module stderr { - function write(str: string): any; - function on(event: string, action: () => void): void; - } - module mainModule { - var filename: string; - } - function exit(exitCode?: number): any; -} -declare var Buffer: new(str: string, encoding?: string) => any; -declare module TypeScript { - var nodeMakeDirectoryTime: number; - var nodeCreateBufferTime: number; - var nodeWriteFileSyncTime: number; - enum ByteOrderMark { - None = 0, - Utf8 = 1, - Utf16BigEndian = 2, - Utf16LittleEndian = 3, - } - class FileInformation { - public contents: string; - public byteOrderMark: ByteOrderMark; - constructor(contents: string, byteOrderMark: ByteOrderMark); - } - interface IEnvironment { - supportsCodePage(): boolean; - readFile(path: string, codepage: number): FileInformation; - writeFile(path: string, contents: string, writeByteOrderMark: boolean): void; - deleteFile(path: string): void; - fileExists(path: string): boolean; - directoryExists(path: string): boolean; - listFiles(path: string, re?: RegExp, options?: { - recursive?: boolean; - }): string[]; - arguments: string[]; - standardOut: ITextWriter; - currentDirectory(): string; - newLine: string; - } - var Environment: IEnvironment; -} -declare module TypeScript { - interface IIndexable { - [s: string]: T; - } -} declare module TypeScript { module IntegerUtilities { function integerDivide(numerator: number, denominator: number): number; function integerMultiplyLow32Bits(n1: number, n2: number): number; - function integerMultiplyHigh32Bits(n1: number, n2: number): number; function isInteger(text: string): boolean; function isHexInteger(text: string): boolean; } } -declare module TypeScript { - interface Iterator { - moveNext(): boolean; - current(): T; - } -} -declare module TypeScript { - interface ILineAndCharacter { - line: number; - character: number; - } -} declare module TypeScript { class LineMap { private _computeLineStarts; @@ -678,18 +3629,18 @@ declare module TypeScript { static empty: LineMap; private _lineStarts; constructor(_computeLineStarts: () => number[], length: number); - public toJSON(key: any): { + toJSON(key: any): { lineStarts: number[]; length: number; }; - public equals(other: LineMap): boolean; - public lineStarts(): number[]; - public lineCount(): number; - public getPosition(line: number, character: number): number; - public getLineNumberFromPosition(position: number): number; - public getLineStartPosition(lineNumber: number): number; - public fillLineAndCharacterFromPosition(position: number, lineAndCharacter: ILineAndCharacter): void; - public getLineAndCharacterFromPosition(position: number): LineAndCharacter; + equals(other: LineMap): boolean; + lineStarts(): number[]; + lineCount(): number; + getPosition(line: number, character: number): number; + getLineNumberFromPosition(position: number): number; + getLineStartPosition(lineNumber: number): number; + fillLineAndCharacterFromPosition(position: number, lineAndCharacter: ILineAndCharacter): void; + getLineAndCharacterFromPosition(position: number): LineAndCharacter; } } declare module TypeScript { @@ -697,61 +3648,18 @@ declare module TypeScript { private _line; private _character; constructor(line: number, character: number); - public line(): number; - public character(): number; - } -} -declare module TypeScript { - class MathPrototype { - static max(a: number, b: number): number; - static min(a: number, b: number): number; + line(): number; + character(): number; } } -declare module TypeScript.Collections { - var DefaultStringTableCapacity: number; - class StringTable { - private entries; - private count; - constructor(capacity: number); - public addCharArray(key: number[], start: number, len: number): string; - private findCharArrayEntry(key, start, len, hashCode); - private addEntry(text, hashCode); - private grow(); - private static textCharArrayEquals(text, array, start, length); - } - var DefaultStringTable: StringTable; -} declare module TypeScript { class StringUtilities { static isString(value: any): boolean; - static fromCharCodeArray(array: number[]): string; static endsWith(string: string, value: string): boolean; static startsWith(string: string, value: string): boolean; - static copyTo(source: string, sourceIndex: number, destination: number[], destinationIndex: number, count: number): void; static repeat(value: string, count: number): string; - static stringEquals(val1: string, val2: string): boolean; - } -} -declare var global: any; -declare module TypeScript { - class Timer { - public startTime: number; - public time: number; - public start(): void; - public end(): void; - } -} -declare module TypeScript { - enum DiagnosticCategory { - Warning = 0, - Error = 1, - Message = 2, - NoPrefix = 3, } } -declare module TypeScript { - var diagnosticInformationMap: IIndexable; -} declare module TypeScript { enum CharacterCodes { nullCharacter = 0, @@ -780,7 +3688,14 @@ declare module TypeScript { _ = 95, $ = 36, _0 = 48, + _1 = 49, + _2 = 50, + _3 = 51, + _4 = 52, + _5 = 53, + _6 = 54, _7 = 55, + _8 = 56, _9 = 57, a = 97, b = 98, @@ -791,6 +3706,7 @@ declare module TypeScript { g = 103, h = 104, i = 105, + j = 106, k = 107, l = 108, m = 109, @@ -808,9 +3724,30 @@ declare module TypeScript { y = 121, z = 122, A = 65, + B = 66, + C = 67, + D = 68, E = 69, F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, X = 88, + Y = 89, Z = 90, ampersand = 38, asterisk = 42, @@ -861,33 +3798,10 @@ declare module TypeScript { declare module TypeScript { interface ISimpleText { length(): number; - copyTo(sourceIndex: number, destination: number[], destinationIndex: number, count: number): void; - substr(start: number, length: number, intern: boolean): string; - subText(span: TextSpan): ISimpleText; + substr(start: number, length: number): string; charCodeAt(index: number): number; lineMap(): LineMap; } - interface IText extends ISimpleText { - lineCount(): number; - lines(): ITextLine[]; - charCodeAt(position: number): number; - getLineFromLineNumber(lineNumber: number): ITextLine; - getLineFromPosition(position: number): ITextLine; - getLineNumberFromPosition(position: number): number; - getLinePosition(position: number): LineAndCharacter; - toString(span?: TextSpan): string; - } -} -declare module TypeScript { - interface ITextLine { - start(): number; - end(): number; - endIncludingLineBreak(): number; - extent(): TextSpan; - extentIncludingLineBreak(): TextSpan; - toString(): string; - lineNumber(): number; - } } declare module TypeScript { module LineMap1 { @@ -896,9 +3810,6 @@ declare module TypeScript { function fromString(text: string): LineMap; } } -declare module TypeScript.TextFactory { - function createText(value: string): IText; -} declare module TypeScript.SimpleText { function fromString(value: string): ISimpleText; function fromScriptSnapshot(scriptSnapshot: IScriptSnapshot): ISimpleText; @@ -914,22 +3825,26 @@ declare module TypeScript.TextUtilities { function isAnyLineBreakCharacter(c: number): boolean; } declare module TypeScript { - class TextSpan { + interface ISpan { + start(): number; + end(): number; + } + class TextSpan implements ISpan { private _start; private _length; constructor(start: number, length: number); - public start(): number; - public length(): number; - public end(): number; - public isEmpty(): boolean; - public containsPosition(position: number): boolean; - public containsTextSpan(span: TextSpan): boolean; - public overlapsWith(span: TextSpan): boolean; - public overlap(span: TextSpan): TextSpan; - public intersectsWithTextSpan(span: TextSpan): boolean; - public intersectsWith(start: number, length: number): boolean; - public intersectsWithPosition(position: number): boolean; - public intersection(span: TextSpan): TextSpan; + start(): number; + length(): number; + end(): number; + isEmpty(): boolean; + containsPosition(position: number): boolean; + containsTextSpan(span: TextSpan): boolean; + overlapsWith(span: TextSpan): boolean; + overlap(span: TextSpan): TextSpan; + intersectsWithTextSpan(span: TextSpan): boolean; + intersectsWith(start: number, length: number): boolean; + intersectsWithPosition(position: number): boolean; + intersection(span: TextSpan): TextSpan; static fromBounds(start: number, end: number): TextSpan; } } @@ -939,127 +3854,43 @@ declare module TypeScript { private _span; private _newLength; constructor(span: TextSpan, newLength: number); - public span(): TextSpan; - public newLength(): number; - public newSpan(): TextSpan; - public isUnchanged(): boolean; - static collapseChangesFromSingleVersion(changes: TextChangeRange[]): TextChangeRange; + span(): TextSpan; + newLength(): number; + newSpan(): TextSpan; + isUnchanged(): boolean; static collapseChangesAcrossMultipleVersions(changes: TextChangeRange[]): TextChangeRange; } } declare module TypeScript { - class CharacterInfo { - static isDecimalDigit(c: number): boolean; - static isOctalDigit(c: number): boolean; - static isHexDigit(c: number): boolean; - static hexValue(c: number): number; - static isWhitespace(ch: number): boolean; - static isLineTerminator(ch: number): boolean; + module CharacterInfo { + function isDecimalDigit(c: number): boolean; + function isOctalDigit(c: number): boolean; + function isHexDigit(c: number): boolean; + function hexValue(c: number): number; + function isWhitespace(ch: number): boolean; + function isLineTerminator(ch: number): boolean; } } declare module TypeScript { enum SyntaxConstants { - TriviaNewLineMask = 1, - TriviaCommentMask = 2, - TriviaFullWidthShift = 2, + None = 0, NodeDataComputed = 1, NodeIncrementallyUnusableMask = 2, NodeParsedInStrictModeMask = 4, NodeFullWidthShift = 3, - IsVariableWidthKeyword = -2147483648, - } -} -declare class FormattingOptions { - public useTabs: boolean; - public spacesPerTab: number; - public indentSpaces: number; - public newLineCharacter: string; - constructor(useTabs: boolean, spacesPerTab: number, indentSpaces: number, newLineCharacter: string); - static defaultOptions: FormattingOptions; -} -declare module TypeScript.Indentation { - function columnForEndOfToken(token: ISyntaxToken, syntaxInformationMap: SyntaxInformationMap, options: FormattingOptions): number; - function columnForStartOfToken(token: ISyntaxToken, syntaxInformationMap: SyntaxInformationMap, options: FormattingOptions): number; - function columnForStartOfFirstTokenInLineContainingToken(token: ISyntaxToken, syntaxInformationMap: SyntaxInformationMap, options: FormattingOptions): number; - function columnForPositionInString(input: string, position: number, options: FormattingOptions): number; - function indentationString(column: number, options: FormattingOptions): string; - function indentationTrivia(column: number, options: FormattingOptions): ISyntaxTrivia; - function firstNonWhitespacePosition(value: string): number; -} -declare module TypeScript { - enum LanguageVersion { - EcmaScript3 = 0, - EcmaScript5 = 1, } } declare module TypeScript { - class ParseOptions { - private _languageVersion; - private _allowAutomaticSemicolonInsertion; - constructor(languageVersion: LanguageVersion, allowAutomaticSemicolonInsertion: boolean); - public toJSON(key: any): { - allowAutomaticSemicolonInsertion: boolean; - }; - public languageVersion(): LanguageVersion; - public allowAutomaticSemicolonInsertion(): boolean; + class FormattingOptions { + useTabs: boolean; + spacesPerTab: number; + indentSpaces: number; + newLineCharacter: string; + constructor(useTabs: boolean, spacesPerTab: number, indentSpaces: number, newLineCharacter: string); + static defaultOptions: FormattingOptions; } } declare module TypeScript { - class PositionedElement { - private _parent; - private _element; - private _fullStart; - constructor(parent: PositionedElement, element: ISyntaxElement, fullStart: number); - static create(parent: PositionedElement, element: ISyntaxElement, fullStart: number): PositionedElement; - public parent(): PositionedElement; - public parentElement(): ISyntaxElement; - public element(): ISyntaxElement; - public kind(): SyntaxKind; - public childIndex(child: ISyntaxElement): number; - public childCount(): number; - public childAt(index: number): PositionedElement; - public childStart(child: ISyntaxElement): number; - public childEnd(child: ISyntaxElement): number; - public childStartAt(index: number): number; - public childEndAt(index: number): number; - public getPositionedChild(child: ISyntaxElement): PositionedElement; - public fullStart(): number; - public fullEnd(): number; - public fullWidth(): number; - public start(): number; - public end(): number; - public root(): PositionedNode; - public containingNode(): PositionedNode; - } - class PositionedNodeOrToken extends PositionedElement { - constructor(parent: PositionedElement, nodeOrToken: ISyntaxNodeOrToken, fullStart: number); - public nodeOrToken(): ISyntaxNodeOrToken; - } - class PositionedNode extends PositionedNodeOrToken { - constructor(parent: PositionedElement, node: SyntaxNode, fullStart: number); - public node(): SyntaxNode; - } - class PositionedToken extends PositionedNodeOrToken { - constructor(parent: PositionedElement, token: ISyntaxToken, fullStart: number); - public token(): ISyntaxToken; - public previousToken(includeSkippedTokens?: boolean): PositionedToken; - public nextToken(includeSkippedTokens?: boolean): PositionedToken; - } - class PositionedList extends PositionedElement { - constructor(parent: PositionedElement, list: ISyntaxList, fullStart: number); - public list(): ISyntaxList; - } - class PositionedSeparatedList extends PositionedElement { - constructor(parent: PositionedElement, list: ISeparatedSyntaxList, fullStart: number); - public list(): ISeparatedSyntaxList; - } - class PositionedSkippedToken extends PositionedToken { - private _parentToken; - constructor(parentToken: PositionedToken, token: ISyntaxToken, fullStart: number); - public parentToken(): PositionedToken; - public previousToken(includeSkippedTokens?: boolean): PositionedToken; - public nextToken(includeSkippedTokens?: boolean): PositionedToken; - } } declare module TypeScript { enum SyntaxKind { @@ -1310,3500 +4141,2472 @@ declare module TypeScript { TypeAnnotation = 244, ExternalModuleReference = 245, ModuleNameModuleReference = 246, - Last = 246, - FirstStandardKeyword = 15, - LastStandardKeyword = 43, - FirstFutureReservedKeyword = 44, - LastFutureReservedKeyword = 50, - FirstFutureReservedStrictKeyword = 51, - LastFutureReservedStrictKeyword = 59, - FirstTypeScriptKeyword = 60, - LastTypeScriptKeyword = 69, - FirstKeyword = 15, - LastKeyword = 69, - FirstToken = 9, - LastToken = 119, - FirstPunctuation = 70, - LastPunctuation = 119, - FirstFixedWidth = 15, - LastFixedWidth = 119, - FirstTrivia = 4, - LastTrivia = 8, + FirstStandardKeyword, + LastStandardKeyword, + FirstFutureReservedKeyword, + LastFutureReservedKeyword, + FirstFutureReservedStrictKeyword, + LastFutureReservedStrictKeyword, + FirstTypeScriptKeyword, + LastTypeScriptKeyword, + FirstKeyword, + LastKeyword, + FirstToken, + LastToken, + FirstPunctuation, + LastPunctuation, + FirstFixedWidth, + LastFixedWidth, + FirstTrivia, + LastTrivia, + FirstNode, + LastNode, + } +} +declare module TypeScript.SyntaxFacts { + function getTokenKind(text: string): SyntaxKind; + function getText(kind: SyntaxKind): string; + function isAnyKeyword(kind: SyntaxKind): boolean; + function isAnyPunctuation(kind: SyntaxKind): boolean; + function isPrefixUnaryExpressionOperatorToken(tokenKind: SyntaxKind): boolean; + function isBinaryExpressionOperatorToken(tokenKind: SyntaxKind): boolean; + function getPrefixUnaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; + function getPostfixUnaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; + function getBinaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; + function getOperatorTokenFromBinaryExpression(tokenKind: SyntaxKind): SyntaxKind; + function isAssignmentOperatorToken(tokenKind: SyntaxKind): boolean; + function isType(kind: SyntaxKind): boolean; +} +declare module TypeScript.Scanner { + function isContextualToken(token: ISyntaxToken): boolean; + interface DiagnosticCallback { + (position: number, width: number, key: string, arguments: any[]): void; + } + interface IScanner { + setIndex(index: number): void; + scan(allowContextualToken: boolean): ISyntaxToken; + } + function createScanner(languageVersion: ts.ScriptTarget, text: ISimpleText, reportDiagnostic: DiagnosticCallback): IScanner; + function isValidIdentifier(text: ISimpleText, languageVersion: ts.ScriptTarget): boolean; + interface IScannerParserSource extends Parser.IParserSource { + absolutePosition(): number; + resetToPosition(absolutePosition: number): void; + } + function createParserSource(fileName: string, text: ISimpleText, languageVersion: ts.ScriptTarget): IScannerParserSource; +} +declare module TypeScript { + class ScannerUtilities { + static identifierKind(str: string, start: number, length: number): SyntaxKind; + } +} +declare module TypeScript { + interface ISlidingWindowSource { + (argument: any): any; + } + class SlidingWindow { + private fetchNextItem; + window: any[]; + private defaultValue; + private sourceLength; + windowCount: number; + windowAbsoluteStartIndex: number; + currentRelativeItemIndex: number; + private _pinCount; + private firstPinnedAbsoluteIndex; + constructor(fetchNextItem: ISlidingWindowSource, window: any[], defaultValue: any, sourceLength?: number); + private addMoreItemsToWindow(argument); + private tryShiftOrGrowWindow(); + absoluteIndex(): number; + isAtEndOfSource(): boolean; + getAndPinAbsoluteIndex(): number; + releaseAndUnpinAbsoluteIndex(absoluteIndex: number): void; + rewindToPinnedIndex(absoluteIndex: number): void; + currentItem(argument: any): any; + peekItemN(n: number): any; + moveToNextItem(): void; + disgardAllItemsFromCurrentIndexOnwards(): void; + } +} +declare module TypeScript.Syntax { + var _nextSyntaxID: number; + function childIndex(parent: ISyntaxElement, child: ISyntaxElement): number; + function nodeHasSkippedOrMissingTokens(node: ISyntaxNode): boolean; + function isUnterminatedStringLiteral(token: ISyntaxToken): boolean; + function isUnterminatedMultilineCommentTrivia(trivia: ISyntaxTrivia): boolean; + function isEntirelyInsideCommentTrivia(trivia: ISyntaxTrivia, fullStart: number, position: number): boolean; + function isEntirelyInsideComment(sourceUnit: SourceUnitSyntax, position: number): boolean; + function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit: SourceUnitSyntax, position: number): boolean; + function findSkippedTokenOnLeft(positionedToken: ISyntaxToken, position: number): ISyntaxToken; + function getAncestorOfKind(positionedToken: ISyntaxElement, kind: SyntaxKind): ISyntaxElement; + function hasAncestorOfKind(positionedToken: ISyntaxElement, kind: SyntaxKind): boolean; + function isIntegerLiteral(expression: IExpressionSyntax): boolean; + function containingNode(element: ISyntaxElement): ISyntaxNode; + function findTokenOnLeft(element: ISyntaxElement, position: number, includeSkippedTokens?: boolean): ISyntaxToken; + function findCompleteTokenOnLeft(element: ISyntaxElement, position: number, includeSkippedTokens?: boolean): ISyntaxToken; + function firstTokenInLineContainingPosition(syntaxTree: SyntaxTree, position: number): ISyntaxToken; +} +declare module TypeScript { + function isShared(element: ISyntaxElement): boolean; + function childCount(element: ISyntaxElement): number; + function childAt(element: ISyntaxElement, index: number): ISyntaxElement; + function syntaxTree(element: ISyntaxElement): SyntaxTree; + function parsedInStrictMode(node: ISyntaxNode): boolean; + function previousToken(token: ISyntaxToken, includeSkippedTokens?: boolean): ISyntaxToken; + function findToken(element: ISyntaxElement, position: number, includeSkippedTokens?: boolean): ISyntaxToken; + function findSkippedTokenInPositionedToken(positionedToken: ISyntaxToken, position: number): ISyntaxToken; + function findSkippedTokenInLeadingTriviaList(positionedToken: ISyntaxToken, position: number): ISyntaxToken; + function findSkippedTokenInTrailingTriviaList(positionedToken: ISyntaxToken, position: number): ISyntaxToken; + function nextToken(token: ISyntaxToken, text?: ISimpleText, includeSkippedTokens?: boolean): ISyntaxToken; + function isNode(element: ISyntaxElement): boolean; + function isToken(element: ISyntaxElement): boolean; + function isList(element: ISyntaxElement): boolean; + function isSeparatedList(element: ISyntaxElement): boolean; + function syntaxID(element: ISyntaxElement): number; + function fullText(element: ISyntaxElement, text?: ISimpleText): string; + function leadingTriviaWidth(element: ISyntaxElement, text?: ISimpleText): number; + function trailingTriviaWidth(element: ISyntaxElement, text?: ISimpleText): number; + function firstToken(element: ISyntaxElement): ISyntaxToken; + function lastToken(element: ISyntaxElement): ISyntaxToken; + function fullStart(element: ISyntaxElement): number; + function fullWidth(element: ISyntaxElement): number; + function isIncrementallyUnusable(element: ISyntaxElement): boolean; + function start(element: ISyntaxElement, text?: ISimpleText): number; + function end(element: ISyntaxElement, text?: ISimpleText): number; + function width(element: ISyntaxElement, text?: ISimpleText): number; + function fullEnd(element: ISyntaxElement): number; + function existsNewLineBetweenTokens(token1: ISyntaxToken, token2: ISyntaxToken, text: ISimpleText): boolean; + interface ISyntaxElement { + kind(): SyntaxKind; + parent?: ISyntaxElement; + } + interface ISyntaxNode extends ISyntaxNodeOrToken { + data: number; + } + interface IModuleReferenceSyntax extends ISyntaxNode { + _moduleReferenceBrand: any; + } + interface IModuleElementSyntax extends ISyntaxNode { + } + interface IStatementSyntax extends IModuleElementSyntax { + _statementBrand: any; + } + interface ITypeMemberSyntax extends ISyntaxNode { + } + interface IClassElementSyntax extends ISyntaxNode { + } + interface IMemberDeclarationSyntax extends IClassElementSyntax { + } + interface IPropertyAssignmentSyntax extends IClassElementSyntax { + } + interface ISwitchClauseSyntax extends ISyntaxNode { + _switchClauseBrand: any; + statements: IStatementSyntax[]; + } + interface IExpressionSyntax extends ISyntaxNodeOrToken { + _expressionBrand: any; + } + interface IUnaryExpressionSyntax extends IExpressionSyntax { + _unaryExpressionBrand: any; + } + interface IPostfixExpressionSyntax extends IUnaryExpressionSyntax { + _postfixExpressionBrand: any; + } + interface ILeftHandSideExpressionSyntax extends IPostfixExpressionSyntax { + _leftHandSideExpressionBrand: any; + } + interface IMemberExpressionSyntax extends ILeftHandSideExpressionSyntax { + _memberExpressionBrand: any; + } + interface ICallExpressionSyntax extends ILeftHandSideExpressionSyntax { + _callExpressionBrand: any; + expression: IExpressionSyntax; + } + interface IPrimaryExpressionSyntax extends IMemberExpressionSyntax { + _primaryExpressionBrand: any; + } + interface ITypeSyntax extends ISyntaxNodeOrToken { + _typeBrand: any; + } + interface INameSyntax extends ITypeSyntax { } } declare module TypeScript.SyntaxFacts { - function getTokenKind(text: string): SyntaxKind; - function getText(kind: SyntaxKind): string; - function isTokenKind(kind: SyntaxKind): boolean; - function isAnyKeyword(kind: SyntaxKind): boolean; - function isStandardKeyword(kind: SyntaxKind): boolean; - function isFutureReservedKeyword(kind: SyntaxKind): boolean; - function isFutureReservedStrictKeyword(kind: SyntaxKind): boolean; - function isAnyPunctuation(kind: SyntaxKind): boolean; - function isPrefixUnaryExpressionOperatorToken(tokenKind: SyntaxKind): boolean; - function isBinaryExpressionOperatorToken(tokenKind: SyntaxKind): boolean; - function getPrefixUnaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; - function getPostfixUnaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; - function getBinaryExpressionFromOperatorToken(tokenKind: SyntaxKind): SyntaxKind; - function getOperatorTokenFromBinaryExpression(tokenKind: SyntaxKind): SyntaxKind; - function isAnyDivideToken(kind: SyntaxKind): boolean; - function isAnyDivideOrRegularExpressionToken(kind: SyntaxKind): boolean; + function isDirectivePrologueElement(node: ISyntaxNodeOrToken): boolean; + function isUseStrictDirective(node: ISyntaxNodeOrToken): boolean; + function isIdentifierNameOrAnyKeyword(token: ISyntaxToken): boolean; +} +interface Array { + data: number; + separators?: TypeScript.ISyntaxToken[]; + kind(): TypeScript.SyntaxKind; + parent: TypeScript.ISyntaxElement; + separatorCount(): number; + separatorAt(index: number): TypeScript.ISyntaxToken; +} +declare module TypeScript.Syntax { + function emptyList(): T[]; + function emptySeparatedList(): T[]; + function list(nodes: T[]): T[]; + function separatedList(nodes: T[], separators: ISyntaxToken[]): T[]; + function nonSeparatorIndexOf(list: T[], ast: ISyntaxNodeOrToken): number; } declare module TypeScript { - class Scanner implements ISlidingWindowSource { - private slidingWindow; - private fileName; - private text; - private _languageVersion; - constructor(fileName: string, text: ISimpleText, languageVersion: LanguageVersion, window?: number[]); - public languageVersion(): LanguageVersion; - public fetchMoreItems(argument: any, sourceIndex: number, window: number[], destinationIndex: number, spaceAvailable: number): number; - private currentCharCode(); - public absoluteIndex(): number; - public setAbsoluteIndex(index: number): void; - public scan(diagnostics: Diagnostic[], allowRegularExpression: boolean): ISyntaxToken; - private createToken(fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword); - private static triviaWindow; - static scanTrivia(text: ISimpleText, start: number, length: number, isTrailing: boolean): ISyntaxTriviaList; - private scanTrivia(underlyingText, underlyingTextStart, isTrailing); - private scanTriviaInfo(diagnostics, isTrailing); - private isNewLineCharacter(ch); - private scanWhitespaceTrivia(underlyingText, underlyingTextStart); - private scanSingleLineCommentTrivia(underlyingText, underlyingTextStart); - private scanSingleLineCommentTriviaLength(); - private scanMultiLineCommentTrivia(underlyingText, underlyingTextStart); - private scanMultiLineCommentTriviaLength(diagnostics); - private scanLineTerminatorSequenceTrivia(ch); - private scanLineTerminatorSequenceLength(ch); - private scanSyntaxToken(diagnostics, allowRegularExpression); - private isIdentifierStart(interpretedChar); - private isIdentifierPart(interpretedChar); - private tryFastScanIdentifierOrKeyword(firstCharacter); - private slowScanIdentifierOrKeyword(diagnostics); - private scanNumericLiteral(diagnostics); - private isOctalNumericLiteral(); - private scanOctalNumericLiteral(diagnostics); - private scanDecimalDigits(); - private scanDecimalNumericLiteral(); - private scanHexNumericLiteral(); - private isHexNumericLiteral(); - private advanceAndSetTokenKind(kind); - private scanLessThanToken(); - private scanBarToken(); - private scanCaretToken(); - private scanAmpersandToken(); - private scanPercentToken(); - private scanMinusToken(); - private scanPlusToken(); - private scanAsteriskToken(); - private scanEqualsToken(); - private isDotPrefixedNumericLiteral(); - private scanDotToken(diagnostics); - private scanSlashToken(allowRegularExpression); - private tryScanRegularExpressionToken(); - private scanExclamationToken(); - private scanDefaultCharacter(character, diagnostics); - private getErrorMessageText(text); - private skipEscapeSequence(diagnostics); - private scanStringLiteral(diagnostics); - private isUnicodeEscape(character); - private peekCharOrUnicodeEscape(); - private peekUnicodeOrHexEscape(); - private scanCharOrUnicodeEscape(errors); - private scanUnicodeOrHexEscape(errors); - public substring(start: number, end: number, intern: boolean): string; - private createIllegalEscapeDiagnostic(start, end); - static isValidIdentifier(text: ISimpleText, languageVersion: LanguageVersion): boolean; + class SyntaxNode implements ISyntaxNodeOrToken { + private __kind; + data: number; + parent: ISyntaxElement; + constructor(data: number); + kind(): SyntaxKind; + } +} +declare module TypeScript { + interface ISyntaxNodeOrToken extends ISyntaxElement { + } +} +declare module TypeScript { + interface SourceUnitSyntax extends ISyntaxNode { + syntaxTree: SyntaxTree; + moduleElements: IModuleElementSyntax[]; + endOfFileToken: ISyntaxToken; + } + interface QualifiedNameSyntax extends ISyntaxNode, INameSyntax { + left: INameSyntax; + dotToken: ISyntaxToken; + right: ISyntaxToken; + } + interface ObjectTypeSyntax extends ISyntaxNode, ITypeSyntax { + openBraceToken: ISyntaxToken; + typeMembers: ITypeMemberSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface FunctionTypeSyntax extends ISyntaxNode, ITypeSyntax { + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + equalsGreaterThanToken: ISyntaxToken; + type: ITypeSyntax; + } + interface ArrayTypeSyntax extends ISyntaxNode, ITypeSyntax { + type: ITypeSyntax; + openBracketToken: ISyntaxToken; + closeBracketToken: ISyntaxToken; + } + interface ConstructorTypeSyntax extends ISyntaxNode, ITypeSyntax { + newKeyword: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + equalsGreaterThanToken: ISyntaxToken; + type: ITypeSyntax; + } + interface GenericTypeSyntax extends ISyntaxNode, ITypeSyntax { + name: INameSyntax; + typeArgumentList: TypeArgumentListSyntax; + } + interface TypeQuerySyntax extends ISyntaxNode, ITypeSyntax { + typeOfKeyword: ISyntaxToken; + name: INameSyntax; + } + interface InterfaceDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { + modifiers: ISyntaxToken[]; + interfaceKeyword: ISyntaxToken; + identifier: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + heritageClauses: HeritageClauseSyntax[]; + body: ObjectTypeSyntax; + } + interface FunctionDeclarationSyntax extends ISyntaxNode, IStatementSyntax { + modifiers: ISyntaxToken[]; + functionKeyword: ISyntaxToken; + identifier: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + semicolonToken: ISyntaxToken; + } + interface ModuleDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { + modifiers: ISyntaxToken[]; + moduleKeyword: ISyntaxToken; + name: INameSyntax; + stringLiteral: ISyntaxToken; + openBraceToken: ISyntaxToken; + moduleElements: IModuleElementSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface ClassDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { + modifiers: ISyntaxToken[]; + classKeyword: ISyntaxToken; + identifier: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + heritageClauses: HeritageClauseSyntax[]; + openBraceToken: ISyntaxToken; + classElements: IClassElementSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface EnumDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { + modifiers: ISyntaxToken[]; + enumKeyword: ISyntaxToken; + identifier: ISyntaxToken; + openBraceToken: ISyntaxToken; + enumElements: EnumElementSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface ImportDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { + modifiers: ISyntaxToken[]; + importKeyword: ISyntaxToken; + identifier: ISyntaxToken; + equalsToken: ISyntaxToken; + moduleReference: IModuleReferenceSyntax; + semicolonToken: ISyntaxToken; + } + interface ExportAssignmentSyntax extends ISyntaxNode, IModuleElementSyntax { + exportKeyword: ISyntaxToken; + equalsToken: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + } + interface MemberFunctionDeclarationSyntax extends ISyntaxNode, IMemberDeclarationSyntax { + modifiers: ISyntaxToken[]; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + semicolonToken: ISyntaxToken; + } + interface MemberVariableDeclarationSyntax extends ISyntaxNode, IMemberDeclarationSyntax { + modifiers: ISyntaxToken[]; + variableDeclarator: VariableDeclaratorSyntax; + semicolonToken: ISyntaxToken; + } + interface ConstructorDeclarationSyntax extends ISyntaxNode, IClassElementSyntax { + modifiers: ISyntaxToken[]; + constructorKeyword: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + semicolonToken: ISyntaxToken; + } + interface IndexMemberDeclarationSyntax extends ISyntaxNode, IClassElementSyntax { + modifiers: ISyntaxToken[]; + indexSignature: IndexSignatureSyntax; + semicolonToken: ISyntaxToken; + } + interface GetAccessorSyntax extends ISyntaxNode, IMemberDeclarationSyntax, IPropertyAssignmentSyntax { + modifiers: ISyntaxToken[]; + getKeyword: ISyntaxToken; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + } + interface SetAccessorSyntax extends ISyntaxNode, IMemberDeclarationSyntax, IPropertyAssignmentSyntax { + modifiers: ISyntaxToken[]; + setKeyword: ISyntaxToken; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + } + interface PropertySignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { + propertyName: ISyntaxToken; + questionToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + } + interface CallSignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + typeAnnotation: TypeAnnotationSyntax; + } + interface ConstructSignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { + newKeyword: ISyntaxToken; + callSignature: CallSignatureSyntax; + } + interface IndexSignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { + openBracketToken: ISyntaxToken; + parameters: ParameterSyntax[]; + closeBracketToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + } + interface MethodSignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { + propertyName: ISyntaxToken; + questionToken: ISyntaxToken; + callSignature: CallSignatureSyntax; + } + interface BlockSyntax extends ISyntaxNode, IStatementSyntax { + openBraceToken: ISyntaxToken; + statements: IStatementSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface IfStatementSyntax extends ISyntaxNode, IStatementSyntax { + ifKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + elseClause: ElseClauseSyntax; + } + interface VariableStatementSyntax extends ISyntaxNode, IStatementSyntax { + modifiers: ISyntaxToken[]; + variableDeclaration: VariableDeclarationSyntax; + semicolonToken: ISyntaxToken; + } + interface ExpressionStatementSyntax extends ISyntaxNode, IStatementSyntax { + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + } + interface ReturnStatementSyntax extends ISyntaxNode, IStatementSyntax { + returnKeyword: ISyntaxToken; + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + } + interface SwitchStatementSyntax extends ISyntaxNode, IStatementSyntax { + switchKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + openBraceToken: ISyntaxToken; + switchClauses: ISwitchClauseSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface BreakStatementSyntax extends ISyntaxNode, IStatementSyntax { + breakKeyword: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + } + interface ContinueStatementSyntax extends ISyntaxNode, IStatementSyntax { + continueKeyword: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + } + interface ForStatementSyntax extends ISyntaxNode, IStatementSyntax { + forKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + variableDeclaration: VariableDeclarationSyntax; + initializer: IExpressionSyntax; + firstSemicolonToken: ISyntaxToken; + condition: IExpressionSyntax; + secondSemicolonToken: ISyntaxToken; + incrementor: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + } + interface ForInStatementSyntax extends ISyntaxNode, IStatementSyntax { + forKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + variableDeclaration: VariableDeclarationSyntax; + left: IExpressionSyntax; + inKeyword: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + } + interface EmptyStatementSyntax extends ISyntaxNode, IStatementSyntax { + semicolonToken: ISyntaxToken; + } + interface ThrowStatementSyntax extends ISyntaxNode, IStatementSyntax { + throwKeyword: ISyntaxToken; + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + } + interface WhileStatementSyntax extends ISyntaxNode, IStatementSyntax { + whileKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + } + interface TryStatementSyntax extends ISyntaxNode, IStatementSyntax { + tryKeyword: ISyntaxToken; + block: BlockSyntax; + catchClause: CatchClauseSyntax; + finallyClause: FinallyClauseSyntax; + } + interface LabeledStatementSyntax extends ISyntaxNode, IStatementSyntax { + identifier: ISyntaxToken; + colonToken: ISyntaxToken; + statement: IStatementSyntax; + } + interface DoStatementSyntax extends ISyntaxNode, IStatementSyntax { + doKeyword: ISyntaxToken; + statement: IStatementSyntax; + whileKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + semicolonToken: ISyntaxToken; + } + interface DebuggerStatementSyntax extends ISyntaxNode, IStatementSyntax { + debuggerKeyword: ISyntaxToken; + semicolonToken: ISyntaxToken; + } + interface WithStatementSyntax extends ISyntaxNode, IStatementSyntax { + withKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + } + interface PrefixUnaryExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + operatorToken: ISyntaxToken; + operand: IUnaryExpressionSyntax; + } + interface DeleteExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + deleteKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + } + interface TypeOfExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + typeOfKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + } + interface VoidExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + voidKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + } + interface ConditionalExpressionSyntax extends ISyntaxNode, IExpressionSyntax { + condition: IExpressionSyntax; + questionToken: ISyntaxToken; + whenTrue: IExpressionSyntax; + colonToken: ISyntaxToken; + whenFalse: IExpressionSyntax; + } + interface BinaryExpressionSyntax extends ISyntaxNode, IExpressionSyntax { + left: IExpressionSyntax; + operatorToken: ISyntaxToken; + right: IExpressionSyntax; + } + interface PostfixUnaryExpressionSyntax extends ISyntaxNode, IPostfixExpressionSyntax { + operand: ILeftHandSideExpressionSyntax; + operatorToken: ISyntaxToken; + } + interface MemberAccessExpressionSyntax extends ISyntaxNode, IMemberExpressionSyntax, ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + dotToken: ISyntaxToken; + name: ISyntaxToken; + } + interface InvocationExpressionSyntax extends ISyntaxNode, ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + argumentList: ArgumentListSyntax; + } + interface ArrayLiteralExpressionSyntax extends ISyntaxNode, IPrimaryExpressionSyntax { + openBracketToken: ISyntaxToken; + expressions: IExpressionSyntax[]; + closeBracketToken: ISyntaxToken; + } + interface ObjectLiteralExpressionSyntax extends ISyntaxNode, IPrimaryExpressionSyntax { + openBraceToken: ISyntaxToken; + propertyAssignments: IPropertyAssignmentSyntax[]; + closeBraceToken: ISyntaxToken; + } + interface ObjectCreationExpressionSyntax extends ISyntaxNode, IPrimaryExpressionSyntax { + newKeyword: ISyntaxToken; + expression: IMemberExpressionSyntax; + argumentList: ArgumentListSyntax; + } + interface ParenthesizedExpressionSyntax extends ISyntaxNode, IPrimaryExpressionSyntax { + openParenToken: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + } + interface ParenthesizedArrowFunctionExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + callSignature: CallSignatureSyntax; + equalsGreaterThanToken: ISyntaxToken; + block: BlockSyntax; + expression: IExpressionSyntax; + } + interface SimpleArrowFunctionExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + parameter: ParameterSyntax; + equalsGreaterThanToken: ISyntaxToken; + block: BlockSyntax; + expression: IExpressionSyntax; + } + interface CastExpressionSyntax extends ISyntaxNode, IUnaryExpressionSyntax { + lessThanToken: ISyntaxToken; + type: ITypeSyntax; + greaterThanToken: ISyntaxToken; + expression: IUnaryExpressionSyntax; + } + interface ElementAccessExpressionSyntax extends ISyntaxNode, IMemberExpressionSyntax, ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + openBracketToken: ISyntaxToken; + argumentExpression: IExpressionSyntax; + closeBracketToken: ISyntaxToken; + } + interface FunctionExpressionSyntax extends ISyntaxNode, IPrimaryExpressionSyntax { + functionKeyword: ISyntaxToken; + identifier: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + } + interface OmittedExpressionSyntax extends ISyntaxNode, IExpressionSyntax { + } + interface VariableDeclarationSyntax extends ISyntaxNode { + varKeyword: ISyntaxToken; + variableDeclarators: VariableDeclaratorSyntax[]; + } + interface VariableDeclaratorSyntax extends ISyntaxNode { + propertyName: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + equalsValueClause: EqualsValueClauseSyntax; + } + interface ArgumentListSyntax extends ISyntaxNode { + typeArgumentList: TypeArgumentListSyntax; + openParenToken: ISyntaxToken; + arguments: IExpressionSyntax[]; + closeParenToken: ISyntaxToken; + } + interface ParameterListSyntax extends ISyntaxNode { + openParenToken: ISyntaxToken; + parameters: ParameterSyntax[]; + closeParenToken: ISyntaxToken; + } + interface TypeArgumentListSyntax extends ISyntaxNode { + lessThanToken: ISyntaxToken; + typeArguments: ITypeSyntax[]; + greaterThanToken: ISyntaxToken; + } + interface TypeParameterListSyntax extends ISyntaxNode { + lessThanToken: ISyntaxToken; + typeParameters: TypeParameterSyntax[]; + greaterThanToken: ISyntaxToken; + } + interface HeritageClauseSyntax extends ISyntaxNode { + extendsOrImplementsKeyword: ISyntaxToken; + typeNames: INameSyntax[]; + } + interface EqualsValueClauseSyntax extends ISyntaxNode { + equalsToken: ISyntaxToken; + value: IExpressionSyntax; + } + interface CaseSwitchClauseSyntax extends ISyntaxNode, ISwitchClauseSyntax { + caseKeyword: ISyntaxToken; + expression: IExpressionSyntax; + colonToken: ISyntaxToken; + statements: IStatementSyntax[]; + } + interface DefaultSwitchClauseSyntax extends ISyntaxNode, ISwitchClauseSyntax { + defaultKeyword: ISyntaxToken; + colonToken: ISyntaxToken; + statements: IStatementSyntax[]; + } + interface ElseClauseSyntax extends ISyntaxNode { + elseKeyword: ISyntaxToken; + statement: IStatementSyntax; + } + interface CatchClauseSyntax extends ISyntaxNode { + catchKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + identifier: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + closeParenToken: ISyntaxToken; + block: BlockSyntax; + } + interface FinallyClauseSyntax extends ISyntaxNode { + finallyKeyword: ISyntaxToken; + block: BlockSyntax; + } + interface TypeParameterSyntax extends ISyntaxNode { + identifier: ISyntaxToken; + constraint: ConstraintSyntax; + } + interface ConstraintSyntax extends ISyntaxNode { + extendsKeyword: ISyntaxToken; + typeOrExpression: ISyntaxNodeOrToken; + } + interface SimplePropertyAssignmentSyntax extends ISyntaxNode, IPropertyAssignmentSyntax { + propertyName: ISyntaxToken; + colonToken: ISyntaxToken; + expression: IExpressionSyntax; + } + interface FunctionPropertyAssignmentSyntax extends ISyntaxNode, IPropertyAssignmentSyntax { + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + } + interface ParameterSyntax extends ISyntaxNode { + dotDotDotToken: ISyntaxToken; + modifiers: ISyntaxToken[]; + identifier: ISyntaxToken; + questionToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + equalsValueClause: EqualsValueClauseSyntax; + } + interface EnumElementSyntax extends ISyntaxNode { + propertyName: ISyntaxToken; + equalsValueClause: EqualsValueClauseSyntax; + } + interface TypeAnnotationSyntax extends ISyntaxNode { + colonToken: ISyntaxToken; + type: ITypeSyntax; + } + interface ExternalModuleReferenceSyntax extends ISyntaxNode, IModuleReferenceSyntax { + requireKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + stringLiteral: ISyntaxToken; + closeParenToken: ISyntaxToken; + } + interface ModuleNameModuleReferenceSyntax extends ISyntaxNode, IModuleReferenceSyntax { + moduleName: INameSyntax; + } + var nodeMetadata: string[][]; + module Syntax { + interface ISyntaxFactory { + isConcrete: boolean; + SourceUnitSyntax: new (data: number, moduleElements: IModuleElementSyntax[], endOfFileToken: ISyntaxToken) => SourceUnitSyntax; + QualifiedNameSyntax: new (data: number, left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken) => QualifiedNameSyntax; + ObjectTypeSyntax: new (data: number, openBraceToken: ISyntaxToken, typeMembers: ITypeMemberSyntax[], closeBraceToken: ISyntaxToken) => ObjectTypeSyntax; + FunctionTypeSyntax: new (data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) => FunctionTypeSyntax; + ArrayTypeSyntax: new (data: number, type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken) => ArrayTypeSyntax; + ConstructorTypeSyntax: new (data: number, newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) => ConstructorTypeSyntax; + GenericTypeSyntax: new (data: number, name: INameSyntax, typeArgumentList: TypeArgumentListSyntax) => GenericTypeSyntax; + TypeQuerySyntax: new (data: number, typeOfKeyword: ISyntaxToken, name: INameSyntax) => TypeQuerySyntax; + InterfaceDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], body: ObjectTypeSyntax) => InterfaceDeclarationSyntax; + FunctionDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) => FunctionDeclarationSyntax; + ModuleDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: IModuleElementSyntax[], closeBraceToken: ISyntaxToken) => ModuleDeclarationSyntax; + ClassDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], openBraceToken: ISyntaxToken, classElements: IClassElementSyntax[], closeBraceToken: ISyntaxToken) => ClassDeclarationSyntax; + EnumDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: EnumElementSyntax[], closeBraceToken: ISyntaxToken) => EnumDeclarationSyntax; + ImportDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken) => ImportDeclarationSyntax; + ExportAssignmentSyntax: new (data: number, exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) => ExportAssignmentSyntax; + MemberFunctionDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) => MemberFunctionDeclarationSyntax; + MemberVariableDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken) => MemberVariableDeclarationSyntax; + ConstructorDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) => ConstructorDeclarationSyntax; + IndexMemberDeclarationSyntax: new (data: number, modifiers: ISyntaxToken[], indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken) => IndexMemberDeclarationSyntax; + GetAccessorSyntax: new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) => GetAccessorSyntax; + SetAccessorSyntax: new (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) => SetAccessorSyntax; + PropertySignatureSyntax: new (data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax) => PropertySignatureSyntax; + CallSignatureSyntax: new (data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax) => CallSignatureSyntax; + ConstructSignatureSyntax: new (data: number, newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax) => ConstructSignatureSyntax; + IndexSignatureSyntax: new (data: number, openBracketToken: ISyntaxToken, parameters: ParameterSyntax[], closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax) => IndexSignatureSyntax; + MethodSignatureSyntax: new (data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax) => MethodSignatureSyntax; + BlockSyntax: new (data: number, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) => BlockSyntax; + IfStatementSyntax: new (data: number, ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax) => IfStatementSyntax; + VariableStatementSyntax: new (data: number, modifiers: ISyntaxToken[], variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken) => VariableStatementSyntax; + ExpressionStatementSyntax: new (data: number, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) => ExpressionStatementSyntax; + ReturnStatementSyntax: new (data: number, returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) => ReturnStatementSyntax; + SwitchStatementSyntax: new (data: number, switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISwitchClauseSyntax[], closeBraceToken: ISyntaxToken) => SwitchStatementSyntax; + BreakStatementSyntax: new (data: number, breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) => BreakStatementSyntax; + ContinueStatementSyntax: new (data: number, continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) => ContinueStatementSyntax; + ForStatementSyntax: new (data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) => ForStatementSyntax; + ForInStatementSyntax: new (data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) => ForInStatementSyntax; + EmptyStatementSyntax: new (data: number, semicolonToken: ISyntaxToken) => EmptyStatementSyntax; + ThrowStatementSyntax: new (data: number, throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) => ThrowStatementSyntax; + WhileStatementSyntax: new (data: number, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) => WhileStatementSyntax; + TryStatementSyntax: new (data: number, tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax) => TryStatementSyntax; + LabeledStatementSyntax: new (data: number, identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax) => LabeledStatementSyntax; + DoStatementSyntax: new (data: number, doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken) => DoStatementSyntax; + DebuggerStatementSyntax: new (data: number, debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken) => DebuggerStatementSyntax; + WithStatementSyntax: new (data: number, withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) => WithStatementSyntax; + PrefixUnaryExpressionSyntax: new (data: number, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax) => PrefixUnaryExpressionSyntax; + DeleteExpressionSyntax: new (data: number, deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) => DeleteExpressionSyntax; + TypeOfExpressionSyntax: new (data: number, typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) => TypeOfExpressionSyntax; + VoidExpressionSyntax: new (data: number, voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) => VoidExpressionSyntax; + ConditionalExpressionSyntax: new (data: number, condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax) => ConditionalExpressionSyntax; + BinaryExpressionSyntax: new (data: number, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax) => BinaryExpressionSyntax; + PostfixUnaryExpressionSyntax: new (data: number, operand: ILeftHandSideExpressionSyntax, operatorToken: ISyntaxToken) => PostfixUnaryExpressionSyntax; + MemberAccessExpressionSyntax: new (data: number, expression: ILeftHandSideExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken) => MemberAccessExpressionSyntax; + InvocationExpressionSyntax: new (data: number, expression: ILeftHandSideExpressionSyntax, argumentList: ArgumentListSyntax) => InvocationExpressionSyntax; + ArrayLiteralExpressionSyntax: new (data: number, openBracketToken: ISyntaxToken, expressions: IExpressionSyntax[], closeBracketToken: ISyntaxToken) => ArrayLiteralExpressionSyntax; + ObjectLiteralExpressionSyntax: new (data: number, openBraceToken: ISyntaxToken, propertyAssignments: IPropertyAssignmentSyntax[], closeBraceToken: ISyntaxToken) => ObjectLiteralExpressionSyntax; + ObjectCreationExpressionSyntax: new (data: number, newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax) => ObjectCreationExpressionSyntax; + ParenthesizedExpressionSyntax: new (data: number, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken) => ParenthesizedExpressionSyntax; + ParenthesizedArrowFunctionExpressionSyntax: new (data: number, callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax) => ParenthesizedArrowFunctionExpressionSyntax; + SimpleArrowFunctionExpressionSyntax: new (data: number, parameter: ParameterSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax) => SimpleArrowFunctionExpressionSyntax; + CastExpressionSyntax: new (data: number, lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax) => CastExpressionSyntax; + ElementAccessExpressionSyntax: new (data: number, expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken) => ElementAccessExpressionSyntax; + FunctionExpressionSyntax: new (data: number, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) => FunctionExpressionSyntax; + OmittedExpressionSyntax: new (data: number) => OmittedExpressionSyntax; + VariableDeclarationSyntax: new (data: number, varKeyword: ISyntaxToken, variableDeclarators: VariableDeclaratorSyntax[]) => VariableDeclarationSyntax; + VariableDeclaratorSyntax: new (data: number, propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) => VariableDeclaratorSyntax; + ArgumentListSyntax: new (data: number, typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, arguments: IExpressionSyntax[], closeParenToken: ISyntaxToken) => ArgumentListSyntax; + ParameterListSyntax: new (data: number, openParenToken: ISyntaxToken, parameters: ParameterSyntax[], closeParenToken: ISyntaxToken) => ParameterListSyntax; + TypeArgumentListSyntax: new (data: number, lessThanToken: ISyntaxToken, typeArguments: ITypeSyntax[], greaterThanToken: ISyntaxToken) => TypeArgumentListSyntax; + TypeParameterListSyntax: new (data: number, lessThanToken: ISyntaxToken, typeParameters: TypeParameterSyntax[], greaterThanToken: ISyntaxToken) => TypeParameterListSyntax; + HeritageClauseSyntax: new (data: number, extendsOrImplementsKeyword: ISyntaxToken, typeNames: INameSyntax[]) => HeritageClauseSyntax; + EqualsValueClauseSyntax: new (data: number, equalsToken: ISyntaxToken, value: IExpressionSyntax) => EqualsValueClauseSyntax; + CaseSwitchClauseSyntax: new (data: number, caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: IStatementSyntax[]) => CaseSwitchClauseSyntax; + DefaultSwitchClauseSyntax: new (data: number, defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: IStatementSyntax[]) => DefaultSwitchClauseSyntax; + ElseClauseSyntax: new (data: number, elseKeyword: ISyntaxToken, statement: IStatementSyntax) => ElseClauseSyntax; + CatchClauseSyntax: new (data: number, catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax) => CatchClauseSyntax; + FinallyClauseSyntax: new (data: number, finallyKeyword: ISyntaxToken, block: BlockSyntax) => FinallyClauseSyntax; + TypeParameterSyntax: new (data: number, identifier: ISyntaxToken, constraint: ConstraintSyntax) => TypeParameterSyntax; + ConstraintSyntax: new (data: number, extendsKeyword: ISyntaxToken, typeOrExpression: ISyntaxNodeOrToken) => ConstraintSyntax; + SimplePropertyAssignmentSyntax: new (data: number, propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax) => SimplePropertyAssignmentSyntax; + FunctionPropertyAssignmentSyntax: new (data: number, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) => FunctionPropertyAssignmentSyntax; + ParameterSyntax: new (data: number, dotDotDotToken: ISyntaxToken, modifiers: ISyntaxToken[], identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) => ParameterSyntax; + EnumElementSyntax: new (data: number, propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax) => EnumElementSyntax; + TypeAnnotationSyntax: new (data: number, colonToken: ISyntaxToken, type: ITypeSyntax) => TypeAnnotationSyntax; + ExternalModuleReferenceSyntax: new (data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken) => ExternalModuleReferenceSyntax; + ModuleNameModuleReferenceSyntax: new (data: number, moduleName: INameSyntax) => ModuleNameModuleReferenceSyntax; + } + } +} +declare module TypeScript { + interface ISyntaxToken extends ISyntaxNodeOrToken, INameSyntax, IPrimaryExpressionSyntax { + setFullStart(fullStart: number): void; + fullStart(): number; + fullWidth(): number; + text(): string; + fullText(text?: ISimpleText): string; + hasLeadingTrivia(): boolean; + hasTrailingTrivia(): boolean; + hasSkippedToken(): boolean; + leadingTrivia(text?: ISimpleText): ISyntaxTriviaList; + trailingTrivia(text?: ISimpleText): ISyntaxTriviaList; + leadingTriviaWidth(text?: ISimpleText): number; + trailingTriviaWidth(text?: ISimpleText): number; + isKeywordConvertedToIdentifier(): boolean; + isIncrementallyUnusable(): boolean; + clone(): ISyntaxToken; + } +} +declare module TypeScript { + function tokenValue(token: ISyntaxToken): any; + function tokenValueText(token: ISyntaxToken): string; + function massageEscapes(text: string): string; +} +declare module TypeScript.Syntax { + function realizeToken(token: ISyntaxToken, text: ISimpleText): ISyntaxToken; + function convertKeywordToIdentifier(token: ISyntaxToken): ISyntaxToken; + function withLeadingTrivia(token: ISyntaxToken, leadingTrivia: ISyntaxTriviaList, text: ISimpleText): ISyntaxToken; + function withTrailingTrivia(token: ISyntaxToken, trailingTrivia: ISyntaxTriviaList, text: ISimpleText): ISyntaxToken; + function emptyToken(kind: SyntaxKind): ISyntaxToken; +} +declare module TypeScript { + interface ISyntaxTrivia { + parent?: ISyntaxTriviaList; + kind(): SyntaxKind; + isWhitespace(): boolean; + isComment(): boolean; + isNewLine(): boolean; + isSkippedToken(): boolean; + fullStart(): number; + fullWidth(): number; + fullText(): string; + skippedToken(): ISyntaxToken; + clone(): ISyntaxTrivia; + } +} +declare module TypeScript.Syntax { + function deferredTrivia(kind: SyntaxKind, text: ISimpleText, fullStart: number, fullWidth: number): ISyntaxTrivia; + function skippedTokenTrivia(token: ISyntaxToken, text: ISimpleText): ISyntaxTrivia; + function splitMultiLineCommentTriviaIntoMultipleLines(trivia: ISyntaxTrivia): string[]; +} +declare module TypeScript { + interface ISyntaxTriviaList { + parent?: ISyntaxToken; + isShared(): boolean; + count(): number; + syntaxTriviaAt(index: number): ISyntaxTrivia; + fullWidth(): number; + fullText(): string; + hasComment(): boolean; + hasNewLine(): boolean; + hasSkippedToken(): boolean; + last(): ISyntaxTrivia; + toArray(): ISyntaxTrivia[]; + clone(): ISyntaxTriviaList; + } +} +declare module TypeScript.Syntax { + var emptyTriviaList: ISyntaxTriviaList; + function triviaList(trivia: ISyntaxTrivia[]): ISyntaxTriviaList; +} +declare module TypeScript { + class SyntaxUtilities { + static isAnyFunctionExpressionOrDeclaration(ast: ISyntaxElement): boolean; + static isLastTokenOnLine(token: ISyntaxToken, text: ISimpleText): boolean; + static isLeftHandSizeExpression(element: ISyntaxElement): boolean; + static isExpression(element: ISyntaxElement): boolean; + static isSwitchClause(element: ISyntaxElement): boolean; + static isTypeMember(element: ISyntaxElement): boolean; + static isClassElement(element: ISyntaxElement): boolean; + static isModuleElement(element: ISyntaxElement): boolean; + static isStatement(element: ISyntaxElement): boolean; + static isAngleBracket(positionedElement: ISyntaxElement): boolean; + static getToken(list: ISyntaxToken[], kind: SyntaxKind): ISyntaxToken; + static containsToken(list: ISyntaxToken[], kind: SyntaxKind): boolean; + static hasExportKeyword(moduleElement: IModuleElementSyntax): boolean; + static getExportKeyword(moduleElement: IModuleElementSyntax): ISyntaxToken; + static isAmbientDeclarationSyntax(positionNode: ISyntaxNode): boolean; + } +} +declare module TypeScript { + function visitNodeOrToken(visitor: ISyntaxVisitor, element: ISyntaxNodeOrToken): any; + interface ISyntaxVisitor { + visitToken(token: ISyntaxToken): any; + visitSourceUnit(node: SourceUnitSyntax): any; + visitQualifiedName(node: QualifiedNameSyntax): any; + visitObjectType(node: ObjectTypeSyntax): any; + visitFunctionType(node: FunctionTypeSyntax): any; + visitArrayType(node: ArrayTypeSyntax): any; + visitConstructorType(node: ConstructorTypeSyntax): any; + visitGenericType(node: GenericTypeSyntax): any; + visitTypeQuery(node: TypeQuerySyntax): any; + visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): any; + visitFunctionDeclaration(node: FunctionDeclarationSyntax): any; + visitModuleDeclaration(node: ModuleDeclarationSyntax): any; + visitClassDeclaration(node: ClassDeclarationSyntax): any; + visitEnumDeclaration(node: EnumDeclarationSyntax): any; + visitImportDeclaration(node: ImportDeclarationSyntax): any; + visitExportAssignment(node: ExportAssignmentSyntax): any; + visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): any; + visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): any; + visitConstructorDeclaration(node: ConstructorDeclarationSyntax): any; + visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): any; + visitGetAccessor(node: GetAccessorSyntax): any; + visitSetAccessor(node: SetAccessorSyntax): any; + visitPropertySignature(node: PropertySignatureSyntax): any; + visitCallSignature(node: CallSignatureSyntax): any; + visitConstructSignature(node: ConstructSignatureSyntax): any; + visitIndexSignature(node: IndexSignatureSyntax): any; + visitMethodSignature(node: MethodSignatureSyntax): any; + visitBlock(node: BlockSyntax): any; + visitIfStatement(node: IfStatementSyntax): any; + visitVariableStatement(node: VariableStatementSyntax): any; + visitExpressionStatement(node: ExpressionStatementSyntax): any; + visitReturnStatement(node: ReturnStatementSyntax): any; + visitSwitchStatement(node: SwitchStatementSyntax): any; + visitBreakStatement(node: BreakStatementSyntax): any; + visitContinueStatement(node: ContinueStatementSyntax): any; + visitForStatement(node: ForStatementSyntax): any; + visitForInStatement(node: ForInStatementSyntax): any; + visitEmptyStatement(node: EmptyStatementSyntax): any; + visitThrowStatement(node: ThrowStatementSyntax): any; + visitWhileStatement(node: WhileStatementSyntax): any; + visitTryStatement(node: TryStatementSyntax): any; + visitLabeledStatement(node: LabeledStatementSyntax): any; + visitDoStatement(node: DoStatementSyntax): any; + visitDebuggerStatement(node: DebuggerStatementSyntax): any; + visitWithStatement(node: WithStatementSyntax): any; + visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): any; + visitDeleteExpression(node: DeleteExpressionSyntax): any; + visitTypeOfExpression(node: TypeOfExpressionSyntax): any; + visitVoidExpression(node: VoidExpressionSyntax): any; + visitConditionalExpression(node: ConditionalExpressionSyntax): any; + visitBinaryExpression(node: BinaryExpressionSyntax): any; + visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): any; + visitMemberAccessExpression(node: MemberAccessExpressionSyntax): any; + visitInvocationExpression(node: InvocationExpressionSyntax): any; + visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): any; + visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): any; + visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): any; + visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): any; + visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): any; + visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): any; + visitCastExpression(node: CastExpressionSyntax): any; + visitElementAccessExpression(node: ElementAccessExpressionSyntax): any; + visitFunctionExpression(node: FunctionExpressionSyntax): any; + visitOmittedExpression(node: OmittedExpressionSyntax): any; + visitVariableDeclaration(node: VariableDeclarationSyntax): any; + visitVariableDeclarator(node: VariableDeclaratorSyntax): any; + visitArgumentList(node: ArgumentListSyntax): any; + visitParameterList(node: ParameterListSyntax): any; + visitTypeArgumentList(node: TypeArgumentListSyntax): any; + visitTypeParameterList(node: TypeParameterListSyntax): any; + visitHeritageClause(node: HeritageClauseSyntax): any; + visitEqualsValueClause(node: EqualsValueClauseSyntax): any; + visitCaseSwitchClause(node: CaseSwitchClauseSyntax): any; + visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): any; + visitElseClause(node: ElseClauseSyntax): any; + visitCatchClause(node: CatchClauseSyntax): any; + visitFinallyClause(node: FinallyClauseSyntax): any; + visitTypeParameter(node: TypeParameterSyntax): any; + visitConstraint(node: ConstraintSyntax): any; + visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): any; + visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): any; + visitParameter(node: ParameterSyntax): any; + visitEnumElement(node: EnumElementSyntax): any; + visitTypeAnnotation(node: TypeAnnotationSyntax): any; + visitExternalModuleReference(node: ExternalModuleReferenceSyntax): any; + visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): any; } } declare module TypeScript { - class ScannerUtilities { - static identifierKind(array: number[], startIndex: number, length: number): SyntaxKind; + class SyntaxWalker implements ISyntaxVisitor { + visitToken(token: ISyntaxToken): void; + visitNode(node: ISyntaxNode): void; + visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void; + private visitOptionalToken(token); + visitOptionalNode(node: ISyntaxNode): void; + visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void; + visitList(list: ISyntaxNodeOrToken[]): void; + visitSeparatedList(list: ISyntaxNodeOrToken[]): void; + visitSourceUnit(node: SourceUnitSyntax): void; + visitQualifiedName(node: QualifiedNameSyntax): void; + visitObjectType(node: ObjectTypeSyntax): void; + visitFunctionType(node: FunctionTypeSyntax): void; + visitArrayType(node: ArrayTypeSyntax): void; + visitConstructorType(node: ConstructorTypeSyntax): void; + visitGenericType(node: GenericTypeSyntax): void; + visitTypeQuery(node: TypeQuerySyntax): void; + visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): void; + visitFunctionDeclaration(node: FunctionDeclarationSyntax): void; + visitModuleDeclaration(node: ModuleDeclarationSyntax): void; + visitClassDeclaration(node: ClassDeclarationSyntax): void; + visitEnumDeclaration(node: EnumDeclarationSyntax): void; + visitImportDeclaration(node: ImportDeclarationSyntax): void; + visitExportAssignment(node: ExportAssignmentSyntax): void; + visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void; + visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void; + visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void; + visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): void; + visitGetAccessor(node: GetAccessorSyntax): void; + visitSetAccessor(node: SetAccessorSyntax): void; + visitPropertySignature(node: PropertySignatureSyntax): void; + visitCallSignature(node: CallSignatureSyntax): void; + visitConstructSignature(node: ConstructSignatureSyntax): void; + visitIndexSignature(node: IndexSignatureSyntax): void; + visitMethodSignature(node: MethodSignatureSyntax): void; + visitBlock(node: BlockSyntax): void; + visitIfStatement(node: IfStatementSyntax): void; + visitVariableStatement(node: VariableStatementSyntax): void; + visitExpressionStatement(node: ExpressionStatementSyntax): void; + visitReturnStatement(node: ReturnStatementSyntax): void; + visitSwitchStatement(node: SwitchStatementSyntax): void; + visitBreakStatement(node: BreakStatementSyntax): void; + visitContinueStatement(node: ContinueStatementSyntax): void; + visitForStatement(node: ForStatementSyntax): void; + visitForInStatement(node: ForInStatementSyntax): void; + visitEmptyStatement(node: EmptyStatementSyntax): void; + visitThrowStatement(node: ThrowStatementSyntax): void; + visitWhileStatement(node: WhileStatementSyntax): void; + visitTryStatement(node: TryStatementSyntax): void; + visitLabeledStatement(node: LabeledStatementSyntax): void; + visitDoStatement(node: DoStatementSyntax): void; + visitDebuggerStatement(node: DebuggerStatementSyntax): void; + visitWithStatement(node: WithStatementSyntax): void; + visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): void; + visitDeleteExpression(node: DeleteExpressionSyntax): void; + visitTypeOfExpression(node: TypeOfExpressionSyntax): void; + visitVoidExpression(node: VoidExpressionSyntax): void; + visitConditionalExpression(node: ConditionalExpressionSyntax): void; + visitBinaryExpression(node: BinaryExpressionSyntax): void; + visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): void; + visitMemberAccessExpression(node: MemberAccessExpressionSyntax): void; + visitInvocationExpression(node: InvocationExpressionSyntax): void; + visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): void; + visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): void; + visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): void; + visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): void; + visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): void; + visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): void; + visitCastExpression(node: CastExpressionSyntax): void; + visitElementAccessExpression(node: ElementAccessExpressionSyntax): void; + visitFunctionExpression(node: FunctionExpressionSyntax): void; + visitOmittedExpression(node: OmittedExpressionSyntax): void; + visitVariableDeclaration(node: VariableDeclarationSyntax): void; + visitVariableDeclarator(node: VariableDeclaratorSyntax): void; + visitArgumentList(node: ArgumentListSyntax): void; + visitParameterList(node: ParameterListSyntax): void; + visitTypeArgumentList(node: TypeArgumentListSyntax): void; + visitTypeParameterList(node: TypeParameterListSyntax): void; + visitHeritageClause(node: HeritageClauseSyntax): void; + visitEqualsValueClause(node: EqualsValueClauseSyntax): void; + visitCaseSwitchClause(node: CaseSwitchClauseSyntax): void; + visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): void; + visitElseClause(node: ElseClauseSyntax): void; + visitCatchClause(node: CatchClauseSyntax): void; + visitFinallyClause(node: FinallyClauseSyntax): void; + visitTypeParameter(node: TypeParameterSyntax): void; + visitConstraint(node: ConstraintSyntax): void; + visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): void; + visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void; + visitParameter(node: ParameterSyntax): void; + visitEnumElement(node: EnumElementSyntax): void; + visitTypeAnnotation(node: TypeAnnotationSyntax): void; + visitExternalModuleReference(node: ExternalModuleReferenceSyntax): void; + visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): void; } } declare module TypeScript { - interface ISeparatedSyntaxList extends ISyntaxElement { - childAt(index: number): ISyntaxNodeOrToken; - toArray(): ISyntaxNodeOrToken[]; - toNonSeparatorArray(): ISyntaxNodeOrToken[]; - separatorCount(): number; - separatorAt(index: number): ISyntaxToken; - nonSeparatorCount(): number; - nonSeparatorAt(index: number): ISyntaxNodeOrToken; - insertChildrenInto(array: ISyntaxElement[], index: number): void; + class DepthLimitedWalker extends SyntaxWalker { + private _depth; + private _maximumDepth; + constructor(maximumDepth: number); + visitNode(node: ISyntaxNode): void; } } -declare module TypeScript.Syntax { - var emptySeparatedList: ISeparatedSyntaxList; - function separatedList(nodes: ISyntaxNodeOrToken[]): ISeparatedSyntaxList; -} -declare module TypeScript { - interface ISlidingWindowSource { - fetchMoreItems(argument: any, sourceIndex: number, window: any[], destinationIndex: number, spaceAvailable: number): number; +declare module TypeScript.Parser { + var syntaxFactory: Syntax.ISyntaxFactory; + interface IParserSource { + text: ISimpleText; + fileName: string; + languageVersion: ts.ScriptTarget; + currentNode(): ISyntaxNode; + currentToken(): ISyntaxToken; + currentContextualToken(): ISyntaxToken; + peekToken(n: number): ISyntaxToken; + consumeNode(node: ISyntaxNode): void; + consumeToken(token: ISyntaxToken): void; + getRewindPoint(): IRewindPoint; + rewind(rewindPoint: IRewindPoint): void; + releaseRewindPoint(rewindPoint: IRewindPoint): void; + tokenDiagnostics(): Diagnostic[]; + release(): void; } - class SlidingWindow { - private source; - public window: any[]; - private defaultValue; - private sourceLength; - public windowCount: number; - public windowAbsoluteStartIndex: number; - public currentRelativeItemIndex: number; - private _pinCount; - private firstPinnedAbsoluteIndex; - constructor(source: ISlidingWindowSource, window: any[], defaultValue: any, sourceLength?: number); - private windowAbsoluteEndIndex(); - private addMoreItemsToWindow(argument); - private tryShiftOrGrowWindow(); - public absoluteIndex(): number; - public isAtEndOfSource(): boolean; - public getAndPinAbsoluteIndex(): number; - public releaseAndUnpinAbsoluteIndex(absoluteIndex: number): void; - public rewindToPinnedIndex(absoluteIndex: number): void; - public currentItem(argument: any): any; - public peekItemN(n: number): any; - public moveToNextItem(): void; - public disgardAllItemsFromCurrentIndexOnwards(): void; - public setAbsoluteIndex(absoluteIndex: number): void; - public pinCount(): number; + interface IRewindPoint { } + function parse(fileName: string, text: ISimpleText, languageVersion: ts.ScriptTarget, isDeclaration: boolean): SyntaxTree; + function parseSource(source: IParserSource, isDeclaration: boolean): SyntaxTree; } -declare module TypeScript { -} -declare module TypeScript.Syntax { - function emptySourceUnit(): SourceUnitSyntax; - function getStandaloneExpression(positionedToken: PositionedToken): PositionedNodeOrToken; - function isInModuleOrTypeContext(positionedToken: PositionedToken): boolean; - function isInTypeOnlyContext(positionedToken: PositionedToken): boolean; - function childOffset(parent: ISyntaxElement, child: ISyntaxElement): number; - function childOffsetAt(parent: ISyntaxElement, index: number): number; - function childIndex(parent: ISyntaxElement, child: ISyntaxElement): number; - function nodeStructuralEquals(node1: SyntaxNode, node2: SyntaxNode): boolean; - function nodeOrTokenStructuralEquals(node1: ISyntaxNodeOrToken, node2: ISyntaxNodeOrToken): boolean; - function tokenStructuralEquals(token1: ISyntaxToken, token2: ISyntaxToken): boolean; - function triviaListStructuralEquals(triviaList1: ISyntaxTriviaList, triviaList2: ISyntaxTriviaList): boolean; - function triviaStructuralEquals(trivia1: ISyntaxTrivia, trivia2: ISyntaxTrivia): boolean; - function listStructuralEquals(list1: ISyntaxList, list2: ISyntaxList): boolean; - function separatedListStructuralEquals(list1: ISeparatedSyntaxList, list2: ISeparatedSyntaxList): boolean; - function elementStructuralEquals(element1: ISyntaxElement, element2: ISyntaxElement): boolean; - function identifierName(text: string, info?: ITokenInfo): ISyntaxToken; - function trueExpression(): IUnaryExpressionSyntax; - function falseExpression(): IUnaryExpressionSyntax; - function numericLiteralExpression(text: string): IUnaryExpressionSyntax; - function stringLiteralExpression(text: string): IUnaryExpressionSyntax; - function isSuperInvocationExpression(node: IExpressionSyntax): boolean; - function isSuperInvocationExpressionStatement(node: SyntaxNode): boolean; - function isSuperMemberAccessExpression(node: IExpressionSyntax): boolean; - function isSuperMemberAccessInvocationExpression(node: SyntaxNode): boolean; - function assignmentExpression(left: IExpressionSyntax, token: ISyntaxToken, right: IExpressionSyntax): BinaryExpressionSyntax; - function nodeHasSkippedOrMissingTokens(node: SyntaxNode): boolean; - function isUnterminatedStringLiteral(token: ISyntaxToken): boolean; - function isUnterminatedMultilineCommentTrivia(trivia: ISyntaxTrivia): boolean; - function isEntirelyInsideCommentTrivia(trivia: ISyntaxTrivia, fullStart: number, position: number): boolean; - function isEntirelyInsideComment(sourceUnit: SourceUnitSyntax, position: number): boolean; - function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit: SourceUnitSyntax, position: number): boolean; - function findSkippedTokenInLeadingTriviaList(positionedToken: PositionedToken, position: number): PositionedSkippedToken; - function findSkippedTokenInTrailingTriviaList(positionedToken: PositionedToken, position: number): PositionedSkippedToken; - function findSkippedTokenInPositionedToken(positionedToken: PositionedToken, position: number): PositionedSkippedToken; - function findSkippedTokenOnLeft(positionedToken: PositionedToken, position: number): PositionedSkippedToken; - function getAncestorOfKind(positionedToken: PositionedElement, kind: SyntaxKind): PositionedElement; - function hasAncestorOfKind(positionedToken: PositionedElement, kind: SyntaxKind): boolean; - function isIntegerLiteral(expression: IExpressionSyntax): boolean; -} -declare module TypeScript { - interface ISyntaxElement { - kind(): SyntaxKind; - isNode(): boolean; - isToken(): boolean; - isList(): boolean; - isSeparatedList(): boolean; - childCount(): number; - childAt(index: number): ISyntaxElement; - isTypeScriptSpecific(): boolean; - isIncrementallyUnusable(): boolean; - fullWidth(): number; - width(): number; - fullText(): string; - leadingTrivia(): ISyntaxTriviaList; - trailingTrivia(): ISyntaxTriviaList; - leadingTriviaWidth(): number; - trailingTriviaWidth(): number; - firstToken(): ISyntaxToken; - lastToken(): ISyntaxToken; - collectTextElements(elements: string[]): void; - } - interface ISyntaxNode extends ISyntaxNodeOrToken { - } - interface IModuleReferenceSyntax extends ISyntaxNode { - isModuleReference(): boolean; - } - interface IModuleElementSyntax extends ISyntaxNode { - } - interface IStatementSyntax extends IModuleElementSyntax { - isStatement(): boolean; +declare module TypeScript.Syntax.Concrete { + var isConcrete: boolean; + class SourceUnitSyntax extends SyntaxNode { + syntaxTree: SyntaxTree; + moduleElements: IModuleElementSyntax[]; + endOfFileToken: ISyntaxToken; + constructor(data: number, moduleElements: IModuleElementSyntax[], endOfFileToken: ISyntaxToken); } - interface IIterationStatementSyntax extends IStatementSyntax { - isIterationStatement(): boolean; + class QualifiedNameSyntax extends SyntaxNode implements INameSyntax { + left: INameSyntax; + dotToken: ISyntaxToken; + right: ISyntaxToken; + _nameBrand: any; + _typeBrand: any; + constructor(data: number, left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken); } - interface ITypeMemberSyntax extends ISyntaxNode { + class ObjectTypeSyntax extends SyntaxNode implements ITypeSyntax { + openBraceToken: ISyntaxToken; + typeMembers: ITypeMemberSyntax[]; + closeBraceToken: ISyntaxToken; + _typeBrand: any; + constructor(data: number, openBraceToken: ISyntaxToken, typeMembers: ITypeMemberSyntax[], closeBraceToken: ISyntaxToken); } - interface IClassElementSyntax extends ISyntaxNode { + class FunctionTypeSyntax extends SyntaxNode implements ITypeSyntax { + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + equalsGreaterThanToken: ISyntaxToken; + type: ITypeSyntax; + _typeBrand: any; + constructor(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax); } - interface IMemberDeclarationSyntax extends IClassElementSyntax { + class ArrayTypeSyntax extends SyntaxNode implements ITypeSyntax { + type: ITypeSyntax; + openBracketToken: ISyntaxToken; + closeBracketToken: ISyntaxToken; + _typeBrand: any; + constructor(data: number, type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken); } - interface IPropertyAssignmentSyntax extends IClassElementSyntax { + class ConstructorTypeSyntax extends SyntaxNode implements ITypeSyntax { + newKeyword: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + equalsGreaterThanToken: ISyntaxToken; + type: ITypeSyntax; + _typeBrand: any; + constructor(data: number, newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax); } - interface ISwitchClauseSyntax extends ISyntaxNode { - isSwitchClause(): boolean; - statements: ISyntaxList; + class GenericTypeSyntax extends SyntaxNode implements ITypeSyntax { + name: INameSyntax; + typeArgumentList: TypeArgumentListSyntax; + _typeBrand: any; + constructor(data: number, name: INameSyntax, typeArgumentList: TypeArgumentListSyntax); } - interface IExpressionSyntax extends ISyntaxNodeOrToken { - isExpression(): boolean; - withLeadingTrivia(trivia: ISyntaxTriviaList): IExpressionSyntax; - withTrailingTrivia(trivia: ISyntaxTriviaList): IExpressionSyntax; + class TypeQuerySyntax extends SyntaxNode implements ITypeSyntax { + typeOfKeyword: ISyntaxToken; + name: INameSyntax; + _typeBrand: any; + constructor(data: number, typeOfKeyword: ISyntaxToken, name: INameSyntax); } - interface IUnaryExpressionSyntax extends IExpressionSyntax { - isUnaryExpression(): boolean; + class InterfaceDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { + modifiers: ISyntaxToken[]; + interfaceKeyword: ISyntaxToken; + identifier: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + heritageClauses: HeritageClauseSyntax[]; + body: ObjectTypeSyntax; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], body: ObjectTypeSyntax); } - interface IArrowFunctionExpressionSyntax extends IUnaryExpressionSyntax { - isArrowFunctionExpression(): boolean; - equalsGreaterThanToken: ISyntaxToken; + class FunctionDeclarationSyntax extends SyntaxNode implements IStatementSyntax { + modifiers: ISyntaxToken[]; + functionKeyword: ISyntaxToken; + identifier: ISyntaxToken; + callSignature: CallSignatureSyntax; block: BlockSyntax; - expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken); } - interface IPostfixExpressionSyntax extends IUnaryExpressionSyntax { - isPostfixExpression(): boolean; + class ModuleDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { + modifiers: ISyntaxToken[]; + moduleKeyword: ISyntaxToken; + name: INameSyntax; + stringLiteral: ISyntaxToken; + openBraceToken: ISyntaxToken; + moduleElements: IModuleElementSyntax[]; + closeBraceToken: ISyntaxToken; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: IModuleElementSyntax[], closeBraceToken: ISyntaxToken); } - interface IMemberExpressionSyntax extends IPostfixExpressionSyntax { - isMemberExpression(): boolean; + class ClassDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { + modifiers: ISyntaxToken[]; + classKeyword: ISyntaxToken; + identifier: ISyntaxToken; + typeParameterList: TypeParameterListSyntax; + heritageClauses: HeritageClauseSyntax[]; + openBraceToken: ISyntaxToken; + classElements: IClassElementSyntax[]; + closeBraceToken: ISyntaxToken; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], openBraceToken: ISyntaxToken, classElements: IClassElementSyntax[], closeBraceToken: ISyntaxToken); } - interface IPrimaryExpressionSyntax extends IMemberExpressionSyntax { - isPrimaryExpression(): boolean; + class EnumDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { + modifiers: ISyntaxToken[]; + enumKeyword: ISyntaxToken; + identifier: ISyntaxToken; + openBraceToken: ISyntaxToken; + enumElements: EnumElementSyntax[]; + closeBraceToken: ISyntaxToken; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: EnumElementSyntax[], closeBraceToken: ISyntaxToken); } - interface ITypeSyntax extends ISyntaxNodeOrToken { + class ImportDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { + modifiers: ISyntaxToken[]; + importKeyword: ISyntaxToken; + identifier: ISyntaxToken; + equalsToken: ISyntaxToken; + moduleReference: IModuleReferenceSyntax; + semicolonToken: ISyntaxToken; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken); } - interface INameSyntax extends ITypeSyntax { + class ExportAssignmentSyntax extends SyntaxNode implements IModuleElementSyntax { + exportKeyword: ISyntaxToken; + equalsToken: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + _moduleElementBrand: any; + constructor(data: number, exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken); } -} -declare module TypeScript.Syntax { - interface IFactory { - sourceUnit(moduleElements: ISyntaxList, endOfFileToken: ISyntaxToken): SourceUnitSyntax; - externalModuleReference(requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - moduleNameModuleReference(moduleName: INameSyntax): ModuleNameModuleReferenceSyntax; - importDeclaration(modifiers: ISyntaxList, importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - exportAssignment(exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ExportAssignmentSyntax; - classDeclaration(modifiers: ISyntaxList, classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, openBraceToken: ISyntaxToken, classElements: ISyntaxList, closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - interfaceDeclaration(modifiers: ISyntaxList, interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - heritageClause(kind: SyntaxKind, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList): HeritageClauseSyntax; - moduleDeclaration(modifiers: ISyntaxList, moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: ISyntaxList, closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - functionDeclaration(modifiers: ISyntaxList, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): FunctionDeclarationSyntax; - variableStatement(modifiers: ISyntaxList, variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken): VariableStatementSyntax; - variableDeclaration(varKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - variableDeclarator(propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): VariableDeclaratorSyntax; - equalsValueClause(equalsToken: ISyntaxToken, value: IExpressionSyntax): EqualsValueClauseSyntax; - prefixUnaryExpression(kind: SyntaxKind, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax): PrefixUnaryExpressionSyntax; - arrayLiteralExpression(openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - omittedExpression(): OmittedExpressionSyntax; - parenthesizedExpression(openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - simpleArrowFunctionExpression(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): SimpleArrowFunctionExpressionSyntax; - parenthesizedArrowFunctionExpression(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): ParenthesizedArrowFunctionExpressionSyntax; - qualifiedName(left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken): QualifiedNameSyntax; - typeArgumentList(lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - constructorType(newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): ConstructorTypeSyntax; - functionType(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): FunctionTypeSyntax; - objectType(openBraceToken: ISyntaxToken, typeMembers: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - arrayType(type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken): ArrayTypeSyntax; - genericType(name: INameSyntax, typeArgumentList: TypeArgumentListSyntax): GenericTypeSyntax; - typeQuery(typeOfKeyword: ISyntaxToken, name: INameSyntax): TypeQuerySyntax; - typeAnnotation(colonToken: ISyntaxToken, type: ITypeSyntax): TypeAnnotationSyntax; - block(openBraceToken: ISyntaxToken, statements: ISyntaxList, closeBraceToken: ISyntaxToken): BlockSyntax; - parameter(dotDotDotToken: ISyntaxToken, modifiers: ISyntaxList, identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): ParameterSyntax; - memberAccessExpression(expression: IExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken): MemberAccessExpressionSyntax; - postfixUnaryExpression(kind: SyntaxKind, operand: IMemberExpressionSyntax, operatorToken: ISyntaxToken): PostfixUnaryExpressionSyntax; - elementAccessExpression(expression: IExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - invocationExpression(expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): InvocationExpressionSyntax; - argumentList(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ArgumentListSyntax; - binaryExpression(kind: SyntaxKind, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax): BinaryExpressionSyntax; - conditionalExpression(condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - constructSignature(newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax): ConstructSignatureSyntax; - methodSignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax; - indexSignature(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): IndexSignatureSyntax; - propertySignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): PropertySignatureSyntax; - callSignature(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax): CallSignatureSyntax; - parameterList(openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ParameterListSyntax; - typeParameterList(lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - typeParameter(identifier: ISyntaxToken, constraint: ConstraintSyntax): TypeParameterSyntax; - constraint(extendsKeyword: ISyntaxToken, type: ITypeSyntax): ConstraintSyntax; - elseClause(elseKeyword: ISyntaxToken, statement: IStatementSyntax): ElseClauseSyntax; - ifStatement(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax): IfStatementSyntax; - expressionStatement(expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ExpressionStatementSyntax; - constructorDeclaration(modifiers: ISyntaxList, constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): ConstructorDeclarationSyntax; - memberFunctionDeclaration(modifiers: ISyntaxList, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): MemberFunctionDeclarationSyntax; - getAccessor(modifiers: ISyntaxList, getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, block: BlockSyntax): GetAccessorSyntax; - setAccessor(modifiers: ISyntaxList, setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): SetAccessorSyntax; - memberVariableDeclaration(modifiers: ISyntaxList, variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - indexMemberDeclaration(modifiers: ISyntaxList, indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - throwStatement(throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ThrowStatementSyntax; - returnStatement(returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ReturnStatementSyntax; - objectCreationExpression(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): ObjectCreationExpressionSyntax; - switchStatement(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISyntaxList, closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - caseSwitchClause(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: ISyntaxList): CaseSwitchClauseSyntax; - defaultSwitchClause(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: ISyntaxList): DefaultSwitchClauseSyntax; - breakStatement(breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): BreakStatementSyntax; - continueStatement(continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ContinueStatementSyntax; - forStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForStatementSyntax; - forInStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForInStatementSyntax; - whileStatement(whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WhileStatementSyntax; - withStatement(withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WithStatementSyntax; - enumDeclaration(modifiers: ISyntaxList, enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - enumElement(propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax): EnumElementSyntax; - castExpression(lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax): CastExpressionSyntax; - objectLiteralExpression(openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - simplePropertyAssignment(propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - functionPropertyAssignment(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionPropertyAssignmentSyntax; - functionExpression(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax; - emptyStatement(semicolonToken: ISyntaxToken): EmptyStatementSyntax; - tryStatement(tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax): TryStatementSyntax; - catchClause(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax): CatchClauseSyntax; - finallyClause(finallyKeyword: ISyntaxToken, block: BlockSyntax): FinallyClauseSyntax; - labeledStatement(identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax): LabeledStatementSyntax; - doStatement(doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken): DoStatementSyntax; - typeOfExpression(typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - deleteExpression(deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - voidExpression(voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - debuggerStatement(debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): DebuggerStatementSyntax; - } - class NormalModeFactory implements IFactory { - public sourceUnit(moduleElements: ISyntaxList, endOfFileToken: ISyntaxToken): SourceUnitSyntax; - public externalModuleReference(requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - public moduleNameModuleReference(moduleName: INameSyntax): ModuleNameModuleReferenceSyntax; - public importDeclaration(modifiers: ISyntaxList, importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - public exportAssignment(exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ExportAssignmentSyntax; - public classDeclaration(modifiers: ISyntaxList, classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, openBraceToken: ISyntaxToken, classElements: ISyntaxList, closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - public interfaceDeclaration(modifiers: ISyntaxList, interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - public heritageClause(kind: SyntaxKind, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList): HeritageClauseSyntax; - public moduleDeclaration(modifiers: ISyntaxList, moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: ISyntaxList, closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - public functionDeclaration(modifiers: ISyntaxList, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): FunctionDeclarationSyntax; - public variableStatement(modifiers: ISyntaxList, variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken): VariableStatementSyntax; - public variableDeclaration(varKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - public variableDeclarator(propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): VariableDeclaratorSyntax; - public equalsValueClause(equalsToken: ISyntaxToken, value: IExpressionSyntax): EqualsValueClauseSyntax; - public prefixUnaryExpression(kind: SyntaxKind, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax): PrefixUnaryExpressionSyntax; - public arrayLiteralExpression(openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - public omittedExpression(): OmittedExpressionSyntax; - public parenthesizedExpression(openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - public simpleArrowFunctionExpression(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): SimpleArrowFunctionExpressionSyntax; - public parenthesizedArrowFunctionExpression(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): ParenthesizedArrowFunctionExpressionSyntax; - public qualifiedName(left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken): QualifiedNameSyntax; - public typeArgumentList(lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - public constructorType(newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): ConstructorTypeSyntax; - public functionType(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): FunctionTypeSyntax; - public objectType(openBraceToken: ISyntaxToken, typeMembers: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - public arrayType(type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken): ArrayTypeSyntax; - public genericType(name: INameSyntax, typeArgumentList: TypeArgumentListSyntax): GenericTypeSyntax; - public typeQuery(typeOfKeyword: ISyntaxToken, name: INameSyntax): TypeQuerySyntax; - public typeAnnotation(colonToken: ISyntaxToken, type: ITypeSyntax): TypeAnnotationSyntax; - public block(openBraceToken: ISyntaxToken, statements: ISyntaxList, closeBraceToken: ISyntaxToken): BlockSyntax; - public parameter(dotDotDotToken: ISyntaxToken, modifiers: ISyntaxList, identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): ParameterSyntax; - public memberAccessExpression(expression: IExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken): MemberAccessExpressionSyntax; - public postfixUnaryExpression(kind: SyntaxKind, operand: IMemberExpressionSyntax, operatorToken: ISyntaxToken): PostfixUnaryExpressionSyntax; - public elementAccessExpression(expression: IExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - public invocationExpression(expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): InvocationExpressionSyntax; - public argumentList(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ArgumentListSyntax; - public binaryExpression(kind: SyntaxKind, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax): BinaryExpressionSyntax; - public conditionalExpression(condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - public constructSignature(newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax): ConstructSignatureSyntax; - public methodSignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax; - public indexSignature(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): IndexSignatureSyntax; - public propertySignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): PropertySignatureSyntax; - public callSignature(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax): CallSignatureSyntax; - public parameterList(openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ParameterListSyntax; - public typeParameterList(lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - public typeParameter(identifier: ISyntaxToken, constraint: ConstraintSyntax): TypeParameterSyntax; - public constraint(extendsKeyword: ISyntaxToken, type: ITypeSyntax): ConstraintSyntax; - public elseClause(elseKeyword: ISyntaxToken, statement: IStatementSyntax): ElseClauseSyntax; - public ifStatement(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax): IfStatementSyntax; - public expressionStatement(expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ExpressionStatementSyntax; - public constructorDeclaration(modifiers: ISyntaxList, constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): ConstructorDeclarationSyntax; - public memberFunctionDeclaration(modifiers: ISyntaxList, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): MemberFunctionDeclarationSyntax; - public getAccessor(modifiers: ISyntaxList, getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, block: BlockSyntax): GetAccessorSyntax; - public setAccessor(modifiers: ISyntaxList, setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): SetAccessorSyntax; - public memberVariableDeclaration(modifiers: ISyntaxList, variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - public indexMemberDeclaration(modifiers: ISyntaxList, indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - public throwStatement(throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ThrowStatementSyntax; - public returnStatement(returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ReturnStatementSyntax; - public objectCreationExpression(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): ObjectCreationExpressionSyntax; - public switchStatement(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISyntaxList, closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - public caseSwitchClause(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: ISyntaxList): CaseSwitchClauseSyntax; - public defaultSwitchClause(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: ISyntaxList): DefaultSwitchClauseSyntax; - public breakStatement(breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): BreakStatementSyntax; - public continueStatement(continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ContinueStatementSyntax; - public forStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForStatementSyntax; - public forInStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForInStatementSyntax; - public whileStatement(whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WhileStatementSyntax; - public withStatement(withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WithStatementSyntax; - public enumDeclaration(modifiers: ISyntaxList, enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - public enumElement(propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax): EnumElementSyntax; - public castExpression(lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax): CastExpressionSyntax; - public objectLiteralExpression(openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - public simplePropertyAssignment(propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - public functionPropertyAssignment(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionPropertyAssignmentSyntax; - public functionExpression(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax; - public emptyStatement(semicolonToken: ISyntaxToken): EmptyStatementSyntax; - public tryStatement(tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax): TryStatementSyntax; - public catchClause(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax): CatchClauseSyntax; - public finallyClause(finallyKeyword: ISyntaxToken, block: BlockSyntax): FinallyClauseSyntax; - public labeledStatement(identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax): LabeledStatementSyntax; - public doStatement(doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken): DoStatementSyntax; - public typeOfExpression(typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - public deleteExpression(deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - public voidExpression(voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - public debuggerStatement(debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): DebuggerStatementSyntax; - } - class StrictModeFactory implements IFactory { - public sourceUnit(moduleElements: ISyntaxList, endOfFileToken: ISyntaxToken): SourceUnitSyntax; - public externalModuleReference(requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - public moduleNameModuleReference(moduleName: INameSyntax): ModuleNameModuleReferenceSyntax; - public importDeclaration(modifiers: ISyntaxList, importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - public exportAssignment(exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ExportAssignmentSyntax; - public classDeclaration(modifiers: ISyntaxList, classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, openBraceToken: ISyntaxToken, classElements: ISyntaxList, closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - public interfaceDeclaration(modifiers: ISyntaxList, interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - public heritageClause(kind: SyntaxKind, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList): HeritageClauseSyntax; - public moduleDeclaration(modifiers: ISyntaxList, moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: ISyntaxList, closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - public functionDeclaration(modifiers: ISyntaxList, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): FunctionDeclarationSyntax; - public variableStatement(modifiers: ISyntaxList, variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken): VariableStatementSyntax; - public variableDeclaration(varKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - public variableDeclarator(propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): VariableDeclaratorSyntax; - public equalsValueClause(equalsToken: ISyntaxToken, value: IExpressionSyntax): EqualsValueClauseSyntax; - public prefixUnaryExpression(kind: SyntaxKind, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax): PrefixUnaryExpressionSyntax; - public arrayLiteralExpression(openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - public omittedExpression(): OmittedExpressionSyntax; - public parenthesizedExpression(openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - public simpleArrowFunctionExpression(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): SimpleArrowFunctionExpressionSyntax; - public parenthesizedArrowFunctionExpression(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): ParenthesizedArrowFunctionExpressionSyntax; - public qualifiedName(left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken): QualifiedNameSyntax; - public typeArgumentList(lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - public constructorType(newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): ConstructorTypeSyntax; - public functionType(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): FunctionTypeSyntax; - public objectType(openBraceToken: ISyntaxToken, typeMembers: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - public arrayType(type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken): ArrayTypeSyntax; - public genericType(name: INameSyntax, typeArgumentList: TypeArgumentListSyntax): GenericTypeSyntax; - public typeQuery(typeOfKeyword: ISyntaxToken, name: INameSyntax): TypeQuerySyntax; - public typeAnnotation(colonToken: ISyntaxToken, type: ITypeSyntax): TypeAnnotationSyntax; - public block(openBraceToken: ISyntaxToken, statements: ISyntaxList, closeBraceToken: ISyntaxToken): BlockSyntax; - public parameter(dotDotDotToken: ISyntaxToken, modifiers: ISyntaxList, identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): ParameterSyntax; - public memberAccessExpression(expression: IExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken): MemberAccessExpressionSyntax; - public postfixUnaryExpression(kind: SyntaxKind, operand: IMemberExpressionSyntax, operatorToken: ISyntaxToken): PostfixUnaryExpressionSyntax; - public elementAccessExpression(expression: IExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - public invocationExpression(expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): InvocationExpressionSyntax; - public argumentList(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ArgumentListSyntax; - public binaryExpression(kind: SyntaxKind, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax): BinaryExpressionSyntax; - public conditionalExpression(condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - public constructSignature(newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax): ConstructSignatureSyntax; - public methodSignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax; - public indexSignature(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): IndexSignatureSyntax; - public propertySignature(propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): PropertySignatureSyntax; - public callSignature(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax): CallSignatureSyntax; - public parameterList(openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ParameterListSyntax; - public typeParameterList(lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - public typeParameter(identifier: ISyntaxToken, constraint: ConstraintSyntax): TypeParameterSyntax; - public constraint(extendsKeyword: ISyntaxToken, type: ITypeSyntax): ConstraintSyntax; - public elseClause(elseKeyword: ISyntaxToken, statement: IStatementSyntax): ElseClauseSyntax; - public ifStatement(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax): IfStatementSyntax; - public expressionStatement(expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ExpressionStatementSyntax; - public constructorDeclaration(modifiers: ISyntaxList, constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): ConstructorDeclarationSyntax; - public memberFunctionDeclaration(modifiers: ISyntaxList, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): MemberFunctionDeclarationSyntax; - public getAccessor(modifiers: ISyntaxList, getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, block: BlockSyntax): GetAccessorSyntax; - public setAccessor(modifiers: ISyntaxList, setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): SetAccessorSyntax; - public memberVariableDeclaration(modifiers: ISyntaxList, variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - public indexMemberDeclaration(modifiers: ISyntaxList, indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - public throwStatement(throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ThrowStatementSyntax; - public returnStatement(returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ReturnStatementSyntax; - public objectCreationExpression(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): ObjectCreationExpressionSyntax; - public switchStatement(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISyntaxList, closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - public caseSwitchClause(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: ISyntaxList): CaseSwitchClauseSyntax; - public defaultSwitchClause(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: ISyntaxList): DefaultSwitchClauseSyntax; - public breakStatement(breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): BreakStatementSyntax; - public continueStatement(continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ContinueStatementSyntax; - public forStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForStatementSyntax; - public forInStatement(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForInStatementSyntax; - public whileStatement(whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WhileStatementSyntax; - public withStatement(withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WithStatementSyntax; - public enumDeclaration(modifiers: ISyntaxList, enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - public enumElement(propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax): EnumElementSyntax; - public castExpression(lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax): CastExpressionSyntax; - public objectLiteralExpression(openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - public simplePropertyAssignment(propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - public functionPropertyAssignment(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionPropertyAssignmentSyntax; - public functionExpression(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax; - public emptyStatement(semicolonToken: ISyntaxToken): EmptyStatementSyntax; - public tryStatement(tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax): TryStatementSyntax; - public catchClause(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax): CatchClauseSyntax; - public finallyClause(finallyKeyword: ISyntaxToken, block: BlockSyntax): FinallyClauseSyntax; - public labeledStatement(identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax): LabeledStatementSyntax; - public doStatement(doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken): DoStatementSyntax; - public typeOfExpression(typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - public deleteExpression(deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - public voidExpression(voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - public debuggerStatement(debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): DebuggerStatementSyntax; - } - var normalModeFactory: IFactory; - var strictModeFactory: IFactory; -} -declare module TypeScript.SyntaxFacts { - function isDirectivePrologueElement(node: ISyntaxNodeOrToken): boolean; - function isUseStrictDirective(node: ISyntaxNodeOrToken): boolean; - function isIdentifierNameOrAnyKeyword(token: ISyntaxToken): boolean; -} -declare module TypeScript { - interface ISyntaxList extends ISyntaxElement { - childAt(index: number): ISyntaxNodeOrToken; - toArray(): ISyntaxNodeOrToken[]; - insertChildrenInto(array: ISyntaxElement[], index: number): void; + class MemberFunctionDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { + modifiers: ISyntaxToken[]; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + semicolonToken: ISyntaxToken; + _memberDeclarationBrand: any; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken); } -} -declare module TypeScript.Syntax { - class EmptySyntaxList implements ISyntaxList { - public kind(): SyntaxKind; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public toJSON(key: any): any; - public childCount(): number; - public childAt(index: number): ISyntaxNodeOrToken; - public toArray(): ISyntaxNodeOrToken[]; - public collectTextElements(elements: string[]): void; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public fullWidth(): number; - public width(): number; - public leadingTrivia(): ISyntaxTriviaList; - public trailingTrivia(): ISyntaxTriviaList; - public leadingTriviaWidth(): number; - public trailingTriviaWidth(): number; - public fullText(): string; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public findTokenInternal(parent: PositionedElement, position: number, fullStart: number): PositionedToken; - public insertChildrenInto(array: ISyntaxElement[], index: number): void; - } - var emptyList: ISyntaxList; - function list(nodes: ISyntaxNodeOrToken[]): ISyntaxList; -} -declare module TypeScript { - class SyntaxNode implements ISyntaxNodeOrToken { - private _data; - constructor(parsedInStrictMode: boolean); - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public insertChildrenInto(array: ISyntaxElement[], index: number): void; - public leadingTrivia(): ISyntaxTriviaList; - public trailingTrivia(): ISyntaxTriviaList; - public toJSON(key: any): any; - public accept(visitor: ISyntaxVisitor): any; - public fullText(): string; - public collectTextElements(elements: string[]): void; - public replaceToken(token1: ISyntaxToken, token2: ISyntaxToken): SyntaxNode; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SyntaxNode; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SyntaxNode; - public hasLeadingTrivia(): boolean; - public hasTrailingTrivia(): boolean; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public parsedInStrictMode(): boolean; - public fullWidth(): number; - private computeData(); - private data(); - public findToken(position: number, includeSkippedTokens?: boolean): PositionedToken; - private tryGetEndOfFileAt(position); - private findTokenInternal(parent, position, fullStart); - public findTokenOnLeft(position: number, includeSkippedTokens?: boolean): PositionedToken; - public findCompleteTokenOnLeft(position: number, includeSkippedTokens?: boolean): PositionedToken; - public isModuleElement(): boolean; - public isClassElement(): boolean; - public isTypeMember(): boolean; - public isStatement(): boolean; - public isExpression(): boolean; - public isSwitchClause(): boolean; - public structuralEquals(node: SyntaxNode): boolean; - public width(): number; - public leadingTriviaWidth(): number; - public trailingTriviaWidth(): number; + class MemberVariableDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { + modifiers: ISyntaxToken[]; + variableDeclarator: VariableDeclaratorSyntax; + semicolonToken: ISyntaxToken; + _memberDeclarationBrand: any; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken); } -} -declare module TypeScript { - interface ISyntaxNodeOrToken extends ISyntaxElement { - withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxNodeOrToken; - withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxNodeOrToken; - accept(visitor: ISyntaxVisitor): any; + class ConstructorDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { + modifiers: ISyntaxToken[]; + constructorKeyword: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + semicolonToken: ISyntaxToken; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken); } -} -declare module TypeScript { - class SourceUnitSyntax extends SyntaxNode { - public moduleElements: ISyntaxList; - public endOfFileToken: ISyntaxToken; - constructor(moduleElements: ISyntaxList, endOfFileToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(moduleElements: ISyntaxList, endOfFileToken: ISyntaxToken): SourceUnitSyntax; - static create(endOfFileToken: ISyntaxToken): SourceUnitSyntax; - static create1(endOfFileToken: ISyntaxToken): SourceUnitSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SourceUnitSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SourceUnitSyntax; - public withModuleElements(moduleElements: ISyntaxList): SourceUnitSyntax; - public withModuleElement(moduleElement: IModuleElementSyntax): SourceUnitSyntax; - public withEndOfFileToken(endOfFileToken: ISyntaxToken): SourceUnitSyntax; - public isTypeScriptSpecific(): boolean; + class IndexMemberDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { + modifiers: ISyntaxToken[]; + indexSignature: IndexSignatureSyntax; + semicolonToken: ISyntaxToken; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken); } - class ExternalModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { - public requireKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public stringLiteral: ISyntaxToken; - public closeParenToken: ISyntaxToken; - constructor(requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleReference(): boolean; - public update(requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - static create1(stringLiteral: ISyntaxToken): ExternalModuleReferenceSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ExternalModuleReferenceSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ExternalModuleReferenceSyntax; - public withRequireKeyword(requireKeyword: ISyntaxToken): ExternalModuleReferenceSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - public withStringLiteral(stringLiteral: ISyntaxToken): ExternalModuleReferenceSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax; - public isTypeScriptSpecific(): boolean; + class GetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { + modifiers: ISyntaxToken[]; + getKeyword: ISyntaxToken; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + _memberDeclarationBrand: any; + _propertyAssignmentBrand: any; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax); } - class ModuleNameModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { - public moduleName: INameSyntax; - constructor(moduleName: INameSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleReference(): boolean; - public update(moduleName: INameSyntax): ModuleNameModuleReferenceSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ModuleNameModuleReferenceSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ModuleNameModuleReferenceSyntax; - public withModuleName(moduleName: INameSyntax): ModuleNameModuleReferenceSyntax; - public isTypeScriptSpecific(): boolean; + class SetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { + modifiers: ISyntaxToken[]; + setKeyword: ISyntaxToken; + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + _memberDeclarationBrand: any; + _propertyAssignmentBrand: any; + _classElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax); } - class ImportDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxList; - public importKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public equalsToken: ISyntaxToken; - public moduleReference: IModuleReferenceSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - static create(importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - static create1(identifier: ISyntaxToken, moduleReference: IModuleReferenceSyntax): ImportDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ImportDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ImportDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): ImportDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): ImportDeclarationSyntax; - public withImportKeyword(importKeyword: ISyntaxToken): ImportDeclarationSyntax; - public withIdentifier(identifier: ISyntaxToken): ImportDeclarationSyntax; - public withEqualsToken(equalsToken: ISyntaxToken): ImportDeclarationSyntax; - public withModuleReference(moduleReference: IModuleReferenceSyntax): ImportDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ImportDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class PropertySignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { + propertyName: ISyntaxToken; + questionToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + _typeMemberBrand: any; + constructor(data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax); } - class ExportAssignmentSyntax extends SyntaxNode implements IModuleElementSyntax { - public exportKeyword: ISyntaxToken; - public equalsToken: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - constructor(exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ExportAssignmentSyntax; - static create1(identifier: ISyntaxToken): ExportAssignmentSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ExportAssignmentSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ExportAssignmentSyntax; - public withExportKeyword(exportKeyword: ISyntaxToken): ExportAssignmentSyntax; - public withEqualsToken(equalsToken: ISyntaxToken): ExportAssignmentSyntax; - public withIdentifier(identifier: ISyntaxToken): ExportAssignmentSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ExportAssignmentSyntax; - public isTypeScriptSpecific(): boolean; + class CallSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { + typeParameterList: TypeParameterListSyntax; + parameterList: ParameterListSyntax; + typeAnnotation: TypeAnnotationSyntax; + _typeMemberBrand: any; + constructor(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax); } - class ClassDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxList; - public classKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public heritageClauses: ISyntaxList; - public openBraceToken: ISyntaxToken; - public classElements: ISyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, openBraceToken: ISyntaxToken, classElements: ISyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, openBraceToken: ISyntaxToken, classElements: ISyntaxList, closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - static create(classKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - static create1(identifier: ISyntaxToken): ClassDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ClassDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ClassDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): ClassDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): ClassDeclarationSyntax; - public withClassKeyword(classKeyword: ISyntaxToken): ClassDeclarationSyntax; - public withIdentifier(identifier: ISyntaxToken): ClassDeclarationSyntax; - public withTypeParameterList(typeParameterList: TypeParameterListSyntax): ClassDeclarationSyntax; - public withHeritageClauses(heritageClauses: ISyntaxList): ClassDeclarationSyntax; - public withHeritageClause(heritageClause: HeritageClauseSyntax): ClassDeclarationSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): ClassDeclarationSyntax; - public withClassElements(classElements: ISyntaxList): ClassDeclarationSyntax; - public withClassElement(classElement: IClassElementSyntax): ClassDeclarationSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): ClassDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class ConstructSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { + newKeyword: ISyntaxToken; + callSignature: CallSignatureSyntax; + _typeMemberBrand: any; + constructor(data: number, newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax); } - class InterfaceDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxList; - public interfaceKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public heritageClauses: ISyntaxList; - public body: ObjectTypeSyntax; - constructor(modifiers: ISyntaxList, interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, body: ObjectTypeSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: ISyntaxList, body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - static create(interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - static create1(identifier: ISyntaxToken): InterfaceDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): InterfaceDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): InterfaceDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): InterfaceDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): InterfaceDeclarationSyntax; - public withInterfaceKeyword(interfaceKeyword: ISyntaxToken): InterfaceDeclarationSyntax; - public withIdentifier(identifier: ISyntaxToken): InterfaceDeclarationSyntax; - public withTypeParameterList(typeParameterList: TypeParameterListSyntax): InterfaceDeclarationSyntax; - public withHeritageClauses(heritageClauses: ISyntaxList): InterfaceDeclarationSyntax; - public withHeritageClause(heritageClause: HeritageClauseSyntax): InterfaceDeclarationSyntax; - public withBody(body: ObjectTypeSyntax): InterfaceDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class IndexSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { + openBracketToken: ISyntaxToken; + parameters: ParameterSyntax[]; + closeBracketToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + _typeMemberBrand: any; + constructor(data: number, openBracketToken: ISyntaxToken, parameters: ParameterSyntax[], closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax); } - class HeritageClauseSyntax extends SyntaxNode { - public extendsOrImplementsKeyword: ISyntaxToken; - public typeNames: ISeparatedSyntaxList; - private _kind; - constructor(kind: SyntaxKind, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public kind(): SyntaxKind; - public update(kind: SyntaxKind, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList): HeritageClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): HeritageClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): HeritageClauseSyntax; - public withKind(kind: SyntaxKind): HeritageClauseSyntax; - public withExtendsOrImplementsKeyword(extendsOrImplementsKeyword: ISyntaxToken): HeritageClauseSyntax; - public withTypeNames(typeNames: ISeparatedSyntaxList): HeritageClauseSyntax; - public withTypeName(typeName: INameSyntax): HeritageClauseSyntax; - public isTypeScriptSpecific(): boolean; + class MethodSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { + propertyName: ISyntaxToken; + questionToken: ISyntaxToken; + callSignature: CallSignatureSyntax; + _typeMemberBrand: any; + constructor(data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax); } - class ModuleDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxList; - public moduleKeyword: ISyntaxToken; - public name: INameSyntax; - public stringLiteral: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public moduleElements: ISyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: ISyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: ISyntaxList, closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - static create(moduleKeyword: ISyntaxToken, openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - static create1(): ModuleDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ModuleDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ModuleDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): ModuleDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): ModuleDeclarationSyntax; - public withModuleKeyword(moduleKeyword: ISyntaxToken): ModuleDeclarationSyntax; - public withName(name: INameSyntax): ModuleDeclarationSyntax; - public withStringLiteral(stringLiteral: ISyntaxToken): ModuleDeclarationSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - public withModuleElements(moduleElements: ISyntaxList): ModuleDeclarationSyntax; - public withModuleElement(moduleElement: IModuleElementSyntax): ModuleDeclarationSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): ModuleDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class BlockSyntax extends SyntaxNode implements IStatementSyntax { + openBraceToken: ISyntaxToken; + statements: IStatementSyntax[]; + closeBraceToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken); } - class FunctionDeclarationSyntax extends SyntaxNode implements IStatementSyntax { - public modifiers: ISyntaxList; - public functionKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): FunctionDeclarationSyntax; - static create(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax): FunctionDeclarationSyntax; - static create1(identifier: ISyntaxToken): FunctionDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): FunctionDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): FunctionDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): FunctionDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): FunctionDeclarationSyntax; - public withFunctionKeyword(functionKeyword: ISyntaxToken): FunctionDeclarationSyntax; - public withIdentifier(identifier: ISyntaxToken): FunctionDeclarationSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): FunctionDeclarationSyntax; - public withBlock(block: BlockSyntax): FunctionDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): FunctionDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class IfStatementSyntax extends SyntaxNode implements IStatementSyntax { + ifKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + elseClause: ElseClauseSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax); } class VariableStatementSyntax extends SyntaxNode implements IStatementSyntax { - public modifiers: ISyntaxList; - public variableDeclaration: VariableDeclarationSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken): VariableStatementSyntax; - static create(variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken): VariableStatementSyntax; - static create1(variableDeclaration: VariableDeclarationSyntax): VariableStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): VariableStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): VariableStatementSyntax; - public withModifiers(modifiers: ISyntaxList): VariableStatementSyntax; - public withModifier(modifier: ISyntaxToken): VariableStatementSyntax; - public withVariableDeclaration(variableDeclaration: VariableDeclarationSyntax): VariableStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): VariableStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class VariableDeclarationSyntax extends SyntaxNode { - public varKeyword: ISyntaxToken; - public variableDeclarators: ISeparatedSyntaxList; - constructor(varKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(varKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - static create1(variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): VariableDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): VariableDeclarationSyntax; - public withVarKeyword(varKeyword: ISyntaxToken): VariableDeclarationSyntax; - public withVariableDeclarators(variableDeclarators: ISeparatedSyntaxList): VariableDeclarationSyntax; - public withVariableDeclarator(variableDeclarator: VariableDeclaratorSyntax): VariableDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + modifiers: ISyntaxToken[]; + variableDeclaration: VariableDeclarationSyntax; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, modifiers: ISyntaxToken[], variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken); } - class VariableDeclaratorSyntax extends SyntaxNode { - public propertyName: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): VariableDeclaratorSyntax; - static create(propertyName: ISyntaxToken): VariableDeclaratorSyntax; - static create1(propertyName: ISyntaxToken): VariableDeclaratorSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): VariableDeclaratorSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): VariableDeclaratorSyntax; - public withPropertyName(propertyName: ISyntaxToken): VariableDeclaratorSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): VariableDeclaratorSyntax; - public withEqualsValueClause(equalsValueClause: EqualsValueClauseSyntax): VariableDeclaratorSyntax; - public isTypeScriptSpecific(): boolean; + class ExpressionStatementSyntax extends SyntaxNode implements IStatementSyntax { + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, expression: IExpressionSyntax, semicolonToken: ISyntaxToken); } - class EqualsValueClauseSyntax extends SyntaxNode { - public equalsToken: ISyntaxToken; - public value: IExpressionSyntax; - constructor(equalsToken: ISyntaxToken, value: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(equalsToken: ISyntaxToken, value: IExpressionSyntax): EqualsValueClauseSyntax; - static create1(value: IExpressionSyntax): EqualsValueClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): EqualsValueClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): EqualsValueClauseSyntax; - public withEqualsToken(equalsToken: ISyntaxToken): EqualsValueClauseSyntax; - public withValue(value: IExpressionSyntax): EqualsValueClauseSyntax; - public isTypeScriptSpecific(): boolean; + class ReturnStatementSyntax extends SyntaxNode implements IStatementSyntax { + returnKeyword: ISyntaxToken; + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken); } - class PrefixUnaryExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public operatorToken: ISyntaxToken; - public operand: IUnaryExpressionSyntax; - private _kind; - constructor(kind: SyntaxKind, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public kind(): SyntaxKind; - public update(kind: SyntaxKind, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax): PrefixUnaryExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): PrefixUnaryExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): PrefixUnaryExpressionSyntax; - public withKind(kind: SyntaxKind): PrefixUnaryExpressionSyntax; - public withOperatorToken(operatorToken: ISyntaxToken): PrefixUnaryExpressionSyntax; - public withOperand(operand: IUnaryExpressionSyntax): PrefixUnaryExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class SwitchStatementSyntax extends SyntaxNode implements IStatementSyntax { + switchKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + openBraceToken: ISyntaxToken; + switchClauses: ISwitchClauseSyntax[]; + closeBraceToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISwitchClauseSyntax[], closeBraceToken: ISyntaxToken); } - class ArrayLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openBracketToken: ISyntaxToken; - public expressions: ISeparatedSyntaxList; - public closeBracketToken: ISyntaxToken; - constructor(openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - static create(openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - static create1(): ArrayLiteralExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ArrayLiteralExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ArrayLiteralExpressionSyntax; - public withOpenBracketToken(openBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - public withExpressions(expressions: ISeparatedSyntaxList): ArrayLiteralExpressionSyntax; - public withExpression(expression: IExpressionSyntax): ArrayLiteralExpressionSyntax; - public withCloseBracketToken(closeBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class BreakStatementSyntax extends SyntaxNode implements IStatementSyntax { + breakKeyword: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken); } - class OmittedExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - constructor(parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isExpression(): boolean; - public update(): OmittedExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): OmittedExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): OmittedExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class ContinueStatementSyntax extends SyntaxNode implements IStatementSyntax { + continueKeyword: ISyntaxToken; + identifier: ISyntaxToken; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken); + } + class ForStatementSyntax extends SyntaxNode implements IStatementSyntax { + forKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + variableDeclaration: VariableDeclarationSyntax; + initializer: IExpressionSyntax; + firstSemicolonToken: ISyntaxToken; + condition: IExpressionSyntax; + secondSemicolonToken: ISyntaxToken; + incrementor: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax); + } + class ForInStatementSyntax extends SyntaxNode implements IStatementSyntax { + forKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + variableDeclaration: VariableDeclarationSyntax; + left: IExpressionSyntax; + inKeyword: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax); } - class ParenthesizedExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openParenToken: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - constructor(openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - static create1(expression: IExpressionSyntax): ParenthesizedExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ParenthesizedExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ParenthesizedExpressionSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - public withExpression(expression: IExpressionSyntax): ParenthesizedExpressionSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ParenthesizedExpressionSyntax; - public isTypeScriptSpecific(): boolean; - } - class SimpleArrowFunctionExpressionSyntax extends SyntaxNode implements IArrowFunctionExpressionSyntax { - public identifier: ISyntaxToken; - public equalsGreaterThanToken: ISyntaxToken; - public block: BlockSyntax; - public expression: IExpressionSyntax; - constructor(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isArrowFunctionExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): SimpleArrowFunctionExpressionSyntax; - static create(identifier: ISyntaxToken, equalsGreaterThanToken: ISyntaxToken): SimpleArrowFunctionExpressionSyntax; - static create1(identifier: ISyntaxToken): SimpleArrowFunctionExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SimpleArrowFunctionExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SimpleArrowFunctionExpressionSyntax; - public withIdentifier(identifier: ISyntaxToken): SimpleArrowFunctionExpressionSyntax; - public withEqualsGreaterThanToken(equalsGreaterThanToken: ISyntaxToken): SimpleArrowFunctionExpressionSyntax; - public withBlock(block: BlockSyntax): SimpleArrowFunctionExpressionSyntax; - public withExpression(expression: IExpressionSyntax): SimpleArrowFunctionExpressionSyntax; - public isTypeScriptSpecific(): boolean; - } - class ParenthesizedArrowFunctionExpressionSyntax extends SyntaxNode implements IArrowFunctionExpressionSyntax { - public callSignature: CallSignatureSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public block: BlockSyntax; - public expression: IExpressionSyntax; - constructor(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isArrowFunctionExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax): ParenthesizedArrowFunctionExpressionSyntax; - static create(callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken): ParenthesizedArrowFunctionExpressionSyntax; - static create1(): ParenthesizedArrowFunctionExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ParenthesizedArrowFunctionExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ParenthesizedArrowFunctionExpressionSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): ParenthesizedArrowFunctionExpressionSyntax; - public withEqualsGreaterThanToken(equalsGreaterThanToken: ISyntaxToken): ParenthesizedArrowFunctionExpressionSyntax; - public withBlock(block: BlockSyntax): ParenthesizedArrowFunctionExpressionSyntax; - public withExpression(expression: IExpressionSyntax): ParenthesizedArrowFunctionExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class EmptyStatementSyntax extends SyntaxNode implements IStatementSyntax { + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, semicolonToken: ISyntaxToken); } - class QualifiedNameSyntax extends SyntaxNode implements INameSyntax { - public left: INameSyntax; - public dotToken: ISyntaxToken; - public right: ISyntaxToken; - constructor(left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isName(): boolean; - public isType(): boolean; - public update(left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken): QualifiedNameSyntax; - static create1(left: INameSyntax, right: ISyntaxToken): QualifiedNameSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): QualifiedNameSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): QualifiedNameSyntax; - public withLeft(left: INameSyntax): QualifiedNameSyntax; - public withDotToken(dotToken: ISyntaxToken): QualifiedNameSyntax; - public withRight(right: ISyntaxToken): QualifiedNameSyntax; - public isTypeScriptSpecific(): boolean; + class ThrowStatementSyntax extends SyntaxNode implements IStatementSyntax { + throwKeyword: ISyntaxToken; + expression: IExpressionSyntax; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken); + } + class WhileStatementSyntax extends SyntaxNode implements IStatementSyntax { + whileKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax); } - class TypeArgumentListSyntax extends SyntaxNode { - public lessThanToken: ISyntaxToken; - public typeArguments: ISeparatedSyntaxList; - public greaterThanToken: ISyntaxToken; - constructor(lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - static create(lessThanToken: ISyntaxToken, greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - static create1(): TypeArgumentListSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeArgumentListSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeArgumentListSyntax; - public withLessThanToken(lessThanToken: ISyntaxToken): TypeArgumentListSyntax; - public withTypeArguments(typeArguments: ISeparatedSyntaxList): TypeArgumentListSyntax; - public withTypeArgument(typeArgument: ITypeSyntax): TypeArgumentListSyntax; - public withGreaterThanToken(greaterThanToken: ISyntaxToken): TypeArgumentListSyntax; - public isTypeScriptSpecific(): boolean; + class TryStatementSyntax extends SyntaxNode implements IStatementSyntax { + tryKeyword: ISyntaxToken; + block: BlockSyntax; + catchClause: CatchClauseSyntax; + finallyClause: FinallyClauseSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax); } - class ConstructorTypeSyntax extends SyntaxNode implements ITypeSyntax { - public newKeyword: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public type: ITypeSyntax; - constructor(newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): ConstructorTypeSyntax; - static create(newKeyword: ISyntaxToken, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): ConstructorTypeSyntax; - static create1(type: ITypeSyntax): ConstructorTypeSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ConstructorTypeSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ConstructorTypeSyntax; - public withNewKeyword(newKeyword: ISyntaxToken): ConstructorTypeSyntax; - public withTypeParameterList(typeParameterList: TypeParameterListSyntax): ConstructorTypeSyntax; - public withParameterList(parameterList: ParameterListSyntax): ConstructorTypeSyntax; - public withEqualsGreaterThanToken(equalsGreaterThanToken: ISyntaxToken): ConstructorTypeSyntax; - public withType(type: ITypeSyntax): ConstructorTypeSyntax; - public isTypeScriptSpecific(): boolean; + class LabeledStatementSyntax extends SyntaxNode implements IStatementSyntax { + identifier: ISyntaxToken; + colonToken: ISyntaxToken; + statement: IStatementSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax); + } + class DoStatementSyntax extends SyntaxNode implements IStatementSyntax { + doKeyword: ISyntaxToken; + statement: IStatementSyntax; + whileKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken); } - class FunctionTypeSyntax extends SyntaxNode implements ITypeSyntax { - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public type: ITypeSyntax; - constructor(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): FunctionTypeSyntax; - static create(parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax): FunctionTypeSyntax; - static create1(type: ITypeSyntax): FunctionTypeSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): FunctionTypeSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): FunctionTypeSyntax; - public withTypeParameterList(typeParameterList: TypeParameterListSyntax): FunctionTypeSyntax; - public withParameterList(parameterList: ParameterListSyntax): FunctionTypeSyntax; - public withEqualsGreaterThanToken(equalsGreaterThanToken: ISyntaxToken): FunctionTypeSyntax; - public withType(type: ITypeSyntax): FunctionTypeSyntax; - public isTypeScriptSpecific(): boolean; + class DebuggerStatementSyntax extends SyntaxNode implements IStatementSyntax { + debuggerKeyword: ISyntaxToken; + semicolonToken: ISyntaxToken; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken); } - class ObjectTypeSyntax extends SyntaxNode implements ITypeSyntax { - public openBraceToken: ISyntaxToken; - public typeMembers: ISeparatedSyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(openBraceToken: ISyntaxToken, typeMembers: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(openBraceToken: ISyntaxToken, typeMembers: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - static create(openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - static create1(): ObjectTypeSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ObjectTypeSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ObjectTypeSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): ObjectTypeSyntax; - public withTypeMembers(typeMembers: ISeparatedSyntaxList): ObjectTypeSyntax; - public withTypeMember(typeMember: ITypeMemberSyntax): ObjectTypeSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): ObjectTypeSyntax; - public isTypeScriptSpecific(): boolean; + class WithStatementSyntax extends SyntaxNode implements IStatementSyntax { + withKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + condition: IExpressionSyntax; + closeParenToken: ISyntaxToken; + statement: IStatementSyntax; + _statementBrand: any; + _moduleElementBrand: any; + constructor(data: number, withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax); } - class ArrayTypeSyntax extends SyntaxNode implements ITypeSyntax { - public type: ITypeSyntax; - public openBracketToken: ISyntaxToken; - public closeBracketToken: ISyntaxToken; - constructor(type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken): ArrayTypeSyntax; - static create1(type: ITypeSyntax): ArrayTypeSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ArrayTypeSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ArrayTypeSyntax; - public withType(type: ITypeSyntax): ArrayTypeSyntax; - public withOpenBracketToken(openBracketToken: ISyntaxToken): ArrayTypeSyntax; - public withCloseBracketToken(closeBracketToken: ISyntaxToken): ArrayTypeSyntax; - public isTypeScriptSpecific(): boolean; + class PrefixUnaryExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + operatorToken: ISyntaxToken; + operand: IUnaryExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax); + kind(): SyntaxKind; } - class GenericTypeSyntax extends SyntaxNode implements ITypeSyntax { - public name: INameSyntax; - public typeArgumentList: TypeArgumentListSyntax; - constructor(name: INameSyntax, typeArgumentList: TypeArgumentListSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(name: INameSyntax, typeArgumentList: TypeArgumentListSyntax): GenericTypeSyntax; - static create1(name: INameSyntax): GenericTypeSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): GenericTypeSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): GenericTypeSyntax; - public withName(name: INameSyntax): GenericTypeSyntax; - public withTypeArgumentList(typeArgumentList: TypeArgumentListSyntax): GenericTypeSyntax; - public isTypeScriptSpecific(): boolean; + class DeleteExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + deleteKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax); } - class TypeQuerySyntax extends SyntaxNode implements ITypeSyntax { - public typeOfKeyword: ISyntaxToken; - public name: INameSyntax; - constructor(typeOfKeyword: ISyntaxToken, name: INameSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isType(): boolean; - public update(typeOfKeyword: ISyntaxToken, name: INameSyntax): TypeQuerySyntax; - static create1(name: INameSyntax): TypeQuerySyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeQuerySyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeQuerySyntax; - public withTypeOfKeyword(typeOfKeyword: ISyntaxToken): TypeQuerySyntax; - public withName(name: INameSyntax): TypeQuerySyntax; - public isTypeScriptSpecific(): boolean; + class TypeOfExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + typeOfKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax); } - class TypeAnnotationSyntax extends SyntaxNode { - public colonToken: ISyntaxToken; - public type: ITypeSyntax; - constructor(colonToken: ISyntaxToken, type: ITypeSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(colonToken: ISyntaxToken, type: ITypeSyntax): TypeAnnotationSyntax; - static create1(type: ITypeSyntax): TypeAnnotationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeAnnotationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeAnnotationSyntax; - public withColonToken(colonToken: ISyntaxToken): TypeAnnotationSyntax; - public withType(type: ITypeSyntax): TypeAnnotationSyntax; - public isTypeScriptSpecific(): boolean; + class VoidExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + voidKeyword: ISyntaxToken; + expression: IUnaryExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax); } - class BlockSyntax extends SyntaxNode implements IStatementSyntax { - public openBraceToken: ISyntaxToken; - public statements: ISyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(openBraceToken: ISyntaxToken, statements: ISyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(openBraceToken: ISyntaxToken, statements: ISyntaxList, closeBraceToken: ISyntaxToken): BlockSyntax; - static create(openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): BlockSyntax; - static create1(): BlockSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): BlockSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): BlockSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): BlockSyntax; - public withStatements(statements: ISyntaxList): BlockSyntax; - public withStatement(statement: IStatementSyntax): BlockSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): BlockSyntax; - public isTypeScriptSpecific(): boolean; + class ConditionalExpressionSyntax extends SyntaxNode implements IExpressionSyntax { + condition: IExpressionSyntax; + questionToken: ISyntaxToken; + whenTrue: IExpressionSyntax; + colonToken: ISyntaxToken; + whenFalse: IExpressionSyntax; + _expressionBrand: any; + constructor(data: number, condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax); } - class ParameterSyntax extends SyntaxNode { - public dotDotDotToken: ISyntaxToken; - public modifiers: ISyntaxList; - public identifier: ISyntaxToken; - public questionToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(dotDotDotToken: ISyntaxToken, modifiers: ISyntaxList, identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(dotDotDotToken: ISyntaxToken, modifiers: ISyntaxList, identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax): ParameterSyntax; - static create(identifier: ISyntaxToken): ParameterSyntax; - static create1(identifier: ISyntaxToken): ParameterSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ParameterSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ParameterSyntax; - public withDotDotDotToken(dotDotDotToken: ISyntaxToken): ParameterSyntax; - public withModifiers(modifiers: ISyntaxList): ParameterSyntax; - public withModifier(modifier: ISyntaxToken): ParameterSyntax; - public withIdentifier(identifier: ISyntaxToken): ParameterSyntax; - public withQuestionToken(questionToken: ISyntaxToken): ParameterSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): ParameterSyntax; - public withEqualsValueClause(equalsValueClause: EqualsValueClauseSyntax): ParameterSyntax; - public isTypeScriptSpecific(): boolean; - } - class MemberAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax { - public expression: IExpressionSyntax; - public dotToken: ISyntaxToken; - public name: ISyntaxToken; - constructor(expression: IExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(expression: IExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken): MemberAccessExpressionSyntax; - static create1(expression: IExpressionSyntax, name: ISyntaxToken): MemberAccessExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): MemberAccessExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): MemberAccessExpressionSyntax; - public withExpression(expression: IExpressionSyntax): MemberAccessExpressionSyntax; - public withDotToken(dotToken: ISyntaxToken): MemberAccessExpressionSyntax; - public withName(name: ISyntaxToken): MemberAccessExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class BinaryExpressionSyntax extends SyntaxNode implements IExpressionSyntax { + left: IExpressionSyntax; + operatorToken: ISyntaxToken; + right: IExpressionSyntax; + _expressionBrand: any; + constructor(data: number, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax); + kind(): SyntaxKind; } class PostfixUnaryExpressionSyntax extends SyntaxNode implements IPostfixExpressionSyntax { - public operand: IMemberExpressionSyntax; - public operatorToken: ISyntaxToken; - private _kind; - constructor(kind: SyntaxKind, operand: IMemberExpressionSyntax, operatorToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public kind(): SyntaxKind; - public update(kind: SyntaxKind, operand: IMemberExpressionSyntax, operatorToken: ISyntaxToken): PostfixUnaryExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): PostfixUnaryExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): PostfixUnaryExpressionSyntax; - public withKind(kind: SyntaxKind): PostfixUnaryExpressionSyntax; - public withOperand(operand: IMemberExpressionSyntax): PostfixUnaryExpressionSyntax; - public withOperatorToken(operatorToken: ISyntaxToken): PostfixUnaryExpressionSyntax; - public isTypeScriptSpecific(): boolean; - } - class ElementAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax { - public expression: IExpressionSyntax; - public openBracketToken: ISyntaxToken; - public argumentExpression: IExpressionSyntax; - public closeBracketToken: ISyntaxToken; - constructor(expression: IExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(expression: IExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - static create1(expression: IExpressionSyntax, argumentExpression: IExpressionSyntax): ElementAccessExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ElementAccessExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ElementAccessExpressionSyntax; - public withExpression(expression: IExpressionSyntax): ElementAccessExpressionSyntax; - public withOpenBracketToken(openBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - public withArgumentExpression(argumentExpression: IExpressionSyntax): ElementAccessExpressionSyntax; - public withCloseBracketToken(closeBracketToken: ISyntaxToken): ElementAccessExpressionSyntax; - public isTypeScriptSpecific(): boolean; - } - class InvocationExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax { - public expression: IMemberExpressionSyntax; - public argumentList: ArgumentListSyntax; - constructor(expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): InvocationExpressionSyntax; - static create1(expression: IMemberExpressionSyntax): InvocationExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): InvocationExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): InvocationExpressionSyntax; - public withExpression(expression: IMemberExpressionSyntax): InvocationExpressionSyntax; - public withArgumentList(argumentList: ArgumentListSyntax): InvocationExpressionSyntax; - public isTypeScriptSpecific(): boolean; - } - class ArgumentListSyntax extends SyntaxNode { - public typeArgumentList: TypeArgumentListSyntax; - public openParenToken: ISyntaxToken; - public closeParenToken: ISyntaxToken; - public arguments: ISeparatedSyntaxList; - constructor(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ArgumentListSyntax; - static create(openParenToken: ISyntaxToken, closeParenToken: ISyntaxToken): ArgumentListSyntax; - static create1(): ArgumentListSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ArgumentListSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ArgumentListSyntax; - public withTypeArgumentList(typeArgumentList: TypeArgumentListSyntax): ArgumentListSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ArgumentListSyntax; - public withArguments(_arguments: ISeparatedSyntaxList): ArgumentListSyntax; - public withArgument(_argument: IExpressionSyntax): ArgumentListSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ArgumentListSyntax; - public isTypeScriptSpecific(): boolean; + operand: ILeftHandSideExpressionSyntax; + operatorToken: ISyntaxToken; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, operand: ILeftHandSideExpressionSyntax, operatorToken: ISyntaxToken); + kind(): SyntaxKind; } - class BinaryExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - public left: IExpressionSyntax; - public operatorToken: ISyntaxToken; - public right: IExpressionSyntax; - private _kind; - constructor(kind: SyntaxKind, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isExpression(): boolean; - public kind(): SyntaxKind; - public update(kind: SyntaxKind, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax): BinaryExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): BinaryExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): BinaryExpressionSyntax; - public withKind(kind: SyntaxKind): BinaryExpressionSyntax; - public withLeft(left: IExpressionSyntax): BinaryExpressionSyntax; - public withOperatorToken(operatorToken: ISyntaxToken): BinaryExpressionSyntax; - public withRight(right: IExpressionSyntax): BinaryExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class MemberAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + dotToken: ISyntaxToken; + name: ISyntaxToken; + _memberExpressionBrand: any; + _callExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, expression: ILeftHandSideExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken); + } + class InvocationExpressionSyntax extends SyntaxNode implements ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + argumentList: ArgumentListSyntax; + _callExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, expression: ILeftHandSideExpressionSyntax, argumentList: ArgumentListSyntax); } - class ConditionalExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - public condition: IExpressionSyntax; - public questionToken: ISyntaxToken; - public whenTrue: IExpressionSyntax; - public colonToken: ISyntaxToken; - public whenFalse: IExpressionSyntax; - constructor(condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isExpression(): boolean; - public update(condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - static create1(condition: IExpressionSyntax, whenTrue: IExpressionSyntax, whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ConditionalExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ConditionalExpressionSyntax; - public withCondition(condition: IExpressionSyntax): ConditionalExpressionSyntax; - public withQuestionToken(questionToken: ISyntaxToken): ConditionalExpressionSyntax; - public withWhenTrue(whenTrue: IExpressionSyntax): ConditionalExpressionSyntax; - public withColonToken(colonToken: ISyntaxToken): ConditionalExpressionSyntax; - public withWhenFalse(whenFalse: IExpressionSyntax): ConditionalExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class ArrayLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { + openBracketToken: ISyntaxToken; + expressions: IExpressionSyntax[]; + closeBracketToken: ISyntaxToken; + _primaryExpressionBrand: any; + _memberExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, openBracketToken: ISyntaxToken, expressions: IExpressionSyntax[], closeBracketToken: ISyntaxToken); } - class ConstructSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public newKeyword: ISyntaxToken; - public callSignature: CallSignatureSyntax; - constructor(newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isTypeMember(): boolean; - public update(newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax): ConstructSignatureSyntax; - static create1(): ConstructSignatureSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ConstructSignatureSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ConstructSignatureSyntax; - public withNewKeyword(newKeyword: ISyntaxToken): ConstructSignatureSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): ConstructSignatureSyntax; - public isTypeScriptSpecific(): boolean; + class ObjectLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { + openBraceToken: ISyntaxToken; + propertyAssignments: IPropertyAssignmentSyntax[]; + closeBraceToken: ISyntaxToken; + _primaryExpressionBrand: any; + _memberExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, openBraceToken: ISyntaxToken, propertyAssignments: IPropertyAssignmentSyntax[], closeBraceToken: ISyntaxToken); + } + class ObjectCreationExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { + newKeyword: ISyntaxToken; + expression: IMemberExpressionSyntax; + argumentList: ArgumentListSyntax; + _primaryExpressionBrand: any; + _memberExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax); } - class MethodSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public propertyName: ISyntaxToken; - public questionToken: ISyntaxToken; - public callSignature: CallSignatureSyntax; - constructor(propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isTypeMember(): boolean; - public update(propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax; - static create(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax; - static create1(propertyName: ISyntaxToken): MethodSignatureSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): MethodSignatureSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): MethodSignatureSyntax; - public withPropertyName(propertyName: ISyntaxToken): MethodSignatureSyntax; - public withQuestionToken(questionToken: ISyntaxToken): MethodSignatureSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): MethodSignatureSyntax; - public isTypeScriptSpecific(): boolean; + class ParenthesizedExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { + openParenToken: ISyntaxToken; + expression: IExpressionSyntax; + closeParenToken: ISyntaxToken; + _primaryExpressionBrand: any; + _memberExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken); + } + class ParenthesizedArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + callSignature: CallSignatureSyntax; + equalsGreaterThanToken: ISyntaxToken; + block: BlockSyntax; + expression: IExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax); } - class IndexSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public openBracketToken: ISyntaxToken; - public parameter: ParameterSyntax; - public closeBracketToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - constructor(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isTypeMember(): boolean; - public update(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): IndexSignatureSyntax; - static create(openBracketToken: ISyntaxToken, parameter: ParameterSyntax, closeBracketToken: ISyntaxToken): IndexSignatureSyntax; - static create1(parameter: ParameterSyntax): IndexSignatureSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): IndexSignatureSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): IndexSignatureSyntax; - public withOpenBracketToken(openBracketToken: ISyntaxToken): IndexSignatureSyntax; - public withParameter(parameter: ParameterSyntax): IndexSignatureSyntax; - public withCloseBracketToken(closeBracketToken: ISyntaxToken): IndexSignatureSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): IndexSignatureSyntax; - public isTypeScriptSpecific(): boolean; + class SimpleArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + parameter: ParameterSyntax; + equalsGreaterThanToken: ISyntaxToken; + block: BlockSyntax; + expression: IExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, parameter: ParameterSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax); } - class PropertySignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public propertyName: ISyntaxToken; - public questionToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - constructor(propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isTypeMember(): boolean; - public update(propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax): PropertySignatureSyntax; - static create(propertyName: ISyntaxToken): PropertySignatureSyntax; - static create1(propertyName: ISyntaxToken): PropertySignatureSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): PropertySignatureSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): PropertySignatureSyntax; - public withPropertyName(propertyName: ISyntaxToken): PropertySignatureSyntax; - public withQuestionToken(questionToken: ISyntaxToken): PropertySignatureSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): PropertySignatureSyntax; - public isTypeScriptSpecific(): boolean; + class CastExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { + lessThanToken: ISyntaxToken; + type: ITypeSyntax; + greaterThanToken: ISyntaxToken; + expression: IUnaryExpressionSyntax; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax); + } + class ElementAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { + expression: ILeftHandSideExpressionSyntax; + openBracketToken: ISyntaxToken; + argumentExpression: IExpressionSyntax; + closeBracketToken: ISyntaxToken; + _memberExpressionBrand: any; + _callExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken); } - class CallSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public typeAnnotation: TypeAnnotationSyntax; - constructor(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isTypeMember(): boolean; - public update(typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax): CallSignatureSyntax; - static create(parameterList: ParameterListSyntax): CallSignatureSyntax; - static create1(): CallSignatureSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): CallSignatureSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): CallSignatureSyntax; - public withTypeParameterList(typeParameterList: TypeParameterListSyntax): CallSignatureSyntax; - public withParameterList(parameterList: ParameterListSyntax): CallSignatureSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): CallSignatureSyntax; - public isTypeScriptSpecific(): boolean; + class FunctionExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { + functionKeyword: ISyntaxToken; + identifier: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + _primaryExpressionBrand: any; + _memberExpressionBrand: any; + _leftHandSideExpressionBrand: any; + _postfixExpressionBrand: any; + _unaryExpressionBrand: any; + _expressionBrand: any; + constructor(data: number, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax); } - class ParameterListSyntax extends SyntaxNode { - public openParenToken: ISyntaxToken; - public parameters: ISeparatedSyntaxList; - public closeParenToken: ISyntaxToken; - constructor(openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken): ParameterListSyntax; - static create(openParenToken: ISyntaxToken, closeParenToken: ISyntaxToken): ParameterListSyntax; - static create1(): ParameterListSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ParameterListSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ParameterListSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ParameterListSyntax; - public withParameters(parameters: ISeparatedSyntaxList): ParameterListSyntax; - public withParameter(parameter: ParameterSyntax): ParameterListSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ParameterListSyntax; - public isTypeScriptSpecific(): boolean; + class OmittedExpressionSyntax extends SyntaxNode implements IExpressionSyntax { + _expressionBrand: any; + constructor(data: number); } - class TypeParameterListSyntax extends SyntaxNode { - public lessThanToken: ISyntaxToken; - public typeParameters: ISeparatedSyntaxList; - public greaterThanToken: ISyntaxToken; - constructor(lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - static create(lessThanToken: ISyntaxToken, greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - static create1(): TypeParameterListSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeParameterListSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeParameterListSyntax; - public withLessThanToken(lessThanToken: ISyntaxToken): TypeParameterListSyntax; - public withTypeParameters(typeParameters: ISeparatedSyntaxList): TypeParameterListSyntax; - public withTypeParameter(typeParameter: TypeParameterSyntax): TypeParameterListSyntax; - public withGreaterThanToken(greaterThanToken: ISyntaxToken): TypeParameterListSyntax; - public isTypeScriptSpecific(): boolean; + class VariableDeclarationSyntax extends SyntaxNode { + varKeyword: ISyntaxToken; + variableDeclarators: VariableDeclaratorSyntax[]; + constructor(data: number, varKeyword: ISyntaxToken, variableDeclarators: VariableDeclaratorSyntax[]); } - class TypeParameterSyntax extends SyntaxNode { - public identifier: ISyntaxToken; - public constraint: ConstraintSyntax; - constructor(identifier: ISyntaxToken, constraint: ConstraintSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(identifier: ISyntaxToken, constraint: ConstraintSyntax): TypeParameterSyntax; - static create(identifier: ISyntaxToken): TypeParameterSyntax; - static create1(identifier: ISyntaxToken): TypeParameterSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeParameterSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeParameterSyntax; - public withIdentifier(identifier: ISyntaxToken): TypeParameterSyntax; - public withConstraint(constraint: ConstraintSyntax): TypeParameterSyntax; - public isTypeScriptSpecific(): boolean; + class VariableDeclaratorSyntax extends SyntaxNode { + propertyName: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + equalsValueClause: EqualsValueClauseSyntax; + constructor(data: number, propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax); } - class ConstraintSyntax extends SyntaxNode { - public extendsKeyword: ISyntaxToken; - public type: ITypeSyntax; - constructor(extendsKeyword: ISyntaxToken, type: ITypeSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(extendsKeyword: ISyntaxToken, type: ITypeSyntax): ConstraintSyntax; - static create1(type: ITypeSyntax): ConstraintSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ConstraintSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ConstraintSyntax; - public withExtendsKeyword(extendsKeyword: ISyntaxToken): ConstraintSyntax; - public withType(type: ITypeSyntax): ConstraintSyntax; - public isTypeScriptSpecific(): boolean; + class ArgumentListSyntax extends SyntaxNode { + typeArgumentList: TypeArgumentListSyntax; + openParenToken: ISyntaxToken; + arguments: IExpressionSyntax[]; + closeParenToken: ISyntaxToken; + constructor(data: number, typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: IExpressionSyntax[], closeParenToken: ISyntaxToken); } - class ElseClauseSyntax extends SyntaxNode { - public elseKeyword: ISyntaxToken; - public statement: IStatementSyntax; - constructor(elseKeyword: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(elseKeyword: ISyntaxToken, statement: IStatementSyntax): ElseClauseSyntax; - static create1(statement: IStatementSyntax): ElseClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ElseClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ElseClauseSyntax; - public withElseKeyword(elseKeyword: ISyntaxToken): ElseClauseSyntax; - public withStatement(statement: IStatementSyntax): ElseClauseSyntax; - public isTypeScriptSpecific(): boolean; + class ParameterListSyntax extends SyntaxNode { + openParenToken: ISyntaxToken; + parameters: ParameterSyntax[]; + closeParenToken: ISyntaxToken; + constructor(data: number, openParenToken: ISyntaxToken, parameters: ParameterSyntax[], closeParenToken: ISyntaxToken); } - class IfStatementSyntax extends SyntaxNode implements IStatementSyntax { - public ifKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public elseClause: ElseClauseSyntax; - constructor(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax): IfStatementSyntax; - static create(ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): IfStatementSyntax; - static create1(condition: IExpressionSyntax, statement: IStatementSyntax): IfStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): IfStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): IfStatementSyntax; - public withIfKeyword(ifKeyword: ISyntaxToken): IfStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): IfStatementSyntax; - public withCondition(condition: IExpressionSyntax): IfStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): IfStatementSyntax; - public withStatement(statement: IStatementSyntax): IfStatementSyntax; - public withElseClause(elseClause: ElseClauseSyntax): IfStatementSyntax; - public isTypeScriptSpecific(): boolean; + class TypeArgumentListSyntax extends SyntaxNode { + lessThanToken: ISyntaxToken; + typeArguments: ITypeSyntax[]; + greaterThanToken: ISyntaxToken; + constructor(data: number, lessThanToken: ISyntaxToken, typeArguments: ITypeSyntax[], greaterThanToken: ISyntaxToken); } - class ExpressionStatementSyntax extends SyntaxNode implements IStatementSyntax { - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - constructor(expression: IExpressionSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ExpressionStatementSyntax; - static create1(expression: IExpressionSyntax): ExpressionStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ExpressionStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ExpressionStatementSyntax; - public withExpression(expression: IExpressionSyntax): ExpressionStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ExpressionStatementSyntax; - public isTypeScriptSpecific(): boolean; + class TypeParameterListSyntax extends SyntaxNode { + lessThanToken: ISyntaxToken; + typeParameters: TypeParameterSyntax[]; + greaterThanToken: ISyntaxToken; + constructor(data: number, lessThanToken: ISyntaxToken, typeParameters: TypeParameterSyntax[], greaterThanToken: ISyntaxToken); } - class ConstructorDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { - public modifiers: ISyntaxList; - public constructorKeyword: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): ConstructorDeclarationSyntax; - static create(constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax): ConstructorDeclarationSyntax; - static create1(): ConstructorDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ConstructorDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ConstructorDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): ConstructorDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): ConstructorDeclarationSyntax; - public withConstructorKeyword(constructorKeyword: ISyntaxToken): ConstructorDeclarationSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): ConstructorDeclarationSyntax; - public withBlock(block: BlockSyntax): ConstructorDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ConstructorDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class HeritageClauseSyntax extends SyntaxNode { + extendsOrImplementsKeyword: ISyntaxToken; + typeNames: INameSyntax[]; + constructor(data: number, extendsOrImplementsKeyword: ISyntaxToken, typeNames: INameSyntax[]); + kind(): SyntaxKind; } - class MemberFunctionDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { - public modifiers: ISyntaxList; - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberDeclaration(): boolean; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken): MemberFunctionDeclarationSyntax; - static create(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax): MemberFunctionDeclarationSyntax; - static create1(propertyName: ISyntaxToken): MemberFunctionDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): MemberFunctionDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): MemberFunctionDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): MemberFunctionDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): MemberFunctionDeclarationSyntax; - public withPropertyName(propertyName: ISyntaxToken): MemberFunctionDeclarationSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): MemberFunctionDeclarationSyntax; - public withBlock(block: BlockSyntax): MemberFunctionDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): MemberFunctionDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class EqualsValueClauseSyntax extends SyntaxNode { + equalsToken: ISyntaxToken; + value: IExpressionSyntax; + constructor(data: number, equalsToken: ISyntaxToken, value: IExpressionSyntax); } - class GetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { - public modifiers: ISyntaxList; - public getKeyword: ISyntaxToken; - public propertyName: ISyntaxToken; - public parameterList: ParameterListSyntax; - public typeAnnotation: TypeAnnotationSyntax; - public block: BlockSyntax; - constructor(modifiers: ISyntaxList, getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberDeclaration(): boolean; - public isPropertyAssignment(): boolean; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, block: BlockSyntax): GetAccessorSyntax; - static create(getKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): GetAccessorSyntax; - static create1(propertyName: ISyntaxToken): GetAccessorSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): GetAccessorSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): GetAccessorSyntax; - public withModifiers(modifiers: ISyntaxList): GetAccessorSyntax; - public withModifier(modifier: ISyntaxToken): GetAccessorSyntax; - public withGetKeyword(getKeyword: ISyntaxToken): GetAccessorSyntax; - public withPropertyName(propertyName: ISyntaxToken): GetAccessorSyntax; - public withParameterList(parameterList: ParameterListSyntax): GetAccessorSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): GetAccessorSyntax; - public withBlock(block: BlockSyntax): GetAccessorSyntax; - public isTypeScriptSpecific(): boolean; + class CaseSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { + caseKeyword: ISyntaxToken; + expression: IExpressionSyntax; + colonToken: ISyntaxToken; + statements: IStatementSyntax[]; + _switchClauseBrand: any; + constructor(data: number, caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: IStatementSyntax[]); } - class SetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { - public modifiers: ISyntaxList; - public setKeyword: ISyntaxToken; - public propertyName: ISyntaxToken; - public parameterList: ParameterListSyntax; - public block: BlockSyntax; - constructor(modifiers: ISyntaxList, setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberDeclaration(): boolean; - public isPropertyAssignment(): boolean; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): SetAccessorSyntax; - static create(setKeyword: ISyntaxToken, propertyName: ISyntaxToken, parameterList: ParameterListSyntax, block: BlockSyntax): SetAccessorSyntax; - static create1(propertyName: ISyntaxToken): SetAccessorSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SetAccessorSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SetAccessorSyntax; - public withModifiers(modifiers: ISyntaxList): SetAccessorSyntax; - public withModifier(modifier: ISyntaxToken): SetAccessorSyntax; - public withSetKeyword(setKeyword: ISyntaxToken): SetAccessorSyntax; - public withPropertyName(propertyName: ISyntaxToken): SetAccessorSyntax; - public withParameterList(parameterList: ParameterListSyntax): SetAccessorSyntax; - public withBlock(block: BlockSyntax): SetAccessorSyntax; - public isTypeScriptSpecific(): boolean; + class DefaultSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { + defaultKeyword: ISyntaxToken; + colonToken: ISyntaxToken; + statements: IStatementSyntax[]; + _switchClauseBrand: any; + constructor(data: number, defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: IStatementSyntax[]); } - class MemberVariableDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { - public modifiers: ISyntaxList; - public variableDeclarator: VariableDeclaratorSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberDeclaration(): boolean; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - static create(variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - static create1(variableDeclarator: VariableDeclaratorSyntax): MemberVariableDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): MemberVariableDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): MemberVariableDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): MemberVariableDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): MemberVariableDeclarationSyntax; - public withVariableDeclarator(variableDeclarator: VariableDeclaratorSyntax): MemberVariableDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): MemberVariableDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class ElseClauseSyntax extends SyntaxNode { + elseKeyword: ISyntaxToken; + statement: IStatementSyntax; + constructor(data: number, elseKeyword: ISyntaxToken, statement: IStatementSyntax); } - class IndexMemberDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { - public modifiers: ISyntaxList; - public indexSignature: IndexSignatureSyntax; - public semicolonToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isClassElement(): boolean; - public update(modifiers: ISyntaxList, indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - static create(indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - static create1(indexSignature: IndexSignatureSyntax): IndexMemberDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): IndexMemberDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): IndexMemberDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): IndexMemberDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): IndexMemberDeclarationSyntax; - public withIndexSignature(indexSignature: IndexSignatureSyntax): IndexMemberDeclarationSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class CatchClauseSyntax extends SyntaxNode { + catchKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + identifier: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + closeParenToken: ISyntaxToken; + block: BlockSyntax; + constructor(data: number, catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax); } - class ThrowStatementSyntax extends SyntaxNode implements IStatementSyntax { - public throwKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - constructor(throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ThrowStatementSyntax; - static create1(expression: IExpressionSyntax): ThrowStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ThrowStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ThrowStatementSyntax; - public withThrowKeyword(throwKeyword: ISyntaxToken): ThrowStatementSyntax; - public withExpression(expression: IExpressionSyntax): ThrowStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ThrowStatementSyntax; - public isTypeScriptSpecific(): boolean; + class FinallyClauseSyntax extends SyntaxNode { + finallyKeyword: ISyntaxToken; + block: BlockSyntax; + constructor(data: number, finallyKeyword: ISyntaxToken, block: BlockSyntax); } - class ReturnStatementSyntax extends SyntaxNode implements IStatementSyntax { - public returnKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - constructor(returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken): ReturnStatementSyntax; - static create(returnKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): ReturnStatementSyntax; - static create1(): ReturnStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ReturnStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ReturnStatementSyntax; - public withReturnKeyword(returnKeyword: ISyntaxToken): ReturnStatementSyntax; - public withExpression(expression: IExpressionSyntax): ReturnStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ReturnStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class ObjectCreationExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax { - public newKeyword: ISyntaxToken; - public expression: IMemberExpressionSyntax; - public argumentList: ArgumentListSyntax; - constructor(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax): ObjectCreationExpressionSyntax; - static create(newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax): ObjectCreationExpressionSyntax; - static create1(expression: IMemberExpressionSyntax): ObjectCreationExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ObjectCreationExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ObjectCreationExpressionSyntax; - public withNewKeyword(newKeyword: ISyntaxToken): ObjectCreationExpressionSyntax; - public withExpression(expression: IMemberExpressionSyntax): ObjectCreationExpressionSyntax; - public withArgumentList(argumentList: ArgumentListSyntax): ObjectCreationExpressionSyntax; - public isTypeScriptSpecific(): boolean; + class TypeParameterSyntax extends SyntaxNode { + identifier: ISyntaxToken; + constraint: ConstraintSyntax; + constructor(data: number, identifier: ISyntaxToken, constraint: ConstraintSyntax); } - class SwitchStatementSyntax extends SyntaxNode implements IStatementSyntax { - public switchKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public switchClauses: ISyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISyntaxList, closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - static create(switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - static create1(expression: IExpressionSyntax): SwitchStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SwitchStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SwitchStatementSyntax; - public withSwitchKeyword(switchKeyword: ISyntaxToken): SwitchStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): SwitchStatementSyntax; - public withExpression(expression: IExpressionSyntax): SwitchStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): SwitchStatementSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): SwitchStatementSyntax; - public withSwitchClauses(switchClauses: ISyntaxList): SwitchStatementSyntax; - public withSwitchClause(switchClause: ISwitchClauseSyntax): SwitchStatementSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): SwitchStatementSyntax; - public isTypeScriptSpecific(): boolean; + class ConstraintSyntax extends SyntaxNode { + extendsKeyword: ISyntaxToken; + typeOrExpression: ISyntaxNodeOrToken; + constructor(data: number, extendsKeyword: ISyntaxToken, typeOrExpression: ISyntaxNodeOrToken); } - class CaseSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { - public caseKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public colonToken: ISyntaxToken; - public statements: ISyntaxList; - constructor(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: ISyntaxList, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isSwitchClause(): boolean; - public update(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: ISyntaxList): CaseSwitchClauseSyntax; - static create(caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken): CaseSwitchClauseSyntax; - static create1(expression: IExpressionSyntax): CaseSwitchClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): CaseSwitchClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): CaseSwitchClauseSyntax; - public withCaseKeyword(caseKeyword: ISyntaxToken): CaseSwitchClauseSyntax; - public withExpression(expression: IExpressionSyntax): CaseSwitchClauseSyntax; - public withColonToken(colonToken: ISyntaxToken): CaseSwitchClauseSyntax; - public withStatements(statements: ISyntaxList): CaseSwitchClauseSyntax; - public withStatement(statement: IStatementSyntax): CaseSwitchClauseSyntax; - public isTypeScriptSpecific(): boolean; + class SimplePropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { + propertyName: ISyntaxToken; + colonToken: ISyntaxToken; + expression: IExpressionSyntax; + _propertyAssignmentBrand: any; + constructor(data: number, propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax); } - class DefaultSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { - public defaultKeyword: ISyntaxToken; - public colonToken: ISyntaxToken; - public statements: ISyntaxList; - constructor(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: ISyntaxList, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isSwitchClause(): boolean; - public update(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: ISyntaxList): DefaultSwitchClauseSyntax; - static create(defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken): DefaultSwitchClauseSyntax; - static create1(): DefaultSwitchClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): DefaultSwitchClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): DefaultSwitchClauseSyntax; - public withDefaultKeyword(defaultKeyword: ISyntaxToken): DefaultSwitchClauseSyntax; - public withColonToken(colonToken: ISyntaxToken): DefaultSwitchClauseSyntax; - public withStatements(statements: ISyntaxList): DefaultSwitchClauseSyntax; - public withStatement(statement: IStatementSyntax): DefaultSwitchClauseSyntax; - public isTypeScriptSpecific(): boolean; + class FunctionPropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { + propertyName: ISyntaxToken; + callSignature: CallSignatureSyntax; + block: BlockSyntax; + _propertyAssignmentBrand: any; + constructor(data: number, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax); } - class BreakStatementSyntax extends SyntaxNode implements IStatementSyntax { - public breakKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - constructor(breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): BreakStatementSyntax; - static create(breakKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): BreakStatementSyntax; - static create1(): BreakStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): BreakStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): BreakStatementSyntax; - public withBreakKeyword(breakKeyword: ISyntaxToken): BreakStatementSyntax; - public withIdentifier(identifier: ISyntaxToken): BreakStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): BreakStatementSyntax; - public isTypeScriptSpecific(): boolean; + class ParameterSyntax extends SyntaxNode { + dotDotDotToken: ISyntaxToken; + modifiers: ISyntaxToken[]; + identifier: ISyntaxToken; + questionToken: ISyntaxToken; + typeAnnotation: TypeAnnotationSyntax; + equalsValueClause: EqualsValueClauseSyntax; + constructor(data: number, dotDotDotToken: ISyntaxToken, modifiers: ISyntaxToken[], identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax); } - class ContinueStatementSyntax extends SyntaxNode implements IStatementSyntax { - public continueKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - constructor(continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken): ContinueStatementSyntax; - static create(continueKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): ContinueStatementSyntax; - static create1(): ContinueStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ContinueStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ContinueStatementSyntax; - public withContinueKeyword(continueKeyword: ISyntaxToken): ContinueStatementSyntax; - public withIdentifier(identifier: ISyntaxToken): ContinueStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): ContinueStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class ForStatementSyntax extends SyntaxNode implements IIterationStatementSyntax { - public forKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public variableDeclaration: VariableDeclarationSyntax; - public initializer: IExpressionSyntax; - public firstSemicolonToken: ISyntaxToken; - public condition: IExpressionSyntax; - public secondSemicolonToken: ISyntaxToken; - public incrementor: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - constructor(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isIterationStatement(): boolean; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForStatementSyntax; - static create(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, firstSemicolonToken: ISyntaxToken, secondSemicolonToken: ISyntaxToken, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForStatementSyntax; - static create1(statement: IStatementSyntax): ForStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ForStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ForStatementSyntax; - public withForKeyword(forKeyword: ISyntaxToken): ForStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ForStatementSyntax; - public withVariableDeclaration(variableDeclaration: VariableDeclarationSyntax): ForStatementSyntax; - public withInitializer(initializer: IExpressionSyntax): ForStatementSyntax; - public withFirstSemicolonToken(firstSemicolonToken: ISyntaxToken): ForStatementSyntax; - public withCondition(condition: IExpressionSyntax): ForStatementSyntax; - public withSecondSemicolonToken(secondSemicolonToken: ISyntaxToken): ForStatementSyntax; - public withIncrementor(incrementor: IExpressionSyntax): ForStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ForStatementSyntax; - public withStatement(statement: IStatementSyntax): ForStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class ForInStatementSyntax extends SyntaxNode implements IIterationStatementSyntax { - public forKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public variableDeclaration: VariableDeclarationSyntax; - public left: IExpressionSyntax; - public inKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - constructor(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isIterationStatement(): boolean; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForInStatementSyntax; - static create(forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): ForInStatementSyntax; - static create1(expression: IExpressionSyntax, statement: IStatementSyntax): ForInStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ForInStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ForInStatementSyntax; - public withForKeyword(forKeyword: ISyntaxToken): ForInStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): ForInStatementSyntax; - public withVariableDeclaration(variableDeclaration: VariableDeclarationSyntax): ForInStatementSyntax; - public withLeft(left: IExpressionSyntax): ForInStatementSyntax; - public withInKeyword(inKeyword: ISyntaxToken): ForInStatementSyntax; - public withExpression(expression: IExpressionSyntax): ForInStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): ForInStatementSyntax; - public withStatement(statement: IStatementSyntax): ForInStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class WhileStatementSyntax extends SyntaxNode implements IIterationStatementSyntax { - public whileKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - constructor(whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isIterationStatement(): boolean; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WhileStatementSyntax; - static create1(condition: IExpressionSyntax, statement: IStatementSyntax): WhileStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): WhileStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): WhileStatementSyntax; - public withWhileKeyword(whileKeyword: ISyntaxToken): WhileStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): WhileStatementSyntax; - public withCondition(condition: IExpressionSyntax): WhileStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): WhileStatementSyntax; - public withStatement(statement: IStatementSyntax): WhileStatementSyntax; - public isTypeScriptSpecific(): boolean; + class EnumElementSyntax extends SyntaxNode { + propertyName: ISyntaxToken; + equalsValueClause: EqualsValueClauseSyntax; + constructor(data: number, propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax); } - class WithStatementSyntax extends SyntaxNode implements IStatementSyntax { - public withKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - constructor(withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax): WithStatementSyntax; - static create1(condition: IExpressionSyntax, statement: IStatementSyntax): WithStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): WithStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): WithStatementSyntax; - public withWithKeyword(withKeyword: ISyntaxToken): WithStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): WithStatementSyntax; - public withCondition(condition: IExpressionSyntax): WithStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): WithStatementSyntax; - public withStatement(statement: IStatementSyntax): WithStatementSyntax; - public isTypeScriptSpecific(): boolean; + class TypeAnnotationSyntax extends SyntaxNode { + colonToken: ISyntaxToken; + type: ITypeSyntax; + constructor(data: number, colonToken: ISyntaxToken, type: ITypeSyntax); } - class EnumDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxList; - public enumKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public enumElements: ISeparatedSyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(modifiers: ISyntaxList, enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isModuleElement(): boolean; - public update(modifiers: ISyntaxList, enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - static create(enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - static create1(identifier: ISyntaxToken): EnumDeclarationSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): EnumDeclarationSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): EnumDeclarationSyntax; - public withModifiers(modifiers: ISyntaxList): EnumDeclarationSyntax; - public withModifier(modifier: ISyntaxToken): EnumDeclarationSyntax; - public withEnumKeyword(enumKeyword: ISyntaxToken): EnumDeclarationSyntax; - public withIdentifier(identifier: ISyntaxToken): EnumDeclarationSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): EnumDeclarationSyntax; - public withEnumElements(enumElements: ISeparatedSyntaxList): EnumDeclarationSyntax; - public withEnumElement(enumElement: EnumElementSyntax): EnumDeclarationSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): EnumDeclarationSyntax; - public isTypeScriptSpecific(): boolean; + class ExternalModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { + requireKeyword: ISyntaxToken; + openParenToken: ISyntaxToken; + stringLiteral: ISyntaxToken; + closeParenToken: ISyntaxToken; + _moduleReferenceBrand: any; + constructor(data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken); } - class EnumElementSyntax extends SyntaxNode { - public propertyName: ISyntaxToken; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax): EnumElementSyntax; - static create(propertyName: ISyntaxToken): EnumElementSyntax; - static create1(propertyName: ISyntaxToken): EnumElementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): EnumElementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): EnumElementSyntax; - public withPropertyName(propertyName: ISyntaxToken): EnumElementSyntax; - public withEqualsValueClause(equalsValueClause: EqualsValueClauseSyntax): EnumElementSyntax; - public isTypeScriptSpecific(): boolean; + class ModuleNameModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { + moduleName: INameSyntax; + _moduleReferenceBrand: any; + constructor(data: number, moduleName: INameSyntax); } - class CastExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public lessThanToken: ISyntaxToken; - public type: ITypeSyntax; - public greaterThanToken: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - constructor(lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax): CastExpressionSyntax; - static create1(type: ITypeSyntax, expression: IUnaryExpressionSyntax): CastExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): CastExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): CastExpressionSyntax; - public withLessThanToken(lessThanToken: ISyntaxToken): CastExpressionSyntax; - public withType(type: ITypeSyntax): CastExpressionSyntax; - public withGreaterThanToken(greaterThanToken: ISyntaxToken): CastExpressionSyntax; - public withExpression(expression: IUnaryExpressionSyntax): CastExpressionSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript { + var syntaxDiagnosticsTime: number; + class SyntaxTree { + text: ISimpleText; + private _isConcrete; + private _sourceUnit; + private _isDeclaration; + private _parserDiagnostics; + private _allDiagnostics; + private _fileName; + private _lineMap; + private _languageVersion; + private _amdDependencies; + private _isExternalModule; + constructor(isConcrete: boolean, sourceUnit: SourceUnitSyntax, isDeclaration: boolean, diagnostics: Diagnostic[], fileName: string, text: ISimpleText, languageVersion: ts.ScriptTarget); + isConcrete(): boolean; + sourceUnit(): SourceUnitSyntax; + isDeclaration(): boolean; + private computeDiagnostics(); + diagnostics(): Diagnostic[]; + fileName(): string; + lineMap(): LineMap; + languageVersion(): ts.ScriptTarget; + private cacheSyntaxTreeInfo(); + private getAmdDependency(comment); + isExternalModule(): boolean; + amdDependencies(): string[]; } - class ObjectLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openBraceToken: ISyntaxToken; - public propertyAssignments: ISeparatedSyntaxList; - public closeBraceToken: ISyntaxToken; - constructor(openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - static create(openBraceToken: ISyntaxToken, closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - static create1(): ObjectLiteralExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): ObjectLiteralExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): ObjectLiteralExpressionSyntax; - public withOpenBraceToken(openBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - public withPropertyAssignments(propertyAssignments: ISeparatedSyntaxList): ObjectLiteralExpressionSyntax; - public withPropertyAssignment(propertyAssignment: IPropertyAssignmentSyntax): ObjectLiteralExpressionSyntax; - public withCloseBraceToken(closeBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax; - public isTypeScriptSpecific(): boolean; + function externalModuleIndicatorSpan(syntaxTree: SyntaxTree): TextSpan; + function externalModuleIndicatorSpanWorker(syntaxTree: SyntaxTree, firstToken: ISyntaxToken): TextSpan; +} +declare module TypeScript { + class Unicode { + static unicodeES3IdentifierStart: number[]; + static unicodeES3IdentifierPart: number[]; + static unicodeES5IdentifierStart: number[]; + static unicodeES5IdentifierPart: number[]; + static lookupInUnicodeMap(code: number, map: number[]): boolean; + static isIdentifierStart(code: number, languageVersion: ts.ScriptTarget): boolean; + static isIdentifierPart(code: number, languageVersion: ts.ScriptTarget): boolean; } - class SimplePropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { - public propertyName: ISyntaxToken; - public colonToken: ISyntaxToken; - public expression: IExpressionSyntax; - constructor(propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPropertyAssignment(): boolean; - public update(propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - static create1(propertyName: ISyntaxToken, expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): SimplePropertyAssignmentSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): SimplePropertyAssignmentSyntax; - public withPropertyName(propertyName: ISyntaxToken): SimplePropertyAssignmentSyntax; - public withColonToken(colonToken: ISyntaxToken): SimplePropertyAssignmentSyntax; - public withExpression(expression: IExpressionSyntax): SimplePropertyAssignmentSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.IncrementalParser { + function parse(oldSyntaxTree: SyntaxTree, textChangeRange: TextChangeRange, newText: ISimpleText): SyntaxTree; +} +declare module ts { + interface OutliningSpan { + textSpan: TypeScript.TextSpan; + hintSpan: TypeScript.TextSpan; + bannerText: string; + autoCollapse: boolean; } - class FunctionPropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - constructor(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPropertyAssignment(): boolean; - public update(propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionPropertyAssignmentSyntax; - static create1(propertyName: ISyntaxToken): FunctionPropertyAssignmentSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): FunctionPropertyAssignmentSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): FunctionPropertyAssignmentSyntax; - public withPropertyName(propertyName: ISyntaxToken): FunctionPropertyAssignmentSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): FunctionPropertyAssignmentSyntax; - public withBlock(block: BlockSyntax): FunctionPropertyAssignmentSyntax; - public isTypeScriptSpecific(): boolean; + module OutliningElementsCollector { + function collectElements(sourceFile: SourceFile): OutliningSpan[]; } - class FunctionExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public functionKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - constructor(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax; - static create(functionKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax; - static create1(): FunctionExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): FunctionExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): FunctionExpressionSyntax; - public withFunctionKeyword(functionKeyword: ISyntaxToken): FunctionExpressionSyntax; - public withIdentifier(identifier: ISyntaxToken): FunctionExpressionSyntax; - public withCallSignature(callSignature: CallSignatureSyntax): FunctionExpressionSyntax; - public withBlock(block: BlockSyntax): FunctionExpressionSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services { + class GetScriptLexicalStructureWalker extends SyntaxWalker { + private fileName; + private nameStack; + private kindStack; + private parentScopes; + private currentScope; + private createScope(); + private pushNewContainerScope(containerName, kind); + private popScope(); + constructor(fileName: string); + private collectItems(items, scope?); + static getListsOfAllScriptLexicalStructure(items: ts.NavigateToItem[], fileName: string, unit: SourceUnitSyntax): void; + private createItem(node, modifiers, kind, name); + private addAdditionalSpan(node, key); + private getKindModifiers(modifiers); + visitModuleDeclaration(node: ModuleDeclarationSyntax): void; + private visitModuleDeclarationWorker(node, names, nameIndex); + private getModuleNames(node); + private getModuleNamesHelper(name, result); + visitClassDeclaration(node: ClassDeclarationSyntax): void; + visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): void; + visitObjectType(node: ObjectTypeSyntax): void; + visitEnumDeclaration(node: EnumDeclarationSyntax): void; + visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void; + visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void; + visitGetAccessor(node: GetAccessorSyntax): void; + visitSetAccessor(node: SetAccessorSyntax): void; + visitVariableDeclarator(node: VariableDeclaratorSyntax): void; + visitIndexSignature(node: IndexSignatureSyntax): void; + visitEnumElement(node: EnumElementSyntax): void; + visitCallSignature(node: CallSignatureSyntax): void; + visitConstructSignature(node: ConstructSignatureSyntax): void; + visitMethodSignature(node: MethodSignatureSyntax): void; + visitPropertySignature(node: PropertySignatureSyntax): void; + visitFunctionDeclaration(node: FunctionDeclarationSyntax): void; + visitBlock(node: BlockSyntax): void; + visitIfStatement(node: IfStatementSyntax): void; + visitExpressionStatement(node: ExpressionStatementSyntax): void; + visitThrowStatement(node: ThrowStatementSyntax): void; + visitReturnStatement(node: ReturnStatementSyntax): void; + visitSwitchStatement(node: SwitchStatementSyntax): void; + visitWithStatement(node: WithStatementSyntax): void; + visitTryStatement(node: TryStatementSyntax): void; + visitLabeledStatement(node: LabeledStatementSyntax): void; } - class EmptyStatementSyntax extends SyntaxNode implements IStatementSyntax { - public semicolonToken: ISyntaxToken; - constructor(semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(semicolonToken: ISyntaxToken): EmptyStatementSyntax; - static create1(): EmptyStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): EmptyStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): EmptyStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): EmptyStatementSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services { + class BraceMatcher { + static getMatchSpans(syntaxTree: SyntaxTree, position: number): TextSpan[]; + private static getMatchingCloseBrace(currentToken, position, result); + private static getMatchingOpenBrace(currentToken, position, result); + private static getMatchingCloseBraceTokenKind(positionedElement); + private static getMatchingOpenBraceTokenKind(positionedElement); } - class TryStatementSyntax extends SyntaxNode implements IStatementSyntax { - public tryKeyword: ISyntaxToken; - public block: BlockSyntax; - public catchClause: CatchClauseSyntax; - public finallyClause: FinallyClauseSyntax; - constructor(tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax): TryStatementSyntax; - static create(tryKeyword: ISyntaxToken, block: BlockSyntax): TryStatementSyntax; - static create1(): TryStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TryStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TryStatementSyntax; - public withTryKeyword(tryKeyword: ISyntaxToken): TryStatementSyntax; - public withBlock(block: BlockSyntax): TryStatementSyntax; - public withCatchClause(catchClause: CatchClauseSyntax): TryStatementSyntax; - public withFinallyClause(finallyClause: FinallyClauseSyntax): TryStatementSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Breakpoints { + function getBreakpointLocation(syntaxTree: SyntaxTree, askedPos: number): ts.SpanInfo; +} +declare module TypeScript.Indentation { + function columnForEndOfTokenAtPosition(syntaxTree: SyntaxTree, position: number, options: FormattingOptions): number; + function columnForStartOfTokenAtPosition(syntaxTree: SyntaxTree, position: number, options: FormattingOptions): number; + function columnForStartOfFirstTokenInLineContainingPosition(syntaxTree: SyntaxTree, position: number, options: FormattingOptions): number; + function columnForPositionInString(input: string, position: number, options: FormattingOptions): number; + function indentationString(column: number, options: FormattingOptions): string; + function firstNonWhitespacePosition(value: string): number; +} +declare module TypeScript.Services.Formatting { + interface ITextSnapshot { + getText(span: TextSpan): string; + getLineNumberFromPosition(position: number): number; + getLineFromPosition(position: number): ITextSnapshotLine; + getLineFromLineNumber(lineNumber: number): ITextSnapshotLine; } - class CatchClauseSyntax extends SyntaxNode { - public catchKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public identifier: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public closeParenToken: ISyntaxToken; - public block: BlockSyntax; - constructor(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax): CatchClauseSyntax; - static create(catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, closeParenToken: ISyntaxToken, block: BlockSyntax): CatchClauseSyntax; - static create1(identifier: ISyntaxToken): CatchClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): CatchClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): CatchClauseSyntax; - public withCatchKeyword(catchKeyword: ISyntaxToken): CatchClauseSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): CatchClauseSyntax; - public withIdentifier(identifier: ISyntaxToken): CatchClauseSyntax; - public withTypeAnnotation(typeAnnotation: TypeAnnotationSyntax): CatchClauseSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): CatchClauseSyntax; - public withBlock(block: BlockSyntax): CatchClauseSyntax; - public isTypeScriptSpecific(): boolean; + class TextSnapshot implements ITextSnapshot { + private snapshot; + private lines; + constructor(snapshot: ISimpleText); + getText(span: TextSpan): string; + getLineNumberFromPosition(position: number): number; + getLineFromPosition(position: number): ITextSnapshotLine; + getLineFromLineNumber(lineNumber: number): ITextSnapshotLine; + private getLineFromLineNumberWorker(lineNumber); } - class FinallyClauseSyntax extends SyntaxNode { - public finallyKeyword: ISyntaxToken; - public block: BlockSyntax; - constructor(finallyKeyword: ISyntaxToken, block: BlockSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public update(finallyKeyword: ISyntaxToken, block: BlockSyntax): FinallyClauseSyntax; - static create1(): FinallyClauseSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): FinallyClauseSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): FinallyClauseSyntax; - public withFinallyKeyword(finallyKeyword: ISyntaxToken): FinallyClauseSyntax; - public withBlock(block: BlockSyntax): FinallyClauseSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Formatting { + interface ITextSnapshotLine { + snapshot(): ITextSnapshot; + start(): SnapshotPoint; + startPosition(): number; + end(): SnapshotPoint; + endPosition(): number; + endIncludingLineBreak(): SnapshotPoint; + endIncludingLineBreakPosition(): number; + length(): number; + lineNumber(): number; + getText(): string; } - class LabeledStatementSyntax extends SyntaxNode implements IStatementSyntax { - public identifier: ISyntaxToken; - public colonToken: ISyntaxToken; - public statement: IStatementSyntax; - constructor(identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax): LabeledStatementSyntax; - static create1(identifier: ISyntaxToken, statement: IStatementSyntax): LabeledStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): LabeledStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): LabeledStatementSyntax; - public withIdentifier(identifier: ISyntaxToken): LabeledStatementSyntax; - public withColonToken(colonToken: ISyntaxToken): LabeledStatementSyntax; - public withStatement(statement: IStatementSyntax): LabeledStatementSyntax; - public isTypeScriptSpecific(): boolean; - } - class DoStatementSyntax extends SyntaxNode implements IIterationStatementSyntax { - public doKeyword: ISyntaxToken; - public statement: IStatementSyntax; - public whileKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public semicolonToken: ISyntaxToken; - constructor(doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isIterationStatement(): boolean; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken): DoStatementSyntax; - static create1(statement: IStatementSyntax, condition: IExpressionSyntax): DoStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): DoStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): DoStatementSyntax; - public withDoKeyword(doKeyword: ISyntaxToken): DoStatementSyntax; - public withStatement(statement: IStatementSyntax): DoStatementSyntax; - public withWhileKeyword(whileKeyword: ISyntaxToken): DoStatementSyntax; - public withOpenParenToken(openParenToken: ISyntaxToken): DoStatementSyntax; - public withCondition(condition: IExpressionSyntax): DoStatementSyntax; - public withCloseParenToken(closeParenToken: ISyntaxToken): DoStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): DoStatementSyntax; - public isTypeScriptSpecific(): boolean; + class TextSnapshotLine implements ITextSnapshotLine { + private _snapshot; + private _lineNumber; + private _start; + private _end; + private _lineBreak; + constructor(_snapshot: ITextSnapshot, _lineNumber: number, _start: number, _end: number, _lineBreak: string); + snapshot(): ITextSnapshot; + start(): SnapshotPoint; + startPosition(): number; + end(): SnapshotPoint; + endPosition(): number; + endIncludingLineBreak(): SnapshotPoint; + endIncludingLineBreakPosition(): number; + length(): number; + lineNumber(): number; + getText(): string; } - class TypeOfExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public typeOfKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - constructor(typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - static create1(expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): TypeOfExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): TypeOfExpressionSyntax; - public withTypeOfKeyword(typeOfKeyword: ISyntaxToken): TypeOfExpressionSyntax; - public withExpression(expression: IUnaryExpressionSyntax): TypeOfExpressionSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Formatting { + class SnapshotPoint { + snapshot: ITextSnapshot; + position: number; + constructor(snapshot: ITextSnapshot, position: number); + getContainingLine(): ITextSnapshotLine; + add(offset: number): SnapshotPoint; } - class DeleteExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public deleteKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - constructor(deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - static create1(expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): DeleteExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): DeleteExpressionSyntax; - public withDeleteKeyword(deleteKeyword: ISyntaxToken): DeleteExpressionSyntax; - public withExpression(expression: IUnaryExpressionSyntax): DeleteExpressionSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Formatting { + class FormattingContext { + private snapshot; + formattingRequestKind: FormattingRequestKind; + currentTokenSpan: TokenSpan; + nextTokenSpan: TokenSpan; + contextNode: IndentationNodeContext; + currentTokenParent: IndentationNodeContext; + nextTokenParent: IndentationNodeContext; + private contextNodeAllOnSameLine; + private nextNodeAllOnSameLine; + private tokensAreOnSameLine; + private contextNodeBlockIsOnOneLine; + private nextNodeBlockIsOnOneLine; + constructor(snapshot: ITextSnapshot, formattingRequestKind: FormattingRequestKind); + updateContext(currentTokenSpan: TokenSpan, currentTokenParent: IndentationNodeContext, nextTokenSpan: TokenSpan, nextTokenParent: IndentationNodeContext, commonParent: IndentationNodeContext): void; + ContextNodeAllOnSameLine(): boolean; + NextNodeAllOnSameLine(): boolean; + TokensAreOnSameLine(): boolean; + ContextNodeBlockIsOnOneLine(): boolean; + NextNodeBlockIsOnOneLine(): boolean; + NodeIsOnOneLine(node: IndentationNodeContext): boolean; + BlockIsOnOneLine(node: IndentationNodeContext): boolean; } - class VoidExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public voidKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - constructor(voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isUnaryExpression(): boolean; - public isExpression(): boolean; - public update(voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - static create1(expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): VoidExpressionSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): VoidExpressionSyntax; - public withVoidKeyword(voidKeyword: ISyntaxToken): VoidExpressionSyntax; - public withExpression(expression: IUnaryExpressionSyntax): VoidExpressionSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Formatting { + class FormattingManager { + private syntaxTree; + private snapshot; + private rulesProvider; + private options; + constructor(syntaxTree: SyntaxTree, snapshot: ITextSnapshot, rulesProvider: RulesProvider, editorOptions: ts.EditorOptions); + formatSelection(minChar: number, limChar: number): ts.TextEdit[]; + formatDocument(minChar: number, limChar: number): ts.TextEdit[]; + formatOnPaste(minChar: number, limChar: number): ts.TextEdit[]; + formatOnSemicolon(caretPosition: number): ts.TextEdit[]; + formatOnClosingCurlyBrace(caretPosition: number): ts.TextEdit[]; + formatOnEnter(caretPosition: number): ts.TextEdit[]; + private formatSpan(span, formattingRequestKind); } - class DebuggerStatementSyntax extends SyntaxNode implements IStatementSyntax { - public debuggerKeyword: ISyntaxToken; - public semicolonToken: ISyntaxToken; - constructor(debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken, parsedInStrictMode: boolean); - public accept(visitor: ISyntaxVisitor): any; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(slot: number): ISyntaxElement; - public isStatement(): boolean; - public isModuleElement(): boolean; - public update(debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken): DebuggerStatementSyntax; - static create1(): DebuggerStatementSyntax; - public withLeadingTrivia(trivia: ISyntaxTriviaList): DebuggerStatementSyntax; - public withTrailingTrivia(trivia: ISyntaxTriviaList): DebuggerStatementSyntax; - public withDebuggerKeyword(debuggerKeyword: ISyntaxToken): DebuggerStatementSyntax; - public withSemicolonToken(semicolonToken: ISyntaxToken): DebuggerStatementSyntax; - public isTypeScriptSpecific(): boolean; +} +declare module TypeScript.Services.Formatting { + enum FormattingRequestKind { + FormatDocument = 0, + FormatSelection = 1, + FormatOnEnter = 2, + FormatOnSemicolon = 3, + FormatOnClosingCurlyBrace = 4, + FormatOnPaste = 5, } } -declare module TypeScript { - class SyntaxRewriter implements ISyntaxVisitor { - public visitToken(token: ISyntaxToken): ISyntaxToken; - public visitNode(node: SyntaxNode): SyntaxNode; - public visitNodeOrToken(node: ISyntaxNodeOrToken): ISyntaxNodeOrToken; - public visitList(list: ISyntaxList): ISyntaxList; - public visitSeparatedList(list: ISeparatedSyntaxList): ISeparatedSyntaxList; - public visitSourceUnit(node: SourceUnitSyntax): any; - public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): any; - public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): any; - public visitImportDeclaration(node: ImportDeclarationSyntax): any; - public visitExportAssignment(node: ExportAssignmentSyntax): any; - public visitClassDeclaration(node: ClassDeclarationSyntax): any; - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): any; - public visitHeritageClause(node: HeritageClauseSyntax): any; - public visitModuleDeclaration(node: ModuleDeclarationSyntax): any; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): any; - public visitVariableStatement(node: VariableStatementSyntax): any; - public visitVariableDeclaration(node: VariableDeclarationSyntax): any; - public visitVariableDeclarator(node: VariableDeclaratorSyntax): any; - public visitEqualsValueClause(node: EqualsValueClauseSyntax): any; - public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): any; - public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): any; - public visitOmittedExpression(node: OmittedExpressionSyntax): any; - public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): any; - public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): any; - public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): any; - public visitQualifiedName(node: QualifiedNameSyntax): any; - public visitTypeArgumentList(node: TypeArgumentListSyntax): any; - public visitConstructorType(node: ConstructorTypeSyntax): any; - public visitFunctionType(node: FunctionTypeSyntax): any; - public visitObjectType(node: ObjectTypeSyntax): any; - public visitArrayType(node: ArrayTypeSyntax): any; - public visitGenericType(node: GenericTypeSyntax): any; - public visitTypeQuery(node: TypeQuerySyntax): any; - public visitTypeAnnotation(node: TypeAnnotationSyntax): any; - public visitBlock(node: BlockSyntax): any; - public visitParameter(node: ParameterSyntax): any; - public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): any; - public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): any; - public visitElementAccessExpression(node: ElementAccessExpressionSyntax): any; - public visitInvocationExpression(node: InvocationExpressionSyntax): any; - public visitArgumentList(node: ArgumentListSyntax): any; - public visitBinaryExpression(node: BinaryExpressionSyntax): any; - public visitConditionalExpression(node: ConditionalExpressionSyntax): any; - public visitConstructSignature(node: ConstructSignatureSyntax): any; - public visitMethodSignature(node: MethodSignatureSyntax): any; - public visitIndexSignature(node: IndexSignatureSyntax): any; - public visitPropertySignature(node: PropertySignatureSyntax): any; - public visitCallSignature(node: CallSignatureSyntax): any; - public visitParameterList(node: ParameterListSyntax): any; - public visitTypeParameterList(node: TypeParameterListSyntax): any; - public visitTypeParameter(node: TypeParameterSyntax): any; - public visitConstraint(node: ConstraintSyntax): any; - public visitElseClause(node: ElseClauseSyntax): any; - public visitIfStatement(node: IfStatementSyntax): any; - public visitExpressionStatement(node: ExpressionStatementSyntax): any; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): any; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): any; - public visitGetAccessor(node: GetAccessorSyntax): any; - public visitSetAccessor(node: SetAccessorSyntax): any; - public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): any; - public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): any; - public visitThrowStatement(node: ThrowStatementSyntax): any; - public visitReturnStatement(node: ReturnStatementSyntax): any; - public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): any; - public visitSwitchStatement(node: SwitchStatementSyntax): any; - public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): any; - public visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): any; - public visitBreakStatement(node: BreakStatementSyntax): any; - public visitContinueStatement(node: ContinueStatementSyntax): any; - public visitForStatement(node: ForStatementSyntax): any; - public visitForInStatement(node: ForInStatementSyntax): any; - public visitWhileStatement(node: WhileStatementSyntax): any; - public visitWithStatement(node: WithStatementSyntax): any; - public visitEnumDeclaration(node: EnumDeclarationSyntax): any; - public visitEnumElement(node: EnumElementSyntax): any; - public visitCastExpression(node: CastExpressionSyntax): any; - public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): any; - public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): any; - public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): any; - public visitFunctionExpression(node: FunctionExpressionSyntax): any; - public visitEmptyStatement(node: EmptyStatementSyntax): any; - public visitTryStatement(node: TryStatementSyntax): any; - public visitCatchClause(node: CatchClauseSyntax): any; - public visitFinallyClause(node: FinallyClauseSyntax): any; - public visitLabeledStatement(node: LabeledStatementSyntax): any; - public visitDoStatement(node: DoStatementSyntax): any; - public visitTypeOfExpression(node: TypeOfExpressionSyntax): any; - public visitDeleteExpression(node: DeleteExpressionSyntax): any; - public visitVoidExpression(node: VoidExpressionSyntax): any; - public visitDebuggerStatement(node: DebuggerStatementSyntax): any; +declare module TypeScript.Services.Formatting { + class Rule { + Descriptor: RuleDescriptor; + Operation: RuleOperation; + Flag: RuleFlags; + constructor(Descriptor: RuleDescriptor, Operation: RuleOperation, Flag?: RuleFlags); + toString(): string; } } -declare module TypeScript { - class SyntaxDedenter extends SyntaxRewriter { - private dedentationAmount; - private minimumIndent; - private options; - private lastTriviaWasNewLine; - constructor(dedentFirstToken: boolean, dedentationAmount: number, minimumIndent: number, options: FormattingOptions); - private abort(); - private isAborted(); - public visitToken(token: ISyntaxToken): ISyntaxToken; - private dedentTriviaList(triviaList); - private dedentSegment(segment, hasFollowingNewLineTrivia); - private dedentWhitespace(trivia, hasFollowingNewLineTrivia); - private dedentMultiLineComment(trivia); - static dedentNode(node: ISyntaxNode, dedentFirstToken: boolean, dedentAmount: number, minimumIndent: number, options: FormattingOptions): ISyntaxNode; +declare module TypeScript.Services.Formatting { + enum RuleAction { + Ignore = 0, + Space = 1, + NewLine = 2, + Delete = 3, } } -declare module TypeScript { - class SyntaxIndenter extends SyntaxRewriter { - private indentationAmount; - private options; - private lastTriviaWasNewLine; - private indentationTrivia; - constructor(indentFirstToken: boolean, indentationAmount: number, options: FormattingOptions); - public visitToken(token: ISyntaxToken): ISyntaxToken; - public indentTriviaList(triviaList: ISyntaxTriviaList): ISyntaxTriviaList; - private indentSegment(segment); - private indentWhitespace(trivia, indentThisTrivia, result); - private indentSingleLineOrSkippedText(trivia, indentThisTrivia, result); - private indentMultiLineComment(trivia, indentThisTrivia, result); - static indentNode(node: ISyntaxNode, indentFirstToken: boolean, indentAmount: number, options: FormattingOptions): SyntaxNode; - static indentNodes(nodes: SyntaxNode[], indentFirstToken: boolean, indentAmount: number, options: FormattingOptions): SyntaxNode[]; +declare module TypeScript.Services.Formatting { + class RuleDescriptor { + LeftTokenRange: Shared.TokenRange; + RightTokenRange: Shared.TokenRange; + constructor(LeftTokenRange: Shared.TokenRange, RightTokenRange: Shared.TokenRange); + toString(): string; + static create1(left: SyntaxKind, right: SyntaxKind): RuleDescriptor; + static create2(left: Shared.TokenRange, right: SyntaxKind): RuleDescriptor; + static create3(left: SyntaxKind, right: Shared.TokenRange): RuleDescriptor; + static create4(left: Shared.TokenRange, right: Shared.TokenRange): RuleDescriptor; } } -declare module TypeScript.Syntax { - class VariableWidthTokenWithNoTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - constructor(fullText: string, kind: SyntaxKind); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class VariableWidthTokenWithLeadingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _leadingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, leadingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class VariableWidthTokenWithTrailingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _trailingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, trailingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class VariableWidthTokenWithLeadingAndTrailingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _leadingTriviaInfo; - private _trailingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, leadingTriviaInfo: number, trailingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class FixedWidthTokenWithNoTrivia implements ISyntaxToken { - public tokenKind: SyntaxKind; - constructor(kind: SyntaxKind); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class FixedWidthTokenWithLeadingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _leadingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, leadingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class FixedWidthTokenWithTrailingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _trailingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, trailingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; - } - class FixedWidthTokenWithLeadingAndTrailingTrivia implements ISyntaxToken { - private _fullText; - public tokenKind: SyntaxKind; - private _leadingTriviaInfo; - private _trailingTriviaInfo; - constructor(fullText: string, kind: SyntaxKind, leadingTriviaInfo: number, trailingTriviaInfo: number); - public clone(): ISyntaxToken; - public isNode(): boolean; - public isToken(): boolean; - public isList(): boolean; - public isSeparatedList(): boolean; - public kind(): SyntaxKind; - public childCount(): number; - public childAt(index: number): ISyntaxElement; - public fullWidth(): number; - public width(): number; - public text(): string; - public fullText(): string; - public value(): any; - public valueText(): string; - public hasLeadingTrivia(): boolean; - public hasLeadingComment(): boolean; - public hasLeadingNewLine(): boolean; - public hasLeadingSkippedText(): boolean; - public leadingTriviaWidth(): number; - public leadingTrivia(): ISyntaxTriviaList; - public hasTrailingTrivia(): boolean; - public hasTrailingComment(): boolean; - public hasTrailingNewLine(): boolean; - public hasTrailingSkippedText(): boolean; - public trailingTriviaWidth(): number; - public trailingTrivia(): ISyntaxTriviaList; - public hasSkippedToken(): boolean; - public toJSON(key: any): any; - public firstToken(): ISyntaxToken; - public lastToken(): ISyntaxToken; - public isTypeScriptSpecific(): boolean; - public isIncrementallyUnusable(): boolean; - public accept(visitor: ISyntaxVisitor): any; - private realize(); - public collectTextElements(elements: string[]): void; - private findTokenInternal(parent, position, fullStart); - public withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - public withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - public isExpression(): boolean; - public isPrimaryExpression(): boolean; - public isMemberExpression(): boolean; - public isPostfixExpression(): boolean; - public isUnaryExpression(): boolean; +declare module TypeScript.Services.Formatting { + enum RuleFlags { + None = 0, + CanDeleteNewLines = 1, } } -declare module TypeScript { - interface ISyntaxToken extends ISyntaxNodeOrToken, INameSyntax, IPrimaryExpressionSyntax { - tokenKind: SyntaxKind; - text(): string; - value(): any; - valueText(): string; - hasLeadingTrivia(): boolean; - hasLeadingComment(): boolean; - hasLeadingNewLine(): boolean; - hasLeadingSkippedText(): boolean; - hasTrailingTrivia(): boolean; - hasTrailingComment(): boolean; - hasTrailingNewLine(): boolean; - hasTrailingSkippedText(): boolean; - hasSkippedToken(): boolean; - leadingTrivia(): ISyntaxTriviaList; - trailingTrivia(): ISyntaxTriviaList; - withLeadingTrivia(leadingTrivia: ISyntaxTriviaList): ISyntaxToken; - withTrailingTrivia(trailingTrivia: ISyntaxTriviaList): ISyntaxToken; - clone(): ISyntaxToken; +declare module TypeScript.Services.Formatting { + class RuleOperation { + Context: RuleOperationContext; + Action: RuleAction; + constructor(); + toString(): string; + static create1(action: RuleAction): RuleOperation; + static create2(context: RuleOperationContext, action: RuleAction): RuleOperation; } - interface ITokenInfo { - leadingTrivia?: ISyntaxTrivia[]; - text?: string; - trailingTrivia?: ISyntaxTrivia[]; +} +declare module TypeScript.Services.Formatting { + class RuleOperationContext { + private customContextChecks; + constructor(...funcs: { + (context: FormattingContext): boolean; + }[]); + static Any: RuleOperationContext; + IsAny(): boolean; + InContext(context: FormattingContext): boolean; } } -declare module TypeScript.Syntax { - function isExpression(token: ISyntaxToken): boolean; - function realizeToken(token: ISyntaxToken): ISyntaxToken; - function convertToIdentifierName(token: ISyntaxToken): ISyntaxToken; - function tokenToJSON(token: ISyntaxToken): any; - function value(token: ISyntaxToken): any; - function massageEscapes(text: string): string; - function valueText(token: ISyntaxToken): string; - function emptyToken(kind: SyntaxKind): ISyntaxToken; - function token(kind: SyntaxKind, info?: ITokenInfo): ISyntaxToken; - function identifier(text: string, info?: ITokenInfo): ISyntaxToken; +declare module TypeScript.Services.Formatting { + class Rules { + getRuleName(rule: Rule): any; + [name: string]: any; + IgnoreBeforeComment: Rule; + IgnoreAfterLineComment: Rule; + NoSpaceBeforeSemicolon: Rule; + NoSpaceBeforeColon: Rule; + NoSpaceBeforeQMark: Rule; + SpaceAfterColon: Rule; + SpaceAfterQMark: Rule; + SpaceAfterSemicolon: Rule; + SpaceAfterCloseBrace: Rule; + SpaceBetweenCloseBraceAndElse: Rule; + SpaceBetweenCloseBraceAndWhile: Rule; + NoSpaceAfterCloseBrace: Rule; + NoSpaceBeforeDot: Rule; + NoSpaceAfterDot: Rule; + NoSpaceBeforeOpenBracket: Rule; + NoSpaceAfterOpenBracket: Rule; + NoSpaceBeforeCloseBracket: Rule; + NoSpaceAfterCloseBracket: Rule; + SpaceAfterOpenBrace: Rule; + SpaceBeforeCloseBrace: Rule; + NoSpaceBetweenEmptyBraceBrackets: Rule; + NewLineAfterOpenBraceInBlockContext: Rule; + NewLineBeforeCloseBraceInBlockContext: Rule; + NoSpaceAfterUnaryPrefixOperator: Rule; + NoSpaceAfterUnaryPreincrementOperator: Rule; + NoSpaceAfterUnaryPredecrementOperator: Rule; + NoSpaceBeforeUnaryPostincrementOperator: Rule; + NoSpaceBeforeUnaryPostdecrementOperator: Rule; + SpaceAfterPostincrementWhenFollowedByAdd: Rule; + SpaceAfterAddWhenFollowedByUnaryPlus: Rule; + SpaceAfterAddWhenFollowedByPreincrement: Rule; + SpaceAfterPostdecrementWhenFollowedBySubtract: Rule; + SpaceAfterSubtractWhenFollowedByUnaryMinus: Rule; + SpaceAfterSubtractWhenFollowedByPredecrement: Rule; + NoSpaceBeforeComma: Rule; + SpaceAfterCertainKeywords: Rule; + NoSpaceBeforeOpenParenInFuncCall: Rule; + SpaceAfterFunctionInFuncDecl: Rule; + NoSpaceBeforeOpenParenInFuncDecl: Rule; + SpaceAfterVoidOperator: Rule; + NoSpaceBetweenReturnAndSemicolon: Rule; + SpaceBetweenStatements: Rule; + SpaceAfterTryFinally: Rule; + SpaceAfterGetSetInMember: Rule; + SpaceBeforeBinaryKeywordOperator: Rule; + SpaceAfterBinaryKeywordOperator: Rule; + NoSpaceAfterConstructor: Rule; + NoSpaceAfterModuleImport: Rule; + SpaceAfterCertainTypeScriptKeywords: Rule; + SpaceBeforeCertainTypeScriptKeywords: Rule; + SpaceAfterModuleName: Rule; + SpaceAfterArrow: Rule; + NoSpaceAfterEllipsis: Rule; + NoSpaceAfterOptionalParameters: Rule; + NoSpaceBeforeOpenAngularBracket: Rule; + NoSpaceBetweenCloseParenAndAngularBracket: Rule; + NoSpaceAfterOpenAngularBracket: Rule; + NoSpaceBeforeCloseAngularBracket: Rule; + NoSpaceAfterCloseAngularBracket: Rule; + NoSpaceBetweenEmptyInterfaceBraceBrackets: Rule; + HighPriorityCommonRules: Rule[]; + LowPriorityCommonRules: Rule[]; + SpaceAfterComma: Rule; + NoSpaceAfterComma: Rule; + SpaceBeforeBinaryOperator: Rule; + SpaceAfterBinaryOperator: Rule; + NoSpaceBeforeBinaryOperator: Rule; + NoSpaceAfterBinaryOperator: Rule; + SpaceAfterKeywordInControl: Rule; + NoSpaceAfterKeywordInControl: Rule; + FunctionOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInFunction: Rule; + NewLineBeforeOpenBraceInFunction: Rule; + TypeScriptOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; + NewLineBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; + ControlOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInControl: Rule; + NewLineBeforeOpenBraceInControl: Rule; + SpaceAfterSemicolonInFor: Rule; + NoSpaceAfterSemicolonInFor: Rule; + SpaceAfterOpenParen: Rule; + SpaceBeforeCloseParen: Rule; + NoSpaceBetweenParens: Rule; + NoSpaceAfterOpenParen: Rule; + NoSpaceBeforeCloseParen: Rule; + SpaceAfterAnonymousFunctionKeyword: Rule; + NoSpaceAfterAnonymousFunctionKeyword: Rule; + constructor(); + static IsForContext(context: FormattingContext): boolean; + static IsNotForContext(context: FormattingContext): boolean; + static IsBinaryOpContext(context: FormattingContext): boolean; + static IsNotBinaryOpContext(context: FormattingContext): boolean; + static IsSameLineTokenOrBeforeMultilineBlockContext(context: FormattingContext): boolean; + static IsBeforeMultilineBlockContext(context: FormattingContext): boolean; + static IsMultilineBlockContext(context: FormattingContext): boolean; + static IsSingleLineBlockContext(context: FormattingContext): boolean; + static IsBlockContext(context: FormattingContext): boolean; + static IsBeforeBlockContext(context: FormattingContext): boolean; + static NodeIsBlockContext(node: IndentationNodeContext): boolean; + static IsFunctionDeclContext(context: FormattingContext): boolean; + static IsTypeScriptDeclWithBlockContext(context: FormattingContext): boolean; + static NodeIsTypeScriptDeclWithBlockContext(node: IndentationNodeContext): boolean; + static IsAfterCodeBlockContext(context: FormattingContext): boolean; + static IsControlDeclContext(context: FormattingContext): boolean; + static IsObjectContext(context: FormattingContext): boolean; + static IsFunctionCallContext(context: FormattingContext): boolean; + static IsNewContext(context: FormattingContext): boolean; + static IsFunctionCallOrNewContext(context: FormattingContext): boolean; + static IsSameLineTokenContext(context: FormattingContext): boolean; + static IsNotFormatOnEnter(context: FormattingContext): boolean; + static IsModuleDeclContext(context: FormattingContext): boolean; + static IsObjectTypeContext(context: FormattingContext): boolean; + static IsTypeArgumentOrParameter(tokenKind: SyntaxKind, parentKind: SyntaxKind): boolean; + static IsTypeArgumentOrParameterContext(context: FormattingContext): boolean; + static IsVoidOpContext(context: FormattingContext): boolean; + } } -declare module TypeScript { - class SyntaxTokenReplacer extends SyntaxRewriter { - private token1; - private token2; - constructor(token1: ISyntaxToken, token2: ISyntaxToken); - public visitToken(token: ISyntaxToken): ISyntaxToken; - public visitNode(node: SyntaxNode): SyntaxNode; - public visitList(list: ISyntaxList): ISyntaxList; - public visitSeparatedList(list: ISeparatedSyntaxList): ISeparatedSyntaxList; +declare module TypeScript.Services.Formatting { + class RulesMap { + map: RulesBucket[]; + mapRowLength: number; + constructor(); + static create(rules: Rule[]): RulesMap; + Initialize(rules: Rule[]): RulesBucket[]; + FillRules(rules: Rule[], rulesBucketConstructionStateList: RulesBucketConstructionState[]): void; + private GetRuleBucketIndex(row, column); + private FillRule(rule, rulesBucketConstructionStateList); + GetRule(context: FormattingContext): Rule; + } + enum RulesPosition { + IgnoreRulesSpecific = 0, + IgnoreRulesAny, + ContextRulesSpecific, + ContextRulesAny, + NoContextRulesSpecific, + NoContextRulesAny, + } + class RulesBucketConstructionState { + private rulesInsertionIndexBitmap; + constructor(); + GetInsertionIndex(maskPosition: RulesPosition): number; + IncreaseInsertionIndex(maskPosition: RulesPosition): void; } -} -declare module TypeScript { - interface ISyntaxTrivia { - kind(): SyntaxKind; - isWhitespace(): boolean; - isComment(): boolean; - isNewLine(): boolean; - isSkippedToken(): boolean; - fullWidth(): number; - fullText(): string; - skippedToken(): ISyntaxToken; + class RulesBucket { + private rules; + constructor(); + Rules(): Rule[]; + AddRule(rule: Rule, specificTokens: boolean, constructionState: RulesBucketConstructionState[], rulesBucketIndex: number): void; } } -declare module TypeScript.Syntax { - function deferredTrivia(kind: SyntaxKind, text: ISimpleText, fullStart: number, fullWidth: number): ISyntaxTrivia; - function trivia(kind: SyntaxKind, text: string): ISyntaxTrivia; - function skippedTokenTrivia(token: ISyntaxToken): ISyntaxTrivia; - function spaces(count: number): ISyntaxTrivia; - function whitespace(text: string): ISyntaxTrivia; - function multiLineComment(text: string): ISyntaxTrivia; - function singleLineComment(text: string): ISyntaxTrivia; - var spaceTrivia: ISyntaxTrivia; - var lineFeedTrivia: ISyntaxTrivia; - var carriageReturnTrivia: ISyntaxTrivia; - var carriageReturnLineFeedTrivia: ISyntaxTrivia; - function splitMultiLineCommentTriviaIntoMultipleLines(trivia: ISyntaxTrivia): string[]; -} -declare module TypeScript { - interface ISyntaxTriviaList { - count(): number; - syntaxTriviaAt(index: number): ISyntaxTrivia; - fullWidth(): number; - fullText(): string; - hasComment(): boolean; - hasNewLine(): boolean; - hasSkippedToken(): boolean; - last(): ISyntaxTrivia; - toArray(): ISyntaxTrivia[]; - concat(trivia: ISyntaxTriviaList): ISyntaxTriviaList; - collectTextElements(elements: string[]): void; +declare module TypeScript.Services.Formatting { + class RulesProvider { + private logger; + private globalRules; + private options; + private activeRules; + private rulesMap; + constructor(logger: Logger); + getRuleName(rule: Rule): string; + getRuleByName(name: string): Rule; + getRulesMap(): RulesMap; + ensureUpToDate(options: ts.FormatCodeOptions): void; + private createActiveRules(options); } } -declare module TypeScript.Syntax { - var emptyTriviaList: ISyntaxTriviaList; - function triviaList(trivia: ISyntaxTrivia[]): ISyntaxTriviaList; - var spaceTriviaList: ISyntaxTriviaList; -} -declare module TypeScript { - class SyntaxUtilities { - static isAngleBracket(positionedElement: PositionedElement): boolean; - static getToken(list: ISyntaxList, kind: SyntaxKind): ISyntaxToken; - static containsToken(list: ISyntaxList, kind: SyntaxKind): boolean; - static hasExportKeyword(moduleElement: IModuleElementSyntax): boolean; - static getExportKeyword(moduleElement: IModuleElementSyntax): ISyntaxToken; - static isAmbientDeclarationSyntax(positionNode: PositionedNode): boolean; +declare module TypeScript.Services.Formatting { + class TextEditInfo { + position: number; + length: number; + replaceWith: string; + constructor(position: number, length: number, replaceWith: string); + toString(): string; } } -declare module TypeScript { - interface ISyntaxVisitor { - visitToken(token: ISyntaxToken): any; - visitSourceUnit(node: SourceUnitSyntax): any; - visitExternalModuleReference(node: ExternalModuleReferenceSyntax): any; - visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): any; - visitImportDeclaration(node: ImportDeclarationSyntax): any; - visitExportAssignment(node: ExportAssignmentSyntax): any; - visitClassDeclaration(node: ClassDeclarationSyntax): any; - visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): any; - visitHeritageClause(node: HeritageClauseSyntax): any; - visitModuleDeclaration(node: ModuleDeclarationSyntax): any; - visitFunctionDeclaration(node: FunctionDeclarationSyntax): any; - visitVariableStatement(node: VariableStatementSyntax): any; - visitVariableDeclaration(node: VariableDeclarationSyntax): any; - visitVariableDeclarator(node: VariableDeclaratorSyntax): any; - visitEqualsValueClause(node: EqualsValueClauseSyntax): any; - visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): any; - visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): any; - visitOmittedExpression(node: OmittedExpressionSyntax): any; - visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): any; - visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): any; - visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): any; - visitQualifiedName(node: QualifiedNameSyntax): any; - visitTypeArgumentList(node: TypeArgumentListSyntax): any; - visitConstructorType(node: ConstructorTypeSyntax): any; - visitFunctionType(node: FunctionTypeSyntax): any; - visitObjectType(node: ObjectTypeSyntax): any; - visitArrayType(node: ArrayTypeSyntax): any; - visitGenericType(node: GenericTypeSyntax): any; - visitTypeQuery(node: TypeQuerySyntax): any; - visitTypeAnnotation(node: TypeAnnotationSyntax): any; - visitBlock(node: BlockSyntax): any; - visitParameter(node: ParameterSyntax): any; - visitMemberAccessExpression(node: MemberAccessExpressionSyntax): any; - visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): any; - visitElementAccessExpression(node: ElementAccessExpressionSyntax): any; - visitInvocationExpression(node: InvocationExpressionSyntax): any; - visitArgumentList(node: ArgumentListSyntax): any; - visitBinaryExpression(node: BinaryExpressionSyntax): any; - visitConditionalExpression(node: ConditionalExpressionSyntax): any; - visitConstructSignature(node: ConstructSignatureSyntax): any; - visitMethodSignature(node: MethodSignatureSyntax): any; - visitIndexSignature(node: IndexSignatureSyntax): any; - visitPropertySignature(node: PropertySignatureSyntax): any; - visitCallSignature(node: CallSignatureSyntax): any; - visitParameterList(node: ParameterListSyntax): any; - visitTypeParameterList(node: TypeParameterListSyntax): any; - visitTypeParameter(node: TypeParameterSyntax): any; - visitConstraint(node: ConstraintSyntax): any; - visitElseClause(node: ElseClauseSyntax): any; - visitIfStatement(node: IfStatementSyntax): any; - visitExpressionStatement(node: ExpressionStatementSyntax): any; - visitConstructorDeclaration(node: ConstructorDeclarationSyntax): any; - visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): any; - visitGetAccessor(node: GetAccessorSyntax): any; - visitSetAccessor(node: SetAccessorSyntax): any; - visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): any; - visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): any; - visitThrowStatement(node: ThrowStatementSyntax): any; - visitReturnStatement(node: ReturnStatementSyntax): any; - visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): any; - visitSwitchStatement(node: SwitchStatementSyntax): any; - visitCaseSwitchClause(node: CaseSwitchClauseSyntax): any; - visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): any; - visitBreakStatement(node: BreakStatementSyntax): any; - visitContinueStatement(node: ContinueStatementSyntax): any; - visitForStatement(node: ForStatementSyntax): any; - visitForInStatement(node: ForInStatementSyntax): any; - visitWhileStatement(node: WhileStatementSyntax): any; - visitWithStatement(node: WithStatementSyntax): any; - visitEnumDeclaration(node: EnumDeclarationSyntax): any; - visitEnumElement(node: EnumElementSyntax): any; - visitCastExpression(node: CastExpressionSyntax): any; - visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): any; - visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): any; - visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): any; - visitFunctionExpression(node: FunctionExpressionSyntax): any; - visitEmptyStatement(node: EmptyStatementSyntax): any; - visitTryStatement(node: TryStatementSyntax): any; - visitCatchClause(node: CatchClauseSyntax): any; - visitFinallyClause(node: FinallyClauseSyntax): any; - visitLabeledStatement(node: LabeledStatementSyntax): any; - visitDoStatement(node: DoStatementSyntax): any; - visitTypeOfExpression(node: TypeOfExpressionSyntax): any; - visitDeleteExpression(node: DeleteExpressionSyntax): any; - visitVoidExpression(node: VoidExpressionSyntax): any; - visitDebuggerStatement(node: DebuggerStatementSyntax): any; - } - class SyntaxVisitor implements ISyntaxVisitor { - public defaultVisit(node: ISyntaxNodeOrToken): any; - public visitToken(token: ISyntaxToken): any; - public visitSourceUnit(node: SourceUnitSyntax): any; - public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): any; - public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): any; - public visitImportDeclaration(node: ImportDeclarationSyntax): any; - public visitExportAssignment(node: ExportAssignmentSyntax): any; - public visitClassDeclaration(node: ClassDeclarationSyntax): any; - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): any; - public visitHeritageClause(node: HeritageClauseSyntax): any; - public visitModuleDeclaration(node: ModuleDeclarationSyntax): any; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): any; - public visitVariableStatement(node: VariableStatementSyntax): any; - public visitVariableDeclaration(node: VariableDeclarationSyntax): any; - public visitVariableDeclarator(node: VariableDeclaratorSyntax): any; - public visitEqualsValueClause(node: EqualsValueClauseSyntax): any; - public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): any; - public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): any; - public visitOmittedExpression(node: OmittedExpressionSyntax): any; - public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): any; - public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): any; - public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): any; - public visitQualifiedName(node: QualifiedNameSyntax): any; - public visitTypeArgumentList(node: TypeArgumentListSyntax): any; - public visitConstructorType(node: ConstructorTypeSyntax): any; - public visitFunctionType(node: FunctionTypeSyntax): any; - public visitObjectType(node: ObjectTypeSyntax): any; - public visitArrayType(node: ArrayTypeSyntax): any; - public visitGenericType(node: GenericTypeSyntax): any; - public visitTypeQuery(node: TypeQuerySyntax): any; - public visitTypeAnnotation(node: TypeAnnotationSyntax): any; - public visitBlock(node: BlockSyntax): any; - public visitParameter(node: ParameterSyntax): any; - public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): any; - public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): any; - public visitElementAccessExpression(node: ElementAccessExpressionSyntax): any; - public visitInvocationExpression(node: InvocationExpressionSyntax): any; - public visitArgumentList(node: ArgumentListSyntax): any; - public visitBinaryExpression(node: BinaryExpressionSyntax): any; - public visitConditionalExpression(node: ConditionalExpressionSyntax): any; - public visitConstructSignature(node: ConstructSignatureSyntax): any; - public visitMethodSignature(node: MethodSignatureSyntax): any; - public visitIndexSignature(node: IndexSignatureSyntax): any; - public visitPropertySignature(node: PropertySignatureSyntax): any; - public visitCallSignature(node: CallSignatureSyntax): any; - public visitParameterList(node: ParameterListSyntax): any; - public visitTypeParameterList(node: TypeParameterListSyntax): any; - public visitTypeParameter(node: TypeParameterSyntax): any; - public visitConstraint(node: ConstraintSyntax): any; - public visitElseClause(node: ElseClauseSyntax): any; - public visitIfStatement(node: IfStatementSyntax): any; - public visitExpressionStatement(node: ExpressionStatementSyntax): any; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): any; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): any; - public visitGetAccessor(node: GetAccessorSyntax): any; - public visitSetAccessor(node: SetAccessorSyntax): any; - public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): any; - public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): any; - public visitThrowStatement(node: ThrowStatementSyntax): any; - public visitReturnStatement(node: ReturnStatementSyntax): any; - public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): any; - public visitSwitchStatement(node: SwitchStatementSyntax): any; - public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): any; - public visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): any; - public visitBreakStatement(node: BreakStatementSyntax): any; - public visitContinueStatement(node: ContinueStatementSyntax): any; - public visitForStatement(node: ForStatementSyntax): any; - public visitForInStatement(node: ForInStatementSyntax): any; - public visitWhileStatement(node: WhileStatementSyntax): any; - public visitWithStatement(node: WithStatementSyntax): any; - public visitEnumDeclaration(node: EnumDeclarationSyntax): any; - public visitEnumElement(node: EnumElementSyntax): any; - public visitCastExpression(node: CastExpressionSyntax): any; - public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): any; - public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): any; - public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): any; - public visitFunctionExpression(node: FunctionExpressionSyntax): any; - public visitEmptyStatement(node: EmptyStatementSyntax): any; - public visitTryStatement(node: TryStatementSyntax): any; - public visitCatchClause(node: CatchClauseSyntax): any; - public visitFinallyClause(node: FinallyClauseSyntax): any; - public visitLabeledStatement(node: LabeledStatementSyntax): any; - public visitDoStatement(node: DoStatementSyntax): any; - public visitTypeOfExpression(node: TypeOfExpressionSyntax): any; - public visitDeleteExpression(node: DeleteExpressionSyntax): any; - public visitVoidExpression(node: VoidExpressionSyntax): any; - public visitDebuggerStatement(node: DebuggerStatementSyntax): any; +declare module TypeScript.Services.Formatting { + module Shared { + interface ITokenAccess { + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + } + class TokenRangeAccess implements ITokenAccess { + private tokens; + constructor(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[]); + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + toString(): string; + } + class TokenValuesAccess implements ITokenAccess { + private tokens; + constructor(tks: SyntaxKind[]); + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + } + class TokenSingleValueAccess implements ITokenAccess { + token: SyntaxKind; + constructor(token: SyntaxKind); + GetTokens(): SyntaxKind[]; + Contains(tokenValue: SyntaxKind): boolean; + toString(): string; + } + class TokenAllAccess implements ITokenAccess { + GetTokens(): SyntaxKind[]; + Contains(tokenValue: SyntaxKind): boolean; + toString(): string; + } + class TokenRange { + tokenAccess: ITokenAccess; + constructor(tokenAccess: ITokenAccess); + static FromToken(token: SyntaxKind): TokenRange; + static FromTokens(tokens: SyntaxKind[]): TokenRange; + static FromRange(f: SyntaxKind, to: SyntaxKind, except?: SyntaxKind[]): TokenRange; + static AllTokens(): TokenRange; + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + toString(): string; + static Any: TokenRange; + static AnyIncludingMultilineComments: TokenRange; + static Keywords: TokenRange; + static Operators: TokenRange; + static BinaryOperators: TokenRange; + static BinaryKeywordOperators: TokenRange; + static ReservedKeywords: TokenRange; + static UnaryPrefixOperators: TokenRange; + static UnaryPrefixExpressions: TokenRange; + static UnaryPreincrementExpressions: TokenRange; + static UnaryPostincrementExpressions: TokenRange; + static UnaryPredecrementExpressions: TokenRange; + static UnaryPostdecrementExpressions: TokenRange; + static Comments: TokenRange; + static TypeNames: TokenRange; + } } } -declare module TypeScript { - class SyntaxWalker implements ISyntaxVisitor { - public visitToken(token: ISyntaxToken): void; - public visitNode(node: SyntaxNode): void; - public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void; - private visitOptionalToken(token); - public visitOptionalNode(node: SyntaxNode): void; - public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void; - public visitList(list: ISyntaxList): void; - public visitSeparatedList(list: ISeparatedSyntaxList): void; - public visitSourceUnit(node: SourceUnitSyntax): void; - public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): void; - public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): void; - public visitImportDeclaration(node: ImportDeclarationSyntax): void; - public visitExportAssignment(node: ExportAssignmentSyntax): void; - public visitClassDeclaration(node: ClassDeclarationSyntax): void; - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): void; - public visitHeritageClause(node: HeritageClauseSyntax): void; - public visitModuleDeclaration(node: ModuleDeclarationSyntax): void; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void; - public visitVariableStatement(node: VariableStatementSyntax): void; - public visitVariableDeclaration(node: VariableDeclarationSyntax): void; - public visitVariableDeclarator(node: VariableDeclaratorSyntax): void; - public visitEqualsValueClause(node: EqualsValueClauseSyntax): void; - public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): void; - public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): void; - public visitOmittedExpression(node: OmittedExpressionSyntax): void; - public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): void; - public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): void; - public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): void; - public visitQualifiedName(node: QualifiedNameSyntax): void; - public visitTypeArgumentList(node: TypeArgumentListSyntax): void; - public visitConstructorType(node: ConstructorTypeSyntax): void; - public visitFunctionType(node: FunctionTypeSyntax): void; - public visitObjectType(node: ObjectTypeSyntax): void; - public visitArrayType(node: ArrayTypeSyntax): void; - public visitGenericType(node: GenericTypeSyntax): void; - public visitTypeQuery(node: TypeQuerySyntax): void; - public visitTypeAnnotation(node: TypeAnnotationSyntax): void; - public visitBlock(node: BlockSyntax): void; - public visitParameter(node: ParameterSyntax): void; - public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): void; - public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): void; - public visitElementAccessExpression(node: ElementAccessExpressionSyntax): void; - public visitInvocationExpression(node: InvocationExpressionSyntax): void; - public visitArgumentList(node: ArgumentListSyntax): void; - public visitBinaryExpression(node: BinaryExpressionSyntax): void; - public visitConditionalExpression(node: ConditionalExpressionSyntax): void; - public visitConstructSignature(node: ConstructSignatureSyntax): void; - public visitMethodSignature(node: MethodSignatureSyntax): void; - public visitIndexSignature(node: IndexSignatureSyntax): void; - public visitPropertySignature(node: PropertySignatureSyntax): void; - public visitCallSignature(node: CallSignatureSyntax): void; - public visitParameterList(node: ParameterListSyntax): void; - public visitTypeParameterList(node: TypeParameterListSyntax): void; - public visitTypeParameter(node: TypeParameterSyntax): void; - public visitConstraint(node: ConstraintSyntax): void; - public visitElseClause(node: ElseClauseSyntax): void; - public visitIfStatement(node: IfStatementSyntax): void; - public visitExpressionStatement(node: ExpressionStatementSyntax): void; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void; - public visitGetAccessor(node: GetAccessorSyntax): void; - public visitSetAccessor(node: SetAccessorSyntax): void; - public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void; - public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): void; - public visitThrowStatement(node: ThrowStatementSyntax): void; - public visitReturnStatement(node: ReturnStatementSyntax): void; - public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): void; - public visitSwitchStatement(node: SwitchStatementSyntax): void; - public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): void; - public visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): void; - public visitBreakStatement(node: BreakStatementSyntax): void; - public visitContinueStatement(node: ContinueStatementSyntax): void; - public visitForStatement(node: ForStatementSyntax): void; - public visitForInStatement(node: ForInStatementSyntax): void; - public visitWhileStatement(node: WhileStatementSyntax): void; - public visitWithStatement(node: WithStatementSyntax): void; - public visitEnumDeclaration(node: EnumDeclarationSyntax): void; - public visitEnumElement(node: EnumElementSyntax): void; - public visitCastExpression(node: CastExpressionSyntax): void; - public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): void; - public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): void; - public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void; - public visitFunctionExpression(node: FunctionExpressionSyntax): void; - public visitEmptyStatement(node: EmptyStatementSyntax): void; - public visitTryStatement(node: TryStatementSyntax): void; - public visitCatchClause(node: CatchClauseSyntax): void; - public visitFinallyClause(node: FinallyClauseSyntax): void; - public visitLabeledStatement(node: LabeledStatementSyntax): void; - public visitDoStatement(node: DoStatementSyntax): void; - public visitTypeOfExpression(node: TypeOfExpressionSyntax): void; - public visitDeleteExpression(node: DeleteExpressionSyntax): void; - public visitVoidExpression(node: VoidExpressionSyntax): void; - public visitDebuggerStatement(node: DebuggerStatementSyntax): void; +declare module TypeScript.Services.Formatting { + class TokenSpan extends TextSpan { + kind: SyntaxKind; + constructor(kind: SyntaxKind, start: number, length: number); } } -declare module TypeScript { - class PositionTrackingWalker extends SyntaxWalker { - private _position; - public visitToken(token: ISyntaxToken): void; - public position(): number; - public skip(element: ISyntaxElement): void; +declare module TypeScript.Services.Formatting { + class IndentationNodeContext { + private _node; + private _parent; + private _fullStart; + private _indentationAmount; + private _childIndentationAmountDelta; + private _depth; + private _hasSkippedOrMissingTokenChild; + constructor(parent: IndentationNodeContext, node: ISyntaxNode, fullStart: number, indentationAmount: number, childIndentationAmountDelta: number); + parent(): IndentationNodeContext; + node(): ISyntaxNode; + fullStart(): number; + fullWidth(): number; + start(): number; + end(): number; + indentationAmount(): number; + childIndentationAmountDelta(): number; + depth(): number; + kind(): SyntaxKind; + hasSkippedOrMissingTokenChild(): boolean; + clone(pool: IndentationNodeContextPool): IndentationNodeContext; + update(parent: IndentationNodeContext, node: ISyntaxNode, fullStart: number, indentationAmount: number, childIndentationAmountDelta: number): void; } } -declare module TypeScript { - interface ITokenInformation { - previousToken: ISyntaxToken; - nextToken: ISyntaxToken; - } - class SyntaxInformationMap extends SyntaxWalker { - private trackParents; - private trackPreviousToken; - private tokenToInformation; - private elementToPosition; - private _previousToken; - private _previousTokenInformation; - private _currentPosition; - private _elementToParent; - private _parentStack; - constructor(trackParents: boolean, trackPreviousToken: boolean); - static create(node: SyntaxNode, trackParents: boolean, trackPreviousToken: boolean): SyntaxInformationMap; - public visitNode(node: SyntaxNode): void; - public visitToken(token: ISyntaxToken): void; - public parent(element: ISyntaxElement): SyntaxNode; - public fullStart(element: ISyntaxElement): number; - public start(element: ISyntaxElement): number; - public end(element: ISyntaxElement): number; - public previousToken(token: ISyntaxToken): ISyntaxToken; - public tokenInformation(token: ISyntaxToken): ITokenInformation; - public firstTokenInLineContainingToken(token: ISyntaxToken): ISyntaxToken; - public isFirstTokenInLine(token: ISyntaxToken): boolean; - private isFirstTokenInLineWorker(information); +declare module TypeScript.Services.Formatting { + class IndentationNodeContextPool { + private nodes; + getNode(parent: IndentationNodeContext, node: ISyntaxNode, fullStart: number, indentationLevel: number, childIndentationLevelDelta: number): IndentationNodeContext; + releaseNode(node: IndentationNodeContext, recursive?: boolean): void; } } -declare module TypeScript { - class SyntaxNodeInvariantsChecker extends SyntaxWalker { - private tokenTable; - static checkInvariants(node: SyntaxNode): void; - public visitToken(token: ISyntaxToken): void; +declare module TypeScript.Services.Formatting { + class IndentationTrackingWalker extends SyntaxWalker { + options: FormattingOptions; + private _position; + private _parent; + private _textSpan; + private _snapshot; + private _lastTriviaWasNewLine; + private _indentationNodeContextPool; + private _text; + constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); + position(): number; + parent(): IndentationNodeContext; + textSpan(): TextSpan; + snapshot(): ITextSnapshot; + indentationNodeContextPool(): IndentationNodeContextPool; + forceIndentNextToken(tokenStart: number): void; + forceSkipIndentingNextToken(tokenStart: number): void; + indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; + visitTokenInSpan(token: ISyntaxToken): void; + visitToken(token: ISyntaxToken): void; + visitNode(node: ISyntaxNode): void; + private getTokenIndentationAmount(token); + private getCommentIndentationAmount(token); + private getNodeIndentation(node, newLineInsertedByFormatting?); + private shouldIndentBlockInParent(parent); + private forceRecomputeIndentationOfParent(tokenStart, newLineAdded); } } -declare module TypeScript { - class DepthLimitedWalker extends PositionTrackingWalker { - private _depth; - private _maximumDepth; - constructor(maximumDepth: number); - public visitNode(node: SyntaxNode): void; +declare module TypeScript.Services.Formatting { + class MultipleTokenIndenter extends IndentationTrackingWalker { + private _edits; + constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); + indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; + edits(): TextEditInfo[]; + recordEdit(position: number, length: number, replaceWith: string): void; + private recordIndentationEditsForToken(token, indentationString, commentIndentationString); + private recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); + private recordIndentationEditsForWhitespace(trivia, fullStart, indentationString); + private recordIndentationEditsForMultiLineComment(trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented); + private recordIndentationEditsForSegment(segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment); } } -declare module TypeScript.Parser { - function parse(fileName: string, text: ISimpleText, isDeclaration: boolean, options: ParseOptions): SyntaxTree; - function incrementalParse(oldSyntaxTree: SyntaxTree, textChangeRange: TextChangeRange, newText: ISimpleText): SyntaxTree; -} -declare module TypeScript { - class SyntaxTree { - private _sourceUnit; - private _isDeclaration; - private _parserDiagnostics; - private _allDiagnostics; - private _fileName; - private _lineMap; - private _parseOptions; - constructor(sourceUnit: SourceUnitSyntax, isDeclaration: boolean, diagnostics: Diagnostic[], fileName: string, lineMap: LineMap, parseOtions: ParseOptions); - public toJSON(key: any): any; - public sourceUnit(): SourceUnitSyntax; - public isDeclaration(): boolean; - private computeDiagnostics(); - public diagnostics(): Diagnostic[]; - public fileName(): string; - public lineMap(): LineMap; - public parseOptions(): ParseOptions; - public structuralEquals(tree: SyntaxTree): boolean; +declare module TypeScript.Services.Formatting { + class SingleTokenIndenter extends IndentationTrackingWalker { + private indentationAmount; + private indentationPosition; + constructor(indentationPosition: number, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); + static getIndentationAmount(position: number, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, options: FormattingOptions): number; + indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; } } -declare module TypeScript { - class Unicode { - static unicodeES3IdentifierStart: number[]; - static unicodeES3IdentifierPart: number[]; - static unicodeES5IdentifierStart: number[]; - static unicodeES5IdentifierPart: number[]; - static lookupInUnicodeMap(code: number, map: number[]): boolean; - static isIdentifierStart(code: number, languageVersion: LanguageVersion): boolean; - static isIdentifierPart(code: number, languageVersion: LanguageVersion): boolean; +declare module TypeScript.Services.Formatting { + class Formatter extends MultipleTokenIndenter { + private previousTokenSpan; + private previousTokenParent; + private scriptHasErrors; + private rulesProvider; + private formattingRequestKind; + private formattingContext; + constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, indentFirstToken: boolean, options: FormattingOptions, snapshot: ITextSnapshot, rulesProvider: RulesProvider, formattingRequestKind: FormattingRequestKind); + static getEdits(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, options: FormattingOptions, indentFirstToken: boolean, snapshot: ITextSnapshot, rulesProvider: RulesProvider, formattingRequestKind: FormattingRequestKind): TextEditInfo[]; + visitTokenInSpan(token: ISyntaxToken): void; + private processToken(token); + private processTrivia(triviaList, fullStart); + private findCommonParents(parent1, parent2); + private formatPair(t1, t1Parent, t2, t2Parent); + private getLineNumber(span); + private trimWhitespaceInLineRange(startLine, endLine, token?); + private trimWhitespace(line, token?); + private RecordRuleEdits(rule, t1, t2); } } declare module TypeScript { - module CompilerDiagnostics { - var debug: boolean; - interface IDiagnosticWriter { - Alert(output: string): void; - } - var diagnosticWriter: IDiagnosticWriter; - var analysisPass: number; - function Alert(output: string): void; - function debugPrint(s: string): void; - function assert(condition: boolean, s: string): void; + class BloomFilter { + private bitArray; + private hashFunctionCount; + static falsePositiveProbability: number; + constructor(expectedCount: number); + static computeM(expectedCount: number): number; + static computeK(expectedCount: number): number; + private computeHash(key, seed); + addKeys(keys: ts.Map): void; + add(value: string): void; + probablyContains(value: string): boolean; + isEquivalent(filter: BloomFilter): boolean; + static isEquivalent(array1: boolean[], array2: boolean[]): boolean; } - interface ILogger { +} +declare module TypeScript { + interface Logger { information(): boolean; debug(): boolean; warning(): boolean; @@ -4811,484 +6614,105 @@ declare module TypeScript { fatal(): boolean; log(s: string): void; } - class NullLogger implements ILogger { - public information(): boolean; - public debug(): boolean; - public warning(): boolean; - public error(): boolean; - public fatal(): boolean; - public log(s: string): void; - } - function timeFunction(logger: ILogger, funcDescription: string, func: () => any): any; -} -declare module TypeScript { - class Document { - private _compiler; - private _semanticInfoChain; - public fileName: string; - public referencedFiles: string[]; - private _scriptSnapshot; - public byteOrderMark: ByteOrderMark; - public version: number; - public isOpen: boolean; - private _syntaxTree; - private _topLevelDecl; - private _diagnostics; - private _bloomFilter; - private _sourceUnit; - private _lineMap; - private _declASTMap; - private _astDeclMap; - private _amdDependencies; - private _externalModuleIndicatorSpan; - constructor(_compiler: TypeScriptCompiler, _semanticInfoChain: SemanticInfoChain, fileName: string, referencedFiles: string[], _scriptSnapshot: IScriptSnapshot, byteOrderMark: ByteOrderMark, version: number, isOpen: boolean, _syntaxTree: SyntaxTree, _topLevelDecl: PullDecl); - public invalidate(): void; - public isDeclareFile(): boolean; - private cacheSyntaxTreeInfo(syntaxTree); - private getAmdDependency(comment); - private getImplicitImportSpan(sourceUnitLeadingTrivia); - private getImplicitImportSpanWorker(trivia, position); - private getTopLevelImportOrExportSpan(node); - public sourceUnit(): SourceUnit; - public diagnostics(): Diagnostic[]; - public lineMap(): LineMap; - public isExternalModule(): boolean; - public externalModuleIndicatorSpan(): TextSpan; - public amdDependencies(): string[]; - public syntaxTree(): SyntaxTree; - public bloomFilter(): BloomFilter; - public emitToOwnOutputFile(): boolean; - public update(scriptSnapshot: IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TextChangeRange): Document; - static create(compiler: TypeScriptCompiler, semanticInfoChain: SemanticInfoChain, fileName: string, scriptSnapshot: IScriptSnapshot, byteOrderMark: ByteOrderMark, version: number, isOpen: boolean, referencedFiles: string[]): Document; - public topLevelDecl(): PullDecl; - public _getDeclForAST(ast: AST): PullDecl; - public getEnclosingDecl(ast: AST): PullDecl; - public _setDeclForAST(ast: AST, decl: PullDecl): void; - public _getASTForDecl(decl: PullDecl): AST; - public _setASTForDecl(decl: PullDecl, ast: AST): void; - } -} -declare module TypeScript { - function hasFlag(val: number, flag: number): boolean; - enum TypeRelationshipFlags { - SuccessfulComparison = 0, - RequiredPropertyIsMissing = 2, - IncompatibleSignatures = 4, - SourceSignatureHasTooManyParameters = 3, - IncompatibleReturnTypes = 16, - IncompatiblePropertyTypes = 32, - IncompatibleParameterTypes = 64, - InconsistantPropertyAccesibility = 128, - } - enum ModuleGenTarget { - Unspecified = 0, - Synchronous = 1, - Asynchronous = 2, + class NullLogger implements Logger { + information(): boolean; + debug(): boolean; + warning(): boolean; + error(): boolean; + fatal(): boolean; + log(s: string): void; } + function timeFunction(logger: Logger, funcDescription: string, func: () => any): any; } declare module TypeScript { - function createIntrinsicsObject(): IIndexable; - interface IHashTable { - getAllKeys(): string[]; - add(key: string, data: T): boolean; - addOrUpdate(key: string, data: T): boolean; - map(fn: (k: string, value: T, context: any) => void, context: any): void; - every(fn: (k: string, value: T, context: any) => void, context: any): boolean; - some(fn: (k: string, value: T, context: any) => void, context: any): boolean; - count(): number; - lookup(key: string): T; - } - class StringHashTable implements IHashTable { - private itemCount; - private table; - public getAllKeys(): string[]; - public add(key: string, data: T): boolean; - public addOrUpdate(key: string, data: T): boolean; - public map(fn: (k: string, value: T, context: any) => void, context: any): void; - public every(fn: (k: string, value: T, context: any) => void, context: any): boolean; - public some(fn: (k: string, value: T, context: any) => void, context: any): boolean; - public count(): number; - public lookup(key: string): T; - public remove(key: string): void; - } - class IdentiferNameHashTable extends StringHashTable { - public getAllKeys(): string[]; - public add(key: string, data: T): boolean; - public addOrUpdate(key: string, data: T): boolean; - public map(fn: (k: string, value: T, context: any) => void, context: any): void; - public every(fn: (k: string, value: T, context: any) => void, context: any): boolean; - public some(fn: (k: string, value: any, context: any) => void, context: any): boolean; - public lookup(key: string): T; - } + function createIntrinsicsObject(): ts.Map; } declare module TypeScript { - interface IParameters { - length: number; - lastParameterIsRest(): boolean; - ast: AST; - astAt(index: number): AST; - identifierAt(index: number): Identifier; - typeAt(index: number): AST; - initializerAt(index: number): EqualsValueClause; - isOptionalAt(index: number): boolean; + class Comment { + private _trivia; + endsLine: boolean; + _start: number; + _end: number; + constructor(_trivia: ISyntaxTrivia, endsLine: boolean, _start: number, _end: number); + start(): number; + end(): number; + fullText(): string; + kind(): SyntaxKind; + structuralEquals(ast: Comment, includingPosition: boolean): boolean; } } -declare module TypeScript.ASTHelpers { - function scriptIsElided(sourceUnit: SourceUnit): boolean; - function moduleIsElided(declaration: ModuleDeclaration): boolean; - function enumIsElided(declaration: EnumDeclaration): boolean; - function isValidAstNode(ast: IASTSpan): boolean; - function getAstAtPosition(script: AST, pos: number, useTrailingTriviaAsLimChar?: boolean, forceInclusive?: boolean): AST; - function getExtendsHeritageClause(clauses: ISyntaxList2): HeritageClause; - function getImplementsHeritageClause(clauses: ISyntaxList2): HeritageClause; - function isCallExpression(ast: AST): boolean; - function isCallExpressionTarget(ast: AST): boolean; - function isDeclarationASTOrDeclarationNameAST(ast: AST): boolean; - function getEnclosingParameterForInitializer(ast: AST): Parameter; - function getEnclosingMemberVariableDeclaration(ast: AST): MemberVariableDeclaration; - function isNameOfFunction(ast: AST): boolean; - function isNameOfMemberFunction(ast: AST): boolean; - function isNameOfMemberAccessExpression(ast: AST): boolean; - function isRightSideOfQualifiedName(ast: AST): boolean; - function parentIsModuleDeclaration(ast: AST): boolean; - function parametersFromIdentifier(id: Identifier): IParameters; - function parametersFromParameter(parameter: Parameter): IParameters; - function parametersFromParameterList(list: ParameterList): IParameters; - function isDeclarationAST(ast: AST): boolean; - function docComments(ast: AST): Comment[]; - function getParameterList(ast: AST): ParameterList; - function getType(ast: AST): AST; - function getVariableDeclaratorModifiers(variableDeclarator: VariableDeclarator): PullElementFlags[]; - function isIntegerLiteralAST(expression: AST): boolean; - function getEnclosingModuleDeclaration(ast: AST): ModuleDeclaration; - function getModuleDeclarationFromNameAST(ast: AST): ModuleDeclaration; - function isLastNameOfModule(ast: ModuleDeclaration, astName: AST): boolean; - function getNameOfIdenfierOrQualifiedName(name: AST): string; - function getModuleNames(name: AST, result?: Identifier[]): Identifier[]; -} declare module TypeScript { class AstWalkOptions { - public goChildren: boolean; - public stopWalking: boolean; + goChildren: boolean; + stopWalking: boolean; } interface IAstWalker { options: AstWalkOptions; state: any; } class AstWalkerFactory { - public walk(ast: AST, pre: (ast: AST, walker: IAstWalker) => void, post?: (ast: AST, walker: IAstWalker) => void, state?: any): void; - public simpleWalk(ast: AST, pre: (ast: AST, state: any) => void, post?: (ast: AST, state: any) => void, state?: any): void; + walk(ast: ISyntaxElement, pre: (ast: ISyntaxElement, walker: IAstWalker) => void, post?: (ast: ISyntaxElement, walker: IAstWalker) => void, state?: any): void; + simpleWalk(ast: ISyntaxElement, pre: (ast: ISyntaxElement, state: any) => void, post?: (ast: ISyntaxElement, state: any) => void, state?: any): void; } function getAstWalkerFactory(): AstWalkerFactory; } -declare module TypeScript { - class Base64VLQFormat { - static encode(inValue: number): string; - static decode(inString: string): { - value: number; - rest: string; - }; - } -} -declare module TypeScript { - class SourceMapPosition { - public sourceLine: number; - public sourceColumn: number; - public emittedLine: number; - public emittedColumn: number; - } - class SourceMapping { - public start: SourceMapPosition; - public end: SourceMapPosition; - public nameIndex: number; - public childMappings: SourceMapping[]; - } - class SourceMapEntry { - public emittedFile: string; - public emittedLine: number; - public emittedColumn: number; - public sourceFile: string; - public sourceLine: number; - public sourceColumn: number; - public sourceName: string; - constructor(emittedFile: string, emittedLine: number, emittedColumn: number, sourceFile: string, sourceLine: number, sourceColumn: number, sourceName: string); - } - class SourceMapper { - private jsFile; - private sourceMapOut; - static MapFileExtension: string; - private jsFileName; - private sourceMapPath; - private sourceMapDirectory; - private sourceRoot; - public names: string[]; - private mappingLevel; - private tsFilePaths; - private allSourceMappings; - public currentMappings: SourceMapping[][]; - public currentNameIndex: number[]; - private sourceMapEntries; - constructor(jsFile: TextWriter, sourceMapOut: TextWriter, document: Document, jsFilePath: string, emitOptions: EmitOptions, resolvePath: (path: string) => string); - public getOutputFile(): OutputFile; - public increaseMappingLevel(ast: IASTSpan): void; - public decreaseMappingLevel(ast: IASTSpan): void; - public setNewSourceFile(document: Document, emitOptions: EmitOptions): void; - private setSourceMapOptions(document, jsFilePath, emitOptions, resolvePath); - private setNewSourceFilePath(document, emitOptions); - public emitSourceMapping(): void; - } -} -declare module TypeScript { - enum EmitContainer { - Prog = 0, - Module = 1, - DynamicModule = 2, - Class = 3, - Constructor = 4, - Function = 5, - Args = 6, - Interface = 7, - } - class EmitState { - public column: number; - public line: number; - public container: EmitContainer; - constructor(); - } - class EmitOptions { - public resolvePath: (path: string) => string; - private _diagnostic; - private _settings; - private _commonDirectoryPath; - private _sharedOutputFile; - private _sourceRootDirectory; - private _sourceMapRootDirectory; - private _outputDirectory; - public diagnostic(): Diagnostic; - public commonDirectoryPath(): string; - public sharedOutputFile(): string; - public sourceRootDirectory(): string; - public sourceMapRootDirectory(): string; - public outputDirectory(): string; - public compilationSettings(): ImmutableCompilationSettings; - constructor(compiler: TypeScriptCompiler, resolvePath: (path: string) => string); - private determineCommonDirectoryPath(compiler); - } - class Indenter { - static indentStep: number; - static indentStepString: string; - static indentStrings: string[]; - public indentAmt: number; - public increaseIndent(): void; - public decreaseIndent(): void; - public getIndent(): string; - } - function lastParameterIsRest(parameterList: ParameterList): boolean; - class Emitter { - public emittingFileName: string; - public outfile: TextWriter; - public emitOptions: EmitOptions; - private semanticInfoChain; - public globalThisCapturePrologueEmitted: boolean; - public extendsPrologueEmitted: boolean; - public thisClassNode: ClassDeclaration; - public inArrowFunction: boolean; - public moduleName: string; - public emitState: EmitState; - public indenter: Indenter; - public sourceMapper: SourceMapper; - public captureThisStmtString: string; - private currentVariableDeclaration; - private declStack; - private exportAssignment; - private inWithBlock; - public document: Document; - private detachedCommentsElement; - constructor(emittingFileName: string, outfile: TextWriter, emitOptions: EmitOptions, semanticInfoChain: SemanticInfoChain); - private pushDecl(decl); - private popDecl(decl); - private getEnclosingDecl(); - public setExportAssignment(exportAssignment: ExportAssignment): void; - public getExportAssignment(): ExportAssignment; - public setDocument(document: Document): void; - public shouldEmitImportDeclaration(importDeclAST: ImportDeclaration): boolean; - public emitImportDeclaration(importDeclAST: ImportDeclaration): void; - public createSourceMapper(document: Document, jsFileName: string, jsFile: TextWriter, sourceMapOut: TextWriter, resolvePath: (path: string) => string): void; - public setSourceMapperNewSourceFile(document: Document): void; - private updateLineAndColumn(s); - public writeToOutputWithSourceMapRecord(s: string, astSpan: IASTSpan): void; - public writeToOutput(s: string): void; - public writeLineToOutput(s: string, force?: boolean): void; - public writeCaptureThisStatement(ast: AST): void; - public setContainer(c: number): number; - private getIndentString(); - public emitIndent(): void; - public emitComment(comment: Comment, trailing: boolean, first: boolean): void; - public emitComments(ast: AST, pre: boolean, onlyPinnedOrTripleSlashComments?: boolean): void; - private isPinnedOrTripleSlash(comment); - public emitCommentsArray(comments: Comment[], trailing: boolean): void; - public emitObjectLiteralExpression(objectLiteral: ObjectLiteralExpression): void; - public emitArrayLiteralExpression(arrayLiteral: ArrayLiteralExpression): void; - public emitObjectCreationExpression(objectCreationExpression: ObjectCreationExpression): void; - public getConstantDecl(dotExpr: MemberAccessExpression): PullEnumElementDecl; - public tryEmitConstant(dotExpr: MemberAccessExpression): boolean; - public emitInvocationExpression(callNode: InvocationExpression): void; - private emitParameterList(list); - private emitFunctionParameters(parameters); - private emitFunctionBodyStatements(name, funcDecl, parameterList, block, bodyExpression); - private emitDefaultValueAssignments(parameters); - private emitRestParameterInitializer(parameters); - private getImportDecls(fileName); - public getModuleImportAndDependencyList(sourceUnit: SourceUnit): { - importList: string; - dependencyList: string; - }; - public shouldCaptureThis(ast: AST): boolean; - public emitEnum(moduleDecl: EnumDeclaration): void; - private getModuleDeclToVerifyChildNameCollision(moduleDecl, changeNameIfAnyDeclarationInContext); - private hasChildNameCollision(moduleName, parentDecl); - private getModuleName(moduleDecl, changeNameIfAnyDeclarationInContext?); - private emitModuleDeclarationWorker(moduleDecl); - public emitSingleModuleDeclaration(moduleDecl: ModuleDeclaration, moduleName: IASTToken): void; - public emitEnumElement(varDecl: EnumElement): void; - public emitElementAccessExpression(expression: ElementAccessExpression): void; - public emitSimpleArrowFunctionExpression(arrowFunction: SimpleArrowFunctionExpression): void; - public emitParenthesizedArrowFunctionExpression(arrowFunction: ParenthesizedArrowFunctionExpression): void; - private emitAnyArrowFunctionExpression(arrowFunction, funcName, parameters, block, expression); - public emitConstructor(funcDecl: ConstructorDeclaration): void; - public emitGetAccessor(accessor: GetAccessor): void; - public emitSetAccessor(accessor: SetAccessor): void; - public emitFunctionExpression(funcDecl: FunctionExpression): void; - public emitFunction(funcDecl: FunctionDeclaration): void; - public emitAmbientVarDecl(varDecl: VariableDeclarator): void; - public emitVarDeclVar(): void; - public emitVariableDeclaration(declaration: VariableDeclaration): void; - private emitMemberVariableDeclaration(varDecl); - public emitVariableDeclarator(varDecl: VariableDeclarator): void; - private symbolIsUsedInItsEnclosingContainer(symbol, dynamic?); - private shouldQualifySymbolNameWithParentName(symbol); - private getSymbolForEmit(ast); - public emitName(name: Identifier, addThis: boolean): void; - public recordSourceMappingNameStart(name: string): void; - public recordSourceMappingNameEnd(): void; - public recordSourceMappingStart(ast: IASTSpan): void; - public recordSourceMappingEnd(ast: IASTSpan): void; - public getOutputFiles(): OutputFile[]; - private emitParameterPropertyAndMemberVariableAssignments(); - private isOnSameLine(pos1, pos2); - private emitCommaSeparatedList(parent, list, buffer, preserveNewLines); - public emitList(list: ISyntaxList2, useNewLineSeparator?: boolean, startInclusive?: number, endExclusive?: number): void; - public emitSeparatedList(list: ISeparatedSyntaxList2, useNewLineSeparator?: boolean, startInclusive?: number, endExclusive?: number): void; - private isDirectivePrologueElement(node); - public emitSpaceBetweenConstructs(node1: AST, node2: AST): void; - private getDetachedComments(element); - private emitPossibleCopyrightHeaders(script); - private emitDetachedComments(list); - public emitScriptElements(sourceUnit: SourceUnit): void; - public emitConstructorStatements(funcDecl: ConstructorDeclaration): void; - public emitJavascript(ast: AST, startLine: boolean): void; - public emitAccessorMemberDeclaration(funcDecl: AST, name: IASTToken, className: string, isProto: boolean): void; - private emitAccessorBody(funcDecl, parameterList, block); - public emitClass(classDecl: ClassDeclaration): void; - private emitClassMembers(classDecl); - private emitClassMemberFunctionDeclaration(classDecl, funcDecl); - private requiresExtendsBlock(moduleElements); - public emitPrologue(sourceUnit: SourceUnit): void; - public emitThis(): void; - public emitBlockOrStatement(node: AST): void; - public emitLiteralExpression(expression: LiteralExpression): void; - public emitThisExpression(expression: ThisExpression): void; - public emitSuperExpression(expression: SuperExpression): void; - public emitParenthesizedExpression(parenthesizedExpression: ParenthesizedExpression): void; - public emitCastExpression(expression: CastExpression): void; - public emitPrefixUnaryExpression(expression: PrefixUnaryExpression): void; - public emitPostfixUnaryExpression(expression: PostfixUnaryExpression): void; - public emitTypeOfExpression(expression: TypeOfExpression): void; - public emitDeleteExpression(expression: DeleteExpression): void; - public emitVoidExpression(expression: VoidExpression): void; - private canEmitDottedNameMemberAccessExpression(expression); - private emitDottedNameMemberAccessExpression(expression); - private emitDottedNameMemberAccessExpressionRecurse(expression); - public emitMemberAccessExpression(expression: MemberAccessExpression): void; - public emitQualifiedName(name: QualifiedName): void; - public emitBinaryExpression(expression: BinaryExpression): void; - public emitSimplePropertyAssignment(property: SimplePropertyAssignment): void; - public emitFunctionPropertyAssignment(funcProp: FunctionPropertyAssignment): void; - public emitConditionalExpression(expression: ConditionalExpression): void; - public emitThrowStatement(statement: ThrowStatement): void; - public emitExpressionStatement(statement: ExpressionStatement): void; - public emitLabeledStatement(statement: LabeledStatement): void; - public emitBlock(block: Block): void; - public emitBreakStatement(jump: BreakStatement): void; - public emitContinueStatement(jump: ContinueStatement): void; - public emitWhileStatement(statement: WhileStatement): void; - public emitDoStatement(statement: DoStatement): void; - public emitIfStatement(statement: IfStatement): void; - public emitElseClause(elseClause: ElseClause): void; - public emitReturnStatement(statement: ReturnStatement): void; - public emitForInStatement(statement: ForInStatement): void; - public emitForStatement(statement: ForStatement): void; - public emitWithStatement(statement: WithStatement): void; - public emitSwitchStatement(statement: SwitchStatement): void; - public emitCaseSwitchClause(clause: CaseSwitchClause): void; - private emitSwitchClauseBody(body); - public emitDefaultSwitchClause(clause: DefaultSwitchClause): void; - public emitTryStatement(statement: TryStatement): void; - public emitCatchClause(clause: CatchClause): void; - public emitFinallyClause(clause: FinallyClause): void; - public emitDebuggerStatement(statement: DebuggerStatement): void; - public emitNumericLiteral(literal: NumericLiteral): void; - public emitRegularExpressionLiteral(literal: RegularExpressionLiteral): void; - public emitStringLiteral(literal: StringLiteral): void; - public emitEqualsValueClause(clause: EqualsValueClause): void; - public emitParameter(parameter: Parameter): void; - public emitConstructorDeclaration(declaration: ConstructorDeclaration): void; - public shouldEmitFunctionDeclaration(declaration: FunctionDeclaration): boolean; - public emitFunctionDeclaration(declaration: FunctionDeclaration): void; - private emitSourceUnit(sourceUnit); - public shouldEmitEnumDeclaration(declaration: EnumDeclaration): boolean; - public emitEnumDeclaration(declaration: EnumDeclaration): void; - public shouldEmitModuleDeclaration(declaration: ModuleDeclaration): boolean; - private emitModuleDeclaration(declaration); - public shouldEmitClassDeclaration(declaration: ClassDeclaration): boolean; - public emitClassDeclaration(declaration: ClassDeclaration): void; - public shouldEmitInterfaceDeclaration(declaration: InterfaceDeclaration): boolean; - public emitInterfaceDeclaration(declaration: InterfaceDeclaration): void; - private firstVariableDeclarator(statement); - private isNotAmbientOrHasInitializer(variableStatement); - public shouldEmitVariableStatement(statement: VariableStatement): boolean; - public emitVariableStatement(statement: VariableStatement): void; - public emitGenericType(type: GenericType): void; - private shouldEmit(ast); - private emit(ast); - private emitWorker(ast); - } - function getLastConstructor(classDecl: ClassDeclaration): ConstructorDeclaration; - function getTrimmedTextLines(comment: Comment): string[]; +declare module TypeScript.ASTHelpers { + function isValidAstNode(ast: ISyntaxElement): boolean; + function isValidSpan(ast: ISpan): boolean; + function getAstAtPosition(script: ISyntaxElement, pos: number, useTrailingTriviaAsLimChar?: boolean, forceInclusive?: boolean): ISyntaxElement; + function getExtendsHeritageClause(clauses: HeritageClauseSyntax[]): HeritageClauseSyntax; + function getImplementsHeritageClause(clauses: HeritageClauseSyntax[]): HeritageClauseSyntax; + function isCallExpression(ast: ISyntaxElement): boolean; + function isCallExpressionTarget(ast: ISyntaxElement): boolean; + function getCallExpressionTarget(ast: ISyntaxElement): ISyntaxElement; + function isDeclarationASTOrDeclarationNameAST(ast: ISyntaxElement): boolean; + function getEnclosingParameterForInitializer(ast: ISyntaxElement): ParameterSyntax; + function getEnclosingMemberDeclaration(ast: ISyntaxElement): ISyntaxElement; + function isNameOfFunction(ast: ISyntaxElement): boolean; + function isNameOfMemberFunction(ast: ISyntaxElement): boolean; + function isNameOfMemberAccessExpression(ast: ISyntaxElement): boolean; + function isRightSideOfQualifiedName(ast: ISyntaxElement): boolean; + function parentIsModuleDeclaration(ast: ISyntaxElement): boolean; + function isDeclarationAST(ast: ISyntaxElement): boolean; + function preComments(element: ISyntaxElement, text: ISimpleText): Comment[]; + function postComments(element: ISyntaxElement, text: ISimpleText): Comment[]; + function convertTokenLeadingComments(token: ISyntaxToken, text: ISimpleText): Comment[]; + function convertTokenTrailingComments(token: ISyntaxToken, text: ISimpleText): Comment[]; + function docComments(ast: ISyntaxElement, text: ISimpleText): Comment[]; + function isDocComment(comment: Comment): boolean; + function getParameterList(ast: ISyntaxElement): ParameterListSyntax; + function getType(ast: ISyntaxElement): ITypeSyntax; + function getVariableDeclaratorModifiers(variableDeclarator: VariableDeclaratorSyntax): ISyntaxToken[]; + function isIntegerLiteralAST(expression: ISyntaxElement): boolean; + function getEnclosingModuleDeclaration(ast: ISyntaxElement): ModuleDeclarationSyntax; + function getModuleDeclarationFromNameAST(ast: ISyntaxElement): ModuleDeclarationSyntax; + function isLastNameOfModule(ast: ModuleDeclarationSyntax, astName: ISyntaxElement): boolean; + function getNameOfIdentifierOrQualifiedName(name: ISyntaxElement): string; + function getModuleNames(name: ISyntaxElement, result?: ISyntaxToken[]): ISyntaxToken[]; } declare module TypeScript { class MemberName { - public prefix: string; - public suffix: string; - public isString(): boolean; - public isArray(): boolean; - public isMarker(): boolean; - public toString(): string; + prefix: string; + suffix: string; + isString(): boolean; + isArray(): boolean; + isMarker(): boolean; + toString(): string; static memberNameToString(memberName: MemberName, markerInfo?: number[], markerBaseLength?: number): string; static create(text: string): MemberName; static create(entry: MemberName, prefix: string, suffix: string): MemberName; } class MemberNameString extends MemberName { - public text: string; + text: string; constructor(text: string); - public isString(): boolean; + isString(): boolean; } class MemberNameArray extends MemberName { - public delim: string; - public entries: MemberName[]; - public isArray(): boolean; - public add(entry: MemberName): void; - public addAll(entries: MemberName[]): void; + delim: string; + entries: MemberName[]; + isArray(): boolean; + add(entry: MemberName): void; + addAll(entries: MemberName[]): void; constructor(); } } @@ -5306,2860 +6730,77 @@ declare module TypeScript { function getPrettyName(modPath: string, quote?: boolean, treatAsFileName?: boolean): any; function getPathComponents(path: string): string[]; function getRelativePathToFixedPath(fixedModFilePath: string, absoluteModPath: string, isAbsoultePathURL?: boolean): string; - function changePathToDTS(modPath: string): string; - function isRelative(path: string): boolean; - function isRooted(path: string): boolean; - function getRootFilePath(outFname: string): string; - function filePathComponents(fullPath: string): string[]; - function filePath(fullPath: string): string; - function convertToDirectoryPath(dirPath: string): string; - function normalizePath(path: string): string; -} -declare module TypeScript { - interface IFileReference extends ILineAndCharacter { - path: string; - isResident: boolean; - position: number; - length: number; - } -} -declare module TypeScript { - interface IPreProcessedFileInfo { - referencedFiles: IFileReference[]; - importedFiles: IFileReference[]; - diagnostics: Diagnostic[]; - isLibFile: boolean; - } - var tripleSlashReferenceRegExp: RegExp; - function preProcessFile(fileName: string, sourceText: IScriptSnapshot, readImportFiles?: boolean): IPreProcessedFileInfo; - function getParseOptions(settings: ImmutableCompilationSettings): ParseOptions; - function getReferencedFiles(fileName: string, sourceText: IScriptSnapshot): IFileReference[]; -} -declare module TypeScript { - interface IResolvedFile { - path: string; - referencedFiles: string[]; - importedFiles: string[]; - } - interface IReferenceResolverHost { - getScriptSnapshot(fileName: string): IScriptSnapshot; - resolveRelativePath(path: string, directory: string): string; - fileExists(path: string): boolean; - directoryExists(path: string): boolean; - getParentDirectory(path: string): string; - } - class ReferenceResolutionResult { - public resolvedFiles: IResolvedFile[]; - public diagnostics: Diagnostic[]; - public seenNoDefaultLibTag: boolean; - } - class ReferenceResolver { - private useCaseSensitiveFileResolution; - private inputFileNames; - private host; - private visited; - constructor(inputFileNames: string[], host: IReferenceResolverHost, useCaseSensitiveFileResolution: boolean); - static resolve(inputFileNames: string[], host: IReferenceResolverHost, useCaseSensitiveFileResolution: boolean): ReferenceResolutionResult; - public resolveInputFiles(): ReferenceResolutionResult; - private resolveIncludedFile(path, referenceLocation, resolutionResult); - private resolveImportedFile(path, referenceLocation, resolutionResult); - private resolveFile(normalizedPath, resolutionResult); - private getNormalizedFilePath(path, parentFilePath); - private getUniqueFileId(filePath); - private recordVisitedFile(filePath); - private isVisited(filePath); - private isSameFile(filePath1, filePath2); - } -} -declare module TypeScript { - class TextWriter { - private name; - private writeByteOrderMark; - private outputFileType; - private contents; - public onNewLine: boolean; - constructor(name: string, writeByteOrderMark: boolean, outputFileType: OutputFileType); - public Write(s: string): void; - public WriteLine(s: string): void; - public Close(): void; - public getOutputFile(): OutputFile; - } - class DeclarationEmitter { - private emittingFileName; - public document: Document; - private compiler; - private emitOptions; - private semanticInfoChain; - private declFile; - private indenter; - private emittedReferencePaths; - constructor(emittingFileName: string, document: Document, compiler: TypeScriptCompiler, emitOptions: EmitOptions, semanticInfoChain: SemanticInfoChain); - public getOutputFile(): OutputFile; - public emitDeclarations(sourceUnit: SourceUnit): void; - private emitDeclarationsForList(list); - private emitSeparatedList(list); - private emitDeclarationsForAST(ast); - private getIndentString(declIndent?); - private emitIndent(); - private canEmitDeclarations(declAST); - private getDeclFlagsString(pullDecl, typeString); - private emitDeclFlags(declarationAST, typeString); - private emitTypeNamesMember(memberName, emitIndent?); - private emitTypeSignature(ast, type); - private emitComment(comment); - private emitDeclarationComments(ast, endLine?); - private writeDeclarationComments(declComments, endLine?); - private emitTypeOfVariableDeclaratorOrParameter(boundDecl); - private emitPropertySignature(varDecl); - private emitVariableDeclarator(varDecl, isFirstVarInList, isLastVarInList); - private emitClassElementModifiers(modifiers); - private emitDeclarationsForMemberVariableDeclaration(varDecl); - private emitDeclarationsForVariableStatement(variableStatement); - private emitDeclarationsForVariableDeclaration(variableDeclaration); - private emitArgDecl(argDecl, id, isOptional, isPrivate); - private isOverloadedCallSignature(funcDecl); - private emitDeclarationsForConstructorDeclaration(funcDecl); - private emitParameterList(isPrivate, parameterList); - private emitParameters(isPrivate, parameterList); - private emitMemberFunctionDeclaration(funcDecl); - private emitCallSignature(funcDecl); - private emitConstructSignature(funcDecl); - private emitMethodSignature(funcDecl); - private emitDeclarationsForFunctionDeclaration(funcDecl); - private emitIndexMemberDeclaration(funcDecl); - private emitIndexSignature(funcDecl); - private emitBaseList(bases, useExtendsList); - private emitAccessorDeclarationComments(funcDecl); - private emitDeclarationsForGetAccessor(funcDecl); - private emitDeclarationsForSetAccessor(funcDecl); - private emitMemberAccessorDeclaration(funcDecl, modifiers, name); - private emitClassMembersFromConstructorDefinition(funcDecl); - private emitDeclarationsForClassDeclaration(classDecl); - private emitHeritageClauses(clauses); - private emitHeritageClause(clause); - static getEnclosingContainer(ast: AST): AST; - private emitTypeParameters(typeParams, funcSignature?); - private emitDeclarationsForInterfaceDeclaration(interfaceDecl); - private emitDeclarationsForImportDeclaration(importDeclAST); - private emitDeclarationsForEnumDeclaration(moduleDecl); - private emitDeclarationsForModuleDeclaration(moduleDecl); - private emitDeclarationsForExportAssignment(ast); - private resolveScriptReference(document, reference); - private emitReferencePaths(sourceUnit); - private emitDeclarationsForSourceUnit(sourceUnit); - } -} -declare module TypeScript { - class BloomFilter { - private bitArray; - private hashFunctionCount; - static falsePositiveProbability: number; - constructor(expectedCount: number); - static computeM(expectedCount: number): number; - static computeK(expectedCount: number): number; - private computeHash(key, seed); - public addKeys(keys: IIndexable): void; - public add(value: string): void; - public probablyContains(value: string): boolean; - public isEquivalent(filter: BloomFilter): boolean; - static isEquivalent(array1: boolean[], array2: boolean[]): boolean; - } -} -declare module TypeScript { - class IdentifierWalker extends SyntaxWalker { - public list: IIndexable; - constructor(list: IIndexable); - public visitToken(token: ISyntaxToken): void; - } -} -declare module TypeScript { - class CompilationSettings { - public propagateEnumConstants: boolean; - public removeComments: boolean; - public watch: boolean; - public noResolve: boolean; - public allowAutomaticSemicolonInsertion: boolean; - public noImplicitAny: boolean; - public noLib: boolean; - public codeGenTarget: LanguageVersion; - public moduleGenTarget: ModuleGenTarget; - public outFileOption: string; - public outDirOption: string; - public mapSourceFiles: boolean; - public mapRoot: string; - public sourceRoot: string; - public generateDeclarationFiles: boolean; - public useCaseSensitiveFileResolution: boolean; - public gatherDiagnostics: boolean; - public codepage: number; - public createFileLog: boolean; - } - class ImmutableCompilationSettings { - private static _defaultSettings; - private _propagateEnumConstants; - private _removeComments; - private _watch; - private _noResolve; - private _allowAutomaticSemicolonInsertion; - private _noImplicitAny; - private _noLib; - private _codeGenTarget; - private _moduleGenTarget; - private _outFileOption; - private _outDirOption; - private _mapSourceFiles; - private _mapRoot; - private _sourceRoot; - private _generateDeclarationFiles; - private _useCaseSensitiveFileResolution; - private _gatherDiagnostics; - private _codepage; - private _createFileLog; - public propagateEnumConstants(): boolean; - public removeComments(): boolean; - public watch(): boolean; - public noResolve(): boolean; - public allowAutomaticSemicolonInsertion(): boolean; - public noImplicitAny(): boolean; - public noLib(): boolean; - public codeGenTarget(): LanguageVersion; - public moduleGenTarget(): ModuleGenTarget; - public outFileOption(): string; - public outDirOption(): string; - public mapSourceFiles(): boolean; - public mapRoot(): string; - public sourceRoot(): string; - public generateDeclarationFiles(): boolean; - public useCaseSensitiveFileResolution(): boolean; - public gatherDiagnostics(): boolean; - public codepage(): number; - public createFileLog(): boolean; - constructor(propagateEnumConstants: boolean, removeComments: boolean, watch: boolean, noResolve: boolean, allowAutomaticSemicolonInsertion: boolean, noImplicitAny: boolean, noLib: boolean, codeGenTarget: LanguageVersion, moduleGenTarget: ModuleGenTarget, outFileOption: string, outDirOption: string, mapSourceFiles: boolean, mapRoot: string, sourceRoot: string, generateDeclarationFiles: boolean, useCaseSensitiveFileResolution: boolean, gatherDiagnostics: boolean, codepage: number, createFileLog: boolean); - static defaultSettings(): ImmutableCompilationSettings; - static fromCompilationSettings(settings: CompilationSettings): ImmutableCompilationSettings; - public toCompilationSettings(): any; - } -} -declare module TypeScript { - enum PullElementFlags { - None = 0, - Exported = 1, - Private = 2, - Public = 4, - Ambient = 8, - Static = 16, - Optional = 128, - Signature = 2048, - Enum = 4096, - ArrowFunction = 8192, - ClassConstructorVariable = 16384, - InitializedModule = 32768, - InitializedDynamicModule = 65536, - MustCaptureThis = 262144, - DeclaredInAWithBlock = 2097152, - HasReturnStatement = 4194304, - PropertyParameter = 8388608, - IsAnnotatedWithAny = 16777216, - HasDefaultArgs = 33554432, - ConstructorParameter = 67108864, - ImplicitVariable = 118784, - SomeInitializedModule = 102400, - } - function hasModifier(modifiers: PullElementFlags[], flag: PullElementFlags): boolean; - enum PullElementKind { - None = 0, - Global = 0, - Script = 1, - Primitive = 2, - Container = 4, - Class = 8, - Interface = 16, - DynamicModule = 32, - Enum = 64, - TypeAlias = 128, - ObjectLiteral = 256, - Variable = 512, - CatchVariable = 1024, - Parameter = 2048, - Property = 4096, - TypeParameter = 8192, - Function = 16384, - ConstructorMethod = 32768, - Method = 65536, - FunctionExpression = 131072, - GetAccessor = 262144, - SetAccessor = 524288, - CallSignature = 1048576, - ConstructSignature = 2097152, - IndexSignature = 4194304, - ObjectType = 8388608, - FunctionType = 16777216, - ConstructorType = 33554432, - EnumMember = 67108864, - WithBlock = 134217728, - CatchBlock = 268435456, - All = 536869887, - SomeFunction = 1032192, - SomeValue = 68147712, - SomeType = 58728795, - AcceptableAlias = 59753052, - SomeContainer = 164, - SomeSignature = 7340032, - SomeTypeReference = 58720272, - SomeInstantiatableType = 8216, - } -} -declare module TypeScript { - class PullDecl { - public kind: PullElementKind; - public name: string; - private declDisplayName; - public semanticInfoChain: SemanticInfoChain; - public declID: number; - public flags: PullElementFlags; - private declGroups; - private childDecls; - private typeParameters; - private synthesizedValDecl; - private containerDecl; - public childDeclTypeCache: IIndexable; - public childDeclValueCache: IIndexable; - public childDeclNamespaceCache: IIndexable; - public childDeclTypeParameterCache: IIndexable; - constructor(declName: string, displayName: string, kind: PullElementKind, declFlags: PullElementFlags, semanticInfoChain: SemanticInfoChain); - public fileName(): string; - public getParentPath(): PullDecl[]; - public getParentDecl(): PullDecl; - public isExternalModule(): boolean; - public getEnclosingDecl(): PullDecl; - public _getEnclosingDeclFromParentDecl(): PullDecl; - public getDisplayName(): string; - public setSymbol(symbol: PullSymbol): void; - public ensureSymbolIsBound(): void; - public getSymbol(): PullSymbol; - public hasSymbol(): boolean; - public setSignatureSymbol(signatureSymbol: PullSignatureSymbol): void; - public getSignatureSymbol(): PullSignatureSymbol; - public hasSignatureSymbol(): boolean; - public setFlags(flags: PullElementFlags): void; - public setFlag(flags: PullElementFlags): void; - public setValueDecl(valDecl: PullDecl): void; - public getValueDecl(): PullDecl; - public getContainerDecl(): PullDecl; - private getChildDeclCache(declKind); - public addChildDecl(childDecl: PullDecl): void; - public searchChildDecls(declName: string, searchKind: PullElementKind): PullDecl[]; - public getChildDecls(): PullDecl[]; - public getTypeParameters(): PullDecl[]; - public addVariableDeclToGroup(decl: PullDecl): void; - public getVariableDeclGroups(): PullDecl[][]; - public hasBeenBound(): boolean; - public isSynthesized(): boolean; - public ast(): AST; - public isRootDecl(): void; - } - class RootPullDecl extends PullDecl { - private _isExternalModule; - private _fileName; - constructor(name: string, fileName: string, kind: PullElementKind, declFlags: PullElementFlags, semanticInfoChain: SemanticInfoChain, isExternalModule: boolean); - public fileName(): string; - public getParentPath(): PullDecl[]; - public getParentDecl(): PullDecl; - public isExternalModule(): boolean; - public getEnclosingDecl(): RootPullDecl; - public isRootDecl(): boolean; - } - class NormalPullDecl extends PullDecl { - private parentDecl; - public _rootDecl: RootPullDecl; - private parentPath; - constructor(declName: string, displayName: string, kind: PullElementKind, declFlags: PullElementFlags, parentDecl: PullDecl, addToParent?: boolean); - public fileName(): string; - public getParentDecl(): PullDecl; - public getParentPath(): PullDecl[]; - public isExternalModule(): boolean; - public getEnclosingDecl(): PullDecl; - public isRootDecl(): boolean; - } - class PullEnumElementDecl extends NormalPullDecl { - public constantValue: number; - constructor(declName: string, displayName: string, parentDecl: PullDecl); - } - class PullFunctionExpressionDecl extends NormalPullDecl { - private functionExpressionName; - constructor(expressionName: string, declFlags: PullElementFlags, parentDecl: PullDecl, displayName?: string); - public getFunctionExpressionName(): string; - } - class PullSynthesizedDecl extends NormalPullDecl { - constructor(declName: string, displayName: string, kind: PullElementKind, declFlags: PullElementFlags, parentDecl: PullDecl, semanticInfoChain: SemanticInfoChain); - public isSynthesized(): boolean; - public fileName(): string; - } - class PullDeclGroup { - public name: string; - private _decls; - constructor(name: string); - public addDecl(decl: PullDecl): void; - public getDecls(): PullDecl[]; - } -} -declare module TypeScript { - var pullSymbolID: number; - var sentinelEmptyArray: any[]; - class PullSymbol { - public pullSymbolID: number; - public name: string; - public kind: PullElementKind; - private _container; - public type: PullTypeSymbol; - private _declarations; - public isResolved: boolean; - public isOptional: boolean; - public inResolution: boolean; - private isSynthesized; - public isVarArg: boolean; - private rootSymbol; - private _enclosingSignature; - private _docComments; - public isPrinting: boolean; - public isAny(): boolean; - public isType(): boolean; - public isTypeReference(): boolean; - public isSignature(): boolean; - public isArrayNamedTypeReference(): boolean; - public isPrimitive(): boolean; - public isAccessor(): boolean; - public isError(): boolean; - public isInterface(): boolean; - public isMethod(): boolean; - public isProperty(): boolean; - public isAlias(): boolean; - public isContainer(): boolean; - constructor(name: string, declKind: PullElementKind); - private findAliasedTypeSymbols(scopeSymbol, skipScopeSymbolAliasesLookIn?, lookIntoOnlyExportedAlias?, aliasSymbols?, visitedScopeDeclarations?); - public getExternalAliasedSymbols(scopeSymbol: PullSymbol): PullTypeAliasSymbol[]; - static _isExternalModuleReferenceAlias(aliasSymbol: PullTypeAliasSymbol): boolean; - private getExportedInternalAliasSymbol(scopeSymbol); - public getAliasSymbolName(scopeSymbol: PullSymbol, aliasNameGetter: (symbol: PullTypeAliasSymbol) => string, aliasPartsNameGetter: (symbol: PullTypeAliasSymbol) => string, skipInternalAlias?: boolean): string; - public _getResolver(): PullTypeResolver; - public _resolveDeclaredSymbol(): PullSymbol; - public getName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getDisplayName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean, skipInternalAliasName?: boolean): string; - public getIsSpecialized(): boolean; - public getRootSymbol(): PullSymbol; - public setRootSymbol(symbol: PullSymbol): void; - public setIsSynthesized(value?: boolean): void; - public getIsSynthesized(): any; - public setEnclosingSignature(signature: PullSignatureSymbol): void; - public getEnclosingSignature(): PullSignatureSymbol; - public addDeclaration(decl: PullDecl): void; - public getDeclarations(): PullDecl[]; - public hasDeclaration(decl: PullDecl): boolean; - public setContainer(containerSymbol: PullTypeSymbol): void; - public getContainer(): PullTypeSymbol; - public setResolved(): void; - public startResolving(): void; - public setUnresolved(): void; - public anyDeclHasFlag(flag: PullElementFlags): boolean; - public allDeclsHaveFlag(flag: PullElementFlags): boolean; - public pathToRoot(): PullSymbol[]; - private static unqualifiedNameReferencesDifferentSymbolInScope(symbol, scopePath, endScopePathIndex); - private findQualifyingSymbolPathInScopeSymbol(scopeSymbol); - public toString(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getNamePartForFullName(): string; - public fullName(scopeSymbol?: PullSymbol): string; - public getScopedName(scopeSymbol?: PullSymbol, skipTypeParametersInName?: boolean, useConstraintInName?: boolean, skipInternalAliasName?: boolean): string; - public getScopedNameEx(scopeSymbol?: PullSymbol, skipTypeParametersInName?: boolean, useConstraintInName?: boolean, getPrettyTypeName?: boolean, getTypeParamMarkerInfo?: boolean, skipInternalAliasName?: boolean): MemberName; - public getTypeName(scopeSymbol?: PullSymbol, getPrettyTypeName?: boolean): string; - public getTypeNameEx(scopeSymbol?: PullSymbol, getPrettyTypeName?: boolean): MemberName; - private getTypeNameForFunctionSignature(prefix, scopeSymbol?, getPrettyTypeName?); - public getNameAndTypeName(scopeSymbol?: PullSymbol): string; - public getNameAndTypeNameEx(scopeSymbol?: PullSymbol): MemberName; - static getTypeParameterString(typars: PullTypeSymbol[], scopeSymbol?: PullSymbol, useContraintInName?: boolean): string; - static getTypeParameterStringEx(typeParameters: PullTypeSymbol[], scopeSymbol?: PullSymbol, getTypeParamMarkerInfo?: boolean, useContraintInName?: boolean): MemberNameArray; - static getIsExternallyVisible(symbol: PullSymbol, fromIsExternallyVisibleSymbol: PullSymbol, inIsExternallyVisibleSymbols: PullSymbol[]): boolean; - public isExternallyVisible(inIsExternallyVisibleSymbols?: PullSymbol[]): boolean; - private getDocCommentsOfDecl(decl); - private getDocCommentArray(symbol); - private static getDefaultConstructorSymbolForDocComments(classSymbol); - private getDocCommentText(comments); - private getDocCommentTextValue(comment); - public docComments(useConstructorAsClass?: boolean): string; - private getParameterDocCommentText(param, fncDocComments); - private cleanJSDocComment(content, spacesToRemove?); - private consumeLeadingSpace(line, startIndex, maxSpacesToRemove?); - private isSpaceChar(line, index); - private cleanDocCommentLine(line, jsDocStyleComment, jsDocLineSpaceToRemove?); - } - interface InstantiableSymbol { - getIsSpecialized(): boolean; - getAllowedToReferenceTypeParameters(): PullTypeParameterSymbol[]; - getTypeParameterArgumentMap(): TypeArgumentMap; - } - class PullSignatureSymbol extends PullSymbol implements InstantiableSymbol { - private _isDefinition; - private _memberTypeParameterNameCache; - private _stringConstantOverload; - public parameters: PullSymbol[]; - public _typeParameters: PullTypeParameterSymbol[]; - public returnType: PullTypeSymbol; - public functionType: PullTypeSymbol; - public hasOptionalParam: boolean; - public nonOptionalParamCount: number; - public hasVarArgs: boolean; - private _allowedToReferenceTypeParameters; - private _instantiationCache; - public hasBeenChecked: boolean; - public inWrapCheck: boolean; - public inWrapInfiniteExpandingReferenceCheck: boolean; - private _wrapsTypeParameterCache; - constructor(kind: PullElementKind, _isDefinition?: boolean); - public isDefinition(): boolean; - public isGeneric(): boolean; - public addParameter(parameter: PullSymbol, isOptional?: boolean): void; - public addTypeParameter(typeParameter: PullTypeParameterSymbol): void; - public addTypeParametersFromReturnType(): void; - public getTypeParameters(): PullTypeParameterSymbol[]; - public findTypeParameter(name: string): PullTypeParameterSymbol; - public getTypeParameterArgumentMap(): TypeArgumentMap; - public getAllowedToReferenceTypeParameters(): PullTypeParameterSymbol[]; - public addSpecialization(specializedVersionOfThisSignature: PullSignatureSymbol, typeArgumentMap: TypeArgumentMap): void; - public getSpecialization(typeArgumentMap: TypeArgumentMap): PullSignatureSymbol; - public isStringConstantOverloadSignature(): boolean; - public getParameterTypeAtIndex(iParam: number): PullTypeSymbol; - static getSignatureTypeMemberName(candidateSignature: PullSignatureSymbol, signatures: PullSignatureSymbol[], scopeSymbol: PullSymbol): MemberNameArray; - static getSignaturesTypeNameEx(signatures: PullSignatureSymbol[], prefix: string, shortform: boolean, brackets: boolean, scopeSymbol?: PullSymbol, getPrettyTypeName?: boolean, candidateSignature?: PullSignatureSymbol): MemberName[]; - public toString(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getSignatureTypeNameEx(prefix: string, shortform: boolean, brackets: boolean, scopeSymbol?: PullSymbol, getParamMarkerInfo?: boolean, getTypeParamMarkerInfo?: boolean): MemberNameArray; - public forAllParameterTypes(length: number, predicate: (parameterType: PullTypeSymbol, iterationIndex: number) => boolean): boolean; - public forAllCorrespondingParameterTypesInThisAndOtherSignature(otherSignature: PullSignatureSymbol, predicate: (thisSignatureParameterType: PullTypeSymbol, otherSignatureParameterType: PullTypeSymbol, iterationIndex: number) => boolean): boolean; - public wrapsSomeTypeParameter(typeParameterArgumentMap: TypeArgumentMap): boolean; - public getWrappingTypeParameterID(typeParameterArgumentMap: TypeArgumentMap): number; - public getWrappingTypeParameterIDWorker(typeParameterArgumentMap: TypeArgumentMap): number; - public _wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType: PullTypeSymbol, knownWrapMap: IBitMatrix): boolean; - public _wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType: PullTypeSymbol, knownWrapMap: IBitMatrix): boolean; - } - class PullTypeSymbol extends PullSymbol implements InstantiableSymbol { - private _members; - private _enclosedMemberTypes; - private _enclosedMemberContainers; - private _typeParameters; - private _allowedToReferenceTypeParameters; - private _specializedVersionsOfThisType; - private _arrayVersionOfThisType; - private _implementedTypes; - private _extendedTypes; - private _typesThatExplicitlyImplementThisType; - private _typesThatExtendThisType; - private _callSignatures; - private _allCallSignatures; - private _constructSignatures; - private _allConstructSignatures; - private _indexSignatures; - private _allIndexSignatures; - private _allIndexSignaturesOfAugmentedType; - private _memberNameCache; - private _enclosedTypeNameCache; - private _enclosedContainerCache; - private _typeParameterNameCache; - private _containedNonMemberNameCache; - private _containedNonMemberTypeNameCache; - private _containedNonMemberContainerCache; - private _simpleInstantiationCache; - private _complexInstantiationCache; - private _hasGenericSignature; - private _hasGenericMember; - private _hasBaseTypeConflict; - private _knownBaseTypeCount; - private _associatedContainerTypeSymbol; - private _constructorMethod; - private _hasDefaultConstructor; - private _functionSymbol; - private _inMemberTypeNameEx; - public inSymbolPrivacyCheck: boolean; - public inWrapCheck: boolean; - public inWrapInfiniteExpandingReferenceCheck: boolean; - public typeReference: PullTypeReferenceSymbol; - private _widenedType; - private _wrapsTypeParameterCache; - constructor(name: string, kind: PullElementKind); - private _isArrayNamedTypeReference; - public isArrayNamedTypeReference(): boolean; - private computeIsArrayNamedTypeReference(); - public isType(): boolean; - public isClass(): boolean; - public isFunction(): boolean; - public isConstructor(): boolean; - public isTypeParameter(): boolean; - public isTypeVariable(): boolean; - public isError(): boolean; - public isEnum(): boolean; - public getTypeParameterArgumentMap(): TypeArgumentMap; - public isObject(): boolean; - public isFunctionType(): boolean; - public getKnownBaseTypeCount(): number; - public resetKnownBaseTypeCount(): void; - public incrementKnownBaseCount(): void; - public setHasBaseTypeConflict(): void; - public hasBaseTypeConflict(): boolean; - public hasMembers(): boolean; - public setHasGenericSignature(): void; - public getHasGenericSignature(): boolean; - public setHasGenericMember(): void; - public getHasGenericMember(): boolean; - public setAssociatedContainerType(type: PullTypeSymbol): void; - public getAssociatedContainerType(): PullTypeSymbol; - public getArrayType(): PullTypeSymbol; - public getElementType(): PullTypeSymbol; - public setArrayType(arrayType: PullTypeSymbol): void; - public getFunctionSymbol(): PullSymbol; - public setFunctionSymbol(symbol: PullSymbol): void; - public findContainedNonMember(name: string): PullSymbol; - public findContainedNonMemberType(typeName: string, kind?: PullElementKind): PullTypeSymbol; - public findContainedNonMemberContainer(containerName: string, kind?: PullElementKind): PullTypeSymbol; - public addMember(memberSymbol: PullSymbol): void; - public addEnclosedMemberType(enclosedType: PullTypeSymbol): void; - public addEnclosedMemberContainer(enclosedContainer: PullTypeSymbol): void; - public addEnclosedNonMember(enclosedNonMember: PullSymbol): void; - public addEnclosedNonMemberType(enclosedNonMemberType: PullTypeSymbol): void; - public addEnclosedNonMemberContainer(enclosedNonMemberContainer: PullTypeSymbol): void; - public addTypeParameter(typeParameter: PullTypeParameterSymbol): void; - public getMembers(): PullSymbol[]; - public setHasDefaultConstructor(hasOne?: boolean): void; - public getHasDefaultConstructor(): boolean; - public getConstructorMethod(): PullSymbol; - public setConstructorMethod(constructorMethod: PullSymbol): void; - public getTypeParameters(): PullTypeParameterSymbol[]; - public getAllowedToReferenceTypeParameters(): PullTypeParameterSymbol[]; - public isGeneric(): boolean; - private canUseSimpleInstantiationCache(typeArgumentMap); - private getSimpleInstantiationCacheId(typeArgumentMap); - public addSpecialization(specializedVersionOfThisType: PullTypeSymbol, typeArgumentMap: TypeArgumentMap): void; - public getSpecialization(typeArgumentMap: TypeArgumentMap): PullTypeSymbol; - public getKnownSpecializations(): PullTypeSymbol[]; - public getTypeArguments(): PullTypeSymbol[]; - public getTypeArgumentsOrTypeParameters(): PullTypeSymbol[]; - private addCallOrConstructSignaturePrerequisiteBase(signature); - private addCallSignaturePrerequisite(callSignature); - public appendCallSignature(callSignature: PullSignatureSymbol): void; - public insertCallSignatureAtIndex(callSignature: PullSignatureSymbol, index: number): void; - private addConstructSignaturePrerequisite(constructSignature); - public appendConstructSignature(constructSignature: PullSignatureSymbol): void; - public insertConstructSignatureAtIndex(constructSignature: PullSignatureSymbol, index: number): void; - public addIndexSignature(indexSignature: PullSignatureSymbol): void; - public hasOwnCallSignatures(): boolean; - public getOwnCallSignatures(): PullSignatureSymbol[]; - public getCallSignatures(): PullSignatureSymbol[]; - public hasOwnConstructSignatures(): boolean; - public getOwnDeclaredConstructSignatures(): PullSignatureSymbol[]; - public getConstructSignatures(): PullSignatureSymbol[]; - public hasOwnIndexSignatures(): boolean; - public getOwnIndexSignatures(): PullSignatureSymbol[]; - public getIndexSignatures(): PullSignatureSymbol[]; - public getIndexSignaturesOfAugmentedType(resolver: PullTypeResolver, globalFunctionInterface: PullTypeSymbol, globalObjectInterface: PullTypeSymbol): PullSignatureSymbol[]; - private getBaseClassConstructSignatures(baseType); - private getDefaultClassConstructSignature(); - public addImplementedType(implementedType: PullTypeSymbol): void; - public getImplementedTypes(): PullTypeSymbol[]; - public addExtendedType(extendedType: PullTypeSymbol): void; - public getExtendedTypes(): PullTypeSymbol[]; - public addTypeThatExtendsThisType(type: PullTypeSymbol): void; - public getTypesThatExtendThisType(): PullTypeSymbol[]; - public addTypeThatExplicitlyImplementsThisType(type: PullTypeSymbol): void; - public getTypesThatExplicitlyImplementThisType(): PullTypeSymbol[]; - public hasBase(potentialBase: PullTypeSymbol, visited?: PullSymbol[]): boolean; - public isValidBaseKind(baseType: PullTypeSymbol, isExtendedType: boolean): boolean; - public findMember(name: string, lookInParent: boolean): PullSymbol; - public findNestedType(name: string, kind?: PullElementKind): PullTypeSymbol; - public findNestedContainer(name: string, kind?: PullElementKind): PullTypeSymbol; - public getAllMembers(searchDeclKind: PullElementKind, memberVisiblity: GetAllMembersVisiblity): PullSymbol[]; - public findTypeParameter(name: string): PullTypeParameterSymbol; - public setResolved(): void; - public getNamePartForFullName(): string; - public getScopedName(scopeSymbol?: PullSymbol, skipTypeParametersInName?: boolean, useConstraintInName?: boolean, skipInternalAliasName?: boolean): string; - public isNamedTypeSymbol(): boolean; - public toString(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getScopedNameEx(scopeSymbol?: PullSymbol, skipTypeParametersInName?: boolean, useConstraintInName?: boolean, getPrettyTypeName?: boolean, getTypeParamMarkerInfo?: boolean, skipInternalAliasName?: boolean, shouldAllowArrayType?: boolean): MemberName; - public hasOnlyOverloadCallSignatures(): boolean; - public getTypeOfSymbol(): PullSymbol; - private getMemberTypeNameEx(topLevel, scopeSymbol?, getPrettyTypeName?); - public getGenerativeTypeClassification(enclosingType: PullTypeSymbol): GenerativeTypeClassification; - public wrapsSomeTypeParameter(typeParameterArgumentMap: CandidateInferenceInfo[]): boolean; - public wrapsSomeTypeParameter(typeParameterArgumentMap: TypeArgumentMap, skipTypeArgumentCheck?: boolean): boolean; - public getWrappingTypeParameterID(typeParameterArgumentMap: TypeArgumentMap, skipTypeArgumentCheck?: boolean): number; - private getWrappingTypeParameterIDFromSignatures(signatures, typeParameterArgumentMap); - private getWrappingTypeParameterIDWorker(typeParameterArgumentMap, skipTypeArgumentCheck); - public wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType: PullTypeSymbol): boolean; - public _wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType: PullTypeSymbol, knownWrapMap: IBitMatrix): boolean; - private _wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - private _wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure(enclosingType, knownWrapMap); - public widenedType(resolver: PullTypeResolver, ast: AST, context: PullTypeResolutionContext): PullTypeSymbol; - } - class PullPrimitiveTypeSymbol extends PullTypeSymbol { - constructor(name: string); - public isAny(): boolean; - public isNull(): boolean; - public isUndefined(): boolean; - public isStringConstant(): boolean; - public setUnresolved(): void; - public getDisplayName(): string; - } - class PullStringConstantTypeSymbol extends PullPrimitiveTypeSymbol { - constructor(name: string); - public isStringConstant(): boolean; - } - class PullErrorTypeSymbol extends PullPrimitiveTypeSymbol { - public _anyType: PullTypeSymbol; - constructor(_anyType: PullTypeSymbol, name: string); - public isError(): boolean; - public _getResolver(): PullTypeResolver; - public getName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getDisplayName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean, skipInternalAliasName?: boolean): string; - public toString(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - } - class PullContainerSymbol extends PullTypeSymbol { - public instanceSymbol: PullSymbol; - private assignedValue; - private assignedType; - private assignedContainer; - constructor(name: string, kind: PullElementKind); - public isContainer(): boolean; - public setInstanceSymbol(symbol: PullSymbol): void; - public getInstanceSymbol(): PullSymbol; - public setExportAssignedValueSymbol(symbol: PullSymbol): void; - public getExportAssignedValueSymbol(): PullSymbol; - public setExportAssignedTypeSymbol(type: PullTypeSymbol): void; - public getExportAssignedTypeSymbol(): PullTypeSymbol; - public setExportAssignedContainerSymbol(container: PullContainerSymbol): void; - public getExportAssignedContainerSymbol(): PullContainerSymbol; - public hasExportAssignment(): boolean; - static usedAsSymbol(containerSymbol: PullSymbol, symbol: PullSymbol): boolean; - public getInstanceType(): PullTypeSymbol; - } - class PullTypeAliasSymbol extends PullTypeSymbol { - private _assignedValue; - private _assignedType; - private _assignedContainer; - private _isUsedAsValue; - private _typeUsedExternally; - private _isUsedInExportAlias; - private retrievingExportAssignment; - private linkedAliasSymbols; - constructor(name: string); - public isUsedInExportedAlias(): boolean; - public typeUsedExternally(): boolean; - public isUsedAsValue(): boolean; - public setTypeUsedExternally(): void; - public setIsUsedInExportedAlias(): void; - public addLinkedAliasSymbol(contingentValueSymbol: PullTypeAliasSymbol): void; - public setIsUsedAsValue(): void; - public assignedValue(): PullSymbol; - public assignedType(): PullTypeSymbol; - public assignedContainer(): PullContainerSymbol; - public isAlias(): boolean; - public isContainer(): boolean; - public setAssignedValueSymbol(symbol: PullSymbol): void; - public getExportAssignedValueSymbol(): PullSymbol; - public setAssignedTypeSymbol(type: PullTypeSymbol): void; - public getExportAssignedTypeSymbol(): PullTypeSymbol; - public setAssignedContainerSymbol(container: PullContainerSymbol): void; - public getExportAssignedContainerSymbol(): PullContainerSymbol; - public getMembers(): PullSymbol[]; - public getCallSignatures(): PullSignatureSymbol[]; - public getConstructSignatures(): PullSignatureSymbol[]; - public getIndexSignatures(): PullSignatureSymbol[]; - public findMember(name: string): PullSymbol; - public findNestedType(name: string): PullTypeSymbol; - public findNestedContainer(name: string): PullTypeSymbol; - public getAllMembers(searchDeclKind: PullElementKind, memberVisibility: GetAllMembersVisiblity): PullSymbol[]; - } - class PullTypeParameterSymbol extends PullTypeSymbol { - private _constraint; - constructor(name: string); - public isTypeParameter(): boolean; - public setConstraint(constraintType: PullTypeSymbol): void; - public getConstraint(): PullTypeSymbol; - public getBaseConstraint(semanticInfoChain: SemanticInfoChain): PullTypeSymbol; - private getConstraintRecursively(visitedTypeParameters); - public getDefaultConstraint(semanticInfoChain: SemanticInfoChain): PullTypeSymbol; - public getCallSignatures(): PullSignatureSymbol[]; - public getConstructSignatures(): PullSignatureSymbol[]; - public getIndexSignatures(): PullSignatureSymbol[]; - public isGeneric(): boolean; - public fullName(scopeSymbol?: PullSymbol): string; - public getName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean): string; - public getDisplayName(scopeSymbol?: PullSymbol, useConstraintInName?: boolean, skipInternalAliasName?: boolean): string; - public isExternallyVisible(inIsExternallyVisibleSymbols?: PullSymbol[]): boolean; - } - class PullAccessorSymbol extends PullSymbol { - private _getterSymbol; - private _setterSymbol; - constructor(name: string); - public isAccessor(): boolean; - public setSetter(setter: PullSymbol): void; - public getSetter(): PullSymbol; - public setGetter(getter: PullSymbol): void; - public getGetter(): PullSymbol; - } - function getIDForTypeSubstitutions(instantiatingType: PullTypeSymbol, typeArgumentMap: TypeArgumentMap): string; - function getIDForTypeSubstitutions(instantiatingSignature: PullSignatureSymbol, typeArgumentMap: TypeArgumentMap): string; - enum GetAllMembersVisiblity { - all = 0, - internallyVisible = 1, - externallyVisible = 2, - } -} -declare module TypeScript { - class EnclosingTypeWalkerState { - public _hasSetEnclosingType: boolean; - public _currentSymbols: PullSymbol[]; - static getDefaultEnclosingTypeWalkerState(): EnclosingTypeWalkerState; - static getNonGenericEnclosingTypeWalkerState(): EnclosingTypeWalkerState; - static getGenericEnclosingTypeWalkerState(genericEnclosingType: PullTypeSymbol): EnclosingTypeWalkerState; - } - class PullTypeEnclosingTypeWalker { - private static _defaultEnclosingTypeWalkerState; - private static _nonGenericEnclosingTypeWalkerState; - private enclosingTypeWalkerState; - constructor(); - private setDefaultTypeWalkerState(); - private setNonGenericEnclosingTypeWalkerState(); - private canSymbolOrDeclBeUsedAsEnclosingTypeHelper(name, kind); - private canDeclBeUsedAsEnclosingType(decl); - private canSymbolBeUsedAsEnclosingType(symbol); - public getEnclosingType(): PullTypeSymbol; - public _canWalkStructure(): boolean; - public _getCurrentSymbol(): PullSymbol; - public getGenerativeClassification(): GenerativeTypeClassification; - private _pushSymbol(symbol); - private _popSymbol(); - private setSymbolAsEnclosingType(type); - private _setEnclosingTypeOfParentDecl(decl, setSignature); - public setEnclosingTypeForSymbol(symbol: PullSymbol): EnclosingTypeWalkerState; - public startWalkingType(symbol: PullTypeSymbol): EnclosingTypeWalkerState; - public endWalkingType(stateWhenStartedWalkingTypes: EnclosingTypeWalkerState): void; - public walkMemberType(memberName: string, resolver: PullTypeResolver): void; - public postWalkMemberType(): void; - public walkSignature(kind: PullElementKind, index: number): void; - public postWalkSignature(): void; - public walkTypeArgument(index: number): void; - public postWalkTypeArgument(): void; - public walkTypeParameterConstraint(index: number): void; - public postWalkTypeParameterConstraint(): void; - public walkReturnType(): void; - public postWalkReturnType(): void; - public walkParameterType(iParam: number): void; - public postWalkParameterType(): void; - public getBothKindOfIndexSignatures(resolver: PullTypeResolver, context: PullTypeResolutionContext, includeAugmentedType: boolean): IndexSignatureInfo; - public walkIndexSignatureReturnType(indexSigInfo: IndexSignatureInfo, useStringIndexSignature: boolean, onlySignature?: boolean): void; - public postWalkIndexSignatureReturnType(onlySignature?: boolean): void; - public resetEnclosingTypeWalkerState(): EnclosingTypeWalkerState; - public setEnclosingTypeWalkerState(enclosingTypeWalkerState: EnclosingTypeWalkerState): void; - } -} -declare module TypeScript { - class CandidateInferenceInfo { - public typeParameter: PullTypeParameterSymbol; - public _inferredTypeAfterFixing: PullTypeSymbol; - public inferenceCandidates: PullTypeSymbol[]; - public addCandidate(candidate: PullTypeSymbol): void; - public isFixed(): boolean; - public fixTypeParameter(resolver: PullTypeResolver, context: PullTypeResolutionContext): void; - } - class TypeArgumentInferenceContext { - public resolver: PullTypeResolver; - public context: PullTypeResolutionContext; - public signatureBeingInferred: PullSignatureSymbol; - public inferenceCache: IBitMatrix; - public candidateCache: CandidateInferenceInfo[]; - constructor(resolver: PullTypeResolver, context: PullTypeResolutionContext, signatureBeingInferred: PullSignatureSymbol); - public alreadyRelatingTypes(objectType: PullTypeSymbol, parameterType: PullTypeSymbol): boolean; - public resetRelationshipCache(): void; - public addInferenceRoot(param: PullTypeParameterSymbol): void; - public getInferenceInfo(param: PullTypeParameterSymbol): CandidateInferenceInfo; - public addCandidateForInference(param: PullTypeParameterSymbol, candidate: PullTypeSymbol): void; - public inferTypeArguments(): PullTypeSymbol[]; - public fixTypeParameter(typeParameter: PullTypeParameterSymbol): void; - public _finalizeInferredTypeArguments(): PullTypeSymbol[]; - public isInvocationInferenceContext(): boolean; - } - class InvocationTypeArgumentInferenceContext extends TypeArgumentInferenceContext { - public argumentASTs: ISeparatedSyntaxList2; - constructor(resolver: PullTypeResolver, context: PullTypeResolutionContext, signatureBeingInferred: PullSignatureSymbol, argumentASTs: ISeparatedSyntaxList2); - public isInvocationInferenceContext(): boolean; - public inferTypeArguments(): PullTypeSymbol[]; - } - class ContextualSignatureInstantiationTypeArgumentInferenceContext extends TypeArgumentInferenceContext { - private contextualSignature; - private shouldFixContextualSignatureParameterTypes; - constructor(resolver: PullTypeResolver, context: PullTypeResolutionContext, signatureBeingInferred: PullSignatureSymbol, contextualSignature: PullSignatureSymbol, shouldFixContextualSignatureParameterTypes: boolean); - public isInvocationInferenceContext(): boolean; - public inferTypeArguments(): PullTypeSymbol[]; - } - class PullContextualTypeContext { - public contextualType: PullTypeSymbol; - public provisional: boolean; - public isInferentiallyTyping: boolean; - public typeArgumentInferenceContext: TypeArgumentInferenceContext; - public provisionallyTypedSymbols: PullSymbol[]; - public hasProvisionalErrors: boolean; - private astSymbolMap; - constructor(contextualType: PullTypeSymbol, provisional: boolean, isInferentiallyTyping: boolean, typeArgumentInferenceContext: TypeArgumentInferenceContext); - public recordProvisionallyTypedSymbol(symbol: PullSymbol): void; - public invalidateProvisionallyTypedSymbols(): void; - public setSymbolForAST(ast: AST, symbol: PullSymbol): void; - public getSymbolForAST(ast: AST): PullSymbol; - } - class PullTypeResolutionContext { - private resolver; - public inTypeCheck: boolean; - public fileName: string; - private contextStack; - private typeCheckedNodes; - private enclosingTypeWalker1; - private enclosingTypeWalker2; - constructor(resolver: PullTypeResolver, inTypeCheck?: boolean, fileName?: string); - public setTypeChecked(ast: AST): void; - public canTypeCheckAST(ast: AST): boolean; - private _pushAnyContextualType(type, provisional, isInferentiallyTyping, argContext); - public pushNewContextualType(type: PullTypeSymbol): void; - public propagateContextualType(type: PullTypeSymbol): void; - public pushInferentialType(type: PullTypeSymbol, typeArgumentInferenceContext: TypeArgumentInferenceContext): void; - public pushProvisionalType(type: PullTypeSymbol): void; - public popAnyContextualType(): PullContextualTypeContext; - public hasProvisionalErrors(): boolean; - public getContextualType(): PullTypeSymbol; - public fixAllTypeParametersReferencedByType(type: PullTypeSymbol, resolver: PullTypeResolver, argContext?: TypeArgumentInferenceContext): PullTypeSymbol; - private getCurrentTypeArgumentInferenceContext(); - public isInferentiallyTyping(): boolean; - public inProvisionalResolution(): boolean; - private inBaseTypeResolution; - public isInBaseTypeResolution(): boolean; - public startBaseTypeResolution(): boolean; - public doneBaseTypeResolution(wasInBaseTypeResolution: boolean): void; - public setTypeInContext(symbol: PullSymbol, type: PullTypeSymbol): void; - public postDiagnostic(diagnostic: Diagnostic): void; - public typeCheck(): boolean; - public setSymbolForAST(ast: AST, symbol: PullSymbol): void; - public getSymbolForAST(ast: AST): PullSymbol; - public startWalkingTypes(symbol1: PullTypeSymbol, symbol2: PullTypeSymbol): { - stateWhenStartedWalkingTypes1: EnclosingTypeWalkerState; - stateWhenStartedWalkingTypes2: EnclosingTypeWalkerState; - }; - public endWalkingTypes(statesWhenStartedWalkingTypes: { - stateWhenStartedWalkingTypes1: EnclosingTypeWalkerState; - stateWhenStartedWalkingTypes2: EnclosingTypeWalkerState; - }): void; - public setEnclosingTypeForSymbols(symbol1: PullSymbol, symbol2: PullSymbol): { - enclosingTypeWalkerState1: EnclosingTypeWalkerState; - enclosingTypeWalkerState2: EnclosingTypeWalkerState; - }; - public walkMemberTypes(memberName: string): void; - public postWalkMemberTypes(): void; - public walkSignatures(kind: PullElementKind, index: number, index2?: number): void; - public postWalkSignatures(): void; - public walkTypeParameterConstraints(index: number): void; - public postWalkTypeParameterConstraints(): void; - public walkTypeArgument(index: number): void; - public postWalkTypeArgument(): void; - public walkReturnTypes(): void; - public postWalkReturnTypes(): void; - public walkParameterTypes(iParam: number): void; - public postWalkParameterTypes(): void; - public getBothKindOfIndexSignatures(includeAugmentedType1: boolean, includeAugmentedType2: boolean): { - indexSigs1: IndexSignatureInfo; - indexSigs2: IndexSignatureInfo; - }; - public walkIndexSignatureReturnTypes(indexSigs: { - indexSigs1: IndexSignatureInfo; - indexSigs2: IndexSignatureInfo; - }, useStringIndexSignature1: boolean, useStringIndexSignature2: boolean, onlySignature?: boolean): void; - public postWalkIndexSignatureReturnTypes(onlySignature?: boolean): void; - public swapEnclosingTypeWalkers(): void; - public oneOfClassificationsIsInfinitelyExpanding(): boolean; - public resetEnclosingTypeWalkerStates(): { - enclosingTypeWalkerState1: EnclosingTypeWalkerState; - enclosingTypeWalkerState2: EnclosingTypeWalkerState; - }; - public setEnclosingTypeWalkerStates(enclosingTypeWalkerStates: { - enclosingTypeWalkerState1: EnclosingTypeWalkerState; - enclosingTypeWalkerState2: EnclosingTypeWalkerState; - }): void; - } -} -declare module TypeScript { - interface IPullTypeCollection { - getLength(): number; - getTypeAtIndex(index: number): PullTypeSymbol; - } - class PullAdditionalCallResolutionData { - public targetSymbol: PullSymbol; - public resolvedSignatures: PullSignatureSymbol[]; - public candidateSignature: PullSignatureSymbol; - public actualParametersContextTypeSymbols: PullTypeSymbol[]; - public diagnosticsFromOverloadResolution: Diagnostic[]; - } - class PullAdditionalObjectLiteralResolutionData { - public membersContextTypeSymbols: PullTypeSymbol[]; - } - interface IndexSignatureInfo { - numericSignature: PullSignatureSymbol; - stringSignature: PullSignatureSymbol; - } - class PullTypeResolver { - private compilationSettings; - public semanticInfoChain: SemanticInfoChain; - private _cachedArrayInterfaceType; - private _cachedNumberInterfaceType; - private _cachedStringInterfaceType; - private _cachedBooleanInterfaceType; - private _cachedObjectInterfaceType; - private _cachedFunctionInterfaceType; - private _cachedIArgumentsInterfaceType; - private _cachedRegExpInterfaceType; - private _cachedAnyTypeArgs; - private typeCheckCallBacks; - private postTypeCheckWorkitems; - private _cachedFunctionArgumentsSymbol; - private assignableCache; - private subtypeCache; - private identicalCache; - private inResolvingOtherDeclsWalker; - constructor(compilationSettings: ImmutableCompilationSettings, semanticInfoChain: SemanticInfoChain); - private cachedArrayInterfaceType(); - public getArrayNamedType(): PullTypeSymbol; - private cachedNumberInterfaceType(); - private cachedStringInterfaceType(); - private cachedBooleanInterfaceType(); - private cachedObjectInterfaceType(); - private cachedFunctionInterfaceType(); - private cachedIArgumentsInterfaceType(); - private cachedRegExpInterfaceType(); - private cachedFunctionArgumentsSymbol(); - private getApparentType(type); - private setTypeChecked(ast, context); - private canTypeCheckAST(ast, context); - private setSymbolForAST(ast, symbol, context); - private getSymbolForAST(ast, context); - public getASTForDecl(decl: PullDecl): AST; - public getNewErrorTypeSymbol(name?: string): PullErrorTypeSymbol; - public getEnclosingDecl(decl: PullDecl): PullDecl; - private getExportedMemberSymbol(symbol, parent); - public _getNamedPropertySymbolOfAugmentedType(symbolName: string, parent: PullTypeSymbol): PullSymbol; - private getNamedPropertySymbol(symbolName, declSearchKind, parent); - private getSymbolFromDeclPath(symbolName, declPath, declSearchKind); - private getVisibleDeclsFromDeclPath(declPath, declSearchKind); - private addFilteredDecls(decls, declSearchKind, result); - public getVisibleDecls(enclosingDecl: PullDecl): PullDecl[]; - public getVisibleContextSymbols(enclosingDecl: PullDecl, context: PullTypeResolutionContext): PullSymbol[]; - public getVisibleMembersFromExpression(expression: AST, enclosingDecl: PullDecl, context: PullTypeResolutionContext): PullSymbol[]; - private isAnyOrEquivalent(type); - private resolveExternalModuleReference(idText, currentFileName); - public resolveDeclaredSymbol(symbol: TSymbol, context?: PullTypeResolutionContext): TSymbol; - private resolveDeclaredSymbolWorker(symbol, context); - private resolveOtherDecl(otherDecl, context); - private resolveOtherDeclarations(astName, context); - private resolveSourceUnit(sourceUnit, context); - private typeCheckSourceUnit(sourceUnit, context); - private verifyUniquenessOfImportNamesInSourceUnit(sourceUnit); - private resolveEnumDeclaration(ast, context); - private typeCheckEnumDeclaration(ast, context); - private postTypeCheckEnumDeclaration(ast, context); - private checkInitializersInEnumDeclarations(decl, context); - private resolveModuleDeclaration(ast, context); - private ensureAllSymbolsAreBound(containerSymbol); - private resolveModuleSymbol(containerSymbol, context, moduleDeclAST, moduleDeclNameAST, sourceUnitAST); - private resolveFirstExportAssignmentStatement(moduleElements, context); - private resolveSingleModuleDeclaration(ast, astName, context); - private typeCheckModuleDeclaration(ast, context); - private typeCheckSingleModuleDeclaration(ast, astName, context); - private verifyUniquenessOfImportNamesInModule(decl); - private checkUniquenessOfImportNames(decls, doesNameExistOutside?); - private scanVariableDeclarationGroups(enclosingDecl, firstDeclHandler, subsequentDeclHandler?); - private postTypeCheckModuleDeclaration(ast, context); - private isTypeRefWithoutTypeArgs(term); - public createInstantiatedType(type: PullTypeSymbol, typeArguments: PullTypeSymbol[]): PullTypeSymbol; - private resolveReferenceTypeDeclaration(classOrInterface, name, heritageClauses, context); - private resolveClassDeclaration(classDeclAST, context); - private typeCheckTypeParametersOfTypeDeclaration(classOrInterface, context); - private typeCheckClassDeclaration(classDeclAST, context); - private postTypeCheckClassDeclaration(classDeclAST, context); - private resolveTypeSymbolSignatures(typeSymbol, context); - private resolveInterfaceDeclaration(interfaceDeclAST, context); - private typeCheckInterfaceDeclaration(interfaceDeclAST, context); - private checkInterfaceDeclForIdenticalTypeParameters(interfaceDeclAST, context); - private checkTypeForDuplicateIndexSignatures(enclosingTypeSymbol); - private filterSymbol(symbol, kind, enclosingDecl, context); - private getMemberSymbolOfKind(symbolName, kind, pullTypeSymbol, enclosingDecl, context); - private resolveIdentifierOfInternalModuleReference(importDecl, identifier, moduleSymbol, enclosingDecl, context); - private resolveModuleReference(importDecl, moduleNameExpr, enclosingDecl, context, declPath); - private resolveInternalModuleReference(importStatementAST, context); - private resolveImportDeclaration(importStatementAST, context); - private typeCheckImportDeclaration(importStatementAST, context); - private postTypeCheckImportDeclaration(importStatementAST, context); - private resolveExportAssignmentStatement(exportAssignmentAST, context); - private resolveAnyFunctionTypeSignature(funcDeclAST, typeParameters, parameterList, returnTypeAnnotation, context); - private resolveFunctionTypeSignatureParameter(argDeclAST, signature, enclosingDecl, context); - private resolveFunctionExpressionParameter(argDeclAST, id, typeExpr, equalsValueClause, contextParam, enclosingDecl, context); - private checkNameForCompilerGeneratedDeclarationCollision(astWithName, isDeclaration, name, context); - private hasRestParameterCodeGen(someFunctionDecl); - private checkArgumentsCollides(ast, context); - private checkIndexOfRestArgumentInitializationCollides(ast, isDeclaration, context); - private checkExternalModuleRequireExportsCollides(ast, name, context); - private resolveObjectTypeTypeReference(objectType, context); - private typeCheckObjectTypeTypeReference(objectType, context); - private resolveTypeAnnotation(typeAnnotation, context); - public resolveTypeReference(typeRef: AST, context: PullTypeResolutionContext): PullTypeSymbol; - private getArrayType(elementType); - private computeTypeReferenceSymbol(term, context); - private genericTypeIsUsedWithoutRequiredTypeArguments(typeSymbol, term, context); - private resolveMemberVariableDeclaration(varDecl, context); - private resolvePropertySignature(varDecl, context); - private resolveVariableDeclarator(varDecl, context); - private resolveParameterList(list, context); - private resolveParameter(parameter, context); - private getEnumTypeSymbol(enumElement, context); - private resolveEnumElement(enumElement, context); - private typeCheckEnumElement(enumElement, context); - private resolveEqualsValueClause(clause, isContextuallyTyped, context); - private resolveVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context); - private resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - private resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - private typeCheckPropertySignature(varDecl, context); - private typeCheckMemberVariableDeclaration(varDecl, context); - private typeCheckVariableDeclarator(varDecl, context); - private typeCheckParameter(parameter, context); - private typeCheckVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context); - private isForInVariableDeclarator(ast); - private checkSuperCaptureVariableCollides(superAST, isDeclaration, context); - private checkThisCaptureVariableCollides(_thisAST, isDeclaration, context); - private postTypeCheckVariableDeclaratorOrParameter(varDeclOrParameter, context); - private resolveTypeParameterDeclaration(typeParameterAST, context); - private resolveFirstTypeParameterDeclaration(typeParameterSymbol, context); - private typeCheckTypeParameterDeclaration(typeParameterAST, context); - private resolveConstraint(constraint, context); - private resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, useContextualType, enclosingDecl, context); - private typeCheckConstructorDeclaration(funcDeclAST, context); - private constructorHasSuperCall(constructorDecl); - private typeCheckFunctionExpression(funcDecl, isContextuallyTyped, context); - private typeCheckCallSignature(funcDecl, context); - private typeCheckConstructSignature(funcDecl, context); - private typeCheckMethodSignature(funcDecl, context); - private typeCheckMemberFunctionDeclaration(funcDecl, context); - private containsSingleThrowStatement(block); - private typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameters, returnTypeAnnotation, block, context); - private checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context); - private typeCheckIndexSignature(funcDeclAST, context); - private postTypeCheckFunctionDeclaration(funcDeclAST, context); - private resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - private resolveMemberFunctionDeclaration(funcDecl, context); - private resolveCallSignature(funcDecl, context); - private resolveConstructSignature(funcDecl, context); - private resolveMethodSignature(funcDecl, context); - private resolveAnyFunctionDeclaration(funcDecl, context); - private resolveFunctionExpression(funcDecl, isContextuallyTyped, context); - private resolveSimpleArrowFunctionExpression(funcDecl, isContextuallyTyped, context); - private resolveParenthesizedArrowFunctionExpression(funcDecl, isContextuallyTyped, context); - private getEnclosingClassDeclaration(ast); - private resolveConstructorDeclaration(funcDeclAST, context); - private resolveIndexMemberDeclaration(ast, context); - private resolveIndexSignature(funcDeclAST, context); - private resolveFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - private resolveGetterReturnTypeAnnotation(getterFunctionDeclarationAst, enclosingDecl, context); - private resolveSetterArgumentTypeAnnotation(setterFunctionDeclarationAst, enclosingDecl, context); - private resolveAccessorDeclaration(funcDeclAst, context); - private typeCheckAccessorDeclaration(funcDeclAst, context); - private resolveGetAccessorDeclaration(funcDeclAST, parameters, returnTypeAnnotation, block, setterAnnotatedType, context); - private checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - private typeCheckGetAccessorDeclaration(funcDeclAST, context); - static hasSetAccessorParameterTypeAnnotation(setAccessor: SetAccessor): boolean; - private resolveSetAccessorDeclaration(funcDeclAST, parameterList, context); - private typeCheckSetAccessorDeclaration(funcDeclAST, context); - private resolveList(list, context); - private resolveSeparatedList(list, context); - private resolveVoidExpression(ast, context); - private resolveLogicalOperation(ast, context); - private typeCheckLogicalOperation(binex, context); - private resolveLogicalNotExpression(ast, context); - private resolveUnaryArithmeticOperation(ast, context); - private resolvePostfixUnaryExpression(ast, context); - private isAnyOrNumberOrEnum(type); - private typeCheckUnaryArithmeticOperation(unaryExpression, context); - private typeCheckPostfixUnaryExpression(unaryExpression, context); - private resolveBinaryArithmeticExpression(binaryExpression, context); - private typeCheckBinaryArithmeticExpression(binaryExpression, context); - private resolveTypeOfExpression(ast, context); - private resolveThrowStatement(ast, context); - private resolveDeleteExpression(ast, context); - private resolveInstanceOfExpression(ast, context); - private typeCheckInstanceOfExpression(binaryExpression, context); - private resolveCommaExpression(commaExpression, context); - private resolveInExpression(ast, context); - private typeCheckInExpression(binaryExpression, context); - private resolveForStatement(ast, context); - private resolveForInStatement(forInStatement, context); - private typeCheckForInStatement(forInStatement, context); - private resolveWhileStatement(ast, context); - private typeCheckWhileStatement(ast, context); - private resolveDoStatement(ast, context); - private typeCheckDoStatement(ast, context); - private resolveIfStatement(ast, context); - private typeCheckIfStatement(ast, context); - private resolveElseClause(ast, context); - private typeCheckElseClause(ast, context); - private resolveBlock(ast, context); - private resolveVariableStatement(ast, context); - private resolveVariableDeclarationList(ast, context); - private resolveWithStatement(ast, context); - private typeCheckWithStatement(ast, context); - private resolveTryStatement(ast, context); - private typeCheckTryStatement(ast, context); - private resolveCatchClause(ast, context); - private typeCheckCatchClause(ast, context); - private resolveFinallyClause(ast, context); - private typeCheckFinallyClause(ast, context); - private getEnclosingFunctionDeclaration(ast); - private resolveReturnExpression(expression, enclosingFunction, context); - private typeCheckReturnExpression(expression, expressionType, enclosingFunction, context); - private resolveReturnStatement(returnAST, context); - private resolveSwitchStatement(ast, context); - private typeCheckSwitchStatement(ast, context); - private resolveLabeledStatement(ast, context); - private typeCheckLabeledStatement(ast, context); - private labelIsOnContinuableConstruct(statement); - private resolveContinueStatement(ast, context); - private isIterationStatement(ast); - private isAnyFunctionExpressionOrDeclaration(ast); - private inSwitchStatement(ast); - private inIterationStatement(ast, crossFunctions); - private getEnclosingLabels(ast, breakable, crossFunctions); - private typeCheckContinueStatement(ast, context); - private resolveBreakStatement(ast, context); - private typeCheckBreakStatement(ast, context); - public resolveAST(ast: AST, isContextuallyTyped: boolean, context: PullTypeResolutionContext): PullSymbol; - private resolveExpressionAST(ast, isContextuallyOrInferentiallyTyped, context); - private resolveExpressionWorker(ast, isContextuallyTyped, context); - private typeCheckAST(ast, isContextuallyTyped, context); - private processPostTypeCheckWorkItems(context); - private postTypeCheck(ast, context); - private resolveRegularExpressionLiteral(); - private postTypeCheckNameExpression(nameAST, context); - private typeCheckNameExpression(nameAST, context); - private resolveNameExpression(nameAST, context); - private isInEnumDecl(decl); - private getSomeInnermostFunctionScopeDecl(declPath); - private isFromFunctionScope(nameSymbol, functionScopeDecl); - private findConstructorDeclOfEnclosingType(decl); - private checkNameAsPartOfInitializerExpressionForInstanceMemberVariable(nameAST, nameSymbol, context); - private computeNameExpression(nameAST, context); - private getCurrentParameterIndexForFunction(parameter, funcDecl); - private resolveMemberAccessExpression(dottedNameAST, context); - private resolveDottedNameExpression(dottedNameAST, expression, name, context); - private computeDottedNameExpression(expression, name, context, checkSuperPrivateAndStaticAccess); - private computeDottedNameExpressionFromLHS(lhs, expression, name, context, checkSuperPrivateAndStaticAccess); - private resolveTypeNameExpression(nameAST, context); - private computeTypeNameExpression(nameAST, context); - private isInStaticMemberContext(decl); - private isLeftSideOfQualifiedName(ast); - private resolveGenericTypeReference(genericTypeAST, context); - private resolveQualifiedName(dottedNameAST, context); - private isLastNameOfModuleNameModuleReference(ast); - private computeQualifiedName(dottedNameAST, context); - private shouldContextuallyTypeAnyFunctionExpression(functionExpressionAST, typeParameters, parameters, returnTypeAnnotation, context); - private resolveAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context); - private resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - private typeCheckSimpleArrowFunctionExpression(arrowFunction, isContextuallyTyped, context); - private typeCheckParenthesizedArrowFunctionExpression(arrowFunction, isContextuallyTyped, context); - private typeCheckAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context); - private resolveThisExpression(thisExpression, context); - private inTypeArgumentList(ast); - private inClassExtendsHeritageClause(ast); - private inTypeQuery(ast); - private inArgumentListOfSuperInvocation(ast); - private inConstructorParameterList(ast); - private isFunctionAccessorOrNonArrowFunctionExpression(decl); - private isFunctionOrNonArrowFunctionExpression(decl); - private typeCheckThisExpression(thisExpression, context, enclosingDecl); - private getContextualClassSymbolForEnclosingDecl(ast, enclosingDecl); - private inStaticMemberVariableDeclaration(ast); - private resolveSuperExpression(ast, context); - private typeCheckSuperExpression(ast, context, enclosingDecl); - private resolveSimplePropertyAssignment(propertyAssignment, isContextuallyTyped, context); - private resolveFunctionPropertyAssignment(funcProp, isContextuallyTyped, context); - private typeCheckFunctionPropertyAssignment(funcProp, isContextuallyTyped, context); - public resolveObjectLiteralExpression(expressionAST: ObjectLiteralExpression, isContextuallyTyped: boolean, context: PullTypeResolutionContext, additionalResults?: PullAdditionalObjectLiteralResolutionData): PullSymbol; - private bindObjectLiteralMembers(objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralMembers, isUsingExistingSymbol, pullTypeContext); - private resolveObjectLiteralMembers(objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralContextualType, objectLiteralMembers, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, pullTypeContext, additionalResults?); - private computeObjectLiteralExpression(objectLitAST, isContextuallyTyped, context, additionalResults?); - private getPropertyAssignmentName(propertyAssignment); - private stampObjectLiteralWithIndexSignature(objectLiteralSymbol, indexerTypeCandidates, contextualIndexSignature, context); - private resolveArrayLiteralExpression(arrayLit, isContextuallyTyped, context); - private computeArrayLiteralExpressionSymbol(arrayLit, isContextuallyTyped, context); - private resolveElementAccessExpression(callEx, context); - private typeCheckElementAccessExpression(callEx, context, symbolAndDiagnostic); - private computeElementAccessExpressionSymbolAndDiagnostic(callEx, context); - private getBothKindsOfIndexSignaturesIncludingAugmentedType(enclosingType, context); - private getBothKindsOfIndexSignaturesExcludingAugmentedType(enclosingType, context); - public _getBothKindsOfIndexSignatures(enclosingType: PullTypeSymbol, context: PullTypeResolutionContext, includeAugmentedType: boolean): IndexSignatureInfo; - public _addUnhiddenSignaturesFromBaseType(derivedTypeSignatures: PullSignatureSymbol[], baseTypeSignatures: PullSignatureSymbol[], signaturesBeingAggregated: PullSignatureSymbol[]): void; - private resolveBinaryAdditionOperation(binaryExpression, context); - private bestCommonTypeOfTwoTypes(type1, type2, context); - private bestCommonTypeOfThreeTypes(type1, type2, type3, context); - private resolveLogicalOrExpression(binex, isContextuallyTyped, context); - private resolveLogicalAndExpression(binex, context); - private computeTypeOfConditionalExpression(leftType, rightType, isContextuallyTyped, context); - private resolveConditionalExpression(trinex, isContextuallyTyped, context); - private conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context); - private resolveParenthesizedExpression(ast, context); - private resolveExpressionStatement(ast, context); - public resolveInvocationExpression(callEx: InvocationExpression, context: PullTypeResolutionContext, additionalResults?: PullAdditionalCallResolutionData): PullSymbol; - private typeCheckInvocationExpression(callEx, context); - private computeInvocationExpressionSymbol(callEx, context, additionalResults); - public resolveObjectCreationExpression(callEx: ObjectCreationExpression, context: PullTypeResolutionContext, additionalResults?: PullAdditionalCallResolutionData): PullSymbol; - private typeCheckObjectCreationExpression(callEx, context); - private postOverloadResolutionDiagnostics(diagnostic, additionalResults, context); - private computeObjectCreationExpressionSymbol(callEx, context, additionalResults); - private instantiateSignatureInContext(signatureAToInstantiate, contextualSignatureB, context, shouldFixContextualSignatureParameterTypes); - private resolveCastExpression(assertionExpression, context); - private typeCheckCastExpression(assertionExpression, context, typeAssertionType); - private resolveAssignmentExpression(binaryExpression, context); - private getInstanceTypeForAssignment(lhs, type, context); - public widenType(type: PullTypeSymbol, ast: AST, context: PullTypeResolutionContext): PullTypeSymbol; - private widenArrayType(type, ast, context); - private widenObjectLiteralType(type, ast, context); - private needsToWidenObjectLiteralType(type, ast, context); - public findBestCommonType(collection: IPullTypeCollection, context: PullTypeResolutionContext, comparisonInfo?: TypeComparisonInfo): PullTypeSymbol; - private typeIsBestCommonTypeCandidate(candidateType, collection, context); - private typesAreIdenticalInEnclosingTypes(t1, t2, context); - private typesAreIdenticalWithNewEnclosingTypes(t1, t2, context); - public typesAreIdentical(t1: PullTypeSymbol, t2: PullTypeSymbol, context: PullTypeResolutionContext): boolean; - private typesAreIdenticalWorker(t1, t2, context); - private propertiesAreIdentical(propertySymbol1, propertySymbol2, context); - private propertiesAreIdenticalWithNewEnclosingTypes(type1, type2, property1, property2, context); - private signatureGroupsAreIdentical(sg1, sg2, context); - private typeParametersAreIdentical(tp1, tp2, context); - private typeParametersAreIdenticalWorker(tp1, tp2, context); - private setTypeParameterIdentity(tp1, tp2, val); - public signaturesAreIdenticalWithNewEnclosingTypes(s1: PullSignatureSymbol, s2: PullSignatureSymbol, context: PullTypeResolutionContext, includingReturnType?: boolean): boolean; - private signaturesAreIdentical(s1, s2, context, includingReturnType?); - public signaturesAreIdenticalWorker(s1: PullSignatureSymbol, s2: PullSignatureSymbol, context: PullTypeResolutionContext, includingReturnType?: boolean): boolean; - private signatureTypeParametersParametersAndReturnTypesAreIdentical(s1, s2, context, includingReturnType?); - public signatureReturnTypesAreIdentical(s1: PullSignatureSymbol, s2: PullSignatureSymbol, context: PullTypeResolutionContext): boolean; - private symbolsShareDeclaration(symbol1, symbol2); - private sourceIsSubtypeOfTarget(source, target, ast, context, comparisonInfo?, isComparingInstantiatedSignatures?); - private sourceMembersAreAssignableToTargetMembers(source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures?); - private sourcePropertyIsAssignableToTargetProperty(source, target, sourceProp, targetProp, ast, context, comparisonInfo, isComparingInstantiatedSignatures?); - private sourceCallSignaturesAreAssignableToTargetCallSignatures(source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures?); - private sourceConstructSignaturesAreAssignableToTargetConstructSignatures(source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures?); - private sourceIndexSignaturesAreAssignableToTargetIndexSignatures(source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures?); - private typeIsAssignableToFunction(source, ast, context); - private signatureIsAssignableToTarget(s1, s2, ast, context, comparisonInfo?, isComparingInstantiatedSignatures?); - private sourceIsAssignableToTarget(source, target, ast, context, comparisonInfo?, isComparingInstantiatedSignatures?); - private sourceIsAssignableToTargetWithNewEnclosingTypes(source, target, ast, context, comparisonInfo?, isComparingInstantiatedSignatures?); - private getSymbolForRelationshipCheck(symbol); - private sourceIsRelatableToTargetInEnclosingTypes(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceIsRelatableToTargetWithNewEnclosingTypes(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceIsRelatableToTargetInCache(source, target, comparisonCache, comparisonInfo); - private sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private isSourceTypeParameterConstrainedToTargetTypeParameter(source, target); - private sourceIsRelatableToTargetWorker(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceMembersAreRelatableToTargetMembers(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private infinitelyExpandingSourceTypeIsRelatableToTargetType(sourceType, targetType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private infinitelyExpandingTypesAreIdentical(sourceType, targetType, context); - private sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private signatureGroupIsRelatableToTarget(source, target, sourceSG, targetSG, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private signatureIsRelatableToTarget(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private signatureIsRelatableToTargetWorker(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - private resolveOverloads(application, group, haveTypeArgumentsAtCallSite, context, diagnostics); - private getCallTargetErrorSpanAST(callEx); - private overloadHasCorrectArity(signature, args); - private overloadIsApplicable(signature, args, context, comparisonInfo); - private overloadIsApplicableForArgument(paramType, arg, argIndex, context, comparisonInfo); - private overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, argIndex, context, comparisonInfo); - private overloadIsApplicableForObjectLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - private overloadIsApplicableForArrayLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - private overloadIsApplicableForOtherArgument(paramType, arg, argIndex, context, comparisonInfo); - private overloadIsApplicableForArgumentHelper(paramType, argSym, argumentIndex, comparisonInfo, arg, context); - private inferArgumentTypesForSignature(argContext, comparisonInfo, context); - private typeParametersAreInScopeAtArgumentList(typeParameters, args); - private relateTypeToTypeParametersInEnclosingType(expressionType, parameterType, argContext, context); - public relateTypeToTypeParametersWithNewEnclosingTypes(expressionType: PullTypeSymbol, parameterType: PullTypeSymbol, argContext: TypeArgumentInferenceContext, context: PullTypeResolutionContext): void; - public relateTypeToTypeParameters(expressionType: PullTypeSymbol, parameterType: PullTypeSymbol, argContext: TypeArgumentInferenceContext, context: PullTypeResolutionContext): void; - private relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - private relateInifinitelyExpandingTypeToTypeParameters(expressionType, parameterType, argContext, context); - private relateFunctionSignatureToTypeParameters(expressionSignature, parameterSignature, argContext, context); - private relateObjectTypeToTypeParameters(objectType, parameterType, argContext, context); - private relateSignatureGroupToTypeParameters(argumentSignatures, parameterSignatures, signatureKind, argContext, context); - private alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference(expressionSymbol, context); - private isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(type, callSignatureShouldBeGeneric); - public instantiateTypeToAny(typeToSpecialize: PullTypeSymbol, context: PullTypeResolutionContext): PullTypeSymbol; - public instantiateSignatureToAny(signature: PullSignatureSymbol): PullSignatureSymbol; - static globalTypeCheckPhase: number; - static typeCheck(compilationSettings: ImmutableCompilationSettings, semanticInfoChain: SemanticInfoChain, document: Document): void; - private validateVariableDeclarationGroups(enclosingDecl, context); - private typeCheckFunctionOverloads(funcDecl, context, signature?, allSignatures?); - private checkSymbolPrivacy(declSymbol, symbol, privacyErrorReporter); - private checkTypePrivacyOfSignatures(declSymbol, signatures, privacyErrorReporter); - private typeParameterOfTypeDeclarationPrivacyErrorReporter(classOrInterface, typeParameterAST, typeParameter, symbol, context); - private baseListPrivacyErrorReporter(classOrInterface, declSymbol, baseAst, isExtendedType, symbol, context); - private variablePrivacyErrorReporter(declAST, declSymbol, symbol, context); - private checkFunctionTypePrivacy(funcDeclAST, isStatic, typeParameters, parameters, returnTypeAnnotation, block, context); - private functionTypeArgumentArgumentTypePrivacyErrorReporter(declAST, isStatic, typeParameterAST, typeParameter, symbol, context); - private functionArgumentTypePrivacyErrorReporter(declAST, isStatic, parameters, argIndex, paramSymbol, symbol, context); - private functionReturnTypePrivacyErrorReporter(declAST, isStatic, returnTypeAnnotation, block, funcReturnType, symbol, context); - private enclosingClassIsDerived(classDecl); - private isSuperInvocationExpression(ast); - private isSuperInvocationExpressionStatement(node); - private getFirstStatementOfBlockOrNull(block); - private superCallMustBeFirstStatementInConstructor(constructorDecl); - private checkForThisCaptureInArrowFunction(expression); - private typeCheckMembersAgainstIndexer(containerType, containerTypeDecl, context); - private determineRelevantIndexerForMember(member, numberIndexSignature, stringIndexSignature); - private reportErrorThatMemberIsNotSubtypeOfIndexer(member, indexSignature, astForError, context, comparisonInfo); - private typeCheckIfTypeMemberPropertyOkToOverride(typeSymbol, extendedType, typeMember, extendedTypeMember, enclosingDecl, comparisonInfo); - private typeCheckIfTypeExtendsType(classOrInterface, name, typeSymbol, extendedType, enclosingDecl, context); - private typeCheckIfClassImplementsType(classDecl, classSymbol, implementedType, enclosingDecl, context); - private computeValueSymbolFromAST(valueDeclAST, context); - private hasClassTypeSymbolConflictAsValue(baseDeclAST, typeSymbol, enclosingDecl, context); - private typeCheckBase(classOrInterface, name, typeSymbol, baseDeclAST, isExtendedType, enclosingDecl, context); - private typeCheckBases(classOrInterface, name, heritageClauses, typeSymbol, enclosingDecl, context); - private checkTypeCompatibilityBetweenBases(name, typeSymbol, context); - private checkNamedPropertyIdentityBetweenBases(interfaceName, interfaceSymbol, baseTypeSymbol, inheritedMembersMap, context); - private checkIndexSignatureIdentityBetweenBases(interfaceName, interfaceSymbol, baseTypeSymbol, allInheritedSignatures, derivedTypeHasOwnNumberSignature, derivedTypeHasOwnStringSignature, context); - private checkInheritedMembersAgainstInheritedIndexSignatures(interfaceName, interfaceSymbol, inheritedIndexSignatures, inheritedMembers, context); - private checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature(interfaceName, interfaceSymbol, inheritedIndexSignatures, context); - private checkAssignability(ast, source, target, context); - private isReference(ast, astSymbol); - private checkForSuperMemberAccess(expression, name, resolvedName, context); - private getEnclosingDeclForAST(ast); - private getEnclosingSymbolForAST(ast); - private checkForPrivateMemberAccess(name, expressionType, resolvedName, context); - public instantiateType(type: PullTypeSymbol, typeParameterArgumentMap: TypeArgumentMap): PullTypeSymbol; - public instantiateTypeParameter(typeParameter: PullTypeParameterSymbol, typeParameterArgumentMap: TypeArgumentMap): PullTypeParameterSymbol; - public instantiateSignature(signature: PullSignatureSymbol, typeParameterArgumentMap: TypeArgumentMap): PullSignatureSymbol; - } - class TypeComparisonInfo { - public onlyCaptureFirstError: boolean; - public flags: TypeRelationshipFlags; - public message: string; - public stringConstantVal: AST; - private indent; - constructor(sourceComparisonInfo?: TypeComparisonInfo, useSameIndent?: boolean); - private indentString(); - public addMessage(message: string): void; - } - function getPropertyAssignmentNameTextFromIdentifier(identifier: AST): { - actualText: string; - memberName: string; - }; - function isTypesOnlyLocation(ast: AST): boolean; -} -declare module TypeScript { - var declCacheHit: number; - var declCacheMiss: number; - var symbolCacheHit: number; - var symbolCacheMiss: number; - class SemanticInfoChain { - private compiler; - private logger; - private documents; - private fileNameToDocument; - public anyTypeDecl: PullDecl; - public booleanTypeDecl: PullDecl; - public numberTypeDecl: PullDecl; - public stringTypeDecl: PullDecl; - public nullTypeDecl: PullDecl; - public undefinedTypeDecl: PullDecl; - public voidTypeDecl: PullDecl; - public undefinedValueDecl: PullDecl; - public anyTypeSymbol: PullPrimitiveTypeSymbol; - public booleanTypeSymbol: PullPrimitiveTypeSymbol; - public numberTypeSymbol: PullPrimitiveTypeSymbol; - public stringTypeSymbol: PullPrimitiveTypeSymbol; - public nullTypeSymbol: PullPrimitiveTypeSymbol; - public undefinedTypeSymbol: PullPrimitiveTypeSymbol; - public voidTypeSymbol: PullPrimitiveTypeSymbol; - public undefinedValueSymbol: PullSymbol; - public emptyTypeSymbol: PullTypeSymbol; - private astSymbolMap; - private astAliasSymbolMap; - private astCallResolutionDataMap; - private declSymbolMap; - private declSignatureSymbolMap; - private declCache; - private symbolCache; - private fileNameToDiagnostics; - private _binder; - private _resolver; - private _topLevelDecls; - private _fileNames; - constructor(compiler: TypeScriptCompiler, logger: ILogger); - public getDocument(fileName: string): Document; - public lineMap(fileName: string): LineMap; - public fileNames(): string[]; - private bindPrimitiveSymbol(decl, newSymbol); - private addPrimitiveTypeSymbol(decl); - private addPrimitiveValueSymbol(decl, type); - private resetGlobalSymbols(); - public addDocument(document: Document): void; - public removeDocument(fileName: string): void; - private getDeclPathCacheID(declPath, declKind); - public findTopLevelSymbol(name: string, kind: PullElementKind, doNotGoPastThisDecl: PullDecl): PullSymbol; - private findTopLevelSymbolInDecl(topLevelDecl, name, kind, doNotGoPastThisDecl); - public findExternalModule(id: string): PullContainerSymbol; - public findAmbientExternalModuleInGlobalContext(id: string): PullContainerSymbol; - public findDecls(declPath: string[], declKind: PullElementKind): PullDecl[]; - public findDeclsFromPath(declPath: PullDecl[], declKind: PullElementKind): PullDecl[]; - public findSymbol(declPath: string[], declType: PullElementKind): PullSymbol; - public cacheGlobalSymbol(symbol: PullSymbol, kind: PullElementKind): void; - public invalidate(oldSettings?: ImmutableCompilationSettings, newSettings?: ImmutableCompilationSettings): void; - private settingsChangeAffectsSyntax(before, after); - public setSymbolForAST(ast: AST, symbol: PullSymbol): void; - public getSymbolForAST(ast: AST): PullSymbol; - public setAliasSymbolForAST(ast: AST, symbol: PullTypeAliasSymbol): void; - public getAliasSymbolForAST(ast: AST): PullTypeAliasSymbol; - public getCallResolutionDataForAST(ast: AST): PullAdditionalCallResolutionData; - public setCallResolutionDataForAST(ast: AST, callResolutionData: PullAdditionalCallResolutionData): void; - public setSymbolForDecl(decl: PullDecl, symbol: PullSymbol): void; - public getSymbolForDecl(decl: PullDecl): PullSymbol; - public setSignatureSymbolForDecl(decl: PullDecl, signatureSymbol: PullSignatureSymbol): void; - public getSignatureSymbolForDecl(decl: PullDecl): PullSignatureSymbol; - public addDiagnostic(diagnostic: Diagnostic): void; - public getDiagnostics(fileName: string): Diagnostic[]; - public getBinder(): PullSymbolBinder; - public getResolver(): PullTypeResolver; - public addSyntheticIndexSignature(containingDecl: PullDecl, containingSymbol: PullTypeSymbol, ast: AST, indexParamName: string, indexParamType: PullTypeSymbol, returnType: PullTypeSymbol): void; - public getDeclForAST(ast: AST): PullDecl; - public getEnclosingDecl(ast: AST): PullDecl; - public setDeclForAST(ast: AST, decl: PullDecl): void; - public getASTForDecl(decl: PullDecl): AST; - public setASTForDecl(decl: PullDecl, ast: AST): void; - public topLevelDecl(fileName: string): PullDecl; - public topLevelDecls(): PullDecl[]; - public addDiagnosticFromAST(ast: AST, diagnosticKey: string, _arguments?: any[], additionalLocations?: Location[]): void; - public diagnosticFromAST(ast: AST, diagnosticKey: string, _arguments?: any[], additionalLocations?: Location[]): Diagnostic; - public locationFromAST(ast: AST): Location; - public duplicateIdentifierDiagnosticFromAST(ast: AST, identifier: string, additionalLocationAST: AST): Diagnostic; - public addDuplicateIdentifierDiagnosticFromAST(ast: AST, identifier: string, additionalLocationAST: AST): void; - } -} -declare module TypeScript { - module DeclarationCreator { - function create(document: Document, semanticInfoChain: SemanticInfoChain, compilationSettings: ImmutableCompilationSettings): PullDecl; - } -} -declare module TypeScript { - class PullSymbolBinder { - private semanticInfoChain; - private declsBeingBound; - private inBindingOtherDeclsWalker; - constructor(semanticInfoChain: SemanticInfoChain); - private getParent(decl, returnInstanceType?); - private findDeclsInContext(startingDecl, declKind, searchGlobally); - private getExistingSymbol(decl, searchKind, parent); - private checkThatExportsMatch(decl, prevSymbol, reportError?); - private getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(signature, currentSignatures); - private bindEnumDeclarationToPullSymbol(enumContainerDecl); - private bindEnumIndexerDeclsToPullSymbols(enumContainerSymbol); - private findExistingVariableSymbolForModuleValueDecl(decl); - private bindModuleDeclarationToPullSymbol(moduleContainerDecl); - private bindImportDeclaration(importDeclaration); - private ensurePriorDeclarationsAreBound(container, currentDecl); - private bindClassDeclarationToPullSymbol(classDecl); - private bindInterfaceDeclarationToPullSymbol(interfaceDecl); - private bindObjectTypeDeclarationToPullSymbol(objectDecl); - private bindConstructorTypeDeclarationToPullSymbol(constructorTypeDeclaration); - private bindVariableDeclarationToPullSymbol(variableDeclaration); - private bindCatchVariableToPullSymbol(variableDeclaration); - private bindEnumMemberDeclarationToPullSymbol(propertyDeclaration); - private bindPropertyDeclarationToPullSymbol(propertyDeclaration); - private bindParameterSymbols(functionDeclaration, parameterList, funcType, signatureSymbol); - private bindFunctionDeclarationToPullSymbol(functionDeclaration); - private bindFunctionExpressionToPullSymbol(functionExpressionDeclaration); - private bindFunctionTypeDeclarationToPullSymbol(functionTypeDeclaration); - private bindMethodDeclarationToPullSymbol(methodDeclaration); - private bindStaticPrototypePropertyOfClass(classAST, classTypeSymbol, constructorTypeSymbol); - private bindConstructorDeclarationToPullSymbol(constructorDeclaration); - private bindConstructSignatureDeclarationToPullSymbol(constructSignatureDeclaration); - private bindCallSignatureDeclarationToPullSymbol(callSignatureDeclaration); - private bindIndexSignatureDeclarationToPullSymbol(indexSignatureDeclaration); - private bindGetAccessorDeclarationToPullSymbol(getAccessorDeclaration); - private bindSetAccessorDeclarationToPullSymbol(setAccessorDeclaration); - private getDeclsToBind(decl); - private shouldBindDeclaration(decl); - public bindDeclToPullSymbol(decl: PullDecl): void; - private bindAllDeclsToPullSymbol(askedDecl); - private bindSingleDeclToPullSymbol(decl); - } -} -declare module TypeScript { - module PullHelpers { - function diagnosticFromDecl(decl: PullDecl, diagnosticKey: string, _arguments?: any[], additionalLocations?: Location[]): Diagnostic; - function resolveDeclaredSymbolToUseType(symbol: PullSymbol): void; - interface SignatureInfoForFuncDecl { - signature: PullSignatureSymbol; - allSignatures: PullSignatureSymbol[]; - } - function getSignatureForFuncDecl(functionDecl: PullDecl): { - signature: PullSignatureSymbol; - allSignatures: PullSignatureSymbol[]; - }; - function getAccessorSymbol(getterOrSetter: AST, semanticInfoChain: SemanticInfoChain): PullAccessorSymbol; - function getGetterAndSetterFunction(funcDecl: AST, semanticInfoChain: SemanticInfoChain): { - getter: GetAccessor; - setter: SetAccessor; - }; - function symbolIsEnum(source: PullSymbol): boolean; - function symbolIsModule(symbol: PullSymbol): boolean; - function isNameNumeric(name: string): boolean; - function typeSymbolsAreIdentical(a: PullTypeSymbol, b: PullTypeSymbol): boolean; - function getRootType(type: PullTypeSymbol): PullTypeSymbol; - function isSymbolLocal(symbol: PullSymbol): boolean; - function isExportedSymbolInClodule(symbol: PullSymbol): boolean; - function isSymbolDeclaredInScopeChain(symbol: PullSymbol, scopeSymbol: PullSymbol): boolean; - interface PullTypeSymbolStructureWalker { - memberSymbolWalk(memberSymbol: PullSymbol): boolean; - callSignatureWalk(signatureSymbol: PullSignatureSymbol): boolean; - constructSignatureWalk(signatureSymbol: PullSignatureSymbol): boolean; - indexSignatureWalk(signatureSymbol: PullSignatureSymbol): boolean; - signatureParameterWalk(parameterSymbol: PullSymbol): boolean; - signatureReturnTypeWalk(returnType: PullTypeSymbol): boolean; - } - function walkPullTypeSymbolStructure(typeSymbol: PullTypeSymbol, walker: PullTypeSymbolStructureWalker): void; - class OtherPullDeclsWalker { - private currentlyWalkingOtherDecls; - public walkOtherPullDecls(currentDecl: PullDecl, otherDecls: PullDecl[], callBack: (otherDecl: PullDecl) => void): void; - } - } -} -declare module TypeScript { - class WrapsTypeParameterCache { - private _wrapsTypeParameterCache; - public getWrapsTypeParameter(typeParameterArgumentMap: TypeArgumentMap): number; - public setWrapsTypeParameter(typeParameterArgumentMap: TypeArgumentMap, wrappingTypeParameterID: number): void; - } - module PullInstantiationHelpers { - class MutableTypeArgumentMap { - public typeParameterArgumentMap: TypeArgumentMap; - public createdDuplicateTypeArgumentMap: boolean; - constructor(typeParameterArgumentMap: TypeArgumentMap); - public ensureTypeArgumentCopy(): void; - } - function instantiateTypeArgument(resolver: PullTypeResolver, symbol: InstantiableSymbol, mutableTypeParameterMap: MutableTypeArgumentMap): void; - function cleanUpTypeArgumentMap(symbol: InstantiableSymbol, mutableTypeArgumentMap: MutableTypeArgumentMap): void; - function getAllowedToReferenceTypeParametersFromDecl(decl: PullDecl): PullTypeParameterSymbol[]; - function createTypeParameterArgumentMap(typeParameters: PullTypeParameterSymbol[], typeArguments: PullTypeSymbol[]): TypeArgumentMap; - function updateTypeParameterArgumentMap(typeParameters: PullTypeParameterSymbol[], typeArguments: PullTypeSymbol[], typeParameterArgumentMap: TypeArgumentMap): TypeArgumentMap; - function updateMutableTypeParameterArgumentMap(typeParameters: PullTypeParameterSymbol[], typeArguments: PullTypeSymbol[], mutableMap: MutableTypeArgumentMap): void; - function twoTypesAreInstantiationsOfSameNamedGenericType(type1: PullTypeSymbol, type2: PullTypeSymbol): boolean; - } -} -declare module TypeScript { - var fileResolutionTime: number; - var fileResolutionIOTime: number; - var fileResolutionScanImportsTime: number; - var fileResolutionImportFileSearchTime: number; - var fileResolutionGetDefaultLibraryTime: number; - var sourceCharactersCompiled: number; - var syntaxTreeParseTime: number; - var syntaxDiagnosticsTime: number; - var astTranslationTime: number; - var typeCheckTime: number; - var compilerResolvePathTime: number; - var compilerDirectoryNameTime: number; - var compilerDirectoryExistsTime: number; - var compilerFileExistsTime: number; - var emitTime: number; - var emitWriteFileTime: number; - var declarationEmitTime: number; - var declarationEmitIsExternallyVisibleTime: number; - var declarationEmitTypeSignatureTime: number; - var declarationEmitGetBoundDeclTypeTime: number; - var declarationEmitIsOverloadedCallSignatureTime: number; - var declarationEmitFunctionDeclarationGetSymbolTime: number; - var declarationEmitGetBaseTypeTime: number; - var declarationEmitGetAccessorFunctionTime: number; - var declarationEmitGetTypeParameterSymbolTime: number; - var declarationEmitGetImportDeclarationSymbolTime: number; - var ioHostResolvePathTime: number; - var ioHostDirectoryNameTime: number; - var ioHostCreateDirectoryStructureTime: number; - var ioHostWriteFileTime: number; - interface PullSymbolInfo { - symbol: PullSymbol; - aliasSymbol: PullTypeAliasSymbol; - ast: AST; - enclosingScopeSymbol: PullSymbol; - } - interface PullCallSymbolInfo { - targetSymbol: PullSymbol; - resolvedSignatures: PullSignatureSymbol[]; - candidateSignature: PullSignatureSymbol; - isConstructorCall: boolean; - ast: AST; - enclosingScopeSymbol: PullSymbol; - } - interface PullVisibleSymbolsInfo { - symbols: PullSymbol[]; - enclosingScopeSymbol: PullSymbol; - } - enum EmitOutputResult { - Succeeded = 0, - FailedBecauseOfSyntaxErrors = 1, - FailedBecauseOfCompilerOptionsErrors = 2, - FailedToGenerateDeclarationsBecauseOfSemanticErrors = 3, - } - class EmitOutput { - public outputFiles: OutputFile[]; - public emitOutputResult: EmitOutputResult; - constructor(emitOutputResult?: EmitOutputResult); - } - enum OutputFileType { - JavaScript = 0, - SourceMap = 1, - Declaration = 2, - } - class OutputFile { - public name: string; - public writeByteOrderMark: boolean; - public text: string; - public fileType: OutputFileType; - public sourceMapEntries: SourceMapEntry[]; - constructor(name: string, writeByteOrderMark: boolean, text: string, fileType: OutputFileType, sourceMapEntries?: SourceMapEntry[]); - } - class CompileResult { - public diagnostics: Diagnostic[]; - public outputFiles: OutputFile[]; - static fromDiagnostics(diagnostics: Diagnostic[]): CompileResult; - static fromOutputFiles(outputFiles: OutputFile[]): CompileResult; - } - class TypeScriptCompiler { - public logger: ILogger; - private _settings; - private semanticInfoChain; - constructor(logger?: ILogger, _settings?: ImmutableCompilationSettings); - public compilationSettings(): ImmutableCompilationSettings; - public setCompilationSettings(newSettings: ImmutableCompilationSettings): void; - public getDocument(fileName: string): Document; - public cleanupSemanticCache(): void; - public addFile(fileName: string, scriptSnapshot: IScriptSnapshot, byteOrderMark: ByteOrderMark, version: number, isOpen: boolean, referencedFiles?: string[]): void; - public updateFile(fileName: string, scriptSnapshot: IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TextChangeRange): void; - public removeFile(fileName: string): void; - public mapOutputFileName(document: Document, emitOptions: EmitOptions, extensionChanger: (fname: string, wholeFileNameReplaced: boolean) => string): string; - private writeByteOrderMarkForDocument(document); - static mapToDTSFileName(fileName: string, wholeFileNameReplaced: boolean): string; - public _shouldEmit(document: Document): boolean; - public _shouldEmitDeclarations(document: Document): boolean; - private emitDocumentDeclarationsWorker(document, emitOptions, declarationEmitter?); - public _emitDocumentDeclarations(document: Document, emitOptions: EmitOptions, onSingleFileEmitComplete: (files: OutputFile) => void, sharedEmitter: DeclarationEmitter): DeclarationEmitter; - public emitAllDeclarations(resolvePath: (path: string) => string): EmitOutput; - public emitDeclarations(fileName: string, resolvePath: (path: string) => string): EmitOutput; - public canEmitDeclarations(fileName: string): boolean; - static mapToFileNameExtension(extension: string, fileName: string, wholeFileNameReplaced: boolean): string; - static mapToJSFileName(fileName: string, wholeFileNameReplaced: boolean): string; - private emitDocumentWorker(document, emitOptions, emitter?); - public _emitDocument(document: Document, emitOptions: EmitOptions, onSingleFileEmitComplete: (files: OutputFile[]) => void, sharedEmitter: Emitter): Emitter; - public emitAll(resolvePath: (path: string) => string): EmitOutput; - public emit(fileName: string, resolvePath: (path: string) => string): EmitOutput; - public compile(resolvePath: (path: string) => string, continueOnDiagnostics?: boolean): Iterator; - public getSyntacticDiagnostics(fileName: string): Diagnostic[]; - private getSyntaxTree(fileName); - private getSourceUnit(fileName); - public getSemanticDiagnostics(fileName: string): Diagnostic[]; - public getCompilerOptionsDiagnostics(resolvePath: (path: string) => string): Diagnostic[]; - public resolveAllFiles(): void; - public getSymbolOfDeclaration(decl: PullDecl): PullSymbol; - private extractResolutionContextFromAST(resolver, ast, document, propagateContextualTypes); - private extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, assigningAST, init); - private getASTPath(ast); - public pullGetSymbolInformationFromAST(ast: AST, document: Document): PullSymbolInfo; - public pullGetCallInformationFromAST(ast: AST, document: Document): PullCallSymbolInfo; - public pullGetVisibleMemberSymbolsFromAST(ast: AST, document: Document): PullVisibleSymbolsInfo; - public pullGetVisibleDeclsFromAST(ast: AST, document: Document): PullDecl[]; - public pullGetContextualMembersFromAST(ast: AST, document: Document): PullVisibleSymbolsInfo; - public pullGetDeclInformation(decl: PullDecl, ast: AST, document: Document): PullSymbolInfo; - public topLevelDeclaration(fileName: string): PullDecl; - public getDeclForAST(ast: AST): PullDecl; - public fileNames(): string[]; - public topLevelDecl(fileName: string): PullDecl; - private static getLocationText(location, resolvePath); - static getFullDiagnosticText(diagnostic: Diagnostic, resolvePath: (path: string) => string): string; - } - function compareDataObjects(dst: any, src: any): boolean; -} -declare module TypeScript { - enum GenerativeTypeClassification { - Unknown = 0, - Open = 1, - Closed = 2, - InfinitelyExpanding = 3, - } - interface TypeArgumentMap { - [n: number]: PullTypeSymbol; - } - class PullTypeReferenceSymbol extends PullTypeSymbol { - public referencedTypeSymbol: PullTypeSymbol; - static createTypeReference(type: PullTypeSymbol): PullTypeReferenceSymbol; - constructor(referencedTypeSymbol: PullTypeSymbol); - public isTypeReference(): boolean; - public isResolved: boolean; - public setResolved(): void; - public setUnresolved(): void; - public invalidate(): void; - public ensureReferencedTypeIsResolved(): void; - public getReferencedTypeSymbol(): PullTypeSymbol; - public _getResolver(): PullTypeResolver; - public hasMembers(): boolean; - public setAssociatedContainerType(type: PullTypeSymbol): void; - public getAssociatedContainerType(): PullTypeSymbol; - public getFunctionSymbol(): PullSymbol; - public setFunctionSymbol(symbol: PullSymbol): void; - public addContainedNonMember(nonMember: PullSymbol): void; - public findContainedNonMemberContainer(containerName: string, kind?: PullElementKind): PullTypeSymbol; - public addMember(memberSymbol: PullSymbol): void; - public addEnclosedMemberType(enclosedType: PullTypeSymbol): void; - public addEnclosedMemberContainer(enclosedContainer: PullTypeSymbol): void; - public addEnclosedNonMember(enclosedNonMember: PullSymbol): void; - public addEnclosedNonMemberType(enclosedNonMemberType: PullTypeSymbol): void; - public addEnclosedNonMemberContainer(enclosedNonMemberContainer: PullTypeSymbol): void; - public addTypeParameter(typeParameter: PullTypeParameterSymbol): void; - public addConstructorTypeParameter(typeParameter: PullTypeParameterSymbol): void; - public findContainedNonMember(name: string): PullSymbol; - public findContainedNonMemberType(typeName: string, kind?: PullElementKind): PullTypeSymbol; - public getMembers(): PullSymbol[]; - public setHasDefaultConstructor(hasOne?: boolean): void; - public getHasDefaultConstructor(): boolean; - public getConstructorMethod(): PullSymbol; - public setConstructorMethod(constructorMethod: PullSymbol): void; - public getTypeParameters(): PullTypeParameterSymbol[]; - public isGeneric(): boolean; - public addSpecialization(specializedVersionOfThisType: PullTypeSymbol, substitutingTypes: PullTypeSymbol[]): void; - public getSpecialization(substitutingTypes: PullTypeSymbol[]): PullTypeSymbol; - public getKnownSpecializations(): PullTypeSymbol[]; - public getTypeArguments(): PullTypeSymbol[]; - public getTypeArgumentsOrTypeParameters(): PullTypeSymbol[]; - public appendCallSignature(callSignature: PullSignatureSymbol): void; - public insertCallSignatureAtIndex(callSignature: PullSignatureSymbol, index: number): void; - public appendConstructSignature(callSignature: PullSignatureSymbol): void; - public insertConstructSignatureAtIndex(callSignature: PullSignatureSymbol, index: number): void; - public addIndexSignature(indexSignature: PullSignatureSymbol): void; - public hasOwnCallSignatures(): boolean; - public getCallSignatures(): PullSignatureSymbol[]; - public hasOwnConstructSignatures(): boolean; - public getConstructSignatures(): PullSignatureSymbol[]; - public hasOwnIndexSignatures(): boolean; - public getIndexSignatures(): PullSignatureSymbol[]; - public addImplementedType(implementedType: PullTypeSymbol): void; - public getImplementedTypes(): PullTypeSymbol[]; - public addExtendedType(extendedType: PullTypeSymbol): void; - public getExtendedTypes(): PullTypeSymbol[]; - public addTypeThatExtendsThisType(type: PullTypeSymbol): void; - public getTypesThatExtendThisType(): PullTypeSymbol[]; - public addTypeThatExplicitlyImplementsThisType(type: PullTypeSymbol): void; - public getTypesThatExplicitlyImplementThisType(): PullTypeSymbol[]; - public isValidBaseKind(baseType: PullTypeSymbol, isExtendedType: boolean): boolean; - public findMember(name: string, lookInParent?: boolean): PullSymbol; - public findNestedType(name: string, kind?: PullElementKind): PullTypeSymbol; - public findNestedContainer(name: string, kind?: PullElementKind): PullTypeSymbol; - public getAllMembers(searchDeclKind: PullElementKind, memberVisiblity: GetAllMembersVisiblity): PullSymbol[]; - public findTypeParameter(name: string): PullTypeParameterSymbol; - public hasOnlyOverloadCallSignatures(): boolean; - } - var nSpecializationsCreated: number; - var nSpecializedSignaturesCreated: number; - var nSpecializedTypeParameterCreated: number; - class PullInstantiatedTypeReferenceSymbol extends PullTypeReferenceSymbol { - public referencedTypeSymbol: PullTypeSymbol; - private _typeParameterArgumentMap; - public isInstanceReferenceType: boolean; - private _instantiatedMembers; - private _allInstantiatedMemberNameCache; - private _instantiatedMemberNameCache; - private _instantiatedCallSignatures; - private _instantiatedConstructSignatures; - private _instantiatedIndexSignatures; - private _typeArgumentReferences; - private _instantiatedConstructorMethod; - private _instantiatedAssociatedContainerType; - private _isArray; - public getIsSpecialized(): boolean; - private _generativeTypeClassification; - public getGenerativeTypeClassification(enclosingType: PullTypeSymbol): GenerativeTypeClassification; - public isArrayNamedTypeReference(): boolean; - public getElementType(): PullTypeSymbol; - public getReferencedTypeSymbol(): PullTypeSymbol; - static create(resolver: PullTypeResolver, type: PullTypeSymbol, typeParameterArgumentMap: TypeArgumentMap): PullInstantiatedTypeReferenceSymbol; - constructor(referencedTypeSymbol: PullTypeSymbol, _typeParameterArgumentMap: TypeArgumentMap, isInstanceReferenceType: boolean); - public isGeneric(): boolean; - public getTypeParameterArgumentMap(): TypeArgumentMap; - public getTypeArguments(): PullTypeSymbol[]; - public getTypeArgumentsOrTypeParameters(): PullTypeSymbol[]; - private populateInstantiatedMemberFromReferencedMember(referencedMember); - public getMembers(): PullSymbol[]; - public findMember(name: string, lookInParent?: boolean): PullSymbol; - public getAllMembers(searchDeclKind: PullElementKind, memberVisiblity: GetAllMembersVisiblity): PullSymbol[]; - public getConstructorMethod(): PullSymbol; - public getAssociatedContainerType(): PullTypeSymbol; - public getCallSignatures(): PullSignatureSymbol[]; - public getConstructSignatures(): PullSignatureSymbol[]; - public getIndexSignatures(): PullSignatureSymbol[]; - } - class PullInstantiatedSignatureSymbol extends PullSignatureSymbol { - private _typeParameterArgumentMap; - public getTypeParameterArgumentMap(): TypeArgumentMap; - constructor(rootSignature: PullSignatureSymbol, _typeParameterArgumentMap: TypeArgumentMap); - public getIsSpecialized(): boolean; - public _getResolver(): PullTypeResolver; - public getTypeParameters(): PullTypeParameterSymbol[]; - public getAllowedToReferenceTypeParameters(): PullTypeParameterSymbol[]; - } - class PullInstantiatedTypeParameterSymbol extends PullTypeParameterSymbol { - constructor(rootTypeParameter: PullTypeSymbol, constraintType: PullTypeSymbol); - public _getResolver(): PullTypeResolver; - } -} -declare module TypeScript { - class SyntaxTreeToAstVisitor implements ISyntaxVisitor { - private fileName; - public lineMap: LineMap; - private compilationSettings; - public position: number; - public previousTokenTrailingComments: Comment[]; - constructor(fileName: string, lineMap: LineMap, compilationSettings: ImmutableCompilationSettings); - static visit(syntaxTree: SyntaxTree, fileName: string, compilationSettings: ImmutableCompilationSettings, incrementalAST: boolean): SourceUnit; - public movePast(element: ISyntaxElement): void; - private moveTo(element1, element2); - private setCommentsAndSpan(ast, fullStart, node); - public createTokenSpan(fullStart: number, element: ISyntaxToken): ASTSpan; - public setSpan(span: AST, fullStart: number, element: ISyntaxElement, firstToken?: ISyntaxToken, lastToken?: ISyntaxToken): void; - public setSpanExplicit(span: IASTSpan, start: number, end: number): void; - public visitSyntaxList(node: ISyntaxList): ISyntaxList2; - public visitSeparatedSyntaxList(list: ISeparatedSyntaxList): ISeparatedSyntaxList2; - private convertComment(trivia, commentStartPosition, hasTrailingNewLine); - private convertComments(triviaList, commentStartPosition); - private mergeComments(comments1, comments2); - private convertTokenLeadingComments(token, commentStartPosition); - private convertTokenTrailingComments(token, commentStartPosition); - private convertNodeTrailingComments(node, lastToken, nodeStart); - private visitIdentifier(token); - public visitToken(token: ISyntaxToken): IASTToken; - public visitTokenWorker(token: ISyntaxToken): IASTToken; - public visitSourceUnit(node: SourceUnitSyntax): SourceUnit; - public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): ExternalModuleReference; - public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): ModuleNameModuleReference; - public visitClassDeclaration(node: ClassDeclarationSyntax): ClassDeclaration; - private visitModifiers(modifiers); - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): InterfaceDeclaration; - public visitHeritageClause(node: HeritageClauseSyntax): HeritageClause; - public visitModuleDeclaration(node: ModuleDeclarationSyntax): ModuleDeclaration; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): FunctionDeclaration; - public visitEnumDeclaration(node: EnumDeclarationSyntax): EnumDeclaration; - public visitEnumElement(node: EnumElementSyntax): EnumElement; - public visitImportDeclaration(node: ImportDeclarationSyntax): ImportDeclaration; - public visitExportAssignment(node: ExportAssignmentSyntax): ExportAssignment; - public visitVariableStatement(node: VariableStatementSyntax): VariableStatement; - public visitVariableDeclaration(node: VariableDeclarationSyntax): VariableDeclaration; - public visitVariableDeclarator(node: VariableDeclaratorSyntax): VariableDeclarator; - public visitEqualsValueClause(node: EqualsValueClauseSyntax): EqualsValueClause; - public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): PrefixUnaryExpression; - public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): ArrayLiteralExpression; - public visitOmittedExpression(node: OmittedExpressionSyntax): OmittedExpression; - public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): ParenthesizedExpression; - public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): SimpleArrowFunctionExpression; - public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): ParenthesizedArrowFunctionExpression; - public visitType(type: ITypeSyntax): AST; - public visitTypeQuery(node: TypeQuerySyntax): TypeQuery; - public visitQualifiedName(node: QualifiedNameSyntax): QualifiedName; - public visitTypeArgumentList(node: TypeArgumentListSyntax): TypeArgumentList; - public visitConstructorType(node: ConstructorTypeSyntax): ConstructorType; - public visitFunctionType(node: FunctionTypeSyntax): FunctionType; - public visitObjectType(node: ObjectTypeSyntax): ObjectType; - public visitArrayType(node: ArrayTypeSyntax): ArrayType; - public visitGenericType(node: GenericTypeSyntax): GenericType; - public visitTypeAnnotation(node: TypeAnnotationSyntax): TypeAnnotation; - public visitBlock(node: BlockSyntax): Block; - public visitParameter(node: ParameterSyntax): Parameter; - public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): MemberAccessExpression; - public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): PostfixUnaryExpression; - public visitElementAccessExpression(node: ElementAccessExpressionSyntax): ElementAccessExpression; - public visitInvocationExpression(node: InvocationExpressionSyntax): InvocationExpression; - public visitArgumentList(node: ArgumentListSyntax): ArgumentList; - public visitBinaryExpression(node: BinaryExpressionSyntax): BinaryExpression; - public visitConditionalExpression(node: ConditionalExpressionSyntax): ConditionalExpression; - public visitConstructSignature(node: ConstructSignatureSyntax): ConstructSignature; - public visitMethodSignature(node: MethodSignatureSyntax): MethodSignature; - public visitIndexSignature(node: IndexSignatureSyntax): IndexSignature; - public visitPropertySignature(node: PropertySignatureSyntax): PropertySignature; - public visitParameterList(node: ParameterListSyntax): ParameterList; - public visitCallSignature(node: CallSignatureSyntax): CallSignature; - public visitTypeParameterList(node: TypeParameterListSyntax): TypeParameterList; - public visitTypeParameter(node: TypeParameterSyntax): TypeParameter; - public visitConstraint(node: ConstraintSyntax): Constraint; - public visitIfStatement(node: IfStatementSyntax): IfStatement; - public visitElseClause(node: ElseClauseSyntax): ElseClause; - public visitExpressionStatement(node: ExpressionStatementSyntax): ExpressionStatement; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): ConstructorDeclaration; - public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): IndexMemberDeclaration; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): MemberFunctionDeclaration; - public visitGetAccessor(node: GetAccessorSyntax): GetAccessor; - public visitSetAccessor(node: SetAccessorSyntax): SetAccessor; - public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): MemberVariableDeclaration; - public visitThrowStatement(node: ThrowStatementSyntax): ThrowStatement; - public visitReturnStatement(node: ReturnStatementSyntax): ReturnStatement; - public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): ObjectCreationExpression; - public visitSwitchStatement(node: SwitchStatementSyntax): SwitchStatement; - public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): CaseSwitchClause; - public visitDefaultSwitchClause(node: DefaultSwitchClauseSyntax): DefaultSwitchClause; - public visitBreakStatement(node: BreakStatementSyntax): BreakStatement; - public visitContinueStatement(node: ContinueStatementSyntax): ContinueStatement; - public visitForStatement(node: ForStatementSyntax): ForStatement; - public visitForInStatement(node: ForInStatementSyntax): ForInStatement; - public visitWhileStatement(node: WhileStatementSyntax): WhileStatement; - public visitWithStatement(node: WithStatementSyntax): WithStatement; - public visitCastExpression(node: CastExpressionSyntax): CastExpression; - public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): ObjectLiteralExpression; - public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): SimplePropertyAssignment; - public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): FunctionPropertyAssignment; - public visitFunctionExpression(node: FunctionExpressionSyntax): FunctionExpression; - public visitEmptyStatement(node: EmptyStatementSyntax): EmptyStatement; - public visitTryStatement(node: TryStatementSyntax): TryStatement; - public visitCatchClause(node: CatchClauseSyntax): CatchClause; - public visitFinallyClause(node: FinallyClauseSyntax): FinallyClause; - public visitLabeledStatement(node: LabeledStatementSyntax): LabeledStatement; - public visitDoStatement(node: DoStatementSyntax): DoStatement; - public visitTypeOfExpression(node: TypeOfExpressionSyntax): TypeOfExpression; - public visitDeleteExpression(node: DeleteExpressionSyntax): DeleteExpression; - public visitVoidExpression(node: VoidExpressionSyntax): VoidExpression; - public visitDebuggerStatement(node: DebuggerStatementSyntax): DebuggerStatement; - } -} -declare module TypeScript { - interface IASTSpan { - _start: number; - _end: number; - start(): number; - end(): number; - } - class ASTSpan implements IASTSpan { - public _start: number; - public _end: number; - constructor(_start: number, _end: number); - public start(): number; - public end(): number; - } - function structuralEqualsNotIncludingPosition(ast1: AST, ast2: AST): boolean; - function structuralEqualsIncludingPosition(ast1: AST, ast2: AST): boolean; - class AST implements IASTSpan { - public parent: AST; - public _start: number; - public _end: number; - public _trailingTriviaWidth: number; - private _astID; - private _preComments; - private _postComments; - constructor(); - public syntaxID(): number; - public start(): number; - public end(): number; - public trailingTriviaWidth(): number; - public fileName(): string; - public kind(): SyntaxKind; - public preComments(): Comment[]; - public postComments(): Comment[]; - public setPreComments(comments: Comment[]): void; - public setPostComments(comments: Comment[]): void; - public width(): number; - public structuralEquals(ast: AST, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - interface IASTToken extends AST { - text(): string; - valueText(): string; - } - class ISyntaxList2 extends AST { - private _fileName; - private members; - constructor(_fileName: string, members: AST[]); - public childCount(): number; - public childAt(index: number): AST; - public fileName(): string; - public kind(): SyntaxKind; - public firstOrDefault(func: (v: AST, index: number) => boolean): AST; - public lastOrDefault(func: (v: AST, index: number) => boolean): AST; - public any(func: (v: AST) => boolean): boolean; - public structuralEquals(ast: ISyntaxList2, includingPosition: boolean): boolean; - } - class ISeparatedSyntaxList2 extends AST { - private _fileName; - private members; - private _separatorCount; - constructor(_fileName: string, members: AST[], _separatorCount: number); - public nonSeparatorCount(): number; - public separatorCount(): number; - public nonSeparatorAt(index: number): AST; - public nonSeparatorIndexOf(ast: AST): number; - public fileName(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: ISeparatedSyntaxList2, includingPosition: boolean): boolean; - } - class SourceUnit extends AST { - public moduleElements: ISyntaxList2; - public endOfFileTokenLeadingComments: Comment[]; - private _fileName; - constructor(moduleElements: ISyntaxList2, endOfFileTokenLeadingComments: Comment[], _fileName: string); - public fileName(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: SourceUnit, includingPosition: boolean): boolean; - } - class Identifier extends AST implements IASTToken { - private _text; - private _valueText; - constructor(_text: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: Identifier, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class LiteralExpression extends AST { - private _nodeType; - private _text; - private _valueText; - constructor(_nodeType: SyntaxKind, _text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: ParenthesizedExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ThisExpression extends AST implements IASTToken { - private _text; - private _valueText; - constructor(_text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: ParenthesizedExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class SuperExpression extends AST implements IASTToken { - private _text; - private _valueText; - constructor(_text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: ParenthesizedExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class NumericLiteral extends AST implements IASTToken { - private _value; - private _text; - private _valueText; - constructor(_value: number, _text: string, _valueText: string); - public text(): string; - public valueText(): string; - public value(): any; - public kind(): SyntaxKind; - public structuralEquals(ast: NumericLiteral, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class RegularExpressionLiteral extends AST implements IASTToken { - private _text; - private _valueText; - constructor(_text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public isExpression(): boolean; - } - class StringLiteral extends AST implements IASTToken { - private _text; - private _valueText; - constructor(_text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: StringLiteral, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class TypeAnnotation extends AST { - public type: AST; - constructor(type: AST); - public kind(): SyntaxKind; - } - class BuiltInType extends AST implements IASTToken { - private _nodeType; - private _text; - private _valueText; - constructor(_nodeType: SyntaxKind, _text: string, _valueText: string); - public text(): string; - public valueText(): string; - public kind(): SyntaxKind; - } - class ExternalModuleReference extends AST { - public stringLiteral: StringLiteral; - constructor(stringLiteral: StringLiteral); - public kind(): SyntaxKind; - } - class ModuleNameModuleReference extends AST { - public moduleName: AST; - constructor(moduleName: AST); - public kind(): SyntaxKind; - } - class ImportDeclaration extends AST { - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public moduleReference: AST; - constructor(modifiers: PullElementFlags[], identifier: Identifier, moduleReference: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ImportDeclaration, includingPosition: boolean): boolean; - } - class ExportAssignment extends AST { - public identifier: Identifier; - constructor(identifier: Identifier); - public kind(): SyntaxKind; - public structuralEquals(ast: ExportAssignment, includingPosition: boolean): boolean; - } - class TypeParameterList extends AST { - public typeParameters: ISeparatedSyntaxList2; - constructor(typeParameters: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - } - class ClassDeclaration extends AST { - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public typeParameterList: TypeParameterList; - public heritageClauses: ISyntaxList2; - public classElements: ISyntaxList2; - public closeBraceToken: ASTSpan; - constructor(modifiers: PullElementFlags[], identifier: Identifier, typeParameterList: TypeParameterList, heritageClauses: ISyntaxList2, classElements: ISyntaxList2, closeBraceToken: ASTSpan); - public kind(): SyntaxKind; - public structuralEquals(ast: ClassDeclaration, includingPosition: boolean): boolean; - } - class InterfaceDeclaration extends AST { - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public typeParameterList: TypeParameterList; - public heritageClauses: ISyntaxList2; - public body: ObjectType; - constructor(modifiers: PullElementFlags[], identifier: Identifier, typeParameterList: TypeParameterList, heritageClauses: ISyntaxList2, body: ObjectType); - public kind(): SyntaxKind; - public structuralEquals(ast: InterfaceDeclaration, includingPosition: boolean): boolean; - } - class HeritageClause extends AST { - private _nodeType; - public typeNames: ISeparatedSyntaxList2; - constructor(_nodeType: SyntaxKind, typeNames: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: HeritageClause, includingPosition: boolean): boolean; - } - class ModuleDeclaration extends AST { - public modifiers: PullElementFlags[]; - public name: AST; - public stringLiteral: StringLiteral; - public moduleElements: ISyntaxList2; - public endingToken: ASTSpan; - constructor(modifiers: PullElementFlags[], name: AST, stringLiteral: StringLiteral, moduleElements: ISyntaxList2, endingToken: ASTSpan); - public kind(): SyntaxKind; - public structuralEquals(ast: ModuleDeclaration, includingPosition: boolean): boolean; - } - class FunctionDeclaration extends AST { - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public callSignature: CallSignature; - public block: Block; - constructor(modifiers: PullElementFlags[], identifier: Identifier, callSignature: CallSignature, block: Block); - public kind(): SyntaxKind; - public structuralEquals(ast: FunctionDeclaration, includingPosition: boolean): boolean; - } - class VariableStatement extends AST { - public modifiers: PullElementFlags[]; - public declaration: VariableDeclaration; - constructor(modifiers: PullElementFlags[], declaration: VariableDeclaration); - public kind(): SyntaxKind; - public structuralEquals(ast: VariableStatement, includingPosition: boolean): boolean; - } - class VariableDeclaration extends AST { - public declarators: ISeparatedSyntaxList2; - constructor(declarators: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: VariableDeclaration, includingPosition: boolean): boolean; - } - class VariableDeclarator extends AST { - public propertyName: IASTToken; - public typeAnnotation: TypeAnnotation; - public equalsValueClause: EqualsValueClause; - constructor(propertyName: IASTToken, typeAnnotation: TypeAnnotation, equalsValueClause: EqualsValueClause); - public kind(): SyntaxKind; - } - class EqualsValueClause extends AST { - public value: AST; - constructor(value: AST); - public kind(): SyntaxKind; - } - class PrefixUnaryExpression extends AST { - private _nodeType; - public operand: AST; - constructor(_nodeType: SyntaxKind, operand: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: PrefixUnaryExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ArrayLiteralExpression extends AST { - public expressions: ISeparatedSyntaxList2; - constructor(expressions: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: ArrayLiteralExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class OmittedExpression extends AST { - public kind(): SyntaxKind; - public structuralEquals(ast: CatchClause, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ParenthesizedExpression extends AST { - public openParenTrailingComments: Comment[]; - public expression: AST; - constructor(openParenTrailingComments: Comment[], expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ParenthesizedExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - interface ICallExpression extends IASTSpan { - expression: AST; - argumentList: ArgumentList; - } - class SimpleArrowFunctionExpression extends AST { - public identifier: Identifier; - public block: Block; - public expression: AST; - constructor(identifier: Identifier, block: Block, expression: AST); - public kind(): SyntaxKind; - public isExpression(): boolean; - } - class ParenthesizedArrowFunctionExpression extends AST { - public callSignature: CallSignature; - public block: Block; - public expression: AST; - constructor(callSignature: CallSignature, block: Block, expression: AST); - public kind(): SyntaxKind; - public isExpression(): boolean; - } - class QualifiedName extends AST { - public left: AST; - public right: Identifier; - constructor(left: AST, right: Identifier); - public kind(): SyntaxKind; - public structuralEquals(ast: QualifiedName, includingPosition: boolean): boolean; - } - class ParameterList extends AST { - public openParenTrailingComments: Comment[]; - public parameters: ISeparatedSyntaxList2; - constructor(openParenTrailingComments: Comment[], parameters: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - } - class ConstructorType extends AST { - public typeParameterList: TypeParameterList; - public parameterList: ParameterList; - public type: AST; - constructor(typeParameterList: TypeParameterList, parameterList: ParameterList, type: AST); - public kind(): SyntaxKind; - } - class FunctionType extends AST { - public typeParameterList: TypeParameterList; - public parameterList: ParameterList; - public type: AST; - constructor(typeParameterList: TypeParameterList, parameterList: ParameterList, type: AST); - public kind(): SyntaxKind; - } - class ObjectType extends AST { - public typeMembers: ISeparatedSyntaxList2; - constructor(typeMembers: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: ObjectType, includingPosition: boolean): boolean; - } - class ArrayType extends AST { - public type: AST; - constructor(type: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ArrayType, includingPosition: boolean): boolean; - } - class TypeArgumentList extends AST { - public typeArguments: ISeparatedSyntaxList2; - constructor(typeArguments: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - } - class GenericType extends AST { - public name: AST; - public typeArgumentList: TypeArgumentList; - constructor(name: AST, typeArgumentList: TypeArgumentList); - public kind(): SyntaxKind; - public structuralEquals(ast: GenericType, includingPosition: boolean): boolean; - } - class TypeQuery extends AST { - public name: AST; - constructor(name: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: TypeQuery, includingPosition: boolean): boolean; - } - class Block extends AST { - public statements: ISyntaxList2; - public closeBraceLeadingComments: Comment[]; - public closeBraceToken: IASTSpan; - constructor(statements: ISyntaxList2, closeBraceLeadingComments: Comment[], closeBraceToken: IASTSpan); - public kind(): SyntaxKind; - public structuralEquals(ast: Block, includingPosition: boolean): boolean; - } - class Parameter extends AST { - public dotDotDotToken: ASTSpan; - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public questionToken: ASTSpan; - public typeAnnotation: TypeAnnotation; - public equalsValueClause: EqualsValueClause; - constructor(dotDotDotToken: ASTSpan, modifiers: PullElementFlags[], identifier: Identifier, questionToken: ASTSpan, typeAnnotation: TypeAnnotation, equalsValueClause: EqualsValueClause); - public kind(): SyntaxKind; - } - class MemberAccessExpression extends AST { - public expression: AST; - public name: Identifier; - constructor(expression: AST, name: Identifier); - public kind(): SyntaxKind; - public structuralEquals(ast: MemberAccessExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class PostfixUnaryExpression extends AST { - private _nodeType; - public operand: AST; - constructor(_nodeType: SyntaxKind, operand: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: PostfixUnaryExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ElementAccessExpression extends AST { - public expression: AST; - public argumentExpression: AST; - constructor(expression: AST, argumentExpression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ElementAccessExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class InvocationExpression extends AST implements ICallExpression { - public expression: AST; - public argumentList: ArgumentList; - constructor(expression: AST, argumentList: ArgumentList); - public kind(): SyntaxKind; - public structuralEquals(ast: InvocationExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ArgumentList extends AST { - public typeArgumentList: TypeArgumentList; - public closeParenToken: ASTSpan; - public arguments: ISeparatedSyntaxList2; - constructor(typeArgumentList: TypeArgumentList, _arguments: ISeparatedSyntaxList2, closeParenToken: ASTSpan); - public kind(): SyntaxKind; - } - class BinaryExpression extends AST { - private _nodeType; - public left: AST; - public right: AST; - constructor(_nodeType: SyntaxKind, left: AST, right: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: BinaryExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ConditionalExpression extends AST { - public condition: AST; - public whenTrue: AST; - public whenFalse: AST; - constructor(condition: AST, whenTrue: AST, whenFalse: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ConditionalExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ConstructSignature extends AST { - public callSignature: CallSignature; - constructor(callSignature: CallSignature); - public kind(): SyntaxKind; - } - class MethodSignature extends AST { - public propertyName: IASTToken; - public questionToken: ASTSpan; - public callSignature: CallSignature; - constructor(propertyName: IASTToken, questionToken: ASTSpan, callSignature: CallSignature); - public kind(): SyntaxKind; - } - class IndexSignature extends AST { - public parameter: Parameter; - public typeAnnotation: TypeAnnotation; - constructor(parameter: Parameter, typeAnnotation: TypeAnnotation); - public kind(): SyntaxKind; - } - class PropertySignature extends AST { - public propertyName: IASTToken; - public questionToken: ASTSpan; - public typeAnnotation: TypeAnnotation; - constructor(propertyName: IASTToken, questionToken: ASTSpan, typeAnnotation: TypeAnnotation); - public kind(): SyntaxKind; - } - class CallSignature extends AST { - public typeParameterList: TypeParameterList; - public parameterList: ParameterList; - public typeAnnotation: TypeAnnotation; - constructor(typeParameterList: TypeParameterList, parameterList: ParameterList, typeAnnotation: TypeAnnotation); - public kind(): SyntaxKind; - } - class TypeParameter extends AST { - public identifier: Identifier; - public constraint: Constraint; - constructor(identifier: Identifier, constraint: Constraint); - public kind(): SyntaxKind; - public structuralEquals(ast: TypeParameter, includingPosition: boolean): boolean; - } - class Constraint extends AST { - public type: AST; - constructor(type: AST); - public kind(): SyntaxKind; - } - class ElseClause extends AST { - public statement: AST; - constructor(statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ElseClause, includingPosition: boolean): boolean; - } - class IfStatement extends AST { - public condition: AST; - public statement: AST; - public elseClause: ElseClause; - constructor(condition: AST, statement: AST, elseClause: ElseClause); - public kind(): SyntaxKind; - public structuralEquals(ast: IfStatement, includingPosition: boolean): boolean; - } - class ExpressionStatement extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ExpressionStatement, includingPosition: boolean): boolean; - } - class ConstructorDeclaration extends AST { - public callSignature: CallSignature; - public block: Block; - constructor(callSignature: CallSignature, block: Block); - public kind(): SyntaxKind; - } - class MemberFunctionDeclaration extends AST { - public modifiers: PullElementFlags[]; - public propertyName: IASTToken; - public callSignature: CallSignature; - public block: Block; - constructor(modifiers: PullElementFlags[], propertyName: IASTToken, callSignature: CallSignature, block: Block); - public kind(): SyntaxKind; - } - class GetAccessor extends AST { - public modifiers: PullElementFlags[]; - public propertyName: IASTToken; - public parameterList: ParameterList; - public typeAnnotation: TypeAnnotation; - public block: Block; - constructor(modifiers: PullElementFlags[], propertyName: IASTToken, parameterList: ParameterList, typeAnnotation: TypeAnnotation, block: Block); - public kind(): SyntaxKind; - } - class SetAccessor extends AST { - public modifiers: PullElementFlags[]; - public propertyName: IASTToken; - public parameterList: ParameterList; - public block: Block; - constructor(modifiers: PullElementFlags[], propertyName: IASTToken, parameterList: ParameterList, block: Block); - public kind(): SyntaxKind; - } - class MemberVariableDeclaration extends AST { - public modifiers: PullElementFlags[]; - public variableDeclarator: VariableDeclarator; - constructor(modifiers: PullElementFlags[], variableDeclarator: VariableDeclarator); - public kind(): SyntaxKind; - } - class IndexMemberDeclaration extends AST { - public indexSignature: IndexSignature; - constructor(indexSignature: IndexSignature); - public kind(): SyntaxKind; - } - class ThrowStatement extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ThrowStatement, includingPosition: boolean): boolean; - } - class ReturnStatement extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ReturnStatement, includingPosition: boolean): boolean; - } - class ObjectCreationExpression extends AST implements ICallExpression { - public expression: AST; - public argumentList: ArgumentList; - constructor(expression: AST, argumentList: ArgumentList); - public kind(): SyntaxKind; - public structuralEquals(ast: ObjectCreationExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class SwitchStatement extends AST { - public expression: AST; - public closeParenToken: ASTSpan; - public switchClauses: ISyntaxList2; - constructor(expression: AST, closeParenToken: ASTSpan, switchClauses: ISyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: SwitchStatement, includingPosition: boolean): boolean; - } - class CaseSwitchClause extends AST { - public expression: AST; - public statements: ISyntaxList2; - constructor(expression: AST, statements: ISyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: CaseSwitchClause, includingPosition: boolean): boolean; - } - class DefaultSwitchClause extends AST { - public statements: ISyntaxList2; - constructor(statements: ISyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: DefaultSwitchClause, includingPosition: boolean): boolean; - } - class BreakStatement extends AST { - public identifier: Identifier; - constructor(identifier: Identifier); - public kind(): SyntaxKind; - public structuralEquals(ast: BreakStatement, includingPosition: boolean): boolean; - } - class ContinueStatement extends AST { - public identifier: Identifier; - constructor(identifier: Identifier); - public kind(): SyntaxKind; - public structuralEquals(ast: ContinueStatement, includingPosition: boolean): boolean; - } - class ForStatement extends AST { - public variableDeclaration: VariableDeclaration; - public initializer: AST; - public condition: AST; - public incrementor: AST; - public statement: AST; - constructor(variableDeclaration: VariableDeclaration, initializer: AST, condition: AST, incrementor: AST, statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ForStatement, includingPosition: boolean): boolean; - } - class ForInStatement extends AST { - public variableDeclaration: VariableDeclaration; - public left: AST; - public expression: AST; - public statement: AST; - constructor(variableDeclaration: VariableDeclaration, left: AST, expression: AST, statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: ForInStatement, includingPosition: boolean): boolean; - } - class WhileStatement extends AST { - public condition: AST; - public statement: AST; - constructor(condition: AST, statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: WhileStatement, includingPosition: boolean): boolean; - } - class WithStatement extends AST { - public condition: AST; - public statement: AST; - constructor(condition: AST, statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: WithStatement, includingPosition: boolean): boolean; - } - class EnumDeclaration extends AST { - public modifiers: PullElementFlags[]; - public identifier: Identifier; - public enumElements: ISeparatedSyntaxList2; - constructor(modifiers: PullElementFlags[], identifier: Identifier, enumElements: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - } - class EnumElement extends AST { - public propertyName: IASTToken; - public equalsValueClause: EqualsValueClause; - constructor(propertyName: IASTToken, equalsValueClause: EqualsValueClause); - public kind(): SyntaxKind; - } - class CastExpression extends AST { - public type: AST; - public expression: AST; - constructor(type: AST, expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: CastExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class ObjectLiteralExpression extends AST { - public propertyAssignments: ISeparatedSyntaxList2; - constructor(propertyAssignments: ISeparatedSyntaxList2); - public kind(): SyntaxKind; - public structuralEquals(ast: ObjectLiteralExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class SimplePropertyAssignment extends AST { - public propertyName: Identifier; - public expression: AST; - constructor(propertyName: Identifier, expression: AST); - public kind(): SyntaxKind; - } - class FunctionPropertyAssignment extends AST { - public propertyName: Identifier; - public callSignature: CallSignature; - public block: Block; - constructor(propertyName: Identifier, callSignature: CallSignature, block: Block); - public kind(): SyntaxKind; - } - class FunctionExpression extends AST { - public identifier: Identifier; - public callSignature: CallSignature; - public block: Block; - constructor(identifier: Identifier, callSignature: CallSignature, block: Block); - public kind(): SyntaxKind; - public isExpression(): boolean; - } - class EmptyStatement extends AST { - public kind(): SyntaxKind; - public structuralEquals(ast: CatchClause, includingPosition: boolean): boolean; - } - class TryStatement extends AST { - public block: Block; - public catchClause: CatchClause; - public finallyClause: FinallyClause; - constructor(block: Block, catchClause: CatchClause, finallyClause: FinallyClause); - public kind(): SyntaxKind; - public structuralEquals(ast: TryStatement, includingPosition: boolean): boolean; - } - class CatchClause extends AST { - public identifier: Identifier; - public typeAnnotation: TypeAnnotation; - public block: Block; - constructor(identifier: Identifier, typeAnnotation: TypeAnnotation, block: Block); - public kind(): SyntaxKind; - public structuralEquals(ast: CatchClause, includingPosition: boolean): boolean; - } - class FinallyClause extends AST { - public block: Block; - constructor(block: Block); - public kind(): SyntaxKind; - public structuralEquals(ast: CatchClause, includingPosition: boolean): boolean; - } - class LabeledStatement extends AST { - public identifier: Identifier; - public statement: AST; - constructor(identifier: Identifier, statement: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: LabeledStatement, includingPosition: boolean): boolean; - } - class DoStatement extends AST { - public statement: AST; - public whileKeyword: ASTSpan; - public condition: AST; - constructor(statement: AST, whileKeyword: ASTSpan, condition: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: DoStatement, includingPosition: boolean): boolean; - } - class TypeOfExpression extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: TypeOfExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class DeleteExpression extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: DeleteExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class VoidExpression extends AST { - public expression: AST; - constructor(expression: AST); - public kind(): SyntaxKind; - public structuralEquals(ast: VoidExpression, includingPosition: boolean): boolean; - public isExpression(): boolean; - } - class DebuggerStatement extends AST { - public kind(): SyntaxKind; - } - class Comment { - private _trivia; - public endsLine: boolean; - public _start: number; - public _end: number; - constructor(_trivia: ISyntaxTrivia, endsLine: boolean, _start: number, _end: number); - public start(): number; - public end(): number; - public fullText(): string; - public kind(): SyntaxKind; - public structuralEquals(ast: Comment, includingPosition: boolean): boolean; - } -} -declare module TypeScript.Services { - enum EndOfLineState { - Start = 0, - InMultiLineCommentTrivia = 1, - InSingleQuoteStringLiteral = 2, - InDoubleQuoteStringLiteral = 3, - } - enum TokenClass { - Punctuation = 0, - Keyword = 1, - Operator = 2, - Comment = 3, - Whitespace = 4, - Identifier = 5, - NumberLiteral = 6, - StringLiteral = 7, - RegExpLiteral = 8, - } - class Classifier { - public host: IClassifierHost; - private scanner; - private characterWindow; - private diagnostics; - constructor(host: IClassifierHost); - public getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult; - private processToken(text, offset, token, result); - private processTriviaList(text, offset, triviaList, result); - private addResult(text, offset, result, length, kind); - private classFromKind(kind); - } - interface IClassifierHost extends ILogger { - } - class ClassificationResult { - public finalLexState: EndOfLineState; - public entries: ClassificationInfo[]; - constructor(); - } - class ClassificationInfo { - public length: number; - public classification: TokenClass; - constructor(length: number, classification: TokenClass); - } + function changePathToDTS(modPath: string): string; + function isRelative(path: string): boolean; + function isRooted(path: string): boolean; + function getRootFilePath(outFname: string): string; + function filePathComponents(fullPath: string): string[]; + function filePath(fullPath: string): string; + function convertToDirectoryPath(dirPath: string): string; + function normalizePath(path: string): string; } -declare module TypeScript.Services { - interface ILanguageServicesDiagnostics { - log(content: string): void; +declare module ts { + interface Node { + getSourceFile(): SourceFile; + getChildCount(): number; + getChildAt(index: number): Node; + getChildren(): Node[]; + getStart(): number; + getFullStart(): number; + getEnd(): number; + getWidth(): number; + getFullWidth(): number; + getLeadingTriviaWidth(): number; + getFullText(): string; + getFirstToken(): Node; + getLastToken(): Node; + } + interface Symbol { + getFlags(): SymbolFlags; + getName(): string; + getDeclarations(): Declaration[]; + } + interface Type { + getFlags(): TypeFlags; + getSymbol(): Symbol; + getProperties(): Symbol[]; + getProperty(propertyName: string): Symbol; + getApparentProperties(): Symbol[]; + getCallSignatures(): Signature[]; + getConstructSignatures(): Signature[]; + getStringIndexType(): Type; + getNumberIndexType(): Type; + } + interface Signature { + getDeclaration(): SignatureDeclaration; + getTypeParameters(): Type[]; + getParameters(): Symbol[]; + getReturnType(): Type; + } + interface SourceFile { + getSourceUnit(): TypeScript.SourceUnitSyntax; + getSyntaxTree(): TypeScript.SyntaxTree; + getBloomFilter(): TypeScript.BloomFilter; + update(scriptSnapshot: TypeScript.IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile; + } + interface Logger { + information(): boolean; + debug(): boolean; + warning(): boolean; + error(): boolean; + fatal(): boolean; + log(s: string): void; } -} -declare module TypeScript.Services { - interface ILanguageServiceHost extends ILogger, IReferenceResolverHost { - getCompilationSettings(): CompilationSettings; + interface LanguageServiceHost extends Logger { + getCompilationSettings(): CompilerOptions; getScriptFileNames(): string[]; getScriptVersion(fileName: string): number; getScriptIsOpen(fileName: string): boolean; - getScriptByteOrderMark(fileName: string): ByteOrderMark; - getScriptSnapshot(fileName: string): IScriptSnapshot; - getDiagnosticsObject(): ILanguageServicesDiagnostics; + getScriptSnapshot(fileName: string): TypeScript.IScriptSnapshot; getLocalizedDiagnosticMessages(): any; + getCancellationToken(): CancellationToken; } - interface ILanguageService { + interface LanguageService { refresh(): void; cleanupSemanticCache(): void; getSyntacticDiagnostics(fileName: string): Diagnostic[]; @@ -8177,944 +6818,278 @@ declare module TypeScript.Services { getImplementorsAtPosition(fileName: string, position: number): ReferenceEntry[]; getNavigateToItems(searchValue: string): NavigateToItem[]; getScriptLexicalStructure(fileName: string): NavigateToItem[]; - getOutliningRegions(fileName: string): TextSpan[]; - getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[]; + getOutliningRegions(fileName: string): OutliningSpan[]; + getBraceMatchingAtPosition(fileName: string, position: number): TypeScript.TextSpan[]; getIndentationAtPosition(fileName: string, position: number, options: EditorOptions): number; getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextEdit[]; getEmitOutput(fileName: string): EmitOutput; - getSyntaxTree(fileName: string): SyntaxTree; - } - function logInternalError(logger: ILogger, err: Error): void; - class ReferenceEntry { - public fileName: string; - public minChar: number; - public limChar: number; - public isWriteAccess: boolean; - constructor(fileName: string, minChar: number, limChar: number, isWriteAccess: boolean); - } - class NavigateToItem { - public name: string; - public kind: string; - public kindModifiers: string; - public matchKind: string; - public fileName: string; - public minChar: number; - public limChar: number; - public additionalSpans: SpanInfo[]; - public containerName: string; - public containerKind: string; - } - class TextEdit { - public minChar: number; - public limChar: number; - public text: string; - constructor(minChar: number, limChar: number, text: string); - static createInsert(pos: number, text: string): TextEdit; - static createDelete(minChar: number, limChar: number): TextEdit; - static createReplace(minChar: number, limChar: number, text: string): TextEdit; - } - class EditorOptions { - public IndentSize: number; - public TabSize: number; - public NewLineCharacter: string; - public ConvertTabsToSpaces: boolean; - static clone(objectToClone: EditorOptions): EditorOptions; - } - class FormatCodeOptions extends EditorOptions { - public InsertSpaceAfterCommaDelimiter: boolean; - public InsertSpaceAfterSemicolonInForStatements: boolean; - public InsertSpaceBeforeAndAfterBinaryOperators: boolean; - public InsertSpaceAfterKeywordsInControlFlowStatements: boolean; - public InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean; - public InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; - public PlaceOpenBraceOnNewLineForFunctions: boolean; - public PlaceOpenBraceOnNewLineForControlBlocks: boolean; - static clone(objectToClone: FormatCodeOptions): FormatCodeOptions; - } - class DefinitionInfo { - public fileName: string; - public minChar: number; - public limChar: number; - public kind: string; - public name: string; - public containerKind: string; - public containerName: string; - constructor(fileName: string, minChar: number, limChar: number, kind: string, name: string, containerKind: string, containerName: string); - } - class TypeInfo { - public memberName: MemberName; - public docComment: string; - public fullSymbolName: string; - public kind: string; - public minChar: number; - public limChar: number; - constructor(memberName: MemberName, docComment: string, fullSymbolName: string, kind: string, minChar: number, limChar: number); - } - class SpanInfo { - public minChar: number; - public limChar: number; - public text: string; - constructor(minChar: number, limChar: number, text?: string); - } - class SignatureInfo { - public actual: ActualSignatureInfo; - public formal: FormalSignatureItemInfo[]; - public activeFormal: number; - } - class FormalSignatureItemInfo { - public signatureInfo: string; - public typeParameters: FormalTypeParameterInfo[]; - public parameters: FormalParameterInfo[]; - public docComment: string; - } - class FormalTypeParameterInfo { - public name: string; - public docComment: string; - public minChar: number; - public limChar: number; - } - class FormalParameterInfo { - public name: string; - public isVariable: boolean; - public docComment: string; - public minChar: number; - public limChar: number; - } - class ActualSignatureInfo { - public parameterMinChar: number; - public parameterLimChar: number; - public currentParameterIsTypeParameter: boolean; - public currentParameter: number; - } - class CompletionInfo { - public maybeInaccurate: boolean; - public isMemberCompletion: boolean; - public entries: CompletionEntry[]; + dispose(): void; } - interface CompletionEntry { - name: string; - kind: string; - kindModifiers: string; + interface ReferenceEntry { + fileName: string; + minChar: number; + limChar: number; + isWriteAccess: boolean; } - interface CompletionEntryDetails { + interface NavigateToItem { name: string; kind: string; kindModifiers: string; - type: string; - fullSymbolName: string; - docComment: string; - } - class ScriptElementKind { - static unknown: string; - static keyword: string; - static scriptElement: string; - static moduleElement: string; - static classElement: string; - static interfaceElement: string; - static enumElement: string; - static variableElement: string; - static localVariableElement: string; - static functionElement: string; - static localFunctionElement: string; - static memberFunctionElement: string; - static memberGetAccessorElement: string; - static memberSetAccessorElement: string; - static memberVariableElement: string; - static constructorImplementationElement: string; - static callSignatureElement: string; - static indexSignatureElement: string; - static constructSignatureElement: string; - static parameterElement: string; - static typeParameterElement: string; - static primitiveType: string; - } - class ScriptElementKindModifier { - static none: string; - static publicMemberModifier: string; - static privateMemberModifier: string; - static exportedModifier: string; - static ambientModifier: string; - static staticModifier: string; - } - class MatchKind { - static none: string; - static exact: string; - static subString: string; - static prefix: string; - } - class DiagnosticCategory { - static none: string; - static error: string; - static warning: string; - static message: string; - } -} -declare module TypeScript.Services.Formatting { - interface ITextSnapshot { - getText(span: TextSpan): string; - getLineNumberFromPosition(position: number): number; - getLineFromPosition(position: number): ITextSnapshotLine; - getLineFromLineNumber(lineNumber: number): ITextSnapshotLine; - } - class TextSnapshot implements ITextSnapshot { - private snapshot; - private lines; - constructor(snapshot: ISimpleText); - public getText(span: TextSpan): string; - public getLineNumberFromPosition(position: number): number; - public getLineFromPosition(position: number): ITextSnapshotLine; - public getLineFromLineNumber(lineNumber: number): ITextSnapshotLine; - private getLineFromLineNumberWorker(lineNumber); - } -} -declare module TypeScript.Services.Formatting { - interface ITextSnapshotLine { - snapshot(): ITextSnapshot; - start(): SnapshotPoint; - startPosition(): number; - end(): SnapshotPoint; - endPosition(): number; - endIncludingLineBreak(): SnapshotPoint; - endIncludingLineBreakPosition(): number; - length(): number; - lineNumber(): number; - getText(): string; - } - class TextSnapshotLine implements ITextSnapshotLine { - private _snapshot; - private _lineNumber; - private _start; - private _end; - private _lineBreak; - constructor(_snapshot: ITextSnapshot, _lineNumber: number, _start: number, _end: number, _lineBreak: string); - public snapshot(): ITextSnapshot; - public start(): SnapshotPoint; - public startPosition(): number; - public end(): SnapshotPoint; - public endPosition(): number; - public endIncludingLineBreak(): SnapshotPoint; - public endIncludingLineBreakPosition(): number; - public length(): number; - public lineNumber(): number; - public getText(): string; - } -} -declare module TypeScript.Services.Formatting { - class SnapshotPoint { - public snapshot: ITextSnapshot; - public position: number; - constructor(snapshot: ITextSnapshot, position: number); - public getContainingLine(): ITextSnapshotLine; - public add(offset: number): SnapshotPoint; - } -} -declare module TypeScript.Services.Formatting { - class FormattingContext { - private snapshot; - public formattingRequestKind: FormattingRequestKind; - public currentTokenSpan: TokenSpan; - public nextTokenSpan: TokenSpan; - public contextNode: IndentationNodeContext; - public currentTokenParent: IndentationNodeContext; - public nextTokenParent: IndentationNodeContext; - private contextNodeAllOnSameLine; - private nextNodeAllOnSameLine; - private tokensAreOnSameLine; - private contextNodeBlockIsOnOneLine; - private nextNodeBlockIsOnOneLine; - constructor(snapshot: ITextSnapshot, formattingRequestKind: FormattingRequestKind); - public updateContext(currentTokenSpan: TokenSpan, currentTokenParent: IndentationNodeContext, nextTokenSpan: TokenSpan, nextTokenParent: IndentationNodeContext, commonParent: IndentationNodeContext): void; - public ContextNodeAllOnSameLine(): boolean; - public NextNodeAllOnSameLine(): boolean; - public TokensAreOnSameLine(): boolean; - public ContextNodeBlockIsOnOneLine(): boolean; - public NextNodeBlockIsOnOneLine(): boolean; - public NodeIsOnOneLine(node: IndentationNodeContext): boolean; - public BlockIsOnOneLine(node: IndentationNodeContext): boolean; - } -} -declare module TypeScript.Services.Formatting { - class FormattingManager { - private syntaxTree; - private snapshot; - private rulesProvider; - private options; - constructor(syntaxTree: SyntaxTree, snapshot: ITextSnapshot, rulesProvider: RulesProvider, editorOptions: EditorOptions); - public formatSelection(minChar: number, limChar: number): TextEdit[]; - public formatDocument(minChar: number, limChar: number): TextEdit[]; - public formatOnPaste(minChar: number, limChar: number): TextEdit[]; - public formatOnSemicolon(caretPosition: number): TextEdit[]; - public formatOnClosingCurlyBrace(caretPosition: number): TextEdit[]; - public formatOnEnter(caretPosition: number): TextEdit[]; - private formatSpan(span, formattingRequestKind); - } -} -declare module TypeScript.Services.Formatting { - enum FormattingRequestKind { - FormatDocument = 0, - FormatSelection = 1, - FormatOnEnter = 2, - FormatOnSemicolon = 3, - FormatOnClosingCurlyBrace = 4, - FormatOnPaste = 5, - } -} -declare module TypeScript.Services.Formatting { - class Rule { - public Descriptor: RuleDescriptor; - public Operation: RuleOperation; - public Flag: RuleFlags; - constructor(Descriptor: RuleDescriptor, Operation: RuleOperation, Flag?: RuleFlags); - public toString(): string; - } -} -declare module TypeScript.Services.Formatting { - enum RuleAction { - Ignore = 0, - Space = 1, - NewLine = 2, - Delete = 3, - } -} -declare module TypeScript.Services.Formatting { - class RuleDescriptor { - public LeftTokenRange: Shared.TokenRange; - public RightTokenRange: Shared.TokenRange; - constructor(LeftTokenRange: Shared.TokenRange, RightTokenRange: Shared.TokenRange); - public toString(): string; - static create1(left: SyntaxKind, right: SyntaxKind): RuleDescriptor; - static create2(left: Shared.TokenRange, right: SyntaxKind): RuleDescriptor; - static create3(left: SyntaxKind, right: Shared.TokenRange): RuleDescriptor; - static create4(left: Shared.TokenRange, right: Shared.TokenRange): RuleDescriptor; - } -} -declare module TypeScript.Services.Formatting { - enum RuleFlags { - None = 0, - CanDeleteNewLines = 1, + matchKind: string; + fileName: string; + minChar: number; + limChar: number; + additionalSpans?: SpanInfo[]; + containerName: string; + containerKind: string; + } + interface TextEdit { + minChar: number; + limChar: number; + text: string; + } + interface EditorOptions { + IndentSize: number; + TabSize: number; + NewLineCharacter: string; + ConvertTabsToSpaces: boolean; + } + interface FormatCodeOptions extends EditorOptions { + InsertSpaceAfterCommaDelimiter: boolean; + InsertSpaceAfterSemicolonInForStatements: boolean; + InsertSpaceBeforeAndAfterBinaryOperators: boolean; + InsertSpaceAfterKeywordsInControlFlowStatements: boolean; + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean; + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; + PlaceOpenBraceOnNewLineForFunctions: boolean; + PlaceOpenBraceOnNewLineForControlBlocks: boolean; + } + interface DefinitionInfo { + fileName: string; + minChar: number; + limChar: number; + kind: string; + name: string; + containerKind: string; + containerName: string; } -} -declare module TypeScript.Services.Formatting { - class RuleOperation { - public Context: RuleOperationContext; - public Action: RuleAction; - constructor(); - public toString(): string; - static create1(action: RuleAction): RuleOperation; - static create2(context: RuleOperationContext, action: RuleAction): RuleOperation; + interface MemberName { + prefix: string; + suffix: string; + text: string; } -} -declare module TypeScript.Services.Formatting { - class RuleOperationContext { - private customContextChecks; - constructor(...funcs: { - (context: FormattingContext): boolean; - }[]); - static Any: RuleOperationContext; - public IsAny(): boolean; - public InContext(context: FormattingContext): boolean; + interface TypeInfo { + memberName: MemberName; + docComment: string; + fullSymbolName: string; + kind: string; + minChar: number; + limChar: number; + } + interface SpanInfo { + minChar: number; + limChar: number; + } + interface SignatureInfo { + actual: ActualSignatureInfo; + formal: FormalSignatureItemInfo[]; + activeFormal: number; + } + interface FormalSignatureItemInfo { + signatureInfo: string; + typeParameters: FormalTypeParameterInfo[]; + parameters: FormalParameterInfo[]; + docComment: string; } -} -declare module TypeScript.Services.Formatting { - class Rules { - public getRuleName(rule: Rule): any; - [name: string]: any; - public IgnoreBeforeComment: Rule; - public IgnoreAfterLineComment: Rule; - public NoSpaceBeforeSemicolon: Rule; - public NoSpaceBeforeColon: Rule; - public NoSpaceBeforeQMark: Rule; - public SpaceAfterColon: Rule; - public SpaceAfterQMark: Rule; - public SpaceAfterSemicolon: Rule; - public SpaceAfterCloseBrace: Rule; - public SpaceBetweenCloseBraceAndElse: Rule; - public SpaceBetweenCloseBraceAndWhile: Rule; - public NoSpaceAfterCloseBrace: Rule; - public NoSpaceBeforeDot: Rule; - public NoSpaceAfterDot: Rule; - public NoSpaceBeforeOpenBracket: Rule; - public NoSpaceAfterOpenBracket: Rule; - public NoSpaceBeforeCloseBracket: Rule; - public NoSpaceAfterCloseBracket: Rule; - public SpaceAfterOpenBrace: Rule; - public SpaceBeforeCloseBrace: Rule; - public NoSpaceBetweenEmptyBraceBrackets: Rule; - public NewLineAfterOpenBraceInBlockContext: Rule; - public NewLineBeforeCloseBraceInBlockContext: Rule; - public NoSpaceAfterUnaryPrefixOperator: Rule; - public NoSpaceAfterUnaryPreincrementOperator: Rule; - public NoSpaceAfterUnaryPredecrementOperator: Rule; - public NoSpaceBeforeUnaryPostincrementOperator: Rule; - public NoSpaceBeforeUnaryPostdecrementOperator: Rule; - public SpaceAfterPostincrementWhenFollowedByAdd: Rule; - public SpaceAfterAddWhenFollowedByUnaryPlus: Rule; - public SpaceAfterAddWhenFollowedByPreincrement: Rule; - public SpaceAfterPostdecrementWhenFollowedBySubtract: Rule; - public SpaceAfterSubtractWhenFollowedByUnaryMinus: Rule; - public SpaceAfterSubtractWhenFollowedByPredecrement: Rule; - public NoSpaceBeforeComma: Rule; - public SpaceAfterCertainKeywords: Rule; - public NoSpaceBeforeOpenParenInFuncCall: Rule; - public SpaceAfterFunctionInFuncDecl: Rule; - public NoSpaceBeforeOpenParenInFuncDecl: Rule; - public SpaceAfterVoidOperator: Rule; - public NoSpaceBetweenReturnAndSemicolon: Rule; - public SpaceBetweenStatements: Rule; - public SpaceAfterTryFinally: Rule; - public SpaceAfterGetSetInMember: Rule; - public SpaceBeforeBinaryKeywordOperator: Rule; - public SpaceAfterBinaryKeywordOperator: Rule; - public NoSpaceAfterConstructor: Rule; - public NoSpaceAfterModuleImport: Rule; - public SpaceAfterCertainTypeScriptKeywords: Rule; - public SpaceBeforeCertainTypeScriptKeywords: Rule; - public SpaceAfterModuleName: Rule; - public SpaceAfterArrow: Rule; - public NoSpaceAfterEllipsis: Rule; - public NoSpaceAfterOptionalParameters: Rule; - public NoSpaceBeforeOpenAngularBracket: Rule; - public NoSpaceBetweenCloseParenAndAngularBracket: Rule; - public NoSpaceAfterOpenAngularBracket: Rule; - public NoSpaceBeforeCloseAngularBracket: Rule; - public NoSpaceAfterCloseAngularBracket: Rule; - public NoSpaceBetweenEmptyInterfaceBraceBrackets: Rule; - public HighPriorityCommonRules: Rule[]; - public LowPriorityCommonRules: Rule[]; - public SpaceAfterComma: Rule; - public NoSpaceAfterComma: Rule; - public SpaceBeforeBinaryOperator: Rule; - public SpaceAfterBinaryOperator: Rule; - public NoSpaceBeforeBinaryOperator: Rule; - public NoSpaceAfterBinaryOperator: Rule; - public SpaceAfterKeywordInControl: Rule; - public NoSpaceAfterKeywordInControl: Rule; - public FunctionOpenBraceLeftTokenRange: Shared.TokenRange; - public SpaceBeforeOpenBraceInFunction: Rule; - public NewLineBeforeOpenBraceInFunction: Rule; - public TypeScriptOpenBraceLeftTokenRange: Shared.TokenRange; - public SpaceBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; - public NewLineBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; - public ControlOpenBraceLeftTokenRange: Shared.TokenRange; - public SpaceBeforeOpenBraceInControl: Rule; - public NewLineBeforeOpenBraceInControl: Rule; - public SpaceAfterSemicolonInFor: Rule; - public NoSpaceAfterSemicolonInFor: Rule; - public SpaceAfterOpenParen: Rule; - public SpaceBeforeCloseParen: Rule; - public NoSpaceBetweenParens: Rule; - public NoSpaceAfterOpenParen: Rule; - public NoSpaceBeforeCloseParen: Rule; - public SpaceAfterAnonymousFunctionKeyword: Rule; - public NoSpaceAfterAnonymousFunctionKeyword: Rule; - constructor(); - static IsForContext(context: FormattingContext): boolean; - static IsNotForContext(context: FormattingContext): boolean; - static IsBinaryOpContext(context: FormattingContext): boolean; - static IsNotBinaryOpContext(context: FormattingContext): boolean; - static IsSameLineTokenOrBeforeMultilineBlockContext(context: FormattingContext): boolean; - static IsBeforeMultilineBlockContext(context: FormattingContext): boolean; - static IsMultilineBlockContext(context: FormattingContext): boolean; - static IsSingleLineBlockContext(context: FormattingContext): boolean; - static IsBlockContext(context: FormattingContext): boolean; - static IsBeforeBlockContext(context: FormattingContext): boolean; - static NodeIsBlockContext(node: IndentationNodeContext): boolean; - static IsFunctionDeclContext(context: FormattingContext): boolean; - static IsTypeScriptDeclWithBlockContext(context: FormattingContext): boolean; - static NodeIsTypeScriptDeclWithBlockContext(node: IndentationNodeContext): boolean; - static IsAfterCodeBlockContext(context: FormattingContext): boolean; - static IsControlDeclContext(context: FormattingContext): boolean; - static IsObjectContext(context: FormattingContext): boolean; - static IsFunctionCallContext(context: FormattingContext): boolean; - static IsNewContext(context: FormattingContext): boolean; - static IsFunctionCallOrNewContext(context: FormattingContext): boolean; - static IsSameLineTokenContext(context: FormattingContext): boolean; - static IsNotFormatOnEnter(context: FormattingContext): boolean; - static IsModuleDeclContext(context: FormattingContext): boolean; - static IsObjectTypeContext(context: FormattingContext): boolean; - static IsTypeArgumentOrParameter(tokenKind: SyntaxKind, parentKind: SyntaxKind): boolean; - static IsTypeArgumentOrParameterContext(context: FormattingContext): boolean; - static IsVoidOpContext(context: FormattingContext): boolean; + interface FormalTypeParameterInfo { + name: string; + docComment: string; + minChar: number; + limChar: number; } -} -declare module TypeScript.Services.Formatting { - class RulesMap { - public map: RulesBucket[]; - public mapRowLength: number; - constructor(); - static create(rules: Rule[]): RulesMap; - public Initialize(rules: Rule[]): RulesBucket[]; - public FillRules(rules: Rule[], rulesBucketConstructionStateList: RulesBucketConstructionState[]): void; - private GetRuleBucketIndex(row, column); - private FillRule(rule, rulesBucketConstructionStateList); - public GetRule(context: FormattingContext): Rule; + interface FormalParameterInfo { + name: string; + isVariable: boolean; + docComment: string; + minChar: number; + limChar: number; } - enum RulesPosition { - IgnoreRulesSpecific = 0, - IgnoreRulesAny, - ContextRulesSpecific, - ContextRulesAny, - NoContextRulesSpecific, - NoContextRulesAny, + interface ActualSignatureInfo { + parameterMinChar: number; + parameterLimChar: number; + currentParameterIsTypeParameter: boolean; + currentParameter: number; } - class RulesBucketConstructionState { - private rulesInsertionIndexBitmap; - constructor(); - public GetInsertionIndex(maskPosition: RulesPosition): number; - public IncreaseInsertionIndex(maskPosition: RulesPosition): void; + interface CompletionInfo { + isMemberCompletion: boolean; + entries: CompletionEntry[]; } - class RulesBucket { - private rules; - constructor(); - public Rules(): Rule[]; - public AddRule(rule: Rule, specificTokens: boolean, constructionState: RulesBucketConstructionState[], rulesBucketIndex: number): void; + interface CompletionEntry { + name: string; + kind: string; + kindModifiers: string; } -} -declare module TypeScript.Services.Formatting { - class RulesProvider { - private logger; - private globalRules; - private options; - private activeRules; - private rulesMap; - constructor(logger: ILogger); - public getRuleName(rule: Rule): string; - public getRuleByName(name: string): Rule; - public getRulesMap(): RulesMap; - public ensureUpToDate(options: FormatCodeOptions): void; - private createActiveRules(options); + interface CompletionEntryDetails { + name: string; + kind: string; + kindModifiers: string; + type: string; + fullSymbolName: string; + docComment: string; } -} -declare module TypeScript.Services.Formatting { - class TextEditInfo { - public position: number; - public length: number; - public replaceWith: string; - constructor(position: number, length: number, replaceWith: string); - public toString(): string; + enum EmitOutputResult { + Succeeded = 0, + FailedBecauseOfSyntaxErrors = 1, + FailedBecauseOfCompilerOptionsErrors = 2, + FailedToGenerateDeclarationsBecauseOfSemanticErrors = 3, } -} -declare module TypeScript.Services.Formatting { - module Shared { - interface ITokenAccess { - GetTokens(): SyntaxKind[]; - Contains(token: SyntaxKind): boolean; - } - class TokenRangeAccess implements ITokenAccess { - private tokens; - constructor(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[]); - public GetTokens(): SyntaxKind[]; - public Contains(token: SyntaxKind): boolean; - public toString(): string; - } - class TokenValuesAccess implements ITokenAccess { - private tokens; - constructor(tks: SyntaxKind[]); - public GetTokens(): SyntaxKind[]; - public Contains(token: SyntaxKind): boolean; - } - class TokenSingleValueAccess implements ITokenAccess { - public token: SyntaxKind; - constructor(token: SyntaxKind); - public GetTokens(): SyntaxKind[]; - public Contains(tokenValue: SyntaxKind): boolean; - public toString(): string; - } - class TokenAllAccess implements ITokenAccess { - public GetTokens(): SyntaxKind[]; - public Contains(tokenValue: SyntaxKind): boolean; - public toString(): string; - } - class TokenRange { - public tokenAccess: ITokenAccess; - constructor(tokenAccess: ITokenAccess); - static FromToken(token: SyntaxKind): TokenRange; - static FromTokens(tokens: SyntaxKind[]): TokenRange; - static FromRange(f: SyntaxKind, to: SyntaxKind, except?: SyntaxKind[]): TokenRange; - static AllTokens(): TokenRange; - public GetTokens(): SyntaxKind[]; - public Contains(token: SyntaxKind): boolean; - public toString(): string; - static Any: TokenRange; - static AnyIncludingMultilineComments: TokenRange; - static Keywords: TokenRange; - static Operators: TokenRange; - static BinaryOperators: TokenRange; - static BinaryKeywordOperators: TokenRange; - static ReservedKeywords: TokenRange; - static UnaryPrefixOperators: TokenRange; - static UnaryPrefixExpressions: TokenRange; - static UnaryPreincrementExpressions: TokenRange; - static UnaryPostincrementExpressions: TokenRange; - static UnaryPredecrementExpressions: TokenRange; - static UnaryPostdecrementExpressions: TokenRange; - static Comments: TokenRange; - static TypeNames: TokenRange; - } + interface EmitOutput { + outputFiles: OutputFile[]; + emitOutputResult: EmitOutputResult; } -} -declare module TypeScript.Services.Formatting { - class TokenSpan extends TextSpan { - private _kind; - constructor(kind: SyntaxKind, start: number, length: number); - public kind(): SyntaxKind; + enum OutputFileType { + JavaScript = 0, + SourceMap = 1, + Declaration = 2, } -} -declare module TypeScript.Services.Formatting { - class IndentationNodeContext { - private _node; - private _parent; - private _fullStart; - private _indentationAmount; - private _childIndentationAmountDelta; - private _depth; - private _hasSkippedOrMissingTokenChild; - constructor(parent: IndentationNodeContext, node: SyntaxNode, fullStart: number, indentationAmount: number, childIndentationAmountDelta: number); - public parent(): IndentationNodeContext; - public node(): SyntaxNode; - public fullStart(): number; - public fullWidth(): number; - public start(): number; - public end(): number; - public indentationAmount(): number; - public childIndentationAmountDelta(): number; - public depth(): number; - public kind(): SyntaxKind; - public hasSkippedOrMissingTokenChild(): boolean; - public clone(pool: IndentationNodeContextPool): IndentationNodeContext; - public update(parent: IndentationNodeContext, node: SyntaxNode, fullStart: number, indentationAmount: number, childIndentationAmountDelta: number): void; + interface OutputFile { + name: string; + writeByteOrderMark: boolean; + text: string; + fileType: OutputFileType; + sourceMapOutput: any; } -} -declare module TypeScript.Services.Formatting { - class IndentationNodeContextPool { - private nodes; - public getNode(parent: IndentationNodeContext, node: SyntaxNode, fullStart: number, indentationLevel: number, childIndentationLevelDelta: number): IndentationNodeContext; - public releaseNode(node: IndentationNodeContext, recursive?: boolean): void; + enum EndOfLineState { + Start = 0, + InMultiLineCommentTrivia = 1, + InSingleQuoteStringLiteral = 2, + InDoubleQuoteStringLiteral = 3, + EndingWithDotToken = 4, } -} -declare module TypeScript.Services.Formatting { - class IndentationTrackingWalker extends SyntaxWalker { - public options: FormattingOptions; - private _position; - private _parent; - private _textSpan; - private _snapshot; - private _lastTriviaWasNewLine; - private _indentationNodeContextPool; - constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); - public position(): number; - public parent(): IndentationNodeContext; - public textSpan(): TextSpan; - public snapshot(): ITextSnapshot; - public indentationNodeContextPool(): IndentationNodeContextPool; - public forceIndentNextToken(tokenStart: number): void; - public forceSkipIndentingNextToken(tokenStart: number): void; - public indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; - public visitTokenInSpan(token: ISyntaxToken): void; - public visitToken(token: ISyntaxToken): void; - public visitNode(node: SyntaxNode): void; - private getTokenIndentationAmount(token); - private getCommentIndentationAmount(token); - private getNodeIndentation(node, newLineInsertedByFormatting?); - private shouldIndentBlockInParent(parent); - private forceRecomputeIndentationOfParent(tokenStart, newLineAdded); + enum TokenClass { + Punctuation = 0, + Keyword = 1, + Operator = 2, + Comment = 3, + Whitespace = 4, + Identifier = 5, + NumberLiteral = 6, + StringLiteral = 7, + RegExpLiteral = 8, } -} -declare module TypeScript.Services.Formatting { - class MultipleTokenIndenter extends IndentationTrackingWalker { - private _edits; - constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); - public indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; - public edits(): TextEditInfo[]; - public recordEdit(position: number, length: number, replaceWith: string): void; - private recordIndentationEditsForToken(token, indentationString, commentIndentationString); - private recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); - private recordIndentationEditsForWhitespace(trivia, fullStart, indentationString); - private recordIndentationEditsForMultiLineComment(trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented); - private recordIndentationEditsForSegment(segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment); + interface ClassificationResult { + finalLexState: EndOfLineState; + entries: ClassificationInfo[]; } -} -declare module TypeScript.Services.Formatting { - class SingleTokenIndenter extends IndentationTrackingWalker { - private indentationAmount; - private indentationPosition; - constructor(indentationPosition: number, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, options: FormattingOptions); - static getIndentationAmount(position: number, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, options: FormattingOptions): number; - public indentToken(token: ISyntaxToken, indentationAmount: number, commentIndentationAmount: number): void; + interface ClassificationInfo { + length: number; + classification: TokenClass; } -} -declare module TypeScript.Services.Formatting { - class Formatter extends MultipleTokenIndenter { - private previousTokenSpan; - private previousTokenParent; - private scriptHasErrors; - private rulesProvider; - private formattingRequestKind; - private formattingContext; - constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, indentFirstToken: boolean, options: FormattingOptions, snapshot: ITextSnapshot, rulesProvider: RulesProvider, formattingRequestKind: FormattingRequestKind); - static getEdits(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, options: FormattingOptions, indentFirstToken: boolean, snapshot: ITextSnapshot, rulesProvider: RulesProvider, formattingRequestKind: FormattingRequestKind): TextEditInfo[]; - public visitTokenInSpan(token: ISyntaxToken): void; - private processToken(token); - private processTrivia(triviaList, fullStart); - private findCommonParents(parent1, parent2); - private formatPair(t1, t1Parent, t2, t2Parent); - private getLineNumber(span); - private trimWhitespaceInLineRange(startLine, endLine, token?); - private trimWhitespace(line, token?); - private RecordRuleEdits(rule, t1, t2); + interface Classifier { + getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult; } -} -declare var debugObjectHost: any; -declare module TypeScript.Services { - interface ICoreServicesHost { - logger: ILogger; - } - class CoreServices { - public host: ICoreServicesHost; - constructor(host: ICoreServicesHost); - public getPreProcessedFileInfo(fileName: string, sourceText: IScriptSnapshot): IPreProcessedFileInfo; - public getDefaultCompilationSettings(): CompilationSettings; - public dumpMemory(): string; - public getMemoryInfo(): any[]; - public collectGarbage(): void; + interface DocumentRegistry { + acquireDocument(filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, version: number, isOpen: boolean): SourceFile; + updateDocument(sourceFile: SourceFile, filename: string, compilationSettings: CompilerOptions, scriptSnapshot: TypeScript.IScriptSnapshot, version: number, isOpen: boolean, textChangeRange: TypeScript.TextChangeRange): SourceFile; + releaseDocument(filename: string, compilationSettings: CompilerOptions): void; } -} -declare module TypeScript.Services { - class SyntaxTreeCache { - private _host; - private _hostCache; - private _currentFileName; - private _currentFileVersion; - private _currentFileSyntaxTree; - private _currentFileScriptSnapshot; - constructor(_host: ILanguageServiceHost); - public getCurrentFileSyntaxTree(fileName: string): SyntaxTree; - private createSyntaxTree(fileName, scriptSnapshot); - private updateSyntaxTree(fileName, scriptSnapshot, previousSyntaxTree, previousFileVersion); - private ensureInvariants(fileName, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot); - } - class LanguageServiceCompiler { - private host; - private logger; - private compiler; - private hostCache; - constructor(host: ILanguageServiceHost); - private synchronizeHostData(); - private synchronizeHostDataWorker(); - private tryUpdateFile(compiler, fileName); - public getScriptSnapshot(fileName: string): IScriptSnapshot; - public getCachedHostFileName(fileName: string): string; - public getCachedTopLevelDeclaration(fileName: string): PullDecl; - public compilationSettings(): ImmutableCompilationSettings; - public fileNames(): string[]; - public cleanupSemanticCache(): void; - public getDocument(fileName: string): Document; - public getSyntacticDiagnostics(fileName: string): Diagnostic[]; - public getSemanticDiagnostics(fileName: string): Diagnostic[]; - public getCompilerOptionsDiagnostics(resolvePath: (path: string) => string): Diagnostic[]; - public getSymbolInformationFromAST(ast: AST, document: Document): PullSymbolInfo; - public getCallInformationFromAST(ast: AST, document: Document): PullCallSymbolInfo; - public getVisibleMemberSymbolsFromAST(ast: AST, document: Document): PullVisibleSymbolsInfo; - public getVisibleDeclsFromAST(ast: AST, document: Document): PullDecl[]; - public getContextualMembersFromAST(ast: AST, document: Document): PullVisibleSymbolsInfo; - public pullGetDeclInformation(decl: PullDecl, ast: AST, document: Document): PullSymbolInfo; - public topLevelDeclaration(fileName: string): PullDecl; - public getDeclForAST(ast: AST): PullDecl; - public emit(fileName: string, resolvePath: (path: string) => string): EmitOutput; - public emitDeclarations(fileName: string, resolvePath: (path: string) => string): EmitOutput; - public canEmitDeclarations(fileName: string): boolean; + class ScriptElementKind { + static unknown: string; + static keyword: string; + static scriptElement: string; + static moduleElement: string; + static classElement: string; + static interfaceElement: string; + static enumElement: string; + static variableElement: string; + static localVariableElement: string; + static functionElement: string; + static localFunctionElement: string; + static memberFunctionElement: string; + static memberGetAccessorElement: string; + static memberSetAccessorElement: string; + static memberVariableElement: string; + static constructorImplementationElement: string; + static callSignatureElement: string; + static indexSignatureElement: string; + static constructSignatureElement: string; + static parameterElement: string; + static typeParameterElement: string; + static primitiveType: string; + static label: string; } -} -declare module TypeScript.Services { - class CompletionHelpers { - private static getSpan(ast); - private static symbolDeclarationIntersectsPosition(symbol, fileName, position); - static filterContextualMembersList(contextualMemberSymbols: PullSymbol[], existingMembers: PullVisibleSymbolsInfo, fileName: string, position: number): PullSymbol[]; - static isCompletionListBlocker(sourceUnit: SourceUnitSyntax, position: number): boolean; - static getContainingObjectLiteralApplicableForCompletion(sourceUnit: SourceUnitSyntax, position: number): PositionedElement; - static isIdentifierDefinitionLocation(sourceUnit: SourceUnitSyntax, position: number): boolean; - static getNonIdentifierCompleteTokenOnLeft(sourceUnit: SourceUnitSyntax, position: number): PositionedToken; - static isRightOfIllegalDot(sourceUnit: SourceUnitSyntax, position: number): boolean; - static getValidCompletionEntryDisplayName(displayName: string): string; + class ScriptElementKindModifier { + static none: string; + static publicMemberModifier: string; + static privateMemberModifier: string; + static exportedModifier: string; + static ambientModifier: string; + static staticModifier: string; } -} -declare module TypeScript.Services { - class KeywordCompletions { - private static keywords; - private static keywordCompletions; - static getKeywordCompltions(): ResolvedCompletionEntry[]; + class MatchKind { + static none: string; + static exact: string; + static subString: string; + static prefix: string; } -} -declare module TypeScript.Services { - interface IPartiallyWrittenTypeArgumentListInformation { - genericIdentifer: PositionedToken; - lessThanToken: PositionedToken; - argumentIndex: number; - } - class SignatureInfoHelpers { - static isInPartiallyWrittenTypeArgumentList(syntaxTree: SyntaxTree, position: number): IPartiallyWrittenTypeArgumentListInformation; - static getSignatureInfoFromSignatureSymbol(symbol: PullSymbol, signatures: PullSignatureSymbol[], enclosingScopeSymbol: PullSymbol, compilerState: LanguageServiceCompiler): FormalSignatureItemInfo[]; - static getSignatureInfoFromGenericSymbol(symbol: PullSymbol, enclosingScopeSymbol: PullSymbol, compilerState: LanguageServiceCompiler): FormalSignatureItemInfo[]; - static getActualSignatureInfoFromCallExpression(ast: ICallExpression, caretPosition: number, typeParameterInformation: IPartiallyWrittenTypeArgumentListInformation): ActualSignatureInfo; - static getActualSignatureInfoFromPartiallyWritenGenericExpression(caretPosition: number, typeParameterInformation: IPartiallyWrittenTypeArgumentListInformation): ActualSignatureInfo; - static isSignatureHelpBlocker(sourceUnit: SourceUnitSyntax, position: number): boolean; - static isTargetOfObjectCreationExpression(positionedToken: PositionedToken): boolean; - private static moveBackUpTillMatchingTokenKind(token, tokenKind, matchingTokenKind); + function getDefaultCompilerOptions(): CompilerOptions; + function compareDataObjects(dst: any, src: any): boolean; + class OperationCanceledException { } + function createDocumentRegistry(): DocumentRegistry; + function createLanguageService(host: LanguageServiceHost, documentRegistry: DocumentRegistry): LanguageService; + function createClassifier(host: Logger): Classifier; } -declare module TypeScript.Services { - interface CachedCompletionEntryDetails extends CompletionEntryDetails { - isResolved(): boolean; - } - class ResolvedCompletionEntry implements CachedCompletionEntryDetails { - public name: string; - public kind: string; - public kindModifiers: string; - public type: string; - public fullSymbolName: string; - public docComment: string; - constructor(name: string, kind: string, kindModifiers: string, type: string, fullSymbolName: string, docComment: string); - public isResolved(): boolean; - } - class DeclReferenceCompletionEntry implements CachedCompletionEntryDetails { - public name: string; - public kind: string; - public kindModifiers: string; - public decl: PullDecl; - public type: string; - public fullSymbolName: string; - public docComment: string; - private hasBeenResolved; - constructor(name: string, kind: string, kindModifiers: string, decl: PullDecl); - public isResolved(): boolean; - public resolve(type: string, fullSymbolName: string, docComments: string): void; - } - class CompletionSession { - public fileName: string; - public position: number; - public entries: IdentiferNameHashTable; - constructor(fileName: string, position: number, entries: IdentiferNameHashTable); +declare module TypeScript { + interface ILineAndCharacter { + line: number; + character: number; } -} -declare module TypeScript.Services { - class LanguageService implements ILanguageService { - public host: ILanguageServiceHost; - private logger; - private compiler; - private _syntaxTreeCache; - private formattingRulesProvider; - private activeCompletionSession; - constructor(host: ILanguageServiceHost); - public cleanupSemanticCache(): void; - public refresh(): void; - private getSymbolInfoAtPosition(fileName, pos, requireName); - public getReferencesAtPosition(fileName: string, pos: number): ReferenceEntry[]; - private getSymbolScopeAST(symbol, ast); - public getOccurrencesAtPosition(fileName: string, pos: number): ReferenceEntry[]; - private getSingleNodeReferenceAtPosition(fileName, position); - public getImplementorsAtPosition(fileName: string, pos: number): ReferenceEntry[]; - public getOverrides(container: PullTypeSymbol, memberSym: PullSymbol): PullTypeSymbol[]; - private getImplementorsInFile(fileName, symbol); - private getReferencesInFile(fileName, symbol, containingASTOpt); - private isWriteAccess(current); - private isLetterOrDigit(char); - private getPossibleSymbolReferencePositions(fileName, symbolName); - public getSignatureAtPosition(fileName: string, position: number): SignatureInfo; - private getTypeParameterSignatureFromPartiallyWrittenExpression(document, position, genericTypeArgumentListInfo); - public getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[]; - private addDeclarations(symbolKind, symbolName, containerKind, containerName, declarations, result); - private addDeclaration(symbolKind, symbolName, containerKind, containerName, declaration, result); - private tryAddDefinition(symbolKind, symbolName, containerKind, containerName, declarations, result); - private tryAddSignatures(symbolKind, symbolName, containerKind, containerName, declarations, result); - private tryAddConstructor(symbolKind, symbolName, containerKind, containerName, declarations, result); - public getNavigateToItems(searchValue: string): NavigateToItem[]; - private hasAnyUpperCaseCharacter(s); - private findSearchValueInPullDecl(fileName, declarations, results, searchTerms, parentName?, parentkindName?); - private getScriptElementKindModifiersFromDecl(decl); - private isContainerDeclaration(declaration); - private shouldIncludeDeclarationInNavigationItems(declaration); - public getSyntacticDiagnostics(fileName: string): Diagnostic[]; - public getSemanticDiagnostics(fileName: string): Diagnostic[]; - private _getHostSpecificDiagnosticWithFileName(diagnostic); - public getCompilerOptionsDiagnostics(): Diagnostic[]; - private _getHostFileName(fileName); - public getEmitOutput(fileName: string): EmitOutput; - private getAllSyntacticDiagnostics(); - private getAllSemanticDiagnostics(); - private containErrors(diagnostics); - private getFullNameOfSymbol(symbol, enclosingScopeSymbol); - private getTypeInfoEligiblePath(fileName, position, isConstructorValidPosition); - public getTypeAtPosition(fileName: string, position: number): TypeInfo; - public getCompletionsAtPosition(fileName: string, position: number, isMemberCompletion: boolean): CompletionInfo; - private getCompletionEntriesFromSymbols(symbolInfo, result); - private getCompletionEntriesFromDecls(decls, result); - private getResolvedCompletionEntryDetailsFromSymbol(symbol, enclosingScopeSymbol); - private getCompletionEntriesForKeywords(keywords, result); - public getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails; - private tryFindDeclFromPreviousCompilerVersion(invalidatedDecl); - private getModuleOrEnumKind(symbol); - private mapPullElementKind(kind, symbol?, useConstructorAsClass?, varIsFunction?, functionIsConstructor?); - private getScriptElementKindModifiers(symbol); - private getScriptElementKindModifiersFromFlags(flags); - public getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): SpanInfo; - public getBreakpointStatementAtPosition(fileName: string, pos: number): SpanInfo; - public getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - public getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - public getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[]; - public getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextEdit[]; - private getFormattingManager(fileName, options); - public getOutliningRegions(fileName: string): TextSpan[]; - public getIndentationAtPosition(fileName: string, position: number, editorOptions: EditorOptions): number; - public getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[]; - public getScriptLexicalStructure(fileName: string): NavigateToItem[]; - public getSyntaxTree(fileName: string): SyntaxTree; + interface IFileReference extends ILineAndCharacter { + path: string; + isResident: boolean; + position: number; + length: number; } -} -declare module TypeScript.Services { - class FindReferenceHelpers { - static compareSymbolsForLexicalIdentity(firstSymbol: PullSymbol, secondSymbol: PullSymbol): boolean; - private static checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - private static declarationsAreSameOrParents(firstDecl, secondDecl); + interface IPreProcessedFileInfo { + referencedFiles: IFileReference[]; + importedFiles: IFileReference[]; + diagnostics: Diagnostic[]; + isLibFile: boolean; } + var tripleSlashReferenceRegExp: RegExp; + function preProcessFile(fileName: string, sourceText: IScriptSnapshot, readImportFiles?: boolean): IPreProcessedFileInfo; + function getReferencedFiles(fileName: string, sourceText: IScriptSnapshot): IFileReference[]; } -declare module TypeScript.Services { - interface IScriptSnapshotShim { +declare var debugObjectHost: any; +declare module ts { + interface ScriptSnapshotShim { getText(start: number, end: number): string; getLength(): number; getLineStartPositions(): string; getTextChangeRangeSinceVersion(scriptVersion: number): string; } - interface ILanguageServiceShimHost extends ILogger { + interface LanguageServiceShimHost extends Logger { getCompilationSettings(): string; getScriptFileNames(): string; getScriptVersion(fileName: string): number; getScriptIsOpen(fileName: string): boolean; - getScriptByteOrderMark(fileName: string): number; - getScriptSnapshot(fileName: string): IScriptSnapshotShim; - resolveRelativePath(path: string, directory: string): string; - fileExists(path: string): boolean; - directoryExists(path: string): boolean; - getParentDirectory(path: string): string; - getDiagnosticsObject(): ILanguageServicesDiagnostics; + getScriptSnapshot(fileName: string): ScriptSnapshotShim; getLocalizedDiagnosticMessages(): string; + getCancellationToken(): CancellationToken; } - interface IShimFactory { - registerShim(shim: IShim): void; - unregisterShim(shim: IShim): void; + interface ShimFactory { + registerShim(shim: Shim): void; + unregisterShim(shim: Shim): void; } - interface IShim { + interface Shim { dispose(dummy: any): void; } - class ShimBase implements IShim { - private factory; - constructor(factory: IShimFactory); - public dispose(dummy: any): void; - } - interface ILanguageServiceShim extends IShim { - languageService: ILanguageService; + interface LanguageServiceShim extends Shim { + languageService: LanguageService; dispose(dummy: any): void; refresh(throwOnError: boolean): void; cleanupSemanticCache(): void; @@ -9142,191 +7117,24 @@ declare module TypeScript.Services { getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: string): string; getEmitOutput(fileName: string): string; } - class LanguageServiceShimHostAdapter implements ILanguageServiceHost { - private shimHost; - constructor(shimHost: ILanguageServiceShimHost); - public information(): boolean; - public debug(): boolean; - public warning(): boolean; - public error(): boolean; - public fatal(): boolean; - public log(s: string): void; - public getCompilationSettings(): CompilationSettings; - public getScriptFileNames(): string[]; - public getScriptSnapshot(fileName: string): IScriptSnapshot; - public getScriptVersion(fileName: string): number; - public getScriptIsOpen(fileName: string): boolean; - public getScriptByteOrderMark(fileName: string): ByteOrderMark; - public getDiagnosticsObject(): ILanguageServicesDiagnostics; - public getLocalizedDiagnosticMessages(): any; - public resolveRelativePath(path: string, directory: string): string; - public fileExists(path: string): boolean; - public directoryExists(path: string): boolean; - public getParentDirectory(path: string): string; - } - function simpleForwardCall(logger: ILogger, actionDescription: string, action: () => any): any; - function forwardJSONCall(logger: ILogger, actionDescription: string, action: () => any): string; - class LanguageServiceShim extends ShimBase implements ILanguageServiceShim { - private host; - public languageService: ILanguageService; - private logger; - constructor(factory: IShimFactory, host: ILanguageServiceShimHost, languageService: ILanguageService); - public forwardJSONCall(actionDescription: string, action: () => any): string; - public dispose(dummy: any): void; - public refresh(throwOnError: boolean): void; - public cleanupSemanticCache(): void; - private static realizeDiagnosticCategory(category); - private static realizeDiagnostic(diagnostic); - private realizeDiagnosticWithFileName(diagnostic); - public getSyntacticDiagnostics(fileName: string): string; - public getSemanticDiagnostics(fileName: string): string; - public getCompilerOptionsDiagnostics(): string; - public getTypeAtPosition(fileName: string, position: number): string; - public getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): string; - public getBreakpointStatementAtPosition(fileName: string, position: number): string; - public getSignatureAtPosition(fileName: string, position: number): string; - public getDefinitionAtPosition(fileName: string, position: number): string; - public getBraceMatchingAtPosition(fileName: string, position: number): string; - public getIndentationAtPosition(fileName: string, position: number, options: string): string; - public getReferencesAtPosition(fileName: string, position: number): string; - public getOccurrencesAtPosition(fileName: string, position: number): string; - public getImplementorsAtPosition(fileName: string, position: number): string; - public getCompletionsAtPosition(fileName: string, position: number, isMemberCompletion: boolean): string; - public getCompletionEntryDetails(fileName: string, position: number, entryName: string): string; - public getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: string): string; - public getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: string): string; - public getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: string): string; - public getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: string): string; - public getNavigateToItems(searchValue: string): string; - public getScriptLexicalStructure(fileName: string): string; - public getOutliningRegions(fileName: string): string; - public getEmitOutput(fileName: string): string; - private _navigateToItemsToString(items); - } - class ClassifierShim extends ShimBase { - public host: IClassifierHost; - public classifier: Classifier; - constructor(factory: IShimFactory, host: IClassifierHost); - public getClassificationsForLine(text: string, lexState: EndOfLineState): string; - } - class CoreServicesShim extends ShimBase { - public host: ICoreServicesHost; - public logger: ILogger; - public services: CoreServices; - constructor(factory: IShimFactory, host: ICoreServicesHost); - private forwardJSONCall(actionDescription, action); - public getPreProcessedFileInfo(fileName: string, sourceText: IScriptSnapshot): string; - public getDefaultCompilationSettings(): string; - public dumpMemory(dummy: any): string; - public getMemoryInfo(dummy: any): string; - } -} -declare module TypeScript.Services { - class OutliningElementsCollector extends DepthLimitedWalker { - private static MaximumDepth; - private inObjectLiteralExpression; - private elements; - constructor(); - public visitClassDeclaration(node: ClassDeclarationSyntax): void; - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): void; - public visitModuleDeclaration(node: ModuleDeclarationSyntax): void; - public visitEnumDeclaration(node: EnumDeclarationSyntax): void; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void; - public visitFunctionExpression(node: FunctionExpressionSyntax): void; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void; - public visitGetAccessor(node: GetAccessorSyntax): void; - public visitSetAccessor(node: SetAccessorSyntax): void; - public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): void; - private addOutlineRange(node, startElement, endElement); - static collectElements(node: SourceUnitSyntax): TextSpan[]; - } -} -declare module TypeScript.Services { - class Indenter { - static getIndentation(node: SourceUnitSyntax, soruceText: IScriptSnapshot, position: number, editorOptions: EditorOptions): number; - private static belongsToBracket(sourceText, token, position); - private static isInContainerNode(parent, element); - private static getCustomListIndentation(list, element); - private static getListItemIndentation(list, elementIndex); + interface ClassifierShim extends Shim { + getClassificationsForLine(text: string, lexState: EndOfLineState): string; } -} -declare module TypeScript.Services.Breakpoints { - function getBreakpointLocation(syntaxTree: SyntaxTree, askedPos: number): SpanInfo; -} -declare module TypeScript.Services { - class GetScriptLexicalStructureWalker extends PositionTrackingWalker { - private fileName; - private nameStack; - private kindStack; - private currentMemberVariableDeclaration; - private currentVariableStatement; - private currentInterfaceDeclaration; - private parentScopes; - private currentScope; - private createScope(); - private pushNewContainerScope(containerName, kind); - private popScope(); - constructor(fileName: string); - private collectItems(items, scope?); - static getListsOfAllScriptLexicalStructure(items: NavigateToItem[], fileName: string, unit: SourceUnitSyntax): void; - private createItem(node, modifiers, kind, name); - private addAdditionalSpan(node, key); - private getKindModifiers(modifiers); - public visitModuleDeclaration(node: ModuleDeclarationSyntax): void; - private visitModuleDeclarationWorker(node, names, nameIndex); - private getModuleNames(node); - private getModuleNamesHelper(name, result); - public visitClassDeclaration(node: ClassDeclarationSyntax): void; - public visitInterfaceDeclaration(node: InterfaceDeclarationSyntax): void; - public visitObjectType(node: ObjectTypeSyntax): void; - public visitEnumDeclaration(node: EnumDeclarationSyntax): void; - public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void; - public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void; - public visitGetAccessor(node: GetAccessorSyntax): void; - public visitSetAccessor(node: SetAccessorSyntax): void; - public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void; - public visitVariableStatement(node: VariableStatementSyntax): void; - public visitVariableDeclarator(node: VariableDeclaratorSyntax): void; - public visitIndexSignature(node: IndexSignatureSyntax): void; - public visitEnumElement(node: EnumElementSyntax): void; - public visitCallSignature(node: CallSignatureSyntax): void; - public visitConstructSignature(node: ConstructSignatureSyntax): void; - public visitMethodSignature(node: MethodSignatureSyntax): void; - public visitPropertySignature(node: PropertySignatureSyntax): void; - public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void; - public visitBlock(node: BlockSyntax): void; - public visitIfStatement(node: IfStatementSyntax): void; - public visitExpressionStatement(node: ExpressionStatementSyntax): void; - public visitThrowStatement(node: ThrowStatementSyntax): void; - public visitReturnStatement(node: ReturnStatementSyntax): void; - public visitSwitchStatement(node: SwitchStatementSyntax): void; - public visitWithStatement(node: WithStatementSyntax): void; - public visitTryStatement(node: TryStatementSyntax): void; - public visitLabeledStatement(node: LabeledStatementSyntax): void; + interface CoreServicesShim extends Shim { + getPreProcessedFileInfo(fileName: string, sourceText: TypeScript.IScriptSnapshot): string; + getDefaultCompilationSettings(): string; } -} -declare module TypeScript.Services { - function copyDataObject(dst: any, src: any): any; - class TypeScriptServicesFactory implements IShimFactory { + class TypeScriptServicesFactory implements ShimFactory { private _shims; - public createPullLanguageService(host: ILanguageServiceHost): ILanguageService; - public createLanguageServiceShim(host: ILanguageServiceShimHost): ILanguageServiceShim; - public createClassifier(host: IClassifierHost): Classifier; - public createClassifierShim(host: IClassifierHost): ClassifierShim; - public createCoreServices(host: ICoreServicesHost): CoreServices; - public createCoreServicesShim(host: ICoreServicesHost): CoreServicesShim; - public close(): void; - public registerShim(shim: IShim): void; - public unregisterShim(shim: IShim): void; + private documentRegistry; + createLanguageServiceShim(host: LanguageServiceShimHost): LanguageServiceShim; + createClassifierShim(host: Logger): ClassifierShim; + createCoreServicesShim(host: Logger): CoreServicesShim; + close(): void; + registerShim(shim: Shim): void; + unregisterShim(shim: Shim): void; } } declare module TypeScript.Services { - class BraceMatcher { - static getMatchSpans(syntaxTree: SyntaxTree, position: number): TextSpan[]; - private static getMatchingCloseBrace(currentToken, position, result); - private static getMatchingOpenBrace(currentToken, position, result); - private static getMatchingCloseBraceTokenKind(positionedElement); - private static getMatchingOpenBraceTokenKind(positionedElement); - } + var TypeScriptServicesFactory: typeof ts.TypeScriptServicesFactory; } diff --git a/src/main/formattingManager.ts b/src/main/formattingManager.ts index 4476146..8efa8a7 100644 --- a/src/main/formattingManager.ts +++ b/src/main/formattingManager.ts @@ -30,7 +30,7 @@ class FormattingManager extends ServiceConsumer { } var useTabs = Editor.getUseTabChar(); - var options: TypeScript.Services.FormatCodeOptions = { + var options: ts.FormatCodeOptions = { IndentSize: Editor.getSpaceUnits(), TabSize: Editor.getTabSize(), NewLineCharacter: '\n', @@ -59,7 +59,7 @@ class FormattingManager extends ServiceConsumer { return; } editor.document.setText( - textEdits.reduce((text: string, edit: TypeScript.Services.TextEdit) => { + textEdits.reduce((text: string, edit: ts.TextEdit) => { return text.substr(0, edit.minChar) + edit.text + text.substr(edit.limChar); }, editor.document.getText()) ); diff --git a/src/main/mode.ts b/src/main/mode.ts index 90642a3..e3d0d49 100644 --- a/src/main/mode.ts +++ b/src/main/mode.ts @@ -14,16 +14,6 @@ 'use strict'; -// TODO If we could not depends of TypeScript here, or at least extract just the part we are interested in -// We could avoid bundling the entire TypeScript Service with use -// see : https://github.com/fdecampredon/brackets-typescript/issues/13 - - -declare var require: any; -var TypeScript: typeof TypeScript = require('typescriptServices'); - - - class FormattingOptions { constructor(public useTabs: boolean, public spacesPerTab: number, @@ -40,78 +30,81 @@ class FormattingOptions { } import logger = require('../commons/logger'); -import Services = TypeScript.Services; import Formatting = TypeScript.Services.Formatting; +// exposing SourceFileObject.createSourceFileObject +var createSourceFileObject: (filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, languageVersion: ts.ScriptTarget) => ts.SourceFile = + (ts.getNodeConstructor(ts.SyntaxKind.SourceFile).prototype.constructor).createSourceFileObject; + class Token { - string: string; - classification: Services.TokenClass; - length: number; - position: number; + string: string; + classification: ts.TokenClass; + length: number; + position: number; } class LineDescriptor { - tokenMap: { [position: number]: Token }; - eolState: Services.EndOfLineState = Services.EndOfLineState.Start; + tokenMap: { [position: number]: Token }; + eolState: ts.EndOfLineState = ts.EndOfLineState.Start; text: string = ''; - clone(): LineDescriptor { - var clone: LineDescriptor = new LineDescriptor(); - clone.tokenMap = this.tokenMap; - clone.eolState = this.eolState; - clone.text = this.text; - return clone; - } + clone(): LineDescriptor { + var clone: LineDescriptor = new LineDescriptor(); + clone.tokenMap = this.tokenMap; + clone.eolState = this.eolState; + clone.text = this.text; + return clone; + } } class TypeScriptMode implements CodeMirror.CodeMirrorMode { - private options: CodeMirror.EditorConfiguration; + private options: CodeMirror.EditorConfiguration; - lineComment = '//'; - blockCommentStart = '/*'; - blockCommentEnd = '*/'; - electricChars = ':{}[]()'; + lineComment = '//'; + blockCommentStart = '/*'; + blockCommentEnd = '*/'; + electricChars = ':{}[]()'; - constructor(options: CodeMirror.EditorConfiguration) { - this.options = options; - } + constructor(options: CodeMirror.EditorConfiguration) { + this.options = options; + } - startState() { - return new LineDescriptor(); - } + startState() { + return new LineDescriptor(); + } - copyState(lineDescriptor: LineDescriptor) { - return lineDescriptor.clone(); - } + copyState(lineDescriptor: LineDescriptor) { + return lineDescriptor.clone(); + } - token(stream: CodeMirror.CodeMirrorStream, lineDescriptor: LineDescriptor) { - if (stream.sol()) { - this.initializeLineDescriptor(lineDescriptor, stream.string); - } - - var token = lineDescriptor.tokenMap[stream.pos]; - if (token) { - var textBefore: string = stream.string.substr(0, stream.pos); - for (var i = 0; i < token.length; i++) { - stream.next(); - } - return getStyleForToken(token, textBefore); - } else { - stream.skipToEnd(); - } - - return null; - } - - - indent(lineDescriptor: LineDescriptor , textAfter: string): number { - if (lineDescriptor.eolState !== Services.EndOfLineState.Start) { + token(stream: CodeMirror.CodeMirrorStream, lineDescriptor: LineDescriptor) { + if (stream.sol()) { + this.initializeLineDescriptor(lineDescriptor, stream.string); + } + + var token = lineDescriptor.tokenMap[stream.pos]; + if (token) { + var textBefore: string = stream.string.substr(0, stream.pos); + for (var i = 0; i < token.length; i++) { + stream.next(); + } + return getStyleForToken(token, textBefore); + } else { + stream.skipToEnd(); + } + + return null; + } + + + indent(lineDescriptor: LineDescriptor , textAfter: string): number { + if (lineDescriptor.eolState !== ts.EndOfLineState.Start) { //strange bug preven CodeMirror.Pass return (CodeMirror).Pass; - } + } var text = lineDescriptor.text + '\n' + (textAfter || 'fakeIdent'), position = textAfter ? text.length : text.length - 9, syntaxTree = this.getSyntaxTree(text), @@ -129,118 +122,121 @@ class TypeScriptMode implements CodeMirror.CodeMirrorMode { return (CodeMirror).Pass; } return indent; - } + } - private initializeLineDescriptor(lineDescriptor: LineDescriptor, text: string) { - var classificationResult = getClassificationsForLine(text, lineDescriptor.eolState), - tokens = classificationResult.tokens; + private initializeLineDescriptor(lineDescriptor: LineDescriptor, text: string) { + var classificationResult = getClassificationsForLine(text, lineDescriptor.eolState), + tokens = classificationResult.tokens; if (lineDescriptor.text) { lineDescriptor.text += '\n'; } lineDescriptor.text += text; lineDescriptor.eolState = classificationResult.eolState; - lineDescriptor.tokenMap = {}; + lineDescriptor.tokenMap = {}; - for (var i = 0, l = tokens.length; i < l; i++) { - lineDescriptor.tokenMap[tokens[i].position] = tokens[i]; - } + for (var i = 0, l = tokens.length; i < l; i++) { + lineDescriptor.tokenMap[tokens[i].position] = tokens[i]; + } - } + } - private getSyntaxTree(text: string) { - return TypeScript.Parser.parse( - 'script', - TypeScript.SimpleText.fromString(text), - false, - new TypeScript.ParseOptions(TypeScript.LanguageVersion.EcmaScript5, true) + private createSourceFile(text: string) { + return createSourceFileObject( + 'script', + TypeScript.ScriptSnapshot.fromString(text), + ts.ScriptTarget.ES5 ); } + + private getSyntaxTree(text: string) { + return this.createSourceFile(text).getSyntaxTree(); + } } -var classifier: Services.Classifier = new Services.TypeScriptServicesFactory().createClassifier(new logger.LogingClass()); +var classifier: ts.Classifier = ts.createClassifier(new logger.LogingClass()); -function getClassificationsForLine(text: string, eolState: Services.EndOfLineState ) { - var classificationResult = classifier.getClassificationsForLine(text, eolState), - currentPosition = 0, - tokens: Token[] = []; +function getClassificationsForLine(text: string, eolState: ts.EndOfLineState ) { + var classificationResult = classifier.getClassificationsForLine(text, eolState), + currentPosition = 0, + tokens: Token[] = []; - for (var i = 0, l = classificationResult.entries.length; i < l ; i++) { - var entry = classificationResult.entries[i]; - var token = { - string: text.substr(currentPosition, entry.length), - length: entry.length, - classification: entry.classification, - position: currentPosition - }; - tokens.push(token); - currentPosition += entry.length; - } + for (var i = 0, l = classificationResult.entries.length; i < l ; i++) { + var entry = classificationResult.entries[i]; + var token = { + string: text.substr(currentPosition, entry.length), + length: entry.length, + classification: entry.classification, + position: currentPosition + }; + tokens.push(token); + currentPosition += entry.length; + } - return { - tokens: tokens, - eolState: classificationResult.finalLexState - }; + return { + tokens: tokens, + eolState: classificationResult.finalLexState + }; } function getStyleForToken(token: Token, textBefore: string): string { - var TokenClass = Services.TokenClass; - switch (token.classification) { - case TokenClass.NumberLiteral: - return 'number'; - case TokenClass.StringLiteral: - return 'string'; - case TokenClass.RegExpLiteral: - return 'string-2'; - case TokenClass.Operator: - return 'operator'; - case TokenClass.Comment: - return 'comment'; - case TokenClass.Keyword: - switch (token.string) { - case 'string': - case 'number': - case 'void': - case 'bool': - case 'boolean': - return 'variable-2'; - case 'static': - case 'public': - case 'private': - case 'export': - case 'get': - case 'set': - return 'qualifier'; - case 'class': - case 'function': - case 'module': - case 'var': - return 'def'; - default: - return 'keyword'; - } - - case TokenClass.Identifier: - // Show types (indentifiers in PascalCase) as variable-2, other types (camelCase) as variable - if (token.string.charAt(0).toLowerCase() !== token.string.charAt(0)) { - return 'variable-2'; - } else { - return 'variable'; - } - case TokenClass.Punctuation: - return 'bracket'; - case TokenClass.Whitespace: - default: - return null; - } + var TokenClass = ts.TokenClass; + switch (token.classification) { + case TokenClass.NumberLiteral: + return 'number'; + case TokenClass.StringLiteral: + return 'string'; + case TokenClass.RegExpLiteral: + return 'string-2'; + case TokenClass.Operator: + return 'operator'; + case TokenClass.Comment: + return 'comment'; + case TokenClass.Keyword: + switch (token.string) { + case 'string': + case 'number': + case 'void': + case 'bool': + case 'boolean': + return 'variable-2'; + case 'static': + case 'public': + case 'private': + case 'export': + case 'get': + case 'set': + return 'qualifier'; + case 'class': + case 'function': + case 'module': + case 'var': + return 'def'; + default: + return 'keyword'; + } + + case TokenClass.Identifier: + // Show types (indentifiers in PascalCase) as variable-2, other types (camelCase) as variable + if (token.string.charAt(0).toLowerCase() !== token.string.charAt(0)) { + return 'variable-2'; + } else { + return 'variable'; + } + case TokenClass.Punctuation: + return 'bracket'; + case TokenClass.Whitespace: + default: + return null; + } } function typeScriptModeFactory(options: CodeMirror.EditorConfiguration, spec: any): CodeMirror.CodeMirrorMode { - return new TypeScriptMode(options); + return new TypeScriptMode(options); } export = typeScriptModeFactory; diff --git a/src/test/languageServiceHostTest.ts b/src/test/languageServiceHostTest.ts index 5ea3eff..f21dc64 100644 --- a/src/test/languageServiceHostTest.ts +++ b/src/test/languageServiceHostTest.ts @@ -136,22 +136,15 @@ describe('LanguageServiceHost', function () { }); - it('byteordermark should be None', function () { - languageServiceHost.addScript('file1.ts', 'hello world'); - expect(languageServiceHost.getScriptByteOrderMark('file1.ts')).toBe(TypeScript.ByteOrderMark.None); - }); - it('should provide default value when there is no script', function () { expect(languageServiceHost.getScriptSnapshot('file1.ts')).toBeNull(); expect(languageServiceHost.getScriptVersion('file1.ts')).toBe(0); expect(languageServiceHost.getScriptIsOpen('file1.ts')).toBe(false); - expect(languageServiceHost.getScriptByteOrderMark('file1.ts')).toBe(TypeScript.ByteOrderMark.None); }); it('should returns diagnostic object', function () { //TODO I don't really know what are the spec here - expect(languageServiceHost.getDiagnosticsObject()).toNotBe(null); expect(languageServiceHost.getLocalizedDiagnosticMessages()).toBe(''); }); diff --git a/src/test/projectTest.ts b/src/test/projectTest.ts index defe12a..b8b9ef9 100644 --- a/src/test/projectTest.ts +++ b/src/test/projectTest.ts @@ -421,8 +421,7 @@ describe('TypeScriptProject', function () { Services: {\ TypeScriptServicesFactory: function () { \ return { \ - createCoreServices: function () { return {} }, \ - createPullLanguageService: function () { return { id:\'hello\'} }\ + createCoreServicesShim: function () { return { id: \'hello\' } }\ }\ }\ }\ @@ -439,7 +438,7 @@ describe('TypeScriptProject', function () { waits(50); runs(function () { - expect(typeScriptProject.getLanguageService()).toEqual({id: 'hello'}); + expect(typeScriptProject.getCoreService()).toEqual({id: 'hello'}); }); }); @@ -470,8 +469,8 @@ describe('TypeScriptProject', function () { } it('should update compilerOptions if compiler options does have changed', function () { - expect(typeScriptProject.getLanguageServiceHost().getCompilationSettings().codeGenTarget) - .toBe(TypeScript.LanguageVersion.EcmaScript5); + expect(typeScriptProject.getLanguageServiceHost().getCompilationSettings().target) + .toBe(ts.ScriptTarget.ES5); updateProject({ target: 'es3', @@ -481,8 +480,8 @@ describe('TypeScriptProject', function () { waits(20); runs(function () { - expect(typeScriptProject.getLanguageServiceHost().getCompilationSettings().codeGenTarget) - .toBe(TypeScript.LanguageVersion.EcmaScript3); + expect(typeScriptProject.getLanguageServiceHost().getCompilationSettings().target) + .toBe(ts.ScriptTarget.ES3); }); }); diff --git a/src/ts-worker/completionService.ts b/src/ts-worker/completionService.ts index ba5acb5..1f7c8c6 100644 --- a/src/ts-worker/completionService.ts +++ b/src/ts-worker/completionService.ts @@ -19,7 +19,7 @@ import TypeScriptProjectManager = require('./projectManager'); import completion = require('../commons/completion'); import logger = require('../commons/logger'); -var ScriptElementKind = TypeScript.Services.ScriptElementKind; +var ScriptElementKind = ts.ScriptElementKind; /** * implementation of the ICompletionService @@ -44,7 +44,8 @@ class CompletionService implements completion.ICompletionService { getCompletionAtPosition(fileName: string, position: CodeMirror.Position): Promise { return this.projectManager.getProjectForFile(fileName).then(project => { - var languageService = project.getLanguageService(), + var documentRegistry = project.getDocumentRegistry(), + languageService = project.getLanguageService(), languageServiceHost = project.getLanguageServiceHost(), index = languageServiceHost.getIndexFromPos(fileName, position), completionInfo = languageService.getCompletionsAtPosition(fileName, index, true), @@ -55,18 +56,24 @@ class CompletionService implements completion.ICompletionService { return { entries: [], match: '' }; } - var sourceUnit = languageService.getSyntaxTree(fileName).sourceUnit(), - currentToken = sourceUnit.findTokenOnLeft(index), + var sourceUnit = documentRegistry.acquireDocument( + fileName, + languageServiceHost.getCompilationSettings(), + languageServiceHost.getScriptSnapshot(fileName), + languageServiceHost.getScriptVersion(fileName), + languageServiceHost.getScriptIsOpen(fileName) + ).getSourceUnit(), + currentToken = TypeScript.Syntax.findTokenOnLeft(sourceUnit, index), match: string; - if (currentToken && this.isValidTokenKind(currentToken.token().tokenKind)) { - match = currentToken.token().fullText(); - if (currentToken.element().leadingTrivia()) { - match = match.substr(currentToken.element().leadingTriviaWidth()); + if (currentToken && this.isValidTokenKind(currentToken.kind())) { + match = currentToken.fullText(); + if (currentToken.leadingTrivia()) { + match = match.substr(currentToken.leadingTriviaWidth()); } - if (currentToken.element().trailingTrivia()) { - match = match.substr(0, match.length - currentToken.element().trailingTriviaWidth()); + if (currentToken.trailingTrivia()) { + match = match.substr(0, match.length - currentToken.trailingTriviaWidth()); } typeScriptEntries = typeScriptEntries.filter(entry => { diff --git a/src/ts-worker/errorService.ts b/src/ts-worker/errorService.ts index 5af6750..d41e1d8 100644 --- a/src/ts-worker/errorService.ts +++ b/src/ts-worker/errorService.ts @@ -14,8 +14,8 @@ 'use strict'; - import TypeScriptProjectManager = require('./projectManager'); +import LanguageServiceHost = require('./languageServiceHost'); import Promise = require('bluebird'); import IErrorService = require('../commons/errorService'); @@ -53,11 +53,11 @@ class ErrorService implements IErrorService { return this.projectManager.getProjectForFile(fileName).then(project => { var languageService = project.getLanguageService(), syntacticDiagnostics = languageService.getSyntacticDiagnostics(fileName), - errors = this.diagnosticToError(syntacticDiagnostics); + errors = this.diagnosticToError(project.getLanguageServiceHost(), syntacticDiagnostics); if (errors.length === 0) { var semanticDiagnostic = languageService.getSemanticDiagnostics(fileName); - errors = this.diagnosticToError(semanticDiagnostic); + errors = this.diagnosticToError(project.getLanguageServiceHost(), semanticDiagnostic); } return { @@ -76,39 +76,29 @@ class ErrorService implements IErrorService { * convert TypeScript Diagnostic to brackets error format * @param diagnostics */ - private diagnosticToError(diagnostics: TypeScript.Diagnostic[]): brackets.LintingError[] { + private diagnosticToError(languageServiceHost: LanguageServiceHost, diagnostics: ts.Diagnostic[]): brackets.LintingError[] { if (!diagnostics) { return []; } return diagnostics.map(diagnostic => { - var info = diagnostic.info(), - type: string; + var type: string; - switch (info.category) { - case TypeScript.DiagnosticCategory.Error: + switch (diagnostic.category) { + case ts.DiagnosticCategory.Error: type = Type.ERROR; break; - case TypeScript.DiagnosticCategory.Warning: + case ts.DiagnosticCategory.Warning: type = Type.WARNING; break; - case TypeScript.DiagnosticCategory.NoPrefix: - type = Type.ERROR; - break; - case TypeScript.DiagnosticCategory.Message: + case ts.DiagnosticCategory.Message: type = Type.META; break; } return { - pos: { - line: diagnostic.line(), - ch: diagnostic.character() - }, - endpos: { - line: diagnostic.line(), - ch: diagnostic.character() + diagnostic.length() - }, - message: diagnostic.message(), + pos: languageServiceHost.indexToPosition(diagnostic.file.filename, diagnostic.start), + endpos: languageServiceHost.indexToPosition(diagnostic.file.filename, diagnostic.start + diagnostic.length), + message: diagnostic.messageText, type: type }; }); diff --git a/src/ts-worker/formattingService.ts b/src/ts-worker/formattingService.ts index e27ca54..4545118 100644 --- a/src/ts-worker/formattingService.ts +++ b/src/ts-worker/formattingService.ts @@ -39,8 +39,8 @@ class FormattingService implements IFormattingService { * * @return a promise resolving to a formating range info */ - getFormatingForFile(fileName: string, options: TypeScript.Services.FormatCodeOptions, - startPos?: CodeMirror.Position, endPos?: CodeMirror.Position): Promise { + getFormatingForFile(fileName: string, options: ts.FormatCodeOptions, + startPos?: CodeMirror.Position, endPos?: CodeMirror.Position): Promise { return this.projectManager.getProjectForFile(fileName).then(project => { var languageServiceHost = project.getLanguageServiceHost(), diff --git a/src/ts-worker/index.ts b/src/ts-worker/index.ts index 979ca5e..c17e14b 100644 --- a/src/ts-worker/index.ts +++ b/src/ts-worker/index.ts @@ -15,10 +15,9 @@ 'use strict'; // inject global in the worker -global.TypeScript = require('typescriptServices'); +importScripts('../third_party/typescript/typescriptServices.js'); global.window = self; - import TypeScriptProjectManager = require('./projectManager'); import TypeScriptProject = require('./project'); import ErrorService = require('./errorService'); diff --git a/src/ts-worker/languageServiceHost.ts b/src/ts-worker/languageServiceHost.ts index 869d73f..49f5f4d 100644 --- a/src/ts-worker/languageServiceHost.ts +++ b/src/ts-worker/languageServiceHost.ts @@ -19,15 +19,19 @@ import collections = require('../commons/collections'); import path = require('path'); import utils = require('../commons/utils'); +var cancellationToken: ts.CancellationToken = { + isCancellationRequested: () => false +}; + /** * ILanguage Service host implementation */ -class LanguageServiceHost extends logger.LogingClass implements TypeScript.Services.ILanguageServiceHost { +class LanguageServiceHost extends logger.LogingClass implements ts.LanguageServiceHost { /** * compilationSettings */ - private compilationSettings: TypeScript.CompilationSettings; + private compilationSettings: ts.CompilerOptions; /** * a map associating file absolute path to ScriptInfo @@ -117,7 +121,7 @@ class LanguageServiceHost extends logger.LogingClass implements TypeScript.Servi * * @param the settings to be applied to the host */ - setCompilationSettings(settings: TypeScript.CompilationSettings ): void{ + setCompilationSettings(settings: ts.CompilerOptions ): void{ this.compilationSettings = Object.freeze(utils.clone(settings)); } @@ -171,7 +175,7 @@ class LanguageServiceHost extends logger.LogingClass implements TypeScript.Servi // ILanguageServiceShimHost implementation // - getCompilationSettings(): TypeScript.CompilationSettings { + getCompilationSettings(): ts.CompilerOptions { return this.compilationSettings; } @@ -203,18 +207,6 @@ class LanguageServiceHost extends logger.LogingClass implements TypeScript.Servi return false; } - getScriptByteOrderMark(fileName: string): TypeScript.ByteOrderMark { - var script = this.fileNameToScript.get(fileName); - if (script) { - return script.byteOrderMark; - } - return TypeScript.ByteOrderMark.None; - } - - getDiagnosticsObject(): TypeScript.Services.ILanguageServicesDiagnostics { - return new LanguageServicesDiagnostics(''); - } - getLocalizedDiagnosticMessages(): string { return ''; } @@ -234,9 +226,12 @@ class LanguageServiceHost extends logger.LogingClass implements TypeScript.Servi getParentDirectory(fileName: string): string { return path.dirname(fileName); } + + getCancellationToken() { + return cancellationToken; + } } - /** * Manage a script in the language service host */ @@ -247,21 +242,17 @@ class ScriptInfo { fileName: string; content: string; isOpen: boolean; - byteOrderMark: TypeScript.ByteOrderMark; /** * @param fileName the absolute path of the file * @param content the content of the file * @param isOpen the open status of the script - * @param byteOrderMark */ - constructor(fileName: string, content: string, isOpen = false, - byteOrderMark: TypeScript.ByteOrderMark = TypeScript.ByteOrderMark.None) { + constructor(fileName: string, content: string, isOpen = false) { this.fileName = fileName; this.content = content; this.isOpen = isOpen; - this.byteOrderMark = byteOrderMark; this.setContent(content); } @@ -385,15 +376,4 @@ class ScriptSnapshot implements TypeScript.IScriptSnapshot { } } - -class LanguageServicesDiagnostics implements TypeScript.Services.ILanguageServicesDiagnostics { - - constructor(private destination: string) { } - - log(content: string): void { - //Imitates the LanguageServicesDiagnostics object when not in Visual Studio - } -} - - export = LanguageServiceHost; diff --git a/src/ts-worker/project.ts b/src/ts-worker/project.ts index aa142a4..abac015 100644 --- a/src/ts-worker/project.ts +++ b/src/ts-worker/project.ts @@ -68,17 +68,22 @@ class TypeScriptProject { /** * TypeScript CoreServices instance used by these project */ - private coreService: Services.CoreServices; + private coreService: ts.CoreServicesShim; /** * Language Service host instance managed by this service */ private languageServiceHost: LanguageServiceHost; + /** + * Document Registry used for caching documents + */ + private documentRegistry: ts.DocumentRegistry; + /** * LanguageService managed by this project */ - private languageService: Services.ILanguageService; + private languageService: ts.LanguageService; /** * Map path to content @@ -119,10 +124,11 @@ class TypeScriptProject { return this.queue.init( this.getTypeScriptInfosForPath(this.config.typescriptPath).then(typeScriptInfo => { this.libLocation = typeScriptInfo.libLocation; - this.coreService = typeScriptInfo.factory.createCoreServices({ logger: new logger.LogingClass()}); + this.coreService = typeScriptInfo.factory.createCoreServicesShim(new logger.LogingClass()); this.languageServiceHost = new LanguageServiceHost(); this.languageServiceHost.setCompilationSettings(this.createCompilationSettings()); - this.languageService = typeScriptInfo.factory.createPullLanguageService(this.languageServiceHost); + this.documentRegistry = ts.createDocumentRegistry(); + this.languageService = ts.createLanguageService(this.languageServiceHost, this.documentRegistry); return this.collectFiles(); @@ -175,6 +181,10 @@ class TypeScriptProject { // exposed services //------------------------------- + getDocumentRegistry(): ts.DocumentRegistry { + return this.documentRegistry; + } + /** * return the language service host of the project */ @@ -185,14 +195,14 @@ class TypeScriptProject { /** * return the core service used by the project */ - getCoreService(): Services.CoreServices { + getCoreService(): ts.CoreServicesShim { return this.coreService; } /** * return the languageService used by the project */ - getLanguageService(): Services.ILanguageService { + getLanguageService(): ts.LanguageService { return this.languageService; } @@ -269,25 +279,25 @@ class TypeScriptProject { /** * create Typescript compilation settings from config file */ - private createCompilationSettings(): TypeScript.CompilationSettings { - var compilationSettings = new TypeScript.CompilationSettings(), + private createCompilationSettings(): ts.CompilerOptions { + var compilationSettings: ts.CompilerOptions = {}, moduleType = this.config.module.toLowerCase(); compilationSettings.noLib = this.config.noLib; compilationSettings.noImplicitAny = this.config.noImplicitAny; compilationSettings.sourceRoot = this.config.sourceRoot; - compilationSettings.codeGenTarget = + compilationSettings.target = this.config.target.toLowerCase() === 'es3' ? - TypeScript.LanguageVersion.EcmaScript3 : - TypeScript.LanguageVersion.EcmaScript5; + ts.ScriptTarget.ES3 : + ts.ScriptTarget.ES5; - compilationSettings.moduleGenTarget = + compilationSettings.module = moduleType === 'none' ? - TypeScript.ModuleGenTarget.Unspecified : + ts.ModuleKind.None : moduleType === 'amd' ? - TypeScript.ModuleGenTarget.Asynchronous : - TypeScript.ModuleGenTarget.Synchronous + ts.ModuleKind.AMD : + ts.ModuleKind.CommonJS ; return compilationSettings; @@ -402,12 +412,13 @@ class TypeScriptProject { * for a given file retrives the file referenced or imported by this file * @param path */ - private getReferencedOrImportedFiles(fileName: string): string[] { + public getReferencedOrImportedFiles(fileName: string): string[] { if (!this.projectFilesSet.has(fileName)) { return []; } var script = this.languageServiceHost.getScriptSnapshot(fileName), - preProcessedFileInfo = this.coreService.getPreProcessedFileInfo(fileName, script), + preProcessedFileInfoString = this.coreService.getPreProcessedFileInfo(fileName, script), + preProcessedFileInfo: TypeScript.IPreProcessedFileInfo = JSON.parse(preProcessedFileInfoString).result, dir = path.dirname(fileName); return preProcessedFileInfo.referencedFiles.map(fileReference => { @@ -563,7 +574,7 @@ class TypeScriptProject { interface TypeScriptInfo { - factory: Services.TypeScriptServicesFactory; + factory: ts.TypeScriptServicesFactory; libLocation: string; } diff --git a/third_party/typescript/lib.d.ts b/third_party/typescript/lib.d.ts index d3e57e7..a3081f2 100644 --- a/third_party/typescript/lib.d.ts +++ b/third_party/typescript/lib.d.ts @@ -1,4 +1,4 @@ -/* ***************************************************************************** +/*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the @@ -317,13 +317,13 @@ interface String { * Matches a string with a regular expression, and returns an array containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ - match(regexp: string): string[]; + match(regexp: string): RegExpMatchArray; /** * Matches a string with a regular expression, and returns an array containing the results of that search. * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. */ - match(regexp: RegExp): string[]; + match(regexp: RegExp): RegExpMatchArray; /** * Replaces text in a string, using a regular expression or search string. @@ -790,39 +790,16 @@ declare var Date: { now(): number; } -interface RegExpExecArray { - [index: number]: string; - length: number; +interface RegExpMatchArray extends Array { + index?: number; + input?: string; +} +interface RegExpExecArray extends Array { index: number; input: string; - - toString(): string; - toLocaleString(): string; - concat(...items: string[][]): string[]; - join(separator?: string): string; - pop(): string; - push(...items: string[]): number; - reverse(): string[]; - shift(): string; - slice(start?: number, end?: number): string[]; - sort(compareFn?: (a: string, b: string) => number): string[]; - splice(start: number): string[]; - splice(start: number, deleteCount: number, ...items: string[]): string[]; - unshift(...items: string[]): number; - - indexOf(searchElement: string, fromIndex?: number): number; - lastIndexOf(searchElement: string, fromIndex?: number): number; - every(callbackfn: (value: string, index: number, array: string[]) => boolean, thisArg?: any): boolean; - some(callbackfn: (value: string, index: number, array: string[]) => boolean, thisArg?: any): boolean; - forEach(callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any): void; - map(callbackfn: (value: string, index: number, array: string[]) => any, thisArg?: any): any[]; - filter(callbackfn: (value: string, index: number, array: string[]) => boolean, thisArg?: any): string[]; - reduce(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: string[]) => any, initialValue?: any): any; - reduceRight(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: string[]) => any, initialValue?: any): any; } - interface RegExp { /** * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. @@ -979,11 +956,24 @@ declare var JSON: JSON; ///////////////////////////// interface Array { + /** + * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. + */ + length: number; /** * Returns a string representation of an array. */ toString(): string; toLocaleString(): string; + /** + * Appends new elements to an array, and returns the new length of the array. + * @param items New elements of the Array. + */ + push(...items: T[]): number; + /** + * Removes the last element from an array and returns it. + */ + pop(): T; /** * Combines two or more arrays. * @param items Additional items to add to the end of array1. @@ -999,15 +989,6 @@ interface Array { * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; - /** - * Removes the last element from an array and returns it. - */ - pop(): T; - /** - * Appends new elements to an array, and returns the new length of the array. - * @param items New elements of the Array. - */ - push(...items: T[]): number; /** * Reverses the elements in an Array. */ @@ -1124,11 +1105,6 @@ interface Array { */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** - * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array. - */ - length: number; - [n: number]: T; } declare var Array: { @@ -1142,7 +1118,6 @@ declare var Array: { prototype: Array; } - ///////////////////////////// /// IE10 ECMAScript Extensions ///////////////////////////// @@ -1158,6 +1133,11 @@ interface ArrayBuffer { * Read-only. The length of the ArrayBuffer (in bytes). */ byteLength: number; + + /** + * Returns a section of an ArrayBuffer. + */ + slice(begin:number, end?:number): ArrayBuffer; } declare var ArrayBuffer: { @@ -1911,12246 +1891,10522 @@ declare module Intl { } interface String { + /** + * Determines whether two strings are equivalent in the current locale. + * @param that String to compare to target string + * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. + * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. + */ localeCompare(that: string, locales: string[], options?: Intl.CollatorOptions): number; + + /** + * Determines whether two strings are equivalent in the current locale. + * @param that String to compare to target string + * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. + * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. + */ localeCompare(that: string, locale: string, options?: Intl.CollatorOptions): number; } interface Number { + /** + * Converts a number to a string by using the current or specified locale. + * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string; + + /** + * Converts a number to a string by using the current or specified locale. + * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ toLocaleString(locale?: string, options?: Intl.NumberFormatOptions): string; } interface Date { + /** + * Converts a date to a string by using the current or specified locale. + * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; + + /** + * Converts a date to a string by using the current or specified locale. + * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. + * @param options An object that contains one or more properties that specify comparison options. + */ toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string; } - ///////////////////////////// -/// IE9 DOM APIs +/// IE DOM APIs ///////////////////////////// + interface PositionOptions { enableHighAccuracy?: boolean; timeout?: number; maximumAge?: number; } -interface NavigatorID { - appVersion: string; - appName: string; - userAgent: string; - platform: string; +interface ObjectURLOptions { + oneTimeOnly?: boolean; } -interface HTMLTableElement extends HTMLElement, MSDataBindingTableExtensions, MSDataBindingExtensions, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { - /** - * Sets or retrieves the width of the object. - */ - width: string; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorLight: any; - /** - * Sets or retrieves the amount of space between cells in a table. - */ - cellSpacing: string; - /** - * Retrieves the tFoot object of the table. - */ - tFoot: HTMLTableSectionElement; - /** - * Sets or retrieves the way the border frame around the table is displayed. - */ - frame: string; - /** - * Sets or retrieves the border color of the object. - */ - borderColor: any; - /** - * Sets or retrieves the number of horizontal rows contained in the object. - */ - rows: HTMLCollection; - /** - * Sets or retrieves which dividing lines (inner borders) are displayed. - */ - rules: string; - /** - * Sets or retrieves the number of columns in the table. - */ - cols: number; - /** - * Sets or retrieves a description and/or structure of the object. - */ - summary: string; - /** - * Retrieves the caption object of a table. - */ - caption: HTMLTableCaptionElement; - /** - * Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order. - */ - tBodies: HTMLCollection; - /** - * Retrieves the tHead object of the table. - */ - tHead: HTMLTableSectionElement; - /** - * Sets or retrieves a value that indicates the table alignment. - */ - align: string; - /** - * Retrieves a collection of all cells in the table row or in the entire table. - */ - cells: HTMLCollection; - /** - * Sets or retrieves the height of the object. - */ - height: any; - /** - * Sets or retrieves the amount of space between the border of the cell and the content of the cell. - */ - cellPadding: string; - /** - * Sets or retrieves the width of the border to draw around the object. - */ - border: string; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorDark: any; - /** - * Removes the specified row (tr) from the element and from the rows collection. - * @param index Number that specifies the zero-based position in the rows collection of the row to remove. - */ - deleteRow(index?: number): void; - /** - * Creates an empty tBody element in the table. - */ - createTBody(): HTMLElement; - /** - * Deletes the caption element and its contents from the table. - */ - deleteCaption(): void; - /** - * Creates a new row (tr) in the table, and adds the row to the rows collection. - * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection. - */ - insertRow(index?: number): HTMLElement; - /** - * Deletes the tFoot element and its contents from the table. - */ - deleteTFoot(): void; - /** - * Returns the tHead element object if successful, or null otherwise. - */ - createTHead(): HTMLElement; - /** - * Deletes the tHead element and its contents from the table. - */ - deleteTHead(): void; - /** - * Creates an empty caption element in the table. - */ - createCaption(): HTMLElement; - /** - * Moves a table row to a new position. - * @param indexFrom Number that specifies the index in the rows collection of the table row that is moved. - * @param indexTo Number that specifies where the row is moved within the rows collection. - */ - moveRow(indexFrom?: number, indexTo?: number): Object; - /** - * Creates an empty tFoot element in the table. - */ - createTFoot(): HTMLElement; -} -declare var HTMLTableElement: { - prototype: HTMLTableElement; - new (): HTMLTableElement; +interface StoreExceptionsInformation extends ExceptionInformation { + siteName?: string; + explanationString?: string; + detailURI?: string; } -interface TreeWalker { - whatToShow: number; - filter: NodeFilter; - root: Node; - currentNode: Node; - expandEntityReferences: boolean; - previousSibling(): Node; - lastChild(): Node; - nextSibling(): Node; - nextNode(): Node; - parentNode(): Node; - firstChild(): Node; - previousNode(): Node; +interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation { + arrayOfDomainStrings?: string[]; } -declare var TreeWalker: { - prototype: TreeWalker; - new (): TreeWalker; + +interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation { + arrayOfDomainStrings?: string[]; } -interface GetSVGDocument { - getSVGDocument(): Document; +interface AlgorithmParameters { } -interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg { - y: number; - y1: number; - x: number; - x1: number; +interface MutationObserverInit { + childList?: boolean; + attributes?: boolean; + characterData?: boolean; + subtree?: boolean; + attributeOldValue?: boolean; + characterDataOldValue?: boolean; + attributeFilter?: string[]; } -declare var SVGPathSegCurvetoQuadraticRel: { - prototype: SVGPathSegCurvetoQuadraticRel; - new (): SVGPathSegCurvetoQuadraticRel; + +interface PointerEventInit extends MouseEventInit { + pointerId?: number; + width?: number; + height?: number; + pressure?: number; + tiltX?: number; + tiltY?: number; + pointerType?: string; + isPrimary?: boolean; } -interface Performance { - navigation: PerformanceNavigation; - timing: PerformanceTiming; - getEntriesByType(entryType: string): any; - toJSON(): any; - getMeasures(measureName?: string): any; - clearMarks(markName?: string): void; - getMarks(markName?: string): any; - clearResourceTimings(): void; - mark(markName: string): void; - measure(measureName: string, startMarkName?: string, endMarkName?: string): void; - getEntriesByName(name: string, entryType?: string): any; - getEntries(): any; - clearMeasures(measureName?: string): void; - setResourceTimingBufferSize(maxSize: number): void; +interface ExceptionInformation { + domain?: string; } -declare var Performance: { - prototype: Performance; - new (): Performance; + +interface DeviceAccelerationDict { + x?: number; + y?: number; + z?: number; } -interface MSDataBindingTableExtensions { - dataPageSize: number; - nextPage(): void; - firstPage(): void; - refresh(): void; - previousPage(): void; - lastPage(): void; -} - -interface CompositionEvent extends UIEvent { - data: string; - locale: string; - initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void; -} -declare var CompositionEvent: { - prototype: CompositionEvent; - new (): CompositionEvent; -} - -interface WindowTimers { - clearTimeout(handle: number): void; - setTimeout(handler: any, timeout?: any, ...args: any[]): number; - clearInterval(handle: number): void; - setInterval(handler: any, timeout?: any, ...args: any[]): number; +interface MsZoomToOptions { + contentX?: number; + contentY?: number; + viewportX?: string; + viewportY?: string; + scaleFactor?: number; + animate?: string; } -interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired { - orientType: SVGAnimatedEnumeration; - markerUnits: SVGAnimatedEnumeration; - markerWidth: SVGAnimatedLength; - markerHeight: SVGAnimatedLength; - orientAngle: SVGAnimatedAngle; - refY: SVGAnimatedLength; - refX: SVGAnimatedLength; - setOrientToAngle(angle: SVGAngle): void; - setOrientToAuto(): void; - SVG_MARKER_ORIENT_UNKNOWN: number; - SVG_MARKER_ORIENT_ANGLE: number; - SVG_MARKERUNITS_UNKNOWN: number; - SVG_MARKERUNITS_STROKEWIDTH: number; - SVG_MARKER_ORIENT_AUTO: number; - SVG_MARKERUNITS_USERSPACEONUSE: number; -} -declare var SVGMarkerElement: { - prototype: SVGMarkerElement; - new (): SVGMarkerElement; - SVG_MARKER_ORIENT_UNKNOWN: number; - SVG_MARKER_ORIENT_ANGLE: number; - SVG_MARKERUNITS_UNKNOWN: number; - SVG_MARKERUNITS_STROKEWIDTH: number; - SVG_MARKER_ORIENT_AUTO: number; - SVG_MARKERUNITS_USERSPACEONUSE: number; +interface DeviceRotationRateDict { + alpha?: number; + beta?: number; + gamma?: number; } -interface CSSStyleDeclaration { - backgroundAttachment: string; - visibility: string; - textAlignLast: string; - borderRightStyle: string; - counterIncrement: string; - orphans: string; - cssText: string; - borderStyle: string; - pointerEvents: string; - borderTopColor: string; - markerEnd: string; - textIndent: string; - listStyleImage: string; - cursor: string; - listStylePosition: string; - wordWrap: string; - borderTopStyle: string; - alignmentBaseline: string; - opacity: string; - direction: string; - strokeMiterlimit: string; - maxWidth: string; - color: string; - clip: string; - borderRightWidth: string; - verticalAlign: string; - overflow: string; - mask: string; - borderLeftStyle: string; - emptyCells: string; - stopOpacity: string; - paddingRight: string; - parentRule: CSSRule; - background: string; - boxSizing: string; - textJustify: string; - height: string; - paddingTop: string; - length: number; - right: string; - baselineShift: string; - borderLeft: string; - widows: string; - lineHeight: string; - left: string; - textUnderlinePosition: string; - glyphOrientationHorizontal: string; - display: string; - textAnchor: string; - cssFloat: string; - strokeDasharray: string; - rubyAlign: string; - fontSizeAdjust: string; - borderLeftColor: string; - backgroundImage: string; - listStyleType: string; - strokeWidth: string; - textOverflow: string; - fillRule: string; - borderBottomColor: string; - zIndex: string; - position: string; - listStyle: string; - msTransformOrigin: string; - dominantBaseline: string; - overflowY: string; - fill: string; - captionSide: string; - borderCollapse: string; - boxShadow: string; - quotes: string; - tableLayout: string; - unicodeBidi: string; - borderBottomWidth: string; - backgroundSize: string; - textDecoration: string; - strokeDashoffset: string; - fontSize: string; - border: string; - pageBreakBefore: string; - borderTopRightRadius: string; - msTransform: string; - borderBottomLeftRadius: string; - textTransform: string; - rubyPosition: string; - strokeLinejoin: string; - clipPath: string; - borderRightColor: string; - fontFamily: string; - clear: string; - content: string; - backgroundClip: string; - marginBottom: string; - counterReset: string; - outlineWidth: string; - marginRight: string; - paddingLeft: string; - borderBottom: string; - wordBreak: string; - marginTop: string; - top: string; - fontWeight: string; - borderRight: string; - width: string; - kerning: string; - pageBreakAfter: string; - borderBottomStyle: string; - fontStretch: string; - padding: string; - strokeOpacity: string; - markerStart: string; - bottom: string; - borderLeftWidth: string; - clipRule: string; - backgroundPosition: string; - backgroundColor: string; - pageBreakInside: string; - backgroundOrigin: string; - strokeLinecap: string; - borderTopWidth: string; - outlineStyle: string; - borderTop: string; - outlineColor: string; - paddingBottom: string; - marginLeft: string; - font: string; - outline: string; - wordSpacing: string; - maxHeight: string; - fillOpacity: string; - letterSpacing: string; - borderSpacing: string; - backgroundRepeat: string; - borderRadius: string; - borderWidth: string; - borderBottomRightRadius: string; - whiteSpace: string; - fontStyle: string; - minWidth: string; - stopColor: string; - borderTopLeftRadius: string; - borderColor: string; - marker: string; - glyphOrientationVertical: string; - markerMid: string; - fontVariant: string; - minHeight: string; - stroke: string; - rubyOverhang: string; - overflowX: string; - textAlign: string; - margin: string; - getPropertyPriority(propertyName: string): string; - getPropertyValue(propertyName: string): string; - removeProperty(propertyName: string): string; - item(index: number): string; - [index: number]: string; - setProperty(propertyName: string, value: string, priority?: string): void; -} -declare var CSSStyleDeclaration: { - prototype: CSSStyleDeclaration; - new (): CSSStyleDeclaration; +interface Algorithm { + name?: string; + params?: AlgorithmParameters; } -interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { -} -declare var SVGGElement: { - prototype: SVGGElement; - new (): SVGGElement; +interface MouseEventInit { + bubbles?: boolean; + cancelable?: boolean; + view?: Window; + detail?: number; + screenX?: number; + screenY?: number; + clientX?: number; + clientY?: number; + ctrlKey?: boolean; + shiftKey?: boolean; + altKey?: boolean; + metaKey?: boolean; + button?: number; + buttons?: number; + relatedTarget?: EventTarget; } -interface MSStyleCSSProperties extends MSCSSProperties { - pixelWidth: number; - posHeight: number; - posLeft: number; - pixelTop: number; - pixelBottom: number; - textDecorationNone: boolean; - pixelLeft: number; - posTop: number; - posBottom: number; - textDecorationOverline: boolean; - posWidth: number; - textDecorationLineThrough: boolean; - pixelHeight: number; - textDecorationBlink: boolean; - posRight: number; - pixelRight: number; - textDecorationUnderline: boolean; -} -declare var MSStyleCSSProperties: { - prototype: MSStyleCSSProperties; - new (): MSStyleCSSProperties; +interface WebGLContextAttributes { + alpha?: boolean; + depth?: boolean; + stencil?: boolean; + antialias?: boolean; + premultipliedAlpha?: boolean; + preserveDrawingBuffer?: boolean; } -interface Navigator extends NavigatorID, NavigatorOnLine, NavigatorContentUtils, MSNavigatorExtensions, NavigatorGeolocation, MSNavigatorDoNotTrack, NavigatorStorageUtils { -} -declare var Navigator: { - prototype: Navigator; - new (): Navigator; +interface NodeListOf extends NodeList { + length: number; + item(index: number): TNode; + [index: number]: TNode; } -interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg { - y: number; - x2: number; - x: number; - y2: number; -} -declare var SVGPathSegCurvetoCubicSmoothAbs: { - prototype: SVGPathSegCurvetoCubicSmoothAbs; - new (): SVGPathSegCurvetoCubicSmoothAbs; -} - -interface SVGZoomEvent extends UIEvent { - zoomRectScreen: SVGRect; - previousScale: number; - newScale: number; - previousTranslate: SVGPoint; - newTranslate: SVGPoint; -} -declare var SVGZoomEvent: { - prototype: SVGZoomEvent; - new (): SVGZoomEvent; -} - -interface NodeSelector { - querySelectorAll(selectors: string): NodeList; - querySelector(selectors: string): Element; -} - -interface HTMLTableDataCellElement extends HTMLTableCellElement { -} -declare var HTMLTableDataCellElement: { - prototype: HTMLTableDataCellElement; - new (): HTMLTableDataCellElement; -} - -interface HTMLBaseElement extends HTMLElement { - /** - * Sets or retrieves the window or frame at which to target content. - */ - target: string; - /** - * Gets or sets the baseline URL on which relative links are based. - */ - href: string; -} -declare var HTMLBaseElement: { - prototype: HTMLBaseElement; - new (): HTMLBaseElement; -} - -interface ClientRect { - left: number; - width: number; - right: number; - top: number; - bottom: number; - height: number; -} -declare var ClientRect: { - prototype: ClientRect; - new (): ClientRect; -} - -interface PositionErrorCallback { - (error: PositionError): void; -} - -interface DOMImplementation { - createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; - createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document; - hasFeature(feature: string, version?: string): boolean; - createHTMLDocument(title: string): Document; -} -declare var DOMImplementation: { - prototype: DOMImplementation; - new (): DOMImplementation; -} - -interface SVGUnitTypes { - SVG_UNIT_TYPE_UNKNOWN: number; - SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number; - SVG_UNIT_TYPE_USERSPACEONUSE: number; -} -declare var SVGUnitTypes: { - prototype: SVGUnitTypes; - new (): SVGUnitTypes; - SVG_UNIT_TYPE_UNKNOWN: number; - SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number; - SVG_UNIT_TYPE_USERSPACEONUSE: number; -} - -interface Element extends Node, NodeSelector, ElementTraversal { - scrollTop: number; - clientLeft: number; - scrollLeft: number; - tagName: string; - clientWidth: number; - scrollWidth: number; - clientHeight: number; - clientTop: number; - scrollHeight: number; - getAttribute(name?: string): string; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList; - hasAttributeNS(namespaceURI: string, localName: string): boolean; - getBoundingClientRect(): ClientRect; - getAttributeNS(namespaceURI: string, localName: string): string; - getAttributeNodeNS(namespaceURI: string, localName: string): Attr; - setAttributeNodeNS(newAttr: Attr): Attr; - msMatchesSelector(selectors: string): boolean; - hasAttribute(name: string): boolean; - removeAttribute(name?: string): void; - setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void; - getAttributeNode(name: string): Attr; - fireEvent(eventName: string, eventObj?: any): boolean; - getElementsByTagName(name: "a"): NodeListOf; - getElementsByTagName(name: "abbr"): NodeListOf; - getElementsByTagName(name: "address"): NodeListOf; - getElementsByTagName(name: "area"): NodeListOf; - getElementsByTagName(name: "article"): NodeListOf; - getElementsByTagName(name: "aside"): NodeListOf; - getElementsByTagName(name: "audio"): NodeListOf; - getElementsByTagName(name: "b"): NodeListOf; - getElementsByTagName(name: "base"): NodeListOf; - getElementsByTagName(name: "bdi"): NodeListOf; - getElementsByTagName(name: "bdo"): NodeListOf; - getElementsByTagName(name: "blockquote"): NodeListOf; - getElementsByTagName(name: "body"): NodeListOf; - getElementsByTagName(name: "br"): NodeListOf; - getElementsByTagName(name: "button"): NodeListOf; - getElementsByTagName(name: "canvas"): NodeListOf; - getElementsByTagName(name: "caption"): NodeListOf; - getElementsByTagName(name: "cite"): NodeListOf; - getElementsByTagName(name: "code"): NodeListOf; - getElementsByTagName(name: "col"): NodeListOf; - getElementsByTagName(name: "colgroup"): NodeListOf; - getElementsByTagName(name: "datalist"): NodeListOf; - getElementsByTagName(name: "dd"): NodeListOf; - getElementsByTagName(name: "del"): NodeListOf; - getElementsByTagName(name: "dfn"): NodeListOf; - getElementsByTagName(name: "div"): NodeListOf; - getElementsByTagName(name: "dl"): NodeListOf; - getElementsByTagName(name: "dt"): NodeListOf; - getElementsByTagName(name: "em"): NodeListOf; - getElementsByTagName(name: "embed"): NodeListOf; - getElementsByTagName(name: "fieldset"): NodeListOf; - getElementsByTagName(name: "figcaption"): NodeListOf; - getElementsByTagName(name: "figure"): NodeListOf; - getElementsByTagName(name: "footer"): NodeListOf; - getElementsByTagName(name: "form"): NodeListOf; - getElementsByTagName(name: "h1"): NodeListOf; - getElementsByTagName(name: "h2"): NodeListOf; - getElementsByTagName(name: "h3"): NodeListOf; - getElementsByTagName(name: "h4"): NodeListOf; - getElementsByTagName(name: "h5"): NodeListOf; - getElementsByTagName(name: "h6"): NodeListOf; - getElementsByTagName(name: "head"): NodeListOf; - getElementsByTagName(name: "header"): NodeListOf; - getElementsByTagName(name: "hgroup"): NodeListOf; - getElementsByTagName(name: "hr"): NodeListOf; - getElementsByTagName(name: "html"): NodeListOf; - getElementsByTagName(name: "i"): NodeListOf; - getElementsByTagName(name: "iframe"): NodeListOf; - getElementsByTagName(name: "img"): NodeListOf; - getElementsByTagName(name: "input"): NodeListOf; - getElementsByTagName(name: "ins"): NodeListOf; - getElementsByTagName(name: "kbd"): NodeListOf; - getElementsByTagName(name: "label"): NodeListOf; - getElementsByTagName(name: "legend"): NodeListOf; - getElementsByTagName(name: "li"): NodeListOf; - getElementsByTagName(name: "link"): NodeListOf; - getElementsByTagName(name: "main"): NodeListOf; - getElementsByTagName(name: "map"): NodeListOf; - getElementsByTagName(name: "mark"): NodeListOf; - getElementsByTagName(name: "menu"): NodeListOf; - getElementsByTagName(name: "meta"): NodeListOf; - getElementsByTagName(name: "nav"): NodeListOf; - getElementsByTagName(name: "noscript"): NodeListOf; - getElementsByTagName(name: "object"): NodeListOf; - getElementsByTagName(name: "ol"): NodeListOf; - getElementsByTagName(name: "optgroup"): NodeListOf; - getElementsByTagName(name: "option"): NodeListOf; - getElementsByTagName(name: "p"): NodeListOf; - getElementsByTagName(name: "param"): NodeListOf; - getElementsByTagName(name: "pre"): NodeListOf; - getElementsByTagName(name: "progress"): NodeListOf; - getElementsByTagName(name: "q"): NodeListOf; - getElementsByTagName(name: "rp"): NodeListOf; - getElementsByTagName(name: "rt"): NodeListOf; - getElementsByTagName(name: "ruby"): NodeListOf; - getElementsByTagName(name: "s"): NodeListOf; - getElementsByTagName(name: "samp"): NodeListOf; - getElementsByTagName(name: "script"): NodeListOf; - getElementsByTagName(name: "section"): NodeListOf; - getElementsByTagName(name: "select"): NodeListOf; - getElementsByTagName(name: "small"): NodeListOf; - getElementsByTagName(name: "source"): NodeListOf; - getElementsByTagName(name: "span"): NodeListOf; - getElementsByTagName(name: "strong"): NodeListOf; - getElementsByTagName(name: "style"): NodeListOf; - getElementsByTagName(name: "sub"): NodeListOf; - getElementsByTagName(name: "summary"): NodeListOf; - getElementsByTagName(name: "sup"): NodeListOf; - getElementsByTagName(name: "table"): NodeListOf; - getElementsByTagName(name: "tbody"): NodeListOf; - getElementsByTagName(name: "td"): NodeListOf; - getElementsByTagName(name: "textarea"): NodeListOf; - getElementsByTagName(name: "tfoot"): NodeListOf; - getElementsByTagName(name: "th"): NodeListOf; - getElementsByTagName(name: "thead"): NodeListOf; - getElementsByTagName(name: "title"): NodeListOf; - getElementsByTagName(name: "tr"): NodeListOf; - getElementsByTagName(name: "track"): NodeListOf; - getElementsByTagName(name: "u"): NodeListOf; - getElementsByTagName(name: "ul"): NodeListOf; - getElementsByTagName(name: "var"): NodeListOf; - getElementsByTagName(name: "video"): NodeListOf; - getElementsByTagName(name: "wbr"): NodeListOf; - getElementsByTagName(name: string): NodeList; - getClientRects(): ClientRectList; - setAttributeNode(newAttr: Attr): Attr; - removeAttributeNode(oldAttr: Attr): Attr; - setAttribute(name?: string, value?: string): void; - removeAttributeNS(namespaceURI: string, localName: string): void; -} -declare var Element: { - prototype: Element; - new (): Element; -} - -interface HTMLNextIdElement extends HTMLElement { - n: string; -} -declare var HTMLNextIdElement: { - prototype: HTMLNextIdElement; - new (): HTMLNextIdElement; -} - -interface SVGPathSegMovetoRel extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegMovetoRel: { - prototype: SVGPathSegMovetoRel; - new (): SVGPathSegMovetoRel; -} - -interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - y1: SVGAnimatedLength; - x2: SVGAnimatedLength; - x1: SVGAnimatedLength; - y2: SVGAnimatedLength; -} -declare var SVGLineElement: { - prototype: SVGLineElement; - new (): SVGLineElement; -} - -interface HTMLParagraphElement extends HTMLElement, DOML2DeprecatedTextFlowControl { - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; -} -declare var HTMLParagraphElement: { - prototype: HTMLParagraphElement; - new (): HTMLParagraphElement; -} - -interface HTMLAreasCollection extends HTMLCollection { - /** - * Removes an element from the collection. - */ - remove(index?: number): void; - /** - * Adds an element to the areas, controlRange, or options collection. - */ - add(element: HTMLElement, before?: any): void; -} -declare var HTMLAreasCollection: { - prototype: HTMLAreasCollection; - new (): HTMLAreasCollection; -} - -interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace { -} -declare var SVGDescElement: { - prototype: SVGDescElement; - new (): SVGDescElement; -} - -interface Node extends EventTarget { - nodeType: number; - previousSibling: Node; - localName: string; - namespaceURI: string; - textContent: string; - parentNode: Node; - nextSibling: Node; - nodeValue: string; - lastChild: Node; - childNodes: NodeList; - nodeName: string; - ownerDocument: Document; - attributes: NamedNodeMap; - firstChild: Node; - prefix: string; - removeChild(oldChild: Node): Node; - appendChild(newChild: Node): Node; - isSupported(feature: string, version: string): boolean; - isEqualNode(arg: Node): boolean; - lookupPrefix(namespaceURI: string): string; - isDefaultNamespace(namespaceURI: string): boolean; - compareDocumentPosition(other: Node): number; - normalize(): void; - isSameNode(other: Node): boolean; - hasAttributes(): boolean; - lookupNamespaceURI(prefix: string): string; - cloneNode(deep?: boolean): Node; - hasChildNodes(): boolean; - replaceChild(newChild: Node, oldChild: Node): Node; - insertBefore(newChild: Node, refChild?: Node): Node; - ENTITY_REFERENCE_NODE: number; - ATTRIBUTE_NODE: number; - DOCUMENT_FRAGMENT_NODE: number; - TEXT_NODE: number; - ELEMENT_NODE: number; - COMMENT_NODE: number; - DOCUMENT_POSITION_DISCONNECTED: number; - DOCUMENT_POSITION_CONTAINED_BY: number; - DOCUMENT_POSITION_CONTAINS: number; - DOCUMENT_TYPE_NODE: number; - DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number; - DOCUMENT_NODE: number; - ENTITY_NODE: number; - PROCESSING_INSTRUCTION_NODE: number; - CDATA_SECTION_NODE: number; - NOTATION_NODE: number; - DOCUMENT_POSITION_FOLLOWING: number; - DOCUMENT_POSITION_PRECEDING: number; -} -declare var Node: { - prototype: Node; - new (): Node; - ENTITY_REFERENCE_NODE: number; - ATTRIBUTE_NODE: number; - DOCUMENT_FRAGMENT_NODE: number; - TEXT_NODE: number; - ELEMENT_NODE: number; - COMMENT_NODE: number; - DOCUMENT_POSITION_DISCONNECTED: number; - DOCUMENT_POSITION_CONTAINED_BY: number; - DOCUMENT_POSITION_CONTAINS: number; - DOCUMENT_TYPE_NODE: number; - DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number; - DOCUMENT_NODE: number; - ENTITY_NODE: number; - PROCESSING_INSTRUCTION_NODE: number; - CDATA_SECTION_NODE: number; - NOTATION_NODE: number; - DOCUMENT_POSITION_FOLLOWING: number; - DOCUMENT_POSITION_PRECEDING: number; -} - -interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegCurvetoQuadraticSmoothRel: { - prototype: SVGPathSegCurvetoQuadraticSmoothRel; - new (): SVGPathSegCurvetoQuadraticSmoothRel; -} - -interface DOML2DeprecatedListSpaceReduction { - compact: boolean; -} - -interface MSScriptHost { -} -declare var MSScriptHost: { - prototype: MSScriptHost; - new (): MSScriptHost; -} - -interface SVGClipPathElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - clipPathUnits: SVGAnimatedEnumeration; -} -declare var SVGClipPathElement: { - prototype: SVGClipPathElement; - new (): SVGClipPathElement; -} - -interface MouseEvent extends UIEvent { - toElement: Element; - layerY: number; - fromElement: Element; - which: number; - pageX: number; - offsetY: number; - x: number; - y: number; - metaKey: boolean; - altKey: boolean; - ctrlKey: boolean; - offsetX: number; - screenX: number; - clientY: number; - shiftKey: boolean; - layerX: number; - screenY: number; - relatedTarget: EventTarget; - button: number; - pageY: number; - buttons: number; - clientX: number; - initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void; - getModifierState(keyArg: string): boolean; -} -declare var MouseEvent: { - prototype: MouseEvent; - new (): MouseEvent; -} - -interface RangeException { - code: number; - message: string; - toString(): string; - INVALID_NODE_TYPE_ERR: number; - BAD_BOUNDARYPOINTS_ERR: number; -} -declare var RangeException: { - prototype: RangeException; - new (): RangeException; - INVALID_NODE_TYPE_ERR: number; - BAD_BOUNDARYPOINTS_ERR: number; -} - -interface SVGTextPositioningElement extends SVGTextContentElement { - y: SVGAnimatedLengthList; - rotate: SVGAnimatedNumberList; - dy: SVGAnimatedLengthList; - x: SVGAnimatedLengthList; - dx: SVGAnimatedLengthList; -} -declare var SVGTextPositioningElement: { - prototype: SVGTextPositioningElement; - new (): SVGTextPositioningElement; -} - -interface HTMLAppletElement extends HTMLElement, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions { - width: number; - /** - * Sets or retrieves the Internet media type for the code associated with the object. - */ - codeType: string; - object: string; - form: HTMLFormElement; - code: string; - /** - * Sets or retrieves a character string that can be used to implement your own archive functionality for the object. - */ - archive: string; - /** - * Sets or retrieves a text alternative to the graphic. - */ - alt: string; - /** - * Sets or retrieves a message to be displayed while an object is loading. - */ - standby: string; - /** - * Sets or retrieves the class identifier for the object. - */ - classid: string; - /** - * Sets or retrieves the shape of the object. - */ - name: string; - /** - * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. - */ - useMap: string; - /** - * Sets or retrieves the URL that references the data of the object. - */ - data: string; - /** - * Sets or retrieves the height of the object. - */ - height: string; - /** - * Gets or sets the optional alternative HTML script to execute if the object fails to load. - */ - altHtml: string; - /** - * Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned. - */ - contentDocument: Document; - /** - * Sets or retrieves the URL of the component. - */ - codeBase: string; - /** - * Sets or retrieves a character string that can be used to implement your own declare functionality for the object. - */ - declare: boolean; - /** - * Returns the content type of the object. - */ - type: string; - /** - * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element. - */ - BaseHref: string; -} -declare var HTMLAppletElement: { - prototype: HTMLAppletElement; - new (): HTMLAppletElement; -} - -interface TextMetrics { - width: number; -} -declare var TextMetrics: { - prototype: TextMetrics; - new (): TextMetrics; -} - -interface DocumentEvent { - createEvent(eventInterface: string): Event; -} - -interface HTMLOListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { - /** - * The starting number. - */ - start: number; -} -declare var HTMLOListElement: { - prototype: HTMLOListElement; - new (): HTMLOListElement; -} - -interface SVGPathSegLinetoVerticalRel extends SVGPathSeg { - y: number; -} -declare var SVGPathSegLinetoVerticalRel: { - prototype: SVGPathSegLinetoVerticalRel; - new (): SVGPathSegLinetoVerticalRel; -} - -interface SVGAnimatedString { - animVal: string; - baseVal: string; -} -declare var SVGAnimatedString: { - prototype: SVGAnimatedString; - new (): SVGAnimatedString; -} - -interface CDATASection extends Text { -} -declare var CDATASection: { - prototype: CDATASection; - new (): CDATASection; -} - -interface StyleMedia { - type: string; - matchMedium(mediaquery: string): boolean; -} -declare var StyleMedia: { - prototype: StyleMedia; - new (): StyleMedia; -} - -interface HTMLSelectElement extends HTMLElement, MSHTMLCollectionExtensions, MSDataBindingExtensions { - options: HTMLSelectElement; - /** - * Sets or retrieves the value which is returned to the server when the form control is submitted. - */ - value: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Sets or retrieves the number of rows in the list box. - */ - size: number; - /** - * Sets or retrieves the number of objects in a collection. - */ - length: number; - /** - * Sets or retrieves the index of the selected option in a select object. - */ - selectedIndex: number; - /** - * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. - */ - multiple: boolean; - /** - * Retrieves the type of select control based on the value of the MULTIPLE attribute. - */ - type: string; - /** - * Removes an element from the collection. - * @param index Number that specifies the zero-based index of the element to remove from the collection. - */ - remove(index?: number): void; - /** - * Adds an element to the areas, controlRange, or options collection. - * @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection. - * @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection. - */ - add(element: HTMLElement, before?: any): void; - /** - * Retrieves a select object or an object from an options collection. - * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made. - * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned. - */ - item(name?: any, index?: any): any; - /** - * Retrieves a select object or an object from an options collection. - * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made. - */ - namedItem(name: string): any; - [name: string]: any; -} -declare var HTMLSelectElement: { - prototype: HTMLSelectElement; - new (): HTMLSelectElement; -} - -interface TextRange { - boundingLeft: number; - htmlText: string; - offsetLeft: number; - boundingWidth: number; - boundingHeight: number; - boundingTop: number; - text: string; - offsetTop: number; - moveToPoint(x: number, y: number): void; - queryCommandValue(cmdID: string): any; - getBookmark(): string; - move(unit: string, count?: number): number; - queryCommandIndeterm(cmdID: string): boolean; - scrollIntoView(fStart?: boolean): void; - findText(string: string, count?: number, flags?: number): boolean; - execCommand(cmdID: string, showUI?: boolean, value?: any): boolean; - getBoundingClientRect(): ClientRect; - moveToBookmark(bookmark: string): boolean; - isEqual(range: TextRange): boolean; - duplicate(): TextRange; - collapse(start?: boolean): void; - queryCommandText(cmdID: string): string; - select(): void; - pasteHTML(html: string): void; - inRange(range: TextRange): boolean; - moveEnd(unit: string, count?: number): number; - getClientRects(): ClientRectList; - moveStart(unit: string, count?: number): number; - parentElement(): Element; - queryCommandState(cmdID: string): boolean; - compareEndPoints(how: string, sourceRange: TextRange): number; - execCommandShowHelp(cmdID: string): boolean; - moveToElementText(element: Element): void; - expand(Unit: string): boolean; - queryCommandSupported(cmdID: string): boolean; - setEndPoint(how: string, SourceRange: TextRange): void; - queryCommandEnabled(cmdID: string): boolean; -} -declare var TextRange: { - prototype: TextRange; - new (): TextRange; -} - -interface SVGTests { - requiredFeatures: SVGStringList; - requiredExtensions: SVGStringList; - systemLanguage: SVGStringList; - hasExtension(extension: string): boolean; -} - -interface HTMLBlockElement extends HTMLElement, DOML2DeprecatedTextFlowControl { - /** - * Sets or retrieves the width of the object. - */ - width: number; - /** - * Sets or retrieves reference information about the object. - */ - cite: string; -} -declare var HTMLBlockElement: { - prototype: HTMLBlockElement; - new (): HTMLBlockElement; -} - -interface CSSStyleSheet extends StyleSheet { - owningElement: Element; - imports: StyleSheetList; - isAlternate: boolean; - rules: MSCSSRuleList; - isPrefAlternate: boolean; - readOnly: boolean; - cssText: string; - ownerRule: CSSRule; - href: string; - cssRules: CSSRuleList; - id: string; - pages: StyleSheetPageList; - addImport(bstrURL: string, lIndex?: number): number; - addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number; - insertRule(rule: string, index?: number): number; - removeRule(lIndex: number): void; - deleteRule(index?: number): void; - addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number; - removeImport(lIndex: number): void; -} -declare var CSSStyleSheet: { - prototype: CSSStyleSheet; - new (): CSSStyleSheet; -} - -interface MSSelection { - type: string; - typeDetail: string; - createRange(): TextRange; - clear(): void; - createRangeCollection(): TextRangeCollection; - empty(): void; -} -declare var MSSelection: { - prototype: MSSelection; - new (): MSSelection; -} - -interface HTMLMetaElement extends HTMLElement { - /** - * Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header. - */ - httpEquiv: string; - /** - * Sets or retrieves the value specified in the content attribute of the meta object. - */ - name: string; - /** - * Gets or sets meta-information to associate with httpEquiv or name. - */ - content: string; - /** - * Sets or retrieves the URL property that will be loaded after the specified time has elapsed. - */ - url: string; - /** - * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object. - */ - scheme: string; - /** - * Sets or retrieves the character set used to encode the object. - */ - charset: string; -} -declare var HTMLMetaElement: { - prototype: HTMLMetaElement; - new (): HTMLMetaElement; -} - -interface SVGPatternElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired, SVGURIReference { - patternUnits: SVGAnimatedEnumeration; - y: SVGAnimatedLength; - width: SVGAnimatedLength; - x: SVGAnimatedLength; - patternContentUnits: SVGAnimatedEnumeration; - patternTransform: SVGAnimatedTransformList; - height: SVGAnimatedLength; -} -declare var SVGPatternElement: { - prototype: SVGPatternElement; - new (): SVGPatternElement; -} - -interface SVGAnimatedAngle { - animVal: SVGAngle; - baseVal: SVGAngle; -} -declare var SVGAnimatedAngle: { - prototype: SVGAnimatedAngle; - new (): SVGAnimatedAngle; -} - -interface Selection { - isCollapsed: boolean; - anchorNode: Node; - focusNode: Node; - anchorOffset: number; - focusOffset: number; - rangeCount: number; - addRange(range: Range): void; - collapseToEnd(): void; - toString(): string; - selectAllChildren(parentNode: Node): void; - getRangeAt(index: number): Range; - collapse(parentNode: Node, offset: number): void; - removeAllRanges(): void; - collapseToStart(): void; - deleteFromDocument(): void; - removeRange(range: Range): void; -} -declare var Selection: { - prototype: Selection; - new (): Selection; -} - -interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference { - type: string; -} -declare var SVGScriptElement: { - prototype: SVGScriptElement; - new (): SVGScriptElement; -} - -interface HTMLDDElement extends HTMLElement { - /** - * Sets or retrieves whether the browser automatically performs wordwrap. - */ - noWrap: boolean; -} -declare var HTMLDDElement: { - prototype: HTMLDDElement; - new (): HTMLDDElement; -} - -interface MSDataBindingRecordSetReadonlyExtensions { - recordset: Object; - namedRecordset(dataMember: string, hierarchy?: any): Object; -} - -interface CSSStyleRule extends CSSRule { - selectorText: string; - style: MSStyleCSSProperties; - readOnly: boolean; -} -declare var CSSStyleRule: { - prototype: CSSStyleRule; - new (): CSSStyleRule; -} - -interface NodeIterator { - whatToShow: number; - filter: NodeFilter; - root: Node; - expandEntityReferences: boolean; - nextNode(): Node; - detach(): void; - previousNode(): Node; -} -declare var NodeIterator: { - prototype: NodeIterator; - new (): NodeIterator; -} - -interface SVGViewElement extends SVGElement, SVGZoomAndPan, SVGFitToViewBox, SVGExternalResourcesRequired { - viewTarget: SVGStringList; -} -declare var SVGViewElement: { - prototype: SVGViewElement; - new (): SVGViewElement; -} - -interface HTMLLinkElement extends HTMLElement, LinkStyle { - /** - * Sets or retrieves the relationship between the object and the destination of the link. - */ - rel: string; - /** - * Sets or retrieves the window or frame at which to target content. - */ - target: string; - /** - * Sets or retrieves a destination URL or an anchor point. - */ - href: string; - /** - * Sets or retrieves the media type. - */ - media: string; - /** - * Sets or retrieves the relationship between the object and the destination of the link. - */ - rev: string; - /** - * Sets or retrieves the MIME type of the object. - */ - type: string; - /** - * Sets or retrieves the character set used to encode the object. - */ - charset: string; - /** - * Sets or retrieves the language code of the object. - */ - hreflang: string; -} -declare var HTMLLinkElement: { - prototype: HTMLLinkElement; - new (): HTMLLinkElement; -} - -interface SVGLocatable { - farthestViewportElement: SVGElement; - nearestViewportElement: SVGElement; - getBBox(): SVGRect; - getTransformToElement(element: SVGElement): SVGMatrix; - getCTM(): SVGMatrix; - getScreenCTM(): SVGMatrix; -} - -interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty { - /** - * Sets or retrieves the current typeface family. - */ - face: string; -} -declare var HTMLFontElement: { - prototype: HTMLFontElement; - new (): HTMLFontElement; -} - -interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace { -} -declare var SVGTitleElement: { - prototype: SVGTitleElement; - new (): SVGTitleElement; -} - -interface ControlRangeCollection { - length: number; - queryCommandValue(cmdID: string): any; - remove(index: number): void; - add(item: Element): void; - queryCommandIndeterm(cmdID: string): boolean; - scrollIntoView(varargStart?: any): void; - item(index: number): Element; - [index: number]: Element; - execCommand(cmdID: string, showUI?: boolean, value?: any): boolean; - addElement(item: Element): void; - queryCommandState(cmdID: string): boolean; - queryCommandSupported(cmdID: string): boolean; - queryCommandEnabled(cmdID: string): boolean; - queryCommandText(cmdID: string): string; - select(): void; -} -declare var ControlRangeCollection: { - prototype: ControlRangeCollection; - new (): ControlRangeCollection; -} - -interface MSNamespaceInfo extends MSEventAttachmentTarget { - urn: string; - onreadystatechange: (ev: Event) => any; - name: string; - readyState: string; - doImport(implementationUrl: string): void; -} -declare var MSNamespaceInfo: { - prototype: MSNamespaceInfo; - new (): MSNamespaceInfo; -} - -interface WindowSessionStorage { - sessionStorage: Storage; -} - -interface SVGAnimatedTransformList { - animVal: SVGTransformList; - baseVal: SVGTransformList; -} -declare var SVGAnimatedTransformList: { - prototype: SVGAnimatedTransformList; - new (): SVGAnimatedTransformList; -} - -interface HTMLTableCaptionElement extends HTMLElement { - /** - * Sets or retrieves the alignment of the caption or legend. - */ - align: string; - /** - * Sets or retrieves whether the caption appears at the top or bottom of the table. - */ - vAlign: string; -} -declare var HTMLTableCaptionElement: { - prototype: HTMLTableCaptionElement; - new (): HTMLTableCaptionElement; -} - -interface HTMLOptionElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the ordinal position of an option in a list box. - */ - index: number; - /** - * Sets or retrieves the status of an option. - */ - defaultSelected: boolean; - /** - * Sets or retrieves the value which is returned to the server when the form control is submitted. - */ - value: string; - /** - * Sets or retrieves the text string specified by the option tag. - */ - text: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves a value that you can use to implement your own label functionality for the object. - */ - label: string; - /** - * Sets or retrieves whether the option in the list box is the default item. - */ - selected: boolean; - create(): HTMLOptionElement; -} -declare var HTMLOptionElement: { - prototype: HTMLOptionElement; - new (): HTMLOptionElement; -} - -interface HTMLMapElement extends HTMLElement { - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Retrieves a collection of the area objects defined for the given map object. - */ - areas: HTMLAreasCollection; -} -declare var HTMLMapElement: { - prototype: HTMLMapElement; - new (): HTMLMapElement; -} - -interface HTMLMenuElement extends HTMLElement, DOML2DeprecatedListSpaceReduction { - type: string; -} -declare var HTMLMenuElement: { - prototype: HTMLMenuElement; - new (): HTMLMenuElement; -} - -interface MouseWheelEvent extends MouseEvent { - wheelDelta: number; - initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void; -} -declare var MouseWheelEvent: { - prototype: MouseWheelEvent; - new (): MouseWheelEvent; -} - -interface SVGFitToViewBox { - viewBox: SVGAnimatedRect; - preserveAspectRatio: SVGAnimatedPreserveAspectRatio; -} - -interface SVGPointList { - numberOfItems: number; - replaceItem(newItem: SVGPoint, index: number): SVGPoint; - getItem(index: number): SVGPoint; - clear(): void; - appendItem(newItem: SVGPoint): SVGPoint; - initialize(newItem: SVGPoint): SVGPoint; - removeItem(index: number): SVGPoint; - insertItemBefore(newItem: SVGPoint, index: number): SVGPoint; -} -declare var SVGPointList: { - prototype: SVGPointList; - new (): SVGPointList; -} - -interface SVGAnimatedLengthList { - animVal: SVGLengthList; - baseVal: SVGLengthList; -} -declare var SVGAnimatedLengthList: { - prototype: SVGAnimatedLengthList; - new (): SVGAnimatedLengthList; -} - -interface Window extends EventTarget, MSEventAttachmentTarget, WindowLocalStorage, MSWindowExtensions, WindowSessionStorage, WindowTimers { - ondragend: (ev: DragEvent) => any; - onkeydown: (ev: KeyboardEvent) => any; - ondragover: (ev: DragEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onreset: (ev: Event) => any; - onmouseup: (ev: MouseEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrag: (ev: DragEvent) => any; - screenX: number; - onmouseover: (ev: MouseEvent) => any; - ondragleave: (ev: DragEvent) => any; - history: History; - pageXOffset: number; - name: string; - onafterprint: (ev: Event) => any; - onpause: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - top: Window; - onmousedown: (ev: MouseEvent) => any; - onseeked: (ev: Event) => any; - opener: Window; - onclick: (ev: MouseEvent) => any; - innerHeight: number; - onwaiting: (ev: Event) => any; - ononline: (ev: Event) => any; - ondurationchange: (ev: Event) => any; - frames: Window; - onblur: (ev: FocusEvent) => any; - onemptied: (ev: Event) => any; - onseeking: (ev: Event) => any; - oncanplay: (ev: Event) => any; - outerWidth: number; - onstalled: (ev: Event) => any; - onmousemove: (ev: MouseEvent) => any; - innerWidth: number; - onoffline: (ev: Event) => any; - length: number; - screen: Screen; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onratechange: (ev: Event) => any; - onstorage: (ev: StorageEvent) => any; - onloadstart: (ev: Event) => any; - ondragenter: (ev: DragEvent) => any; - onsubmit: (ev: Event) => any; - self: Window; - document: Document; - onprogress: (ev: any) => any; - ondblclick: (ev: MouseEvent) => any; - pageYOffset: number; - oncontextmenu: (ev: MouseEvent) => any; - onchange: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onplay: (ev: Event) => any; - onerror: ErrorEventHandler; - onplaying: (ev: Event) => any; - parent: Window; - location: Location; - oncanplaythrough: (ev: Event) => any; - onabort: (ev: UIEvent) => any; - onreadystatechange: (ev: Event) => any; - outerHeight: number; - onkeypress: (ev: KeyboardEvent) => any; - frameElement: Element; - onloadeddata: (ev: Event) => any; - onsuspend: (ev: Event) => any; - window: Window; - onfocus: (ev: FocusEvent) => any; - onmessage: (ev: MessageEvent) => any; - ontimeupdate: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onselect: (ev: UIEvent) => any; - navigator: Navigator; - styleMedia: StyleMedia; - ondrop: (ev: DragEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onended: (ev: Event) => any; - onhashchange: (ev: Event) => any; - onunload: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - screenY: number; - onmousewheel: (ev: MouseWheelEvent) => any; - onload: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - oninput: (ev: Event) => any; - performance: Performance; - alert(message?: any): void; - scroll(x?: number, y?: number): void; - focus(): void; - scrollTo(x?: number, y?: number): void; - print(): void; - prompt(message?: string, defaul?: string): string; - toString(): string; - open(url?: string, target?: string, features?: string, replace?: boolean): Window; - scrollBy(x?: number, y?: number): void; - confirm(message?: string): boolean; - close(): void; - postMessage(message: any, targetOrigin: string, ports?: any): void; - showModalDialog(url?: string, argument?: any, options?: any): any; - blur(): void; - getSelection(): Selection; - getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; -} -declare var Window: { - prototype: Window; - new (): Window; -} - -interface SVGAnimatedPreserveAspectRatio { - animVal: SVGPreserveAspectRatio; - baseVal: SVGPreserveAspectRatio; -} -declare var SVGAnimatedPreserveAspectRatio: { - prototype: SVGAnimatedPreserveAspectRatio; - new (): SVGAnimatedPreserveAspectRatio; -} - -interface MSSiteModeEvent extends Event { - buttonID: number; - actionURL: string; -} -declare var MSSiteModeEvent: { - prototype: MSSiteModeEvent; - new (): MSSiteModeEvent; -} - -interface DOML2DeprecatedTextFlowControl { - clear: string; -} - -interface StyleSheetPageList { - length: number; - item(index: number): CSSPageRule; - [index: number]: CSSPageRule; -} -declare var StyleSheetPageList: { - prototype: StyleSheetPageList; - new (): StyleSheetPageList; -} - -interface MSCSSProperties extends CSSStyleDeclaration { - scrollbarShadowColor: string; - scrollbarHighlightColor: string; - layoutGridChar: string; - layoutGridType: string; - textAutospace: string; - textKashidaSpace: string; - writingMode: string; - scrollbarFaceColor: string; - backgroundPositionY: string; - lineBreak: string; - imeMode: string; - msBlockProgression: string; - layoutGridLine: string; - scrollbarBaseColor: string; - layoutGrid: string; - layoutFlow: string; - textKashida: string; - filter: string; - zoom: string; - scrollbarArrowColor: string; - behavior: string; - backgroundPositionX: string; - accelerator: string; - layoutGridMode: string; - textJustifyTrim: string; - scrollbar3dLightColor: string; - msInterpolationMode: string; - scrollbarTrackColor: string; - scrollbarDarkShadowColor: string; - styleFloat: string; - getAttribute(attributeName: string, flags?: number): any; - setAttribute(attributeName: string, AttributeValue: any, flags?: number): void; - removeAttribute(attributeName: string, flags?: number): boolean; -} -declare var MSCSSProperties: { - prototype: MSCSSProperties; - new (): MSCSSProperties; -} - -interface HTMLCollection extends MSHTMLCollectionExtensions { - /** - * Sets or retrieves the number of objects in a collection. - */ - length: number; - /** - * Retrieves an object from various collections. - */ - item(nameOrIndex?: any, optionalIndex?: any): Element; - /** - * Retrieves a select object or an object from an options collection. - */ - namedItem(name: string): Element; - [name: number]: Element; -} -declare var HTMLCollection: { - prototype: HTMLCollection; - new (): HTMLCollection; -} - -interface SVGExternalResourcesRequired { - externalResourcesRequired: SVGAnimatedBoolean; -} - -interface HTMLImageElement extends HTMLElement, MSImageResourceExtensions, MSDataBindingExtensions, MSResourceMetadata { - /** - * Sets or retrieves the width of the object. - */ - width: number; - /** - * Sets or retrieves the vertical margin for the object. - */ - vspace: number; - /** - * The original height of the image resource before sizing. - */ - naturalHeight: number; - /** - * Sets or retrieves a text alternative to the graphic. - */ - alt: string; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * The address or URL of the a media resource that is to be considered. - */ - src: string; - /** - * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. - */ - useMap: string; - /** - * The original width of the image resource before sizing. - */ - naturalWidth: number; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Sets or retrieves the height of the object. - */ - height: number; - /** - * Specifies the properties of a border drawn around an object. - */ - border: string; - /** - * Sets or retrieves the width of the border to draw around the object. - */ - hspace: number; - /** - * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object. - */ - longDesc: string; - /** - * Contains the hypertext reference (HREF) of the URL. - */ - href: string; - /** - * Sets or retrieves whether the image is a server-side image map. - */ - isMap: boolean; - /** - * Retrieves whether the object is fully loaded. - */ - complete: boolean; - create(): HTMLImageElement; -} -declare var HTMLImageElement: { - prototype: HTMLImageElement; - new (): HTMLImageElement; -} - -interface HTMLAreaElement extends HTMLElement { - /** - * Sets or retrieves the protocol portion of a URL. - */ - protocol: string; - /** - * Sets or retrieves the substring of the href property that follows the question mark. - */ - search: string; - /** - * Sets or retrieves a text alternative to the graphic. - */ - alt: string; - /** - * Sets or retrieves the coordinates of the object. - */ - coords: string; - /** - * Sets or retrieves the host name part of the location or URL. - */ - hostname: string; - /** - * Sets or retrieves the port number associated with a URL. - */ - port: string; - /** - * Sets or retrieves the file name or path specified by the object. - */ - pathname: string; - /** - * Sets or retrieves the hostname and port number of the location or URL. - */ - host: string; - /** - * Sets or retrieves the subsection of the href property that follows the number sign (#). - */ - hash: string; - /** - * Sets or retrieves the window or frame at which to target content. - */ - target: string; - /** - * Sets or retrieves a destination URL or an anchor point. - */ - href: string; - /** - * Sets or gets whether clicks in this region cause action. - */ - noHref: boolean; - /** - * Sets or retrieves the shape of the object. - */ - shape: string; - /** - * Returns a string representation of an object. - */ - toString(): string; -} -declare var HTMLAreaElement: { - prototype: HTMLAreaElement; - new (): HTMLAreaElement; -} - -interface EventTarget { - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; - removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void; - dispatchEvent(evt: Event): boolean; -} - -interface SVGAngle { - valueAsString: string; - valueInSpecifiedUnits: number; - value: number; - unitType: number; - newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void; - convertToSpecifiedUnits(unitType: number): void; - SVG_ANGLETYPE_RAD: number; - SVG_ANGLETYPE_UNKNOWN: number; - SVG_ANGLETYPE_UNSPECIFIED: number; - SVG_ANGLETYPE_DEG: number; - SVG_ANGLETYPE_GRAD: number; -} -declare var SVGAngle: { - prototype: SVGAngle; - new (): SVGAngle; - SVG_ANGLETYPE_RAD: number; - SVG_ANGLETYPE_UNKNOWN: number; - SVG_ANGLETYPE_UNSPECIFIED: number; - SVG_ANGLETYPE_DEG: number; - SVG_ANGLETYPE_GRAD: number; -} - -interface HTMLButtonElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the default or selected value of the control. - */ - value: string; - status: any; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Gets the classification and default behavior of the button. - */ - type: string; - /** - * Creates a TextRange object for the element. - */ - createTextRange(): TextRange; -} -declare var HTMLButtonElement: { - prototype: HTMLButtonElement; - new (): HTMLButtonElement; -} - -interface HTMLSourceElement extends HTMLElement { - /** - * The address or URL of the a media resource that is to be considered. - */ - src: string; - /** - * Gets or sets the intended media type of the media source. - */ - media: string; - /** - * Gets or sets the MIME type of a media resource. - */ - type: string; -} -declare var HTMLSourceElement: { - prototype: HTMLSourceElement; - new (): HTMLSourceElement; -} - -interface CanvasGradient { - addColorStop(offset: number, color: string): void; -} -declare var CanvasGradient: { - prototype: CanvasGradient; - new (): CanvasGradient; -} - -interface KeyboardEvent extends UIEvent { - location: number; - keyCode: number; - shiftKey: boolean; - which: number; - locale: string; - key: string; - altKey: boolean; - metaKey: boolean; - char: string; - ctrlKey: boolean; - repeat: boolean; - charCode: number; - getModifierState(keyArg: string): boolean; - initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void; - DOM_KEY_LOCATION_RIGHT: number; - DOM_KEY_LOCATION_STANDARD: number; - DOM_KEY_LOCATION_LEFT: number; - DOM_KEY_LOCATION_NUMPAD: number; - DOM_KEY_LOCATION_JOYSTICK: number; - DOM_KEY_LOCATION_MOBILE: number; -} -declare var KeyboardEvent: { - prototype: KeyboardEvent; - new (): KeyboardEvent; - DOM_KEY_LOCATION_RIGHT: number; - DOM_KEY_LOCATION_STANDARD: number; - DOM_KEY_LOCATION_LEFT: number; - DOM_KEY_LOCATION_NUMPAD: number; - DOM_KEY_LOCATION_JOYSTICK: number; - DOM_KEY_LOCATION_MOBILE: number; -} - -interface Document extends Node, NodeSelector, MSEventAttachmentTarget, DocumentEvent, MSResourceMetadata, MSNodeExtensions { - /** - * Retrieves the collection of user agents and versions declared in the X-UA-Compatible - */ - compatible: MSCompatibleInfoCollection; - /** - * Fires when the user presses a key. - * @param ev The keyboard event - */ - onkeydown: (ev: KeyboardEvent) => any; - /** - * Fires when the user releases a key. - * @param ev The keyboard event - */ - onkeyup: (ev: KeyboardEvent) => any; - - /** - * Gets the implementation object of the current document. - */ - implementation: DOMImplementation; - /** - * Fires when the user resets a form. - * @param ev The event. - */ - onreset: (ev: Event) => any; - - /** - * Retrieves a collection of all script objects in the document. - */ - scripts: HTMLCollection; - - /** - * Fires when the user presses the F1 key while the browser is the active window. - * @param ev The event. - */ - onhelp: (ev: Event) => any; - - /** - * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. - * @param ev The drag event. - */ - ondragleave: (ev: DragEvent) => any; - - /** - * Gets or sets the character set used to encode the object. - */ - charset: string; - - /** - * Fires for an element just prior to setting focus on that element. - * @param ev The focus event - */ - onfocusin: (ev: FocusEvent) => any; - - - /** - * Sets or gets the color of the links that the user has visited. - */ - vlinkColor: string; - - /** - * Occurs when the seek operation ends. - * @param ev The event. - */ - onseeked: (ev: Event) => any; - - security: string; - - /** - * Contains the title of the document. - */ - title: string; - - /** - * Retrieves a collection of namespace objects. - */ - namespaces: MSNamespaceInfoCollection; - - /** - * Gets the default character set from the current regional language settings. - */ - defaultCharset: string; - - /** - * Retrieves a collection of all embed objects in the document. - */ - embeds: HTMLCollection; - - /** - * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. - */ - styleSheets: StyleSheetList; - - /** - * Retrieves a collection of all window objects defined by the given document or defined by the document associated with the given window. - */ - frames: Window; - - /** - * Occurs when the duration attribute is updated. - * @param ev The event. - */ - ondurationchange: (ev: Event) => any; - - - /** - * Returns a reference to the collection of elements contained by the object. - */ - all: HTMLCollection; - - /** - * Retrieves a collection, in source order, of all form objects in the document. - */ - forms: HTMLCollection; - - /** - * Fires when the object loses the input focus. - * @param ev The focus event. - */ - onblur: (ev: FocusEvent) => any; - - - /** - * Sets or retrieves a value that indicates the reading order of the object. - */ - dir: string; - - /** - * Occurs when the media element is reset to its initial state. - * @param ev The event. - */ - onemptied: (ev: Event) => any; - - - /** - * Sets or gets a value that indicates whether the document can be edited. - */ - designMode: string; - - /** - * Occurs when the current playback position is moved. - * @param ev The event. - */ - onseeking: (ev: Event) => any; - - - /** - * Fires when the activeElement is changed from the current object to another object in the parent document. - * @param ev The UI Event - */ - ondeactivate: (ev: UIEvent) => any; - - - /** - * Occurs when playback is possible, but would require further buffering. - * @param ev The event. - */ - oncanplay: (ev: Event) => any; - - - /** - * Fires when the data set exposed by a data source object changes. - * @param ev The event. - */ - ondatasetchanged: (ev: MSEventObj) => any; - - - /** - * Fires when rows are about to be deleted from the recordset. - * @param ev The event - */ - onrowsdelete: (ev: MSEventObj) => any; - - Script: MSScriptHost; - - /** - * Occurs when Internet Explorer begins looking for media data. - * @param ev The event. - */ - onloadstart: (ev: Event) => any; - - - /** - * Gets the URL for the document, stripped of any character encoding. - */ - URLUnencoded: string; - - defaultView: Window; - - /** - * Fires when the user is about to make a control selection of the object. - * @param ev The event. - */ - oncontrolselect: (ev: MSEventObj) => any; - - - /** - * Fires on the target element when the user drags the object to a valid drop target. - * @param ev The drag event. - */ - ondragenter: (ev: DragEvent) => any; - - onsubmit: (ev: Event) => any; - - /** - * Returns the character encoding used to create the webpage that is loaded into the document object. - */ - inputEncoding: string; - - /** - * Gets the object that has the focus when the parent document has focus. - */ - activeElement: Element; - - /** - * Fires when the contents of the object or selection have changed. - * @param ev The event. - */ - onchange: (ev: Event) => any; - - - /** - * Retrieves a collection of all a objects that specify the href property and all area objects in the document. - */ - links: HTMLCollection; - - /** - * Retrieves an autogenerated, unique identifier for the object. - */ - uniqueID: string; - - /** - * Sets or gets the URL for the current document. - */ - URL: string; - - /** - * Fires immediately before the object is set as the active element. - * @param ev The event. - */ - onbeforeactivate: (ev: UIEvent) => any; - - head: HTMLHeadElement; - cookie: string; - xmlEncoding: string; - oncanplaythrough: (ev: Event) => any; - - /** - * Retrieves the document compatibility mode of the document. - */ - documentMode: number; - - characterSet: string; - - /** - * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order. - */ - anchors: HTMLCollection; - - onbeforeupdate: (ev: MSEventObj) => any; - - /** - * Fires to indicate that all data is available from the data source object. - * @param ev The event. - */ - ondatasetcomplete: (ev: MSEventObj) => any; - - plugins: HTMLCollection; - - /** - * Occurs if the load operation has been intentionally halted. - * @param ev The event. - */ - onsuspend: (ev: Event) => any; - - - /** - * Gets the root svg element in the document hierarchy. - */ - rootElement: SVGSVGElement; - - /** - * Retrieves a value that indicates the current state of the object. - */ - readyState: string; - - /** - * Gets the URL of the location that referred the user to the current page. - */ - referrer: string; - - /** - * Sets or gets the color of all active links in the document. - */ - alinkColor: string; - - /** - * Fires on a databound object when an error occurs while updating the associated data in the data source object. - * @param ev The event. - */ - onerrorupdate: (ev: MSEventObj) => any; - - - /** - * Gets a reference to the container object of the window. - */ - parentWindow: Window; - - /** - * Fires when the user moves the mouse pointer outside the boundaries of the object. - * @param ev The mouse event. - */ - onmouseout: (ev: MouseEvent) => any; - - - /** - * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. - * @param ev The event. - */ - onmsthumbnailclick: (ev: MSSiteModeEvent) => any; - - - /** - * Fires when the wheel button is rotated. - * @param ev The mouse event - */ - onmousewheel: (ev: MouseWheelEvent) => any; - - - /** - * Occurs when the volume is changed, or playback is muted or unmuted. - * @param ev The event. - */ - onvolumechange: (ev: Event) => any; - - - /** - * Fires when data changes in the data provider. - * @param ev The event. - */ - oncellchange: (ev: MSEventObj) => any; - - - /** - * Fires just before the data source control changes the current row in the object. - * @param ev The event. - */ - onrowexit: (ev: MSEventObj) => any; - - - /** - * Fires just after new rows are inserted in the current recordset. - * @param ev The event. - */ - onrowsinserted: (ev: MSEventObj) => any; - - - /** - * Gets or sets the version attribute specified in the declaration of an XML document. - */ - xmlVersion: string; - - msCapsLockWarningOff: boolean; - - /** - * Fires when a property changes on the object. - * @param ev The event. - */ - onpropertychange: (ev: MSEventObj) => any; - - - /** - * Fires on the source object when the user releases the mouse at the close of a drag operation. - * @param ev The event. - */ - ondragend: (ev: DragEvent) => any; - - - /** - * Gets an object representing the document type declaration associated with the current document. - */ - doctype: DocumentType; - - /** - * Fires on the target element continuously while the user drags the object over a valid drop target. - * @param ev The event. - */ - ondragover: (ev: DragEvent) => any; - - - /** - * Deprecated. Sets or retrieves a value that indicates the background color behind the object. - */ - bgColor: string; - - /** - * Fires on the source object when the user starts to drag a text selection or selected object. - * @param ev The event. - */ - ondragstart: (ev: DragEvent) => any; - - - /** - * Fires when the user releases a mouse button while the mouse is over the object. - * @param ev The mouse event. - */ - onmouseup: (ev: MouseEvent) => any; - - - /** - * Fires on the source object continuously during a drag operation. - * @param ev The event. - */ - ondrag: (ev: DragEvent) => any; - - - /** - * Fires when the user moves the mouse pointer into the object. - * @param ev The mouse event. - */ - onmouseover: (ev: MouseEvent) => any; - - - /** - * Sets or gets the color of the document links. - */ - linkColor: string; - - /** - * Occurs when playback is paused. - * @param ev The event. - */ - onpause: (ev: Event) => any; - - - /** - * Fires when the user clicks the object with either mouse button. - * @param ev The mouse event. - */ - onmousedown: (ev: MouseEvent) => any; - - - /** - * Fires when the user clicks the left mouse button on the object - * @param ev The mouse event. - */ - onclick: (ev: MouseEvent) => any; - - - /** - * Occurs when playback stops because the next frame of a video resource is not available. - * @param ev The event. - */ - onwaiting: (ev: Event) => any; - - - /** - * Fires when the user clicks the Stop button or leaves the Web page. - * @param ev The event. - */ - onstop: (ev: Event) => any; - - /** - * false (false)[rolls - */ - - /** - * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. - * @param ev The event. - */ - onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; - - - /** - * Retrieves a collection of all applet objects in the document. - */ - applets: HTMLCollection; - - /** - * Specifies the beginning and end of the document body. - */ - body: HTMLElement; - - /** - * Sets or gets the security domain of the document. - */ - domain: string; - - xmlStandalone: boolean; - - /** - * Represents the active selection, which is a highlighted block of text or other elements in the document that a user or a script can carry out some action on. - */ - selection: MSSelection; - - /** - * Occurs when the download has stopped. - * @param ev The event. - */ - onstalled: (ev: Event) => any; - - - /** - * Fires when the user moves the mouse over the object. - * @param ev The mouse event. - */ - onmousemove: (ev: MouseEvent) => any; - - - /** - * Gets a reference to the root node of the document. - */ - documentElement: HTMLElement; - - /** - * Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected. - * @param ev The event. - */ - onbeforeeditfocus: (ev: MSEventObj) => any; - - - /** - * Occurs when the playback rate is increased or decreased. - * @param ev The event. - */ - onratechange: (ev: Event) => any; - - - /** - * Occurs to indicate progress while downloading media data. - * @param ev The event. - */ - onprogress: (ev: any) => any; - - - /** - * Fires when the user double-clicks the object. - * @param ev The mouse event. - */ - ondblclick: (ev: MouseEvent) => any; - - - /** - * Fires when the user clicks the right mouse button in the client area, opening the context menu. - * @param ev The mouse event. - */ - oncontextmenu: (ev: MouseEvent) => any; - - - /** - * Occurs when the duration and dimensions of the media have been determined. - * @param ev The event. - */ - onloadedmetadata: (ev: Event) => any; - - media: string; - - /** - * Fires when an error occurs during object loading. - * @param ev The event. - */ - onerror: (ev: Event) => any; - - - /** - * Occurs when the play method is requested. - * @param ev The event. - */ - onplay: (ev: Event) => any; - - onafterupdate: (ev: MSEventObj) => any; - - /** - * Occurs when the audio or video has started playing. - * @param ev The event. - */ - onplaying: (ev: Event) => any; - - - /** - * Retrieves a collection, in source order, of img objects in the document. - */ - images: HTMLCollection; - - /** - * Contains information about the current URL. - */ - location: Location; - - /** - * Fires when the user aborts the download. - * @param ev The event. - */ - onabort: (ev: UIEvent) => any; - - - /** - * Fires for the current element with focus immediately after moving focus to another element. - * @param ev The event. - */ - onfocusout: (ev: FocusEvent) => any; - - - /** - * Fires when the selection state of a document changes. - * @param ev The event. - */ - onselectionchange: (ev: Event) => any; - - - /** - * Fires when a local DOM Storage area is written to disk. - * @param ev The event. - */ - onstoragecommit: (ev: StorageEvent) => any; - - - /** - * Fires periodically as data arrives from data source objects that asynchronously transmit their data. - * @param ev The event. - */ - ondataavailable: (ev: MSEventObj) => any; - - - /** - * Fires when the state of the object has changed. - * @param ev The event - */ - onreadystatechange: (ev: Event) => any; - - - /** - * Gets the date that the page was last modified, if the page supplies one. - */ - lastModified: string; - - /** - * Fires when the user presses an alphanumeric key. - * @param ev The event. - */ - onkeypress: (ev: KeyboardEvent) => any; - - - /** - * Occurs when media data is loaded at the current playback position. - * @param ev The event. - */ - onloadeddata: (ev: Event) => any; - - - /** - * Fires immediately before the activeElement is changed from the current object to another object in the parent document. - * @param ev The event. - */ - onbeforedeactivate: (ev: UIEvent) => any; - - - /** - * Fires when the object is set as the active element. - * @param ev The event. - */ - onactivate: (ev: UIEvent) => any; - - - onselectstart: (ev: Event) => any; - - /** - * Fires when the object receives focus. - * @param ev The event. - */ - onfocus: (ev: FocusEvent) => any; - - - /** - * Sets or gets the foreground (text) color of the document. - */ - fgColor: string; - - /** - * Occurs to indicate the current playback position. - * @param ev The event. - */ - ontimeupdate: (ev: Event) => any; - - - /** - * Fires when the current selection changes. - * @param ev The event. - */ - onselect: (ev: UIEvent) => any; - - ondrop: (ev: DragEvent) => any; - - /** - * Occurs when the end of playback is reached. - * @param ev The event - */ - onended: (ev: Event) => any; - - - /** - * Gets a value that indicates whether standards-compliant mode is switched on for the object. - */ - compatMode: string; - - /** - * Fires when the user repositions the scroll box in the scroll bar on the object. - * @param ev The event. - */ - onscroll: (ev: UIEvent) => any; - - - /** - * Fires to indicate that the current row has changed in the data source and new data values are available on the object. - * @param ev The event. - */ - onrowenter: (ev: MSEventObj) => any; - - - /** - * Fires immediately after the browser loads the object. - * @param ev The event. - */ - onload: (ev: Event) => any; - - oninput: (ev: Event) => any; - - /** - * Returns the current value of the document, range, or current selection for the given command. - * @param commandId String that specifies a command identifier. - */ - queryCommandValue(commandId: string): string; - - adoptNode(source: Node): Node; - - /** - * Returns a Boolean value that indicates whether the specified command is in the indeterminate state. - * @param commandId String that specifies a command identifier. - */ - queryCommandIndeterm(commandId: string): boolean; - - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList; - createProcessingInstruction(target: string, data: string): ProcessingInstruction; - - /** - * Executes a command on the current document, current selection, or the given range. - * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script. - * @param showUI Display the user interface, defaults to false. - * @param value Value to assign. - */ - execCommand(commandId: string, showUI?: boolean, value?: any): boolean; - - /** - * Returns the element for the specified x coordinate and the specified y coordinate. - * @param x The x-offset - * @param y The y-offset - */ - elementFromPoint(x: number, y: number): Element; - createCDATASection(data: string): CDATASection; - - /** - * Retrieves the string associated with a command. - * @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers. - */ - queryCommandText(commandId: string): string; - - /** - * Writes one or more HTML expressions to a document in the specified window. - * @param content Specifies the text and HTML tags to write. - */ - write(...content: string[]): void; - - /** - * Allows updating the print settings for the page. - */ - updateSettings(): void; - - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "a"): HTMLAnchorElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "abbr"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "address"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "area"): HTMLAreaElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "article"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "aside"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "audio"): HTMLAudioElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "b"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "base"): HTMLBaseElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "bdi"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "bdo"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "blockquote"): HTMLQuoteElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "body"): HTMLBodyElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "br"): HTMLBRElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "button"): HTMLButtonElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "canvas"): HTMLCanvasElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "caption"): HTMLTableCaptionElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "cite"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "code"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "col"): HTMLTableColElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "colgroup"): HTMLTableColElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "datalist"): HTMLDataListElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "dd"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "del"): HTMLModElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "dfn"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "div"): HTMLDivElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "dl"): HTMLDListElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "dt"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "em"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "embed"): HTMLEmbedElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "fieldset"): HTMLFieldSetElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "figcaption"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "figure"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "footer"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "form"): HTMLFormElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h1"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h2"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h3"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h4"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h5"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "h6"): HTMLHeadingElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "head"): HTMLHeadElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "header"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "hgroup"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "hr"): HTMLHRElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "html"): HTMLHtmlElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "i"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "iframe"): HTMLIFrameElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "img"): HTMLImageElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "input"): HTMLInputElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "ins"): HTMLModElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "kbd"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "label"): HTMLLabelElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "legend"): HTMLLegendElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "li"): HTMLLIElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "link"): HTMLLinkElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "main"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "map"): HTMLMapElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "mark"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "menu"): HTMLMenuElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "meta"): HTMLMetaElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "nav"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "noscript"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "object"): HTMLObjectElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "ol"): HTMLOListElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "optgroup"): HTMLOptGroupElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "option"): HTMLOptionElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "p"): HTMLParagraphElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "param"): HTMLParamElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "pre"): HTMLPreElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "progress"): HTMLProgressElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "q"): HTMLQuoteElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "rp"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "rt"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "ruby"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "s"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "samp"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "script"): HTMLScriptElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "section"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "select"): HTMLSelectElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "small"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "source"): HTMLSourceElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "span"): HTMLSpanElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "strong"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "style"): HTMLStyleElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "sub"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "summary"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "sup"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "table"): HTMLTableElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "tbody"): HTMLTableSectionElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "td"): HTMLTableDataCellElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "textarea"): HTMLTextAreaElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "tfoot"): HTMLTableSectionElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "th"): HTMLTableHeaderCellElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "thead"): HTMLTableSectionElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "title"): HTMLTitleElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "tr"): HTMLTableRowElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "track"): HTMLTrackElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "u"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "ul"): HTMLUListElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "var"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "video"): HTMLVideoElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: "wbr"): HTMLElement; - /** - * Creates an instance of the element for the specified tag. - * @param tagName The name of an element. - */ - createElement(tagName: string): HTMLElement; - - /** - * Removes mouse capture from the object in the current document. - */ - releaseCapture(): void; - - /** - * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window. - * @param content The text and HTML tags to write. - */ - writeln(...content: string[]): void; - createElementNS(namespaceURI: string, qualifiedName: string): Element; - - /** - * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method. - * @param url Specifies a MIME type for the document. - * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element. - * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported. - * @param replace Specifies whether the existing entry for the document is replaced in the history list. - */ - open(url?: string, name?: string, features?: string, replace?: boolean): any; - - /** - * Returns a Boolean value that indicates whether the current command is supported on the current range. - * @param commandId Specifies a command identifier. - */ - queryCommandSupported(commandId: string): boolean; - - /** - * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document. - * @param root The root element or node to start traversing on. - * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow. - * @param filter A custom NodeFilter function to use. - * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded. - */ - createTreeWalker(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): TreeWalker; - createAttributeNS(namespaceURI: string, qualifiedName: string): Attr; - - /** - * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document. - * @param commandId Specifies a command identifier. - */ - queryCommandEnabled(commandId: string): boolean; - - /** - * Causes the element to receive the focus and executes the code specified by the onfocus event. - */ - focus(): void; - - /** - * Closes an output stream and forces the sent data to display. - */ - close(): void; - - getElementsByClassName(classNames: string): NodeList; - importNode(importedNode: Node, deep: boolean): Node; - - /** - * Returns an empty range object that has both of its boundary points positioned at the beginning of the document. - */ - createRange(): Range; - - /** - * Fires a specified event on the object. - * @param eventName Specifies the name of the event to fire. - * @param eventObj Object that specifies the event object from which to obtain event object properties. - */ - fireEvent(eventName: string, eventObj?: any): boolean; - - /** - * Creates a comment object with the specified data. - * @param data Sets the comment object's data. - */ - createComment(data: string): Comment; - - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "a"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "abbr"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "address"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "area"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "article"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "aside"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "audio"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "b"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "base"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "bdi"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "bdo"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "blockquote"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "body"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "br"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "button"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "canvas"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "caption"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "cite"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "code"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "col"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "colgroup"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "datalist"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "dd"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "del"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "dfn"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "div"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "dl"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "dt"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "em"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "embed"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "fieldset"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "figcaption"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "figure"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "footer"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "form"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h1"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h2"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h3"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h4"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h5"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "h6"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "head"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "header"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "hgroup"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "hr"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "html"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "i"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "iframe"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "img"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "input"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "ins"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "kbd"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "label"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "legend"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "li"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "link"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "main"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "map"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "mark"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "menu"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "meta"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "nav"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "noscript"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "object"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "ol"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "optgroup"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "option"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "p"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "param"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "pre"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "progress"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "q"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "rp"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "rt"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "ruby"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "s"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "samp"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "script"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "section"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "select"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "small"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "source"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "span"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "strong"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "style"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "sub"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "summary"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "sup"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "table"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "tbody"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "td"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "textarea"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "tfoot"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "th"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "thead"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "title"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "tr"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "track"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "u"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "ul"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "var"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "video"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: "wbr"): NodeListOf; - /** - * Retrieves a collection of objects based on the specified element name. - * @param name Specifies the name of an element. - */ - getElementsByTagName(name: string): NodeList; - - /** - * Creates a new document. - */ - createDocumentFragment(): DocumentFragment; - - /** - * Creates a style sheet for the document. - * @param href Specifies how to add the style sheet to the document. If a file name is specified for the URL, the style information is added as a link object. If the URL contains style information, it is added to the style object. - * @param index Specifies the index that indicates where the new style sheet is inserted in the styleSheets collection. The default is to insert the new style sheet at the end of the collection. - */ - createStyleSheet(href?: string, index?: number): CSSStyleSheet; - - /** - * Gets a collection of objects based on the value of the NAME or ID attribute. - * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute. - */ - getElementsByName(elementName: string): NodeList; - - /** - * Returns a Boolean value that indicates the current state of the command. - * @param commandId String that specifies a command identifier. - */ - queryCommandState(commandId: string): boolean; - - /** - * Gets a value indicating whether the object currently has focus. - */ - hasFocus(): boolean; - - /** - * Displays help information for the given command identifier. - * @param commandId Displays help information for the given command identifier. - */ - execCommandShowHelp(commandId: string): boolean; - - /** - * Creates an attribute object with a specified name. - * @param name String that sets the attribute object's name. - */ - createAttribute(name: string): Attr; - - /** - * Creates a text string from the specified value. - * @param data String that specifies the nodeValue property of the text node. - */ - createTextNode(data: string): Text; - - /** - * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. - * @param root The root element or node to start traversing on. - * @param whatToShow The type of nodes or elements to appear in the node list - * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter. - * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded. - */ - createNodeIterator(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): NodeIterator; - - /** - * Generates an event object to pass event context information when you use the fireEvent method. - * @param eventObj An object that specifies an existing event object on which to base the new object. - */ - createEventObject(eventObj?: any): MSEventObj; - - /** - * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. - */ - getSelection(): Selection; - - /** - * Returns a reference to the first object with the specified value of the ID or NAME attribute. - * @param elementId String that specifies the ID value. Case-insensitive. - */ - getElementById(elementId: string): HTMLElement; -} - -declare var Document: { - prototype: Document; - new (): Document; -} - -interface MessageEvent extends Event { - source: Window; - origin: string; - data: any; - initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void; -} -declare var MessageEvent: { - prototype: MessageEvent; - new (): MessageEvent; -} - -interface SVGElement extends Element { - onmouseover: (ev: MouseEvent) => any; - viewportElement: SVGElement; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - ondblclick: (ev: MouseEvent) => any; - onfocusout: (ev: FocusEvent) => any; - onfocusin: (ev: FocusEvent) => any; - xmlbase: string; - onmousedown: (ev: MouseEvent) => any; - onload: (ev: Event) => any; - onmouseup: (ev: MouseEvent) => any; - onclick: (ev: MouseEvent) => any; - ownerSVGElement: SVGSVGElement; - id: string; -} -declare var SVGElement: { - prototype: SVGElement; - new (): SVGElement; -} - -interface HTMLScriptElement extends HTMLElement { - /** - * Sets or retrieves the status of the script. - */ - defer: boolean; - /** - * Retrieves or sets the text of the object as a string. - */ - text: string; - /** - * Retrieves the URL to an external file that contains the source code or data. - */ - src: string; - /** - * Sets or retrieves the object that is bound to the event script. - */ - htmlFor: string; - /** - * Sets or retrieves the character set used to encode the object. - */ - charset: string; - /** - * Sets or retrieves the MIME type for the associated scripting engine. - */ - type: string; - /** - * Sets or retrieves the event for which the script is written. - */ - event: string; -} -declare var HTMLScriptElement: { - prototype: HTMLScriptElement; - new (): HTMLScriptElement; -} - -interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle { - /** - * Retrieves the position of the object in the rows collection for the table. - */ - rowIndex: number; - /** - * Retrieves a collection of all cells in the table row. - */ - cells: HTMLCollection; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorLight: any; - /** - * Retrieves the position of the object in the collection. - */ - sectionRowIndex: number; - /** - * Sets or retrieves the border color of the object. - */ - borderColor: any; - /** - * Sets or retrieves the height of the object. - */ - height: any; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorDark: any; - /** - * Removes the specified cell from the table row, as well as from the cells collection. - * @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted. - */ - deleteCell(index?: number): void; - /** - * Creates a new cell in the table row, and adds the cell to the cells collection. - * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection. - */ - insertCell(index?: number): HTMLElement; -} -declare var HTMLTableRowElement: { - prototype: HTMLTableRowElement; - new (): HTMLTableRowElement; -} - -interface CanvasRenderingContext2D { - miterLimit: number; - font: string; - globalCompositeOperation: string; - msFillRule: string; - lineCap: string; - msImageSmoothingEnabled: boolean; - lineDashOffset: number; - shadowColor: string; - lineJoin: string; - shadowOffsetX: number; - lineWidth: number; - canvas: HTMLCanvasElement; - strokeStyle: any; - globalAlpha: number; - shadowOffsetY: number; - fillStyle: any; - shadowBlur: number; - textAlign: string; - textBaseline: string; - restore(): void; - setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; - save(): void; - arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void; - measureText(text: string): TextMetrics; - isPointInPath(x: number, y: number, fillRule?: string): boolean; - quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; - putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void; - rotate(angle: number): void; - fillText(text: string, x: number, y: number, maxWidth?: number): void; - translate(x: number, y: number): void; - scale(x: number, y: number): void; - createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient; - lineTo(x: number, y: number): void; - getLineDash(): Array; - fill(fillRule?: string): void; - createImageData(imageDataOrSw: any, sh?: number): ImageData; - createPattern(image: HTMLElement, repetition: string): CanvasPattern; - closePath(): void; - rect(x: number, y: number, w: number, h: number): void; - clip(fillRule?: string): void; - clearRect(x: number, y: number, w: number, h: number): void; - moveTo(x: number, y: number): void; - getImageData(sx: number, sy: number, sw: number, sh: number): ImageData; - fillRect(x: number, y: number, w: number, h: number): void; - bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; - drawImage(image: HTMLElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void; - transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; - stroke(): void; - strokeRect(x: number, y: number, w: number, h: number): void; - setLineDash(segments: Array): void; - strokeText(text: string, x: number, y: number, maxWidth?: number): void; - beginPath(): void; - arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void; - createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient; -} -declare var CanvasRenderingContext2D: { - prototype: CanvasRenderingContext2D; - new (): CanvasRenderingContext2D; -} - -interface MSCSSRuleList { - length: number; - item(index?: number): CSSStyleRule; - [index: number]: CSSStyleRule; -} -declare var MSCSSRuleList: { - prototype: MSCSSRuleList; - new (): MSCSSRuleList; -} - -interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg { - x: number; -} -declare var SVGPathSegLinetoHorizontalAbs: { - prototype: SVGPathSegLinetoHorizontalAbs; - new (): SVGPathSegLinetoHorizontalAbs; -} - -interface SVGPathSegArcAbs extends SVGPathSeg { - y: number; - sweepFlag: boolean; - r2: number; - x: number; - angle: number; - r1: number; - largeArcFlag: boolean; -} -declare var SVGPathSegArcAbs: { - prototype: SVGPathSegArcAbs; - new (): SVGPathSegArcAbs; -} - -interface SVGTransformList { - numberOfItems: number; - getItem(index: number): SVGTransform; - consolidate(): SVGTransform; - clear(): void; - appendItem(newItem: SVGTransform): SVGTransform; - initialize(newItem: SVGTransform): SVGTransform; - removeItem(index: number): SVGTransform; - insertItemBefore(newItem: SVGTransform, index: number): SVGTransform; - replaceItem(newItem: SVGTransform, index: number): SVGTransform; - createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform; -} -declare var SVGTransformList: { - prototype: SVGTransformList; - new (): SVGTransformList; -} - -interface HTMLHtmlElement extends HTMLElement { - /** - * Sets or retrieves the DTD version that governs the current document. - */ - version: string; -} -declare var HTMLHtmlElement: { - prototype: HTMLHtmlElement; - new (): HTMLHtmlElement; -} - -interface SVGPathSegClosePath extends SVGPathSeg { -} -declare var SVGPathSegClosePath: { - prototype: SVGPathSegClosePath; - new (): SVGPathSegClosePath; -} - -interface HTMLFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions { - /** - * Sets or retrieves the width of the object. - */ - width: any; - /** - * Sets or retrieves whether the frame can be scrolled. - */ - scrolling: string; - /** - * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. - */ - marginHeight: string; - /** - * Sets or retrieves the left and right margin widths before displaying the text in a frame. - */ - marginWidth: string; - /** - * Sets or retrieves the border color of the object. - */ - borderColor: any; - /** - * Sets or retrieves the amount of additional space between the frames. - */ - frameSpacing: any; - /** - * Sets or retrieves whether to display a border for the frame. - */ - frameBorder: string; - /** - * Sets or retrieves whether the user can resize the frame. - */ - noResize: boolean; - /** - * Retrieves the object of the specified. - */ - contentWindow: Window; - /** - * Sets or retrieves a URL to be loaded by the object. - */ - src: string; - /** - * Sets or retrieves the frame name. - */ - name: string; - /** - * Sets or retrieves the height of the object. - */ - height: any; - /** - * Retrieves the document object of the page or frame. - */ - contentDocument: Document; - /** - * Specifies the properties of a border drawn around an object. - */ - border: string; - /** - * Sets or retrieves a URI to a long description of the object. - */ - longDesc: string; - /** - * Raised when the object has been completely received from the server. - */ - onload: (ev: Event) => any; - /** - * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied. - */ - security: any; -} -declare var HTMLFrameElement: { - prototype: HTMLFrameElement; - new (): HTMLFrameElement; -} - -interface SVGAnimatedLength { - animVal: SVGLength; - baseVal: SVGLength; -} -declare var SVGAnimatedLength: { - prototype: SVGAnimatedLength; - new (): SVGAnimatedLength; -} - -interface SVGAnimatedPoints { - points: SVGPointList; - animatedPoints: SVGPointList; -} - -interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { -} -declare var SVGDefsElement: { - prototype: SVGDefsElement; - new (): SVGDefsElement; -} - -interface HTMLQuoteElement extends HTMLElement { - /** - * Sets or retrieves the date and time of a modification to the object. - */ - dateTime: string; - /** - * Sets or retrieves reference information about the object. - */ - cite: string; -} -declare var HTMLQuoteElement: { - prototype: HTMLQuoteElement; - new (): HTMLQuoteElement; -} - -interface CSSMediaRule extends CSSRule { - media: MediaList; - cssRules: CSSRuleList; - insertRule(rule: string, index?: number): number; - deleteRule(index?: number): void; -} -declare var CSSMediaRule: { - prototype: CSSMediaRule; - new (): CSSMediaRule; -} - -interface WindowModal { - dialogArguments: any; - returnValue: any; -} - -interface XMLHttpRequest extends EventTarget { - responseBody: any; - status: number; - readyState: number; - responseText: string; - responseXML: Document; - ontimeout: (ev: Event) => any; - statusText: string; - onreadystatechange: (ev: Event) => any; - timeout: number; - onload: (ev: Event) => any; - open(method: string, url: string, async?: boolean, user?: string, password?: string): void; - create(): XMLHttpRequest; - send(data?: any): void; - abort(): void; - getAllResponseHeaders(): string; - setRequestHeader(header: string, value: string): void; - getResponseHeader(header: string): string; - LOADING: number; - DONE: number; - UNSENT: number; - OPENED: number; - HEADERS_RECEIVED: number; -} -declare var XMLHttpRequest: { - prototype: XMLHttpRequest; - new (): XMLHttpRequest; - LOADING: number; - DONE: number; - UNSENT: number; - OPENED: number; - HEADERS_RECEIVED: number; -} - -interface HTMLTableHeaderCellElement extends HTMLTableCellElement { - /** - * Sets or retrieves the group of cells in a table to which the object's information applies. - */ - scope: string; -} -declare var HTMLTableHeaderCellElement: { - prototype: HTMLTableHeaderCellElement; - new (): HTMLTableHeaderCellElement; -} - -interface HTMLDListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction { -} -declare var HTMLDListElement: { - prototype: HTMLDListElement; - new (): HTMLDListElement; -} - -interface MSDataBindingExtensions { - dataSrc: string; - dataFormatAs: string; - dataFld: string; -} - -interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg { - x: number; -} -declare var SVGPathSegLinetoHorizontalRel: { - prototype: SVGPathSegLinetoHorizontalRel; - new (): SVGPathSegLinetoHorizontalRel; -} - -interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - ry: SVGAnimatedLength; - cx: SVGAnimatedLength; - rx: SVGAnimatedLength; - cy: SVGAnimatedLength; -} -declare var SVGEllipseElement: { - prototype: SVGEllipseElement; - new (): SVGEllipseElement; -} - -interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { - target: SVGAnimatedString; -} -declare var SVGAElement: { - prototype: SVGAElement; - new (): SVGAElement; -} - -interface SVGStylable { - className: SVGAnimatedString; - style: CSSStyleDeclaration; -} - -interface SVGTransformable extends SVGLocatable { - transform: SVGAnimatedTransformList; -} - -interface HTMLFrameSetElement extends HTMLElement { - ononline: (ev: Event) => any; - /** - * Sets or retrieves the border color of the object. - */ - borderColor: any; - /** - * Sets or retrieves the frame heights of the object. - */ - rows: string; - /** - * Sets or retrieves the frame widths of the object. - */ - cols: string; - /** - * Fires when the object loses the input focus. - */ - onblur: (ev: FocusEvent) => any; - /** - * Sets or retrieves the amount of additional space between the frames. - */ - frameSpacing: any; - /** - * Fires when the object receives focus. - */ - onfocus: (ev: FocusEvent) => any; - onmessage: (ev: MessageEvent) => any; - onerror: (ev: Event) => any; - /** - * Sets or retrieves whether to display a border for the frame. - */ - frameBorder: string; - onresize: (ev: UIEvent) => any; - name: string; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onoffline: (ev: Event) => any; - border: string; - onunload: (ev: Event) => any; - onhashchange: (ev: Event) => any; - onload: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onstorage: (ev: StorageEvent) => any; -} -declare var HTMLFrameSetElement: { - prototype: HTMLFrameSetElement; - new (): HTMLFrameSetElement; -} - -interface Screen { - width: number; - deviceXDPI: number; - fontSmoothingEnabled: boolean; - bufferDepth: number; - logicalXDPI: number; - systemXDPI: number; - availHeight: number; - height: number; - logicalYDPI: number; - systemYDPI: number; - updateInterval: number; - colorDepth: number; - availWidth: number; - deviceYDPI: number; - pixelDepth: number; -} -declare var Screen: { - prototype: Screen; - new (): Screen; -} - -interface Coordinates { - altitudeAccuracy: number; - longitude: number; - latitude: number; - speed: number; - heading: number; - altitude: number; - accuracy: number; -} -declare var Coordinates: { - prototype: Coordinates; - new (): Coordinates; -} - -interface NavigatorGeolocation { - geolocation: Geolocation; -} - -interface NavigatorContentUtils { -} - -interface EventListener { - (evt: Event): void; -} - -interface SVGLangSpace { - xmllang: string; - xmlspace: string; -} - -interface DataTransfer { - effectAllowed: string; - dropEffect: string; - clearData(format?: string): boolean; - setData(format: string, data: string): boolean; - getData(format: string): string; -} -declare var DataTransfer: { - prototype: DataTransfer; - new (): DataTransfer; -} - -interface FocusEvent extends UIEvent { - relatedTarget: EventTarget; - initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void; -} -declare var FocusEvent: { - prototype: FocusEvent; - new (): FocusEvent; -} - -interface Range { - startOffset: number; - collapsed: boolean; - endOffset: number; - startContainer: Node; - endContainer: Node; - commonAncestorContainer: Node; - setStart(refNode: Node, offset: number): void; - setEndBefore(refNode: Node): void; - setStartBefore(refNode: Node): void; - selectNode(refNode: Node): void; - detach(): void; - getBoundingClientRect(): ClientRect; - toString(): string; - compareBoundaryPoints(how: number, sourceRange: Range): number; - insertNode(newNode: Node): void; - collapse(toStart: boolean): void; - selectNodeContents(refNode: Node): void; - cloneContents(): DocumentFragment; - setEnd(refNode: Node, offset: number): void; - cloneRange(): Range; - getClientRects(): ClientRectList; - surroundContents(newParent: Node): void; - deleteContents(): void; - setStartAfter(refNode: Node): void; - extractContents(): DocumentFragment; - setEndAfter(refNode: Node): void; - END_TO_END: number; - START_TO_START: number; - START_TO_END: number; - END_TO_START: number; -} -declare var Range: { - prototype: Range; - new (): Range; - END_TO_END: number; - START_TO_START: number; - START_TO_END: number; - END_TO_START: number; -} - -interface SVGPoint { - y: number; - x: number; - matrixTransform(matrix: SVGMatrix): SVGPoint; -} -declare var SVGPoint: { - prototype: SVGPoint; - new (): SVGPoint; -} - -interface MSPluginsCollection { - length: number; - refresh(reload?: boolean): void; -} -declare var MSPluginsCollection: { - prototype: MSPluginsCollection; - new (): MSPluginsCollection; -} - -interface SVGAnimatedNumberList { - animVal: SVGNumberList; - baseVal: SVGNumberList; -} -declare var SVGAnimatedNumberList: { - prototype: SVGAnimatedNumberList; - new (): SVGAnimatedNumberList; -} - -interface SVGSVGElement extends SVGElement, SVGStylable, SVGZoomAndPan, DocumentEvent, SVGLangSpace, SVGLocatable, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired { - width: SVGAnimatedLength; - x: SVGAnimatedLength; - contentStyleType: string; - onzoom: (ev: any) => any; - y: SVGAnimatedLength; - viewport: SVGRect; - onerror: (ev: Event) => any; - pixelUnitToMillimeterY: number; - onresize: (ev: UIEvent) => any; - screenPixelToMillimeterY: number; - height: SVGAnimatedLength; - onabort: (ev: UIEvent) => any; - contentScriptType: string; - pixelUnitToMillimeterX: number; - currentTranslate: SVGPoint; - onunload: (ev: Event) => any; - currentScale: number; - onscroll: (ev: UIEvent) => any; - screenPixelToMillimeterX: number; - setCurrentTime(seconds: number): void; - createSVGLength(): SVGLength; - getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList; - unpauseAnimations(): void; - createSVGRect(): SVGRect; - checkIntersection(element: SVGElement, rect: SVGRect): boolean; - unsuspendRedrawAll(): void; - pauseAnimations(): void; - suspendRedraw(maxWaitMilliseconds: number): number; - deselectAll(): void; - createSVGAngle(): SVGAngle; - getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList; - createSVGTransform(): SVGTransform; - unsuspendRedraw(suspendHandleID: number): void; - forceRedraw(): void; - getCurrentTime(): number; - checkEnclosure(element: SVGElement, rect: SVGRect): boolean; - createSVGMatrix(): SVGMatrix; - createSVGPoint(): SVGPoint; - createSVGNumber(): SVGNumber; - createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform; - getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; - getElementById(elementId: string): Element; -} -declare var SVGSVGElement: { - prototype: SVGSVGElement; - new (): SVGSVGElement; -} - -interface HTMLLabelElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the object to which the given label object is assigned. - */ - htmlFor: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; -} -declare var HTMLLabelElement: { - prototype: HTMLLabelElement; - new (): HTMLLabelElement; -} - -interface MSResourceMetadata { - protocol: string; - fileSize: string; - fileUpdatedDate: string; - nameProp: string; - fileCreatedDate: string; - fileModifiedDate: string; - mimeType: string; -} - -interface HTMLLegendElement extends HTMLElement, MSDataBindingExtensions { - /** - * Retrieves a reference to the form that the object is embedded in. - */ - align: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; -} -declare var HTMLLegendElement: { - prototype: HTMLLegendElement; - new (): HTMLLegendElement; -} - -interface HTMLDirectoryElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { -} -declare var HTMLDirectoryElement: { - prototype: HTMLDirectoryElement; - new (): HTMLDirectoryElement; -} - -interface SVGAnimatedInteger { - animVal: number; - baseVal: number; -} -declare var SVGAnimatedInteger: { - prototype: SVGAnimatedInteger; - new (): SVGAnimatedInteger; -} - -interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable { -} -declare var SVGTextElement: { - prototype: SVGTextElement; - new (): SVGTextElement; -} - -interface SVGTSpanElement extends SVGTextPositioningElement { -} -declare var SVGTSpanElement: { - prototype: SVGTSpanElement; - new (): SVGTSpanElement; -} - -interface HTMLLIElement extends HTMLElement, DOML2DeprecatedListNumberingAndBulletStyle { - /** - * Sets or retrieves the value of a list item. - */ - value: number; -} -declare var HTMLLIElement: { - prototype: HTMLLIElement; - new (): HTMLLIElement; -} - -interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg { - y: number; -} -declare var SVGPathSegLinetoVerticalAbs: { - prototype: SVGPathSegLinetoVerticalAbs; - new (): SVGPathSegLinetoVerticalAbs; -} - -interface MSStorageExtensions { - remainingSpace: number; -} - -interface SVGStyleElement extends SVGElement, SVGLangSpace { - media: string; - type: string; - title: string; -} -declare var SVGStyleElement: { - prototype: SVGStyleElement; - new (): SVGStyleElement; -} - -interface MSCurrentStyleCSSProperties extends MSCSSProperties { - blockDirection: string; - clipBottom: string; - clipLeft: string; - clipRight: string; - clipTop: string; - hasLayout: string; -} -declare var MSCurrentStyleCSSProperties: { - prototype: MSCurrentStyleCSSProperties; - new (): MSCurrentStyleCSSProperties; -} - -interface MSHTMLCollectionExtensions { - urns(urn: any): Object; - tags(tagName: any): Object; -} - -interface Storage extends MSStorageExtensions { - length: number; - getItem(key: string): any; - [key: string]: any; - setItem(key: string, data: string): void; - clear(): void; - removeItem(key: string): void; - key(index: number): string; - [index: number]: any; -} -declare var Storage: { - prototype: Storage; - new (): Storage; -} - -interface HTMLIFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions { - /** - * Sets or retrieves the width of the object. - */ - width: string; - /** - * Sets or retrieves whether the frame can be scrolled. - */ - scrolling: string; - /** - * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. - */ - marginHeight: string; - /** - * Sets or retrieves the left and right margin widths before displaying the text in a frame. - */ - marginWidth: string; - /** - * Sets or retrieves the amount of additional space between the frames. - */ - frameSpacing: any; - /** - * Sets or retrieves whether to display a border for the frame. - */ - frameBorder: string; - /** - * Sets or retrieves whether the user can resize the frame. - */ - noResize: boolean; - /** - * Sets or retrieves the vertical margin for the object. - */ - vspace: number; - /** - * Retrieves the object of the specified. - */ - contentWindow: Window; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Sets or retrieves a URL to be loaded by the object. - */ - src: string; - /** - * Sets or retrieves the frame name. - */ - name: string; - /** - * Sets or retrieves the height of the object. - */ - height: string; - /** - * Specifies the properties of a border drawn around an object. - */ - border: string; - /** - * Retrieves the document object of the page or frame. - */ - contentDocument: Document; - /** - * Sets or retrieves the horizontal margin for the object. - */ - hspace: number; - /** - * Sets or retrieves a URI to a long description of the object. - */ - longDesc: string; - /** - * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied. - */ - security: any; - /** - * Raised when the object has been completely received from the server. - */ - onload: (ev: Event) => any; -} -declare var HTMLIFrameElement: { - prototype: HTMLIFrameElement; - new (): HTMLIFrameElement; -} - -interface TextRangeCollection { - length: number; - item(index: number): TextRange; - [index: number]: TextRange; -} -declare var TextRangeCollection: { - prototype: TextRangeCollection; - new (): TextRangeCollection; -} - -interface HTMLBodyElement extends HTMLElement, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { - scroll: string; - ononline: (ev: Event) => any; - onblur: (ev: FocusEvent) => any; - noWrap: boolean; - onfocus: (ev: FocusEvent) => any; - onmessage: (ev: MessageEvent) => any; - text: any; - onerror: (ev: Event) => any; - bgProperties: string; - onresize: (ev: UIEvent) => any; - link: any; - aLink: any; - bottomMargin: any; - topMargin: any; - onafterprint: (ev: Event) => any; - vLink: any; - onbeforeprint: (ev: Event) => any; - onoffline: (ev: Event) => any; - onunload: (ev: Event) => any; - onhashchange: (ev: Event) => any; - onload: (ev: Event) => any; - rightMargin: any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - leftMargin: any; - onstorage: (ev: StorageEvent) => any; - createTextRange(): TextRange; -} -declare var HTMLBodyElement: { - prototype: HTMLBodyElement; - new (): HTMLBodyElement; -} - -interface DocumentType extends Node { - name: string; - notations: NamedNodeMap; - systemId: string; - internalSubset: string; - entities: NamedNodeMap; - publicId: string; -} -declare var DocumentType: { - prototype: DocumentType; - new (): DocumentType; -} - -interface SVGRadialGradientElement extends SVGGradientElement { - cx: SVGAnimatedLength; - r: SVGAnimatedLength; - cy: SVGAnimatedLength; - fx: SVGAnimatedLength; - fy: SVGAnimatedLength; -} -declare var SVGRadialGradientElement: { - prototype: SVGRadialGradientElement; - new (): SVGRadialGradientElement; -} - -interface MutationEvent extends Event { - newValue: string; - attrChange: number; - attrName: string; - prevValue: string; - relatedNode: Node; - initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void; - MODIFICATION: number; - REMOVAL: number; - ADDITION: number; -} -declare var MutationEvent: { - prototype: MutationEvent; - new (): MutationEvent; - MODIFICATION: number; - REMOVAL: number; - ADDITION: number; -} - -interface DragEvent extends MouseEvent { - dataTransfer: DataTransfer; - initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void; -} -declare var DragEvent: { - prototype: DragEvent; - new (): DragEvent; -} - -interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle { - /** - * Sets or retrieves a value that indicates the table alignment. - */ - align: string; - /** - * Sets or retrieves the number of horizontal rows contained in the object. - */ - rows: HTMLCollection; - /** - * Removes the specified row (tr) from the element and from the rows collection. - * @param index Number that specifies the zero-based position in the rows collection of the row to remove. - */ - deleteRow(index?: number): void; - /** - * Moves a table row to a new position. - * @param indexFrom Number that specifies the index in the rows collection of the table row that is moved. - * @param indexTo Number that specifies where the row is moved within the rows collection. - */ - moveRow(indexFrom?: number, indexTo?: number): Object; - /** - * Creates a new row (tr) in the table, and adds the row to the rows collection. - * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection. - */ - insertRow(index?: number): HTMLElement; -} -declare var HTMLTableSectionElement: { - prototype: HTMLTableSectionElement; - new (): HTMLTableSectionElement; -} - -interface DOML2DeprecatedListNumberingAndBulletStyle { - type: string; -} - -interface HTMLInputElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the width of the object. - */ - width: string; - status: boolean; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Gets or sets the starting position or offset of a text selection. - */ - selectionStart: number; - indeterminate: boolean; - readOnly: boolean; - size: number; - loop: number; - /** - * Gets or sets the end position or offset of a text selection. - */ - selectionEnd: number; - /** - * Sets or retrieves the URL of the virtual reality modeling language (VRML) world to be displayed in the window. - */ - vrml: string; - /** - * Sets or retrieves a lower resolution image to display. - */ - lowsrc: string; - /** - * Sets or retrieves the vertical margin for the object. - */ - vspace: number; - /** - * Sets or retrieves a comma-separated list of content types. - */ - accept: string; - /** - * Sets or retrieves a text alternative to the graphic. - */ - alt: string; - /** - * Sets or retrieves the state of the check box or radio button. - */ - defaultChecked: boolean; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Returns the value of the data at the cursor's current position. - */ - value: string; - /** - * The address or URL of the a media resource that is to be considered. - */ - src: string; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. - */ - useMap: string; - /** - * Sets or retrieves the height of the object. - */ - height: string; - /** - * Sets or retrieves the width of the border to draw around the object. - */ - border: string; - dynsrc: string; - /** - * Sets or retrieves the state of the check box or radio button. - */ - checked: boolean; - /** - * Sets or retrieves the width of the border to draw around the object. - */ - hspace: number; - /** - * Sets or retrieves the maximum number of characters that the user can enter in a text control. - */ - maxLength: number; - /** - * Returns the content type of the object. - */ - type: string; - /** - * Sets or retrieves the initial contents of the object. - */ - defaultValue: string; - /** - * Retrieves whether the object is fully loaded. - */ - complete: boolean; - start: string; - /** - * Creates a TextRange object for the element. - */ - createTextRange(): TextRange; - /** - * Sets the start and end positions of a selection in a text field. - * @param start The offset into the text field for the start of the selection. - * @param end The offset into the text field for the end of the selection. - */ - setSelectionRange(start: number, end: number): void; - /** - * Makes the selection equal to the current object. - */ - select(): void; -} -declare var HTMLInputElement: { - prototype: HTMLInputElement; - new (): HTMLInputElement; -} - -interface HTMLAnchorElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the relationship between the object and the destination of the link. - */ - rel: string; - /** - * Contains the protocol of the URL. - */ - protocol: string; - /** - * Sets or retrieves the substring of the href property that follows the question mark. - */ - search: string; - /** - * Sets or retrieves the coordinates of the object. - */ - coords: string; - /** - * Contains the hostname of a URL. - */ - hostname: string; - /** - * Contains the pathname of the URL. - */ - pathname: string; - Methods: string; - /** - * Sets or retrieves the window or frame at which to target content. - */ - target: string; - protocolLong: string; - /** - * Sets or retrieves a destination URL or an anchor point. - */ - href: string; - /** - * Sets or retrieves the shape of the object. - */ - name: string; - /** - * Sets or retrieves the character set used to encode the object. - */ - charset: string; - /** - * Sets or retrieves the language code of the object. - */ - hreflang: string; - /** - * Sets or retrieves the port number associated with a URL. - */ - port: string; - /** - * Contains the hostname and port values of the URL. - */ - host: string; - /** - * Contains the anchor portion of the URL including the hash sign (#). - */ - hash: string; - nameProp: string; - urn: string; - /** - * Sets or retrieves the relationship between the object and the destination of the link. - */ - rev: string; - /** - * Sets or retrieves the shape of the object. - */ - shape: string; - type: string; - mimeType: string; - /** - * Returns a string representation of an object. - */ - toString(): string; -} -declare var HTMLAnchorElement: { - prototype: HTMLAnchorElement; - new (): HTMLAnchorElement; -} - -interface HTMLParamElement extends HTMLElement { - /** - * Sets or retrieves the value of an input parameter for an element. - */ - value: string; - /** - * Sets or retrieves the name of an input parameter for an element. - */ - name: string; - /** - * Sets or retrieves the content type of the resource designated by the value attribute. - */ - type: string; - /** - * Sets or retrieves the data type of the value attribute. - */ - valueType: string; -} -declare var HTMLParamElement: { - prototype: HTMLParamElement; - new (): HTMLParamElement; -} - -interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - preserveAspectRatio: SVGAnimatedPreserveAspectRatio; - x: SVGAnimatedLength; - height: SVGAnimatedLength; -} -declare var SVGImageElement: { - prototype: SVGImageElement; - new (): SVGImageElement; -} - -interface SVGAnimatedNumber { - animVal: number; - baseVal: number; -} -declare var SVGAnimatedNumber: { - prototype: SVGAnimatedNumber; - new (): SVGAnimatedNumber; -} - -interface PerformanceTiming { - redirectStart: number; - domainLookupEnd: number; - responseStart: number; - domComplete: number; - domainLookupStart: number; - loadEventStart: number; - msFirstPaint: number; - unloadEventEnd: number; - fetchStart: number; - requestStart: number; - domInteractive: number; - navigationStart: number; - connectEnd: number; - loadEventEnd: number; - connectStart: number; - responseEnd: number; - domLoading: number; - redirectEnd: number; - unloadEventStart: number; - domContentLoadedEventStart: number; - domContentLoadedEventEnd: number; - toJSON(): any; -} -declare var PerformanceTiming: { - prototype: PerformanceTiming; - new (): PerformanceTiming; -} - -interface HTMLPreElement extends HTMLElement, DOML2DeprecatedTextFlowControl { - /** - * Sets or gets a value that you can use to implement your own width functionality for the object. - */ - width: number; - /** - * Indicates a citation by rendering text in italic type. - */ - cite: string; -} -declare var HTMLPreElement: { - prototype: HTMLPreElement; - new (): HTMLPreElement; -} - -interface EventException { - code: number; - message: string; - toString(): string; - DISPATCH_REQUEST_ERR: number; - UNSPECIFIED_EVENT_TYPE_ERR: number; -} -declare var EventException: { - prototype: EventException; - new (): EventException; - DISPATCH_REQUEST_ERR: number; - UNSPECIFIED_EVENT_TYPE_ERR: number; -} - -interface MSNavigatorDoNotTrack { - msDoNotTrack: string; -} - -interface NavigatorOnLine { - onLine: boolean; -} - -interface WindowLocalStorage { - localStorage: Storage; -} - -interface SVGMetadataElement extends SVGElement { -} -declare var SVGMetadataElement: { - prototype: SVGMetadataElement; - new (): SVGMetadataElement; -} - -interface SVGPathSegArcRel extends SVGPathSeg { - y: number; - sweepFlag: boolean; - r2: number; - x: number; - angle: number; - r1: number; - largeArcFlag: boolean; -} -declare var SVGPathSegArcRel: { - prototype: SVGPathSegArcRel; - new (): SVGPathSegArcRel; -} - -interface SVGPathSegMovetoAbs extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegMovetoAbs: { - prototype: SVGPathSegMovetoAbs; - new (): SVGPathSegMovetoAbs; -} - -interface SVGStringList { - numberOfItems: number; - replaceItem(newItem: string, index: number): string; - getItem(index: number): string; - clear(): void; - appendItem(newItem: string): string; - initialize(newItem: string): string; - removeItem(index: number): string; - insertItemBefore(newItem: string, index: number): string; -} -declare var SVGStringList: { - prototype: SVGStringList; - new (): SVGStringList; -} - -interface XDomainRequest { - timeout: number; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onprogress: (ev: any) => any; - ontimeout: (ev: Event) => any; - responseText: string; - contentType: string; - open(method: string, url: string): void; - create(): XDomainRequest; - abort(): void; - send(data?: any): void; -} -declare var XDomainRequest: { - prototype: XDomainRequest; - new (): XDomainRequest; -} - -interface DOML2DeprecatedBackgroundColorStyle { - bgColor: any; -} - -interface ElementTraversal { - childElementCount: number; - previousElementSibling: Element; - lastElementChild: Element; - nextElementSibling: Element; - firstElementChild: Element; -} - -interface SVGLength { - valueAsString: string; - valueInSpecifiedUnits: number; - value: number; - unitType: number; - newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void; - convertToSpecifiedUnits(unitType: number): void; - SVG_LENGTHTYPE_NUMBER: number; - SVG_LENGTHTYPE_CM: number; - SVG_LENGTHTYPE_PC: number; - SVG_LENGTHTYPE_PERCENTAGE: number; - SVG_LENGTHTYPE_MM: number; - SVG_LENGTHTYPE_PT: number; - SVG_LENGTHTYPE_IN: number; - SVG_LENGTHTYPE_EMS: number; - SVG_LENGTHTYPE_PX: number; - SVG_LENGTHTYPE_UNKNOWN: number; - SVG_LENGTHTYPE_EXS: number; -} -declare var SVGLength: { - prototype: SVGLength; - new (): SVGLength; - SVG_LENGTHTYPE_NUMBER: number; - SVG_LENGTHTYPE_CM: number; - SVG_LENGTHTYPE_PC: number; - SVG_LENGTHTYPE_PERCENTAGE: number; - SVG_LENGTHTYPE_MM: number; - SVG_LENGTHTYPE_PT: number; - SVG_LENGTHTYPE_IN: number; - SVG_LENGTHTYPE_EMS: number; - SVG_LENGTHTYPE_PX: number; - SVG_LENGTHTYPE_UNKNOWN: number; - SVG_LENGTHTYPE_EXS: number; -} - -interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired { -} -declare var SVGPolygonElement: { - prototype: SVGPolygonElement; - new (): SVGPolygonElement; -} - -interface HTMLPhraseElement extends HTMLElement { - /** - * Sets or retrieves the date and time of a modification to the object. - */ - dateTime: string; - /** - * Sets or retrieves reference information about the object. - */ - cite: string; -} -declare var HTMLPhraseElement: { - prototype: HTMLPhraseElement; - new (): HTMLPhraseElement; -} - -interface NavigatorStorageUtils { -} - -interface SVGPathSegCurvetoCubicRel extends SVGPathSeg { - y: number; - y1: number; - x2: number; - x: number; - x1: number; - y2: number; -} -declare var SVGPathSegCurvetoCubicRel: { - prototype: SVGPathSegCurvetoCubicRel; - new (): SVGPathSegCurvetoCubicRel; -} - -interface MSEventObj extends Event { - nextPage: string; - keyCode: number; - toElement: Element; - returnValue: any; - dataFld: string; - y: number; - dataTransfer: DataTransfer; - propertyName: string; - url: string; - offsetX: number; - recordset: Object; - screenX: number; - buttonID: number; - wheelDelta: number; - reason: number; - origin: string; - data: string; - srcFilter: Object; - boundElements: HTMLCollection; - cancelBubble: boolean; - altLeft: boolean; - behaviorCookie: number; - bookmarks: BookmarkCollection; - type: string; - repeat: boolean; - srcElement: Element; - source: Window; - fromElement: Element; - offsetY: number; - x: number; - behaviorPart: number; - qualifier: string; - altKey: boolean; - ctrlKey: boolean; - clientY: number; - shiftKey: boolean; - shiftLeft: boolean; - contentOverflow: boolean; - screenY: number; - ctrlLeft: boolean; - button: number; - srcUrn: string; - clientX: number; - actionURL: string; - getAttribute(strAttributeName: string, lFlags?: number): any; - setAttribute(strAttributeName: string, AttributeValue: any, lFlags?: number): void; - removeAttribute(strAttributeName: string, lFlags?: number): boolean; -} -declare var MSEventObj: { - prototype: MSEventObj; - new (): MSEventObj; -} - -interface SVGTextContentElement extends SVGElement, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - textLength: SVGAnimatedLength; - lengthAdjust: SVGAnimatedEnumeration; - getCharNumAtPosition(point: SVGPoint): number; - getStartPositionOfChar(charnum: number): SVGPoint; - getExtentOfChar(charnum: number): SVGRect; - getComputedTextLength(): number; - getSubStringLength(charnum: number, nchars: number): number; - selectSubString(charnum: number, nchars: number): void; - getNumberOfChars(): number; - getRotationOfChar(charnum: number): number; - getEndPositionOfChar(charnum: number): SVGPoint; - LENGTHADJUST_SPACING: number; - LENGTHADJUST_SPACINGANDGLYPHS: number; - LENGTHADJUST_UNKNOWN: number; -} -declare var SVGTextContentElement: { - prototype: SVGTextContentElement; - new (): SVGTextContentElement; - LENGTHADJUST_SPACING: number; - LENGTHADJUST_SPACINGANDGLYPHS: number; - LENGTHADJUST_UNKNOWN: number; -} - -interface DOML2DeprecatedColorProperty { - color: string; -} - -interface HTMLCanvasElement extends HTMLElement { - /** - * Gets or sets the width of a canvas element on a document. - */ - width: number; - /** - * Gets or sets the height of a canvas element on a document. - */ - height: number; - /** - * Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element. - * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. - */ - toDataURL(type?: string, ...args: any[]): string; - /** - * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. - * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); - */ - getContext(contextId: "2d"): CanvasRenderingContext2D; - getContext(contextId: "experimental-webgl"): WebGLRenderingContext; - getContext(contextId: string, ...args: any[]): any; -} -declare var HTMLCanvasElement: { - prototype: HTMLCanvasElement; - new (): HTMLCanvasElement; -} - -interface Location { - hash: string; - protocol: string; - search: string; - href: string; - hostname: string; - port: string; - pathname: string; - host: string; - reload(flag?: boolean): void; - replace(url: string): void; - assign(url: string): void; - toString(): string; -} -declare var Location: { - prototype: Location; - new (): Location; -} - -interface HTMLTitleElement extends HTMLElement { - /** - * Retrieves or sets the text of the object as a string. - */ - text: string; -} -declare var HTMLTitleElement: { - prototype: HTMLTitleElement; - new (): HTMLTitleElement; -} - -interface HTMLStyleElement extends HTMLElement, LinkStyle { - /** - * Sets or retrieves the media type. - */ - media: string; - /** - * Retrieves the CSS language in which the style sheet is written. - */ - type: string; -} -declare var HTMLStyleElement: { - prototype: HTMLStyleElement; - new (): HTMLStyleElement; -} - -interface PerformanceEntry { - name: string; - startTime: number; - duration: number; - entryType: string; -} -declare var PerformanceEntry: { - prototype: PerformanceEntry; - new (): PerformanceEntry; -} - -interface SVGTransform { - type: number; - angle: number; - matrix: SVGMatrix; - setTranslate(tx: number, ty: number): void; - setScale(sx: number, sy: number): void; - setMatrix(matrix: SVGMatrix): void; - setSkewY(angle: number): void; - setRotate(angle: number, cx: number, cy: number): void; - setSkewX(angle: number): void; - SVG_TRANSFORM_SKEWX: number; - SVG_TRANSFORM_UNKNOWN: number; - SVG_TRANSFORM_SCALE: number; - SVG_TRANSFORM_TRANSLATE: number; - SVG_TRANSFORM_MATRIX: number; - SVG_TRANSFORM_ROTATE: number; - SVG_TRANSFORM_SKEWY: number; -} -declare var SVGTransform: { - prototype: SVGTransform; - new (): SVGTransform; - SVG_TRANSFORM_SKEWX: number; - SVG_TRANSFORM_UNKNOWN: number; - SVG_TRANSFORM_SCALE: number; - SVG_TRANSFORM_TRANSLATE: number; - SVG_TRANSFORM_MATRIX: number; - SVG_TRANSFORM_ROTATE: number; - SVG_TRANSFORM_SKEWY: number; -} - -interface UIEvent extends Event { - detail: number; - view: Window; - initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void; -} -declare var UIEvent: { - prototype: UIEvent; - new (): UIEvent; -} - -interface SVGURIReference { - href: SVGAnimatedString; -} - -interface SVGPathSeg { - pathSegType: number; - pathSegTypeAsLetter: string; - PATHSEG_MOVETO_REL: number; - PATHSEG_LINETO_VERTICAL_REL: number; - PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number; - PATHSEG_CURVETO_QUADRATIC_REL: number; - PATHSEG_CURVETO_CUBIC_ABS: number; - PATHSEG_LINETO_HORIZONTAL_ABS: number; - PATHSEG_CURVETO_QUADRATIC_ABS: number; - PATHSEG_LINETO_ABS: number; - PATHSEG_CLOSEPATH: number; - PATHSEG_LINETO_HORIZONTAL_REL: number; - PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number; - PATHSEG_LINETO_REL: number; - PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number; - PATHSEG_ARC_REL: number; - PATHSEG_CURVETO_CUBIC_REL: number; - PATHSEG_UNKNOWN: number; - PATHSEG_LINETO_VERTICAL_ABS: number; - PATHSEG_ARC_ABS: number; - PATHSEG_MOVETO_ABS: number; - PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number; -} -declare var SVGPathSeg: { - prototype: SVGPathSeg; - new (): SVGPathSeg; - PATHSEG_MOVETO_REL: number; - PATHSEG_LINETO_VERTICAL_REL: number; - PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number; - PATHSEG_CURVETO_QUADRATIC_REL: number; - PATHSEG_CURVETO_CUBIC_ABS: number; - PATHSEG_LINETO_HORIZONTAL_ABS: number; - PATHSEG_CURVETO_QUADRATIC_ABS: number; - PATHSEG_LINETO_ABS: number; - PATHSEG_CLOSEPATH: number; - PATHSEG_LINETO_HORIZONTAL_REL: number; - PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number; - PATHSEG_LINETO_REL: number; - PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number; - PATHSEG_ARC_REL: number; - PATHSEG_CURVETO_CUBIC_REL: number; - PATHSEG_UNKNOWN: number; - PATHSEG_LINETO_VERTICAL_ABS: number; - PATHSEG_ARC_ABS: number; - PATHSEG_MOVETO_ABS: number; - PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number; -} - -interface WheelEvent extends MouseEvent { - deltaZ: number; - deltaX: number; - deltaMode: number; - deltaY: number; - initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void; - DOM_DELTA_PIXEL: number; - DOM_DELTA_LINE: number; - DOM_DELTA_PAGE: number; -} -declare var WheelEvent: { - prototype: WheelEvent; - new (): WheelEvent; - DOM_DELTA_PIXEL: number; - DOM_DELTA_LINE: number; - DOM_DELTA_PAGE: number; -} - -interface MSEventAttachmentTarget { - attachEvent(event: string, listener: EventListener): boolean; - detachEvent(event: string, listener: EventListener): void; -} - -interface SVGNumber { - value: number; -} -declare var SVGNumber: { - prototype: SVGNumber; - new (): SVGNumber; -} - -interface SVGPathElement extends SVGElement, SVGStylable, SVGAnimatedPathData, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - getPathSegAtLength(distance: number): number; - getPointAtLength(distance: number): SVGPoint; - createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs; - createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel; - createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel; - createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs; - createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs; - createSVGPathSegClosePath(): SVGPathSegClosePath; - createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel; - createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel; - createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel; - createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs; - createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs; - createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel; - createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel; - createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs; - createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel; - getTotalLength(): number; - createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel; - createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs; - createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs; - createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs; -} -declare var SVGPathElement: { - prototype: SVGPathElement; - new (): SVGPathElement; -} - -interface MSCompatibleInfo { - version: string; - userAgent: string; -} -declare var MSCompatibleInfo: { - prototype: MSCompatibleInfo; - new (): MSCompatibleInfo; -} - -interface Text extends CharacterData, MSNodeExtensions { - wholeText: string; - splitText(offset: number): Text; - replaceWholeText(content: string): Text; -} -declare var Text: { - prototype: Text; - new (): Text; -} - -interface SVGAnimatedRect { - animVal: SVGRect; - baseVal: SVGRect; -} -declare var SVGAnimatedRect: { - prototype: SVGAnimatedRect; - new (): SVGAnimatedRect; -} - -interface CSSNamespaceRule extends CSSRule { - namespaceURI: string; - prefix: string; -} -declare var CSSNamespaceRule: { - prototype: CSSNamespaceRule; - new (): CSSNamespaceRule; -} - -interface SVGPathSegList { - numberOfItems: number; - replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg; - getItem(index: number): SVGPathSeg; - clear(): void; - appendItem(newItem: SVGPathSeg): SVGPathSeg; - initialize(newItem: SVGPathSeg): SVGPathSeg; - removeItem(index: number): SVGPathSeg; - insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg; -} -declare var SVGPathSegList: { - prototype: SVGPathSegList; - new (): SVGPathSegList; -} - -interface HTMLUnknownElement extends HTMLElement, MSDataBindingRecordSetReadonlyExtensions { -} -declare var HTMLUnknownElement: { - prototype: HTMLUnknownElement; - new (): HTMLUnknownElement; -} - -interface HTMLAudioElement extends HTMLMediaElement { -} -declare var HTMLAudioElement: { - prototype: HTMLAudioElement; - new (): HTMLAudioElement; -} - -interface MSImageResourceExtensions { - dynsrc: string; - vrml: string; - lowsrc: string; - start: string; - loop: number; -} - -interface PositionError { - code: number; - message: string; - toString(): string; - POSITION_UNAVAILABLE: number; - PERMISSION_DENIED: number; - TIMEOUT: number; -} -declare var PositionError: { - prototype: PositionError; - new (): PositionError; - POSITION_UNAVAILABLE: number; - PERMISSION_DENIED: number; - TIMEOUT: number; -} - -interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { - /** - * Sets or retrieves the width of the object. - */ - width: number; - /** - * Sets or retrieves a list of header cells that provide information for the object. - */ - headers: string; - /** - * Retrieves the position of the object in the cells collection of a row. - */ - cellIndex: number; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorLight: any; - /** - * Sets or retrieves the number columns in the table that the object should span. - */ - colSpan: number; - /** - * Sets or retrieves the border color of the object. - */ - borderColor: any; - /** - * Sets or retrieves a comma-delimited list of conceptual categories associated with the object. - */ - axis: string; - /** - * Sets or retrieves the height of the object. - */ - height: any; - /** - * Sets or retrieves whether the browser automatically performs wordwrap. - */ - noWrap: boolean; - /** - * Sets or retrieves abbreviated text for the object. - */ - abbr: string; - /** - * Sets or retrieves how many rows in a table the cell should span. - */ - rowSpan: number; - /** - * Sets or retrieves the group of cells in a table to which the object's information applies. - */ - scope: string; - /** - * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. - */ - borderColorDark: any; -} -declare var HTMLTableCellElement: { - prototype: HTMLTableCellElement; - new (): HTMLTableCellElement; -} - -interface SVGElementInstance extends EventTarget { - previousSibling: SVGElementInstance; - parentNode: SVGElementInstance; - lastChild: SVGElementInstance; - nextSibling: SVGElementInstance; - childNodes: SVGElementInstanceList; - correspondingUseElement: SVGUseElement; - correspondingElement: SVGElement; - firstChild: SVGElementInstance; -} -declare var SVGElementInstance: { - prototype: SVGElementInstance; - new (): SVGElementInstance; -} - -interface MSNamespaceInfoCollection { - length: number; - add(namespace?: string, urn?: string, implementationUrl?: any): Object; - item(index: any): Object; - [index: string]: Object; -} -declare var MSNamespaceInfoCollection: { - prototype: MSNamespaceInfoCollection; - new (): MSNamespaceInfoCollection; -} - -interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - cx: SVGAnimatedLength; - r: SVGAnimatedLength; - cy: SVGAnimatedLength; -} -declare var SVGCircleElement: { - prototype: SVGCircleElement; - new (): SVGCircleElement; -} - -interface StyleSheetList { - length: number; - item(index?: number): StyleSheet; - [index: number]: StyleSheet; -} -declare var StyleSheetList: { - prototype: StyleSheetList; - new (): StyleSheetList; -} - -interface CSSImportRule extends CSSRule { - styleSheet: CSSStyleSheet; - href: string; - media: MediaList; -} -declare var CSSImportRule: { - prototype: CSSImportRule; - new (): CSSImportRule; -} - -interface CustomEvent extends Event { - detail: any; - initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void; -} -declare var CustomEvent: { - prototype: CustomEvent; - new (): CustomEvent; -} - -interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty { - /** - * Sets or retrieves the current typeface family. - */ - face: string; - /** - * Sets or retrieves the font size of the object. - */ - size: number; -} -declare var HTMLBaseFontElement: { - prototype: HTMLBaseFontElement; - new (): HTMLBaseFontElement; -} - -interface HTMLTextAreaElement extends HTMLElement, MSDataBindingExtensions { - /** - * Retrieves or sets the text in the entry field of the textArea element. - */ - value: string; - /** - * Sets or retrieves the value indicating whether the control is selected. - */ - status: any; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Gets or sets the starting position or offset of a text selection. - */ - selectionStart: number; - /** - * Sets or retrieves the number of horizontal rows contained in the object. - */ - rows: number; - /** - * Sets or retrieves the width of the object. - */ - cols: number; - /** - * Sets or retrieves the value indicated whether the content of the object is read-only. - */ - readOnly: boolean; - /** - * Sets or retrieves how to handle wordwrapping in the object. - */ - wrap: string; - /** - * Gets or sets the end position or offset of a text selection. - */ - selectionEnd: number; - /** - * Retrieves the type of control. - */ - type: string; - /** - * Sets or retrieves the initial contents of the object. - */ - defaultValue: string; - /** - * Creates a TextRange object for the element. - */ - createTextRange(): TextRange; - /** - * Sets the start and end positions of a selection in a text field. - * @param start The offset into the text field for the start of the selection. - * @param end The offset into the text field for the end of the selection. - */ - setSelectionRange(start: number, end: number): void; - /** - * Highlights the input area of a form element. - */ - select(): void; -} -declare var HTMLTextAreaElement: { - prototype: HTMLTextAreaElement; - new (): HTMLTextAreaElement; -} - -interface Geolocation { - clearWatch(watchId: number): void; - getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void; - watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number; -} -declare var Geolocation: { - prototype: Geolocation; - new (): Geolocation; -} - -interface DOML2DeprecatedMarginStyle { - vspace: number; - hspace: number; -} - -interface MSWindowModeless { - dialogTop: any; - dialogLeft: any; - dialogWidth: any; - dialogHeight: any; - menuArguments: any; -} - -interface DOML2DeprecatedAlignmentStyle { - align: string; -} - -interface HTMLMarqueeElement extends HTMLElement, MSDataBindingExtensions, DOML2DeprecatedBackgroundColorStyle { - width: string; - onbounce: (ev: Event) => any; - vspace: number; - trueSpeed: boolean; - scrollAmount: number; - scrollDelay: number; - behavior: string; - height: string; - loop: number; - direction: string; - hspace: number; - onstart: (ev: Event) => any; - onfinish: (ev: Event) => any; - stop(): void; - start(): void; -} -declare var HTMLMarqueeElement: { - prototype: HTMLMarqueeElement; - new (): HTMLMarqueeElement; -} - -interface SVGRect { - y: number; - width: number; - x: number; - height: number; -} -declare var SVGRect: { - prototype: SVGRect; - new (): SVGRect; -} - -interface MSNodeExtensions { - swapNode(otherNode: Node): Node; - removeNode(deep?: boolean): Node; - replaceNode(replacement: Node): Node; -} - -interface History { - length: number; - back(distance?: any): void; - forward(distance?: any): void; - go(delta?: any): void; -} -declare var History: { - prototype: History; - new (): History; -} - -interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg { - y: number; - y1: number; - x2: number; - x: number; - x1: number; - y2: number; -} -declare var SVGPathSegCurvetoCubicAbs: { - prototype: SVGPathSegCurvetoCubicAbs; - new (): SVGPathSegCurvetoCubicAbs; -} - -interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg { - y: number; - y1: number; - x: number; - x1: number; -} -declare var SVGPathSegCurvetoQuadraticAbs: { - prototype: SVGPathSegCurvetoQuadraticAbs; - new (): SVGPathSegCurvetoQuadraticAbs; -} - -interface TimeRanges { - length: number; - start(index: number): number; - end(index: number): number; -} -declare var TimeRanges: { - prototype: TimeRanges; - new (): TimeRanges; -} - -interface CSSRule { - cssText: string; - parentStyleSheet: CSSStyleSheet; - parentRule: CSSRule; - type: number; - IMPORT_RULE: number; - MEDIA_RULE: number; - STYLE_RULE: number; - NAMESPACE_RULE: number; - PAGE_RULE: number; - UNKNOWN_RULE: number; - FONT_FACE_RULE: number; - CHARSET_RULE: number; -} -declare var CSSRule: { - prototype: CSSRule; - new (): CSSRule; - IMPORT_RULE: number; - MEDIA_RULE: number; - STYLE_RULE: number; - NAMESPACE_RULE: number; - PAGE_RULE: number; - UNKNOWN_RULE: number; - FONT_FACE_RULE: number; - CHARSET_RULE: number; -} - -interface SVGPathSegLinetoAbs extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegLinetoAbs: { - prototype: SVGPathSegLinetoAbs; - new (): SVGPathSegLinetoAbs; -} - -interface HTMLModElement extends HTMLElement { - /** - * Sets or retrieves the date and time of a modification to the object. - */ - dateTime: string; - /** - * Sets or retrieves reference information about the object. - */ - cite: string; -} -declare var HTMLModElement: { - prototype: HTMLModElement; - new (): HTMLModElement; -} - -interface SVGMatrix { - e: number; - c: number; - a: number; - b: number; - d: number; - f: number; - multiply(secondMatrix: SVGMatrix): SVGMatrix; - flipY(): SVGMatrix; - skewY(angle: number): SVGMatrix; - inverse(): SVGMatrix; - scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix; - rotate(angle: number): SVGMatrix; - flipX(): SVGMatrix; - translate(x: number, y: number): SVGMatrix; - scale(scaleFactor: number): SVGMatrix; - rotateFromVector(x: number, y: number): SVGMatrix; - skewX(angle: number): SVGMatrix; -} -declare var SVGMatrix: { - prototype: SVGMatrix; - new (): SVGMatrix; -} - -interface MSPopupWindow { - document: Document; - isOpen: boolean; - show(x: number, y: number, w: number, h: number, element?: any): void; - hide(): void; -} -declare var MSPopupWindow: { - prototype: MSPopupWindow; - new (): MSPopupWindow; -} - -interface BeforeUnloadEvent extends Event { - returnValue: string; -} -declare var BeforeUnloadEvent: { - prototype: BeforeUnloadEvent; - new (): BeforeUnloadEvent; -} - -interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - animatedInstanceRoot: SVGElementInstance; - instanceRoot: SVGElementInstance; - x: SVGAnimatedLength; - height: SVGAnimatedLength; -} -declare var SVGUseElement: { - prototype: SVGUseElement; - new (): SVGUseElement; -} - -interface Event { - timeStamp: number; - defaultPrevented: boolean; - isTrusted: boolean; - currentTarget: EventTarget; - cancelBubble: boolean; - target: EventTarget; - eventPhase: number; - cancelable: boolean; - type: string; - srcElement: Element; - bubbles: boolean; - initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void; - stopPropagation(): void; - stopImmediatePropagation(): void; - preventDefault(): void; - CAPTURING_PHASE: number; - AT_TARGET: number; - BUBBLING_PHASE: number; -} -declare var Event: { - prototype: Event; - new (): Event; - CAPTURING_PHASE: number; - AT_TARGET: number; - BUBBLING_PHASE: number; -} - -interface ImageData { - width: number; - data: Uint8Array; - height: number; -} -declare var ImageData: { - prototype: ImageData; - new (): ImageData; -} - -interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment { - /** - * Sets or retrieves the width of the object. - */ - width: any; - /** - * Sets or retrieves the alignment of the object relative to the display or table. - */ - align: string; - /** - * Sets or retrieves the number of columns in the group. - */ - span: number; -} -declare var HTMLTableColElement: { - prototype: HTMLTableColElement; - new (): HTMLTableColElement; -} - -interface SVGException { - code: number; - message: string; - toString(): string; - SVG_MATRIX_NOT_INVERTABLE: number; - SVG_WRONG_TYPE_ERR: number; - SVG_INVALID_VALUE_ERR: number; -} -declare var SVGException: { - prototype: SVGException; - new (): SVGException; - SVG_MATRIX_NOT_INVERTABLE: number; - SVG_WRONG_TYPE_ERR: number; - SVG_INVALID_VALUE_ERR: number; -} - -interface SVGLinearGradientElement extends SVGGradientElement { - y1: SVGAnimatedLength; - x2: SVGAnimatedLength; - x1: SVGAnimatedLength; - y2: SVGAnimatedLength; -} -declare var SVGLinearGradientElement: { - prototype: SVGLinearGradientElement; - new (): SVGLinearGradientElement; -} - -interface HTMLTableAlignment { - /** - * Sets or retrieves a value that you can use to implement your own ch functionality for the object. - */ - ch: string; - /** - * Sets or retrieves how text and other content are vertically aligned within the object that contains them. - */ - vAlign: string; - /** - * Sets or retrieves a value that you can use to implement your own chOff functionality for the object. - */ - chOff: string; -} - -interface SVGAnimatedEnumeration { - animVal: number; - baseVal: number; -} -declare var SVGAnimatedEnumeration: { - prototype: SVGAnimatedEnumeration; - new (): SVGAnimatedEnumeration; -} - -interface DOML2DeprecatedSizeProperty { - size: number; -} - -interface HTMLUListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { -} -declare var HTMLUListElement: { - prototype: HTMLUListElement; - new (): HTMLUListElement; -} - -interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - ry: SVGAnimatedLength; - rx: SVGAnimatedLength; - x: SVGAnimatedLength; - height: SVGAnimatedLength; -} -declare var SVGRectElement: { - prototype: SVGRectElement; - new (): SVGRectElement; -} - -interface ErrorEventHandler { - (event: Event, source: string, fileno: number, columnNumber: number): void; - (message: any, uri: string, lineNumber: number, columnNumber?: number): void; -} - -interface HTMLDivElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Sets or retrieves whether the browser automatically performs wordwrap. - */ - noWrap: boolean; -} -declare var HTMLDivElement: { - prototype: HTMLDivElement; - new (): HTMLDivElement; -} - -interface DOML2DeprecatedBorderStyle { - border: string; -} - -interface NamedNodeMap { - length: number; - removeNamedItemNS(namespaceURI: string, localName: string): Attr; - item(index: number): Attr; - [index: number]: Attr; - removeNamedItem(name: string): Attr; - getNamedItem(name: string): Attr; - setNamedItem(arg: Attr): Attr; - getNamedItemNS(namespaceURI: string, localName: string): Attr; - setNamedItemNS(arg: Attr): Attr; -} -declare var NamedNodeMap: { - prototype: NamedNodeMap; - new (): NamedNodeMap; -} - -interface MediaList { - length: number; - mediaText: string; - deleteMedium(oldMedium: string): void; - appendMedium(newMedium: string): void; - item(index: number): string; - [index: number]: string; - toString(): string; -} -declare var MediaList: { - prototype: MediaList; - new (): MediaList; -} - -interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegCurvetoQuadraticSmoothAbs: { - prototype: SVGPathSegCurvetoQuadraticSmoothAbs; - new (): SVGPathSegCurvetoQuadraticSmoothAbs; -} - -interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg { - y: number; - x2: number; - x: number; - y2: number; -} -declare var SVGPathSegCurvetoCubicSmoothRel: { - prototype: SVGPathSegCurvetoCubicSmoothRel; - new (): SVGPathSegCurvetoCubicSmoothRel; -} - -interface SVGLengthList { - numberOfItems: number; - replaceItem(newItem: SVGLength, index: number): SVGLength; - getItem(index: number): SVGLength; - clear(): void; - appendItem(newItem: SVGLength): SVGLength; - initialize(newItem: SVGLength): SVGLength; - removeItem(index: number): SVGLength; - insertItemBefore(newItem: SVGLength, index: number): SVGLength; -} -declare var SVGLengthList: { - prototype: SVGLengthList; - new (): SVGLengthList; -} - -interface ProcessingInstruction extends Node { - target: string; - data: string; -} -declare var ProcessingInstruction: { - prototype: ProcessingInstruction; - new (): ProcessingInstruction; -} - -interface MSWindowExtensions { - status: string; - onmouseleave: (ev: MouseEvent) => any; - screenLeft: number; - offscreenBuffering: any; - maxConnectionsPerServer: number; - onmouseenter: (ev: MouseEvent) => any; - clipboardData: DataTransfer; - defaultStatus: string; - clientInformation: Navigator; - closed: boolean; - onhelp: (ev: Event) => any; - external: External; - event: MSEventObj; - onfocusout: (ev: FocusEvent) => any; - screenTop: number; - onfocusin: (ev: FocusEvent) => any; - showModelessDialog(url?: string, argument?: any, options?: any): Window; - navigate(url: string): void; - resizeBy(x?: number, y?: number): void; - item(index: any): any; - resizeTo(x?: number, y?: number): void; - createPopup(arguments?: any): MSPopupWindow; - toStaticHTML(html: string): string; - execScript(code: string, language?: string): any; - msWriteProfilerMark(profilerMarkName: string): void; - moveTo(x?: number, y?: number): void; - moveBy(x?: number, y?: number): void; - showHelp(url: string, helpArg?: any, features?: string): void; -} - -interface MSBehaviorUrnsCollection { - length: number; - item(index: number): string; -} -declare var MSBehaviorUrnsCollection: { - prototype: MSBehaviorUrnsCollection; - new (): MSBehaviorUrnsCollection; -} - -interface CSSFontFaceRule extends CSSRule { - style: CSSStyleDeclaration; -} -declare var CSSFontFaceRule: { - prototype: CSSFontFaceRule; - new (): CSSFontFaceRule; -} - -interface DOML2DeprecatedBackgroundStyle { - background: string; -} - -interface TextEvent extends UIEvent { - inputMethod: number; - data: string; - locale: string; - initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void; - DOM_INPUT_METHOD_KEYBOARD: number; - DOM_INPUT_METHOD_DROP: number; - DOM_INPUT_METHOD_IME: number; - DOM_INPUT_METHOD_SCRIPT: number; - DOM_INPUT_METHOD_VOICE: number; - DOM_INPUT_METHOD_UNKNOWN: number; - DOM_INPUT_METHOD_PASTE: number; - DOM_INPUT_METHOD_HANDWRITING: number; - DOM_INPUT_METHOD_OPTION: number; - DOM_INPUT_METHOD_MULTIMODAL: number; -} -declare var TextEvent: { - prototype: TextEvent; - new (): TextEvent; - DOM_INPUT_METHOD_KEYBOARD: number; - DOM_INPUT_METHOD_DROP: number; - DOM_INPUT_METHOD_IME: number; - DOM_INPUT_METHOD_SCRIPT: number; - DOM_INPUT_METHOD_VOICE: number; - DOM_INPUT_METHOD_UNKNOWN: number; - DOM_INPUT_METHOD_PASTE: number; - DOM_INPUT_METHOD_HANDWRITING: number; - DOM_INPUT_METHOD_OPTION: number; - DOM_INPUT_METHOD_MULTIMODAL: number; -} - -interface DocumentFragment extends Node, NodeSelector, MSEventAttachmentTarget, MSNodeExtensions { -} -declare var DocumentFragment: { - prototype: DocumentFragment; - new (): DocumentFragment; -} - -interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired { -} -declare var SVGPolylineElement: { - prototype: SVGPolylineElement; - new (): SVGPolylineElement; -} - -interface SVGAnimatedPathData { - pathSegList: SVGPathSegList; -} - -interface Position { - timestamp: number; - coords: Coordinates; -} -declare var Position: { - prototype: Position; - new (): Position; -} - -interface BookmarkCollection { - length: number; - item(index: number): any; - [index: number]: any; -} -declare var BookmarkCollection: { - prototype: BookmarkCollection; - new (): BookmarkCollection; -} - -interface PerformanceMark extends PerformanceEntry { -} -declare var PerformanceMark: { - prototype: PerformanceMark; - new (): PerformanceMark; -} - -interface CSSPageRule extends CSSRule { - pseudoClass: string; - selectorText: string; - selector: string; - style: CSSStyleDeclaration; -} -declare var CSSPageRule: { - prototype: CSSPageRule; - new (): CSSPageRule; -} - -interface HTMLBRElement extends HTMLElement { - /** - * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document. - */ - clear: string; -} -declare var HTMLBRElement: { - prototype: HTMLBRElement; - new (): HTMLBRElement; -} - -interface MSNavigatorExtensions { - userLanguage: string; - plugins: MSPluginsCollection; - cookieEnabled: boolean; - appCodeName: string; - cpuClass: string; - appMinorVersion: string; - connectionSpeed: number; - browserLanguage: string; - mimeTypes: MSMimeTypesCollection; - systemLanguage: string; - javaEnabled(): boolean; - taintEnabled(): boolean; -} - -interface HTMLSpanElement extends HTMLElement, MSDataBindingExtensions { -} -declare var HTMLSpanElement: { - prototype: HTMLSpanElement; - new (): HTMLSpanElement; -} - -interface HTMLHeadElement extends HTMLElement { - profile: string; -} -declare var HTMLHeadElement: { - prototype: HTMLHeadElement; - new (): HTMLHeadElement; -} - -interface HTMLHeadingElement extends HTMLElement, DOML2DeprecatedTextFlowControl { - /** - * Sets or retrieves a value that indicates the table alignment. - */ - align: string; -} -declare var HTMLHeadingElement: { - prototype: HTMLHeadingElement; - new (): HTMLHeadingElement; -} - -interface HTMLFormElement extends HTMLElement, MSHTMLCollectionExtensions { - /** - * Sets or retrieves the number of objects in a collection. - */ - length: number; - /** - * Sets or retrieves the window or frame at which to target content. - */ - target: string; - /** - * Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form. - */ - acceptCharset: string; - /** - * Sets or retrieves the encoding type for the form. - */ - enctype: string; - /** - * Retrieves a collection, in source order, of all controls in a given form. - */ - elements: HTMLCollection; - /** - * Sets or retrieves the URL to which the form content is sent for processing. - */ - action: string; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Sets or retrieves how to send the form data to the server. - */ - method: string; - /** - * Sets or retrieves the MIME encoding for the form. - */ - encoding: string; - /** - * Fires when the user resets a form. - */ - reset(): void; - /** - * Retrieves a form object or an object from an elements collection. - * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made. - * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned. - */ - item(name?: any, index?: any): any; - /** - * Fires when a FORM is about to be submitted. - */ - submit(): void; - /** - * Retrieves a form object or an object from an elements collection. - */ - namedItem(name: string): any; - [name: string]: any; -} -declare var HTMLFormElement: { - prototype: HTMLFormElement; - new (): HTMLFormElement; -} - -interface SVGZoomAndPan { - zoomAndPan: number; - SVG_ZOOMANDPAN_MAGNIFY: number; - SVG_ZOOMANDPAN_UNKNOWN: number; - SVG_ZOOMANDPAN_DISABLE: number; -} -declare var SVGZoomAndPan: { - prototype: SVGZoomAndPan; - new (): SVGZoomAndPan; - SVG_ZOOMANDPAN_MAGNIFY: number; - SVG_ZOOMANDPAN_UNKNOWN: number; - SVG_ZOOMANDPAN_DISABLE: number; -} - -interface HTMLMediaElement extends HTMLElement { - /** - * Gets the earliest possible position, in seconds, that the playback can begin. - */ - initialTime: number; - /** - * Gets TimeRanges for the current media resource that has been played. - */ - played: TimeRanges; - /** - * Gets the address or URL of the current media resource that is selected by IHTMLMediaElement. - */ - currentSrc: string; - readyState: any; - /** - * The autobuffer element is not supported by Internet Explorer 9. Use the preload element instead. - */ - autobuffer: boolean; - /** - * Gets or sets a flag to specify whether playback should restart after it completes. - */ - loop: boolean; - /** - * Gets information about whether the playback has ended or not. - */ - ended: boolean; - /** - * Gets a collection of buffered time ranges. - */ - buffered: TimeRanges; - /** - * Returns an object representing the current error state of the audio or video element. - */ - error: MediaError; - /** - * Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked. - */ - seekable: TimeRanges; - /** - * Gets or sets a value that indicates whether to start playing the media automatically. - */ - autoplay: boolean; - /** - * Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player). - */ - controls: boolean; - /** - * Gets or sets the volume level for audio portions of the media element. - */ - volume: number; - /** - * The address or URL of the a media resource that is to be considered. - */ - src: string; - /** - * Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource. - */ - playbackRate: number; - /** - * Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming. - */ - duration: number; - /** - * Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted. - */ - muted: boolean; - /** - * Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource. - */ - defaultPlaybackRate: number; - /** - * Gets a flag that specifies whether playback is paused. - */ - paused: boolean; - /** - * Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource. - */ - seeking: boolean; - /** - * Gets or sets the current playback position, in seconds. - */ - currentTime: number; - /** - * Gets or sets the current playback position, in seconds. - */ - preload: string; - /** - * Gets the current network activity for the element. - */ - networkState: number; - /** - * Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not. - */ - pause(): void; - /** - * Loads and starts playback of a media resource. - */ - play(): void; - /** - * Fires immediately after the client loads the object. - */ - load(): void; - /** - * Returns a string that specifies whether the client can play a given media resource type. - */ - canPlayType(type: string): string; - HAVE_METADATA: number; - HAVE_CURRENT_DATA: number; - HAVE_NOTHING: number; - NETWORK_NO_SOURCE: number; - HAVE_ENOUGH_DATA: number; - NETWORK_EMPTY: number; - NETWORK_LOADING: number; - NETWORK_IDLE: number; - HAVE_FUTURE_DATA: number; -} -declare var HTMLMediaElement: { - prototype: HTMLMediaElement; - new (): HTMLMediaElement; - HAVE_METADATA: number; - HAVE_CURRENT_DATA: number; - HAVE_NOTHING: number; - NETWORK_NO_SOURCE: number; - HAVE_ENOUGH_DATA: number; - NETWORK_EMPTY: number; - NETWORK_LOADING: number; - NETWORK_IDLE: number; - HAVE_FUTURE_DATA: number; -} - -interface ElementCSSInlineStyle { - runtimeStyle: MSStyleCSSProperties; - currentStyle: MSCurrentStyleCSSProperties; - doScroll(component?: any): void; - componentFromPoint(x: number, y: number): string; -} - -interface DOMParser { - parseFromString(source: string, mimeType: string): Document; -} -declare var DOMParser: { - prototype: DOMParser; - new (): DOMParser; -} - -interface MSMimeTypesCollection { - length: number; -} -declare var MSMimeTypesCollection: { - prototype: MSMimeTypesCollection; - new (): MSMimeTypesCollection; -} - -interface StyleSheet { - disabled: boolean; - ownerNode: Node; - parentStyleSheet: StyleSheet; - href: string; - media: MediaList; - type: string; - title: string; -} -declare var StyleSheet: { - prototype: StyleSheet; - new (): StyleSheet; -} - -interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference { - startOffset: SVGAnimatedLength; - method: SVGAnimatedEnumeration; - spacing: SVGAnimatedEnumeration; - TEXTPATH_SPACINGTYPE_EXACT: number; - TEXTPATH_METHODTYPE_STRETCH: number; - TEXTPATH_SPACINGTYPE_AUTO: number; - TEXTPATH_SPACINGTYPE_UNKNOWN: number; - TEXTPATH_METHODTYPE_UNKNOWN: number; - TEXTPATH_METHODTYPE_ALIGN: number; -} -declare var SVGTextPathElement: { - prototype: SVGTextPathElement; - new (): SVGTextPathElement; - TEXTPATH_SPACINGTYPE_EXACT: number; - TEXTPATH_METHODTYPE_STRETCH: number; - TEXTPATH_SPACINGTYPE_AUTO: number; - TEXTPATH_SPACINGTYPE_UNKNOWN: number; - TEXTPATH_METHODTYPE_UNKNOWN: number; - TEXTPATH_METHODTYPE_ALIGN: number; -} - -interface HTMLDTElement extends HTMLElement { - /** - * Sets or retrieves whether the browser automatically performs wordwrap. - */ - noWrap: boolean; -} -declare var HTMLDTElement: { - prototype: HTMLDTElement; - new (): HTMLDTElement; -} - -interface NodeList { - length: number; - item(index: number): Node; - [index: number]: Node; -} -declare var NodeList: { - prototype: NodeList; - new (): NodeList; -} - -interface NodeListOf extends NodeList { - length: number; - item(index: number): TNode; - [index: number]: TNode; -} - -interface XMLSerializer { - serializeToString(target: Node): string; -} -declare var XMLSerializer: { - prototype: XMLSerializer; - new (): XMLSerializer; -} - -interface PerformanceMeasure extends PerformanceEntry { -} -declare var PerformanceMeasure: { - prototype: PerformanceMeasure; - new (): PerformanceMeasure; -} - -interface SVGGradientElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGExternalResourcesRequired, SVGURIReference { - spreadMethod: SVGAnimatedEnumeration; - gradientTransform: SVGAnimatedTransformList; - gradientUnits: SVGAnimatedEnumeration; - SVG_SPREADMETHOD_REFLECT: number; - SVG_SPREADMETHOD_PAD: number; - SVG_SPREADMETHOD_UNKNOWN: number; - SVG_SPREADMETHOD_REPEAT: number; -} -declare var SVGGradientElement: { - prototype: SVGGradientElement; - new (): SVGGradientElement; - SVG_SPREADMETHOD_REFLECT: number; - SVG_SPREADMETHOD_PAD: number; - SVG_SPREADMETHOD_UNKNOWN: number; - SVG_SPREADMETHOD_REPEAT: number; -} - -interface NodeFilter { - acceptNode(n: Node): number; - SHOW_ENTITY_REFERENCE: number; - SHOW_NOTATION: number; - SHOW_ENTITY: number; - SHOW_DOCUMENT: number; - SHOW_PROCESSING_INSTRUCTION: number; - FILTER_REJECT: number; - SHOW_CDATA_SECTION: number; - FILTER_ACCEPT: number; - SHOW_ALL: number; - SHOW_DOCUMENT_TYPE: number; - SHOW_TEXT: number; - SHOW_ELEMENT: number; - SHOW_COMMENT: number; - FILTER_SKIP: number; - SHOW_ATTRIBUTE: number; - SHOW_DOCUMENT_FRAGMENT: number; -} -declare var NodeFilter: { - prototype: NodeFilter; - new (): NodeFilter; - SHOW_ENTITY_REFERENCE: number; - SHOW_NOTATION: number; - SHOW_ENTITY: number; - SHOW_DOCUMENT: number; - SHOW_PROCESSING_INSTRUCTION: number; - FILTER_REJECT: number; - SHOW_CDATA_SECTION: number; - FILTER_ACCEPT: number; - SHOW_ALL: number; - SHOW_DOCUMENT_TYPE: number; - SHOW_TEXT: number; - SHOW_ELEMENT: number; - SHOW_COMMENT: number; - FILTER_SKIP: number; - SHOW_ATTRIBUTE: number; - SHOW_DOCUMENT_FRAGMENT: number; -} - -interface SVGNumberList { - numberOfItems: number; - replaceItem(newItem: SVGNumber, index: number): SVGNumber; - getItem(index: number): SVGNumber; - clear(): void; - appendItem(newItem: SVGNumber): SVGNumber; - initialize(newItem: SVGNumber): SVGNumber; - removeItem(index: number): SVGNumber; - insertItemBefore(newItem: SVGNumber, index: number): SVGNumber; -} -declare var SVGNumberList: { - prototype: SVGNumberList; - new (): SVGNumberList; -} - -interface MediaError { - code: number; - MEDIA_ERR_ABORTED: number; - MEDIA_ERR_NETWORK: number; - MEDIA_ERR_SRC_NOT_SUPPORTED: number; - MEDIA_ERR_DECODE: number; -} -declare var MediaError: { - prototype: MediaError; - new (): MediaError; - MEDIA_ERR_ABORTED: number; - MEDIA_ERR_NETWORK: number; - MEDIA_ERR_SRC_NOT_SUPPORTED: number; - MEDIA_ERR_DECODE: number; -} - -interface HTMLFieldSetElement extends HTMLElement { - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; -} -declare var HTMLFieldSetElement: { - prototype: HTMLFieldSetElement; - new (): HTMLFieldSetElement; -} - -interface HTMLBGSoundElement extends HTMLElement { - /** - * Sets or gets the value indicating how the volume of the background sound is divided between the left speaker and the right speaker. - */ - balance: any; - /** - * Sets or gets the volume setting for the sound. - */ - volume: any; - /** - * Sets or gets the URL of a sound to play. - */ - src: string; - /** - * Sets or retrieves the number of times a sound or video clip will loop when activated. - */ - loop: number; -} -declare var HTMLBGSoundElement: { - prototype: HTMLBGSoundElement; - new (): HTMLBGSoundElement; -} - -interface HTMLElement extends Element, ElementCSSInlineStyle, MSEventAttachmentTarget, MSNodeExtensions { - onmouseleave: (ev: MouseEvent) => any; - onbeforecut: (ev: DragEvent) => any; - onkeydown: (ev: KeyboardEvent) => any; - onmove: (ev: MSEventObj) => any; - onkeyup: (ev: KeyboardEvent) => any; - onreset: (ev: Event) => any; - onhelp: (ev: Event) => any; - ondragleave: (ev: DragEvent) => any; - className: string; - onfocusin: (ev: FocusEvent) => any; - onseeked: (ev: Event) => any; - recordNumber: any; - title: string; - parentTextEdit: Element; - outerHTML: string; - ondurationchange: (ev: Event) => any; - offsetHeight: number; - all: HTMLCollection; - onblur: (ev: FocusEvent) => any; - dir: string; - onemptied: (ev: Event) => any; - onseeking: (ev: Event) => any; - oncanplay: (ev: Event) => any; - ondeactivate: (ev: UIEvent) => any; - ondatasetchanged: (ev: MSEventObj) => any; - onrowsdelete: (ev: MSEventObj) => any; - sourceIndex: number; - onloadstart: (ev: Event) => any; - onlosecapture: (ev: MSEventObj) => any; - ondragenter: (ev: DragEvent) => any; - oncontrolselect: (ev: MSEventObj) => any; - onsubmit: (ev: Event) => any; - behaviorUrns: MSBehaviorUrnsCollection; - scopeName: string; - onchange: (ev: Event) => any; - id: string; - onlayoutcomplete: (ev: MSEventObj) => any; - uniqueID: string; - onbeforeactivate: (ev: UIEvent) => any; - oncanplaythrough: (ev: Event) => any; - onbeforeupdate: (ev: MSEventObj) => any; - onfilterchange: (ev: MSEventObj) => any; - offsetParent: Element; - ondatasetcomplete: (ev: MSEventObj) => any; - onsuspend: (ev: Event) => any; - readyState: any; - onmouseenter: (ev: MouseEvent) => any; - innerText: string; - onerrorupdate: (ev: MSEventObj) => any; - onmouseout: (ev: MouseEvent) => any; - parentElement: HTMLElement; - onmousewheel: (ev: MouseWheelEvent) => any; - onvolumechange: (ev: Event) => any; - oncellchange: (ev: MSEventObj) => any; - onrowexit: (ev: MSEventObj) => any; - onrowsinserted: (ev: MSEventObj) => any; - onpropertychange: (ev: MSEventObj) => any; - filters: Object; - children: HTMLCollection; - ondragend: (ev: DragEvent) => any; - onbeforepaste: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - offsetTop: number; - onmouseup: (ev: MouseEvent) => any; - ondragstart: (ev: DragEvent) => any; - onbeforecopy: (ev: DragEvent) => any; - ondrag: (ev: DragEvent) => any; - innerHTML: string; - onmouseover: (ev: MouseEvent) => any; - lang: string; - uniqueNumber: number; - onpause: (ev: Event) => any; - tagUrn: string; - onmousedown: (ev: MouseEvent) => any; - onclick: (ev: MouseEvent) => any; - onwaiting: (ev: Event) => any; - onresizestart: (ev: MSEventObj) => any; - offsetLeft: number; - isTextEdit: boolean; - isDisabled: boolean; - onpaste: (ev: DragEvent) => any; - canHaveHTML: boolean; - onmoveend: (ev: MSEventObj) => any; - language: string; - onstalled: (ev: Event) => any; - onmousemove: (ev: MouseEvent) => any; - style: MSStyleCSSProperties; - isContentEditable: boolean; - onbeforeeditfocus: (ev: MSEventObj) => any; - onratechange: (ev: Event) => any; - contentEditable: string; - tabIndex: number; - document: Document; - onprogress: (ev: any) => any; - ondblclick: (ev: MouseEvent) => any; - oncontextmenu: (ev: MouseEvent) => any; - onloadedmetadata: (ev: Event) => any; - onafterupdate: (ev: MSEventObj) => any; - onerror: (ev: Event) => any; - onplay: (ev: Event) => any; - onresizeend: (ev: MSEventObj) => any; - onplaying: (ev: Event) => any; - isMultiLine: boolean; - onfocusout: (ev: FocusEvent) => any; - onabort: (ev: UIEvent) => any; - ondataavailable: (ev: MSEventObj) => any; - hideFocus: boolean; - onreadystatechange: (ev: Event) => any; - onkeypress: (ev: KeyboardEvent) => any; - onloadeddata: (ev: Event) => any; - onbeforedeactivate: (ev: UIEvent) => any; - outerText: string; - disabled: boolean; - onactivate: (ev: UIEvent) => any; - accessKey: string; - onmovestart: (ev: MSEventObj) => any; - onselectstart: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - ontimeupdate: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - oncut: (ev: DragEvent) => any; - onselect: (ev: UIEvent) => any; - ondrop: (ev: DragEvent) => any; - offsetWidth: number; - oncopy: (ev: DragEvent) => any; - onended: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - onrowenter: (ev: MSEventObj) => any; - onload: (ev: Event) => any; - canHaveChildren: boolean; - oninput: (ev: Event) => any; - dragDrop(): boolean; - scrollIntoView(top?: boolean): void; - addFilter(filter: Object): void; - setCapture(containerCapture?: boolean): void; - focus(): void; - getAdjacentText(where: string): string; - insertAdjacentText(where: string, text: string): void; - getElementsByClassName(classNames: string): NodeList; - setActive(): void; - removeFilter(filter: Object): void; - blur(): void; - clearAttributes(): void; - releaseCapture(): void; - createControlRange(): ControlRangeCollection; - removeBehavior(cookie: number): boolean; - contains(child: HTMLElement): boolean; - click(): void; - insertAdjacentElement(position: string, insertedElement: Element): Element; - mergeAttributes(source: HTMLElement, preserveIdentity?: boolean): void; - replaceAdjacentText(where: string, newText: string): string; - applyElement(apply: Element, where?: string): Element; - addBehavior(bstrUrl: string, factory?: any): number; - insertAdjacentHTML(where: string, html: string): void; -} -declare var HTMLElement: { - prototype: HTMLElement; - new (): HTMLElement; -} - -interface Comment extends CharacterData { - text: string; -} -declare var Comment: { - prototype: Comment; - new (): Comment; -} - -interface PerformanceResourceTiming extends PerformanceEntry { - redirectStart: number; - redirectEnd: number; - domainLookupEnd: number; - responseStart: number; - domainLookupStart: number; - fetchStart: number; - requestStart: number; - connectEnd: number; - connectStart: number; - initiatorType: string; - responseEnd: number; -} -declare var PerformanceResourceTiming: { - prototype: PerformanceResourceTiming; - new (): PerformanceResourceTiming; -} - -interface CanvasPattern { -} -declare var CanvasPattern: { - prototype: CanvasPattern; - new (): CanvasPattern; -} - -interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty { - /** - * Sets or retrieves the width of the object. - */ - width: number; - /** - * Sets or retrieves how the object is aligned with adjacent text. - */ - align: string; - /** - * Sets or retrieves whether the horizontal rule is drawn with 3-D shading. - */ - noShade: boolean; -} -declare var HTMLHRElement: { - prototype: HTMLHRElement; - new (): HTMLHRElement; -} - -interface HTMLObjectElement extends HTMLElement, GetSVGDocument, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions { - /** - * Sets or retrieves the width of the object. - */ - width: string; - /** - * Sets or retrieves the Internet media type for the code associated with the object. - */ - codeType: string; - /** - * Retrieves the contained object. - */ - object: Object; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves the URL of the file containing the compiled Java class. - */ - code: string; - /** - * Sets or retrieves a character string that can be used to implement your own archive functionality for the object. - */ - archive: string; - /** - * Sets or retrieves a message to be displayed while an object is loading. - */ - standby: string; - /** - * Sets or retrieves a text alternative to the graphic. - */ - alt: string; - /** - * Sets or retrieves the class identifier for the object. - */ - classid: string; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. - */ - useMap: string; - /** - * Sets or retrieves the URL that references the data of the object. - */ - data: string; - /** - * Sets or retrieves the height of the object. - */ - height: string; - /** - * Retrieves the document object of the page or frame. - */ - contentDocument: Document; - /** - * Gets or sets the optional alternative HTML script to execute if the object fails to load. - */ - altHtml: string; - /** - * Sets or retrieves the URL of the component. - */ - codeBase: string; - declare: boolean; - /** - * Sets or retrieves the MIME type of the object. - */ - type: string; - /** - * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element. - */ - BaseHref: string; -} -declare var HTMLObjectElement: { - prototype: HTMLObjectElement; - new (): HTMLObjectElement; -} - -interface HTMLEmbedElement extends HTMLElement, GetSVGDocument { - /** - * Sets or retrieves the width of the object. - */ - width: string; - /** - * Retrieves the palette used for the embedded document. - */ - palette: string; - /** - * Sets or retrieves a URL to be loaded by the object. - */ - src: string; - /** - * Sets or retrieves the name of the object. - */ - name: string; - /** - * Retrieves the URL of the plug-in used to view an embedded document. - */ - pluginspage: string; - /** - * Sets or retrieves the height of the object. - */ - height: string; - /** - * Sets or retrieves the height and width units of the embed object. - */ - units: string; -} -declare var HTMLEmbedElement: { - prototype: HTMLEmbedElement; - new (): HTMLEmbedElement; -} - -interface StorageEvent extends Event { - oldValue: any; - newValue: any; - url: string; - storageArea: Storage; - key: string; - initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void; -} -declare var StorageEvent: { - prototype: StorageEvent; - new (): StorageEvent; -} - -interface CharacterData extends Node { - length: number; - data: string; - deleteData(offset: number, count: number): void; - replaceData(offset: number, count: number, arg: string): void; - appendData(arg: string): void; - insertData(offset: number, arg: string): void; - substringData(offset: number, count: number): string; -} -declare var CharacterData: { - prototype: CharacterData; - new (): CharacterData; -} - -interface HTMLOptGroupElement extends HTMLElement, MSDataBindingExtensions { - /** - * Sets or retrieves the ordinal position of an option in a list box. - */ - index: number; - /** - * Sets or retrieves the status of an option. - */ - defaultSelected: boolean; - /** - * Sets or retrieves the text string specified by the option tag. - */ - text: string; - /** - * Sets or retrieves the value which is returned to the server when the form control is submitted. - */ - value: string; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves a value that you can use to implement your own label functionality for the object. - */ - label: string; - /** - * Sets or retrieves whether the option in the list box is the default item. - */ - selected: boolean; -} -declare var HTMLOptGroupElement: { - prototype: HTMLOptGroupElement; - new (): HTMLOptGroupElement; -} - -interface HTMLIsIndexElement extends HTMLElement { - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; - /** - * Sets or retrieves the URL to which the form content is sent for processing. - */ - action: string; - prompt: string; -} -declare var HTMLIsIndexElement: { - prototype: HTMLIsIndexElement; - new (): HTMLIsIndexElement; -} - -interface SVGPathSegLinetoRel extends SVGPathSeg { - y: number; - x: number; -} -declare var SVGPathSegLinetoRel: { - prototype: SVGPathSegLinetoRel; - new (): SVGPathSegLinetoRel; -} - -interface DOMException { - code: number; - message: string; - toString(): string; - HIERARCHY_REQUEST_ERR: number; - NO_MODIFICATION_ALLOWED_ERR: number; - INVALID_MODIFICATION_ERR: number; - NAMESPACE_ERR: number; - INVALID_CHARACTER_ERR: number; - TYPE_MISMATCH_ERR: number; - ABORT_ERR: number; - INVALID_STATE_ERR: number; - SECURITY_ERR: number; - NETWORK_ERR: number; - WRONG_DOCUMENT_ERR: number; - QUOTA_EXCEEDED_ERR: number; - INDEX_SIZE_ERR: number; - DOMSTRING_SIZE_ERR: number; - SYNTAX_ERR: number; - SERIALIZE_ERR: number; - VALIDATION_ERR: number; - NOT_FOUND_ERR: number; - URL_MISMATCH_ERR: number; - PARSE_ERR: number; - NO_DATA_ALLOWED_ERR: number; - NOT_SUPPORTED_ERR: number; - INVALID_ACCESS_ERR: number; - INUSE_ATTRIBUTE_ERR: number; -} -declare var DOMException: { - prototype: DOMException; - new (): DOMException; - HIERARCHY_REQUEST_ERR: number; - NO_MODIFICATION_ALLOWED_ERR: number; - INVALID_MODIFICATION_ERR: number; - NAMESPACE_ERR: number; - INVALID_CHARACTER_ERR: number; - TYPE_MISMATCH_ERR: number; - ABORT_ERR: number; - INVALID_STATE_ERR: number; - SECURITY_ERR: number; - NETWORK_ERR: number; - WRONG_DOCUMENT_ERR: number; - QUOTA_EXCEEDED_ERR: number; - INDEX_SIZE_ERR: number; - DOMSTRING_SIZE_ERR: number; - SYNTAX_ERR: number; - SERIALIZE_ERR: number; - VALIDATION_ERR: number; - NOT_FOUND_ERR: number; - URL_MISMATCH_ERR: number; - PARSE_ERR: number; - NO_DATA_ALLOWED_ERR: number; - NOT_SUPPORTED_ERR: number; - INVALID_ACCESS_ERR: number; - INUSE_ATTRIBUTE_ERR: number; -} - -interface SVGAnimatedBoolean { - animVal: boolean; - baseVal: boolean; -} -declare var SVGAnimatedBoolean: { - prototype: SVGAnimatedBoolean; - new (): SVGAnimatedBoolean; -} - -interface MSCompatibleInfoCollection { - length: number; - item(index: number): MSCompatibleInfo; -} -declare var MSCompatibleInfoCollection: { - prototype: MSCompatibleInfoCollection; - new (): MSCompatibleInfoCollection; -} - -interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { -} -declare var SVGSwitchElement: { - prototype: SVGSwitchElement; - new (): SVGSwitchElement; -} - -interface SVGPreserveAspectRatio { - align: number; - meetOrSlice: number; - SVG_PRESERVEASPECTRATIO_NONE: number; - SVG_PRESERVEASPECTRATIO_XMINYMID: number; - SVG_PRESERVEASPECTRATIO_XMAXYMIN: number; - SVG_PRESERVEASPECTRATIO_XMINYMAX: number; - SVG_PRESERVEASPECTRATIO_XMAXYMAX: number; - SVG_MEETORSLICE_UNKNOWN: number; - SVG_PRESERVEASPECTRATIO_XMAXYMID: number; - SVG_PRESERVEASPECTRATIO_XMIDYMAX: number; - SVG_PRESERVEASPECTRATIO_XMINYMIN: number; - SVG_MEETORSLICE_MEET: number; - SVG_PRESERVEASPECTRATIO_XMIDYMID: number; - SVG_PRESERVEASPECTRATIO_XMIDYMIN: number; - SVG_MEETORSLICE_SLICE: number; - SVG_PRESERVEASPECTRATIO_UNKNOWN: number; -} -declare var SVGPreserveAspectRatio: { - prototype: SVGPreserveAspectRatio; - new (): SVGPreserveAspectRatio; - SVG_PRESERVEASPECTRATIO_NONE: number; - SVG_PRESERVEASPECTRATIO_XMINYMID: number; - SVG_PRESERVEASPECTRATIO_XMAXYMIN: number; - SVG_PRESERVEASPECTRATIO_XMINYMAX: number; - SVG_PRESERVEASPECTRATIO_XMAXYMAX: number; - SVG_MEETORSLICE_UNKNOWN: number; - SVG_PRESERVEASPECTRATIO_XMAXYMID: number; - SVG_PRESERVEASPECTRATIO_XMIDYMAX: number; - SVG_PRESERVEASPECTRATIO_XMINYMIN: number; - SVG_MEETORSLICE_MEET: number; - SVG_PRESERVEASPECTRATIO_XMIDYMID: number; - SVG_PRESERVEASPECTRATIO_XMIDYMIN: number; - SVG_MEETORSLICE_SLICE: number; - SVG_PRESERVEASPECTRATIO_UNKNOWN: number; -} - -interface Attr extends Node { - expando: boolean; - specified: boolean; - ownerElement: Element; - value: string; - name: string; -} -declare var Attr: { - prototype: Attr; - new (): Attr; -} - -interface PerformanceNavigation { - redirectCount: number; - type: number; - toJSON(): any; - TYPE_RELOAD: number; - TYPE_RESERVED: number; - TYPE_BACK_FORWARD: number; - TYPE_NAVIGATE: number; -} -declare var PerformanceNavigation: { - prototype: PerformanceNavigation; - new (): PerformanceNavigation; - TYPE_RELOAD: number; - TYPE_RESERVED: number; - TYPE_BACK_FORWARD: number; - TYPE_NAVIGATE: number; -} - -interface SVGStopElement extends SVGElement, SVGStylable { - offset: SVGAnimatedNumber; -} -declare var SVGStopElement: { - prototype: SVGStopElement; - new (): SVGStopElement; -} - -interface PositionCallback { - (position: Position): void; -} - -interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired { -} -declare var SVGSymbolElement: { - prototype: SVGSymbolElement; - new (): SVGSymbolElement; -} - -interface SVGElementInstanceList { - length: number; - item(index: number): SVGElementInstance; -} -declare var SVGElementInstanceList: { - prototype: SVGElementInstanceList; - new (): SVGElementInstanceList; -} - -interface CSSRuleList { - length: number; - item(index: number): CSSRule; - [index: number]: CSSRule; -} -declare var CSSRuleList: { - prototype: CSSRuleList; - new (): CSSRuleList; -} - -interface MSDataBindingRecordSetExtensions { - recordset: Object; - namedRecordset(dataMember: string, hierarchy?: any): Object; -} - -interface LinkStyle { - styleSheet: StyleSheet; - sheet: StyleSheet; -} - -interface HTMLVideoElement extends HTMLMediaElement { - /** - * Gets or sets the width of the video element. - */ - width: number; - /** - * Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known. - */ - videoWidth: number; - /** - * Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known. - */ - videoHeight: number; - /** - * Gets or sets the height of the video element. - */ - height: number; - /** - * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. - */ - poster: string; -} -declare var HTMLVideoElement: { - prototype: HTMLVideoElement; - new (): HTMLVideoElement; -} - -interface ClientRectList { - length: number; - item(index: number): ClientRect; - [index: number]: ClientRect; -} -declare var ClientRectList: { - prototype: ClientRectList; - new (): ClientRectList; -} - -interface SVGMaskElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - maskUnits: SVGAnimatedEnumeration; - maskContentUnits: SVGAnimatedEnumeration; - x: SVGAnimatedLength; - height: SVGAnimatedLength; -} -declare var SVGMaskElement: { - prototype: SVGMaskElement; - new (): SVGMaskElement; -} - -interface External { -} -declare var External: { - prototype: External; - new (): External; -} - -declare var Audio: { new (src?: string): HTMLAudioElement; }; -declare var Option: { new (text?: string, value?: string, defaultSelected?: boolean, selected?: boolean): HTMLOptionElement; }; -declare var Image: { new (width?: number, height?: number): HTMLImageElement; }; - -declare var ondragend: (ev: DragEvent) => any; -declare var onkeydown: (ev: KeyboardEvent) => any; -declare var ondragover: (ev: DragEvent) => any; -declare var onkeyup: (ev: KeyboardEvent) => any; -declare var onreset: (ev: Event) => any; -declare var onmouseup: (ev: MouseEvent) => any; -declare var ondragstart: (ev: DragEvent) => any; -declare var ondrag: (ev: DragEvent) => any; -declare var screenX: number; -declare var onmouseover: (ev: MouseEvent) => any; -declare var ondragleave: (ev: DragEvent) => any; -declare var history: History; -declare var pageXOffset: number; -declare var name: string; -declare var onafterprint: (ev: Event) => any; -declare var onpause: (ev: Event) => any; -declare var onbeforeprint: (ev: Event) => any; -declare var top: Window; -declare var onmousedown: (ev: MouseEvent) => any; -declare var onseeked: (ev: Event) => any; -declare var opener: Window; -declare var onclick: (ev: MouseEvent) => any; -declare var innerHeight: number; -declare var onwaiting: (ev: Event) => any; -declare var ononline: (ev: Event) => any; -declare var ondurationchange: (ev: Event) => any; -declare var frames: Window; -declare var onblur: (ev: FocusEvent) => any; -declare var onemptied: (ev: Event) => any; -declare var onseeking: (ev: Event) => any; -declare var oncanplay: (ev: Event) => any; -declare var outerWidth: number; -declare var onstalled: (ev: Event) => any; -declare var onmousemove: (ev: MouseEvent) => any; -declare var innerWidth: number; -declare var onoffline: (ev: Event) => any; -declare var length: number; -declare var screen: Screen; -declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; -declare var onratechange: (ev: Event) => any; -declare var onstorage: (ev: StorageEvent) => any; -declare var onloadstart: (ev: Event) => any; -declare var ondragenter: (ev: DragEvent) => any; -declare var onsubmit: (ev: Event) => any; -declare var self: Window; -declare var document: Document; -declare var onprogress: (ev: any) => any; -declare var ondblclick: (ev: MouseEvent) => any; -declare var pageYOffset: number; -declare var oncontextmenu: (ev: MouseEvent) => any; -declare var onchange: (ev: Event) => any; -declare var onloadedmetadata: (ev: Event) => any; -declare var onplay: (ev: Event) => any; -declare var onerror: ErrorEventHandler; -declare var onplaying: (ev: Event) => any; -declare var parent: Window; -declare var location: Location; -declare var oncanplaythrough: (ev: Event) => any; -declare var onabort: (ev: UIEvent) => any; -declare var onreadystatechange: (ev: Event) => any; -declare var outerHeight: number; -declare var onkeypress: (ev: KeyboardEvent) => any; -declare var frameElement: Element; -declare var onloadeddata: (ev: Event) => any; -declare var onsuspend: (ev: Event) => any; -declare var window: Window; -declare var onfocus: (ev: FocusEvent) => any; -declare var onmessage: (ev: MessageEvent) => any; -declare var ontimeupdate: (ev: Event) => any; -declare var onresize: (ev: UIEvent) => any; -declare var onselect: (ev: UIEvent) => any; -declare var navigator: Navigator; -declare var styleMedia: StyleMedia; -declare var ondrop: (ev: DragEvent) => any; -declare var onmouseout: (ev: MouseEvent) => any; -declare var onended: (ev: Event) => any; -declare var onhashchange: (ev: Event) => any; -declare var onunload: (ev: Event) => any; -declare var onscroll: (ev: UIEvent) => any; -declare var screenY: number; -declare var onmousewheel: (ev: MouseWheelEvent) => any; -declare var onload: (ev: Event) => any; -declare var onvolumechange: (ev: Event) => any; -declare var oninput: (ev: Event) => any; -declare var performance: Performance; -declare function alert(message?: any): void; -declare function scroll(x?: number, y?: number): void; -declare function focus(): void; -declare function scrollTo(x?: number, y?: number): void; -declare function print(): void; -declare function prompt(message?: string, defaul?: string): string; -declare function toString(): string; -declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window; -declare function scrollBy(x?: number, y?: number): void; -declare function confirm(message?: string): boolean; -declare function close(): void; -declare function postMessage(message: any, targetOrigin: string, ports?: any): void; -declare function showModalDialog(url?: string, argument?: any, options?: any): any; -declare function blur(): void; -declare function getSelection(): Selection; -declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; -declare function removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void; -declare function dispatchEvent(evt: Event): boolean; -declare function attachEvent(event: string, listener: EventListener): boolean; -declare function detachEvent(event: string, listener: EventListener): void; -declare var localStorage: Storage; -declare var status: string; -declare var onmouseleave: (ev: MouseEvent) => any; -declare var screenLeft: number; -declare var offscreenBuffering: any; -declare var maxConnectionsPerServer: number; -declare var onmouseenter: (ev: MouseEvent) => any; -declare var clipboardData: DataTransfer; -declare var defaultStatus: string; -declare var clientInformation: Navigator; -declare var closed: boolean; -declare var onhelp: (ev: Event) => any; -declare var external: External; -declare var event: MSEventObj; -declare var onfocusout: (ev: FocusEvent) => any; -declare var screenTop: number; -declare var onfocusin: (ev: FocusEvent) => any; -declare function showModelessDialog(url?: string, argument?: any, options?: any): Window; -declare function navigate(url: string): void; -declare function resizeBy(x?: number, y?: number): void; -declare function item(index: any): any; -declare function resizeTo(x?: number, y?: number): void; -declare function createPopup(arguments?: any): MSPopupWindow; -declare function toStaticHTML(html: string): string; -declare function execScript(code: string, language?: string): any; -declare function msWriteProfilerMark(profilerMarkName: string): void; -declare function moveTo(x?: number, y?: number): void; -declare function moveBy(x?: number, y?: number): void; -declare function showHelp(url: string, helpArg?: any, features?: string): void; -declare var sessionStorage: Storage; -declare function clearTimeout(handle: number): void; -declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; -declare function clearInterval(handle: number): void; -declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; - - -///////////////////////////// -/// IE10 DOM APIs -///////////////////////////// - - -interface ObjectURLOptions { - oneTimeOnly?: boolean; -} - -interface HTMLBodyElement { - onpopstate: (ev: PopStateEvent) => any; -} - -interface MSGestureEvent extends UIEvent { - offsetY: number; - translationY: number; - velocityExpansion: number; - velocityY: number; - velocityAngular: number; - translationX: number; - velocityX: number; - hwTimestamp: number; - offsetX: number; - screenX: number; - rotation: number; - expansion: number; - clientY: number; - screenY: number; - scale: number; - gestureObject: any; - clientX: number; - initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void; - MSGESTURE_FLAG_BEGIN: number; - MSGESTURE_FLAG_END: number; - MSGESTURE_FLAG_CANCEL: number; - MSGESTURE_FLAG_INERTIA: number; - MSGESTURE_FLAG_NONE: number; -} -declare var MSGestureEvent: { - MSGESTURE_FLAG_BEGIN: number; - MSGESTURE_FLAG_END: number; - MSGESTURE_FLAG_CANCEL: number; - MSGESTURE_FLAG_INERTIA: number; - MSGESTURE_FLAG_NONE: number; -} - -interface HTMLAnchorElement { - /** - * Retrieves or sets the text of the object as a string. - */ - text: string; -} - -interface HTMLInputElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Returns a FileList object on a file type input object. - */ - files: FileList; - /** - * Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field. - */ - max: string; - /** - * Overrides the target attribute on a form element. - */ - formTarget: string; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field. - */ - step: string; - /** - * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. - */ - autofocus: boolean; - /** - * When present, marks an element that can't be submitted without a value. - */ - required: boolean; - /** - * Used to override the encoding (formEnctype attribute) specified on the form element. - */ - formEnctype: string; - /** - * Returns the input field value as a number. - */ - valueAsNumber: number; - /** - * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. - */ - placeholder: string; - /** - * Overrides the submit method attribute previously specified on a form element. - */ - formMethod: string; - /** - * Specifies the ID of a pre-defined datalist of options for an input element. - */ - list: HTMLElement; - /** - * Specifies whether autocomplete is applied to an editable text field. - */ - autocomplete: string; - /** - * Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field. - */ - min: string; - /** - * Overrides the action attribute (where the data on a form is sent) on the parent form element. - */ - formAction: string; - /** - * Gets or sets a string containing a regular expression that the user's input must match. - */ - pattern: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. - */ - formNoValidate: string; - /** - * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. - */ - multiple: boolean; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value. - * @param n Value to decrement the value by. - */ - stepDown(n?: number): void; - /** - * Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value. - * @param n Value to increment the value by. - */ - stepUp(n?: number): void; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface ErrorEvent extends Event { - colno: number; - filename: string; - error: any; - lineno: number; - message: string; - initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void; -} - -interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - filterResX: SVGAnimatedInteger; - filterUnits: SVGAnimatedEnumeration; - primitiveUnits: SVGAnimatedEnumeration; - x: SVGAnimatedLength; - height: SVGAnimatedLength; - filterResY: SVGAnimatedInteger; - setFilterRes(filterResX: number, filterResY: number): void; -} - -interface TrackEvent extends Event { - track: any; -} - -interface SVGFEMergeNodeElement extends SVGElement { - in1: SVGAnimatedString; -} - -interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { -} - -interface MSGesture { - target: Element; - addPointer(pointerId: number): void; - stop(): void; -} -declare var MSGesture: { - prototype: MSGesture; - new (): MSGesture; -} - -interface TextTrackCue extends EventTarget { - onenter: (ev: Event) => any; - track: TextTrack; - endTime: number; - text: string; - pauseOnExit: boolean; - id: string; - startTime: number; - onexit: (ev: Event) => any; - getCueAsHTML(): DocumentFragment; -} -declare var TextTrackCue: { - prototype: TextTrackCue; - new (): TextTrackCue; -} - -interface MSStreamReader extends MSBaseReader { - error: DOMError; - readAsArrayBuffer(stream: MSStream, size?: number): void; - readAsBlob(stream: MSStream, size?: number): void; - readAsDataURL(stream: MSStream, size?: number): void; - readAsText(stream: MSStream, encoding?: string, size?: number): void; -} -declare var MSStreamReader: { - prototype: MSStreamReader; - new (): MSStreamReader; -} - -interface DOMTokenList { - length: number; - contains(token: string): boolean; - remove(token: string): void; - toggle(token: string): boolean; - add(token: string): void; - item(index: number): string; - [index: number]: string; - toString(): string; -} - -interface EventException { - name: string; -} - -interface Performance { - now(): number; -} - -interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement { -} - -interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - in1: SVGAnimatedString; -} - -interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - in2: SVGAnimatedString; - mode: SVGAnimatedEnumeration; - in1: SVGAnimatedString; - SVG_FEBLEND_MODE_DARKEN: number; - SVG_FEBLEND_MODE_UNKNOWN: number; - SVG_FEBLEND_MODE_MULTIPLY: number; - SVG_FEBLEND_MODE_NORMAL: number; - SVG_FEBLEND_MODE_SCREEN: number; - SVG_FEBLEND_MODE_LIGHTEN: number; -} -declare var SVGFEBlendElement: { - SVG_FEBLEND_MODE_DARKEN: number; - SVG_FEBLEND_MODE_UNKNOWN: number; - SVG_FEBLEND_MODE_MULTIPLY: number; - SVG_FEBLEND_MODE_NORMAL: number; - SVG_FEBLEND_MODE_SCREEN: number; - SVG_FEBLEND_MODE_LIGHTEN: number; -} - -interface WindowTimers extends WindowTimersExtension { -} - -interface CSSStyleDeclaration { - animationFillMode: string; - floodColor: string; - animationIterationCount: string; - textShadow: string; - backfaceVisibility: string; - msAnimationIterationCount: string; - animationDelay: string; - animationTimingFunction: string; - columnWidth: any; - msScrollSnapX: string; - columnRuleColor: any; - columnRuleWidth: any; - transitionDelay: string; - transition: string; - msFlowFrom: string; - msScrollSnapType: string; - msContentZoomSnapType: string; - msGridColumns: string; - msAnimationName: string; - msGridRowAlign: string; - msContentZoomChaining: string; - msGridColumn: any; - msHyphenateLimitZone: any; - msScrollRails: string; - msAnimationDelay: string; - enableBackground: string; - msWrapThrough: string; - columnRuleStyle: string; - msAnimation: string; - msFlexFlow: string; - msScrollSnapY: string; - msHyphenateLimitLines: any; - msTouchAction: string; - msScrollLimit: string; - animation: string; - transform: string; - filter: string; - colorInterpolationFilters: string; - transitionTimingFunction: string; - msBackfaceVisibility: string; - animationPlayState: string; - transformOrigin: string; - msScrollLimitYMin: any; - msFontFeatureSettings: string; - msContentZoomLimitMin: any; - columnGap: any; - transitionProperty: string; - msAnimationDuration: string; - msAnimationFillMode: string; - msFlexDirection: string; - msTransitionDuration: string; - fontFeatureSettings: string; - breakBefore: string; - msFlexWrap: string; - perspective: string; - msFlowInto: string; - msTransformStyle: string; - msScrollTranslation: string; - msTransitionProperty: string; - msUserSelect: string; - msOverflowStyle: string; - msScrollSnapPointsY: string; - animationDirection: string; - animationDuration: string; - msFlex: string; - msTransitionTimingFunction: string; - animationName: string; - columnRule: string; - msGridColumnSpan: any; - msFlexNegative: string; - columnFill: string; - msGridRow: any; - msFlexOrder: string; - msFlexItemAlign: string; - msFlexPositive: string; - msContentZoomLimitMax: any; - msScrollLimitYMax: any; - msGridColumnAlign: string; - perspectiveOrigin: string; - lightingColor: string; - columns: string; - msScrollChaining: string; - msHyphenateLimitChars: string; - msTouchSelect: string; - floodOpacity: string; - msAnimationDirection: string; - msAnimationPlayState: string; - columnSpan: string; - msContentZooming: string; - msPerspective: string; - msFlexPack: string; - msScrollSnapPointsX: string; - msContentZoomSnapPoints: string; - msGridRowSpan: any; - msContentZoomSnap: string; - msScrollLimitXMin: any; - breakInside: string; - msHighContrastAdjust: string; - msFlexLinePack: string; - msGridRows: string; - transitionDuration: string; - msHyphens: string; - breakAfter: string; - msTransition: string; - msPerspectiveOrigin: string; - msContentZoomLimit: string; - msScrollLimitXMax: any; - msFlexAlign: string; - msWrapMargin: any; - columnCount: any; - msAnimationTimingFunction: string; - msTransitionDelay: string; - transformStyle: string; - msWrapFlow: string; - msFlexPreferredSize: string; -} - -interface MessageChannel { - port2: MessagePort; - port1: MessagePort; -} -declare var MessageChannel: { - prototype: MessageChannel; - new (): MessageChannel; -} - -interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { -} - -interface Navigator extends MSFileSaver { - msMaxTouchPoints: number; - msPointerEnabled: boolean; - msManipulationViewsEnabled: boolean; - msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void; -} - -interface TransitionEvent extends Event { - propertyName: string; - elapsedTime: number; - initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void; -} - -interface MediaQueryList { - matches: boolean; - media: string; - addListener(listener: MediaQueryListListener): void; - removeListener(listener: MediaQueryListListener): void; -} - -interface DOMError { - name: string; - toString(): string; -} - -interface CloseEvent extends Event { - wasClean: boolean; - reason: string; - code: number; - initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void; -} - -interface WebSocket extends EventTarget { - protocol: string; - readyState: number; - bufferedAmount: number; - onopen: (ev: Event) => any; - extensions: string; - onmessage: (ev: any) => any; - onclose: (ev: CloseEvent) => any; - onerror: (ev: ErrorEvent) => any; - binaryType: string; - url: string; - close(code?: number, reason?: string): void; - send(data: any): void; - OPEN: number; - CLOSING: number; - CONNECTING: number; - CLOSED: number; -} -declare var WebSocket: { - prototype: WebSocket; - new (url: string): WebSocket; - new (url: string, prototcol: string): WebSocket; - new (url: string, prototcol: string[]): WebSocket; - OPEN: number; - CLOSING: number; - CONNECTING: number; - CLOSED: number; -} - -interface SVGFEPointLightElement extends SVGElement { - y: SVGAnimatedNumber; - x: SVGAnimatedNumber; - z: SVGAnimatedNumber; -} - -interface ProgressEvent extends Event { - loaded: number; - lengthComputable: boolean; - total: number; - initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void; -} - -interface IDBObjectStore { - indexNames: DOMStringList; - name: string; - transaction: IDBTransaction; - keyPath: string; - count(key?: any): IDBRequest; - add(value: any, key?: any): IDBRequest; - clear(): IDBRequest; - createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex; - put(value: any, key?: any): IDBRequest; - openCursor(range?: any, direction?: string): IDBRequest; - deleteIndex(indexName: string): void; - index(name: string): IDBIndex; - get(key: any): IDBRequest; - delete(key: any): IDBRequest; -} - -interface HTMLCanvasElement { - /** - * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. - */ - msToBlob(): Blob; -} - -interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - stdDeviationX: SVGAnimatedNumber; - in1: SVGAnimatedString; - stdDeviationY: SVGAnimatedNumber; - setStdDeviation(stdDeviationX: number, stdDeviationY: number): void; -} - -interface SVGFilterPrimitiveStandardAttributes extends SVGStylable { - y: SVGAnimatedLength; - width: SVGAnimatedLength; - x: SVGAnimatedLength; - height: SVGAnimatedLength; - result: SVGAnimatedString; -} - -interface Element { - msRegionOverflow: string; - onmspointerdown: (ev: any) => any; - onmsgotpointercapture: (ev: any) => any; - onmsgesturedoubletap: (ev: any) => any; - onmspointerhover: (ev: any) => any; - onmsgesturehold: (ev: any) => any; - onmspointermove: (ev: any) => any; - onmsgesturechange: (ev: any) => any; - onmsgesturestart: (ev: any) => any; - onmspointercancel: (ev: any) => any; - onmsgestureend: (ev: any) => any; - onmsgesturetap: (ev: any) => any; - onmspointerout: (ev: any) => any; - onmsinertiastart: (ev: any) => any; - onmslostpointercapture: (ev: any) => any; - onmspointerover: (ev: any) => any; - msContentZoomFactor: number; - onmspointerup: (ev: any) => any; - msGetRegionContent(): MSRangeCollection; - msReleasePointerCapture(pointerId: number): void; - msSetPointerCapture(pointerId: number): void; -} - -interface IDBVersionChangeEvent extends Event { - newVersion: number; - oldVersion: number; -} - -interface IDBIndex { - unique: boolean; - name: string; - keyPath: string; - objectStore: IDBObjectStore; - count(key?: any): IDBRequest; - getKey(key: any): IDBRequest; - openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest; - get(key: any): IDBRequest; - openCursor(range?: IDBKeyRange, direction?: string): IDBRequest; -} - -interface WheelEvent { - getCurrentPoint(element: Element): void; -} - -interface FileList { - length: number; - item(index: number): File; - [index: number]: File; -} - -interface IDBCursor { - source: any; - direction: string; - key: any; - primaryKey: any; - advance(count: number): void; - delete(): IDBRequest; - continue(key?: any): void; - update(value: any): IDBRequest; -} - -interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - kernelUnitLengthY: SVGAnimatedNumber; - surfaceScale: SVGAnimatedNumber; - specularExponent: SVGAnimatedNumber; - in1: SVGAnimatedString; - kernelUnitLengthX: SVGAnimatedNumber; - specularConstant: SVGAnimatedNumber; -} - -interface File extends Blob { - lastModifiedDate: any; - name: string; -} - -interface URL { - revokeObjectURL(url: string): void; - createObjectURL(object: any, options?: ObjectURLOptions): string; -} -declare var URL: URL; - -interface RangeException { - name: string; -} - -interface IDBCursorWithValue extends IDBCursor { - value: any; -} - -interface HTMLTextAreaElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. - */ - autofocus: boolean; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * When present, marks an element that can't be submitted without a value. - */ - required: boolean; - /** - * Sets or retrieves the maximum number of characters that the user can enter in a text control. - */ - maxLength: number; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. - */ - placeholder: string; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface XMLHttpRequestEventTarget extends EventTarget { - onprogress: (ev: ProgressEvent) => any; - onerror: (ev: ErrorEvent) => any; - onload: (ev: any) => any; - ontimeout: (ev: any) => any; - onabort: (ev: any) => any; - onloadstart: (ev: any) => any; - onloadend: (ev: ProgressEvent) => any; -} - -interface IDBEnvironment { - msIndexedDB: IDBFactory; - indexedDB: IDBFactory; -} - -interface AudioTrackList extends EventTarget { - length: number; - onchange: (ev: any) => any; - onaddtrack: (ev: TrackEvent) => any; - getTrackById(id: string): AudioTrack; - item(index: number): AudioTrack; - [index: number]: AudioTrack; -} - -interface MSBaseReader extends EventTarget { - onprogress: (ev: ProgressEvent) => any; - readyState: number; - onabort: (ev: any) => any; - onloadend: (ev: ProgressEvent) => any; - onerror: (ev: ErrorEvent) => any; - onload: (ev: any) => any; - onloadstart: (ev: any) => any; - result: any; - abort(): void; - LOADING: number; - EMPTY: number; - DONE: number; -} - -interface History { - state: any; - replaceState(statedata: any, title: string, url?: string): void; - pushState(statedata: any, title: string, url?: string): void; -} - -interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - operator: SVGAnimatedEnumeration; - radiusX: SVGAnimatedNumber; - radiusY: SVGAnimatedNumber; - in1: SVGAnimatedString; - SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number; - SVG_MORPHOLOGY_OPERATOR_ERODE: number; - SVG_MORPHOLOGY_OPERATOR_DILATE: number; -} -declare var SVGFEMorphologyElement: { - SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number; - SVG_MORPHOLOGY_OPERATOR_ERODE: number; - SVG_MORPHOLOGY_OPERATOR_DILATE: number; -} - -interface HTMLSelectElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. - */ - autofocus: boolean; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * When present, marks an element that can't be submitted without a value. - */ - required: boolean; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface CSSRule { - KEYFRAMES_RULE: number; - KEYFRAME_RULE: number; - VIEWPORT_RULE: number; -} -//declare var CSSRule: { -// KEYFRAMES_RULE: number; -// KEYFRAME_RULE: number; -// VIEWPORT_RULE: number; -//} - -interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement { -} - -interface WindowTimersExtension { - msSetImmediate(expression: any, ...args: any[]): number; - clearImmediate(handle: number): void; - msClearImmediate(handle: number): void; - setImmediate(expression: any, ...args: any[]): number; -} - -interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - in2: SVGAnimatedString; - xChannelSelector: SVGAnimatedEnumeration; - yChannelSelector: SVGAnimatedEnumeration; - scale: SVGAnimatedNumber; - in1: SVGAnimatedString; - SVG_CHANNEL_B: number; - SVG_CHANNEL_R: number; - SVG_CHANNEL_G: number; - SVG_CHANNEL_UNKNOWN: number; - SVG_CHANNEL_A: number; -} -declare var SVGFEDisplacementMapElement: { - SVG_CHANNEL_B: number; - SVG_CHANNEL_R: number; - SVG_CHANNEL_G: number; - SVG_CHANNEL_UNKNOWN: number; - SVG_CHANNEL_A: number; -} - -interface AnimationEvent extends Event { - animationName: string; - elapsedTime: number; - initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void; -} - -interface SVGComponentTransferFunctionElement extends SVGElement { - tableValues: SVGAnimatedNumberList; - slope: SVGAnimatedNumber; - type: SVGAnimatedEnumeration; - exponent: SVGAnimatedNumber; - amplitude: SVGAnimatedNumber; - intercept: SVGAnimatedNumber; - offset: SVGAnimatedNumber; - SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number; - SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number; - SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number; - SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number; - SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number; - SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number; -} -declare var SVGComponentTransferFunctionElement: { - SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number; - SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number; - SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number; - SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number; - SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number; - SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number; -} - -interface MSRangeCollection { - length: number; - item(index: number): Range; - [index: number]: Range; -} - -interface SVGFEDistantLightElement extends SVGElement { - azimuth: SVGAnimatedNumber; - elevation: SVGAnimatedNumber; -} - -interface SVGException { - name: string; -} - -interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement { -} - -interface IDBKeyRange { - upper: any; - upperOpen: boolean; - lower: any; - lowerOpen: boolean; - bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange; - only(value: any): IDBKeyRange; - lowerBound(bound: any, open?: boolean): IDBKeyRange; - upperBound(bound: any, open?: boolean): IDBKeyRange; -} - -interface WindowConsole { - console: Console; -} - -interface IDBTransaction extends EventTarget { - oncomplete: (ev: Event) => any; - db: IDBDatabase; - mode: string; - error: DOMError; - onerror: (ev: ErrorEvent) => any; - onabort: (ev: any) => any; - abort(): void; - objectStore(name: string): IDBObjectStore; -} - -interface AudioTrack { - kind: string; - language: string; - id: string; - label: string; - enabled: boolean; -} - -interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - orderY: SVGAnimatedInteger; - kernelUnitLengthY: SVGAnimatedNumber; - orderX: SVGAnimatedInteger; - preserveAlpha: SVGAnimatedBoolean; - kernelMatrix: SVGAnimatedNumberList; - edgeMode: SVGAnimatedEnumeration; - kernelUnitLengthX: SVGAnimatedNumber; - bias: SVGAnimatedNumber; - targetX: SVGAnimatedInteger; - targetY: SVGAnimatedInteger; - divisor: SVGAnimatedNumber; - in1: SVGAnimatedString; - SVG_EDGEMODE_WRAP: number; - SVG_EDGEMODE_DUPLICATE: number; - SVG_EDGEMODE_UNKNOWN: number; - SVG_EDGEMODE_NONE: number; -} -declare var SVGFEConvolveMatrixElement: { - SVG_EDGEMODE_WRAP: number; - SVG_EDGEMODE_DUPLICATE: number; - SVG_EDGEMODE_UNKNOWN: number; - SVG_EDGEMODE_NONE: number; -} - -interface TextTrackCueList { - length: number; - item(index: number): TextTrackCue; - [index: number]: TextTrackCue; - getCueById(id: string): TextTrackCue; -} - -interface CSSKeyframesRule extends CSSRule { - name: string; - cssRules: CSSRuleList; - findRule(rule: string): CSSKeyframeRule; - deleteRule(rule: string): void; - appendRule(rule: string): void; -} - -interface Window extends WindowBase64, IDBEnvironment, WindowConsole { - onmspointerdown: (ev: any) => any; - animationStartTime: number; - onmsgesturedoubletap: (ev: any) => any; - onmspointerhover: (ev: any) => any; - onmsgesturehold: (ev: any) => any; - onmspointermove: (ev: any) => any; - onmsgesturechange: (ev: any) => any; - onmsgesturestart: (ev: any) => any; - onmspointercancel: (ev: any) => any; - onmsgestureend: (ev: any) => any; - onmsgesturetap: (ev: any) => any; - onmspointerout: (ev: any) => any; - msAnimationStartTime: number; - applicationCache: ApplicationCache; - onmsinertiastart: (ev: any) => any; - onmspointerover: (ev: any) => any; - onpopstate: (ev: PopStateEvent) => any; - onmspointerup: (ev: any) => any; - msCancelRequestAnimationFrame(handle: number): void; - matchMedia(mediaQuery: string): MediaQueryList; - cancelAnimationFrame(handle: number): void; - msIsStaticHTML(html: string): boolean; - msMatchMedia(mediaQuery: string): MediaQueryList; - requestAnimationFrame(callback: FrameRequestCallback): number; - msRequestAnimationFrame(callback: FrameRequestCallback): number; -} - -interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - baseFrequencyX: SVGAnimatedNumber; - numOctaves: SVGAnimatedInteger; - type: SVGAnimatedEnumeration; - baseFrequencyY: SVGAnimatedNumber; - stitchTiles: SVGAnimatedEnumeration; - seed: SVGAnimatedNumber; - SVG_STITCHTYPE_UNKNOWN: number; - SVG_STITCHTYPE_NOSTITCH: number; - SVG_TURBULENCE_TYPE_UNKNOWN: number; - SVG_TURBULENCE_TYPE_TURBULENCE: number; - SVG_TURBULENCE_TYPE_FRACTALNOISE: number; - SVG_STITCHTYPE_STITCH: number; -} -declare var SVGFETurbulenceElement: { - SVG_STITCHTYPE_UNKNOWN: number; - SVG_STITCHTYPE_NOSTITCH: number; - SVG_TURBULENCE_TYPE_UNKNOWN: number; - SVG_TURBULENCE_TYPE_TURBULENCE: number; - SVG_TURBULENCE_TYPE_FRACTALNOISE: number; - SVG_STITCHTYPE_STITCH: number; -} - -interface TextTrackList { - length: number; - item(index: number): TextTrack; - [index: number]: TextTrack; -} - -interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement { -} - -interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - in1: SVGAnimatedString; - type: SVGAnimatedEnumeration; - values: SVGAnimatedNumberList; - SVG_FECOLORMATRIX_TYPE_SATURATE: number; - SVG_FECOLORMATRIX_TYPE_UNKNOWN: number; - SVG_FECOLORMATRIX_TYPE_MATRIX: number; - SVG_FECOLORMATRIX_TYPE_HUEROTATE: number; - SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number; -} -declare var SVGFEColorMatrixElement: { - SVG_FECOLORMATRIX_TYPE_SATURATE: number; - SVG_FECOLORMATRIX_TYPE_UNKNOWN: number; - SVG_FECOLORMATRIX_TYPE_MATRIX: number; - SVG_FECOLORMATRIX_TYPE_HUEROTATE: number; - SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number; -} - -interface Console { - info(message?: any, ...optionalParams: any[]): void; - profile(reportName?: string): void; - assert(test?: boolean, message?: string, ...optionalParams: any[]): void; - msIsIndependentlyComposed(element: Element): boolean; - clear(): void; - dir(value?: any, ...optionalParams: any[]): void; - warn(message?: any, ...optionalParams: any[]): void; - error(message?: any, ...optionalParams: any[]): void; - log(message?: any, ...optionalParams: any[]): void; - profileEnd(): void; -} - -interface SVGFESpotLightElement extends SVGElement { - pointsAtY: SVGAnimatedNumber; - y: SVGAnimatedNumber; - limitingConeAngle: SVGAnimatedNumber; - specularExponent: SVGAnimatedNumber; - x: SVGAnimatedNumber; - pointsAtZ: SVGAnimatedNumber; - z: SVGAnimatedNumber; - pointsAtX: SVGAnimatedNumber; -} - -interface HTMLImageElement { - /** - * Gets or sets the primary DLNA PlayTo device. - */ - msPlayToPrimary: boolean; - /** - * Gets or sets whether the DLNA PlayTo device is available. - */ - msPlayToDisabled: boolean; - /** - * Gets the source associated with the media element for use by the PlayToManager. - */ - msPlayToSource: any; -} - -interface WindowBase64 { - btoa(rawString: string): string; - atob(encodedString: string): string; -} - -interface IDBDatabase extends EventTarget { - version: string; - name: string; - objectStoreNames: DOMStringList; - onerror: (ev: ErrorEvent) => any; - onabort: (ev: any) => any; - createObjectStore(name: string, optionalParameters?: any): IDBObjectStore; - close(): void; - transaction(storeNames: any, mode?: string): IDBTransaction; - deleteObjectStore(name: string): void; -} - -interface DOMStringList { - length: number; - contains(str: string): boolean; - item(index: number): string; - [index: number]: string; -} - -interface HTMLButtonElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Overrides the target attribute on a form element. - */ - formTarget: string; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Overrides the action attribute (where the data on a form is sent) on the parent form element. - */ - formAction: string; - /** - * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. - */ - autofocus: boolean; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. - */ - formNoValidate: string; - /** - * Used to override the encoding (formEnctype attribute) specified on the form element. - */ - formEnctype: string; - /** - * Overrides the submit method attribute previously specified on a form element. - */ - formMethod: string; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface IDBOpenDBRequest extends IDBRequest { - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - onblocked: (ev: Event) => any; -} - -interface HTMLProgressElement extends HTMLElement { - /** - * Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value. - */ - value: number; - /** - * Defines the maximum, or "done" value for a progress element. - */ - max: number; - /** - * Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar). - */ - position: number; - /** - * Retrieves a reference to the form that the object is embedded in. - */ - form: HTMLFormElement; -} - -interface MSLaunchUriCallback { - (): void; -} - -interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - dy: SVGAnimatedNumber; - in1: SVGAnimatedString; - dx: SVGAnimatedNumber; -} - -interface HTMLFormElement { - /** - * Specifies whether autocomplete is applied to an editable text field. - */ - autocomplete: string; - /** - * Designates a form that is not validated when submitted. - */ - noValidate: boolean; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; -} - -interface MSUnsafeFunctionCallback { - (): any; -} - -interface Document { - onmspointerdown: (ev: any) => any; - msHidden: boolean; - msVisibilityState: string; - onmsgesturedoubletap: (ev: any) => any; - visibilityState: string; - onmsmanipulationstatechanged: (ev: any) => any; - onmspointerhover: (ev: any) => any; - onmscontentzoom: (ev: any) => any; - onmspointermove: (ev: any) => any; - onmsgesturehold: (ev: any) => any; - onmsgesturechange: (ev: any) => any; - onmsgesturestart: (ev: any) => any; - onmspointercancel: (ev: any) => any; - onmsgestureend: (ev: any) => any; - onmsgesturetap: (ev: any) => any; - onmspointerout: (ev: any) => any; - onmsinertiastart: (ev: any) => any; - msCSSOMElementFloatMetrics: boolean; - onmspointerover: (ev: any) => any; - hidden: boolean; - onmspointerup: (ev: any) => any; - msElementsFromPoint(x: number, y: number): NodeList; - msElementsFromRect(left: number, top: number, width: number, height: number): NodeList; - clear(): void; -} - -interface MessageEvent extends Event { - ports: any; -} - -interface HTMLScriptElement { - async: boolean; -} - -interface HTMLMediaElement { - /** - * Specifies the purpose of the audio or video media, such as background audio or alerts. - */ - msAudioCategory: string; - /** - * Specifies whether or not to enable low-latency playback on the media element. - */ - msRealTime: boolean; - /** - * Gets or sets the primary DLNA PlayTo device. - */ - msPlayToPrimary: boolean; - textTracks: TextTrackList; - /** - * Gets or sets whether the DLNA PlayTo device is available. - */ - msPlayToDisabled: boolean; - /** - * Returns an AudioTrackList object with the audio tracks for a given video element. - */ - audioTracks: AudioTrackList; - /** - * Gets the source associated with the media element for use by the PlayToManager. - */ - msPlayToSource: any; - /** - * Specifies the output device id that the audio will be sent to. - */ - msAudioDeviceType: string; - /** - * Clears all effects from the media pipeline. - */ - msClearEffects(): void; - /** - * Specifies the media protection manager for a given media pipeline. - */ - msSetMediaProtectionManager(mediaProtectionManager?: any): void; - /** - * Inserts the specified audio effect into media pipeline. - */ - msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void; -} - -interface TextTrack extends EventTarget { - language: string; - mode: any; - readyState: number; - activeCues: TextTrackCueList; - cues: TextTrackCueList; - oncuechange: (ev: Event) => any; - kind: string; - onload: (ev: any) => any; - onerror: (ev: ErrorEvent) => any; - label: string; - ERROR: number; - SHOWING: number; - LOADING: number; - LOADED: number; - NONE: number; - HIDDEN: number; - DISABLED: number; -} -declare var TextTrack: { - ERROR: number; - SHOWING: number; - LOADING: number; - LOADED: number; - NONE: number; - HIDDEN: number; - DISABLED: number; -} - -interface MediaQueryListListener { - (mql: MediaQueryList): void; -} - -interface IDBRequest extends EventTarget { - source: any; - onsuccess: (ev: Event) => any; - error: DOMError; - transaction: IDBTransaction; - onerror: (ev: ErrorEvent) => any; - readyState: string; - result: any; -} - -interface MessagePort extends EventTarget { - onmessage: (ev: any) => any; - close(): void; - postMessage(message?: any, ports?: any): void; - start(): void; -} - -interface FileReader extends MSBaseReader { - error: DOMError; - readAsArrayBuffer(blob: Blob): void; - readAsDataURL(blob: Blob): void; - readAsText(blob: Blob, encoding?: string): void; -} -declare var FileReader: { - prototype: FileReader; - new (): FileReader; -} - -interface BlobPropertyBag { - type?: string; - endings?: string; -} - -interface Blob { - type: string; - size: number; - msDetachStream(): any; - slice(start?: number, end?: number, contentType?: string): Blob; - msClose(): void; -} -declare var Blob: { - prototype: Blob; - new (blobParts?: any[], options?: BlobPropertyBag): Blob; -} - -interface ApplicationCache extends EventTarget { - status: number; - ondownloading: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onupdateready: (ev: Event) => any; - oncached: (ev: Event) => any; - onobsolete: (ev: Event) => any; - onerror: (ev: ErrorEvent) => any; - onchecking: (ev: Event) => any; - onnoupdate: (ev: Event) => any; - swapCache(): void; - abort(): void; - update(): void; - CHECKING: number; - UNCACHED: number; - UPDATEREADY: number; - DOWNLOADING: number; - IDLE: number; - OBSOLETE: number; -} -declare var ApplicationCache: { - CHECKING: number; - UNCACHED: number; - UPDATEREADY: number; - DOWNLOADING: number; - IDLE: number; - OBSOLETE: number; -} - -interface FrameRequestCallback { - (time: number): void; -} - -interface XMLHttpRequest { - response: any; - withCredentials: boolean; - onprogress: (ev: ProgressEvent) => any; - onabort: (ev: any) => any; - responseType: string; - onloadend: (ev: ProgressEvent) => any; - upload: XMLHttpRequestEventTarget; - onerror: (ev: ErrorEvent) => any; - onloadstart: (ev: any) => any; -} - -interface PopStateEvent extends Event { - state: any; - initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void; -} - -interface CSSKeyframeRule extends CSSRule { - keyText: string; - style: CSSStyleDeclaration; -} - -interface MSFileSaver { - msSaveBlob(blob: any, defaultName?: string): boolean; - msSaveOrOpenBlob(blob: any, defaultName?: string): boolean; -} - -interface MSStream { - type: string; - msDetachStream(): any; - msClose(): void; -} - -interface MediaError { - msExtendedCode: number; -} - -interface HTMLFieldSetElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface MSBlobBuilder { - append(data: any, endings?: string): void; - getBlob(contentType?: string): Blob; -} -declare var MSBlobBuilder: { - prototype: MSBlobBuilder; - new (): MSBlobBuilder; -} - -interface HTMLElement { - onmscontentzoom: (ev: any) => any; - oncuechange: (ev: Event) => any; - spellcheck: boolean; - classList: DOMTokenList; - onmsmanipulationstatechanged: (ev: any) => any; - draggable: boolean; -} - -interface DataTransfer { - types: DOMStringList; - files: FileList; -} - -interface DOMSettableTokenList extends DOMTokenList { - value: string; -} - -interface IDBFactory { - open(name: string, version?: number): IDBOpenDBRequest; - cmp(first: any, second: any): number; - deleteDatabase(name: string): IDBOpenDBRequest; -} - -interface Range { - createContextualFragment(fragment: string): DocumentFragment; -} - -interface HTMLObjectElement { - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - */ - validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - */ - validity: ValidityState; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - */ - willValidate: boolean; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - */ - checkValidity(): boolean; - /** - * Sets a custom error message that is displayed when a form is submitted. - * @param error Sets a custom error message that is displayed when a form is submitted. - */ - setCustomValidity(error: string): void; -} - -interface MSPointerEvent extends MouseEvent { - width: number; - rotation: number; - pressure: number; - pointerType: any; - isPrimary: boolean; - tiltY: number; - height: number; - intermediatePoints: any; - currentPoint: any; - tiltX: number; - hwTimestamp: number; - pointerId: number; - initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void; - getCurrentPoint(element: Element): void; - getIntermediatePoints(element: Element): void; - MSPOINTER_TYPE_PEN: number; - MSPOINTER_TYPE_MOUSE: number; - MSPOINTER_TYPE_TOUCH: number; -} -declare var MSPointerEvent: { - MSPOINTER_TYPE_PEN: number; - MSPOINTER_TYPE_MOUSE: number; - MSPOINTER_TYPE_TOUCH: number; -} - -interface DOMException { - name: string; - INVALID_NODE_TYPE_ERR: number; - DATA_CLONE_ERR: number; - TIMEOUT_ERR: number; -} -//declare var DOMException: { -// INVALID_NODE_TYPE_ERR: number; -// DATA_CLONE_ERR: number; -// TIMEOUT_ERR: number; -//} - -interface MSManipulationEvent extends UIEvent { - lastState: number; - currentState: number; - initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void; - MS_MANIPULATION_STATE_STOPPED: number; - MS_MANIPULATION_STATE_ACTIVE: number; - MS_MANIPULATION_STATE_INERTIA: number; -} -declare var MSManipulationEvent: { - MS_MANIPULATION_STATE_STOPPED: number; - MS_MANIPULATION_STATE_ACTIVE: number; - MS_MANIPULATION_STATE_INERTIA: number; -} - -interface FormData { - append(name: any, value: any, blobName?: string): void; -} -declare var FormData: { - prototype: FormData; - new (form?: HTMLFormElement): FormData; -} - -interface HTMLDataListElement extends HTMLElement { - options: HTMLCollection; -} - -interface SVGFEImageElement extends SVGElement, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGURIReference, SVGExternalResourcesRequired { - preserveAspectRatio: SVGAnimatedPreserveAspectRatio; -} - -interface AbstractWorker extends EventTarget { - onerror: (ev: ErrorEvent) => any; -} - -interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - operator: SVGAnimatedEnumeration; - in2: SVGAnimatedString; - k2: SVGAnimatedNumber; - k1: SVGAnimatedNumber; - k3: SVGAnimatedNumber; - in1: SVGAnimatedString; - k4: SVGAnimatedNumber; - SVG_FECOMPOSITE_OPERATOR_OUT: number; - SVG_FECOMPOSITE_OPERATOR_OVER: number; - SVG_FECOMPOSITE_OPERATOR_XOR: number; - SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number; - SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number; - SVG_FECOMPOSITE_OPERATOR_IN: number; - SVG_FECOMPOSITE_OPERATOR_ATOP: number; -} -declare var SVGFECompositeElement: { - SVG_FECOMPOSITE_OPERATOR_OUT: number; - SVG_FECOMPOSITE_OPERATOR_OVER: number; - SVG_FECOMPOSITE_OPERATOR_XOR: number; - SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number; - SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number; - SVG_FECOMPOSITE_OPERATOR_IN: number; - SVG_FECOMPOSITE_OPERATOR_ATOP: number; -} - -interface ValidityState { - customError: boolean; - valueMissing: boolean; - stepMismatch: boolean; - rangeUnderflow: boolean; - rangeOverflow: boolean; - typeMismatch: boolean; - patternMismatch: boolean; - tooLong: boolean; - valid: boolean; -} - -interface HTMLTrackElement extends HTMLElement { - kind: string; - src: string; - srclang: string; - track: TextTrack; - label: string; - default: boolean; -} - -interface MSApp { - createFileFromStorageFile(storageFile: any): File; - createBlobFromRandomAccessStream(type: string, seeker: any): Blob; - createStreamFromInputStream(type: string, inputStream: any): MSStream; - terminateApp(exceptionObject: any): void; - createDataPackage(object: any): any; - execUnsafeLocalFunction(unsafeFunction: MSUnsafeFunctionCallback): any; - getHtmlPrintDocumentSource(htmlDoc: any): any; - addPublicLocalApplicationUri(uri: string): void; - createDataPackageFromSelection(): any; -} -declare var MSApp: MSApp; - -interface HTMLVideoElement { - msIsStereo3D: boolean; - msStereo3DPackingMode: string; - onMSVideoOptimalLayoutChanged: (ev: any) => any; - onMSVideoFrameStepCompleted: (ev: any) => any; - msStereo3DRenderMode: string; - msIsLayoutOptimalForPlayback: boolean; - msHorizontalMirror: boolean; - onMSVideoFormatChanged: (ev: any) => any; - msZoom: boolean; - msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void; - msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void; - msFrameStep(forward: boolean): void; -} - -interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - in1: SVGAnimatedString; -} - -interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - kernelUnitLengthY: SVGAnimatedNumber; - surfaceScale: SVGAnimatedNumber; - in1: SVGAnimatedString; - kernelUnitLengthX: SVGAnimatedNumber; - diffuseConstant: SVGAnimatedNumber; -} - -interface MSCSSMatrix { - m24: number; - m34: number; - a: number; - d: number; - m32: number; - m41: number; - m11: number; - f: number; - e: number; - m23: number; - m14: number; - m33: number; - m22: number; - m21: number; - c: number; - m12: number; - b: number; - m42: number; - m31: number; - m43: number; - m13: number; - m44: number; - multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix; - skewY(angle: number): MSCSSMatrix; - setMatrixValue(value: string): void; - inverse(): MSCSSMatrix; - rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix; - toString(): string; - rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix; - translate(x: number, y: number, z?: number): MSCSSMatrix; - scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix; - skewX(angle: number): MSCSSMatrix; -} -declare var MSCSSMatrix: { - prototype: MSCSSMatrix; - new (text?: string): MSCSSMatrix; -} - -interface Worker extends AbstractWorker { - onmessage: (ev: any) => any; - postMessage(message: any, ports?: any): void; - terminate(): void; -} -declare var Worker: { - prototype: Worker; - new (stringUrl: string): Worker; -} - -interface HTMLIFrameElement { - sandbox: DOMSettableTokenList; -} - -declare var onmspointerdown: (ev: any) => any; -declare var animationStartTime: number; -declare var onmsgesturedoubletap: (ev: any) => any; -declare var onmspointerhover: (ev: any) => any; -declare var onmsgesturehold: (ev: any) => any; -declare var onmspointermove: (ev: any) => any; -declare var onmsgesturechange: (ev: any) => any; -declare var onmsgesturestart: (ev: any) => any; -declare var onmspointercancel: (ev: any) => any; -declare var onmsgestureend: (ev: any) => any; -declare var onmsgesturetap: (ev: any) => any; -declare var onmspointerout: (ev: any) => any; -declare var msAnimationStartTime: number; -declare var applicationCache: ApplicationCache; -declare var onmsinertiastart: (ev: any) => any; -declare var onmspointerover: (ev: any) => any; -declare var onpopstate: (ev: PopStateEvent) => any; -declare var onmspointerup: (ev: any) => any; -declare function msCancelRequestAnimationFrame(handle: number): void; -declare function matchMedia(mediaQuery: string): MediaQueryList; -declare function cancelAnimationFrame(handle: number): void; -declare function msIsStaticHTML(html: string): boolean; -declare function msMatchMedia(mediaQuery: string): MediaQueryList; -declare function requestAnimationFrame(callback: FrameRequestCallback): number; -declare function msRequestAnimationFrame(callback: FrameRequestCallback): number; -declare function btoa(rawString: string): string; -declare function atob(encodedString: string): string; -declare var msIndexedDB: IDBFactory; -declare var indexedDB: IDBFactory; -declare var console: Console; - - -///////////////////////////// -/// IE11 DOM APIs -///////////////////////////// - - -interface StoreExceptionsInformation extends ExceptionInformation { - siteName?: string; - explanationString?: string; - detailURI?: string; -} - -interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation { - arrayOfDomainStrings?: Array; -} - -interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation { - arrayOfDomainStrings?: Array; -} - -interface AlgorithmParameters { -} - -interface MutationObserverInit { - childList?: boolean; - attributes?: boolean; - characterData?: boolean; - subtree?: boolean; - attributeOldValue?: boolean; - characterDataOldValue?: boolean; - attributeFilter?: Array; -} - -interface ExceptionInformation { - domain?: string; -} - -interface MsZoomToOptions { - contentX?: number; - contentY?: number; - viewportX?: string; - viewportY?: string; - scaleFactor?: number; - animate?: string; -} - -interface DeviceAccelerationDict { - x?: number; - y?: number; - z?: number; -} - -interface DeviceRotationRateDict { - alpha?: number; - beta?: number; - gamma?: number; -} - -interface Algorithm { - name?: string; - params?: AlgorithmParameters; -} - -interface NavigatorID { - product: string; - vendor: string; -} - -interface HTMLBodyElement { - onpageshow: (ev: PageTransitionEvent) => any; - onpagehide: (ev: PageTransitionEvent) => any; -} - -interface MSExecAtPriorityFunctionCallback { - (...args: any[]): any; -} - -interface MSWindowExtensions { - captureEvents(): void; - releaseEvents(): void; -} - -interface MSGraphicsTrust { - status: string; - constrictionActive: boolean; -} - -interface AudioTrack { - sourceBuffer: SourceBuffer; -} - -interface DragEvent { - msConvertURL(file: File, targetType: string, targetURL?: string): void; -} - -interface SubtleCrypto { - unwrapKey(wrappedKey: ArrayBufferView, keyAlgorithm: any, keyEncryptionKey: Key, extractable?: boolean, keyUsages?: string[]): KeyOperation; - encrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; - importKey(format: string, keyData: ArrayBufferView, algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; - wrapKey(key: Key, keyEncryptionKey: Key, keyWrappingAlgorithm: any): KeyOperation; - verify(algorithm: any, key: Key, signature: ArrayBufferView, buffer?: ArrayBufferView): CryptoOperation; - deriveKey(algorithm: any, baseKey: Key, derivedKeyType: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; - digest(algorithm: any, buffer?: ArrayBufferView): CryptoOperation; - exportKey(format: string, key: Key): KeyOperation; - generateKey(algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; - sign(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; - decrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; -} - -interface Crypto extends RandomSource { - subtle: SubtleCrypto; -} - -interface VideoPlaybackQuality { - totalFrameDelay: number; - creationTime: number; - totalVideoFrames: number; - droppedVideoFrames: number; -} - -interface GlobalEventHandlers { - onpointerenter: (ev: PointerEvent) => any; - onpointerout: (ev: PointerEvent) => any; - onpointerdown: (ev: PointerEvent) => any; - onpointerup: (ev: PointerEvent) => any; - onpointercancel: (ev: PointerEvent) => any; - onpointerover: (ev: PointerEvent) => any; - onpointermove: (ev: PointerEvent) => any; - onpointerleave: (ev: PointerEvent) => any; -} - -interface Window extends GlobalEventHandlers { - onpageshow: (ev: PageTransitionEvent) => any; - ondevicemotion: (ev: DeviceMotionEvent) => any; - devicePixelRatio: number; - msCrypto: Crypto; - ondeviceorientation: (ev: DeviceOrientationEvent) => any; - doNotTrack: string; - onmspointerenter: (ev: any) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onmspointerleave: (ev: any) => any; -} - -interface Key { - algorithm: Algorithm; - type: string; - extractable: boolean; - keyUsage: string[]; -} - -interface TextTrackList extends EventTarget { - onaddtrack: (ev: any) => any; -} - -interface DeviceAcceleration { - y: number; - x: number; - z: number; -} - -interface Console { - count(countTitle?: string): void; - groupEnd(): void; - time(timerName?: string): void; - timeEnd(timerName?: string): void; - trace(): void; - group(groupTitle?: string): void; - dirxml(value: any): void; - debug(message?: string, ...optionalParams: any[]): void; - groupCollapsed(groupTitle?: string): void; - select(element: Element): void; -} - -interface MSNavigatorDoNotTrack { - removeSiteSpecificTrackingException(args: ExceptionInformation): void; - removeWebWideTrackingException(args: ExceptionInformation): void; - storeWebWideTrackingException(args: StoreExceptionsInformation): void; - storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void; - confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean; - confirmWebWideTrackingException(args: ExceptionInformation): boolean; -} - -interface HTMLImageElement { - crossOrigin: string; - msPlayToPreferredSourceUri: string; -} - -interface HTMLAllCollection extends HTMLCollection { - namedItem(name: string): Element; - //[name: string]: Element; -} - -interface MSNavigatorExtensions { - language: string; -} - -interface AesGcmEncryptResult { - ciphertext: ArrayBuffer; - tag: ArrayBuffer; -} - -interface HTMLSourceElement { - msKeySystem: string; -} - -interface CSSStyleDeclaration { - alignItems: string; - borderImageSource: string; - flexBasis: string; - borderImageWidth: string; - borderImageRepeat: string; - order: string; - flex: string; - alignContent: string; - msImeAlign: string; - flexShrink: string; - flexGrow: string; - borderImageSlice: string; - flexWrap: string; - borderImageOutset: string; - flexDirection: string; - touchAction: string; - flexFlow: string; - borderImage: string; - justifyContent: string; - alignSelf: string; - msTextCombineHorizontal: string; -} - -interface NavigationCompletedEvent extends NavigationEvent { - webErrorStatus: number; - isSuccess: boolean; -} - -interface MutationRecord { - oldValue: string; - previousSibling: Node; - addedNodes: NodeList; - attributeName: string; - removedNodes: NodeList; - target: Node; - nextSibling: Node; - attributeNamespace: string; - type: string; -} - -interface Navigator { - pointerEnabled: boolean; - maxTouchPoints: number; -} - -interface Document extends MSDocumentExtensions, GlobalEventHandlers { - msFullscreenEnabled: boolean; - onmsfullscreenerror: (ev: any) => any; - onmspointerenter: (ev: any) => any; - msFullscreenElement: Element; - onmsfullscreenchange: (ev: any) => any; - onmspointerleave: (ev: any) => any; - msExitFullscreen(): void; -} - -interface MimeTypeArray { - length: number; - item(index: number): Plugin; - [index: number]: Plugin; - namedItem(type: string): Plugin; - //[type: string]: Plugin; -} - -interface HTMLMediaElement { - /** - * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. - */ - msPlayToPreferredSourceUri: string; - onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; - /** - * Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element. - */ - msKeys: MSMediaKeys; - msGraphicsTrustStatus: MSGraphicsTrust; - msSetMediaKeys(mediaKeys: MSMediaKeys): void; - addTextTrack(kind: string, label?: string, language?: string): TextTrack; -} - -interface TextTrack { - addCue(cue: TextTrackCue): void; - removeCue(cue: TextTrackCue): void; -} - -interface KeyOperation extends EventTarget { - oncomplete: (ev: any) => any; - onerror: (ev: any) => any; - result: any; -} - -interface DOMStringMap { -} - -interface DeviceOrientationEvent extends Event { - gamma: number; - alpha: number; - absolute: boolean; - beta: number; - initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void; -} - -interface MSMediaKeys { - keySystem: string; - createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession; - isTypeSupported(keySystem: string, type?: string): boolean; -} -declare var MSMediaKeys: { - prototype: MSMediaKeys; - new (): MSMediaKeys; -} - -interface MSMediaKeyMessageEvent extends Event { - destinationURL: string; - message: Uint8Array; -} - -interface MSHTMLWebViewElement extends HTMLElement { - documentTitle: string; - width: number; - src: string; - canGoForward: boolean; - height: number; - canGoBack: boolean; - navigateWithHttpRequestMessage(requestMessage: any): void; - goBack(): void; - navigate(uri: string): void; - stop(): void; - navigateToString(contents: string): void; - captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation; - capturePreviewToBlobAsync(): MSWebViewAsyncOperation; - refresh(): void; - goForward(): void; - navigateToLocalStreamUri(source: string, streamResolver: any): void; - invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation; - buildLocalStreamUri(contentIdentifier: string, relativePath: string): string; -} - -interface NavigationEvent extends Event { - uri: string; -} - -interface Element extends GlobalEventHandlers { - onlostpointercapture: (ev: PointerEvent) => any; - onmspointerenter: (ev: any) => any; - ongotpointercapture: (ev: PointerEvent) => any; - onmspointerleave: (ev: any) => any; - msZoomTo(args: MsZoomToOptions): void; - setPointerCapture(pointerId: number): void; - msGetUntransformedBounds(): ClientRect; - releasePointerCapture(pointerId: number): void; - msRequestFullscreen(): void; -} - -interface RandomSource { - getRandomValues(array: ArrayBufferView): ArrayBufferView; -} - -interface XMLHttpRequest { - msCaching: string; - msCachingEnabled(): boolean; - overrideMimeType(mime: string): void; -} - -interface SourceBuffer extends EventTarget { - updating: boolean; - appendWindowStart: number; - appendWindowEnd: number; - buffered: TimeRanges; - timestampOffset: number; - audioTracks: AudioTrackList; - appendBuffer(data: ArrayBuffer): void; - remove(start: number, end: number): void; - abort(): void; - appendStream(stream: MSStream, maxSize?: number): void; -} - -interface MSInputMethodContext extends EventTarget { - oncandidatewindowshow: (ev: any) => any; - target: HTMLElement; - compositionStartOffset: number; - oncandidatewindowhide: (ev: any) => any; - oncandidatewindowupdate: (ev: any) => any; - compositionEndOffset: number; - getCompositionAlternatives(): string[]; - getCandidateWindowClientRect(): ClientRect; - hasComposition(): boolean; - isCandidateWindowVisible(): boolean; -} - -interface DeviceRotationRate { - gamma: number; - alpha: number; - beta: number; -} - -interface PluginArray { - length: number; - refresh(reload?: boolean): void; - item(index: number): Plugin; - [index: number]: Plugin; - namedItem(name: string): Plugin; - //[name: string]: Plugin; -} - -interface MSMediaKeyError { - systemCode: number; - code: number; - MS_MEDIA_KEYERR_SERVICE: number; - MS_MEDIA_KEYERR_HARDWARECHANGE: number; - MS_MEDIA_KEYERR_OUTPUT: number; - MS_MEDIA_KEYERR_DOMAIN: number; - MS_MEDIA_KEYERR_UNKNOWN: number; - MS_MEDIA_KEYERR_CLIENT: number; -} -declare var MSMediaKeyError: { - MS_MEDIA_KEYERR_SERVICE: number; - MS_MEDIA_KEYERR_HARDWARECHANGE: number; - MS_MEDIA_KEYERR_OUTPUT: number; - MS_MEDIA_KEYERR_DOMAIN: number; - MS_MEDIA_KEYERR_UNKNOWN: number; - MS_MEDIA_KEYERR_CLIENT: number; -} - -interface Plugin { - length: number; - filename: string; - version: string; - name: string; - description: string; - item(index: number): MimeType; - [index: number]: MimeType; - namedItem(type: string): MimeType; - //[type: string]: MimeType; -} - -interface HTMLFrameSetElement { - onpageshow: (ev: PageTransitionEvent) => any; - onpagehide: (ev: PageTransitionEvent) => any; -} - -interface Screen extends EventTarget { - msOrientation: string; - onmsorientationchange: (ev: any) => any; - msLockOrientation(orientation: string): boolean; - msLockOrientation(orientations: string[]): boolean; - msUnlockOrientation(): void; -} - -interface MediaSource extends EventTarget { - sourceBuffers: SourceBufferList; - duration: number; - readyState: string; - activeSourceBuffers: SourceBufferList; - addSourceBuffer(type: string): SourceBuffer; - endOfStream(error?: string): void; - isTypeSupported(type: string): boolean; - removeSourceBuffer(sourceBuffer: SourceBuffer): void; -} -declare var MediaSource: { - prototype: MediaSource; - new (): MediaSource; -} - -interface MediaError { - MS_MEDIA_ERR_ENCRYPTED: number; -} -//declare var MediaError: { -// MS_MEDIA_ERR_ENCRYPTED: number; -//} - -interface SourceBufferList extends EventTarget { - length: number; - item(index: number): SourceBuffer; - [index: number]: SourceBuffer; -} - -interface XMLDocument extends Document { -} - -interface DeviceMotionEvent extends Event { - rotationRate: DeviceRotationRate; - acceleration: DeviceAcceleration; - interval: number; - accelerationIncludingGravity: DeviceAcceleration; - initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void; -} - -interface MimeType { - enabledPlugin: Plugin; - suffixes: string; - type: string; - description: string; -} - -interface PointerEvent extends MouseEvent { - width: number; - rotation: number; - pressure: number; - pointerType: any; - isPrimary: boolean; - tiltY: number; - height: number; - intermediatePoints: any; - currentPoint: any; - tiltX: number; - hwTimestamp: number; - pointerId: number; - initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void; - getCurrentPoint(element: Element): void; - getIntermediatePoints(element: Element): void; -} - -interface MSDocumentExtensions { - captureEvents(): void; - releaseEvents(): void; -} - -interface HTMLElement { - dataset: DOMStringMap; - hidden: boolean; - msGetInputContext(): MSInputMethodContext; -} - -interface MutationObserver { - observe(target: Node, options: MutationObserverInit): void; - takeRecords(): MutationRecord[]; - disconnect(): void; -} -declare var MutationObserver: { - prototype: MutationObserver; - new (callback: (arr: MutationRecord[], observer: MutationObserver)=>any): MutationObserver; -} - -interface AudioTrackList { - onremovetrack: (ev: PluginArray) => any; -} - -interface HTMLObjectElement { - /** - * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. - */ - msPlayToPreferredSourceUri: string; - /** - * Gets or sets the primary DLNA PlayTo device. - */ - msPlayToPrimary: boolean; - /** - * Gets or sets whether the DLNA PlayTo device is available. - */ - msPlayToDisabled: boolean; - readyState: number; - /** - * Gets the source associated with the media element for use by the PlayToManager. - */ - msPlayToSource: any; -} - -interface HTMLEmbedElement { - /** - * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. - */ - msPlayToPreferredSourceUri: string; - /** - * Gets or sets the primary DLNA PlayTo device. - */ - msPlayToPrimary: boolean; - /** - * Gets or sets whether the DLNA PlayTo device is available. - */ - msPlayToDisabled: boolean; - readyState: string; - /** - * Gets the source associated with the media element for use by the PlayToManager. - */ - msPlayToSource: any; -} - -interface MSWebViewAsyncOperation extends EventTarget { - target: MSHTMLWebViewElement; - oncomplete: (ev: any) => any; - error: DOMError; - onerror: (ev: any) => any; - readyState: number; - type: number; - result: any; - start(): void; - ERROR: number; - TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; - TYPE_INVOKE_SCRIPT: number; - COMPLETED: number; - TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; - STARTED: number; -} -declare var MSWebViewAsyncOperation: { - ERROR: number; - TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; - TYPE_INVOKE_SCRIPT: number; - COMPLETED: number; - TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; - STARTED: number; -} - -interface ScriptNotifyEvent extends Event { - value: string; - callingUri: string; -} - -interface PerformanceNavigationTiming extends PerformanceEntry { - redirectStart: number; - domainLookupEnd: number; - responseStart: number; - domComplete: number; - domainLookupStart: number; - loadEventStart: number; - unloadEventEnd: number; - fetchStart: number; - requestStart: number; - domInteractive: number; - navigationStart: number; - connectEnd: number; - loadEventEnd: number; - connectStart: number; - responseEnd: number; - domLoading: number; - redirectEnd: number; - redirectCount: number; - unloadEventStart: number; - domContentLoadedEventStart: number; - domContentLoadedEventEnd: number; - type: string; -} - -interface MSMediaKeyNeededEvent extends Event { - initData: Uint8Array; -} - -interface MSManipulationEvent { - MS_MANIPULATION_STATE_SELECTING: number; - MS_MANIPULATION_STATE_COMMITTED: number; - MS_MANIPULATION_STATE_PRESELECT: number; - MS_MANIPULATION_STATE_DRAGGING: number; - MS_MANIPULATION_STATE_CANCELLED: number; -} -//declare var MSManipulationEvent: { -// MS_MANIPULATION_STATE_SELECTING: number; -// MS_MANIPULATION_STATE_COMMITTED: number; -// MS_MANIPULATION_STATE_PRESELECT: number; -// MS_MANIPULATION_STATE_DRAGGING: number; -// MS_MANIPULATION_STATE_CANCELLED: number; -//} - -interface LongRunningScriptDetectedEvent extends Event { - stopPageScriptExecution: boolean; - executionTime: number; -} - -interface MSAppView { - viewId: number; - close(): void; - postMessage(message: any, targetOrigin: string, ports?: any): void; -} - -interface PerfWidgetExternal { - maxCpuSpeed: number; - independentRenderingEnabled: boolean; - irDisablingContentString: string; - irStatusAvailable: boolean; - performanceCounter: number; - averagePaintTime: number; - activeNetworkRequestCount: number; - paintRequestsPerSecond: number; - extraInformationEnabled: boolean; - performanceCounterFrequency: number; - averageFrameTime: number; - repositionWindow(x: number, y: number): void; - getRecentMemoryUsage(last: number): any; - getMemoryUsage(): number; - resizeWindow(width: number, height: number): void; - getProcessCpuUsage(): number; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; - removeEventListener(eventType: string, callback: (ev: any) => any): void; - getRecentCpuUsage(last: number): any; - addEventListener(eventType: string, callback: (ev: any) => any): void; - getRecentFrames(last: number): any; - getRecentPaintRequests(last: number): any; -} - -interface PageTransitionEvent extends Event { - persisted: boolean; -} - -interface MutationCallback { - (mutations: MutationRecord[], observer: MutationObserver): void; -} - -interface HTMLDocument extends Document { -} - -interface KeyPair { - privateKey: Key; - publicKey: Key; -} - -interface MSApp { - getViewOpener(): MSAppView; - suppressSubdownloadCredentialPrompts(suppress: boolean): void; - execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void; - isTaskScheduledAtPriorityOrHigher(priority: string): boolean; - execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any; - createNewView(uri: string): MSAppView; - getCurrentPriority(): string; - NORMAL: string; - HIGH: string; - IDLE: string; - CURRENT: string; -} -//declare var MSApp: { -// NORMAL: string; -// HIGH: string; -// IDLE: string; -// CURRENT: string; -//} - -interface MSMediaKeySession extends EventTarget { - sessionId: string; - error: MSMediaKeyError; - keySystem: string; - close(): void; - update(key: Uint8Array): void; -} - -interface HTMLTrackElement { - readyState: number; - ERROR: number; - LOADING: number; - LOADED: number; - NONE: number; -} -//declare var HTMLTrackElement: { -// ERROR: number; -// LOADING: number; -// LOADED: number; -// NONE: number; -//} - -interface HTMLVideoElement { - getVideoPlaybackQuality(): VideoPlaybackQuality; -} - -interface UnviewableContentIdentifiedEvent extends NavigationEvent { - referrer: string; -} - -interface CryptoOperation extends EventTarget { - algorithm: Algorithm; - oncomplete: (ev: any) => any; - onerror: (ev: any) => any; - onprogress: (ev: any) => any; - onabort: (ev: any) => any; - key: Key; - result: any; - abort(): void; - finish(): void; - process(buffer: ArrayBufferView): void; -} - -declare var onpageshow: (ev: PageTransitionEvent) => any; -declare var ondevicemotion: (ev: DeviceMotionEvent) => any; -declare var devicePixelRatio: number; -declare var msCrypto: Crypto; -declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; -declare var doNotTrack: string; -declare var onmspointerenter: (ev: any) => any; -declare var onpagehide: (ev: PageTransitionEvent) => any; -declare var onmspointerleave: (ev: any) => any; -declare var onpointerenter: (ev: PointerEvent) => any; -declare var onpointerout: (ev: PointerEvent) => any; -declare var onpointerdown: (ev: PointerEvent) => any; -declare var onpointerup: (ev: PointerEvent) => any; -declare var onpointercancel: (ev: PointerEvent) => any; -declare var onpointerover: (ev: PointerEvent) => any; -declare var onpointermove: (ev: PointerEvent) => any; -declare var onpointerleave: (ev: PointerEvent) => any; - - -///////////////////////////// -/// WebGL APIs -///////////////////////////// - - -interface WebGLTexture extends WebGLObject { -} - -interface OES_texture_float { -} - -interface WebGLContextEvent extends Event { - statusMessage: string; -} -declare var WebGLContextEvent: { - prototype: WebGLContextEvent; - new (): WebGLContextEvent; -} - -interface WebGLRenderbuffer extends WebGLObject { -} - -interface WebGLUniformLocation { -} - -interface WebGLActiveInfo { - name: string; - type: number; - size: number; -} - -interface WEBGL_compressed_texture_s3tc { - COMPRESSED_RGBA_S3TC_DXT1_EXT: number; - COMPRESSED_RGBA_S3TC_DXT5_EXT: number; - COMPRESSED_RGBA_S3TC_DXT3_EXT: number; - COMPRESSED_RGB_S3TC_DXT1_EXT: number; -} -declare var WEBGL_compressed_texture_s3tc: { - COMPRESSED_RGBA_S3TC_DXT1_EXT: number; - COMPRESSED_RGBA_S3TC_DXT5_EXT: number; - COMPRESSED_RGBA_S3TC_DXT3_EXT: number; - COMPRESSED_RGB_S3TC_DXT1_EXT: number; -} - -interface WebGLContextAttributes { - alpha: boolean; - depth: boolean; - stencil: boolean; - antialias: boolean; - premultipliedAlpha: boolean; - preserveDrawingBuffer: boolean; -} - -interface WebGLRenderingContext { - drawingBufferWidth: number; - drawingBufferHeight: number; - canvas: HTMLCanvasElement; - getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation; - bindTexture(target: number, texture: WebGLTexture): void; - bufferData(target: number, data: ArrayBufferView, usage: number): void; - bufferData(target: number, data: ArrayBuffer, usage: number): void; - bufferData(target: number, size: number, usage: number): void; - depthMask(flag: boolean): void; - getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; - vertexAttrib3fv(indx: number, values: number[]): void; - vertexAttrib3fv(indx: number, values: Float32Array): void; - linkProgram(program: WebGLProgram): void; - getSupportedExtensions(): string[]; - bufferSubData(target: number, offset: number, data: ArrayBuffer): void; - bufferSubData(target: number, offset: number, data: ArrayBufferView): void; - vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void; - polygonOffset(factor: number, units: number): void; - blendColor(red: number, green: number, blue: number, alpha: number): void; - createTexture(): WebGLTexture; - hint(target: number, mode: number): void; - getVertexAttrib(index: number, pname: number): any; - enableVertexAttribArray(index: number): void; - depthRange(zNear: number, zFar: number): void; - cullFace(mode: number): void; - createFramebuffer(): WebGLFramebuffer; - uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; - uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; - framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void; - deleteFramebuffer(framebuffer: WebGLFramebuffer): void; - colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void; - compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; - uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; - uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; - getExtension(name: string): Object; - createProgram(): WebGLProgram; - deleteShader(shader: WebGLShader): void; - getAttachedShaders(program: WebGLProgram): WebGLShader[]; - enable(cap: number): void; - blendEquation(mode: number): void; - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; - createBuffer(): WebGLBuffer; - deleteTexture(texture: WebGLTexture): void; - useProgram(program: WebGLProgram): void; - vertexAttrib2fv(indx: number, values: number[]): void; - vertexAttrib2fv(indx: number, values: Float32Array): void; - checkFramebufferStatus(target: number): number; - frontFace(mode: number): void; - getBufferParameter(target: number, pname: number): any; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; - copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void; - getVertexAttribOffset(index: number, pname: number): number; - disableVertexAttribArray(index: number): void; - blendFunc(sfactor: number, dfactor: number): void; - drawElements(mode: number, count: number, type: number, offset: number): void; - isFramebuffer(framebuffer: WebGLFramebuffer): boolean; - uniform3iv(location: WebGLUniformLocation, v: number[]): void; - uniform3iv(location: WebGLUniformLocation, v: Int32Array): void; - lineWidth(width: number): void; - getShaderInfoLog(shader: WebGLShader): string; - getTexParameter(target: number, pname: number): any; - getParameter(pname: number): any; - getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat; - getContextAttributes(): WebGLContextAttributes; - vertexAttrib1f(indx: number, x: number): void; - bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void; - compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void; - isContextLost(): boolean; - uniform1iv(location: WebGLUniformLocation, v: number[]): void; - uniform1iv(location: WebGLUniformLocation, v: Int32Array): void; - getRenderbufferParameter(target: number, pname: number): any; - uniform2fv(location: WebGLUniformLocation, v: number[]): void; - uniform2fv(location: WebGLUniformLocation, v: Float32Array): void; - isTexture(texture: WebGLTexture): boolean; - getError(): number; - shaderSource(shader: WebGLShader, source: string): void; - deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void; - stencilMask(mask: number): void; - bindBuffer(target: number, buffer: WebGLBuffer): void; - getAttribLocation(program: WebGLProgram, name: string): number; - uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; - blendEquationSeparate(modeRGB: number, modeAlpha: number): void; - clear(mask: number): void; - blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void; - stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void; - readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - scissor(x: number, y: number, width: number, height: number): void; - uniform2i(location: WebGLUniformLocation, x: number, y: number): void; - getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo; - getShaderSource(shader: WebGLShader): string; - generateMipmap(target: number): void; - bindAttribLocation(program: WebGLProgram, index: number, name: string): void; - uniform1fv(location: WebGLUniformLocation, v: number[]): void; - uniform1fv(location: WebGLUniformLocation, v: Float32Array): void; - uniform2iv(location: WebGLUniformLocation, v: number[]): void; - uniform2iv(location: WebGLUniformLocation, v: Int32Array): void; - stencilOp(fail: number, zfail: number, zpass: number): void; - uniform4fv(location: WebGLUniformLocation, v: number[]): void; - uniform4fv(location: WebGLUniformLocation, v: Float32Array): void; - vertexAttrib1fv(indx: number, values: number[]): void; - vertexAttrib1fv(indx: number, values: Float32Array): void; - flush(): void; - uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; - deleteProgram(program: WebGLProgram): void; - isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean; - uniform1i(location: WebGLUniformLocation, x: number): void; - getProgramParameter(program: WebGLProgram, pname: number): any; - getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo; - stencilFunc(func: number, ref: number, mask: number): void; - pixelStorei(pname: number, param: number): void; - disable(cap: number): void; - vertexAttrib4fv(indx: number, values: number[]): void; - vertexAttrib4fv(indx: number, values: Float32Array): void; - createRenderbuffer(): WebGLRenderbuffer; - isBuffer(buffer: WebGLBuffer): boolean; - stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; - getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any; - uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; - sampleCoverage(value: number, invert: boolean): void; - depthFunc(func: number): void; - texParameterf(target: number, pname: number, param: number): void; - vertexAttrib3f(indx: number, x: number, y: number, z: number): void; - drawArrays(mode: number, first: number, count: number): void; - texParameteri(target: number, pname: number, param: number): void; - vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void; - getShaderParameter(shader: WebGLShader, pname: number): any; - clearDepth(depth: number): void; - activeTexture(texture: number): void; - viewport(x: number, y: number, width: number, height: number): void; - detachShader(program: WebGLProgram, shader: WebGLShader): void; - uniform1f(location: WebGLUniformLocation, x: number): void; - uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; - uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; - deleteBuffer(buffer: WebGLBuffer): void; - copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void; - uniform3fv(location: WebGLUniformLocation, v: number[]): void; - uniform3fv(location: WebGLUniformLocation, v: Float32Array): void; - stencilMaskSeparate(face: number, mask: number): void; - attachShader(program: WebGLProgram, shader: WebGLShader): void; - compileShader(shader: WebGLShader): void; - clearColor(red: number, green: number, blue: number, alpha: number): void; - isShader(shader: WebGLShader): boolean; - clearStencil(s: number): void; - framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void; - finish(): void; - uniform2f(location: WebGLUniformLocation, x: number, y: number): void; - renderbufferStorage(target: number, internalformat: number, width: number, height: number): void; - uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; - getProgramInfoLog(program: WebGLProgram): string; - validateProgram(program: WebGLProgram): void; - isEnabled(cap: number): boolean; - vertexAttrib2f(indx: number, x: number, y: number): void; - isProgram(program: WebGLProgram): boolean; - createShader(type: number): WebGLShader; - bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void; - uniform4iv(location: WebGLUniformLocation, v: number[]): void; - uniform4iv(location: WebGLUniformLocation, v: Int32Array): void; - DEPTH_FUNC: number; - DEPTH_COMPONENT16: number; - REPLACE: number; - REPEAT: number; - VERTEX_ATTRIB_ARRAY_ENABLED: number; - FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number; - STENCIL_BUFFER_BIT: number; - RENDERER: number; - STENCIL_BACK_REF: number; - TEXTURE26: number; - RGB565: number; - DITHER: number; - CONSTANT_COLOR: number; - GENERATE_MIPMAP_HINT: number; - POINTS: number; - DECR: number; - INT_VEC3: number; - TEXTURE28: number; - ONE_MINUS_CONSTANT_ALPHA: number; - BACK: number; - RENDERBUFFER_STENCIL_SIZE: number; - UNPACK_FLIP_Y_WEBGL: number; - BLEND: number; - TEXTURE9: number; - ARRAY_BUFFER_BINDING: number; - MAX_VIEWPORT_DIMS: number; - INVALID_FRAMEBUFFER_OPERATION: number; - TEXTURE: number; - TEXTURE0: number; - TEXTURE31: number; - TEXTURE24: number; - HIGH_INT: number; - RENDERBUFFER_BINDING: number; - BLEND_COLOR: number; - FASTEST: number; - STENCIL_WRITEMASK: number; - ALIASED_POINT_SIZE_RANGE: number; - TEXTURE12: number; - DST_ALPHA: number; - BLEND_EQUATION_RGB: number; - FRAMEBUFFER_COMPLETE: number; - NEAREST_MIPMAP_NEAREST: number; - VERTEX_ATTRIB_ARRAY_SIZE: number; - TEXTURE3: number; - DEPTH_WRITEMASK: number; - CONTEXT_LOST_WEBGL: number; - INVALID_VALUE: number; - TEXTURE_MAG_FILTER: number; - ONE_MINUS_CONSTANT_COLOR: number; - ONE_MINUS_SRC_ALPHA: number; - TEXTURE_CUBE_MAP_POSITIVE_Z: number; - NOTEQUAL: number; - ALPHA: number; - DEPTH_STENCIL: number; - MAX_VERTEX_UNIFORM_VECTORS: number; - DEPTH_COMPONENT: number; - RENDERBUFFER_RED_SIZE: number; - TEXTURE20: number; - RED_BITS: number; - RENDERBUFFER_BLUE_SIZE: number; - SCISSOR_BOX: number; - VENDOR: number; - FRONT_AND_BACK: number; - CONSTANT_ALPHA: number; - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number; - NEAREST: number; - CULL_FACE: number; - ALIASED_LINE_WIDTH_RANGE: number; - TEXTURE19: number; - FRONT: number; - DEPTH_CLEAR_VALUE: number; - GREEN_BITS: number; - TEXTURE29: number; - TEXTURE23: number; - MAX_RENDERBUFFER_SIZE: number; - STENCIL_ATTACHMENT: number; - TEXTURE27: number; - BOOL_VEC2: number; - OUT_OF_MEMORY: number; - MIRRORED_REPEAT: number; - POLYGON_OFFSET_UNITS: number; - TEXTURE_MIN_FILTER: number; - STENCIL_BACK_PASS_DEPTH_PASS: number; - LINE_LOOP: number; - FLOAT_MAT3: number; - TEXTURE14: number; - LINEAR: number; - RGB5_A1: number; - ONE_MINUS_SRC_COLOR: number; - SAMPLE_COVERAGE_INVERT: number; - DONT_CARE: number; - FRAMEBUFFER_BINDING: number; - RENDERBUFFER_ALPHA_SIZE: number; - STENCIL_REF: number; - ZERO: number; - DECR_WRAP: number; - SAMPLE_COVERAGE: number; - STENCIL_BACK_FUNC: number; - TEXTURE30: number; - VIEWPORT: number; - STENCIL_BITS: number; - FLOAT: number; - COLOR_WRITEMASK: number; - SAMPLE_COVERAGE_VALUE: number; - TEXTURE_CUBE_MAP_NEGATIVE_Y: number; - STENCIL_BACK_FAIL: number; - FLOAT_MAT4: number; - UNSIGNED_SHORT_4_4_4_4: number; - TEXTURE6: number; - RENDERBUFFER_WIDTH: number; - RGBA4: number; - ALWAYS: number; - BLEND_EQUATION_ALPHA: number; - COLOR_BUFFER_BIT: number; - TEXTURE_CUBE_MAP: number; - DEPTH_BUFFER_BIT: number; - STENCIL_CLEAR_VALUE: number; - BLEND_EQUATION: number; - RENDERBUFFER_GREEN_SIZE: number; - NEAREST_MIPMAP_LINEAR: number; - VERTEX_ATTRIB_ARRAY_TYPE: number; - INCR_WRAP: number; - ONE_MINUS_DST_COLOR: number; - HIGH_FLOAT: number; - BYTE: number; - FRONT_FACE: number; - SAMPLE_ALPHA_TO_COVERAGE: number; - CCW: number; - TEXTURE13: number; - MAX_VERTEX_ATTRIBS: number; - MAX_VERTEX_TEXTURE_IMAGE_UNITS: number; - TEXTURE_WRAP_T: number; - UNPACK_PREMULTIPLY_ALPHA_WEBGL: number; - FLOAT_VEC2: number; - LUMINANCE: number; - GREATER: number; - INT_VEC2: number; - VALIDATE_STATUS: number; - FRAMEBUFFER: number; - FRAMEBUFFER_UNSUPPORTED: number; - TEXTURE5: number; - FUNC_SUBTRACT: number; - BLEND_DST_ALPHA: number; - SAMPLER_CUBE: number; - ONE_MINUS_DST_ALPHA: number; - LESS: number; - TEXTURE_CUBE_MAP_POSITIVE_X: number; - BLUE_BITS: number; - DEPTH_TEST: number; - VERTEX_ATTRIB_ARRAY_STRIDE: number; - DELETE_STATUS: number; - TEXTURE18: number; - POLYGON_OFFSET_FACTOR: number; - UNSIGNED_INT: number; - TEXTURE_2D: number; - DST_COLOR: number; - FLOAT_MAT2: number; - COMPRESSED_TEXTURE_FORMATS: number; - MAX_FRAGMENT_UNIFORM_VECTORS: number; - DEPTH_STENCIL_ATTACHMENT: number; - LUMINANCE_ALPHA: number; - CW: number; - VERTEX_ATTRIB_ARRAY_NORMALIZED: number; - TEXTURE_CUBE_MAP_NEGATIVE_Z: number; - LINEAR_MIPMAP_LINEAR: number; - BUFFER_SIZE: number; - SAMPLE_BUFFERS: number; - TEXTURE15: number; - ACTIVE_TEXTURE: number; - VERTEX_SHADER: number; - TEXTURE22: number; - VERTEX_ATTRIB_ARRAY_POINTER: number; - INCR: number; - COMPILE_STATUS: number; - MAX_COMBINED_TEXTURE_IMAGE_UNITS: number; - TEXTURE7: number; - UNSIGNED_SHORT_5_5_5_1: number; - DEPTH_BITS: number; - RGBA: number; - TRIANGLE_STRIP: number; - COLOR_CLEAR_VALUE: number; - BROWSER_DEFAULT_WEBGL: number; - INVALID_ENUM: number; - SCISSOR_TEST: number; - LINE_STRIP: number; - FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number; - STENCIL_FUNC: number; - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number; - RENDERBUFFER_HEIGHT: number; - TEXTURE8: number; - TRIANGLES: number; - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number; - STENCIL_BACK_VALUE_MASK: number; - TEXTURE25: number; - RENDERBUFFER: number; - LEQUAL: number; - TEXTURE1: number; - STENCIL_INDEX8: number; - FUNC_ADD: number; - STENCIL_FAIL: number; - BLEND_SRC_ALPHA: number; - BOOL: number; - ALPHA_BITS: number; - LOW_INT: number; - TEXTURE10: number; - SRC_COLOR: number; - MAX_VARYING_VECTORS: number; - BLEND_DST_RGB: number; - TEXTURE_BINDING_CUBE_MAP: number; - STENCIL_INDEX: number; - TEXTURE_BINDING_2D: number; - MEDIUM_INT: number; - SHADER_TYPE: number; - POLYGON_OFFSET_FILL: number; - DYNAMIC_DRAW: number; - TEXTURE4: number; - STENCIL_BACK_PASS_DEPTH_FAIL: number; - STREAM_DRAW: number; - MAX_CUBE_MAP_TEXTURE_SIZE: number; - TEXTURE17: number; - TRIANGLE_FAN: number; - UNPACK_ALIGNMENT: number; - CURRENT_PROGRAM: number; - LINES: number; - INVALID_OPERATION: number; - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number; - LINEAR_MIPMAP_NEAREST: number; - CLAMP_TO_EDGE: number; - RENDERBUFFER_DEPTH_SIZE: number; - TEXTURE_WRAP_S: number; - ELEMENT_ARRAY_BUFFER: number; - UNSIGNED_SHORT_5_6_5: number; - ACTIVE_UNIFORMS: number; - FLOAT_VEC3: number; - NO_ERROR: number; - ATTACHED_SHADERS: number; - DEPTH_ATTACHMENT: number; - TEXTURE11: number; - STENCIL_TEST: number; - ONE: number; - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number; - STATIC_DRAW: number; - GEQUAL: number; - BOOL_VEC4: number; - COLOR_ATTACHMENT0: number; - PACK_ALIGNMENT: number; - MAX_TEXTURE_SIZE: number; - STENCIL_PASS_DEPTH_FAIL: number; - CULL_FACE_MODE: number; - TEXTURE16: number; - STENCIL_BACK_WRITEMASK: number; - SRC_ALPHA: number; - UNSIGNED_SHORT: number; - TEXTURE21: number; - FUNC_REVERSE_SUBTRACT: number; - SHADING_LANGUAGE_VERSION: number; - EQUAL: number; - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number; - BOOL_VEC3: number; - SAMPLER_2D: number; - TEXTURE_CUBE_MAP_NEGATIVE_X: number; - MAX_TEXTURE_IMAGE_UNITS: number; - TEXTURE_CUBE_MAP_POSITIVE_Y: number; - RENDERBUFFER_INTERNAL_FORMAT: number; - STENCIL_VALUE_MASK: number; - ELEMENT_ARRAY_BUFFER_BINDING: number; - ARRAY_BUFFER: number; - DEPTH_RANGE: number; - NICEST: number; - ACTIVE_ATTRIBUTES: number; - NEVER: number; - FLOAT_VEC4: number; - CURRENT_VERTEX_ATTRIB: number; - STENCIL_PASS_DEPTH_PASS: number; - INVERT: number; - LINK_STATUS: number; - RGB: number; - INT_VEC4: number; - TEXTURE2: number; - UNPACK_COLORSPACE_CONVERSION_WEBGL: number; - MEDIUM_FLOAT: number; - SRC_ALPHA_SATURATE: number; - BUFFER_USAGE: number; - SHORT: number; - NONE: number; - UNSIGNED_BYTE: number; - INT: number; - SUBPIXEL_BITS: number; - KEEP: number; - SAMPLES: number; - FRAGMENT_SHADER: number; - LINE_WIDTH: number; - BLEND_SRC_RGB: number; - LOW_FLOAT: number; - VERSION: number; -} -declare var WebGLRenderingContext: { - DEPTH_FUNC: number; - DEPTH_COMPONENT16: number; - REPLACE: number; - REPEAT: number; - VERTEX_ATTRIB_ARRAY_ENABLED: number; - FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number; - STENCIL_BUFFER_BIT: number; - RENDERER: number; - STENCIL_BACK_REF: number; - TEXTURE26: number; - RGB565: number; - DITHER: number; - CONSTANT_COLOR: number; - GENERATE_MIPMAP_HINT: number; - POINTS: number; - DECR: number; - INT_VEC3: number; - TEXTURE28: number; - ONE_MINUS_CONSTANT_ALPHA: number; - BACK: number; - RENDERBUFFER_STENCIL_SIZE: number; - UNPACK_FLIP_Y_WEBGL: number; - BLEND: number; - TEXTURE9: number; - ARRAY_BUFFER_BINDING: number; - MAX_VIEWPORT_DIMS: number; - INVALID_FRAMEBUFFER_OPERATION: number; - TEXTURE: number; - TEXTURE0: number; - TEXTURE31: number; - TEXTURE24: number; - HIGH_INT: number; - RENDERBUFFER_BINDING: number; - BLEND_COLOR: number; - FASTEST: number; - STENCIL_WRITEMASK: number; - ALIASED_POINT_SIZE_RANGE: number; - TEXTURE12: number; - DST_ALPHA: number; - BLEND_EQUATION_RGB: number; - FRAMEBUFFER_COMPLETE: number; - NEAREST_MIPMAP_NEAREST: number; - VERTEX_ATTRIB_ARRAY_SIZE: number; - TEXTURE3: number; - DEPTH_WRITEMASK: number; - CONTEXT_LOST_WEBGL: number; - INVALID_VALUE: number; - TEXTURE_MAG_FILTER: number; - ONE_MINUS_CONSTANT_COLOR: number; - ONE_MINUS_SRC_ALPHA: number; - TEXTURE_CUBE_MAP_POSITIVE_Z: number; - NOTEQUAL: number; - ALPHA: number; - DEPTH_STENCIL: number; - MAX_VERTEX_UNIFORM_VECTORS: number; - DEPTH_COMPONENT: number; - RENDERBUFFER_RED_SIZE: number; - TEXTURE20: number; - RED_BITS: number; - RENDERBUFFER_BLUE_SIZE: number; - SCISSOR_BOX: number; - VENDOR: number; - FRONT_AND_BACK: number; - CONSTANT_ALPHA: number; - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number; - NEAREST: number; - CULL_FACE: number; - ALIASED_LINE_WIDTH_RANGE: number; - TEXTURE19: number; - FRONT: number; - DEPTH_CLEAR_VALUE: number; - GREEN_BITS: number; - TEXTURE29: number; - TEXTURE23: number; - MAX_RENDERBUFFER_SIZE: number; - STENCIL_ATTACHMENT: number; - TEXTURE27: number; - BOOL_VEC2: number; - OUT_OF_MEMORY: number; - MIRRORED_REPEAT: number; - POLYGON_OFFSET_UNITS: number; - TEXTURE_MIN_FILTER: number; - STENCIL_BACK_PASS_DEPTH_PASS: number; - LINE_LOOP: number; - FLOAT_MAT3: number; - TEXTURE14: number; - LINEAR: number; - RGB5_A1: number; - ONE_MINUS_SRC_COLOR: number; - SAMPLE_COVERAGE_INVERT: number; - DONT_CARE: number; - FRAMEBUFFER_BINDING: number; - RENDERBUFFER_ALPHA_SIZE: number; - STENCIL_REF: number; - ZERO: number; - DECR_WRAP: number; - SAMPLE_COVERAGE: number; - STENCIL_BACK_FUNC: number; - TEXTURE30: number; - VIEWPORT: number; - STENCIL_BITS: number; - FLOAT: number; - COLOR_WRITEMASK: number; - SAMPLE_COVERAGE_VALUE: number; - TEXTURE_CUBE_MAP_NEGATIVE_Y: number; - STENCIL_BACK_FAIL: number; - FLOAT_MAT4: number; - UNSIGNED_SHORT_4_4_4_4: number; - TEXTURE6: number; - RENDERBUFFER_WIDTH: number; - RGBA4: number; - ALWAYS: number; - BLEND_EQUATION_ALPHA: number; - COLOR_BUFFER_BIT: number; - TEXTURE_CUBE_MAP: number; - DEPTH_BUFFER_BIT: number; - STENCIL_CLEAR_VALUE: number; - BLEND_EQUATION: number; - RENDERBUFFER_GREEN_SIZE: number; - NEAREST_MIPMAP_LINEAR: number; - VERTEX_ATTRIB_ARRAY_TYPE: number; - INCR_WRAP: number; - ONE_MINUS_DST_COLOR: number; - HIGH_FLOAT: number; - BYTE: number; - FRONT_FACE: number; - SAMPLE_ALPHA_TO_COVERAGE: number; - CCW: number; - TEXTURE13: number; - MAX_VERTEX_ATTRIBS: number; - MAX_VERTEX_TEXTURE_IMAGE_UNITS: number; - TEXTURE_WRAP_T: number; - UNPACK_PREMULTIPLY_ALPHA_WEBGL: number; - FLOAT_VEC2: number; - LUMINANCE: number; - GREATER: number; - INT_VEC2: number; - VALIDATE_STATUS: number; - FRAMEBUFFER: number; - FRAMEBUFFER_UNSUPPORTED: number; - TEXTURE5: number; - FUNC_SUBTRACT: number; - BLEND_DST_ALPHA: number; - SAMPLER_CUBE: number; - ONE_MINUS_DST_ALPHA: number; - LESS: number; - TEXTURE_CUBE_MAP_POSITIVE_X: number; - BLUE_BITS: number; - DEPTH_TEST: number; - VERTEX_ATTRIB_ARRAY_STRIDE: number; - DELETE_STATUS: number; - TEXTURE18: number; - POLYGON_OFFSET_FACTOR: number; - UNSIGNED_INT: number; - TEXTURE_2D: number; - DST_COLOR: number; - FLOAT_MAT2: number; - COMPRESSED_TEXTURE_FORMATS: number; - MAX_FRAGMENT_UNIFORM_VECTORS: number; - DEPTH_STENCIL_ATTACHMENT: number; - LUMINANCE_ALPHA: number; - CW: number; - VERTEX_ATTRIB_ARRAY_NORMALIZED: number; - TEXTURE_CUBE_MAP_NEGATIVE_Z: number; - LINEAR_MIPMAP_LINEAR: number; - BUFFER_SIZE: number; - SAMPLE_BUFFERS: number; - TEXTURE15: number; - ACTIVE_TEXTURE: number; - VERTEX_SHADER: number; - TEXTURE22: number; - VERTEX_ATTRIB_ARRAY_POINTER: number; - INCR: number; - COMPILE_STATUS: number; - MAX_COMBINED_TEXTURE_IMAGE_UNITS: number; - TEXTURE7: number; - UNSIGNED_SHORT_5_5_5_1: number; - DEPTH_BITS: number; - RGBA: number; - TRIANGLE_STRIP: number; - COLOR_CLEAR_VALUE: number; - BROWSER_DEFAULT_WEBGL: number; - INVALID_ENUM: number; - SCISSOR_TEST: number; - LINE_STRIP: number; - FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number; - STENCIL_FUNC: number; - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number; - RENDERBUFFER_HEIGHT: number; - TEXTURE8: number; - TRIANGLES: number; - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number; - STENCIL_BACK_VALUE_MASK: number; - TEXTURE25: number; - RENDERBUFFER: number; - LEQUAL: number; - TEXTURE1: number; - STENCIL_INDEX8: number; - FUNC_ADD: number; - STENCIL_FAIL: number; - BLEND_SRC_ALPHA: number; - BOOL: number; - ALPHA_BITS: number; - LOW_INT: number; - TEXTURE10: number; - SRC_COLOR: number; - MAX_VARYING_VECTORS: number; - BLEND_DST_RGB: number; - TEXTURE_BINDING_CUBE_MAP: number; - STENCIL_INDEX: number; - TEXTURE_BINDING_2D: number; - MEDIUM_INT: number; - SHADER_TYPE: number; - POLYGON_OFFSET_FILL: number; - DYNAMIC_DRAW: number; - TEXTURE4: number; - STENCIL_BACK_PASS_DEPTH_FAIL: number; - STREAM_DRAW: number; - MAX_CUBE_MAP_TEXTURE_SIZE: number; - TEXTURE17: number; - TRIANGLE_FAN: number; - UNPACK_ALIGNMENT: number; - CURRENT_PROGRAM: number; - LINES: number; - INVALID_OPERATION: number; - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number; - LINEAR_MIPMAP_NEAREST: number; - CLAMP_TO_EDGE: number; - RENDERBUFFER_DEPTH_SIZE: number; - TEXTURE_WRAP_S: number; - ELEMENT_ARRAY_BUFFER: number; - UNSIGNED_SHORT_5_6_5: number; - ACTIVE_UNIFORMS: number; - FLOAT_VEC3: number; - NO_ERROR: number; - ATTACHED_SHADERS: number; - DEPTH_ATTACHMENT: number; - TEXTURE11: number; - STENCIL_TEST: number; - ONE: number; - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number; - STATIC_DRAW: number; - GEQUAL: number; - BOOL_VEC4: number; - COLOR_ATTACHMENT0: number; - PACK_ALIGNMENT: number; - MAX_TEXTURE_SIZE: number; - STENCIL_PASS_DEPTH_FAIL: number; - CULL_FACE_MODE: number; - TEXTURE16: number; - STENCIL_BACK_WRITEMASK: number; - SRC_ALPHA: number; - UNSIGNED_SHORT: number; - TEXTURE21: number; - FUNC_REVERSE_SUBTRACT: number; - SHADING_LANGUAGE_VERSION: number; - EQUAL: number; - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number; - BOOL_VEC3: number; - SAMPLER_2D: number; - TEXTURE_CUBE_MAP_NEGATIVE_X: number; - MAX_TEXTURE_IMAGE_UNITS: number; - TEXTURE_CUBE_MAP_POSITIVE_Y: number; - RENDERBUFFER_INTERNAL_FORMAT: number; - STENCIL_VALUE_MASK: number; - ELEMENT_ARRAY_BUFFER_BINDING: number; - ARRAY_BUFFER: number; - DEPTH_RANGE: number; - NICEST: number; - ACTIVE_ATTRIBUTES: number; - NEVER: number; - FLOAT_VEC4: number; - CURRENT_VERTEX_ATTRIB: number; - STENCIL_PASS_DEPTH_PASS: number; - INVERT: number; - LINK_STATUS: number; - RGB: number; - INT_VEC4: number; - TEXTURE2: number; - UNPACK_COLORSPACE_CONVERSION_WEBGL: number; - MEDIUM_FLOAT: number; - SRC_ALPHA_SATURATE: number; - BUFFER_USAGE: number; - SHORT: number; - NONE: number; - UNSIGNED_BYTE: number; - INT: number; - SUBPIXEL_BITS: number; - KEEP: number; - SAMPLES: number; - FRAGMENT_SHADER: number; - LINE_WIDTH: number; - BLEND_SRC_RGB: number; - LOW_FLOAT: number; - VERSION: number; +interface HTMLElement extends Element, ElementCSSInlineStyle, MSEventAttachmentTarget, MSNodeExtensions { + hidden: any; + readyState: any; + onmouseleave: (ev: MouseEvent) => any; + onbeforecut: (ev: DragEvent) => any; + onkeydown: (ev: KeyboardEvent) => any; + onmove: (ev: MSEventObj) => any; + onkeyup: (ev: KeyboardEvent) => any; + onreset: (ev: Event) => any; + onhelp: (ev: Event) => any; + ondragleave: (ev: DragEvent) => any; + className: string; + onfocusin: (ev: FocusEvent) => any; + onseeked: (ev: Event) => any; + recordNumber: any; + title: string; + parentTextEdit: Element; + outerHTML: string; + ondurationchange: (ev: Event) => any; + offsetHeight: number; + all: HTMLCollection; + onblur: (ev: FocusEvent) => any; + dir: string; + onemptied: (ev: Event) => any; + onseeking: (ev: Event) => any; + oncanplay: (ev: Event) => any; + ondeactivate: (ev: UIEvent) => any; + ondatasetchanged: (ev: MSEventObj) => any; + onrowsdelete: (ev: MSEventObj) => any; + sourceIndex: number; + onloadstart: (ev: Event) => any; + onlosecapture: (ev: MSEventObj) => any; + ondragenter: (ev: DragEvent) => any; + oncontrolselect: (ev: MSEventObj) => any; + onsubmit: (ev: Event) => any; + behaviorUrns: MSBehaviorUrnsCollection; + scopeName: string; + onchange: (ev: Event) => any; + id: string; + onlayoutcomplete: (ev: MSEventObj) => any; + uniqueID: string; + onbeforeactivate: (ev: UIEvent) => any; + oncanplaythrough: (ev: Event) => any; + onbeforeupdate: (ev: MSEventObj) => any; + onfilterchange: (ev: MSEventObj) => any; + offsetParent: Element; + ondatasetcomplete: (ev: MSEventObj) => any; + onsuspend: (ev: Event) => any; + onmouseenter: (ev: MouseEvent) => any; + innerText: string; + onerrorupdate: (ev: MSEventObj) => any; + onmouseout: (ev: MouseEvent) => any; + parentElement: HTMLElement; + onmousewheel: (ev: MouseWheelEvent) => any; + onvolumechange: (ev: Event) => any; + oncellchange: (ev: MSEventObj) => any; + onrowexit: (ev: MSEventObj) => any; + onrowsinserted: (ev: MSEventObj) => any; + onpropertychange: (ev: MSEventObj) => any; + filters: any; + children: HTMLCollection; + ondragend: (ev: DragEvent) => any; + onbeforepaste: (ev: DragEvent) => any; + ondragover: (ev: DragEvent) => any; + offsetTop: number; + onmouseup: (ev: MouseEvent) => any; + ondragstart: (ev: DragEvent) => any; + onbeforecopy: (ev: DragEvent) => any; + ondrag: (ev: DragEvent) => any; + innerHTML: string; + onmouseover: (ev: MouseEvent) => any; + lang: string; + uniqueNumber: number; + onpause: (ev: Event) => any; + tagUrn: string; + onmousedown: (ev: MouseEvent) => any; + onclick: (ev: MouseEvent) => any; + onwaiting: (ev: Event) => any; + onresizestart: (ev: MSEventObj) => any; + offsetLeft: number; + isTextEdit: boolean; + isDisabled: boolean; + onpaste: (ev: DragEvent) => any; + canHaveHTML: boolean; + onmoveend: (ev: MSEventObj) => any; + language: string; + onstalled: (ev: Event) => any; + onmousemove: (ev: MouseEvent) => any; + style: MSStyleCSSProperties; + isContentEditable: boolean; + onbeforeeditfocus: (ev: MSEventObj) => any; + onratechange: (ev: Event) => any; + contentEditable: string; + tabIndex: number; + document: Document; + onprogress: (ev: ProgressEvent) => any; + ondblclick: (ev: MouseEvent) => any; + oncontextmenu: (ev: MouseEvent) => any; + onloadedmetadata: (ev: Event) => any; + onafterupdate: (ev: MSEventObj) => any; + onerror: (ev: ErrorEvent) => any; + onplay: (ev: Event) => any; + onresizeend: (ev: MSEventObj) => any; + onplaying: (ev: Event) => any; + isMultiLine: boolean; + onfocusout: (ev: FocusEvent) => any; + onabort: (ev: UIEvent) => any; + ondataavailable: (ev: MSEventObj) => any; + hideFocus: boolean; + onreadystatechange: (ev: Event) => any; + onkeypress: (ev: KeyboardEvent) => any; + onloadeddata: (ev: Event) => any; + onbeforedeactivate: (ev: UIEvent) => any; + outerText: string; + disabled: boolean; + onactivate: (ev: UIEvent) => any; + accessKey: string; + onmovestart: (ev: MSEventObj) => any; + onselectstart: (ev: Event) => any; + onfocus: (ev: FocusEvent) => any; + ontimeupdate: (ev: Event) => any; + onresize: (ev: UIEvent) => any; + oncut: (ev: DragEvent) => any; + onselect: (ev: UIEvent) => any; + ondrop: (ev: DragEvent) => any; + offsetWidth: number; + oncopy: (ev: DragEvent) => any; + onended: (ev: Event) => any; + onscroll: (ev: UIEvent) => any; + onrowenter: (ev: MSEventObj) => any; + onload: (ev: Event) => any; + canHaveChildren: boolean; + oninput: (ev: Event) => any; + onmscontentzoom: (ev: MSEventObj) => any; + oncuechange: (ev: Event) => any; + spellcheck: boolean; + classList: DOMTokenList; + onmsmanipulationstatechanged: (ev: any) => any; + draggable: boolean; + dataset: DOMStringMap; + dragDrop(): boolean; + scrollIntoView(top?: boolean): void; + addFilter(filter: any): void; + setCapture(containerCapture?: boolean): void; + focus(): void; + getAdjacentText(where: string): string; + insertAdjacentText(where: string, text: string): void; + getElementsByClassName(classNames: string): NodeList; + setActive(): void; + removeFilter(filter: any): void; + blur(): void; + clearAttributes(): void; + releaseCapture(): void; + createControlRange(): ControlRangeCollection; + removeBehavior(cookie: number): boolean; + contains(child: HTMLElement): boolean; + click(): void; + insertAdjacentElement(position: string, insertedElement: Element): Element; + mergeAttributes(source: HTMLElement, preserveIdentity?: boolean): void; + replaceAdjacentText(where: string, newText: string): string; + applyElement(apply: Element, where?: string): Element; + addBehavior(bstrUrl: string, factory?: any): number; + insertAdjacentHTML(where: string, html: string): void; + msGetInputContext(): MSInputMethodContext; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLElement: { + prototype: HTMLElement; + new(): HTMLElement; +} + +interface Document extends Node, NodeSelector, MSEventAttachmentTarget, DocumentEvent, MSResourceMetadata, MSNodeExtensions, MSDocumentExtensions, GlobalEventHandlers { + /** + * Gets a reference to the root node of the document. + */ + documentElement: HTMLElement; + /** + * Retrieves the collection of user agents and versions declared in the X-UA-Compatible + */ + compatible: MSCompatibleInfoCollection; + /** + * Fires when the user presses a key. + * @param ev The keyboard event + */ + onkeydown: (ev: KeyboardEvent) => any; + /** + * Fires when the user releases a key. + * @param ev The keyboard event + */ + onkeyup: (ev: KeyboardEvent) => any; + /** + * Gets the implementation object of the current document. + */ + implementation: DOMImplementation; + /** + * Fires when the user resets a form. + * @param ev The event. + */ + onreset: (ev: Event) => any; + /** + * Retrieves a collection of all script objects in the document. + */ + scripts: HTMLCollection; + /** + * Fires when the user presses the F1 key while the browser is the active window. + * @param ev The event. + */ + onhelp: (ev: Event) => any; + /** + * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. + * @param ev The drag event. + */ + ondragleave: (ev: DragEvent) => any; + /** + * Gets or sets the character set used to encode the object. + */ + charset: string; + /** + * Fires for an element just prior to setting focus on that element. + * @param ev The focus event + */ + onfocusin: (ev: FocusEvent) => any; + /** + * Sets or gets the color of the links that the user has visited. + */ + vlinkColor: string; + /** + * Occurs when the seek operation ends. + * @param ev The event. + */ + onseeked: (ev: Event) => any; + security: string; + /** + * Contains the title of the document. + */ + title: string; + /** + * Retrieves a collection of namespace objects. + */ + namespaces: MSNamespaceInfoCollection; + /** + * Gets the default character set from the current regional language settings. + */ + defaultCharset: string; + /** + * Retrieves a collection of all embed objects in the document. + */ + embeds: HTMLCollection; + /** + * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. + */ + styleSheets: StyleSheetList; + /** + * Retrieves a collection of all window objects defined by the given document or defined by the document associated with the given window. + */ + frames: Window; + /** + * Occurs when the duration attribute is updated. + * @param ev The event. + */ + ondurationchange: (ev: Event) => any; + /** + * Returns a reference to the collection of elements contained by the object. + */ + all: HTMLCollection; + /** + * Retrieves a collection, in source order, of all form objects in the document. + */ + forms: HTMLCollection; + /** + * Fires when the object loses the input focus. + * @param ev The focus event. + */ + onblur: (ev: FocusEvent) => any; + /** + * Sets or retrieves a value that indicates the reading order of the object. + */ + dir: string; + /** + * Occurs when the media element is reset to its initial state. + * @param ev The event. + */ + onemptied: (ev: Event) => any; + /** + * Sets or gets a value that indicates whether the document can be edited. + */ + designMode: string; + /** + * Occurs when the current playback position is moved. + * @param ev The event. + */ + onseeking: (ev: Event) => any; + /** + * Fires when the activeElement is changed from the current object to another object in the parent document. + * @param ev The UI Event + */ + ondeactivate: (ev: UIEvent) => any; + /** + * Occurs when playback is possible, but would require further buffering. + * @param ev The event. + */ + oncanplay: (ev: Event) => any; + /** + * Fires when the data set exposed by a data source object changes. + * @param ev The event. + */ + ondatasetchanged: (ev: MSEventObj) => any; + /** + * Fires when rows are about to be deleted from the recordset. + * @param ev The event + */ + onrowsdelete: (ev: MSEventObj) => any; + Script: MSScriptHost; + /** + * Occurs when Internet Explorer begins looking for media data. + * @param ev The event. + */ + onloadstart: (ev: Event) => any; + /** + * Gets the URL for the document, stripped of any character encoding. + */ + URLUnencoded: string; + defaultView: Window; + /** + * Fires when the user is about to make a control selection of the object. + * @param ev The event. + */ + oncontrolselect: (ev: MSEventObj) => any; + /** + * Fires on the target element when the user drags the object to a valid drop target. + * @param ev The drag event. + */ + ondragenter: (ev: DragEvent) => any; + onsubmit: (ev: Event) => any; + /** + * Returns the character encoding used to create the webpage that is loaded into the document object. + */ + inputEncoding: string; + /** + * Gets the object that has the focus when the parent document has focus. + */ + activeElement: Element; + /** + * Fires when the contents of the object or selection have changed. + * @param ev The event. + */ + onchange: (ev: Event) => any; + /** + * Retrieves a collection of all a objects that specify the href property and all area objects in the document. + */ + links: HTMLCollection; + /** + * Retrieves an autogenerated, unique identifier for the object. + */ + uniqueID: string; + /** + * Sets or gets the URL for the current document. + */ + URL: string; + /** + * Fires immediately before the object is set as the active element. + * @param ev The event. + */ + onbeforeactivate: (ev: UIEvent) => any; + head: HTMLHeadElement; + cookie: string; + xmlEncoding: string; + oncanplaythrough: (ev: Event) => any; + /** + * Retrieves the document compatibility mode of the document. + */ + documentMode: number; + characterSet: string; + /** + * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order. + */ + anchors: HTMLCollection; + onbeforeupdate: (ev: MSEventObj) => any; + /** + * Fires to indicate that all data is available from the data source object. + * @param ev The event. + */ + ondatasetcomplete: (ev: MSEventObj) => any; + plugins: HTMLCollection; + /** + * Occurs if the load operation has been intentionally halted. + * @param ev The event. + */ + onsuspend: (ev: Event) => any; + /** + * Gets the root svg element in the document hierarchy. + */ + rootElement: SVGSVGElement; + /** + * Retrieves a value that indicates the current state of the object. + */ + readyState: string; + /** + * Gets the URL of the location that referred the user to the current page. + */ + referrer: string; + /** + * Sets or gets the color of all active links in the document. + */ + alinkColor: string; + /** + * Fires on a databound object when an error occurs while updating the associated data in the data source object. + * @param ev The event. + */ + onerrorupdate: (ev: MSEventObj) => any; + /** + * Gets a reference to the container object of the window. + */ + parentWindow: Window; + /** + * Fires when the user moves the mouse pointer outside the boundaries of the object. + * @param ev The mouse event. + */ + onmouseout: (ev: MouseEvent) => any; + /** + * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. + * @param ev The event. + */ + onmsthumbnailclick: (ev: MSSiteModeEvent) => any; + /** + * Fires when the wheel button is rotated. + * @param ev The mouse event + */ + onmousewheel: (ev: MouseWheelEvent) => any; + /** + * Occurs when the volume is changed, or playback is muted or unmuted. + * @param ev The event. + */ + onvolumechange: (ev: Event) => any; + /** + * Fires when data changes in the data provider. + * @param ev The event. + */ + oncellchange: (ev: MSEventObj) => any; + /** + * Fires just before the data source control changes the current row in the object. + * @param ev The event. + */ + onrowexit: (ev: MSEventObj) => any; + /** + * Fires just after new rows are inserted in the current recordset. + * @param ev The event. + */ + onrowsinserted: (ev: MSEventObj) => any; + /** + * Gets or sets the version attribute specified in the declaration of an XML document. + */ + xmlVersion: string; + msCapsLockWarningOff: boolean; + /** + * Fires when a property changes on the object. + * @param ev The event. + */ + onpropertychange: (ev: MSEventObj) => any; + /** + * Fires on the source object when the user releases the mouse at the close of a drag operation. + * @param ev The event. + */ + ondragend: (ev: DragEvent) => any; + /** + * Gets an object representing the document type declaration associated with the current document. + */ + doctype: DocumentType; + /** + * Fires on the target element continuously while the user drags the object over a valid drop target. + * @param ev The event. + */ + ondragover: (ev: DragEvent) => any; + /** + * Deprecated. Sets or retrieves a value that indicates the background color behind the object. + */ + bgColor: string; + /** + * Fires on the source object when the user starts to drag a text selection or selected object. + * @param ev The event. + */ + ondragstart: (ev: DragEvent) => any; + /** + * Fires when the user releases a mouse button while the mouse is over the object. + * @param ev The mouse event. + */ + onmouseup: (ev: MouseEvent) => any; + /** + * Fires on the source object continuously during a drag operation. + * @param ev The event. + */ + ondrag: (ev: DragEvent) => any; + /** + * Fires when the user moves the mouse pointer into the object. + * @param ev The mouse event. + */ + onmouseover: (ev: MouseEvent) => any; + /** + * Sets or gets the color of the document links. + */ + linkColor: string; + /** + * Occurs when playback is paused. + * @param ev The event. + */ + onpause: (ev: Event) => any; + /** + * Fires when the user clicks the object with either mouse button. + * @param ev The mouse event. + */ + onmousedown: (ev: MouseEvent) => any; + /** + * Fires when the user clicks the left mouse button on the object + * @param ev The mouse event. + */ + onclick: (ev: MouseEvent) => any; + /** + * Occurs when playback stops because the next frame of a video resource is not available. + * @param ev The event. + */ + onwaiting: (ev: Event) => any; + /** + * Fires when the user clicks the Stop button or leaves the Web page. + * @param ev The event. + */ + onstop: (ev: Event) => any; + /** + * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. + * @param ev The event. + */ + onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; + /** + * Retrieves a collection of all applet objects in the document. + */ + applets: HTMLCollection; + /** + * Specifies the beginning and end of the document body. + */ + body: HTMLElement; + /** + * Sets or gets the security domain of the document. + */ + domain: string; + xmlStandalone: boolean; + /** + * Represents the active selection, which is a highlighted block of text or other elements in the document that a user or a script can carry out some action on. + */ + selection: MSSelection; + /** + * Occurs when the download has stopped. + * @param ev The event. + */ + onstalled: (ev: Event) => any; + /** + * Fires when the user moves the mouse over the object. + * @param ev The mouse event. + */ + onmousemove: (ev: MouseEvent) => any; + /** + * Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected. + * @param ev The event. + */ + onbeforeeditfocus: (ev: MSEventObj) => any; + /** + * Occurs when the playback rate is increased or decreased. + * @param ev The event. + */ + onratechange: (ev: Event) => any; + /** + * Occurs to indicate progress while downloading media data. + * @param ev The event. + */ + onprogress: (ev: ProgressEvent) => any; + /** + * Fires when the user double-clicks the object. + * @param ev The mouse event. + */ + ondblclick: (ev: MouseEvent) => any; + /** + * Fires when the user clicks the right mouse button in the client area, opening the context menu. + * @param ev The mouse event. + */ + oncontextmenu: (ev: MouseEvent) => any; + /** + * Occurs when the duration and dimensions of the media have been determined. + * @param ev The event. + */ + onloadedmetadata: (ev: Event) => any; + media: string; + /** + * Fires when an error occurs during object loading. + * @param ev The event. + */ + onerror: (ev: ErrorEvent) => any; + /** + * Occurs when the play method is requested. + * @param ev The event. + */ + onplay: (ev: Event) => any; + onafterupdate: (ev: MSEventObj) => any; + /** + * Occurs when the audio or video has started playing. + * @param ev The event. + */ + onplaying: (ev: Event) => any; + /** + * Retrieves a collection, in source order, of img objects in the document. + */ + images: HTMLCollection; + /** + * Contains information about the current URL. + */ + location: Location; + /** + * Fires when the user aborts the download. + * @param ev The event. + */ + onabort: (ev: UIEvent) => any; + /** + * Fires for the current element with focus immediately after moving focus to another element. + * @param ev The event. + */ + onfocusout: (ev: FocusEvent) => any; + /** + * Fires when the selection state of a document changes. + * @param ev The event. + */ + onselectionchange: (ev: Event) => any; + /** + * Fires when a local DOM Storage area is written to disk. + * @param ev The event. + */ + onstoragecommit: (ev: StorageEvent) => any; + /** + * Fires periodically as data arrives from data source objects that asynchronously transmit their data. + * @param ev The event. + */ + ondataavailable: (ev: MSEventObj) => any; + /** + * Fires when the state of the object has changed. + * @param ev The event + */ + onreadystatechange: (ev: Event) => any; + /** + * Gets the date that the page was last modified, if the page supplies one. + */ + lastModified: string; + /** + * Fires when the user presses an alphanumeric key. + * @param ev The event. + */ + onkeypress: (ev: KeyboardEvent) => any; + /** + * Occurs when media data is loaded at the current playback position. + * @param ev The event. + */ + onloadeddata: (ev: Event) => any; + /** + * Fires immediately before the activeElement is changed from the current object to another object in the parent document. + * @param ev The event. + */ + onbeforedeactivate: (ev: UIEvent) => any; + /** + * Fires when the object is set as the active element. + * @param ev The event. + */ + onactivate: (ev: UIEvent) => any; + onselectstart: (ev: Event) => any; + /** + * Fires when the object receives focus. + * @param ev The event. + */ + onfocus: (ev: FocusEvent) => any; + /** + * Sets or gets the foreground (text) color of the document. + */ + fgColor: string; + /** + * Occurs to indicate the current playback position. + * @param ev The event. + */ + ontimeupdate: (ev: Event) => any; + /** + * Fires when the current selection changes. + * @param ev The event. + */ + onselect: (ev: UIEvent) => any; + ondrop: (ev: DragEvent) => any; + /** + * Occurs when the end of playback is reached. + * @param ev The event + */ + onended: (ev: Event) => any; + /** + * Gets a value that indicates whether standards-compliant mode is switched on for the object. + */ + compatMode: string; + /** + * Fires when the user repositions the scroll box in the scroll bar on the object. + * @param ev The event. + */ + onscroll: (ev: UIEvent) => any; + /** + * Fires to indicate that the current row has changed in the data source and new data values are available on the object. + * @param ev The event. + */ + onrowenter: (ev: MSEventObj) => any; + /** + * Fires immediately after the browser loads the object. + * @param ev The event. + */ + onload: (ev: Event) => any; + oninput: (ev: Event) => any; + onmspointerdown: (ev: any) => any; + msHidden: boolean; + msVisibilityState: string; + onmsgesturedoubletap: (ev: any) => any; + visibilityState: string; + onmsmanipulationstatechanged: (ev: any) => any; + onmspointerhover: (ev: any) => any; + onmscontentzoom: (ev: MSEventObj) => any; + onmspointermove: (ev: any) => any; + onmsgesturehold: (ev: any) => any; + onmsgesturechange: (ev: any) => any; + onmsgesturestart: (ev: any) => any; + onmspointercancel: (ev: any) => any; + onmsgestureend: (ev: any) => any; + onmsgesturetap: (ev: any) => any; + onmspointerout: (ev: any) => any; + onmsinertiastart: (ev: any) => any; + msCSSOMElementFloatMetrics: boolean; + onmspointerover: (ev: any) => any; + hidden: boolean; + onmspointerup: (ev: any) => any; + msFullscreenEnabled: boolean; + onmsfullscreenerror: (ev: any) => any; + onmspointerenter: (ev: any) => any; + msFullscreenElement: Element; + onmsfullscreenchange: (ev: any) => any; + onmspointerleave: (ev: any) => any; + /** + * Returns a reference to the first object with the specified value of the ID or NAME attribute. + * @param elementId String that specifies the ID value. Case-insensitive. + */ + getElementById(elementId: string): HTMLElement; + /** + * Returns the current value of the document, range, or current selection for the given command. + * @param commandId String that specifies a command identifier. + */ + queryCommandValue(commandId: string): string; + adoptNode(source: Node): Node; + /** + * Returns a Boolean value that indicates whether the specified command is in the indeterminate state. + * @param commandId String that specifies a command identifier. + */ + queryCommandIndeterm(commandId: string): boolean; + getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList; + createProcessingInstruction(target: string, data: string): ProcessingInstruction; + /** + * Executes a command on the current document, current selection, or the given range. + * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script. + * @param showUI Display the user interface, defaults to false. + * @param value Value to assign. + */ + execCommand(commandId: string, showUI?: boolean, value?: any): boolean; + /** + * Returns the element for the specified x coordinate and the specified y coordinate. + * @param x The x-offset + * @param y The y-offset + */ + elementFromPoint(x: number, y: number): Element; + createCDATASection(data: string): CDATASection; + /** + * Retrieves the string associated with a command. + * @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers. + */ + queryCommandText(commandId: string): string; + /** + * Writes one or more HTML expressions to a document in the specified window. + * @param content Specifies the text and HTML tags to write. + */ + write(...content: string[]): void; + /** + * Allows updating the print settings for the page. + */ + updateSettings(): void; + /** + * Creates an instance of the element for the specified tag. + * @param tagName The name of an element. + */ + createElement(tagName: "a"): HTMLAnchorElement; + createElement(tagName: "abbr"): HTMLPhraseElement; + createElement(tagName: "acronym"): HTMLPhraseElement; + createElement(tagName: "address"): HTMLBlockElement; + createElement(tagName: "applet"): HTMLAppletElement; + createElement(tagName: "area"): HTMLAreaElement; + createElement(tagName: "article"): HTMLElement; + createElement(tagName: "aside"): HTMLElement; + createElement(tagName: "audio"): HTMLAudioElement; + createElement(tagName: "b"): HTMLPhraseElement; + createElement(tagName: "base"): HTMLBaseElement; + createElement(tagName: "basefont"): HTMLBaseFontElement; + createElement(tagName: "bdo"): HTMLPhraseElement; + createElement(tagName: "bgsound"): HTMLBGSoundElement; + createElement(tagName: "big"): HTMLPhraseElement; + createElement(tagName: "blockquote"): HTMLBlockElement; + createElement(tagName: "body"): HTMLBodyElement; + createElement(tagName: "br"): HTMLBRElement; + createElement(tagName: "button"): HTMLButtonElement; + createElement(tagName: "canvas"): HTMLCanvasElement; + createElement(tagName: "caption"): HTMLTableCaptionElement; + createElement(tagName: "center"): HTMLBlockElement; + createElement(tagName: "cite"): HTMLPhraseElement; + createElement(tagName: "code"): HTMLPhraseElement; + createElement(tagName: "col"): HTMLTableColElement; + createElement(tagName: "colgroup"): HTMLTableColElement; + createElement(tagName: "datalist"): HTMLDataListElement; + createElement(tagName: "dd"): HTMLDDElement; + createElement(tagName: "del"): HTMLModElement; + createElement(tagName: "dfn"): HTMLPhraseElement; + createElement(tagName: "dir"): HTMLDirectoryElement; + createElement(tagName: "div"): HTMLDivElement; + createElement(tagName: "dl"): HTMLDListElement; + createElement(tagName: "dt"): HTMLDTElement; + createElement(tagName: "em"): HTMLPhraseElement; + createElement(tagName: "embed"): HTMLEmbedElement; + createElement(tagName: "fieldset"): HTMLFieldSetElement; + createElement(tagName: "figcaption"): HTMLElement; + createElement(tagName: "figure"): HTMLElement; + createElement(tagName: "font"): HTMLFontElement; + createElement(tagName: "footer"): HTMLElement; + createElement(tagName: "form"): HTMLFormElement; + createElement(tagName: "frame"): HTMLFrameElement; + createElement(tagName: "frameset"): HTMLFrameSetElement; + createElement(tagName: "h1"): HTMLHeadingElement; + createElement(tagName: "h2"): HTMLHeadingElement; + createElement(tagName: "h3"): HTMLHeadingElement; + createElement(tagName: "h4"): HTMLHeadingElement; + createElement(tagName: "h5"): HTMLHeadingElement; + createElement(tagName: "h6"): HTMLHeadingElement; + createElement(tagName: "head"): HTMLHeadElement; + createElement(tagName: "header"): HTMLElement; + createElement(tagName: "hgroup"): HTMLElement; + createElement(tagName: "hr"): HTMLHRElement; + createElement(tagName: "html"): HTMLHtmlElement; + createElement(tagName: "i"): HTMLPhraseElement; + createElement(tagName: "iframe"): HTMLIFrameElement; + createElement(tagName: "img"): HTMLImageElement; + createElement(tagName: "input"): HTMLInputElement; + createElement(tagName: "ins"): HTMLModElement; + createElement(tagName: "isindex"): HTMLIsIndexElement; + createElement(tagName: "kbd"): HTMLPhraseElement; + createElement(tagName: "keygen"): HTMLBlockElement; + createElement(tagName: "label"): HTMLLabelElement; + createElement(tagName: "legend"): HTMLLegendElement; + createElement(tagName: "li"): HTMLLIElement; + createElement(tagName: "link"): HTMLLinkElement; + createElement(tagName: "listing"): HTMLBlockElement; + createElement(tagName: "map"): HTMLMapElement; + createElement(tagName: "mark"): HTMLElement; + createElement(tagName: "marquee"): HTMLMarqueeElement; + createElement(tagName: "menu"): HTMLMenuElement; + createElement(tagName: "meta"): HTMLMetaElement; + createElement(tagName: "nav"): HTMLElement; + createElement(tagName: "nextid"): HTMLNextIdElement; + createElement(tagName: "nobr"): HTMLPhraseElement; + createElement(tagName: "noframes"): HTMLElement; + createElement(tagName: "noscript"): HTMLElement; + createElement(tagName: "object"): HTMLObjectElement; + createElement(tagName: "ol"): HTMLOListElement; + createElement(tagName: "optgroup"): HTMLOptGroupElement; + createElement(tagName: "option"): HTMLOptionElement; + createElement(tagName: "p"): HTMLParagraphElement; + createElement(tagName: "param"): HTMLParamElement; + createElement(tagName: "plaintext"): HTMLBlockElement; + createElement(tagName: "pre"): HTMLPreElement; + createElement(tagName: "progress"): HTMLProgressElement; + createElement(tagName: "q"): HTMLQuoteElement; + createElement(tagName: "rt"): HTMLPhraseElement; + createElement(tagName: "ruby"): HTMLPhraseElement; + createElement(tagName: "s"): HTMLPhraseElement; + createElement(tagName: "samp"): HTMLPhraseElement; + createElement(tagName: "script"): HTMLScriptElement; + createElement(tagName: "section"): HTMLElement; + createElement(tagName: "select"): HTMLSelectElement; + createElement(tagName: "small"): HTMLPhraseElement; + createElement(tagName: "SOURCE"): HTMLSourceElement; + createElement(tagName: "span"): HTMLSpanElement; + createElement(tagName: "strike"): HTMLPhraseElement; + createElement(tagName: "strong"): HTMLPhraseElement; + createElement(tagName: "style"): HTMLStyleElement; + createElement(tagName: "sub"): HTMLPhraseElement; + createElement(tagName: "sup"): HTMLPhraseElement; + createElement(tagName: "table"): HTMLTableElement; + createElement(tagName: "tbody"): HTMLTableSectionElement; + createElement(tagName: "td"): HTMLTableDataCellElement; + createElement(tagName: "textarea"): HTMLTextAreaElement; + createElement(tagName: "tfoot"): HTMLTableSectionElement; + createElement(tagName: "th"): HTMLTableHeaderCellElement; + createElement(tagName: "thead"): HTMLTableSectionElement; + createElement(tagName: "title"): HTMLTitleElement; + createElement(tagName: "tr"): HTMLTableRowElement; + createElement(tagName: "track"): HTMLTrackElement; + createElement(tagName: "tt"): HTMLPhraseElement; + createElement(tagName: "u"): HTMLPhraseElement; + createElement(tagName: "ul"): HTMLUListElement; + createElement(tagName: "var"): HTMLPhraseElement; + createElement(tagName: "video"): HTMLVideoElement; + createElement(tagName: "wbr"): HTMLElement; + createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement; + createElement(tagName: "xmp"): HTMLBlockElement; + createElement(tagName: string): HTMLElement; + /** + * Removes mouse capture from the object in the current document. + */ + releaseCapture(): void; + /** + * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window. + * @param content The text and HTML tags to write. + */ + writeln(...content: string[]): void; + createElementNS(namespaceURI: string, qualifiedName: string): Element; + /** + * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method. + * @param url Specifies a MIME type for the document. + * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element. + * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported. + * @param replace Specifies whether the existing entry for the document is replaced in the history list. + */ + open(url?: string, name?: string, features?: string, replace?: boolean): any; + /** + * Returns a Boolean value that indicates whether the current command is supported on the current range. + * @param commandId Specifies a command identifier. + */ + queryCommandSupported(commandId: string): boolean; + /** + * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document. + * @param root The root element or node to start traversing on. + * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow. + * @param filter A custom NodeFilter function to use. + * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded. + */ + createTreeWalker(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): TreeWalker; + createAttributeNS(namespaceURI: string, qualifiedName: string): Attr; + /** + * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document. + * @param commandId Specifies a command identifier. + */ + queryCommandEnabled(commandId: string): boolean; + /** + * Causes the element to receive the focus and executes the code specified by the onfocus event. + */ + focus(): void; + /** + * Closes an output stream and forces the sent data to display. + */ + close(): void; + getElementsByClassName(classNames: string): NodeList; + importNode(importedNode: Node, deep: boolean): Node; + /** + * Returns an empty range object that has both of its boundary points positioned at the beginning of the document. + */ + createRange(): Range; + /** + * Fires a specified event on the object. + * @param eventName Specifies the name of the event to fire. + * @param eventObj Object that specifies the event object from which to obtain event object properties. + */ + fireEvent(eventName: string, eventObj?: any): boolean; + /** + * Creates a comment object with the specified data. + * @param data Sets the comment object's data. + */ + createComment(data: string): Comment; + /** + * Retrieves a collection of objects based on the specified element name. + * @param name Specifies the name of an element. + */ + getElementsByTagName(name: "a"): NodeListOf; + getElementsByTagName(name: "abbr"): NodeListOf; + getElementsByTagName(name: "acronym"): NodeListOf; + getElementsByTagName(name: "address"): NodeListOf; + getElementsByTagName(name: "applet"): NodeListOf; + getElementsByTagName(name: "area"): NodeListOf; + getElementsByTagName(name: "article"): NodeListOf; + getElementsByTagName(name: "aside"): NodeListOf; + getElementsByTagName(name: "audio"): NodeListOf; + getElementsByTagName(name: "b"): NodeListOf; + getElementsByTagName(name: "base"): NodeListOf; + getElementsByTagName(name: "basefont"): NodeListOf; + getElementsByTagName(name: "bdo"): NodeListOf; + getElementsByTagName(name: "bgsound"): NodeListOf; + getElementsByTagName(name: "big"): NodeListOf; + getElementsByTagName(name: "blockquote"): NodeListOf; + getElementsByTagName(name: "body"): NodeListOf; + getElementsByTagName(name: "br"): NodeListOf; + getElementsByTagName(name: "button"): NodeListOf; + getElementsByTagName(name: "canvas"): NodeListOf; + getElementsByTagName(name: "caption"): NodeListOf; + getElementsByTagName(name: "center"): NodeListOf; + getElementsByTagName(name: "cite"): NodeListOf; + getElementsByTagName(name: "code"): NodeListOf; + getElementsByTagName(name: "col"): NodeListOf; + getElementsByTagName(name: "colgroup"): NodeListOf; + getElementsByTagName(name: "datalist"): NodeListOf; + getElementsByTagName(name: "dd"): NodeListOf; + getElementsByTagName(name: "del"): NodeListOf; + getElementsByTagName(name: "dfn"): NodeListOf; + getElementsByTagName(name: "dir"): NodeListOf; + getElementsByTagName(name: "div"): NodeListOf; + getElementsByTagName(name: "dl"): NodeListOf; + getElementsByTagName(name: "dt"): NodeListOf; + getElementsByTagName(name: "em"): NodeListOf; + getElementsByTagName(name: "embed"): NodeListOf; + getElementsByTagName(name: "fieldset"): NodeListOf; + getElementsByTagName(name: "figcaption"): NodeListOf; + getElementsByTagName(name: "figure"): NodeListOf; + getElementsByTagName(name: "font"): NodeListOf; + getElementsByTagName(name: "footer"): NodeListOf; + getElementsByTagName(name: "form"): NodeListOf; + getElementsByTagName(name: "frame"): NodeListOf; + getElementsByTagName(name: "frameset"): NodeListOf; + getElementsByTagName(name: "h1"): NodeListOf; + getElementsByTagName(name: "h2"): NodeListOf; + getElementsByTagName(name: "h3"): NodeListOf; + getElementsByTagName(name: "h4"): NodeListOf; + getElementsByTagName(name: "h5"): NodeListOf; + getElementsByTagName(name: "h6"): NodeListOf; + getElementsByTagName(name: "head"): NodeListOf; + getElementsByTagName(name: "header"): NodeListOf; + getElementsByTagName(name: "hgroup"): NodeListOf; + getElementsByTagName(name: "hr"): NodeListOf; + getElementsByTagName(name: "html"): NodeListOf; + getElementsByTagName(name: "i"): NodeListOf; + getElementsByTagName(name: "iframe"): NodeListOf; + getElementsByTagName(name: "img"): NodeListOf; + getElementsByTagName(name: "input"): NodeListOf; + getElementsByTagName(name: "ins"): NodeListOf; + getElementsByTagName(name: "isindex"): NodeListOf; + getElementsByTagName(name: "kbd"): NodeListOf; + getElementsByTagName(name: "keygen"): NodeListOf; + getElementsByTagName(name: "label"): NodeListOf; + getElementsByTagName(name: "legend"): NodeListOf; + getElementsByTagName(name: "li"): NodeListOf; + getElementsByTagName(name: "link"): NodeListOf; + getElementsByTagName(name: "listing"): NodeListOf; + getElementsByTagName(name: "map"): NodeListOf; + getElementsByTagName(name: "mark"): NodeListOf; + getElementsByTagName(name: "marquee"): NodeListOf; + getElementsByTagName(name: "menu"): NodeListOf; + getElementsByTagName(name: "meta"): NodeListOf; + getElementsByTagName(name: "nav"): NodeListOf; + getElementsByTagName(name: "nextid"): NodeListOf; + getElementsByTagName(name: "nobr"): NodeListOf; + getElementsByTagName(name: "noframes"): NodeListOf; + getElementsByTagName(name: "noscript"): NodeListOf; + getElementsByTagName(name: "object"): NodeListOf; + getElementsByTagName(name: "ol"): NodeListOf; + getElementsByTagName(name: "optgroup"): NodeListOf; + getElementsByTagName(name: "option"): NodeListOf; + getElementsByTagName(name: "p"): NodeListOf; + getElementsByTagName(name: "param"): NodeListOf; + getElementsByTagName(name: "plaintext"): NodeListOf; + getElementsByTagName(name: "pre"): NodeListOf; + getElementsByTagName(name: "progress"): NodeListOf; + getElementsByTagName(name: "q"): NodeListOf; + getElementsByTagName(name: "rt"): NodeListOf; + getElementsByTagName(name: "ruby"): NodeListOf; + getElementsByTagName(name: "s"): NodeListOf; + getElementsByTagName(name: "samp"): NodeListOf; + getElementsByTagName(name: "script"): NodeListOf; + getElementsByTagName(name: "section"): NodeListOf; + getElementsByTagName(name: "select"): NodeListOf; + getElementsByTagName(name: "small"): NodeListOf; + getElementsByTagName(name: "SOURCE"): NodeListOf; + getElementsByTagName(name: "span"): NodeListOf; + getElementsByTagName(name: "strike"): NodeListOf; + getElementsByTagName(name: "strong"): NodeListOf; + getElementsByTagName(name: "style"): NodeListOf; + getElementsByTagName(name: "sub"): NodeListOf; + getElementsByTagName(name: "sup"): NodeListOf; + getElementsByTagName(name: "table"): NodeListOf; + getElementsByTagName(name: "tbody"): NodeListOf; + getElementsByTagName(name: "td"): NodeListOf; + getElementsByTagName(name: "textarea"): NodeListOf; + getElementsByTagName(name: "tfoot"): NodeListOf; + getElementsByTagName(name: "th"): NodeListOf; + getElementsByTagName(name: "thead"): NodeListOf; + getElementsByTagName(name: "title"): NodeListOf; + getElementsByTagName(name: "tr"): NodeListOf; + getElementsByTagName(name: "track"): NodeListOf; + getElementsByTagName(name: "tt"): NodeListOf; + getElementsByTagName(name: "u"): NodeListOf; + getElementsByTagName(name: "ul"): NodeListOf; + getElementsByTagName(name: "var"): NodeListOf; + getElementsByTagName(name: "video"): NodeListOf; + getElementsByTagName(name: "wbr"): NodeListOf; + getElementsByTagName(name: "x-ms-webview"): NodeListOf; + getElementsByTagName(name: "xmp"): NodeListOf; + getElementsByTagName(name: string): NodeList; + /** + * Creates a new document. + */ + createDocumentFragment(): DocumentFragment; + /** + * Creates a style sheet for the document. + * @param href Specifies how to add the style sheet to the document. If a file name is specified for the URL, the style information is added as a link object. If the URL contains style information, it is added to the style object. + * @param index Specifies the index that indicates where the new style sheet is inserted in the styleSheets collection. The default is to insert the new style sheet at the end of the collection. + */ + createStyleSheet(href?: string, index?: number): CSSStyleSheet; + /** + * Gets a collection of objects based on the value of the NAME or ID attribute. + * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute. + */ + getElementsByName(elementName: string): NodeList; + /** + * Returns a Boolean value that indicates the current state of the command. + * @param commandId String that specifies a command identifier. + */ + queryCommandState(commandId: string): boolean; + /** + * Gets a value indicating whether the object currently has focus. + */ + hasFocus(): boolean; + /** + * Displays help information for the given command identifier. + * @param commandId Displays help information for the given command identifier. + */ + execCommandShowHelp(commandId: string): boolean; + /** + * Creates an attribute object with a specified name. + * @param name String that sets the attribute object's name. + */ + createAttribute(name: string): Attr; + /** + * Creates a text string from the specified value. + * @param data String that specifies the nodeValue property of the text node. + */ + createTextNode(data: string): Text; + /** + * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. + * @param root The root element or node to start traversing on. + * @param whatToShow The type of nodes or elements to appear in the node list + * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter. + * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded. + */ + createNodeIterator(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): NodeIterator; + /** + * Generates an event object to pass event context information when you use the fireEvent method. + * @param eventObj An object that specifies an existing event object on which to base the new object. + */ + createEventObject(eventObj?: any): MSEventObj; + /** + * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. + */ + getSelection(): Selection; + msElementsFromPoint(x: number, y: number): NodeList; + msElementsFromRect(left: number, top: number, width: number, height: number): NodeList; + clear(): void; + msExitFullscreen(): void; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storagecommit", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msfullscreenerror", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msfullscreenchange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var Document: { + prototype: Document; + new(): Document; +} + +interface Console { + info(message?: any, ...optionalParams: any[]): void; + warn(message?: any, ...optionalParams: any[]): void; + error(message?: any, ...optionalParams: any[]): void; + log(message?: any, ...optionalParams: any[]): void; + profile(reportName?: string): void; + assert(test?: boolean, message?: string, ...optionalParams: any[]): void; + msIsIndependentlyComposed(element: Element): boolean; + clear(): void; + dir(value?: any, ...optionalParams: any[]): void; + profileEnd(): void; + count(countTitle?: string): void; + groupEnd(): void; + time(timerName?: string): void; + timeEnd(timerName?: string): void; + trace(): void; + group(groupTitle?: string): void; + dirxml(value: any): void; + debug(message?: string, ...optionalParams: any[]): void; + groupCollapsed(groupTitle?: string): void; + select(element: Element): void; +} +declare var Console: { + prototype: Console; + new(): Console; +} + +interface MSEventObj extends Event { + nextPage: string; + keyCode: number; + toElement: Element; + returnValue: any; + dataFld: string; + y: number; + dataTransfer: DataTransfer; + propertyName: string; + url: string; + offsetX: number; + recordset: any; + screenX: number; + buttonID: number; + wheelDelta: number; + reason: number; + origin: string; + data: string; + srcFilter: any; + boundElements: HTMLCollection; + cancelBubble: boolean; + altLeft: boolean; + behaviorCookie: number; + bookmarks: BookmarkCollection; + type: string; + repeat: boolean; + srcElement: Element; + source: Window; + fromElement: Element; + offsetY: number; + x: number; + behaviorPart: number; + qualifier: string; + altKey: boolean; + ctrlKey: boolean; + clientY: number; + shiftKey: boolean; + shiftLeft: boolean; + contentOverflow: boolean; + screenY: number; + ctrlLeft: boolean; + button: number; + srcUrn: string; + clientX: number; + actionURL: string; + getAttribute(strAttributeName: string, lFlags?: number): any; + setAttribute(strAttributeName: string, AttributeValue: any, lFlags?: number): void; + removeAttribute(strAttributeName: string, lFlags?: number): boolean; +} +declare var MSEventObj: { + prototype: MSEventObj; + new(): MSEventObj; +} + +interface HTMLCanvasElement extends HTMLElement { + /** + * Gets or sets the width of a canvas element on a document. + */ + width: number; + /** + * Gets or sets the height of a canvas element on a document. + */ + height: number; + /** + * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. + * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); + */ + getContext(contextId: "2d"): CanvasRenderingContext2D; + /** + * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. + * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); + */ + getContext(contextId: "experimental-webgl"): WebGLRenderingContext; + /** + * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. + * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); + */ + getContext(contextId: string, ...args: any[]): any; + /** + * Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element. + * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. + */ + toDataURL(type?: string, ...args: any[]): string; + /** + * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. + */ + msToBlob(): Blob; +} +declare var HTMLCanvasElement: { + prototype: HTMLCanvasElement; + new(): HTMLCanvasElement; +} + +interface Window extends EventTarget, MSEventAttachmentTarget, WindowLocalStorage, MSWindowExtensions, WindowSessionStorage, WindowTimers, WindowBase64, IDBEnvironment, WindowConsole, GlobalEventHandlers { + ondragend: (ev: DragEvent) => any; + onkeydown: (ev: KeyboardEvent) => any; + ondragover: (ev: DragEvent) => any; + onkeyup: (ev: KeyboardEvent) => any; + onreset: (ev: Event) => any; + onmouseup: (ev: MouseEvent) => any; + ondragstart: (ev: DragEvent) => any; + ondrag: (ev: DragEvent) => any; + screenX: number; + onmouseover: (ev: MouseEvent) => any; + ondragleave: (ev: DragEvent) => any; + history: History; + pageXOffset: number; + name: string; + onafterprint: (ev: Event) => any; + onpause: (ev: Event) => any; + onbeforeprint: (ev: Event) => any; + top: Window; + onmousedown: (ev: MouseEvent) => any; + onseeked: (ev: Event) => any; + opener: Window; + onclick: (ev: MouseEvent) => any; + innerHeight: number; + onwaiting: (ev: Event) => any; + ononline: (ev: Event) => any; + ondurationchange: (ev: Event) => any; + frames: Window; + onblur: (ev: FocusEvent) => any; + onemptied: (ev: Event) => any; + onseeking: (ev: Event) => any; + oncanplay: (ev: Event) => any; + outerWidth: number; + onstalled: (ev: Event) => any; + onmousemove: (ev: MouseEvent) => any; + innerWidth: number; + onoffline: (ev: Event) => any; + length: number; + screen: Screen; + onbeforeunload: (ev: BeforeUnloadEvent) => any; + onratechange: (ev: Event) => any; + onstorage: (ev: StorageEvent) => any; + onloadstart: (ev: Event) => any; + ondragenter: (ev: DragEvent) => any; + onsubmit: (ev: Event) => any; + self: Window; + document: Document; + onprogress: (ev: ProgressEvent) => any; + ondblclick: (ev: MouseEvent) => any; + pageYOffset: number; + oncontextmenu: (ev: MouseEvent) => any; + onchange: (ev: Event) => any; + onloadedmetadata: (ev: Event) => any; + onplay: (ev: Event) => any; + onerror: ErrorEventHandler; + onplaying: (ev: Event) => any; + parent: Window; + location: Location; + oncanplaythrough: (ev: Event) => any; + onabort: (ev: UIEvent) => any; + onreadystatechange: (ev: Event) => any; + outerHeight: number; + onkeypress: (ev: KeyboardEvent) => any; + frameElement: Element; + onloadeddata: (ev: Event) => any; + onsuspend: (ev: Event) => any; + window: Window; + onfocus: (ev: FocusEvent) => any; + onmessage: (ev: MessageEvent) => any; + ontimeupdate: (ev: Event) => any; + onresize: (ev: UIEvent) => any; + onselect: (ev: UIEvent) => any; + navigator: Navigator; + styleMedia: StyleMedia; + ondrop: (ev: DragEvent) => any; + onmouseout: (ev: MouseEvent) => any; + onended: (ev: Event) => any; + onhashchange: (ev: Event) => any; + onunload: (ev: Event) => any; + onscroll: (ev: UIEvent) => any; + screenY: number; + onmousewheel: (ev: MouseWheelEvent) => any; + onload: (ev: Event) => any; + onvolumechange: (ev: Event) => any; + oninput: (ev: Event) => any; + performance: Performance; + onmspointerdown: (ev: any) => any; + animationStartTime: number; + onmsgesturedoubletap: (ev: any) => any; + onmspointerhover: (ev: any) => any; + onmsgesturehold: (ev: any) => any; + onmspointermove: (ev: any) => any; + onmsgesturechange: (ev: any) => any; + onmsgesturestart: (ev: any) => any; + onmspointercancel: (ev: any) => any; + onmsgestureend: (ev: any) => any; + onmsgesturetap: (ev: any) => any; + onmspointerout: (ev: any) => any; + msAnimationStartTime: number; + applicationCache: ApplicationCache; + onmsinertiastart: (ev: any) => any; + onmspointerover: (ev: any) => any; + onpopstate: (ev: PopStateEvent) => any; + onmspointerup: (ev: any) => any; + onpageshow: (ev: PageTransitionEvent) => any; + ondevicemotion: (ev: DeviceMotionEvent) => any; + devicePixelRatio: number; + msCrypto: Crypto; + ondeviceorientation: (ev: DeviceOrientationEvent) => any; + doNotTrack: string; + onmspointerenter: (ev: any) => any; + onpagehide: (ev: PageTransitionEvent) => any; + onmspointerleave: (ev: any) => any; + alert(message?: any): void; + scroll(x?: number, y?: number): void; + focus(): void; + scrollTo(x?: number, y?: number): void; + print(): void; + prompt(message?: string, _default?: string): string; + toString(): string; + open(url?: string, target?: string, features?: string, replace?: boolean): Window; + scrollBy(x?: number, y?: number): void; + confirm(message?: string): boolean; + close(): void; + postMessage(message: any, targetOrigin: string, ports?: any): void; + showModalDialog(url?: string, argument?: any, options?: any): any; + blur(): void; + getSelection(): Selection; + getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; + msCancelRequestAnimationFrame(handle: number): void; + matchMedia(mediaQuery: string): MediaQueryList; + cancelAnimationFrame(handle: number): void; + msIsStaticHTML(html: string): boolean; + msMatchMedia(mediaQuery: string): MediaQueryList; + requestAnimationFrame(callback: FrameRequestCallback): number; + msRequestAnimationFrame(callback: FrameRequestCallback): number; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var Window: { + prototype: Window; + new(): Window; +} + +interface FormData { + append(name: any, value: any, blobName?: string): void; +} +declare var FormData: { + prototype: FormData; + new (form?: HTMLFormElement): FormData; +} + +interface SourceBuffer extends EventTarget { + updating: boolean; + appendWindowStart: number; + appendWindowEnd: number; + buffered: TimeRanges; + timestampOffset: number; + audioTracks: AudioTrackList; + appendBuffer(data: ArrayBufferView): void; + appendBuffer(data: ArrayBuffer): void; + remove(start: number, end: number): void; + abort(): void; + appendStream(stream: MSStream, maxSize?: number): void; +} +declare var SourceBuffer: { + prototype: SourceBuffer; + new(): SourceBuffer; +} + +interface NavigatorID { + appVersion: string; + appName: string; + userAgent: string; + platform: string; + product: string; + vendor: string; +} + +interface HTMLTableElement extends HTMLElement, MSDataBindingTableExtensions, MSDataBindingExtensions, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { + /** + * Sets or retrieves the width of the object. + */ + width: string; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorLight: any; + /** + * Sets or retrieves the amount of space between cells in a table. + */ + cellSpacing: string; + /** + * Retrieves the tFoot object of the table. + */ + tFoot: HTMLTableSectionElement; + /** + * Sets or retrieves the way the border frame around the table is displayed. + */ + frame: string; + /** + * Sets or retrieves the border color of the object. + */ + borderColor: any; + /** + * Sets or retrieves the number of horizontal rows contained in the object. + */ + rows: HTMLCollection; + /** + * Sets or retrieves which dividing lines (inner borders) are displayed. + */ + rules: string; + /** + * Sets or retrieves the number of columns in the table. + */ + cols: number; + /** + * Sets or retrieves a description and/or structure of the object. + */ + summary: string; + /** + * Retrieves the caption object of a table. + */ + caption: HTMLTableCaptionElement; + /** + * Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order. + */ + tBodies: HTMLCollection; + /** + * Retrieves the tHead object of the table. + */ + tHead: HTMLTableSectionElement; + /** + * Sets or retrieves a value that indicates the table alignment. + */ + align: string; + /** + * Retrieves a collection of all cells in the table row or in the entire table. + */ + cells: HTMLCollection; + /** + * Sets or retrieves the height of the object. + */ + height: any; + /** + * Sets or retrieves the amount of space between the border of the cell and the content of the cell. + */ + cellPadding: string; + /** + * Sets or retrieves the width of the border to draw around the object. + */ + border: string; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorDark: any; + /** + * Removes the specified row (tr) from the element and from the rows collection. + * @param index Number that specifies the zero-based position in the rows collection of the row to remove. + */ + deleteRow(index?: number): void; + /** + * Creates an empty tBody element in the table. + */ + createTBody(): HTMLElement; + /** + * Deletes the caption element and its contents from the table. + */ + deleteCaption(): void; + /** + * Creates a new row (tr) in the table, and adds the row to the rows collection. + * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection. + */ + insertRow(index?: number): HTMLElement; + /** + * Deletes the tFoot element and its contents from the table. + */ + deleteTFoot(): void; + /** + * Returns the tHead element object if successful, or null otherwise. + */ + createTHead(): HTMLElement; + /** + * Deletes the tHead element and its contents from the table. + */ + deleteTHead(): void; + /** + * Creates an empty caption element in the table. + */ + createCaption(): HTMLElement; + /** + * Moves a table row to a new position. + * @param indexFrom Number that specifies the index in the rows collection of the table row that is moved. + * @param indexTo Number that specifies where the row is moved within the rows collection. + */ + moveRow(indexFrom?: number, indexTo?: number): any; + /** + * Creates an empty tFoot element in the table. + */ + createTFoot(): HTMLElement; +} +declare var HTMLTableElement: { + prototype: HTMLTableElement; + new(): HTMLTableElement; +} + +interface TreeWalker { + whatToShow: number; + filter: NodeFilter; + root: Node; + currentNode: Node; + expandEntityReferences: boolean; + previousSibling(): Node; + lastChild(): Node; + nextSibling(): Node; + nextNode(): Node; + parentNode(): Node; + firstChild(): Node; + previousNode(): Node; +} +declare var TreeWalker: { + prototype: TreeWalker; + new(): TreeWalker; +} + +interface GetSVGDocument { + getSVGDocument(): Document; +} + +interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg { + y: number; + y1: number; + x: number; + x1: number; +} +declare var SVGPathSegCurvetoQuadraticRel: { + prototype: SVGPathSegCurvetoQuadraticRel; + new(): SVGPathSegCurvetoQuadraticRel; +} + +interface Performance { + navigation: PerformanceNavigation; + timing: PerformanceTiming; + getEntriesByType(entryType: string): any; + toJSON(): any; + getMeasures(measureName?: string): any; + clearMarks(markName?: string): void; + getMarks(markName?: string): any; + clearResourceTimings(): void; + mark(markName: string): void; + measure(measureName: string, startMarkName?: string, endMarkName?: string): void; + getEntriesByName(name: string, entryType?: string): any; + getEntries(): any; + clearMeasures(measureName?: string): void; + setResourceTimingBufferSize(maxSize: number): void; + now(): number; +} +declare var Performance: { + prototype: Performance; + new(): Performance; +} + +interface MSDataBindingTableExtensions { + dataPageSize: number; + nextPage(): void; + firstPage(): void; + refresh(): void; + previousPage(): void; + lastPage(): void; +} + +interface CompositionEvent extends UIEvent { + data: string; + locale: string; + initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void; +} +declare var CompositionEvent: { + prototype: CompositionEvent; + new(): CompositionEvent; +} + +interface WindowTimers extends WindowTimersExtension { + clearTimeout(handle: number): void; + setTimeout(handler: any, timeout?: any, ...args: any[]): number; + clearInterval(handle: number): void; + setInterval(handler: any, timeout?: any, ...args: any[]): number; +} + +interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired { + orientType: SVGAnimatedEnumeration; + markerUnits: SVGAnimatedEnumeration; + markerWidth: SVGAnimatedLength; + markerHeight: SVGAnimatedLength; + orientAngle: SVGAnimatedAngle; + refY: SVGAnimatedLength; + refX: SVGAnimatedLength; + setOrientToAngle(angle: SVGAngle): void; + setOrientToAuto(): void; + SVG_MARKER_ORIENT_UNKNOWN: number; + SVG_MARKER_ORIENT_ANGLE: number; + SVG_MARKERUNITS_UNKNOWN: number; + SVG_MARKERUNITS_STROKEWIDTH: number; + SVG_MARKER_ORIENT_AUTO: number; + SVG_MARKERUNITS_USERSPACEONUSE: number; +} +declare var SVGMarkerElement: { + prototype: SVGMarkerElement; + new(): SVGMarkerElement; + SVG_MARKER_ORIENT_UNKNOWN: number; + SVG_MARKER_ORIENT_ANGLE: number; + SVG_MARKERUNITS_UNKNOWN: number; + SVG_MARKERUNITS_STROKEWIDTH: number; + SVG_MARKER_ORIENT_AUTO: number; + SVG_MARKERUNITS_USERSPACEONUSE: number; +} + +interface CSSStyleDeclaration { + backgroundAttachment: string; + visibility: string; + textAlignLast: string; + borderRightStyle: string; + counterIncrement: string; + orphans: string; + cssText: string; + borderStyle: string; + pointerEvents: string; + borderTopColor: string; + markerEnd: string; + textIndent: string; + listStyleImage: string; + cursor: string; + listStylePosition: string; + wordWrap: string; + borderTopStyle: string; + alignmentBaseline: string; + opacity: string; + direction: string; + strokeMiterlimit: string; + maxWidth: string; + color: string; + clip: string; + borderRightWidth: string; + verticalAlign: string; + overflow: string; + mask: string; + borderLeftStyle: string; + emptyCells: string; + stopOpacity: string; + paddingRight: string; + parentRule: CSSRule; + background: string; + boxSizing: string; + textJustify: string; + height: string; + paddingTop: string; + length: number; + right: string; + baselineShift: string; + borderLeft: string; + widows: string; + lineHeight: string; + left: string; + textUnderlinePosition: string; + glyphOrientationHorizontal: string; + display: string; + textAnchor: string; + cssFloat: string; + strokeDasharray: string; + rubyAlign: string; + fontSizeAdjust: string; + borderLeftColor: string; + backgroundImage: string; + listStyleType: string; + strokeWidth: string; + textOverflow: string; + fillRule: string; + borderBottomColor: string; + zIndex: string; + position: string; + listStyle: string; + msTransformOrigin: string; + dominantBaseline: string; + overflowY: string; + fill: string; + captionSide: string; + borderCollapse: string; + boxShadow: string; + quotes: string; + tableLayout: string; + unicodeBidi: string; + borderBottomWidth: string; + backgroundSize: string; + textDecoration: string; + strokeDashoffset: string; + fontSize: string; + border: string; + pageBreakBefore: string; + borderTopRightRadius: string; + msTransform: string; + borderBottomLeftRadius: string; + textTransform: string; + rubyPosition: string; + strokeLinejoin: string; + clipPath: string; + borderRightColor: string; + fontFamily: string; + clear: string; + content: string; + backgroundClip: string; + marginBottom: string; + counterReset: string; + outlineWidth: string; + marginRight: string; + paddingLeft: string; + borderBottom: string; + wordBreak: string; + marginTop: string; + top: string; + fontWeight: string; + borderRight: string; + width: string; + kerning: string; + pageBreakAfter: string; + borderBottomStyle: string; + fontStretch: string; + padding: string; + strokeOpacity: string; + markerStart: string; + bottom: string; + borderLeftWidth: string; + clipRule: string; + backgroundPosition: string; + backgroundColor: string; + pageBreakInside: string; + backgroundOrigin: string; + strokeLinecap: string; + borderTopWidth: string; + outlineStyle: string; + borderTop: string; + outlineColor: string; + paddingBottom: string; + marginLeft: string; + font: string; + outline: string; + wordSpacing: string; + maxHeight: string; + fillOpacity: string; + letterSpacing: string; + borderSpacing: string; + backgroundRepeat: string; + borderRadius: string; + borderWidth: string; + borderBottomRightRadius: string; + whiteSpace: string; + fontStyle: string; + minWidth: string; + stopColor: string; + borderTopLeftRadius: string; + borderColor: string; + marker: string; + glyphOrientationVertical: string; + markerMid: string; + fontVariant: string; + minHeight: string; + stroke: string; + rubyOverhang: string; + overflowX: string; + textAlign: string; + margin: string; + animationFillMode: string; + floodColor: string; + animationIterationCount: string; + textShadow: string; + backfaceVisibility: string; + msAnimationIterationCount: string; + animationDelay: string; + animationTimingFunction: string; + columnWidth: any; + msScrollSnapX: string; + columnRuleColor: any; + columnRuleWidth: any; + transitionDelay: string; + transition: string; + msFlowFrom: string; + msScrollSnapType: string; + msContentZoomSnapType: string; + msGridColumns: string; + msAnimationName: string; + msGridRowAlign: string; + msContentZoomChaining: string; + msGridColumn: any; + msHyphenateLimitZone: any; + msScrollRails: string; + msAnimationDelay: string; + enableBackground: string; + msWrapThrough: string; + columnRuleStyle: string; + msAnimation: string; + msFlexFlow: string; + msScrollSnapY: string; + msHyphenateLimitLines: any; + msTouchAction: string; + msScrollLimit: string; + animation: string; + transform: string; + filter: string; + colorInterpolationFilters: string; + transitionTimingFunction: string; + msBackfaceVisibility: string; + animationPlayState: string; + transformOrigin: string; + msScrollLimitYMin: any; + msFontFeatureSettings: string; + msContentZoomLimitMin: any; + columnGap: any; + transitionProperty: string; + msAnimationDuration: string; + msAnimationFillMode: string; + msFlexDirection: string; + msTransitionDuration: string; + fontFeatureSettings: string; + breakBefore: string; + msFlexWrap: string; + perspective: string; + msFlowInto: string; + msTransformStyle: string; + msScrollTranslation: string; + msTransitionProperty: string; + msUserSelect: string; + msOverflowStyle: string; + msScrollSnapPointsY: string; + animationDirection: string; + animationDuration: string; + msFlex: string; + msTransitionTimingFunction: string; + animationName: string; + columnRule: string; + msGridColumnSpan: any; + msFlexNegative: string; + columnFill: string; + msGridRow: any; + msFlexOrder: string; + msFlexItemAlign: string; + msFlexPositive: string; + msContentZoomLimitMax: any; + msScrollLimitYMax: any; + msGridColumnAlign: string; + perspectiveOrigin: string; + lightingColor: string; + columns: string; + msScrollChaining: string; + msHyphenateLimitChars: string; + msTouchSelect: string; + floodOpacity: string; + msAnimationDirection: string; + msAnimationPlayState: string; + columnSpan: string; + msContentZooming: string; + msPerspective: string; + msFlexPack: string; + msScrollSnapPointsX: string; + msContentZoomSnapPoints: string; + msGridRowSpan: any; + msContentZoomSnap: string; + msScrollLimitXMin: any; + breakInside: string; + msHighContrastAdjust: string; + msFlexLinePack: string; + msGridRows: string; + transitionDuration: string; + msHyphens: string; + breakAfter: string; + msTransition: string; + msPerspectiveOrigin: string; + msContentZoomLimit: string; + msScrollLimitXMax: any; + msFlexAlign: string; + msWrapMargin: any; + columnCount: any; + msAnimationTimingFunction: string; + msTransitionDelay: string; + transformStyle: string; + msWrapFlow: string; + msFlexPreferredSize: string; + alignItems: string; + borderImageSource: string; + flexBasis: string; + borderImageWidth: string; + borderImageRepeat: string; + order: string; + flex: string; + alignContent: string; + msImeAlign: string; + flexShrink: string; + flexGrow: string; + borderImageSlice: string; + flexWrap: string; + borderImageOutset: string; + flexDirection: string; + touchAction: string; + flexFlow: string; + borderImage: string; + justifyContent: string; + alignSelf: string; + msTextCombineHorizontal: string; + getPropertyPriority(propertyName: string): string; + getPropertyValue(propertyName: string): string; + removeProperty(propertyName: string): string; + item(index: number): string; + [index: number]: string; + setProperty(propertyName: string, value: string, priority?: string): void; +} +declare var CSSStyleDeclaration: { + prototype: CSSStyleDeclaration; + new(): CSSStyleDeclaration; +} + +interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { +} +declare var SVGGElement: { + prototype: SVGGElement; + new(): SVGGElement; +} + +interface MSStyleCSSProperties extends MSCSSProperties { + pixelWidth: number; + posHeight: number; + posLeft: number; + pixelTop: number; + pixelBottom: number; + textDecorationNone: boolean; + pixelLeft: number; + posTop: number; + posBottom: number; + textDecorationOverline: boolean; + posWidth: number; + textDecorationLineThrough: boolean; + pixelHeight: number; + textDecorationBlink: boolean; + posRight: number; + pixelRight: number; + textDecorationUnderline: boolean; +} +declare var MSStyleCSSProperties: { + prototype: MSStyleCSSProperties; + new(): MSStyleCSSProperties; +} + +interface Navigator extends NavigatorID, NavigatorOnLine, NavigatorContentUtils, MSNavigatorExtensions, NavigatorGeolocation, MSNavigatorDoNotTrack, NavigatorStorageUtils, MSFileSaver { + msMaxTouchPoints: number; + msPointerEnabled: boolean; + msManipulationViewsEnabled: boolean; + pointerEnabled: boolean; + maxTouchPoints: number; + msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void; +} +declare var Navigator: { + prototype: Navigator; + new(): Navigator; +} + +interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg { + y: number; + x2: number; + x: number; + y2: number; +} +declare var SVGPathSegCurvetoCubicSmoothAbs: { + prototype: SVGPathSegCurvetoCubicSmoothAbs; + new(): SVGPathSegCurvetoCubicSmoothAbs; +} + +interface SVGZoomEvent extends UIEvent { + zoomRectScreen: SVGRect; + previousScale: number; + newScale: number; + previousTranslate: SVGPoint; + newTranslate: SVGPoint; +} +declare var SVGZoomEvent: { + prototype: SVGZoomEvent; + new(): SVGZoomEvent; +} + +interface NodeSelector { + querySelectorAll(selectors: string): NodeList; + querySelector(selectors: string): Element; +} + +interface HTMLTableDataCellElement extends HTMLTableCellElement { +} +declare var HTMLTableDataCellElement: { + prototype: HTMLTableDataCellElement; + new(): HTMLTableDataCellElement; +} + +interface HTMLBaseElement extends HTMLElement { + /** + * Sets or retrieves the window or frame at which to target content. + */ + target: string; + /** + * Gets or sets the baseline URL on which relative links are based. + */ + href: string; +} +declare var HTMLBaseElement: { + prototype: HTMLBaseElement; + new(): HTMLBaseElement; +} + +interface ClientRect { + left: number; + width: number; + right: number; + top: number; + bottom: number; + height: number; +} +declare var ClientRect: { + prototype: ClientRect; + new(): ClientRect; +} + +interface PositionErrorCallback { + (error: PositionError): void; +} + +interface DOMImplementation { + createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; + createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document; + hasFeature(feature: string, version?: string): boolean; + createHTMLDocument(title: string): Document; +} +declare var DOMImplementation: { + prototype: DOMImplementation; + new(): DOMImplementation; +} + +interface SVGUnitTypes { + SVG_UNIT_TYPE_UNKNOWN: number; + SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number; + SVG_UNIT_TYPE_USERSPACEONUSE: number; +} +declare var SVGUnitTypes: SVGUnitTypes; + +interface Element extends Node, NodeSelector, ElementTraversal, GlobalEventHandlers { + scrollTop: number; + clientLeft: number; + scrollLeft: number; + tagName: string; + clientWidth: number; + scrollWidth: number; + clientHeight: number; + clientTop: number; + scrollHeight: number; + msRegionOverflow: string; + onmspointerdown: (ev: any) => any; + onmsgotpointercapture: (ev: any) => any; + onmsgesturedoubletap: (ev: any) => any; + onmspointerhover: (ev: any) => any; + onmsgesturehold: (ev: any) => any; + onmspointermove: (ev: any) => any; + onmsgesturechange: (ev: any) => any; + onmsgesturestart: (ev: any) => any; + onmspointercancel: (ev: any) => any; + onmsgestureend: (ev: any) => any; + onmsgesturetap: (ev: any) => any; + onmspointerout: (ev: any) => any; + onmsinertiastart: (ev: any) => any; + onmslostpointercapture: (ev: any) => any; + onmspointerover: (ev: any) => any; + msContentZoomFactor: number; + onmspointerup: (ev: any) => any; + onlostpointercapture: (ev: PointerEvent) => any; + onmspointerenter: (ev: any) => any; + ongotpointercapture: (ev: PointerEvent) => any; + onmspointerleave: (ev: any) => any; + getAttribute(name?: string): string; + getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList; + hasAttributeNS(namespaceURI: string, localName: string): boolean; + getBoundingClientRect(): ClientRect; + getAttributeNS(namespaceURI: string, localName: string): string; + getAttributeNodeNS(namespaceURI: string, localName: string): Attr; + setAttributeNodeNS(newAttr: Attr): Attr; + msMatchesSelector(selectors: string): boolean; + hasAttribute(name: string): boolean; + removeAttribute(name?: string): void; + setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void; + getAttributeNode(name: string): Attr; + fireEvent(eventName: string, eventObj?: any): boolean; + getElementsByTagName(name: "a"): NodeListOf; + getElementsByTagName(name: "abbr"): NodeListOf; + getElementsByTagName(name: "acronym"): NodeListOf; + getElementsByTagName(name: "address"): NodeListOf; + getElementsByTagName(name: "applet"): NodeListOf; + getElementsByTagName(name: "area"): NodeListOf; + getElementsByTagName(name: "article"): NodeListOf; + getElementsByTagName(name: "aside"): NodeListOf; + getElementsByTagName(name: "audio"): NodeListOf; + getElementsByTagName(name: "b"): NodeListOf; + getElementsByTagName(name: "base"): NodeListOf; + getElementsByTagName(name: "basefont"): NodeListOf; + getElementsByTagName(name: "bdo"): NodeListOf; + getElementsByTagName(name: "bgsound"): NodeListOf; + getElementsByTagName(name: "big"): NodeListOf; + getElementsByTagName(name: "blockquote"): NodeListOf; + getElementsByTagName(name: "body"): NodeListOf; + getElementsByTagName(name: "br"): NodeListOf; + getElementsByTagName(name: "button"): NodeListOf; + getElementsByTagName(name: "canvas"): NodeListOf; + getElementsByTagName(name: "caption"): NodeListOf; + getElementsByTagName(name: "center"): NodeListOf; + getElementsByTagName(name: "cite"): NodeListOf; + getElementsByTagName(name: "code"): NodeListOf; + getElementsByTagName(name: "col"): NodeListOf; + getElementsByTagName(name: "colgroup"): NodeListOf; + getElementsByTagName(name: "datalist"): NodeListOf; + getElementsByTagName(name: "dd"): NodeListOf; + getElementsByTagName(name: "del"): NodeListOf; + getElementsByTagName(name: "dfn"): NodeListOf; + getElementsByTagName(name: "dir"): NodeListOf; + getElementsByTagName(name: "div"): NodeListOf; + getElementsByTagName(name: "dl"): NodeListOf; + getElementsByTagName(name: "dt"): NodeListOf; + getElementsByTagName(name: "em"): NodeListOf; + getElementsByTagName(name: "embed"): NodeListOf; + getElementsByTagName(name: "fieldset"): NodeListOf; + getElementsByTagName(name: "figcaption"): NodeListOf; + getElementsByTagName(name: "figure"): NodeListOf; + getElementsByTagName(name: "font"): NodeListOf; + getElementsByTagName(name: "footer"): NodeListOf; + getElementsByTagName(name: "form"): NodeListOf; + getElementsByTagName(name: "frame"): NodeListOf; + getElementsByTagName(name: "frameset"): NodeListOf; + getElementsByTagName(name: "h1"): NodeListOf; + getElementsByTagName(name: "h2"): NodeListOf; + getElementsByTagName(name: "h3"): NodeListOf; + getElementsByTagName(name: "h4"): NodeListOf; + getElementsByTagName(name: "h5"): NodeListOf; + getElementsByTagName(name: "h6"): NodeListOf; + getElementsByTagName(name: "head"): NodeListOf; + getElementsByTagName(name: "header"): NodeListOf; + getElementsByTagName(name: "hgroup"): NodeListOf; + getElementsByTagName(name: "hr"): NodeListOf; + getElementsByTagName(name: "html"): NodeListOf; + getElementsByTagName(name: "i"): NodeListOf; + getElementsByTagName(name: "iframe"): NodeListOf; + getElementsByTagName(name: "img"): NodeListOf; + getElementsByTagName(name: "input"): NodeListOf; + getElementsByTagName(name: "ins"): NodeListOf; + getElementsByTagName(name: "isindex"): NodeListOf; + getElementsByTagName(name: "kbd"): NodeListOf; + getElementsByTagName(name: "keygen"): NodeListOf; + getElementsByTagName(name: "label"): NodeListOf; + getElementsByTagName(name: "legend"): NodeListOf; + getElementsByTagName(name: "li"): NodeListOf; + getElementsByTagName(name: "link"): NodeListOf; + getElementsByTagName(name: "listing"): NodeListOf; + getElementsByTagName(name: "map"): NodeListOf; + getElementsByTagName(name: "mark"): NodeListOf; + getElementsByTagName(name: "marquee"): NodeListOf; + getElementsByTagName(name: "menu"): NodeListOf; + getElementsByTagName(name: "meta"): NodeListOf; + getElementsByTagName(name: "nav"): NodeListOf; + getElementsByTagName(name: "nextid"): NodeListOf; + getElementsByTagName(name: "nobr"): NodeListOf; + getElementsByTagName(name: "noframes"): NodeListOf; + getElementsByTagName(name: "noscript"): NodeListOf; + getElementsByTagName(name: "object"): NodeListOf; + getElementsByTagName(name: "ol"): NodeListOf; + getElementsByTagName(name: "optgroup"): NodeListOf; + getElementsByTagName(name: "option"): NodeListOf; + getElementsByTagName(name: "p"): NodeListOf; + getElementsByTagName(name: "param"): NodeListOf; + getElementsByTagName(name: "plaintext"): NodeListOf; + getElementsByTagName(name: "pre"): NodeListOf; + getElementsByTagName(name: "progress"): NodeListOf; + getElementsByTagName(name: "q"): NodeListOf; + getElementsByTagName(name: "rt"): NodeListOf; + getElementsByTagName(name: "ruby"): NodeListOf; + getElementsByTagName(name: "s"): NodeListOf; + getElementsByTagName(name: "samp"): NodeListOf; + getElementsByTagName(name: "script"): NodeListOf; + getElementsByTagName(name: "section"): NodeListOf; + getElementsByTagName(name: "select"): NodeListOf; + getElementsByTagName(name: "small"): NodeListOf; + getElementsByTagName(name: "SOURCE"): NodeListOf; + getElementsByTagName(name: "span"): NodeListOf; + getElementsByTagName(name: "strike"): NodeListOf; + getElementsByTagName(name: "strong"): NodeListOf; + getElementsByTagName(name: "style"): NodeListOf; + getElementsByTagName(name: "sub"): NodeListOf; + getElementsByTagName(name: "sup"): NodeListOf; + getElementsByTagName(name: "table"): NodeListOf; + getElementsByTagName(name: "tbody"): NodeListOf; + getElementsByTagName(name: "td"): NodeListOf; + getElementsByTagName(name: "textarea"): NodeListOf; + getElementsByTagName(name: "tfoot"): NodeListOf; + getElementsByTagName(name: "th"): NodeListOf; + getElementsByTagName(name: "thead"): NodeListOf; + getElementsByTagName(name: "title"): NodeListOf; + getElementsByTagName(name: "tr"): NodeListOf; + getElementsByTagName(name: "track"): NodeListOf; + getElementsByTagName(name: "tt"): NodeListOf; + getElementsByTagName(name: "u"): NodeListOf; + getElementsByTagName(name: "ul"): NodeListOf; + getElementsByTagName(name: "var"): NodeListOf; + getElementsByTagName(name: "video"): NodeListOf; + getElementsByTagName(name: "wbr"): NodeListOf; + getElementsByTagName(name: "x-ms-webview"): NodeListOf; + getElementsByTagName(name: "xmp"): NodeListOf; + getElementsByTagName(name: string): NodeList; + getClientRects(): ClientRectList; + setAttributeNode(newAttr: Attr): Attr; + removeAttributeNode(oldAttr: Attr): Attr; + setAttribute(name?: string, value?: string): void; + removeAttributeNS(namespaceURI: string, localName: string): void; + msGetRegionContent(): MSRangeCollection; + msReleasePointerCapture(pointerId: number): void; + msSetPointerCapture(pointerId: number): void; + msZoomTo(args: MsZoomToOptions): void; + setPointerCapture(pointerId: number): void; + msGetUntransformedBounds(): ClientRect; + releasePointerCapture(pointerId: number): void; + msRequestFullscreen(): void; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var Element: { + prototype: Element; + new(): Element; +} + +interface HTMLNextIdElement extends HTMLElement { + n: string; +} +declare var HTMLNextIdElement: { + prototype: HTMLNextIdElement; + new(): HTMLNextIdElement; +} + +interface SVGPathSegMovetoRel extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegMovetoRel: { + prototype: SVGPathSegMovetoRel; + new(): SVGPathSegMovetoRel; +} + +interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + y1: SVGAnimatedLength; + x2: SVGAnimatedLength; + x1: SVGAnimatedLength; + y2: SVGAnimatedLength; +} +declare var SVGLineElement: { + prototype: SVGLineElement; + new(): SVGLineElement; +} + +interface HTMLParagraphElement extends HTMLElement, DOML2DeprecatedTextFlowControl { + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; +} +declare var HTMLParagraphElement: { + prototype: HTMLParagraphElement; + new(): HTMLParagraphElement; +} + +interface HTMLAreasCollection extends HTMLCollection { + /** + * Removes an element from the collection. + */ + remove(index?: number): void; + /** + * Adds an element to the areas, controlRange, or options collection. + */ + add(element: HTMLElement, before?: any): void; +} +declare var HTMLAreasCollection: { + prototype: HTMLAreasCollection; + new(): HTMLAreasCollection; +} + +interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace { +} +declare var SVGDescElement: { + prototype: SVGDescElement; + new(): SVGDescElement; +} + +interface Node extends EventTarget { + nodeType: number; + previousSibling: Node; + localName: string; + namespaceURI: string; + textContent: string; + parentNode: Node; + nextSibling: Node; + nodeValue: string; + lastChild: Node; + childNodes: NodeList; + nodeName: string; + ownerDocument: Document; + attributes: NamedNodeMap; + firstChild: Node; + prefix: string; + removeChild(oldChild: Node): Node; + appendChild(newChild: Node): Node; + isSupported(feature: string, version: string): boolean; + isEqualNode(arg: Node): boolean; + lookupPrefix(namespaceURI: string): string; + isDefaultNamespace(namespaceURI: string): boolean; + compareDocumentPosition(other: Node): number; + normalize(): void; + isSameNode(other: Node): boolean; + hasAttributes(): boolean; + lookupNamespaceURI(prefix: string): string; + cloneNode(deep?: boolean): Node; + hasChildNodes(): boolean; + replaceChild(newChild: Node, oldChild: Node): Node; + insertBefore(newChild: Node, refChild?: Node): Node; + ENTITY_REFERENCE_NODE: number; + ATTRIBUTE_NODE: number; + DOCUMENT_FRAGMENT_NODE: number; + TEXT_NODE: number; + ELEMENT_NODE: number; + COMMENT_NODE: number; + DOCUMENT_POSITION_DISCONNECTED: number; + DOCUMENT_POSITION_CONTAINED_BY: number; + DOCUMENT_POSITION_CONTAINS: number; + DOCUMENT_TYPE_NODE: number; + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number; + DOCUMENT_NODE: number; + ENTITY_NODE: number; + PROCESSING_INSTRUCTION_NODE: number; + CDATA_SECTION_NODE: number; + NOTATION_NODE: number; + DOCUMENT_POSITION_FOLLOWING: number; + DOCUMENT_POSITION_PRECEDING: number; +} +declare var Node: { + prototype: Node; + new(): Node; + ENTITY_REFERENCE_NODE: number; + ATTRIBUTE_NODE: number; + DOCUMENT_FRAGMENT_NODE: number; + TEXT_NODE: number; + ELEMENT_NODE: number; + COMMENT_NODE: number; + DOCUMENT_POSITION_DISCONNECTED: number; + DOCUMENT_POSITION_CONTAINED_BY: number; + DOCUMENT_POSITION_CONTAINS: number; + DOCUMENT_TYPE_NODE: number; + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number; + DOCUMENT_NODE: number; + ENTITY_NODE: number; + PROCESSING_INSTRUCTION_NODE: number; + CDATA_SECTION_NODE: number; + NOTATION_NODE: number; + DOCUMENT_POSITION_FOLLOWING: number; + DOCUMENT_POSITION_PRECEDING: number; +} + +interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegCurvetoQuadraticSmoothRel: { + prototype: SVGPathSegCurvetoQuadraticSmoothRel; + new(): SVGPathSegCurvetoQuadraticSmoothRel; +} + +interface DOML2DeprecatedListSpaceReduction { + compact: boolean; +} + +interface MSScriptHost { +} +declare var MSScriptHost: { + prototype: MSScriptHost; + new(): MSScriptHost; +} + +interface SVGClipPathElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + clipPathUnits: SVGAnimatedEnumeration; +} +declare var SVGClipPathElement: { + prototype: SVGClipPathElement; + new(): SVGClipPathElement; +} + +interface MouseEvent extends UIEvent { + toElement: Element; + layerY: number; + fromElement: Element; + which: number; + pageX: number; + offsetY: number; + x: number; + y: number; + metaKey: boolean; + altKey: boolean; + ctrlKey: boolean; + offsetX: number; + screenX: number; + clientY: number; + shiftKey: boolean; + layerX: number; + screenY: number; + relatedTarget: EventTarget; + button: number; + pageY: number; + buttons: number; + clientX: number; + initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void; + getModifierState(keyArg: string): boolean; +} +declare var MouseEvent: { + prototype: MouseEvent; + new(): MouseEvent; +} + +interface RangeException { + code: number; + message: string; + name: string; + toString(): string; + INVALID_NODE_TYPE_ERR: number; + BAD_BOUNDARYPOINTS_ERR: number; +} +declare var RangeException: { + prototype: RangeException; + new(): RangeException; + INVALID_NODE_TYPE_ERR: number; + BAD_BOUNDARYPOINTS_ERR: number; +} + +interface SVGTextPositioningElement extends SVGTextContentElement { + y: SVGAnimatedLengthList; + rotate: SVGAnimatedNumberList; + dy: SVGAnimatedLengthList; + x: SVGAnimatedLengthList; + dx: SVGAnimatedLengthList; +} +declare var SVGTextPositioningElement: { + prototype: SVGTextPositioningElement; + new(): SVGTextPositioningElement; +} + +interface HTMLAppletElement extends HTMLElement, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions { + width: number; + /** + * Sets or retrieves the Internet media type for the code associated with the object. + */ + codeType: string; + object: string; + form: HTMLFormElement; + code: string; + /** + * Sets or retrieves a character string that can be used to implement your own archive functionality for the object. + */ + archive: string; + /** + * Sets or retrieves a text alternative to the graphic. + */ + alt: string; + /** + * Sets or retrieves a message to be displayed while an object is loading. + */ + standby: string; + /** + * Sets or retrieves the class identifier for the object. + */ + classid: string; + /** + * Sets or retrieves the shape of the object. + */ + name: string; + /** + * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. + */ + useMap: string; + /** + * Sets or retrieves the URL that references the data of the object. + */ + data: string; + /** + * Sets or retrieves the height of the object. + */ + height: string; + /** + * Gets or sets the optional alternative HTML script to execute if the object fails to load. + */ + altHtml: string; + /** + * Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned. + */ + contentDocument: Document; + /** + * Sets or retrieves the URL of the component. + */ + codeBase: string; + /** + * Sets or retrieves a character string that can be used to implement your own declare functionality for the object. + */ + declare: boolean; + /** + * Returns the content type of the object. + */ + type: string; + /** + * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element. + */ + BaseHref: string; +} +declare var HTMLAppletElement: { + prototype: HTMLAppletElement; + new(): HTMLAppletElement; +} + +interface TextMetrics { + width: number; +} +declare var TextMetrics: { + prototype: TextMetrics; + new(): TextMetrics; +} + +interface DocumentEvent { + createEvent(eventInterface: "AnimationEvent"): AnimationEvent; + createEvent(eventInterface: "CloseEvent"): CloseEvent; + createEvent(eventInterface: "CompositionEvent"): CompositionEvent; + createEvent(eventInterface: "CustomEvent"): CustomEvent; + createEvent(eventInterface: "DeviceMotionEvent"): DeviceMotionEvent; + createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent; + createEvent(eventInterface: "DragEvent"): DragEvent; + createEvent(eventInterface: "ErrorEvent"): ErrorEvent; + createEvent(eventInterface: "Event"): Event; + createEvent(eventInterface: "Events"): Event; + createEvent(eventInterface: "FocusEvent"): FocusEvent; + createEvent(eventInterface: "HTMLEvents"): Event; + createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent; + createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent; + createEvent(eventInterface: "LongRunningScriptDetectedEvent"): LongRunningScriptDetectedEvent; + createEvent(eventInterface: "MessageEvent"): MessageEvent; + createEvent(eventInterface: "MouseEvent"): MouseEvent; + createEvent(eventInterface: "MouseEvents"): MouseEvent; + createEvent(eventInterface: "MouseWheelEvent"): MouseWheelEvent; + createEvent(eventInterface: "MSGestureEvent"): MSGestureEvent; + createEvent(eventInterface: "MSPointerEvent"): MSPointerEvent; + createEvent(eventInterface: "MutationEvent"): MutationEvent; + createEvent(eventInterface: "MutationEvents"): MutationEvent; + createEvent(eventInterface: "NavigationCompletedEvent"): NavigationCompletedEvent; + createEvent(eventInterface: "NavigationEvent"): NavigationEvent; + createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent; + createEvent(eventInterface: "PointerEvent"): MSPointerEvent; + createEvent(eventInterface: "PopStateEvent"): PopStateEvent; + createEvent(eventInterface: "ProgressEvent"): ProgressEvent; + createEvent(eventInterface: "StorageEvent"): StorageEvent; + createEvent(eventInterface: "SVGZoomEvents"): SVGZoomEvent; + createEvent(eventInterface: "TextEvent"): TextEvent; + createEvent(eventInterface: "TrackEvent"): TrackEvent; + createEvent(eventInterface: "TransitionEvent"): TransitionEvent; + createEvent(eventInterface: "UIEvent"): UIEvent; + createEvent(eventInterface: "UIEvents"): UIEvent; + createEvent(eventInterface: "UnviewableContentIdentifiedEvent"): UnviewableContentIdentifiedEvent; + createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent; + createEvent(eventInterface: "WheelEvent"): WheelEvent; + createEvent(eventInterface: string): Event; +} + +interface HTMLOListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { + /** + * The starting number. + */ + start: number; +} +declare var HTMLOListElement: { + prototype: HTMLOListElement; + new(): HTMLOListElement; +} + +interface SVGPathSegLinetoVerticalRel extends SVGPathSeg { + y: number; +} +declare var SVGPathSegLinetoVerticalRel: { + prototype: SVGPathSegLinetoVerticalRel; + new(): SVGPathSegLinetoVerticalRel; +} + +interface SVGAnimatedString { + animVal: string; + baseVal: string; +} +declare var SVGAnimatedString: { + prototype: SVGAnimatedString; + new(): SVGAnimatedString; +} + +interface CDATASection extends Text { +} +declare var CDATASection: { + prototype: CDATASection; + new(): CDATASection; +} + +interface StyleMedia { + type: string; + matchMedium(mediaquery: string): boolean; +} +declare var StyleMedia: { + prototype: StyleMedia; + new(): StyleMedia; +} + +interface HTMLSelectElement extends HTMLElement, MSHTMLCollectionExtensions, MSDataBindingExtensions { + options: HTMLSelectElement; + /** + * Sets or retrieves the value which is returned to the server when the form control is submitted. + */ + value: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Sets or retrieves the number of rows in the list box. + */ + size: number; + /** + * Sets or retrieves the number of objects in a collection. + */ + length: number; + /** + * Sets or retrieves the index of the selected option in a select object. + */ + selectedIndex: number; + /** + * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. + */ + multiple: boolean; + /** + * Retrieves the type of select control based on the value of the MULTIPLE attribute. + */ + type: string; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. + */ + autofocus: boolean; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * When present, marks an element that can't be submitted without a value. + */ + required: boolean; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Removes an element from the collection. + * @param index Number that specifies the zero-based index of the element to remove from the collection. + */ + remove(index?: number): void; + /** + * Adds an element to the areas, controlRange, or options collection. + * @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection. + * @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection. + */ + add(element: HTMLElement, before?: any): void; + /** + * Retrieves a select object or an object from an options collection. + * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made. + * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned. + */ + item(name?: any, index?: any): any; + /** + * Retrieves a select object or an object from an options collection. + * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made. + */ + namedItem(name: string): any; + [name: string]: any; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLSelectElement: { + prototype: HTMLSelectElement; + new(): HTMLSelectElement; +} + +interface TextRange { + boundingLeft: number; + htmlText: string; + offsetLeft: number; + boundingWidth: number; + boundingHeight: number; + boundingTop: number; + text: string; + offsetTop: number; + moveToPoint(x: number, y: number): void; + queryCommandValue(cmdID: string): any; + getBookmark(): string; + move(unit: string, count?: number): number; + queryCommandIndeterm(cmdID: string): boolean; + scrollIntoView(fStart?: boolean): void; + findText(string: string, count?: number, flags?: number): boolean; + execCommand(cmdID: string, showUI?: boolean, value?: any): boolean; + getBoundingClientRect(): ClientRect; + moveToBookmark(bookmark: string): boolean; + isEqual(range: TextRange): boolean; + duplicate(): TextRange; + collapse(start?: boolean): void; + queryCommandText(cmdID: string): string; + select(): void; + pasteHTML(html: string): void; + inRange(range: TextRange): boolean; + moveEnd(unit: string, count?: number): number; + getClientRects(): ClientRectList; + moveStart(unit: string, count?: number): number; + parentElement(): Element; + queryCommandState(cmdID: string): boolean; + compareEndPoints(how: string, sourceRange: TextRange): number; + execCommandShowHelp(cmdID: string): boolean; + moveToElementText(element: Element): void; + expand(Unit: string): boolean; + queryCommandSupported(cmdID: string): boolean; + setEndPoint(how: string, SourceRange: TextRange): void; + queryCommandEnabled(cmdID: string): boolean; +} +declare var TextRange: { + prototype: TextRange; + new(): TextRange; +} + +interface SVGTests { + requiredFeatures: SVGStringList; + requiredExtensions: SVGStringList; + systemLanguage: SVGStringList; + hasExtension(extension: string): boolean; +} + +interface HTMLBlockElement extends HTMLElement, DOML2DeprecatedTextFlowControl { + /** + * Sets or retrieves the width of the object. + */ + width: number; + /** + * Sets or retrieves reference information about the object. + */ + cite: string; +} +declare var HTMLBlockElement: { + prototype: HTMLBlockElement; + new(): HTMLBlockElement; +} + +interface CSSStyleSheet extends StyleSheet { + owningElement: Element; + imports: StyleSheetList; + isAlternate: boolean; + rules: MSCSSRuleList; + isPrefAlternate: boolean; + readOnly: boolean; + cssText: string; + ownerRule: CSSRule; + href: string; + cssRules: CSSRuleList; + id: string; + pages: StyleSheetPageList; + addImport(bstrURL: string, lIndex?: number): number; + addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number; + insertRule(rule: string, index?: number): number; + removeRule(lIndex: number): void; + deleteRule(index?: number): void; + addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number; + removeImport(lIndex: number): void; +} +declare var CSSStyleSheet: { + prototype: CSSStyleSheet; + new(): CSSStyleSheet; +} + +interface MSSelection { + type: string; + typeDetail: string; + createRange(): TextRange; + clear(): void; + createRangeCollection(): TextRangeCollection; + empty(): void; +} +declare var MSSelection: { + prototype: MSSelection; + new(): MSSelection; +} + +interface HTMLMetaElement extends HTMLElement { + /** + * Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header. + */ + httpEquiv: string; + /** + * Sets or retrieves the value specified in the content attribute of the meta object. + */ + name: string; + /** + * Gets or sets meta-information to associate with httpEquiv or name. + */ + content: string; + /** + * Sets or retrieves the URL property that will be loaded after the specified time has elapsed. + */ + url: string; + /** + * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object. + */ + scheme: string; + /** + * Sets or retrieves the character set used to encode the object. + */ + charset: string; +} +declare var HTMLMetaElement: { + prototype: HTMLMetaElement; + new(): HTMLMetaElement; +} + +interface SVGPatternElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired, SVGURIReference { + patternUnits: SVGAnimatedEnumeration; + y: SVGAnimatedLength; + width: SVGAnimatedLength; + x: SVGAnimatedLength; + patternContentUnits: SVGAnimatedEnumeration; + patternTransform: SVGAnimatedTransformList; + height: SVGAnimatedLength; +} +declare var SVGPatternElement: { + prototype: SVGPatternElement; + new(): SVGPatternElement; +} + +interface SVGAnimatedAngle { + animVal: SVGAngle; + baseVal: SVGAngle; +} +declare var SVGAnimatedAngle: { + prototype: SVGAnimatedAngle; + new(): SVGAnimatedAngle; +} + +interface Selection { + isCollapsed: boolean; + anchorNode: Node; + focusNode: Node; + anchorOffset: number; + focusOffset: number; + rangeCount: number; + addRange(range: Range): void; + collapseToEnd(): void; + toString(): string; + selectAllChildren(parentNode: Node): void; + getRangeAt(index: number): Range; + collapse(parentNode: Node, offset: number): void; + removeAllRanges(): void; + collapseToStart(): void; + deleteFromDocument(): void; + removeRange(range: Range): void; +} +declare var Selection: { + prototype: Selection; + new(): Selection; +} + +interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference { + type: string; +} +declare var SVGScriptElement: { + prototype: SVGScriptElement; + new(): SVGScriptElement; +} + +interface HTMLDDElement extends HTMLElement { + /** + * Sets or retrieves whether the browser automatically performs wordwrap. + */ + noWrap: boolean; +} +declare var HTMLDDElement: { + prototype: HTMLDDElement; + new(): HTMLDDElement; +} + +interface MSDataBindingRecordSetReadonlyExtensions { + recordset: any; + namedRecordset(dataMember: string, hierarchy?: any): any; +} + +interface CSSStyleRule extends CSSRule { + selectorText: string; + style: MSStyleCSSProperties; + readOnly: boolean; +} +declare var CSSStyleRule: { + prototype: CSSStyleRule; + new(): CSSStyleRule; +} + +interface NodeIterator { + whatToShow: number; + filter: NodeFilter; + root: Node; + expandEntityReferences: boolean; + nextNode(): Node; + detach(): void; + previousNode(): Node; +} +declare var NodeIterator: { + prototype: NodeIterator; + new(): NodeIterator; +} + +interface SVGViewElement extends SVGElement, SVGZoomAndPan, SVGFitToViewBox, SVGExternalResourcesRequired { + viewTarget: SVGStringList; +} +declare var SVGViewElement: { + prototype: SVGViewElement; + new(): SVGViewElement; +} + +interface HTMLLinkElement extends HTMLElement, LinkStyle { + /** + * Sets or retrieves the relationship between the object and the destination of the link. + */ + rel: string; + /** + * Sets or retrieves the window or frame at which to target content. + */ + target: string; + /** + * Sets or retrieves a destination URL or an anchor point. + */ + href: string; + /** + * Sets or retrieves the media type. + */ + media: string; + /** + * Sets or retrieves the relationship between the object and the destination of the link. + */ + rev: string; + /** + * Sets or retrieves the MIME type of the object. + */ + type: string; + /** + * Sets or retrieves the character set used to encode the object. + */ + charset: string; + /** + * Sets or retrieves the language code of the object. + */ + hreflang: string; +} +declare var HTMLLinkElement: { + prototype: HTMLLinkElement; + new(): HTMLLinkElement; +} + +interface SVGLocatable { + farthestViewportElement: SVGElement; + nearestViewportElement: SVGElement; + getBBox(): SVGRect; + getTransformToElement(element: SVGElement): SVGMatrix; + getCTM(): SVGMatrix; + getScreenCTM(): SVGMatrix; +} + +interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty { + /** + * Sets or retrieves the current typeface family. + */ + face: string; +} +declare var HTMLFontElement: { + prototype: HTMLFontElement; + new(): HTMLFontElement; +} + +interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace { +} +declare var SVGTitleElement: { + prototype: SVGTitleElement; + new(): SVGTitleElement; +} + +interface ControlRangeCollection { + length: number; + queryCommandValue(cmdID: string): any; + remove(index: number): void; + add(item: Element): void; + queryCommandIndeterm(cmdID: string): boolean; + scrollIntoView(varargStart?: any): void; + item(index: number): Element; + [index: number]: Element; + execCommand(cmdID: string, showUI?: boolean, value?: any): boolean; + addElement(item: Element): void; + queryCommandState(cmdID: string): boolean; + queryCommandSupported(cmdID: string): boolean; + queryCommandEnabled(cmdID: string): boolean; + queryCommandText(cmdID: string): string; + select(): void; +} +declare var ControlRangeCollection: { + prototype: ControlRangeCollection; + new(): ControlRangeCollection; +} + +interface MSNamespaceInfo extends MSEventAttachmentTarget { + urn: string; + onreadystatechange: (ev: Event) => any; + name: string; + readyState: string; + doImport(implementationUrl: string): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var MSNamespaceInfo: { + prototype: MSNamespaceInfo; + new(): MSNamespaceInfo; +} + +interface WindowSessionStorage { + sessionStorage: Storage; +} + +interface SVGAnimatedTransformList { + animVal: SVGTransformList; + baseVal: SVGTransformList; +} +declare var SVGAnimatedTransformList: { + prototype: SVGAnimatedTransformList; + new(): SVGAnimatedTransformList; +} + +interface HTMLTableCaptionElement extends HTMLElement { + /** + * Sets or retrieves the alignment of the caption or legend. + */ + align: string; + /** + * Sets or retrieves whether the caption appears at the top or bottom of the table. + */ + vAlign: string; +} +declare var HTMLTableCaptionElement: { + prototype: HTMLTableCaptionElement; + new(): HTMLTableCaptionElement; +} + +interface HTMLOptionElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the ordinal position of an option in a list box. + */ + index: number; + /** + * Sets or retrieves the status of an option. + */ + defaultSelected: boolean; + /** + * Sets or retrieves the value which is returned to the server when the form control is submitted. + */ + value: string; + /** + * Sets or retrieves the text string specified by the option tag. + */ + text: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves a value that you can use to implement your own label functionality for the object. + */ + label: string; + /** + * Sets or retrieves whether the option in the list box is the default item. + */ + selected: boolean; +} +declare var HTMLOptionElement: { + prototype: HTMLOptionElement; + new(): HTMLOptionElement; + create(): HTMLOptionElement; +} + +interface HTMLMapElement extends HTMLElement { + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Retrieves a collection of the area objects defined for the given map object. + */ + areas: HTMLAreasCollection; +} +declare var HTMLMapElement: { + prototype: HTMLMapElement; + new(): HTMLMapElement; +} + +interface HTMLMenuElement extends HTMLElement, DOML2DeprecatedListSpaceReduction { + type: string; +} +declare var HTMLMenuElement: { + prototype: HTMLMenuElement; + new(): HTMLMenuElement; +} + +interface MouseWheelEvent extends MouseEvent { + wheelDelta: number; + initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void; +} +declare var MouseWheelEvent: { + prototype: MouseWheelEvent; + new(): MouseWheelEvent; +} + +interface SVGFitToViewBox { + viewBox: SVGAnimatedRect; + preserveAspectRatio: SVGAnimatedPreserveAspectRatio; +} + +interface SVGPointList { + numberOfItems: number; + replaceItem(newItem: SVGPoint, index: number): SVGPoint; + getItem(index: number): SVGPoint; + clear(): void; + appendItem(newItem: SVGPoint): SVGPoint; + initialize(newItem: SVGPoint): SVGPoint; + removeItem(index: number): SVGPoint; + insertItemBefore(newItem: SVGPoint, index: number): SVGPoint; +} +declare var SVGPointList: { + prototype: SVGPointList; + new(): SVGPointList; +} + +interface SVGAnimatedLengthList { + animVal: SVGLengthList; + baseVal: SVGLengthList; +} +declare var SVGAnimatedLengthList: { + prototype: SVGAnimatedLengthList; + new(): SVGAnimatedLengthList; +} + +interface SVGAnimatedPreserveAspectRatio { + animVal: SVGPreserveAspectRatio; + baseVal: SVGPreserveAspectRatio; +} +declare var SVGAnimatedPreserveAspectRatio: { + prototype: SVGAnimatedPreserveAspectRatio; + new(): SVGAnimatedPreserveAspectRatio; +} + +interface MSSiteModeEvent extends Event { + buttonID: number; + actionURL: string; +} +declare var MSSiteModeEvent: { + prototype: MSSiteModeEvent; + new(): MSSiteModeEvent; +} + +interface DOML2DeprecatedTextFlowControl { + clear: string; +} + +interface StyleSheetPageList { + length: number; + item(index: number): CSSPageRule; + [index: number]: CSSPageRule; +} +declare var StyleSheetPageList: { + prototype: StyleSheetPageList; + new(): StyleSheetPageList; +} + +interface MSCSSProperties extends CSSStyleDeclaration { + scrollbarShadowColor: string; + scrollbarHighlightColor: string; + layoutGridChar: string; + layoutGridType: string; + textAutospace: string; + textKashidaSpace: string; + writingMode: string; + scrollbarFaceColor: string; + backgroundPositionY: string; + lineBreak: string; + imeMode: string; + msBlockProgression: string; + layoutGridLine: string; + scrollbarBaseColor: string; + layoutGrid: string; + layoutFlow: string; + textKashida: string; + filter: string; + zoom: string; + scrollbarArrowColor: string; + behavior: string; + backgroundPositionX: string; + accelerator: string; + layoutGridMode: string; + textJustifyTrim: string; + scrollbar3dLightColor: string; + msInterpolationMode: string; + scrollbarTrackColor: string; + scrollbarDarkShadowColor: string; + styleFloat: string; + getAttribute(attributeName: string, flags?: number): any; + setAttribute(attributeName: string, AttributeValue: any, flags?: number): void; + removeAttribute(attributeName: string, flags?: number): boolean; +} +declare var MSCSSProperties: { + prototype: MSCSSProperties; + new(): MSCSSProperties; +} + +interface HTMLCollection extends MSHTMLCollectionExtensions { + /** + * Sets or retrieves the number of objects in a collection. + */ + length: number; + /** + * Retrieves an object from various collections. + */ + item(nameOrIndex?: any, optionalIndex?: any): Element; + /** + * Retrieves a select object or an object from an options collection. + */ + namedItem(name: string): Element; + // [name: string]: Element; +} +declare var HTMLCollection: { + prototype: HTMLCollection; + new(): HTMLCollection; +} + +interface SVGExternalResourcesRequired { + externalResourcesRequired: SVGAnimatedBoolean; +} + +interface HTMLImageElement extends HTMLElement, MSImageResourceExtensions, MSDataBindingExtensions, MSResourceMetadata { + /** + * Sets or retrieves the width of the object. + */ + width: number; + /** + * Sets or retrieves the vertical margin for the object. + */ + vspace: number; + /** + * The original height of the image resource before sizing. + */ + naturalHeight: number; + /** + * Sets or retrieves a text alternative to the graphic. + */ + alt: string; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * The address or URL of the a media resource that is to be considered. + */ + src: string; + /** + * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. + */ + useMap: string; + /** + * The original width of the image resource before sizing. + */ + naturalWidth: number; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Sets or retrieves the height of the object. + */ + height: number; + /** + * Specifies the properties of a border drawn around an object. + */ + border: string; + /** + * Sets or retrieves the width of the border to draw around the object. + */ + hspace: number; + /** + * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object. + */ + longDesc: string; + /** + * Contains the hypertext reference (HREF) of the URL. + */ + href: string; + /** + * Sets or retrieves whether the image is a server-side image map. + */ + isMap: boolean; + /** + * Retrieves whether the object is fully loaded. + */ + complete: boolean; + /** + * Gets or sets the primary DLNA PlayTo device. + */ + msPlayToPrimary: boolean; + /** + * Gets or sets whether the DLNA PlayTo device is available. + */ + msPlayToDisabled: boolean; + /** + * Gets the source associated with the media element for use by the PlayToManager. + */ + msPlayToSource: any; + crossOrigin: string; + msPlayToPreferredSourceUri: string; +} +declare var HTMLImageElement: { + prototype: HTMLImageElement; + new(): HTMLImageElement; + create(): HTMLImageElement; +} + +interface HTMLAreaElement extends HTMLElement { + /** + * Sets or retrieves the protocol portion of a URL. + */ + protocol: string; + /** + * Sets or retrieves the substring of the href property that follows the question mark. + */ + search: string; + /** + * Sets or retrieves a text alternative to the graphic. + */ + alt: string; + /** + * Sets or retrieves the coordinates of the object. + */ + coords: string; + /** + * Sets or retrieves the host name part of the location or URL. + */ + hostname: string; + /** + * Sets or retrieves the port number associated with a URL. + */ + port: string; + /** + * Sets or retrieves the file name or path specified by the object. + */ + pathname: string; + /** + * Sets or retrieves the hostname and port number of the location or URL. + */ + host: string; + /** + * Sets or retrieves the subsection of the href property that follows the number sign (#). + */ + hash: string; + /** + * Sets or retrieves the window or frame at which to target content. + */ + target: string; + /** + * Sets or retrieves a destination URL or an anchor point. + */ + href: string; + /** + * Sets or gets whether clicks in this region cause action. + */ + noHref: boolean; + /** + * Sets or retrieves the shape of the object. + */ + shape: string; + /** + * Returns a string representation of an object. + */ + toString(): string; +} +declare var HTMLAreaElement: { + prototype: HTMLAreaElement; + new(): HTMLAreaElement; +} + +interface EventTarget { + removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; + dispatchEvent(evt: Event): boolean; +} + +interface SVGAngle { + valueAsString: string; + valueInSpecifiedUnits: number; + value: number; + unitType: number; + newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void; + convertToSpecifiedUnits(unitType: number): void; + SVG_ANGLETYPE_RAD: number; + SVG_ANGLETYPE_UNKNOWN: number; + SVG_ANGLETYPE_UNSPECIFIED: number; + SVG_ANGLETYPE_DEG: number; + SVG_ANGLETYPE_GRAD: number; +} +declare var SVGAngle: { + prototype: SVGAngle; + new(): SVGAngle; + SVG_ANGLETYPE_RAD: number; + SVG_ANGLETYPE_UNKNOWN: number; + SVG_ANGLETYPE_UNSPECIFIED: number; + SVG_ANGLETYPE_DEG: number; + SVG_ANGLETYPE_GRAD: number; +} + +interface HTMLButtonElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the default or selected value of the control. + */ + value: string; + status: any; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Gets the classification and default behavior of the button. + */ + type: string; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Overrides the target attribute on a form element. + */ + formTarget: string; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Overrides the action attribute (where the data on a form is sent) on the parent form element. + */ + formAction: string; + /** + * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. + */ + autofocus: boolean; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. + */ + formNoValidate: string; + /** + * Used to override the encoding (formEnctype attribute) specified on the form element. + */ + formEnctype: string; + /** + * Overrides the submit method attribute previously specified on a form element. + */ + formMethod: string; + /** + * Creates a TextRange object for the element. + */ + createTextRange(): TextRange; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLButtonElement: { + prototype: HTMLButtonElement; + new(): HTMLButtonElement; +} + +interface HTMLSourceElement extends HTMLElement { + /** + * The address or URL of the a media resource that is to be considered. + */ + src: string; + /** + * Gets or sets the intended media type of the media source. + */ + media: string; + /** + * Gets or sets the MIME type of a media resource. + */ + type: string; + msKeySystem: string; +} +declare var HTMLSourceElement: { + prototype: HTMLSourceElement; + new(): HTMLSourceElement; +} + +interface CanvasGradient { + addColorStop(offset: number, color: string): void; +} +declare var CanvasGradient: { + prototype: CanvasGradient; + new(): CanvasGradient; +} + +interface KeyboardEvent extends UIEvent { + location: number; + keyCode: number; + shiftKey: boolean; + which: number; + locale: string; + key: string; + altKey: boolean; + metaKey: boolean; + char: string; + ctrlKey: boolean; + repeat: boolean; + charCode: number; + getModifierState(keyArg: string): boolean; + initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void; + DOM_KEY_LOCATION_RIGHT: number; + DOM_KEY_LOCATION_STANDARD: number; + DOM_KEY_LOCATION_LEFT: number; + DOM_KEY_LOCATION_NUMPAD: number; + DOM_KEY_LOCATION_JOYSTICK: number; + DOM_KEY_LOCATION_MOBILE: number; +} +declare var KeyboardEvent: { + prototype: KeyboardEvent; + new(): KeyboardEvent; + DOM_KEY_LOCATION_RIGHT: number; + DOM_KEY_LOCATION_STANDARD: number; + DOM_KEY_LOCATION_LEFT: number; + DOM_KEY_LOCATION_NUMPAD: number; + DOM_KEY_LOCATION_JOYSTICK: number; + DOM_KEY_LOCATION_MOBILE: number; +} + +interface MessageEvent extends Event { + source: Window; + origin: string; + data: any; + ports: any; + initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void; +} +declare var MessageEvent: { + prototype: MessageEvent; + new(): MessageEvent; +} + +interface SVGElement extends Element { + onmouseover: (ev: MouseEvent) => any; + viewportElement: SVGElement; + onmousemove: (ev: MouseEvent) => any; + onmouseout: (ev: MouseEvent) => any; + ondblclick: (ev: MouseEvent) => any; + onfocusout: (ev: FocusEvent) => any; + onfocusin: (ev: FocusEvent) => any; + xmlbase: string; + onmousedown: (ev: MouseEvent) => any; + onload: (ev: Event) => any; + onmouseup: (ev: MouseEvent) => any; + onclick: (ev: MouseEvent) => any; + ownerSVGElement: SVGSVGElement; + id: string; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var SVGElement: { + prototype: SVGElement; + new(): SVGElement; +} + +interface HTMLScriptElement extends HTMLElement { + /** + * Sets or retrieves the status of the script. + */ + defer: boolean; + /** + * Retrieves or sets the text of the object as a string. + */ + text: string; + /** + * Retrieves the URL to an external file that contains the source code or data. + */ + src: string; + /** + * Sets or retrieves the object that is bound to the event script. + */ + htmlFor: string; + /** + * Sets or retrieves the character set used to encode the object. + */ + charset: string; + /** + * Sets or retrieves the MIME type for the associated scripting engine. + */ + type: string; + /** + * Sets or retrieves the event for which the script is written. + */ + event: string; + async: boolean; +} +declare var HTMLScriptElement: { + prototype: HTMLScriptElement; + new(): HTMLScriptElement; +} + +interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle { + /** + * Retrieves the position of the object in the rows collection for the table. + */ + rowIndex: number; + /** + * Retrieves a collection of all cells in the table row. + */ + cells: HTMLCollection; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorLight: any; + /** + * Retrieves the position of the object in the collection. + */ + sectionRowIndex: number; + /** + * Sets or retrieves the border color of the object. + */ + borderColor: any; + /** + * Sets or retrieves the height of the object. + */ + height: any; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorDark: any; + /** + * Removes the specified cell from the table row, as well as from the cells collection. + * @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted. + */ + deleteCell(index?: number): void; + /** + * Creates a new cell in the table row, and adds the cell to the cells collection. + * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection. + */ + insertCell(index?: number): HTMLElement; +} +declare var HTMLTableRowElement: { + prototype: HTMLTableRowElement; + new(): HTMLTableRowElement; +} + +interface CanvasRenderingContext2D { + miterLimit: number; + font: string; + globalCompositeOperation: string; + msFillRule: string; + lineCap: string; + msImageSmoothingEnabled: boolean; + lineDashOffset: number; + shadowColor: string; + lineJoin: string; + shadowOffsetX: number; + lineWidth: number; + canvas: HTMLCanvasElement; + strokeStyle: any; + globalAlpha: number; + shadowOffsetY: number; + fillStyle: any; + shadowBlur: number; + textAlign: string; + textBaseline: string; + restore(): void; + setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; + save(): void; + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void; + measureText(text: string): TextMetrics; + isPointInPath(x: number, y: number, fillRule?: string): boolean; + quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; + putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void; + rotate(angle: number): void; + fillText(text: string, x: number, y: number, maxWidth?: number): void; + translate(x: number, y: number): void; + scale(x: number, y: number): void; + createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient; + lineTo(x: number, y: number): void; + getLineDash(): number[]; + fill(fillRule?: string): void; + createImageData(imageDataOrSw: any, sh?: number): ImageData; + createPattern(image: HTMLElement, repetition: string): CanvasPattern; + closePath(): void; + rect(x: number, y: number, w: number, h: number): void; + clip(fillRule?: string): void; + clearRect(x: number, y: number, w: number, h: number): void; + moveTo(x: number, y: number): void; + getImageData(sx: number, sy: number, sw: number, sh: number): ImageData; + fillRect(x: number, y: number, w: number, h: number): void; + bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; + drawImage(image: HTMLElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void; + transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; + stroke(): void; + strokeRect(x: number, y: number, w: number, h: number): void; + setLineDash(segments: number[]): void; + strokeText(text: string, x: number, y: number, maxWidth?: number): void; + beginPath(): void; + arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void; + createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient; +} +declare var CanvasRenderingContext2D: { + prototype: CanvasRenderingContext2D; + new(): CanvasRenderingContext2D; +} + +interface MSCSSRuleList { + length: number; + item(index?: number): CSSStyleRule; + [index: number]: CSSStyleRule; +} +declare var MSCSSRuleList: { + prototype: MSCSSRuleList; + new(): MSCSSRuleList; +} + +interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg { + x: number; +} +declare var SVGPathSegLinetoHorizontalAbs: { + prototype: SVGPathSegLinetoHorizontalAbs; + new(): SVGPathSegLinetoHorizontalAbs; +} + +interface SVGPathSegArcAbs extends SVGPathSeg { + y: number; + sweepFlag: boolean; + r2: number; + x: number; + angle: number; + r1: number; + largeArcFlag: boolean; +} +declare var SVGPathSegArcAbs: { + prototype: SVGPathSegArcAbs; + new(): SVGPathSegArcAbs; +} + +interface SVGTransformList { + numberOfItems: number; + getItem(index: number): SVGTransform; + consolidate(): SVGTransform; + clear(): void; + appendItem(newItem: SVGTransform): SVGTransform; + initialize(newItem: SVGTransform): SVGTransform; + removeItem(index: number): SVGTransform; + insertItemBefore(newItem: SVGTransform, index: number): SVGTransform; + replaceItem(newItem: SVGTransform, index: number): SVGTransform; + createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform; +} +declare var SVGTransformList: { + prototype: SVGTransformList; + new(): SVGTransformList; +} + +interface HTMLHtmlElement extends HTMLElement { + /** + * Sets or retrieves the DTD version that governs the current document. + */ + version: string; +} +declare var HTMLHtmlElement: { + prototype: HTMLHtmlElement; + new(): HTMLHtmlElement; +} + +interface SVGPathSegClosePath extends SVGPathSeg { +} +declare var SVGPathSegClosePath: { + prototype: SVGPathSegClosePath; + new(): SVGPathSegClosePath; +} + +interface HTMLFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions { + /** + * Sets or retrieves the width of the object. + */ + width: any; + /** + * Sets or retrieves whether the frame can be scrolled. + */ + scrolling: string; + /** + * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. + */ + marginHeight: string; + /** + * Sets or retrieves the left and right margin widths before displaying the text in a frame. + */ + marginWidth: string; + /** + * Sets or retrieves the border color of the object. + */ + borderColor: any; + /** + * Sets or retrieves the amount of additional space between the frames. + */ + frameSpacing: any; + /** + * Sets or retrieves whether to display a border for the frame. + */ + frameBorder: string; + /** + * Sets or retrieves whether the user can resize the frame. + */ + noResize: boolean; + /** + * Retrieves the object of the specified. + */ + contentWindow: Window; + /** + * Sets or retrieves a URL to be loaded by the object. + */ + src: string; + /** + * Sets or retrieves the frame name. + */ + name: string; + /** + * Sets or retrieves the height of the object. + */ + height: any; + /** + * Retrieves the document object of the page or frame. + */ + contentDocument: Document; + /** + * Specifies the properties of a border drawn around an object. + */ + border: string; + /** + * Sets or retrieves a URI to a long description of the object. + */ + longDesc: string; + /** + * Raised when the object has been completely received from the server. + */ + onload: (ev: Event) => any; + /** + * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied. + */ + security: any; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLFrameElement: { + prototype: HTMLFrameElement; + new(): HTMLFrameElement; +} + +interface SVGAnimatedLength { + animVal: SVGLength; + baseVal: SVGLength; +} +declare var SVGAnimatedLength: { + prototype: SVGAnimatedLength; + new(): SVGAnimatedLength; +} + +interface SVGAnimatedPoints { + points: SVGPointList; + animatedPoints: SVGPointList; +} + +interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { +} +declare var SVGDefsElement: { + prototype: SVGDefsElement; + new(): SVGDefsElement; +} + +interface HTMLQuoteElement extends HTMLElement { + /** + * Sets or retrieves the date and time of a modification to the object. + */ + dateTime: string; + /** + * Sets or retrieves reference information about the object. + */ + cite: string; +} +declare var HTMLQuoteElement: { + prototype: HTMLQuoteElement; + new(): HTMLQuoteElement; +} + +interface CSSMediaRule extends CSSRule { + media: MediaList; + cssRules: CSSRuleList; + insertRule(rule: string, index?: number): number; + deleteRule(index?: number): void; +} +declare var CSSMediaRule: { + prototype: CSSMediaRule; + new(): CSSMediaRule; +} + +interface WindowModal { + dialogArguments: any; + returnValue: any; +} + +interface XMLHttpRequest extends EventTarget { + responseBody: any; + status: number; + readyState: number; + responseText: string; + responseXML: any; + ontimeout: (ev: Event) => any; + statusText: string; + onreadystatechange: (ev: Event) => any; + timeout: number; + onload: (ev: Event) => any; + response: any; + withCredentials: boolean; + onprogress: (ev: ProgressEvent) => any; + onabort: (ev: UIEvent) => any; + responseType: string; + onloadend: (ev: ProgressEvent) => any; + upload: XMLHttpRequestEventTarget; + onerror: (ev: ErrorEvent) => any; + onloadstart: (ev: Event) => any; + msCaching: string; + open(method: string, url: string, async?: boolean, user?: string, password?: string): void; + send(data?: any): void; + abort(): void; + getAllResponseHeaders(): string; + setRequestHeader(header: string, value: string): void; + getResponseHeader(header: string): string; + msCachingEnabled(): boolean; + overrideMimeType(mime: string): void; + LOADING: number; + DONE: number; + UNSENT: number; + OPENED: number; + HEADERS_RECEIVED: number; + addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var XMLHttpRequest: { + prototype: XMLHttpRequest; + new(): XMLHttpRequest; + LOADING: number; + DONE: number; + UNSENT: number; + OPENED: number; + HEADERS_RECEIVED: number; + create(): XMLHttpRequest; +} + +interface HTMLTableHeaderCellElement extends HTMLTableCellElement { + /** + * Sets or retrieves the group of cells in a table to which the object's information applies. + */ + scope: string; +} +declare var HTMLTableHeaderCellElement: { + prototype: HTMLTableHeaderCellElement; + new(): HTMLTableHeaderCellElement; +} + +interface HTMLDListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction { +} +declare var HTMLDListElement: { + prototype: HTMLDListElement; + new(): HTMLDListElement; +} + +interface MSDataBindingExtensions { + dataSrc: string; + dataFormatAs: string; + dataFld: string; +} + +interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg { + x: number; +} +declare var SVGPathSegLinetoHorizontalRel: { + prototype: SVGPathSegLinetoHorizontalRel; + new(): SVGPathSegLinetoHorizontalRel; +} + +interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + ry: SVGAnimatedLength; + cx: SVGAnimatedLength; + rx: SVGAnimatedLength; + cy: SVGAnimatedLength; +} +declare var SVGEllipseElement: { + prototype: SVGEllipseElement; + new(): SVGEllipseElement; +} + +interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { + target: SVGAnimatedString; +} +declare var SVGAElement: { + prototype: SVGAElement; + new(): SVGAElement; +} + +interface SVGStylable { + className: SVGAnimatedString; + style: CSSStyleDeclaration; +} + +interface SVGTransformable extends SVGLocatable { + transform: SVGAnimatedTransformList; +} + +interface HTMLFrameSetElement extends HTMLElement { + ononline: (ev: Event) => any; + /** + * Sets or retrieves the border color of the object. + */ + borderColor: any; + /** + * Sets or retrieves the frame heights of the object. + */ + rows: string; + /** + * Sets or retrieves the frame widths of the object. + */ + cols: string; + /** + * Fires when the object loses the input focus. + */ + onblur: (ev: FocusEvent) => any; + /** + * Sets or retrieves the amount of additional space between the frames. + */ + frameSpacing: any; + /** + * Fires when the object receives focus. + */ + onfocus: (ev: FocusEvent) => any; + onmessage: (ev: MessageEvent) => any; + onerror: (ev: ErrorEvent) => any; + /** + * Sets or retrieves whether to display a border for the frame. + */ + frameBorder: string; + onresize: (ev: UIEvent) => any; + name: string; + onafterprint: (ev: Event) => any; + onbeforeprint: (ev: Event) => any; + onoffline: (ev: Event) => any; + border: string; + onunload: (ev: Event) => any; + onhashchange: (ev: Event) => any; + onload: (ev: Event) => any; + onbeforeunload: (ev: BeforeUnloadEvent) => any; + onstorage: (ev: StorageEvent) => any; + onpageshow: (ev: PageTransitionEvent) => any; + onpagehide: (ev: PageTransitionEvent) => any; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLFrameSetElement: { + prototype: HTMLFrameSetElement; + new(): HTMLFrameSetElement; +} + +interface Screen extends EventTarget { + width: number; + deviceXDPI: number; + fontSmoothingEnabled: boolean; + bufferDepth: number; + logicalXDPI: number; + systemXDPI: number; + availHeight: number; + height: number; + logicalYDPI: number; + systemYDPI: number; + updateInterval: number; + colorDepth: number; + availWidth: number; + deviceYDPI: number; + pixelDepth: number; + msOrientation: string; + onmsorientationchange: (ev: any) => any; + msLockOrientation(orientation: string): boolean; + msLockOrientation(orientations: string[]): boolean; + msUnlockOrientation(): void; + addEventListener(type: "msorientationchange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var Screen: { + prototype: Screen; + new(): Screen; +} + +interface Coordinates { + altitudeAccuracy: number; + longitude: number; + latitude: number; + speed: number; + heading: number; + altitude: number; + accuracy: number; +} +declare var Coordinates: { + prototype: Coordinates; + new(): Coordinates; +} + +interface NavigatorGeolocation { + geolocation: Geolocation; +} + +interface NavigatorContentUtils { +} + +interface EventListener { + (evt: Event): void; +} + +interface SVGLangSpace { + xmllang: string; + xmlspace: string; +} + +interface DataTransfer { + effectAllowed: string; + dropEffect: string; + types: DOMStringList; + files: FileList; + clearData(format?: string): boolean; + setData(format: string, data: string): boolean; + getData(format: string): string; +} +declare var DataTransfer: { + prototype: DataTransfer; + new(): DataTransfer; +} + +interface FocusEvent extends UIEvent { + relatedTarget: EventTarget; + initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void; +} +declare var FocusEvent: { + prototype: FocusEvent; + new(): FocusEvent; +} + +interface Range { + startOffset: number; + collapsed: boolean; + endOffset: number; + startContainer: Node; + endContainer: Node; + commonAncestorContainer: Node; + setStart(refNode: Node, offset: number): void; + setEndBefore(refNode: Node): void; + setStartBefore(refNode: Node): void; + selectNode(refNode: Node): void; + detach(): void; + getBoundingClientRect(): ClientRect; + toString(): string; + compareBoundaryPoints(how: number, sourceRange: Range): number; + insertNode(newNode: Node): void; + collapse(toStart: boolean): void; + selectNodeContents(refNode: Node): void; + cloneContents(): DocumentFragment; + setEnd(refNode: Node, offset: number): void; + cloneRange(): Range; + getClientRects(): ClientRectList; + surroundContents(newParent: Node): void; + deleteContents(): void; + setStartAfter(refNode: Node): void; + extractContents(): DocumentFragment; + setEndAfter(refNode: Node): void; + createContextualFragment(fragment: string): DocumentFragment; + END_TO_END: number; + START_TO_START: number; + START_TO_END: number; + END_TO_START: number; +} +declare var Range: { + prototype: Range; + new(): Range; + END_TO_END: number; + START_TO_START: number; + START_TO_END: number; + END_TO_START: number; +} + +interface SVGPoint { + y: number; + x: number; + matrixTransform(matrix: SVGMatrix): SVGPoint; +} +declare var SVGPoint: { + prototype: SVGPoint; + new(): SVGPoint; +} + +interface MSPluginsCollection { + length: number; + refresh(reload?: boolean): void; +} +declare var MSPluginsCollection: { + prototype: MSPluginsCollection; + new(): MSPluginsCollection; +} + +interface SVGAnimatedNumberList { + animVal: SVGNumberList; + baseVal: SVGNumberList; +} +declare var SVGAnimatedNumberList: { + prototype: SVGAnimatedNumberList; + new(): SVGAnimatedNumberList; +} + +interface SVGSVGElement extends SVGElement, SVGStylable, SVGZoomAndPan, DocumentEvent, SVGLangSpace, SVGLocatable, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired { + width: SVGAnimatedLength; + x: SVGAnimatedLength; + contentStyleType: string; + onzoom: (ev: any) => any; + y: SVGAnimatedLength; + viewport: SVGRect; + onerror: (ev: ErrorEvent) => any; + pixelUnitToMillimeterY: number; + onresize: (ev: UIEvent) => any; + screenPixelToMillimeterY: number; + height: SVGAnimatedLength; + onabort: (ev: UIEvent) => any; + contentScriptType: string; + pixelUnitToMillimeterX: number; + currentTranslate: SVGPoint; + onunload: (ev: Event) => any; + currentScale: number; + onscroll: (ev: UIEvent) => any; + screenPixelToMillimeterX: number; + setCurrentTime(seconds: number): void; + createSVGLength(): SVGLength; + getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList; + unpauseAnimations(): void; + createSVGRect(): SVGRect; + checkIntersection(element: SVGElement, rect: SVGRect): boolean; + unsuspendRedrawAll(): void; + pauseAnimations(): void; + suspendRedraw(maxWaitMilliseconds: number): number; + deselectAll(): void; + createSVGAngle(): SVGAngle; + getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList; + createSVGTransform(): SVGTransform; + unsuspendRedraw(suspendHandleID: number): void; + forceRedraw(): void; + getCurrentTime(): number; + checkEnclosure(element: SVGElement, rect: SVGRect): boolean; + createSVGMatrix(): SVGMatrix; + createSVGPoint(): SVGPoint; + createSVGNumber(): SVGNumber; + createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform; + getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; + getElementById(elementId: string): Element; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "zoom", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var SVGSVGElement: { + prototype: SVGSVGElement; + new(): SVGSVGElement; +} + +interface HTMLLabelElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the object to which the given label object is assigned. + */ + htmlFor: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; +} +declare var HTMLLabelElement: { + prototype: HTMLLabelElement; + new(): HTMLLabelElement; +} + +interface MSResourceMetadata { + protocol: string; + fileSize: string; + fileUpdatedDate: string; + nameProp: string; + fileCreatedDate: string; + fileModifiedDate: string; + mimeType: string; +} + +interface HTMLLegendElement extends HTMLElement, MSDataBindingExtensions { + /** + * Retrieves a reference to the form that the object is embedded in. + */ + align: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; +} +declare var HTMLLegendElement: { + prototype: HTMLLegendElement; + new(): HTMLLegendElement; +} + +interface HTMLDirectoryElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { +} +declare var HTMLDirectoryElement: { + prototype: HTMLDirectoryElement; + new(): HTMLDirectoryElement; +} + +interface SVGAnimatedInteger { + animVal: number; + baseVal: number; +} +declare var SVGAnimatedInteger: { + prototype: SVGAnimatedInteger; + new(): SVGAnimatedInteger; +} + +interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable { +} +declare var SVGTextElement: { + prototype: SVGTextElement; + new(): SVGTextElement; +} + +interface SVGTSpanElement extends SVGTextPositioningElement { +} +declare var SVGTSpanElement: { + prototype: SVGTSpanElement; + new(): SVGTSpanElement; +} + +interface HTMLLIElement extends HTMLElement, DOML2DeprecatedListNumberingAndBulletStyle { + /** + * Sets or retrieves the value of a list item. + */ + value: number; +} +declare var HTMLLIElement: { + prototype: HTMLLIElement; + new(): HTMLLIElement; +} + +interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg { + y: number; +} +declare var SVGPathSegLinetoVerticalAbs: { + prototype: SVGPathSegLinetoVerticalAbs; + new(): SVGPathSegLinetoVerticalAbs; +} + +interface MSStorageExtensions { + remainingSpace: number; +} + +interface SVGStyleElement extends SVGElement, SVGLangSpace { + media: string; + type: string; + title: string; +} +declare var SVGStyleElement: { + prototype: SVGStyleElement; + new(): SVGStyleElement; +} + +interface MSCurrentStyleCSSProperties extends MSCSSProperties { + blockDirection: string; + clipBottom: string; + clipLeft: string; + clipRight: string; + clipTop: string; + hasLayout: string; +} +declare var MSCurrentStyleCSSProperties: { + prototype: MSCurrentStyleCSSProperties; + new(): MSCurrentStyleCSSProperties; +} + +interface MSHTMLCollectionExtensions { + urns(urn: any): any; + tags(tagName: any): any; +} + +interface Storage extends MSStorageExtensions { + length: number; + getItem(key: string): any; + [key: string]: any; + setItem(key: string, data: string): void; + clear(): void; + removeItem(key: string): void; + key(index: number): string; + [index: number]: string; +} +declare var Storage: { + prototype: Storage; + new(): Storage; +} + +interface HTMLIFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions { + /** + * Sets or retrieves the width of the object. + */ + width: string; + /** + * Sets or retrieves whether the frame can be scrolled. + */ + scrolling: string; + /** + * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. + */ + marginHeight: string; + /** + * Sets or retrieves the left and right margin widths before displaying the text in a frame. + */ + marginWidth: string; + /** + * Sets or retrieves the amount of additional space between the frames. + */ + frameSpacing: any; + /** + * Sets or retrieves whether to display a border for the frame. + */ + frameBorder: string; + /** + * Sets or retrieves whether the user can resize the frame. + */ + noResize: boolean; + /** + * Sets or retrieves the vertical margin for the object. + */ + vspace: number; + /** + * Retrieves the object of the specified. + */ + contentWindow: Window; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Sets or retrieves a URL to be loaded by the object. + */ + src: string; + /** + * Sets or retrieves the frame name. + */ + name: string; + /** + * Sets or retrieves the height of the object. + */ + height: string; + /** + * Specifies the properties of a border drawn around an object. + */ + border: string; + /** + * Retrieves the document object of the page or frame. + */ + contentDocument: Document; + /** + * Sets or retrieves the horizontal margin for the object. + */ + hspace: number; + /** + * Sets or retrieves a URI to a long description of the object. + */ + longDesc: string; + /** + * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied. + */ + security: any; + /** + * Raised when the object has been completely received from the server. + */ + onload: (ev: Event) => any; + sandbox: DOMSettableTokenList; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLIFrameElement: { + prototype: HTMLIFrameElement; + new(): HTMLIFrameElement; +} + +interface TextRangeCollection { + length: number; + item(index: number): TextRange; + [index: number]: TextRange; +} +declare var TextRangeCollection: { + prototype: TextRangeCollection; + new(): TextRangeCollection; +} + +interface HTMLBodyElement extends HTMLElement, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { + scroll: string; + ononline: (ev: Event) => any; + onblur: (ev: FocusEvent) => any; + noWrap: boolean; + onfocus: (ev: FocusEvent) => any; + onmessage: (ev: MessageEvent) => any; + text: any; + onerror: (ev: ErrorEvent) => any; + bgProperties: string; + onresize: (ev: UIEvent) => any; + link: any; + aLink: any; + bottomMargin: any; + topMargin: any; + onafterprint: (ev: Event) => any; + vLink: any; + onbeforeprint: (ev: Event) => any; + onoffline: (ev: Event) => any; + onunload: (ev: Event) => any; + onhashchange: (ev: Event) => any; + onload: (ev: Event) => any; + rightMargin: any; + onbeforeunload: (ev: BeforeUnloadEvent) => any; + leftMargin: any; + onstorage: (ev: StorageEvent) => any; + onpopstate: (ev: PopStateEvent) => any; + onpageshow: (ev: PageTransitionEvent) => any; + onpagehide: (ev: PageTransitionEvent) => any; + createTextRange(): TextRange; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLBodyElement: { + prototype: HTMLBodyElement; + new(): HTMLBodyElement; +} + +interface DocumentType extends Node { + name: string; + notations: NamedNodeMap; + systemId: string; + internalSubset: string; + entities: NamedNodeMap; + publicId: string; +} +declare var DocumentType: { + prototype: DocumentType; + new(): DocumentType; +} + +interface SVGRadialGradientElement extends SVGGradientElement { + cx: SVGAnimatedLength; + r: SVGAnimatedLength; + cy: SVGAnimatedLength; + fx: SVGAnimatedLength; + fy: SVGAnimatedLength; +} +declare var SVGRadialGradientElement: { + prototype: SVGRadialGradientElement; + new(): SVGRadialGradientElement; +} + +interface MutationEvent extends Event { + newValue: string; + attrChange: number; + attrName: string; + prevValue: string; + relatedNode: Node; + initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void; + MODIFICATION: number; + REMOVAL: number; + ADDITION: number; +} +declare var MutationEvent: { + prototype: MutationEvent; + new(): MutationEvent; + MODIFICATION: number; + REMOVAL: number; + ADDITION: number; +} + +interface DragEvent extends MouseEvent { + dataTransfer: DataTransfer; + initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void; + msConvertURL(file: File, targetType: string, targetURL?: string): void; +} +declare var DragEvent: { + prototype: DragEvent; + new(): DragEvent; +} + +interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle { + /** + * Sets or retrieves a value that indicates the table alignment. + */ + align: string; + /** + * Sets or retrieves the number of horizontal rows contained in the object. + */ + rows: HTMLCollection; + /** + * Removes the specified row (tr) from the element and from the rows collection. + * @param index Number that specifies the zero-based position in the rows collection of the row to remove. + */ + deleteRow(index?: number): void; + /** + * Moves a table row to a new position. + * @param indexFrom Number that specifies the index in the rows collection of the table row that is moved. + * @param indexTo Number that specifies where the row is moved within the rows collection. + */ + moveRow(indexFrom?: number, indexTo?: number): any; + /** + * Creates a new row (tr) in the table, and adds the row to the rows collection. + * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection. + */ + insertRow(index?: number): HTMLElement; +} +declare var HTMLTableSectionElement: { + prototype: HTMLTableSectionElement; + new(): HTMLTableSectionElement; +} + +interface DOML2DeprecatedListNumberingAndBulletStyle { + type: string; +} + +interface HTMLInputElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the width of the object. + */ + width: string; + status: boolean; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Gets or sets the starting position or offset of a text selection. + */ + selectionStart: number; + indeterminate: boolean; + readOnly: boolean; + size: number; + loop: number; + /** + * Gets or sets the end position or offset of a text selection. + */ + selectionEnd: number; + /** + * Sets or retrieves the URL of the virtual reality modeling language (VRML) world to be displayed in the window. + */ + vrml: string; + /** + * Sets or retrieves a lower resolution image to display. + */ + lowsrc: string; + /** + * Sets or retrieves the vertical margin for the object. + */ + vspace: number; + /** + * Sets or retrieves a comma-separated list of content types. + */ + accept: string; + /** + * Sets or retrieves a text alternative to the graphic. + */ + alt: string; + /** + * Sets or retrieves the state of the check box or radio button. + */ + defaultChecked: boolean; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Returns the value of the data at the cursor's current position. + */ + value: string; + /** + * The address or URL of the a media resource that is to be considered. + */ + src: string; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. + */ + useMap: string; + /** + * Sets or retrieves the height of the object. + */ + height: string; + /** + * Sets or retrieves the width of the border to draw around the object. + */ + border: string; + dynsrc: string; + /** + * Sets or retrieves the state of the check box or radio button. + */ + checked: boolean; + /** + * Sets or retrieves the width of the border to draw around the object. + */ + hspace: number; + /** + * Sets or retrieves the maximum number of characters that the user can enter in a text control. + */ + maxLength: number; + /** + * Returns the content type of the object. + */ + type: string; + /** + * Sets or retrieves the initial contents of the object. + */ + defaultValue: string; + /** + * Retrieves whether the object is fully loaded. + */ + complete: boolean; + start: string; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Returns a FileList object on a file type input object. + */ + files: FileList; + /** + * Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field. + */ + max: string; + /** + * Overrides the target attribute on a form element. + */ + formTarget: string; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field. + */ + step: string; + /** + * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. + */ + autofocus: boolean; + /** + * When present, marks an element that can't be submitted without a value. + */ + required: boolean; + /** + * Used to override the encoding (formEnctype attribute) specified on the form element. + */ + formEnctype: string; + /** + * Returns the input field value as a number. + */ + valueAsNumber: number; + /** + * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. + */ + placeholder: string; + /** + * Overrides the submit method attribute previously specified on a form element. + */ + formMethod: string; + /** + * Specifies the ID of a pre-defined datalist of options for an input element. + */ + list: HTMLElement; + /** + * Specifies whether autocomplete is applied to an editable text field. + */ + autocomplete: string; + /** + * Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field. + */ + min: string; + /** + * Overrides the action attribute (where the data on a form is sent) on the parent form element. + */ + formAction: string; + /** + * Gets or sets a string containing a regular expression that the user's input must match. + */ + pattern: string; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. + */ + formNoValidate: string; + /** + * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. + */ + multiple: boolean; + /** + * Creates a TextRange object for the element. + */ + createTextRange(): TextRange; + /** + * Sets the start and end positions of a selection in a text field. + * @param start The offset into the text field for the start of the selection. + * @param end The offset into the text field for the end of the selection. + */ + setSelectionRange(start: number, end: number): void; + /** + * Makes the selection equal to the current object. + */ + select(): void; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value. + * @param n Value to decrement the value by. + */ + stepDown(n?: number): void; + /** + * Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value. + * @param n Value to increment the value by. + */ + stepUp(n?: number): void; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLInputElement: { + prototype: HTMLInputElement; + new(): HTMLInputElement; +} + +interface HTMLAnchorElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the relationship between the object and the destination of the link. + */ + rel: string; + /** + * Contains the protocol of the URL. + */ + protocol: string; + /** + * Sets or retrieves the substring of the href property that follows the question mark. + */ + search: string; + /** + * Sets or retrieves the coordinates of the object. + */ + coords: string; + /** + * Contains the hostname of a URL. + */ + hostname: string; + /** + * Contains the pathname of the URL. + */ + pathname: string; + Methods: string; + /** + * Sets or retrieves the window or frame at which to target content. + */ + target: string; + protocolLong: string; + /** + * Sets or retrieves a destination URL or an anchor point. + */ + href: string; + /** + * Sets or retrieves the shape of the object. + */ + name: string; + /** + * Sets or retrieves the character set used to encode the object. + */ + charset: string; + /** + * Sets or retrieves the language code of the object. + */ + hreflang: string; + /** + * Sets or retrieves the port number associated with a URL. + */ + port: string; + /** + * Contains the hostname and port values of the URL. + */ + host: string; + /** + * Contains the anchor portion of the URL including the hash sign (#). + */ + hash: string; + nameProp: string; + urn: string; + /** + * Sets or retrieves the relationship between the object and the destination of the link. + */ + rev: string; + /** + * Sets or retrieves the shape of the object. + */ + shape: string; + type: string; + mimeType: string; + /** + * Retrieves or sets the text of the object as a string. + */ + text: string; + /** + * Returns a string representation of an object. + */ + toString(): string; +} +declare var HTMLAnchorElement: { + prototype: HTMLAnchorElement; + new(): HTMLAnchorElement; +} + +interface HTMLParamElement extends HTMLElement { + /** + * Sets or retrieves the value of an input parameter for an element. + */ + value: string; + /** + * Sets or retrieves the name of an input parameter for an element. + */ + name: string; + /** + * Sets or retrieves the content type of the resource designated by the value attribute. + */ + type: string; + /** + * Sets or retrieves the data type of the value attribute. + */ + valueType: string; +} +declare var HTMLParamElement: { + prototype: HTMLParamElement; + new(): HTMLParamElement; +} + +interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + preserveAspectRatio: SVGAnimatedPreserveAspectRatio; + x: SVGAnimatedLength; + height: SVGAnimatedLength; +} +declare var SVGImageElement: { + prototype: SVGImageElement; + new(): SVGImageElement; +} + +interface SVGAnimatedNumber { + animVal: number; + baseVal: number; +} +declare var SVGAnimatedNumber: { + prototype: SVGAnimatedNumber; + new(): SVGAnimatedNumber; +} + +interface PerformanceTiming { + redirectStart: number; + domainLookupEnd: number; + responseStart: number; + domComplete: number; + domainLookupStart: number; + loadEventStart: number; + msFirstPaint: number; + unloadEventEnd: number; + fetchStart: number; + requestStart: number; + domInteractive: number; + navigationStart: number; + connectEnd: number; + loadEventEnd: number; + connectStart: number; + responseEnd: number; + domLoading: number; + redirectEnd: number; + unloadEventStart: number; + domContentLoadedEventStart: number; + domContentLoadedEventEnd: number; + toJSON(): any; +} +declare var PerformanceTiming: { + prototype: PerformanceTiming; + new(): PerformanceTiming; +} + +interface HTMLPreElement extends HTMLElement, DOML2DeprecatedTextFlowControl { + /** + * Sets or gets a value that you can use to implement your own width functionality for the object. + */ + width: number; + /** + * Indicates a citation by rendering text in italic type. + */ + cite: string; +} +declare var HTMLPreElement: { + prototype: HTMLPreElement; + new(): HTMLPreElement; +} + +interface EventException { + code: number; + message: string; + name: string; + toString(): string; + DISPATCH_REQUEST_ERR: number; + UNSPECIFIED_EVENT_TYPE_ERR: number; +} +declare var EventException: { + prototype: EventException; + new(): EventException; + DISPATCH_REQUEST_ERR: number; + UNSPECIFIED_EVENT_TYPE_ERR: number; +} + +interface MSNavigatorDoNotTrack { + msDoNotTrack: string; + removeSiteSpecificTrackingException(args: ExceptionInformation): void; + removeWebWideTrackingException(args: ExceptionInformation): void; + storeWebWideTrackingException(args: StoreExceptionsInformation): void; + storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void; + confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean; + confirmWebWideTrackingException(args: ExceptionInformation): boolean; +} + +interface NavigatorOnLine { + onLine: boolean; +} + +interface WindowLocalStorage { + localStorage: Storage; +} + +interface SVGMetadataElement extends SVGElement { +} +declare var SVGMetadataElement: { + prototype: SVGMetadataElement; + new(): SVGMetadataElement; +} + +interface SVGPathSegArcRel extends SVGPathSeg { + y: number; + sweepFlag: boolean; + r2: number; + x: number; + angle: number; + r1: number; + largeArcFlag: boolean; +} +declare var SVGPathSegArcRel: { + prototype: SVGPathSegArcRel; + new(): SVGPathSegArcRel; +} + +interface SVGPathSegMovetoAbs extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegMovetoAbs: { + prototype: SVGPathSegMovetoAbs; + new(): SVGPathSegMovetoAbs; +} + +interface SVGStringList { + numberOfItems: number; + replaceItem(newItem: string, index: number): string; + getItem(index: number): string; + clear(): void; + appendItem(newItem: string): string; + initialize(newItem: string): string; + removeItem(index: number): string; + insertItemBefore(newItem: string, index: number): string; +} +declare var SVGStringList: { + prototype: SVGStringList; + new(): SVGStringList; +} + +interface XDomainRequest { + timeout: number; + onerror: (ev: ErrorEvent) => any; + onload: (ev: Event) => any; + onprogress: (ev: ProgressEvent) => any; + ontimeout: (ev: Event) => any; + responseText: string; + contentType: string; + open(method: string, url: string): void; + abort(): void; + send(data?: any): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var XDomainRequest: { + prototype: XDomainRequest; + new(): XDomainRequest; + create(): XDomainRequest; +} + +interface DOML2DeprecatedBackgroundColorStyle { + bgColor: any; +} + +interface ElementTraversal { + childElementCount: number; + previousElementSibling: Element; + lastElementChild: Element; + nextElementSibling: Element; + firstElementChild: Element; +} + +interface SVGLength { + valueAsString: string; + valueInSpecifiedUnits: number; + value: number; + unitType: number; + newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void; + convertToSpecifiedUnits(unitType: number): void; + SVG_LENGTHTYPE_NUMBER: number; + SVG_LENGTHTYPE_CM: number; + SVG_LENGTHTYPE_PC: number; + SVG_LENGTHTYPE_PERCENTAGE: number; + SVG_LENGTHTYPE_MM: number; + SVG_LENGTHTYPE_PT: number; + SVG_LENGTHTYPE_IN: number; + SVG_LENGTHTYPE_EMS: number; + SVG_LENGTHTYPE_PX: number; + SVG_LENGTHTYPE_UNKNOWN: number; + SVG_LENGTHTYPE_EXS: number; +} +declare var SVGLength: { + prototype: SVGLength; + new(): SVGLength; + SVG_LENGTHTYPE_NUMBER: number; + SVG_LENGTHTYPE_CM: number; + SVG_LENGTHTYPE_PC: number; + SVG_LENGTHTYPE_PERCENTAGE: number; + SVG_LENGTHTYPE_MM: number; + SVG_LENGTHTYPE_PT: number; + SVG_LENGTHTYPE_IN: number; + SVG_LENGTHTYPE_EMS: number; + SVG_LENGTHTYPE_PX: number; + SVG_LENGTHTYPE_UNKNOWN: number; + SVG_LENGTHTYPE_EXS: number; +} + +interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired { +} +declare var SVGPolygonElement: { + prototype: SVGPolygonElement; + new(): SVGPolygonElement; +} + +interface HTMLPhraseElement extends HTMLElement { + /** + * Sets or retrieves the date and time of a modification to the object. + */ + dateTime: string; + /** + * Sets or retrieves reference information about the object. + */ + cite: string; +} +declare var HTMLPhraseElement: { + prototype: HTMLPhraseElement; + new(): HTMLPhraseElement; +} + +interface NavigatorStorageUtils { +} + +interface SVGPathSegCurvetoCubicRel extends SVGPathSeg { + y: number; + y1: number; + x2: number; + x: number; + x1: number; + y2: number; +} +declare var SVGPathSegCurvetoCubicRel: { + prototype: SVGPathSegCurvetoCubicRel; + new(): SVGPathSegCurvetoCubicRel; +} + +interface SVGTextContentElement extends SVGElement, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + textLength: SVGAnimatedLength; + lengthAdjust: SVGAnimatedEnumeration; + getCharNumAtPosition(point: SVGPoint): number; + getStartPositionOfChar(charnum: number): SVGPoint; + getExtentOfChar(charnum: number): SVGRect; + getComputedTextLength(): number; + getSubStringLength(charnum: number, nchars: number): number; + selectSubString(charnum: number, nchars: number): void; + getNumberOfChars(): number; + getRotationOfChar(charnum: number): number; + getEndPositionOfChar(charnum: number): SVGPoint; + LENGTHADJUST_SPACING: number; + LENGTHADJUST_SPACINGANDGLYPHS: number; + LENGTHADJUST_UNKNOWN: number; +} +declare var SVGTextContentElement: { + prototype: SVGTextContentElement; + new(): SVGTextContentElement; + LENGTHADJUST_SPACING: number; + LENGTHADJUST_SPACINGANDGLYPHS: number; + LENGTHADJUST_UNKNOWN: number; +} + +interface DOML2DeprecatedColorProperty { + color: string; +} + +interface Location { + hash: string; + protocol: string; + search: string; + href: string; + hostname: string; + port: string; + pathname: string; + host: string; + reload(flag?: boolean): void; + replace(url: string): void; + assign(url: string): void; + toString(): string; +} +declare var Location: { + prototype: Location; + new(): Location; +} + +interface HTMLTitleElement extends HTMLElement { + /** + * Retrieves or sets the text of the object as a string. + */ + text: string; +} +declare var HTMLTitleElement: { + prototype: HTMLTitleElement; + new(): HTMLTitleElement; +} + +interface HTMLStyleElement extends HTMLElement, LinkStyle { + /** + * Sets or retrieves the media type. + */ + media: string; + /** + * Retrieves the CSS language in which the style sheet is written. + */ + type: string; +} +declare var HTMLStyleElement: { + prototype: HTMLStyleElement; + new(): HTMLStyleElement; +} + +interface PerformanceEntry { + name: string; + startTime: number; + duration: number; + entryType: string; +} +declare var PerformanceEntry: { + prototype: PerformanceEntry; + new(): PerformanceEntry; +} + +interface SVGTransform { + type: number; + angle: number; + matrix: SVGMatrix; + setTranslate(tx: number, ty: number): void; + setScale(sx: number, sy: number): void; + setMatrix(matrix: SVGMatrix): void; + setSkewY(angle: number): void; + setRotate(angle: number, cx: number, cy: number): void; + setSkewX(angle: number): void; + SVG_TRANSFORM_SKEWX: number; + SVG_TRANSFORM_UNKNOWN: number; + SVG_TRANSFORM_SCALE: number; + SVG_TRANSFORM_TRANSLATE: number; + SVG_TRANSFORM_MATRIX: number; + SVG_TRANSFORM_ROTATE: number; + SVG_TRANSFORM_SKEWY: number; +} +declare var SVGTransform: { + prototype: SVGTransform; + new(): SVGTransform; + SVG_TRANSFORM_SKEWX: number; + SVG_TRANSFORM_UNKNOWN: number; + SVG_TRANSFORM_SCALE: number; + SVG_TRANSFORM_TRANSLATE: number; + SVG_TRANSFORM_MATRIX: number; + SVG_TRANSFORM_ROTATE: number; + SVG_TRANSFORM_SKEWY: number; +} + +interface UIEvent extends Event { + detail: number; + view: Window; + initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void; +} +declare var UIEvent: { + prototype: UIEvent; + new(): UIEvent; +} + +interface SVGURIReference { + href: SVGAnimatedString; +} + +interface SVGPathSeg { + pathSegType: number; + pathSegTypeAsLetter: string; + PATHSEG_MOVETO_REL: number; + PATHSEG_LINETO_VERTICAL_REL: number; + PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number; + PATHSEG_CURVETO_QUADRATIC_REL: number; + PATHSEG_CURVETO_CUBIC_ABS: number; + PATHSEG_LINETO_HORIZONTAL_ABS: number; + PATHSEG_CURVETO_QUADRATIC_ABS: number; + PATHSEG_LINETO_ABS: number; + PATHSEG_CLOSEPATH: number; + PATHSEG_LINETO_HORIZONTAL_REL: number; + PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number; + PATHSEG_LINETO_REL: number; + PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number; + PATHSEG_ARC_REL: number; + PATHSEG_CURVETO_CUBIC_REL: number; + PATHSEG_UNKNOWN: number; + PATHSEG_LINETO_VERTICAL_ABS: number; + PATHSEG_ARC_ABS: number; + PATHSEG_MOVETO_ABS: number; + PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number; +} +declare var SVGPathSeg: { + prototype: SVGPathSeg; + new(): SVGPathSeg; + PATHSEG_MOVETO_REL: number; + PATHSEG_LINETO_VERTICAL_REL: number; + PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number; + PATHSEG_CURVETO_QUADRATIC_REL: number; + PATHSEG_CURVETO_CUBIC_ABS: number; + PATHSEG_LINETO_HORIZONTAL_ABS: number; + PATHSEG_CURVETO_QUADRATIC_ABS: number; + PATHSEG_LINETO_ABS: number; + PATHSEG_CLOSEPATH: number; + PATHSEG_LINETO_HORIZONTAL_REL: number; + PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number; + PATHSEG_LINETO_REL: number; + PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number; + PATHSEG_ARC_REL: number; + PATHSEG_CURVETO_CUBIC_REL: number; + PATHSEG_UNKNOWN: number; + PATHSEG_LINETO_VERTICAL_ABS: number; + PATHSEG_ARC_ABS: number; + PATHSEG_MOVETO_ABS: number; + PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number; +} + +interface WheelEvent extends MouseEvent { + deltaZ: number; + deltaX: number; + deltaMode: number; + deltaY: number; + initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void; + getCurrentPoint(element: Element): void; + DOM_DELTA_PIXEL: number; + DOM_DELTA_LINE: number; + DOM_DELTA_PAGE: number; +} +declare var WheelEvent: { + prototype: WheelEvent; + new(): WheelEvent; + DOM_DELTA_PIXEL: number; + DOM_DELTA_LINE: number; + DOM_DELTA_PAGE: number; +} + +interface MSEventAttachmentTarget { + attachEvent(event: string, listener: EventListener): boolean; + detachEvent(event: string, listener: EventListener): void; +} + +interface SVGNumber { + value: number; +} +declare var SVGNumber: { + prototype: SVGNumber; + new(): SVGNumber; +} + +interface SVGPathElement extends SVGElement, SVGStylable, SVGAnimatedPathData, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + getPathSegAtLength(distance: number): number; + getPointAtLength(distance: number): SVGPoint; + createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs; + createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel; + createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel; + createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs; + createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs; + createSVGPathSegClosePath(): SVGPathSegClosePath; + createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel; + createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel; + createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel; + createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs; + createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs; + createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel; + createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel; + createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs; + createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel; + getTotalLength(): number; + createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel; + createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs; + createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs; + createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs; +} +declare var SVGPathElement: { + prototype: SVGPathElement; + new(): SVGPathElement; +} + +interface MSCompatibleInfo { + version: string; + userAgent: string; +} +declare var MSCompatibleInfo: { + prototype: MSCompatibleInfo; + new(): MSCompatibleInfo; +} + +interface Text extends CharacterData, MSNodeExtensions { + wholeText: string; + splitText(offset: number): Text; + replaceWholeText(content: string): Text; +} +declare var Text: { + prototype: Text; + new(): Text; +} + +interface SVGAnimatedRect { + animVal: SVGRect; + baseVal: SVGRect; +} +declare var SVGAnimatedRect: { + prototype: SVGAnimatedRect; + new(): SVGAnimatedRect; +} + +interface CSSNamespaceRule extends CSSRule { + namespaceURI: string; + prefix: string; +} +declare var CSSNamespaceRule: { + prototype: CSSNamespaceRule; + new(): CSSNamespaceRule; +} + +interface SVGPathSegList { + numberOfItems: number; + replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg; + getItem(index: number): SVGPathSeg; + clear(): void; + appendItem(newItem: SVGPathSeg): SVGPathSeg; + initialize(newItem: SVGPathSeg): SVGPathSeg; + removeItem(index: number): SVGPathSeg; + insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg; +} +declare var SVGPathSegList: { + prototype: SVGPathSegList; + new(): SVGPathSegList; +} + +interface HTMLUnknownElement extends HTMLElement, MSDataBindingRecordSetReadonlyExtensions { +} +declare var HTMLUnknownElement: { + prototype: HTMLUnknownElement; + new(): HTMLUnknownElement; +} + +interface HTMLAudioElement extends HTMLMediaElement { +} +declare var HTMLAudioElement: { + prototype: HTMLAudioElement; + new(): HTMLAudioElement; +} + +interface MSImageResourceExtensions { + dynsrc: string; + vrml: string; + lowsrc: string; + start: string; + loop: number; +} + +interface PositionError { + code: number; + message: string; + toString(): string; + POSITION_UNAVAILABLE: number; + PERMISSION_DENIED: number; + TIMEOUT: number; +} +declare var PositionError: { + prototype: PositionError; + new(): PositionError; + POSITION_UNAVAILABLE: number; + PERMISSION_DENIED: number; + TIMEOUT: number; +} + +interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle { + /** + * Sets or retrieves the width of the object. + */ + width: number; + /** + * Sets or retrieves a list of header cells that provide information for the object. + */ + headers: string; + /** + * Retrieves the position of the object in the cells collection of a row. + */ + cellIndex: number; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorLight: any; + /** + * Sets or retrieves the number columns in the table that the object should span. + */ + colSpan: number; + /** + * Sets or retrieves the border color of the object. + */ + borderColor: any; + /** + * Sets or retrieves a comma-delimited list of conceptual categories associated with the object. + */ + axis: string; + /** + * Sets or retrieves the height of the object. + */ + height: any; + /** + * Sets or retrieves whether the browser automatically performs wordwrap. + */ + noWrap: boolean; + /** + * Sets or retrieves abbreviated text for the object. + */ + abbr: string; + /** + * Sets or retrieves how many rows in a table the cell should span. + */ + rowSpan: number; + /** + * Sets or retrieves the group of cells in a table to which the object's information applies. + */ + scope: string; + /** + * Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object. + */ + borderColorDark: any; +} +declare var HTMLTableCellElement: { + prototype: HTMLTableCellElement; + new(): HTMLTableCellElement; +} + +interface SVGElementInstance extends EventTarget { + previousSibling: SVGElementInstance; + parentNode: SVGElementInstance; + lastChild: SVGElementInstance; + nextSibling: SVGElementInstance; + childNodes: SVGElementInstanceList; + correspondingUseElement: SVGUseElement; + correspondingElement: SVGElement; + firstChild: SVGElementInstance; +} +declare var SVGElementInstance: { + prototype: SVGElementInstance; + new(): SVGElementInstance; +} + +interface MSNamespaceInfoCollection { + length: number; + add(namespace?: string, urn?: string, implementationUrl?: any): any; + item(index: any): any; + // [index: any]: any; +} +declare var MSNamespaceInfoCollection: { + prototype: MSNamespaceInfoCollection; + new(): MSNamespaceInfoCollection; +} + +interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + cx: SVGAnimatedLength; + r: SVGAnimatedLength; + cy: SVGAnimatedLength; +} +declare var SVGCircleElement: { + prototype: SVGCircleElement; + new(): SVGCircleElement; +} + +interface StyleSheetList { + length: number; + item(index?: number): StyleSheet; + [index: number]: StyleSheet; +} +declare var StyleSheetList: { + prototype: StyleSheetList; + new(): StyleSheetList; +} + +interface CSSImportRule extends CSSRule { + styleSheet: CSSStyleSheet; + href: string; + media: MediaList; +} +declare var CSSImportRule: { + prototype: CSSImportRule; + new(): CSSImportRule; +} + +interface CustomEvent extends Event { + detail: any; + initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void; +} +declare var CustomEvent: { + prototype: CustomEvent; + new(): CustomEvent; +} + +interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty { + /** + * Sets or retrieves the current typeface family. + */ + face: string; + /** + * Sets or retrieves the font size of the object. + */ + size: number; +} +declare var HTMLBaseFontElement: { + prototype: HTMLBaseFontElement; + new(): HTMLBaseFontElement; +} + +interface HTMLTextAreaElement extends HTMLElement, MSDataBindingExtensions { + /** + * Retrieves or sets the text in the entry field of the textArea element. + */ + value: string; + /** + * Sets or retrieves the value indicating whether the control is selected. + */ + status: any; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Gets or sets the starting position or offset of a text selection. + */ + selectionStart: number; + /** + * Sets or retrieves the number of horizontal rows contained in the object. + */ + rows: number; + /** + * Sets or retrieves the width of the object. + */ + cols: number; + /** + * Sets or retrieves the value indicated whether the content of the object is read-only. + */ + readOnly: boolean; + /** + * Sets or retrieves how to handle wordwrapping in the object. + */ + wrap: string; + /** + * Gets or sets the end position or offset of a text selection. + */ + selectionEnd: number; + /** + * Retrieves the type of control. + */ + type: string; + /** + * Sets or retrieves the initial contents of the object. + */ + defaultValue: string; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing. + */ + autofocus: boolean; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * When present, marks an element that can't be submitted without a value. + */ + required: boolean; + /** + * Sets or retrieves the maximum number of characters that the user can enter in a text control. + */ + maxLength: number; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. + */ + placeholder: string; + /** + * Creates a TextRange object for the element. + */ + createTextRange(): TextRange; + /** + * Sets the start and end positions of a selection in a text field. + * @param start The offset into the text field for the start of the selection. + * @param end The offset into the text field for the end of the selection. + */ + setSelectionRange(start: number, end: number): void; + /** + * Highlights the input area of a form element. + */ + select(): void; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLTextAreaElement: { + prototype: HTMLTextAreaElement; + new(): HTMLTextAreaElement; +} + +interface Geolocation { + clearWatch(watchId: number): void; + getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void; + watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number; +} +declare var Geolocation: { + prototype: Geolocation; + new(): Geolocation; +} + +interface DOML2DeprecatedMarginStyle { + vspace: number; + hspace: number; +} + +interface MSWindowModeless { + dialogTop: any; + dialogLeft: any; + dialogWidth: any; + dialogHeight: any; + menuArguments: any; +} + +interface DOML2DeprecatedAlignmentStyle { + align: string; +} + +interface HTMLMarqueeElement extends HTMLElement, MSDataBindingExtensions, DOML2DeprecatedBackgroundColorStyle { + width: string; + onbounce: (ev: Event) => any; + vspace: number; + trueSpeed: boolean; + scrollAmount: number; + scrollDelay: number; + behavior: string; + height: string; + loop: number; + direction: string; + hspace: number; + onstart: (ev: Event) => any; + onfinish: (ev: Event) => any; + stop(): void; + start(): void; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLMarqueeElement: { + prototype: HTMLMarqueeElement; + new(): HTMLMarqueeElement; +} + +interface SVGRect { + y: number; + width: number; + x: number; + height: number; +} +declare var SVGRect: { + prototype: SVGRect; + new(): SVGRect; +} + +interface MSNodeExtensions { + swapNode(otherNode: Node): Node; + removeNode(deep?: boolean): Node; + replaceNode(replacement: Node): Node; +} + +interface History { + length: number; + state: any; + back(distance?: any): void; + forward(distance?: any): void; + go(delta?: any): void; + replaceState(statedata: any, title: string, url?: string): void; + pushState(statedata: any, title: string, url?: string): void; +} +declare var History: { + prototype: History; + new(): History; +} + +interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg { + y: number; + y1: number; + x2: number; + x: number; + x1: number; + y2: number; +} +declare var SVGPathSegCurvetoCubicAbs: { + prototype: SVGPathSegCurvetoCubicAbs; + new(): SVGPathSegCurvetoCubicAbs; +} + +interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg { + y: number; + y1: number; + x: number; + x1: number; +} +declare var SVGPathSegCurvetoQuadraticAbs: { + prototype: SVGPathSegCurvetoQuadraticAbs; + new(): SVGPathSegCurvetoQuadraticAbs; +} + +interface TimeRanges { + length: number; + start(index: number): number; + end(index: number): number; +} +declare var TimeRanges: { + prototype: TimeRanges; + new(): TimeRanges; +} + +interface CSSRule { + cssText: string; + parentStyleSheet: CSSStyleSheet; + parentRule: CSSRule; + type: number; + IMPORT_RULE: number; + MEDIA_RULE: number; + STYLE_RULE: number; + NAMESPACE_RULE: number; + PAGE_RULE: number; + UNKNOWN_RULE: number; + FONT_FACE_RULE: number; + CHARSET_RULE: number; + KEYFRAMES_RULE: number; + KEYFRAME_RULE: number; + VIEWPORT_RULE: number; +} +declare var CSSRule: { + prototype: CSSRule; + new(): CSSRule; + IMPORT_RULE: number; + MEDIA_RULE: number; + STYLE_RULE: number; + NAMESPACE_RULE: number; + PAGE_RULE: number; + UNKNOWN_RULE: number; + FONT_FACE_RULE: number; + CHARSET_RULE: number; + KEYFRAMES_RULE: number; + KEYFRAME_RULE: number; + VIEWPORT_RULE: number; +} + +interface SVGPathSegLinetoAbs extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegLinetoAbs: { + prototype: SVGPathSegLinetoAbs; + new(): SVGPathSegLinetoAbs; +} + +interface HTMLModElement extends HTMLElement { + /** + * Sets or retrieves the date and time of a modification to the object. + */ + dateTime: string; + /** + * Sets or retrieves reference information about the object. + */ + cite: string; +} +declare var HTMLModElement: { + prototype: HTMLModElement; + new(): HTMLModElement; +} + +interface SVGMatrix { + e: number; + c: number; + a: number; + b: number; + d: number; + f: number; + multiply(secondMatrix: SVGMatrix): SVGMatrix; + flipY(): SVGMatrix; + skewY(angle: number): SVGMatrix; + inverse(): SVGMatrix; + scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix; + rotate(angle: number): SVGMatrix; + flipX(): SVGMatrix; + translate(x: number, y: number): SVGMatrix; + scale(scaleFactor: number): SVGMatrix; + rotateFromVector(x: number, y: number): SVGMatrix; + skewX(angle: number): SVGMatrix; +} +declare var SVGMatrix: { + prototype: SVGMatrix; + new(): SVGMatrix; +} + +interface MSPopupWindow { + document: Document; + isOpen: boolean; + show(x: number, y: number, w: number, h: number, element?: any): void; + hide(): void; +} +declare var MSPopupWindow: { + prototype: MSPopupWindow; + new(): MSPopupWindow; +} + +interface BeforeUnloadEvent extends Event { + returnValue: string; +} +declare var BeforeUnloadEvent: { + prototype: BeforeUnloadEvent; + new(): BeforeUnloadEvent; +} + +interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + animatedInstanceRoot: SVGElementInstance; + instanceRoot: SVGElementInstance; + x: SVGAnimatedLength; + height: SVGAnimatedLength; +} +declare var SVGUseElement: { + prototype: SVGUseElement; + new(): SVGUseElement; +} + +interface Event { + timeStamp: number; + defaultPrevented: boolean; + isTrusted: boolean; + currentTarget: EventTarget; + cancelBubble: boolean; + target: EventTarget; + eventPhase: number; + cancelable: boolean; + type: string; + srcElement: Element; + bubbles: boolean; + initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void; + stopPropagation(): void; + stopImmediatePropagation(): void; + preventDefault(): void; + CAPTURING_PHASE: number; + AT_TARGET: number; + BUBBLING_PHASE: number; +} +declare var Event: { + prototype: Event; + new(): Event; + CAPTURING_PHASE: number; + AT_TARGET: number; + BUBBLING_PHASE: number; +} + +interface ImageData { + width: number; + data: number[]; + height: number; +} +declare var ImageData: { + prototype: ImageData; + new(): ImageData; +} + +interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment { + /** + * Sets or retrieves the width of the object. + */ + width: any; + /** + * Sets or retrieves the alignment of the object relative to the display or table. + */ + align: string; + /** + * Sets or retrieves the number of columns in the group. + */ + span: number; +} +declare var HTMLTableColElement: { + prototype: HTMLTableColElement; + new(): HTMLTableColElement; +} + +interface SVGException { + code: number; + message: string; + name: string; + toString(): string; + SVG_MATRIX_NOT_INVERTABLE: number; + SVG_WRONG_TYPE_ERR: number; + SVG_INVALID_VALUE_ERR: number; +} +declare var SVGException: { + prototype: SVGException; + new(): SVGException; + SVG_MATRIX_NOT_INVERTABLE: number; + SVG_WRONG_TYPE_ERR: number; + SVG_INVALID_VALUE_ERR: number; +} + +interface SVGLinearGradientElement extends SVGGradientElement { + y1: SVGAnimatedLength; + x2: SVGAnimatedLength; + x1: SVGAnimatedLength; + y2: SVGAnimatedLength; +} +declare var SVGLinearGradientElement: { + prototype: SVGLinearGradientElement; + new(): SVGLinearGradientElement; +} + +interface HTMLTableAlignment { + /** + * Sets or retrieves a value that you can use to implement your own ch functionality for the object. + */ + ch: string; + /** + * Sets or retrieves how text and other content are vertically aligned within the object that contains them. + */ + vAlign: string; + /** + * Sets or retrieves a value that you can use to implement your own chOff functionality for the object. + */ + chOff: string; +} + +interface SVGAnimatedEnumeration { + animVal: number; + baseVal: number; +} +declare var SVGAnimatedEnumeration: { + prototype: SVGAnimatedEnumeration; + new(): SVGAnimatedEnumeration; +} + +interface DOML2DeprecatedSizeProperty { + size: number; +} + +interface HTMLUListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle { +} +declare var HTMLUListElement: { + prototype: HTMLUListElement; + new(): HTMLUListElement; +} + +interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + ry: SVGAnimatedLength; + rx: SVGAnimatedLength; + x: SVGAnimatedLength; + height: SVGAnimatedLength; +} +declare var SVGRectElement: { + prototype: SVGRectElement; + new(): SVGRectElement; +} + +interface ErrorEventHandler { + (event: Event, source: string, fileno: number, columnNumber: number): void; +} + +interface HTMLDivElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Sets or retrieves whether the browser automatically performs wordwrap. + */ + noWrap: boolean; +} +declare var HTMLDivElement: { + prototype: HTMLDivElement; + new(): HTMLDivElement; +} + +interface DOML2DeprecatedBorderStyle { + border: string; +} + +interface NamedNodeMap { + length: number; + removeNamedItemNS(namespaceURI: string, localName: string): Attr; + item(index: number): Attr; + [index: number]: Attr; + removeNamedItem(name: string): Attr; + getNamedItem(name: string): Attr; + // [name: string]: Attr; + setNamedItem(arg: Attr): Attr; + getNamedItemNS(namespaceURI: string, localName: string): Attr; + setNamedItemNS(arg: Attr): Attr; +} +declare var NamedNodeMap: { + prototype: NamedNodeMap; + new(): NamedNodeMap; +} + +interface MediaList { + length: number; + mediaText: string; + deleteMedium(oldMedium: string): void; + appendMedium(newMedium: string): void; + item(index: number): string; + [index: number]: string; + toString(): string; +} +declare var MediaList: { + prototype: MediaList; + new(): MediaList; +} + +interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegCurvetoQuadraticSmoothAbs: { + prototype: SVGPathSegCurvetoQuadraticSmoothAbs; + new(): SVGPathSegCurvetoQuadraticSmoothAbs; +} + +interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg { + y: number; + x2: number; + x: number; + y2: number; +} +declare var SVGPathSegCurvetoCubicSmoothRel: { + prototype: SVGPathSegCurvetoCubicSmoothRel; + new(): SVGPathSegCurvetoCubicSmoothRel; +} + +interface SVGLengthList { + numberOfItems: number; + replaceItem(newItem: SVGLength, index: number): SVGLength; + getItem(index: number): SVGLength; + clear(): void; + appendItem(newItem: SVGLength): SVGLength; + initialize(newItem: SVGLength): SVGLength; + removeItem(index: number): SVGLength; + insertItemBefore(newItem: SVGLength, index: number): SVGLength; +} +declare var SVGLengthList: { + prototype: SVGLengthList; + new(): SVGLengthList; +} + +interface ProcessingInstruction extends Node { + target: string; + data: string; +} +declare var ProcessingInstruction: { + prototype: ProcessingInstruction; + new(): ProcessingInstruction; +} + +interface MSWindowExtensions { + status: string; + onmouseleave: (ev: MouseEvent) => any; + screenLeft: number; + offscreenBuffering: any; + maxConnectionsPerServer: number; + onmouseenter: (ev: MouseEvent) => any; + clipboardData: DataTransfer; + defaultStatus: string; + clientInformation: Navigator; + closed: boolean; + onhelp: (ev: Event) => any; + external: External; + event: MSEventObj; + onfocusout: (ev: FocusEvent) => any; + screenTop: number; + onfocusin: (ev: FocusEvent) => any; + showModelessDialog(url?: string, argument?: any, options?: any): Window; + navigate(url: string): void; + resizeBy(x?: number, y?: number): void; + item(index: any): any; + resizeTo(x?: number, y?: number): void; + createPopup(arguments?: any): MSPopupWindow; + toStaticHTML(html: string): string; + execScript(code: string, language?: string): any; + msWriteProfilerMark(profilerMarkName: string): void; + moveTo(x?: number, y?: number): void; + moveBy(x?: number, y?: number): void; + showHelp(url: string, helpArg?: any, features?: string): void; + captureEvents(): void; + releaseEvents(): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} + +interface MSBehaviorUrnsCollection { + length: number; + item(index: number): string; +} +declare var MSBehaviorUrnsCollection: { + prototype: MSBehaviorUrnsCollection; + new(): MSBehaviorUrnsCollection; +} + +interface CSSFontFaceRule extends CSSRule { + style: CSSStyleDeclaration; +} +declare var CSSFontFaceRule: { + prototype: CSSFontFaceRule; + new(): CSSFontFaceRule; +} + +interface DOML2DeprecatedBackgroundStyle { + background: string; +} + +interface TextEvent extends UIEvent { + inputMethod: number; + data: string; + locale: string; + initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void; + DOM_INPUT_METHOD_KEYBOARD: number; + DOM_INPUT_METHOD_DROP: number; + DOM_INPUT_METHOD_IME: number; + DOM_INPUT_METHOD_SCRIPT: number; + DOM_INPUT_METHOD_VOICE: number; + DOM_INPUT_METHOD_UNKNOWN: number; + DOM_INPUT_METHOD_PASTE: number; + DOM_INPUT_METHOD_HANDWRITING: number; + DOM_INPUT_METHOD_OPTION: number; + DOM_INPUT_METHOD_MULTIMODAL: number; +} +declare var TextEvent: { + prototype: TextEvent; + new(): TextEvent; + DOM_INPUT_METHOD_KEYBOARD: number; + DOM_INPUT_METHOD_DROP: number; + DOM_INPUT_METHOD_IME: number; + DOM_INPUT_METHOD_SCRIPT: number; + DOM_INPUT_METHOD_VOICE: number; + DOM_INPUT_METHOD_UNKNOWN: number; + DOM_INPUT_METHOD_PASTE: number; + DOM_INPUT_METHOD_HANDWRITING: number; + DOM_INPUT_METHOD_OPTION: number; + DOM_INPUT_METHOD_MULTIMODAL: number; +} + +interface DocumentFragment extends Node, NodeSelector, MSEventAttachmentTarget, MSNodeExtensions { +} +declare var DocumentFragment: { + prototype: DocumentFragment; + new(): DocumentFragment; +} + +interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired { +} +declare var SVGPolylineElement: { + prototype: SVGPolylineElement; + new(): SVGPolylineElement; +} + +interface SVGAnimatedPathData { + pathSegList: SVGPathSegList; +} + +interface Position { + timestamp: Date; + coords: Coordinates; +} +declare var Position: { + prototype: Position; + new(): Position; +} + +interface BookmarkCollection { + length: number; + item(index: number): any; + [index: number]: any; +} +declare var BookmarkCollection: { + prototype: BookmarkCollection; + new(): BookmarkCollection; +} + +interface PerformanceMark extends PerformanceEntry { +} +declare var PerformanceMark: { + prototype: PerformanceMark; + new(): PerformanceMark; +} + +interface CSSPageRule extends CSSRule { + pseudoClass: string; + selectorText: string; + selector: string; + style: CSSStyleDeclaration; +} +declare var CSSPageRule: { + prototype: CSSPageRule; + new(): CSSPageRule; +} + +interface HTMLBRElement extends HTMLElement { + /** + * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document. + */ + clear: string; +} +declare var HTMLBRElement: { + prototype: HTMLBRElement; + new(): HTMLBRElement; +} + +interface MSNavigatorExtensions { + userLanguage: string; + plugins: MSPluginsCollection; + cookieEnabled: boolean; + appCodeName: string; + cpuClass: string; + appMinorVersion: string; + connectionSpeed: number; + browserLanguage: string; + mimeTypes: MSMimeTypesCollection; + systemLanguage: string; + language: string; + javaEnabled(): boolean; + taintEnabled(): boolean; +} + +interface HTMLSpanElement extends HTMLElement, MSDataBindingExtensions { +} +declare var HTMLSpanElement: { + prototype: HTMLSpanElement; + new(): HTMLSpanElement; +} + +interface HTMLHeadElement extends HTMLElement { + profile: string; +} +declare var HTMLHeadElement: { + prototype: HTMLHeadElement; + new(): HTMLHeadElement; +} + +interface HTMLHeadingElement extends HTMLElement, DOML2DeprecatedTextFlowControl { + /** + * Sets or retrieves a value that indicates the table alignment. + */ + align: string; +} +declare var HTMLHeadingElement: { + prototype: HTMLHeadingElement; + new(): HTMLHeadingElement; +} + +interface HTMLFormElement extends HTMLElement, MSHTMLCollectionExtensions { + /** + * Sets or retrieves the number of objects in a collection. + */ + length: number; + /** + * Sets or retrieves the window or frame at which to target content. + */ + target: string; + /** + * Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form. + */ + acceptCharset: string; + /** + * Sets or retrieves the encoding type for the form. + */ + enctype: string; + /** + * Retrieves a collection, in source order, of all controls in a given form. + */ + elements: HTMLCollection; + /** + * Sets or retrieves the URL to which the form content is sent for processing. + */ + action: string; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Sets or retrieves how to send the form data to the server. + */ + method: string; + /** + * Sets or retrieves the MIME encoding for the form. + */ + encoding: string; + /** + * Specifies whether autocomplete is applied to an editable text field. + */ + autocomplete: string; + /** + * Designates a form that is not validated when submitted. + */ + noValidate: boolean; + /** + * Fires when the user resets a form. + */ + reset(): void; + /** + * Retrieves a form object or an object from an elements collection. + * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made. + * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned. + */ + item(name?: any, index?: any): any; + /** + * Fires when a FORM is about to be submitted. + */ + submit(): void; + /** + * Retrieves a form object or an object from an elements collection. + */ + namedItem(name: string): any; + [name: string]: any; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; +} +declare var HTMLFormElement: { + prototype: HTMLFormElement; + new(): HTMLFormElement; +} + +interface SVGZoomAndPan { + zoomAndPan: number; + SVG_ZOOMANDPAN_MAGNIFY: number; + SVG_ZOOMANDPAN_UNKNOWN: number; + SVG_ZOOMANDPAN_DISABLE: number; +} +declare var SVGZoomAndPan: SVGZoomAndPan; + +interface HTMLMediaElement extends HTMLElement { + /** + * Gets the earliest possible position, in seconds, that the playback can begin. + */ + initialTime: number; + /** + * Gets TimeRanges for the current media resource that has been played. + */ + played: TimeRanges; + /** + * Gets the address or URL of the current media resource that is selected by IHTMLMediaElement. + */ + currentSrc: string; + readyState: any; + /** + * The autobuffer element is not supported by Internet Explorer 9. Use the preload element instead. + */ + autobuffer: boolean; + /** + * Gets or sets a flag to specify whether playback should restart after it completes. + */ + loop: boolean; + /** + * Gets information about whether the playback has ended or not. + */ + ended: boolean; + /** + * Gets a collection of buffered time ranges. + */ + buffered: TimeRanges; + /** + * Returns an object representing the current error state of the audio or video element. + */ + error: MediaError; + /** + * Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked. + */ + seekable: TimeRanges; + /** + * Gets or sets a value that indicates whether to start playing the media automatically. + */ + autoplay: boolean; + /** + * Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player). + */ + controls: boolean; + /** + * Gets or sets the volume level for audio portions of the media element. + */ + volume: number; + /** + * The address or URL of the a media resource that is to be considered. + */ + src: string; + /** + * Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource. + */ + playbackRate: number; + /** + * Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming. + */ + duration: number; + /** + * Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted. + */ + muted: boolean; + /** + * Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource. + */ + defaultPlaybackRate: number; + /** + * Gets a flag that specifies whether playback is paused. + */ + paused: boolean; + /** + * Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource. + */ + seeking: boolean; + /** + * Gets or sets the current playback position, in seconds. + */ + currentTime: number; + /** + * Gets or sets the current playback position, in seconds. + */ + preload: string; + /** + * Gets the current network activity for the element. + */ + networkState: number; + /** + * Specifies the purpose of the audio or video media, such as background audio or alerts. + */ + msAudioCategory: string; + /** + * Specifies whether or not to enable low-latency playback on the media element. + */ + msRealTime: boolean; + /** + * Gets or sets the primary DLNA PlayTo device. + */ + msPlayToPrimary: boolean; + textTracks: TextTrackList; + /** + * Gets or sets whether the DLNA PlayTo device is available. + */ + msPlayToDisabled: boolean; + /** + * Returns an AudioTrackList object with the audio tracks for a given video element. + */ + audioTracks: AudioTrackList; + /** + * Gets the source associated with the media element for use by the PlayToManager. + */ + msPlayToSource: any; + /** + * Specifies the output device id that the audio will be sent to. + */ + msAudioDeviceType: string; + /** + * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. + */ + msPlayToPreferredSourceUri: string; + onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; + /** + * Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element. + */ + msKeys: MSMediaKeys; + msGraphicsTrustStatus: MSGraphicsTrust; + /** + * Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not. + */ + pause(): void; + /** + * Loads and starts playback of a media resource. + */ + play(): void; + /** + * Fires immediately after the client loads the object. + */ + load(): void; + /** + * Returns a string that specifies whether the client can play a given media resource type. + */ + canPlayType(type: string): string; + /** + * Clears all effects from the media pipeline. + */ + msClearEffects(): void; + /** + * Specifies the media protection manager for a given media pipeline. + */ + msSetMediaProtectionManager(mediaProtectionManager?: any): void; + /** + * Inserts the specified audio effect into media pipeline. + */ + msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void; + msSetMediaKeys(mediaKeys: MSMediaKeys): void; + addTextTrack(kind: string, label?: string, language?: string): TextTrack; + HAVE_METADATA: number; + HAVE_CURRENT_DATA: number; + HAVE_NOTHING: number; + NETWORK_NO_SOURCE: number; + HAVE_ENOUGH_DATA: number; + NETWORK_EMPTY: number; + NETWORK_LOADING: number; + NETWORK_IDLE: number; + HAVE_FUTURE_DATA: number; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLMediaElement: { + prototype: HTMLMediaElement; + new(): HTMLMediaElement; + HAVE_METADATA: number; + HAVE_CURRENT_DATA: number; + HAVE_NOTHING: number; + NETWORK_NO_SOURCE: number; + HAVE_ENOUGH_DATA: number; + NETWORK_EMPTY: number; + NETWORK_LOADING: number; + NETWORK_IDLE: number; + HAVE_FUTURE_DATA: number; +} + +interface ElementCSSInlineStyle { + runtimeStyle: MSStyleCSSProperties; + currentStyle: MSCurrentStyleCSSProperties; + doScroll(component?: any): void; + componentFromPoint(x: number, y: number): string; +} + +interface DOMParser { + parseFromString(source: string, mimeType: string): Document; +} +declare var DOMParser: { + prototype: DOMParser; + new(): DOMParser; +} + +interface MSMimeTypesCollection { + length: number; +} +declare var MSMimeTypesCollection: { + prototype: MSMimeTypesCollection; + new(): MSMimeTypesCollection; +} + +interface StyleSheet { + disabled: boolean; + ownerNode: Node; + parentStyleSheet: StyleSheet; + href: string; + media: MediaList; + type: string; + title: string; +} +declare var StyleSheet: { + prototype: StyleSheet; + new(): StyleSheet; +} + +interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference { + startOffset: SVGAnimatedLength; + method: SVGAnimatedEnumeration; + spacing: SVGAnimatedEnumeration; + TEXTPATH_SPACINGTYPE_EXACT: number; + TEXTPATH_METHODTYPE_STRETCH: number; + TEXTPATH_SPACINGTYPE_AUTO: number; + TEXTPATH_SPACINGTYPE_UNKNOWN: number; + TEXTPATH_METHODTYPE_UNKNOWN: number; + TEXTPATH_METHODTYPE_ALIGN: number; +} +declare var SVGTextPathElement: { + prototype: SVGTextPathElement; + new(): SVGTextPathElement; + TEXTPATH_SPACINGTYPE_EXACT: number; + TEXTPATH_METHODTYPE_STRETCH: number; + TEXTPATH_SPACINGTYPE_AUTO: number; + TEXTPATH_SPACINGTYPE_UNKNOWN: number; + TEXTPATH_METHODTYPE_UNKNOWN: number; + TEXTPATH_METHODTYPE_ALIGN: number; +} + +interface HTMLDTElement extends HTMLElement { + /** + * Sets or retrieves whether the browser automatically performs wordwrap. + */ + noWrap: boolean; +} +declare var HTMLDTElement: { + prototype: HTMLDTElement; + new(): HTMLDTElement; +} + +interface NodeList { + length: number; + item(index: number): Node; + [index: number]: Node; +} +declare var NodeList: { + prototype: NodeList; + new(): NodeList; +} + +interface XMLSerializer { + serializeToString(target: Node): string; +} +declare var XMLSerializer: { + prototype: XMLSerializer; + new(): XMLSerializer; +} + +interface PerformanceMeasure extends PerformanceEntry { +} +declare var PerformanceMeasure: { + prototype: PerformanceMeasure; + new(): PerformanceMeasure; +} + +interface SVGGradientElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGExternalResourcesRequired, SVGURIReference { + spreadMethod: SVGAnimatedEnumeration; + gradientTransform: SVGAnimatedTransformList; + gradientUnits: SVGAnimatedEnumeration; + SVG_SPREADMETHOD_REFLECT: number; + SVG_SPREADMETHOD_PAD: number; + SVG_SPREADMETHOD_UNKNOWN: number; + SVG_SPREADMETHOD_REPEAT: number; +} +declare var SVGGradientElement: { + prototype: SVGGradientElement; + new(): SVGGradientElement; + SVG_SPREADMETHOD_REFLECT: number; + SVG_SPREADMETHOD_PAD: number; + SVG_SPREADMETHOD_UNKNOWN: number; + SVG_SPREADMETHOD_REPEAT: number; +} + +interface NodeFilter { + acceptNode(n: Node): number; + SHOW_ENTITY_REFERENCE: number; + SHOW_NOTATION: number; + SHOW_ENTITY: number; + SHOW_DOCUMENT: number; + SHOW_PROCESSING_INSTRUCTION: number; + FILTER_REJECT: number; + SHOW_CDATA_SECTION: number; + FILTER_ACCEPT: number; + SHOW_ALL: number; + SHOW_DOCUMENT_TYPE: number; + SHOW_TEXT: number; + SHOW_ELEMENT: number; + SHOW_COMMENT: number; + FILTER_SKIP: number; + SHOW_ATTRIBUTE: number; + SHOW_DOCUMENT_FRAGMENT: number; +} +declare var NodeFilter: NodeFilter; + +interface SVGNumberList { + numberOfItems: number; + replaceItem(newItem: SVGNumber, index: number): SVGNumber; + getItem(index: number): SVGNumber; + clear(): void; + appendItem(newItem: SVGNumber): SVGNumber; + initialize(newItem: SVGNumber): SVGNumber; + removeItem(index: number): SVGNumber; + insertItemBefore(newItem: SVGNumber, index: number): SVGNumber; +} +declare var SVGNumberList: { + prototype: SVGNumberList; + new(): SVGNumberList; +} + +interface MediaError { + code: number; + msExtendedCode: number; + MEDIA_ERR_ABORTED: number; + MEDIA_ERR_NETWORK: number; + MEDIA_ERR_SRC_NOT_SUPPORTED: number; + MEDIA_ERR_DECODE: number; + MS_MEDIA_ERR_ENCRYPTED: number; +} +declare var MediaError: { + prototype: MediaError; + new(): MediaError; + MEDIA_ERR_ABORTED: number; + MEDIA_ERR_NETWORK: number; + MEDIA_ERR_SRC_NOT_SUPPORTED: number; + MEDIA_ERR_DECODE: number; + MS_MEDIA_ERR_ENCRYPTED: number; +} + +interface HTMLFieldSetElement extends HTMLElement { + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLFieldSetElement: { + prototype: HTMLFieldSetElement; + new(): HTMLFieldSetElement; +} + +interface HTMLBGSoundElement extends HTMLElement { + /** + * Sets or gets the value indicating how the volume of the background sound is divided between the left speaker and the right speaker. + */ + balance: any; + /** + * Sets or gets the volume setting for the sound. + */ + volume: any; + /** + * Sets or gets the URL of a sound to play. + */ + src: string; + /** + * Sets or retrieves the number of times a sound or video clip will loop when activated. + */ + loop: number; +} +declare var HTMLBGSoundElement: { + prototype: HTMLBGSoundElement; + new(): HTMLBGSoundElement; +} + +interface Comment extends CharacterData { + text: string; +} +declare var Comment: { + prototype: Comment; + new(): Comment; +} + +interface PerformanceResourceTiming extends PerformanceEntry { + redirectStart: number; + redirectEnd: number; + domainLookupEnd: number; + responseStart: number; + domainLookupStart: number; + fetchStart: number; + requestStart: number; + connectEnd: number; + connectStart: number; + initiatorType: string; + responseEnd: number; +} +declare var PerformanceResourceTiming: { + prototype: PerformanceResourceTiming; + new(): PerformanceResourceTiming; +} + +interface CanvasPattern { +} +declare var CanvasPattern: { + prototype: CanvasPattern; + new(): CanvasPattern; +} + +interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty { + /** + * Sets or retrieves the width of the object. + */ + width: number; + /** + * Sets or retrieves how the object is aligned with adjacent text. + */ + align: string; + /** + * Sets or retrieves whether the horizontal rule is drawn with 3-D shading. + */ + noShade: boolean; +} +declare var HTMLHRElement: { + prototype: HTMLHRElement; + new(): HTMLHRElement; +} + +interface HTMLObjectElement extends HTMLElement, GetSVGDocument, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions { + /** + * Sets or retrieves the width of the object. + */ + width: string; + /** + * Sets or retrieves the Internet media type for the code associated with the object. + */ + codeType: string; + /** + * Retrieves the contained object. + */ + object: any; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves the URL of the file containing the compiled Java class. + */ + code: string; + /** + * Sets or retrieves a character string that can be used to implement your own archive functionality for the object. + */ + archive: string; + /** + * Sets or retrieves a message to be displayed while an object is loading. + */ + standby: string; + /** + * Sets or retrieves a text alternative to the graphic. + */ + alt: string; + /** + * Sets or retrieves the class identifier for the object. + */ + classid: string; + /** + * Sets or retrieves the name of the object. + */ + name: string; + /** + * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. + */ + useMap: string; + /** + * Sets or retrieves the URL that references the data of the object. + */ + data: string; + /** + * Sets or retrieves the height of the object. + */ + height: string; + /** + * Retrieves the document object of the page or frame. + */ + contentDocument: Document; + /** + * Gets or sets the optional alternative HTML script to execute if the object fails to load. + */ + altHtml: string; + /** + * Sets or retrieves the URL of the component. + */ + codeBase: string; + declare: boolean; + /** + * Sets or retrieves the MIME type of the object. + */ + type: string; + /** + * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element. + */ + BaseHref: string; + /** + * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. + */ + validationMessage: string; + /** + * Returns a ValidityState object that represents the validity states of an element. + */ + validity: ValidityState; + /** + * Returns whether an element will successfully validate based on forms validation rules and constraints. + */ + willValidate: boolean; + /** + * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. + */ + msPlayToPreferredSourceUri: string; + /** + * Gets or sets the primary DLNA PlayTo device. + */ + msPlayToPrimary: boolean; + /** + * Gets or sets whether the DLNA PlayTo device is available. + */ + msPlayToDisabled: boolean; + readyState: number; + /** + * Gets the source associated with the media element for use by the PlayToManager. + */ + msPlayToSource: any; + /** + * Returns whether a form will validate when it is submitted, without having to submit it. + */ + checkValidity(): boolean; + /** + * Sets a custom error message that is displayed when a form is submitted. + * @param error Sets a custom error message that is displayed when a form is submitted. + */ + setCustomValidity(error: string): void; +} +declare var HTMLObjectElement: { + prototype: HTMLObjectElement; + new(): HTMLObjectElement; +} + +interface HTMLEmbedElement extends HTMLElement, GetSVGDocument { + /** + * Sets or retrieves the width of the object. + */ + width: string; + /** + * Retrieves the palette used for the embedded document. + */ + palette: string; + /** + * Sets or retrieves a URL to be loaded by the object. + */ + src: string; + /** + * Sets or retrieves the name of the object. + */ + name: string; + hidden: string; + /** + * Retrieves the URL of the plug-in used to view an embedded document. + */ + pluginspage: string; + /** + * Sets or retrieves the height of the object. + */ + height: string; + /** + * Sets or retrieves the height and width units of the embed object. + */ + units: string; + /** + * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. + */ + msPlayToPreferredSourceUri: string; + /** + * Gets or sets the primary DLNA PlayTo device. + */ + msPlayToPrimary: boolean; + /** + * Gets or sets whether the DLNA PlayTo device is available. + */ + msPlayToDisabled: boolean; + readyState: string; + /** + * Gets the source associated with the media element for use by the PlayToManager. + */ + msPlayToSource: any; +} +declare var HTMLEmbedElement: { + prototype: HTMLEmbedElement; + new(): HTMLEmbedElement; +} + +interface StorageEvent extends Event { + oldValue: any; + newValue: any; + url: string; + storageArea: Storage; + key: string; + initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void; +} +declare var StorageEvent: { + prototype: StorageEvent; + new(): StorageEvent; +} + +interface CharacterData extends Node { + length: number; + data: string; + deleteData(offset: number, count: number): void; + replaceData(offset: number, count: number, arg: string): void; + appendData(arg: string): void; + insertData(offset: number, arg: string): void; + substringData(offset: number, count: number): string; +} +declare var CharacterData: { + prototype: CharacterData; + new(): CharacterData; +} + +interface HTMLOptGroupElement extends HTMLElement, MSDataBindingExtensions { + /** + * Sets or retrieves the ordinal position of an option in a list box. + */ + index: number; + /** + * Sets or retrieves the status of an option. + */ + defaultSelected: boolean; + /** + * Sets or retrieves the text string specified by the option tag. + */ + text: string; + /** + * Sets or retrieves the value which is returned to the server when the form control is submitted. + */ + value: string; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves a value that you can use to implement your own label functionality for the object. + */ + label: string; + /** + * Sets or retrieves whether the option in the list box is the default item. + */ + selected: boolean; +} +declare var HTMLOptGroupElement: { + prototype: HTMLOptGroupElement; + new(): HTMLOptGroupElement; +} + +interface HTMLIsIndexElement extends HTMLElement { + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; + /** + * Sets or retrieves the URL to which the form content is sent for processing. + */ + action: string; + prompt: string; +} +declare var HTMLIsIndexElement: { + prototype: HTMLIsIndexElement; + new(): HTMLIsIndexElement; +} + +interface SVGPathSegLinetoRel extends SVGPathSeg { + y: number; + x: number; +} +declare var SVGPathSegLinetoRel: { + prototype: SVGPathSegLinetoRel; + new(): SVGPathSegLinetoRel; +} + +interface DOMException { + code: number; + message: string; + name: string; + toString(): string; + HIERARCHY_REQUEST_ERR: number; + NO_MODIFICATION_ALLOWED_ERR: number; + INVALID_MODIFICATION_ERR: number; + NAMESPACE_ERR: number; + INVALID_CHARACTER_ERR: number; + TYPE_MISMATCH_ERR: number; + ABORT_ERR: number; + INVALID_STATE_ERR: number; + SECURITY_ERR: number; + NETWORK_ERR: number; + WRONG_DOCUMENT_ERR: number; + QUOTA_EXCEEDED_ERR: number; + INDEX_SIZE_ERR: number; + DOMSTRING_SIZE_ERR: number; + SYNTAX_ERR: number; + SERIALIZE_ERR: number; + VALIDATION_ERR: number; + NOT_FOUND_ERR: number; + URL_MISMATCH_ERR: number; + PARSE_ERR: number; + NO_DATA_ALLOWED_ERR: number; + NOT_SUPPORTED_ERR: number; + INVALID_ACCESS_ERR: number; + INUSE_ATTRIBUTE_ERR: number; + INVALID_NODE_TYPE_ERR: number; + DATA_CLONE_ERR: number; + TIMEOUT_ERR: number; +} +declare var DOMException: { + prototype: DOMException; + new(): DOMException; + HIERARCHY_REQUEST_ERR: number; + NO_MODIFICATION_ALLOWED_ERR: number; + INVALID_MODIFICATION_ERR: number; + NAMESPACE_ERR: number; + INVALID_CHARACTER_ERR: number; + TYPE_MISMATCH_ERR: number; + ABORT_ERR: number; + INVALID_STATE_ERR: number; + SECURITY_ERR: number; + NETWORK_ERR: number; + WRONG_DOCUMENT_ERR: number; + QUOTA_EXCEEDED_ERR: number; + INDEX_SIZE_ERR: number; + DOMSTRING_SIZE_ERR: number; + SYNTAX_ERR: number; + SERIALIZE_ERR: number; + VALIDATION_ERR: number; + NOT_FOUND_ERR: number; + URL_MISMATCH_ERR: number; + PARSE_ERR: number; + NO_DATA_ALLOWED_ERR: number; + NOT_SUPPORTED_ERR: number; + INVALID_ACCESS_ERR: number; + INUSE_ATTRIBUTE_ERR: number; + INVALID_NODE_TYPE_ERR: number; + DATA_CLONE_ERR: number; + TIMEOUT_ERR: number; +} + +interface SVGAnimatedBoolean { + animVal: boolean; + baseVal: boolean; +} +declare var SVGAnimatedBoolean: { + prototype: SVGAnimatedBoolean; + new(): SVGAnimatedBoolean; +} + +interface MSCompatibleInfoCollection { + length: number; + item(index: number): MSCompatibleInfo; +} +declare var MSCompatibleInfoCollection: { + prototype: MSCompatibleInfoCollection; + new(): MSCompatibleInfoCollection; +} + +interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { +} +declare var SVGSwitchElement: { + prototype: SVGSwitchElement; + new(): SVGSwitchElement; +} + +interface SVGPreserveAspectRatio { + align: number; + meetOrSlice: number; + SVG_PRESERVEASPECTRATIO_NONE: number; + SVG_PRESERVEASPECTRATIO_XMINYMID: number; + SVG_PRESERVEASPECTRATIO_XMAXYMIN: number; + SVG_PRESERVEASPECTRATIO_XMINYMAX: number; + SVG_PRESERVEASPECTRATIO_XMAXYMAX: number; + SVG_MEETORSLICE_UNKNOWN: number; + SVG_PRESERVEASPECTRATIO_XMAXYMID: number; + SVG_PRESERVEASPECTRATIO_XMIDYMAX: number; + SVG_PRESERVEASPECTRATIO_XMINYMIN: number; + SVG_MEETORSLICE_MEET: number; + SVG_PRESERVEASPECTRATIO_XMIDYMID: number; + SVG_PRESERVEASPECTRATIO_XMIDYMIN: number; + SVG_MEETORSLICE_SLICE: number; + SVG_PRESERVEASPECTRATIO_UNKNOWN: number; +} +declare var SVGPreserveAspectRatio: { + prototype: SVGPreserveAspectRatio; + new(): SVGPreserveAspectRatio; + SVG_PRESERVEASPECTRATIO_NONE: number; + SVG_PRESERVEASPECTRATIO_XMINYMID: number; + SVG_PRESERVEASPECTRATIO_XMAXYMIN: number; + SVG_PRESERVEASPECTRATIO_XMINYMAX: number; + SVG_PRESERVEASPECTRATIO_XMAXYMAX: number; + SVG_MEETORSLICE_UNKNOWN: number; + SVG_PRESERVEASPECTRATIO_XMAXYMID: number; + SVG_PRESERVEASPECTRATIO_XMIDYMAX: number; + SVG_PRESERVEASPECTRATIO_XMINYMIN: number; + SVG_MEETORSLICE_MEET: number; + SVG_PRESERVEASPECTRATIO_XMIDYMID: number; + SVG_PRESERVEASPECTRATIO_XMIDYMIN: number; + SVG_MEETORSLICE_SLICE: number; + SVG_PRESERVEASPECTRATIO_UNKNOWN: number; +} + +interface Attr extends Node { + expando: boolean; + specified: boolean; + ownerElement: Element; + value: string; + name: string; +} +declare var Attr: { + prototype: Attr; + new(): Attr; +} + +interface PerformanceNavigation { + redirectCount: number; + type: number; + toJSON(): any; + TYPE_RELOAD: number; + TYPE_RESERVED: number; + TYPE_BACK_FORWARD: number; + TYPE_NAVIGATE: number; +} +declare var PerformanceNavigation: { + prototype: PerformanceNavigation; + new(): PerformanceNavigation; + TYPE_RELOAD: number; + TYPE_RESERVED: number; + TYPE_BACK_FORWARD: number; + TYPE_NAVIGATE: number; +} + +interface SVGStopElement extends SVGElement, SVGStylable { + offset: SVGAnimatedNumber; +} +declare var SVGStopElement: { + prototype: SVGStopElement; + new(): SVGStopElement; +} + +interface PositionCallback { + (position: Position): void; +} + +interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired { +} +declare var SVGSymbolElement: { + prototype: SVGSymbolElement; + new(): SVGSymbolElement; +} + +interface SVGElementInstanceList { + length: number; + item(index: number): SVGElementInstance; +} +declare var SVGElementInstanceList: { + prototype: SVGElementInstanceList; + new(): SVGElementInstanceList; +} + +interface CSSRuleList { + length: number; + item(index: number): CSSRule; + [index: number]: CSSRule; +} +declare var CSSRuleList: { + prototype: CSSRuleList; + new(): CSSRuleList; +} + +interface MSDataBindingRecordSetExtensions { + recordset: any; + namedRecordset(dataMember: string, hierarchy?: any): any; +} + +interface LinkStyle { + styleSheet: StyleSheet; + sheet: StyleSheet; +} + +interface HTMLVideoElement extends HTMLMediaElement { + /** + * Gets or sets the width of the video element. + */ + width: number; + /** + * Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known. + */ + videoWidth: number; + /** + * Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known. + */ + videoHeight: number; + /** + * Gets or sets the height of the video element. + */ + height: number; + /** + * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. + */ + poster: string; + msIsStereo3D: boolean; + msStereo3DPackingMode: string; + onMSVideoOptimalLayoutChanged: (ev: any) => any; + onMSVideoFrameStepCompleted: (ev: any) => any; + msStereo3DRenderMode: string; + msIsLayoutOptimalForPlayback: boolean; + msHorizontalMirror: boolean; + onMSVideoFormatChanged: (ev: any) => any; + msZoom: boolean; + msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void; + msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void; + msFrameStep(forward: boolean): void; + getVideoPlaybackQuality(): VideoPlaybackQuality; + addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFormatChanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var HTMLVideoElement: { + prototype: HTMLVideoElement; + new(): HTMLVideoElement; +} + +interface ClientRectList { + length: number; + item(index: number): ClientRect; + [index: number]: ClientRect; +} +declare var ClientRectList: { + prototype: ClientRectList; + new(): ClientRectList; +} + +interface SVGMaskElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + maskUnits: SVGAnimatedEnumeration; + maskContentUnits: SVGAnimatedEnumeration; + x: SVGAnimatedLength; + height: SVGAnimatedLength; +} +declare var SVGMaskElement: { + prototype: SVGMaskElement; + new(): SVGMaskElement; +} + +interface External { +} +declare var External: { + prototype: External; + new(): External; +} + +interface MSGestureEvent extends UIEvent { + offsetY: number; + translationY: number; + velocityExpansion: number; + velocityY: number; + velocityAngular: number; + translationX: number; + velocityX: number; + hwTimestamp: number; + offsetX: number; + screenX: number; + rotation: number; + expansion: number; + clientY: number; + screenY: number; + scale: number; + gestureObject: any; + clientX: number; + initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void; + MSGESTURE_FLAG_BEGIN: number; + MSGESTURE_FLAG_END: number; + MSGESTURE_FLAG_CANCEL: number; + MSGESTURE_FLAG_INERTIA: number; + MSGESTURE_FLAG_NONE: number; +} +declare var MSGestureEvent: { + prototype: MSGestureEvent; + new(): MSGestureEvent; + MSGESTURE_FLAG_BEGIN: number; + MSGESTURE_FLAG_END: number; + MSGESTURE_FLAG_CANCEL: number; + MSGESTURE_FLAG_INERTIA: number; + MSGESTURE_FLAG_NONE: number; +} + +interface ErrorEvent extends Event { + colno: number; + filename: string; + error: any; + lineno: number; + message: string; + initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void; +} +declare var ErrorEvent: { + prototype: ErrorEvent; + new(): ErrorEvent; +} + +interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + filterResX: SVGAnimatedInteger; + filterUnits: SVGAnimatedEnumeration; + primitiveUnits: SVGAnimatedEnumeration; + x: SVGAnimatedLength; + height: SVGAnimatedLength; + filterResY: SVGAnimatedInteger; + setFilterRes(filterResX: number, filterResY: number): void; +} +declare var SVGFilterElement: { + prototype: SVGFilterElement; + new(): SVGFilterElement; +} + +interface TrackEvent extends Event { + track: any; +} +declare var TrackEvent: { + prototype: TrackEvent; + new(): TrackEvent; +} + +interface SVGFEMergeNodeElement extends SVGElement { + in1: SVGAnimatedString; +} +declare var SVGFEMergeNodeElement: { + prototype: SVGFEMergeNodeElement; + new(): SVGFEMergeNodeElement; +} + +interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +} +declare var SVGFEFloodElement: { + prototype: SVGFEFloodElement; + new(): SVGFEFloodElement; +} + +interface MSGesture { + target: Element; + addPointer(pointerId: number): void; + stop(): void; +} +declare var MSGesture: { + prototype: MSGesture; + new(): MSGesture; +} + +interface TextTrackCue extends EventTarget { + onenter: (ev: Event) => any; + track: TextTrack; + endTime: number; + text: string; + pauseOnExit: boolean; + id: string; + startTime: number; + onexit: (ev: Event) => any; + getCueAsHTML(): DocumentFragment; + addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var TextTrackCue: { + prototype: TextTrackCue; + new(startTime: number, endTime: number, text: string): TextTrackCue; +} + +interface MSStreamReader extends MSBaseReader { + error: DOMError; + readAsArrayBuffer(stream: MSStream, size?: number): void; + readAsBlob(stream: MSStream, size?: number): void; + readAsDataURL(stream: MSStream, size?: number): void; + readAsText(stream: MSStream, encoding?: string, size?: number): void; +} +declare var MSStreamReader: { + prototype: MSStreamReader; + new(): MSStreamReader; +} + +interface DOMTokenList { + length: number; + contains(token: string): boolean; + remove(token: string): void; + toggle(token: string): boolean; + add(token: string): void; + item(index: number): string; + [index: number]: string; + toString(): string; +} +declare var DOMTokenList: { + prototype: DOMTokenList; + new(): DOMTokenList; +} + +interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement { +} +declare var SVGFEFuncAElement: { + prototype: SVGFEFuncAElement; + new(): SVGFEFuncAElement; +} + +interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + in1: SVGAnimatedString; +} +declare var SVGFETileElement: { + prototype: SVGFETileElement; + new(): SVGFETileElement; +} + +interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + in2: SVGAnimatedString; + mode: SVGAnimatedEnumeration; + in1: SVGAnimatedString; + SVG_FEBLEND_MODE_DARKEN: number; + SVG_FEBLEND_MODE_UNKNOWN: number; + SVG_FEBLEND_MODE_MULTIPLY: number; + SVG_FEBLEND_MODE_NORMAL: number; + SVG_FEBLEND_MODE_SCREEN: number; + SVG_FEBLEND_MODE_LIGHTEN: number; +} +declare var SVGFEBlendElement: { + prototype: SVGFEBlendElement; + new(): SVGFEBlendElement; + SVG_FEBLEND_MODE_DARKEN: number; + SVG_FEBLEND_MODE_UNKNOWN: number; + SVG_FEBLEND_MODE_MULTIPLY: number; + SVG_FEBLEND_MODE_NORMAL: number; + SVG_FEBLEND_MODE_SCREEN: number; + SVG_FEBLEND_MODE_LIGHTEN: number; +} + +interface MessageChannel { + port2: MessagePort; + port1: MessagePort; +} +declare var MessageChannel: { + prototype: MessageChannel; + new(): MessageChannel; +} + +interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +} +declare var SVGFEMergeElement: { + prototype: SVGFEMergeElement; + new(): SVGFEMergeElement; +} + +interface TransitionEvent extends Event { + propertyName: string; + elapsedTime: number; + initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void; +} +declare var TransitionEvent: { + prototype: TransitionEvent; + new(): TransitionEvent; +} + +interface MediaQueryList { + matches: boolean; + media: string; + addListener(listener: MediaQueryListListener): void; + removeListener(listener: MediaQueryListListener): void; +} +declare var MediaQueryList: { + prototype: MediaQueryList; + new(): MediaQueryList; +} + +interface DOMError { + name: string; + toString(): string; +} +declare var DOMError: { + prototype: DOMError; + new(): DOMError; +} + +interface CloseEvent extends Event { + wasClean: boolean; + reason: string; + code: number; + initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void; +} +declare var CloseEvent: { + prototype: CloseEvent; + new(): CloseEvent; +} + +interface WebSocket extends EventTarget { + protocol: string; + readyState: number; + bufferedAmount: number; + onopen: (ev: Event) => any; + extensions: string; + onmessage: (ev: MessageEvent) => any; + onclose: (ev: CloseEvent) => any; + onerror: (ev: ErrorEvent) => any; + binaryType: string; + url: string; + close(code?: number, reason?: string): void; + send(data: any): void; + OPEN: number; + CLOSING: number; + CONNECTING: number; + CLOSED: number; + addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var WebSocket: { + prototype: WebSocket; + new(url: string, protocols?: string): WebSocket; + new(url: string, protocols?: string[]): WebSocket; + OPEN: number; + CLOSING: number; + CONNECTING: number; + CLOSED: number; +} + +interface SVGFEPointLightElement extends SVGElement { + y: SVGAnimatedNumber; + x: SVGAnimatedNumber; + z: SVGAnimatedNumber; +} +declare var SVGFEPointLightElement: { + prototype: SVGFEPointLightElement; + new(): SVGFEPointLightElement; +} + +interface ProgressEvent extends Event { + loaded: number; + lengthComputable: boolean; + total: number; + initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void; +} +declare var ProgressEvent: { + prototype: ProgressEvent; + new(): ProgressEvent; +} + +interface IDBObjectStore { + indexNames: DOMStringList; + name: string; + transaction: IDBTransaction; + keyPath: string; + count(key?: any): IDBRequest; + add(value: any, key?: any): IDBRequest; + clear(): IDBRequest; + createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex; + put(value: any, key?: any): IDBRequest; + openCursor(range?: any, direction?: string): IDBRequest; + deleteIndex(indexName: string): void; + index(name: string): IDBIndex; + get(key: any): IDBRequest; + delete(key: any): IDBRequest; +} +declare var IDBObjectStore: { + prototype: IDBObjectStore; + new(): IDBObjectStore; +} + +interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + stdDeviationX: SVGAnimatedNumber; + in1: SVGAnimatedString; + stdDeviationY: SVGAnimatedNumber; + setStdDeviation(stdDeviationX: number, stdDeviationY: number): void; +} +declare var SVGFEGaussianBlurElement: { + prototype: SVGFEGaussianBlurElement; + new(): SVGFEGaussianBlurElement; +} + +interface SVGFilterPrimitiveStandardAttributes extends SVGStylable { + y: SVGAnimatedLength; + width: SVGAnimatedLength; + x: SVGAnimatedLength; + height: SVGAnimatedLength; + result: SVGAnimatedString; +} + +interface IDBVersionChangeEvent extends Event { + newVersion: number; + oldVersion: number; +} +declare var IDBVersionChangeEvent: { + prototype: IDBVersionChangeEvent; + new(): IDBVersionChangeEvent; +} + +interface IDBIndex { + unique: boolean; + name: string; + keyPath: string; + objectStore: IDBObjectStore; + count(key?: any): IDBRequest; + getKey(key: any): IDBRequest; + openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest; + get(key: any): IDBRequest; + openCursor(range?: IDBKeyRange, direction?: string): IDBRequest; +} +declare var IDBIndex: { + prototype: IDBIndex; + new(): IDBIndex; +} + +interface FileList { + length: number; + item(index: number): File; + [index: number]: File; +} +declare var FileList: { + prototype: FileList; + new(): FileList; +} + +interface IDBCursor { + source: any; + direction: string; + key: any; + primaryKey: any; + advance(count: number): void; + delete(): IDBRequest; + continue(key?: any): void; + update(value: any): IDBRequest; + PREV: string; + PREV_NO_DUPLICATE: string; + NEXT: string; + NEXT_NO_DUPLICATE: string; +} +declare var IDBCursor: { + prototype: IDBCursor; + new(): IDBCursor; + PREV: string; + PREV_NO_DUPLICATE: string; + NEXT: string; + NEXT_NO_DUPLICATE: string; +} + +interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + kernelUnitLengthY: SVGAnimatedNumber; + surfaceScale: SVGAnimatedNumber; + specularExponent: SVGAnimatedNumber; + in1: SVGAnimatedString; + kernelUnitLengthX: SVGAnimatedNumber; + specularConstant: SVGAnimatedNumber; +} +declare var SVGFESpecularLightingElement: { + prototype: SVGFESpecularLightingElement; + new(): SVGFESpecularLightingElement; +} + +interface File extends Blob { + lastModifiedDate: any; + name: string; +} +declare var File: { + prototype: File; + new(): File; +} + +interface URL { + revokeObjectURL(url: string): void; + createObjectURL(object: any, options?: ObjectURLOptions): string; +} +declare var URL: URL; + +interface IDBCursorWithValue extends IDBCursor { + value: any; +} +declare var IDBCursorWithValue: { + prototype: IDBCursorWithValue; + new(): IDBCursorWithValue; +} + +interface XMLHttpRequestEventTarget extends EventTarget { + onprogress: (ev: ProgressEvent) => any; + onerror: (ev: ErrorEvent) => any; + onload: (ev: Event) => any; + ontimeout: (ev: Event) => any; + onabort: (ev: UIEvent) => any; + onloadstart: (ev: Event) => any; + onloadend: (ev: ProgressEvent) => any; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var XMLHttpRequestEventTarget: { + prototype: XMLHttpRequestEventTarget; + new(): XMLHttpRequestEventTarget; } -interface WebGLProgram extends WebGLObject { +interface IDBEnvironment { + msIndexedDB: IDBFactory; + indexedDB: IDBFactory; } -interface OES_standard_derivatives { - FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number; +interface AudioTrackList extends EventTarget { + length: number; + onchange: (ev: Event) => any; + onaddtrack: (ev: TrackEvent) => any; + onremovetrack: (ev: any /*PluginArray*/) => any; + getTrackById(id: string): AudioTrack; + item(index: number): AudioTrack; + [index: number]: AudioTrack; + addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (ev: any /*PluginArray*/) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } -declare var OES_standard_derivatives: { - FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number; +declare var AudioTrackList: { + prototype: AudioTrackList; + new(): AudioTrackList; } -interface WebGLFramebuffer extends WebGLObject { +interface MSBaseReader extends EventTarget { + onprogress: (ev: ProgressEvent) => any; + readyState: number; + onabort: (ev: UIEvent) => any; + onloadend: (ev: ProgressEvent) => any; + onerror: (ev: ErrorEvent) => any; + onload: (ev: Event) => any; + onloadstart: (ev: Event) => any; + result: any; + abort(): void; + LOADING: number; + EMPTY: number; + DONE: number; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } -interface WebGLShader extends WebGLObject { +interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + operator: SVGAnimatedEnumeration; + radiusX: SVGAnimatedNumber; + radiusY: SVGAnimatedNumber; + in1: SVGAnimatedString; + SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number; + SVG_MORPHOLOGY_OPERATOR_ERODE: number; + SVG_MORPHOLOGY_OPERATOR_DILATE: number; +} +declare var SVGFEMorphologyElement: { + prototype: SVGFEMorphologyElement; + new(): SVGFEMorphologyElement; + SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number; + SVG_MORPHOLOGY_OPERATOR_ERODE: number; + SVG_MORPHOLOGY_OPERATOR_DILATE: number; } -interface OES_texture_float_linear { +interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement { +} +declare var SVGFEFuncRElement: { + prototype: SVGFEFuncRElement; + new(): SVGFEFuncRElement; } -interface WebGLObject { +interface WindowTimersExtension { + msSetImmediate(expression: any, ...args: any[]): number; + clearImmediate(handle: number): void; + msClearImmediate(handle: number): void; + setImmediate(expression: any, ...args: any[]): number; } -interface WebGLBuffer extends WebGLObject { +interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + in2: SVGAnimatedString; + xChannelSelector: SVGAnimatedEnumeration; + yChannelSelector: SVGAnimatedEnumeration; + scale: SVGAnimatedNumber; + in1: SVGAnimatedString; + SVG_CHANNEL_B: number; + SVG_CHANNEL_R: number; + SVG_CHANNEL_G: number; + SVG_CHANNEL_UNKNOWN: number; + SVG_CHANNEL_A: number; +} +declare var SVGFEDisplacementMapElement: { + prototype: SVGFEDisplacementMapElement; + new(): SVGFEDisplacementMapElement; + SVG_CHANNEL_B: number; + SVG_CHANNEL_R: number; + SVG_CHANNEL_G: number; + SVG_CHANNEL_UNKNOWN: number; + SVG_CHANNEL_A: number; } -interface WebGLShaderPrecisionFormat { - rangeMin: number; - rangeMax: number; - precision: number; +interface AnimationEvent extends Event { + animationName: string; + elapsedTime: number; + initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void; +} +declare var AnimationEvent: { + prototype: AnimationEvent; + new(): AnimationEvent; +} + +interface SVGComponentTransferFunctionElement extends SVGElement { + tableValues: SVGAnimatedNumberList; + slope: SVGAnimatedNumber; + type: SVGAnimatedEnumeration; + exponent: SVGAnimatedNumber; + amplitude: SVGAnimatedNumber; + intercept: SVGAnimatedNumber; + offset: SVGAnimatedNumber; + SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number; + SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number; + SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number; + SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number; + SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number; + SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number; +} +declare var SVGComponentTransferFunctionElement: { + prototype: SVGComponentTransferFunctionElement; + new(): SVGComponentTransferFunctionElement; + SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number; + SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number; + SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number; + SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number; + SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number; + SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number; +} + +interface MSRangeCollection { + length: number; + item(index: number): Range; + [index: number]: Range; +} +declare var MSRangeCollection: { + prototype: MSRangeCollection; + new(): MSRangeCollection; +} + +interface SVGFEDistantLightElement extends SVGElement { + azimuth: SVGAnimatedNumber; + elevation: SVGAnimatedNumber; +} +declare var SVGFEDistantLightElement: { + prototype: SVGFEDistantLightElement; + new(): SVGFEDistantLightElement; +} + +interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement { +} +declare var SVGFEFuncBElement: { + prototype: SVGFEFuncBElement; + new(): SVGFEFuncBElement; +} + +interface IDBKeyRange { + upper: any; + upperOpen: boolean; + lower: any; + lowerOpen: boolean; +} +declare var IDBKeyRange: { + prototype: IDBKeyRange; + new(): IDBKeyRange; + bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange; + only(value: any): IDBKeyRange; + lowerBound(bound: any, open?: boolean): IDBKeyRange; + upperBound(bound: any, open?: boolean): IDBKeyRange; +} + +interface WindowConsole { + console: Console; +} + +interface IDBTransaction extends EventTarget { + oncomplete: (ev: Event) => any; + db: IDBDatabase; + mode: string; + error: DOMError; + onerror: (ev: ErrorEvent) => any; + onabort: (ev: UIEvent) => any; + abort(): void; + objectStore(name: string): IDBObjectStore; + READ_ONLY: string; + VERSION_CHANGE: string; + READ_WRITE: string; + addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var IDBTransaction: { + prototype: IDBTransaction; + new(): IDBTransaction; + READ_ONLY: string; + VERSION_CHANGE: string; + READ_WRITE: string; +} + +interface AudioTrack { + kind: string; + language: string; + id: string; + label: string; + enabled: boolean; + sourceBuffer: SourceBuffer; +} +declare var AudioTrack: { + prototype: AudioTrack; + new(): AudioTrack; +} + +interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + orderY: SVGAnimatedInteger; + kernelUnitLengthY: SVGAnimatedNumber; + orderX: SVGAnimatedInteger; + preserveAlpha: SVGAnimatedBoolean; + kernelMatrix: SVGAnimatedNumberList; + edgeMode: SVGAnimatedEnumeration; + kernelUnitLengthX: SVGAnimatedNumber; + bias: SVGAnimatedNumber; + targetX: SVGAnimatedInteger; + targetY: SVGAnimatedInteger; + divisor: SVGAnimatedNumber; + in1: SVGAnimatedString; + SVG_EDGEMODE_WRAP: number; + SVG_EDGEMODE_DUPLICATE: number; + SVG_EDGEMODE_UNKNOWN: number; + SVG_EDGEMODE_NONE: number; +} +declare var SVGFEConvolveMatrixElement: { + prototype: SVGFEConvolveMatrixElement; + new(): SVGFEConvolveMatrixElement; + SVG_EDGEMODE_WRAP: number; + SVG_EDGEMODE_DUPLICATE: number; + SVG_EDGEMODE_UNKNOWN: number; + SVG_EDGEMODE_NONE: number; +} + +interface TextTrackCueList { + length: number; + item(index: number): TextTrackCue; + [index: number]: TextTrackCue; + getCueById(id: string): TextTrackCue; +} +declare var TextTrackCueList: { + prototype: TextTrackCueList; + new(): TextTrackCueList; +} + +interface CSSKeyframesRule extends CSSRule { + name: string; + cssRules: CSSRuleList; + findRule(rule: string): CSSKeyframeRule; + deleteRule(rule: string): void; + appendRule(rule: string): void; +} +declare var CSSKeyframesRule: { + prototype: CSSKeyframesRule; + new(): CSSKeyframesRule; +} + +interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + baseFrequencyX: SVGAnimatedNumber; + numOctaves: SVGAnimatedInteger; + type: SVGAnimatedEnumeration; + baseFrequencyY: SVGAnimatedNumber; + stitchTiles: SVGAnimatedEnumeration; + seed: SVGAnimatedNumber; + SVG_STITCHTYPE_UNKNOWN: number; + SVG_STITCHTYPE_NOSTITCH: number; + SVG_TURBULENCE_TYPE_UNKNOWN: number; + SVG_TURBULENCE_TYPE_TURBULENCE: number; + SVG_TURBULENCE_TYPE_FRACTALNOISE: number; + SVG_STITCHTYPE_STITCH: number; +} +declare var SVGFETurbulenceElement: { + prototype: SVGFETurbulenceElement; + new(): SVGFETurbulenceElement; + SVG_STITCHTYPE_UNKNOWN: number; + SVG_STITCHTYPE_NOSTITCH: number; + SVG_TURBULENCE_TYPE_UNKNOWN: number; + SVG_TURBULENCE_TYPE_TURBULENCE: number; + SVG_TURBULENCE_TYPE_FRACTALNOISE: number; + SVG_STITCHTYPE_STITCH: number; } -interface EXT_texture_filter_anisotropic { - TEXTURE_MAX_ANISOTROPY_EXT: number; - MAX_TEXTURE_MAX_ANISOTROPY_EXT: number; +interface TextTrackList extends EventTarget { + length: number; + onaddtrack: (ev: TrackEvent) => any; + item(index: number): TextTrack; + [index: number]: TextTrack; + addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } -declare var EXT_texture_filter_anisotropic: { - TEXTURE_MAX_ANISOTROPY_EXT: number; - MAX_TEXTURE_MAX_ANISOTROPY_EXT: number; +declare var TextTrackList: { + prototype: TextTrackList; + new(): TextTrackList; } - -///////////////////////////// -/// addEventListener overloads -///////////////////////////// - -interface HTMLElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement { +} +declare var SVGFEFuncGElement: { + prototype: SVGFEFuncGElement; + new(): SVGFEFuncGElement; } -interface Document { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storagecommit", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msfullscreenerror", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msfullscreenchange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + in1: SVGAnimatedString; + type: SVGAnimatedEnumeration; + values: SVGAnimatedNumberList; + SVG_FECOLORMATRIX_TYPE_SATURATE: number; + SVG_FECOLORMATRIX_TYPE_UNKNOWN: number; + SVG_FECOLORMATRIX_TYPE_MATRIX: number; + SVG_FECOLORMATRIX_TYPE_HUEROTATE: number; + SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number; +} +declare var SVGFEColorMatrixElement: { + prototype: SVGFEColorMatrixElement; + new(): SVGFEColorMatrixElement; + SVG_FECOLORMATRIX_TYPE_SATURATE: number; + SVG_FECOLORMATRIX_TYPE_UNKNOWN: number; + SVG_FECOLORMATRIX_TYPE_MATRIX: number; + SVG_FECOLORMATRIX_TYPE_HUEROTATE: number; + SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number; } -interface Element { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; +interface SVGFESpotLightElement extends SVGElement { + pointsAtY: SVGAnimatedNumber; + y: SVGAnimatedNumber; + limitingConeAngle: SVGAnimatedNumber; + specularExponent: SVGAnimatedNumber; + x: SVGAnimatedNumber; + pointsAtZ: SVGAnimatedNumber; + z: SVGAnimatedNumber; + pointsAtX: SVGAnimatedNumber; +} +declare var SVGFESpotLightElement: { + prototype: SVGFESpotLightElement; + new(): SVGFESpotLightElement; +} + +interface WindowBase64 { + btoa(rawString: string): string; + atob(encodedString: string): string; +} + +interface IDBDatabase extends EventTarget { + version: string; + name: string; + objectStoreNames: DOMStringList; + onerror: (ev: ErrorEvent) => any; + onabort: (ev: UIEvent) => any; + createObjectStore(name: string, optionalParameters?: any): IDBObjectStore; + close(): void; + transaction(storeNames: any, mode?: string): IDBTransaction; + deleteObjectStore(name: string): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var IDBDatabase: { + prototype: IDBDatabase; + new(): IDBDatabase; +} -interface MSNamespaceInfo { - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; +interface DOMStringList { + length: number; + contains(str: string): boolean; + item(index: number): string; + [index: number]: string; +} +declare var DOMStringList: { + prototype: DOMStringList; + new(): DOMStringList; +} + +interface IDBOpenDBRequest extends IDBRequest { + onupgradeneeded: (ev: IDBVersionChangeEvent) => any; + onblocked: (ev: Event) => any; + addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var IDBOpenDBRequest: { + prototype: IDBOpenDBRequest; + new(): IDBOpenDBRequest; +} -interface Window { - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; +interface HTMLProgressElement extends HTMLElement { + /** + * Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value. + */ + value: number; + /** + * Defines the maximum, or "done" value for a progress element. + */ + max: number; + /** + * Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar). + */ + position: number; + /** + * Retrieves a reference to the form that the object is embedded in. + */ + form: HTMLFormElement; +} +declare var HTMLProgressElement: { + prototype: HTMLProgressElement; + new(): HTMLProgressElement; +} + +interface MSLaunchUriCallback { + (): void; +} + +interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + dy: SVGAnimatedNumber; + in1: SVGAnimatedString; + dx: SVGAnimatedNumber; +} +declare var SVGFEOffsetElement: { + prototype: SVGFEOffsetElement; + new(): SVGFEOffsetElement; +} + +interface MSUnsafeFunctionCallback { + (): any; +} + +interface TextTrack extends EventTarget { + language: string; + mode: any; + readyState: number; + activeCues: TextTrackCueList; + cues: TextTrackCueList; + oncuechange: (ev: Event) => any; + kind: string; + onload: (ev: Event) => any; + onerror: (ev: ErrorEvent) => any; + label: string; + addCue(cue: TextTrackCue): void; + removeCue(cue: TextTrackCue): void; + ERROR: number; + SHOWING: number; + LOADING: number; + LOADED: number; + NONE: number; + HIDDEN: number; + DISABLED: number; + addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} +declare var TextTrack: { + prototype: TextTrack; + new(): TextTrack; + ERROR: number; + SHOWING: number; + LOADING: number; + LOADED: number; + NONE: number; + HIDDEN: number; + DISABLED: number; +} + +interface MediaQueryListListener { + (mql: MediaQueryList): void; +} + +interface IDBRequest extends EventTarget { + source: any; + onsuccess: (ev: Event) => any; + error: DOMError; + transaction: IDBTransaction; + onerror: (ev: ErrorEvent) => any; + readyState: string; + result: any; + addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var IDBRequest: { + prototype: IDBRequest; + new(): IDBRequest; +} -interface SVGElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; +interface MessagePort extends EventTarget { + onmessage: (ev: MessageEvent) => any; + close(): void; + postMessage(message?: any, ports?: any): void; + start(): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var MessagePort: { + prototype: MessagePort; + new(): MessagePort; +} -interface HTMLFrameElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; +interface FileReader extends MSBaseReader { + error: DOMError; + readAsArrayBuffer(blob: Blob): void; + readAsDataURL(blob: Blob): void; + readAsText(blob: Blob, encoding?: string): void; +} +declare var FileReader: { + prototype: FileReader; + new(): FileReader; +} + +interface Blob { + type: string; + size: number; + msDetachStream(): any; + slice(start?: number, end?: number, contentType?: string): Blob; + msClose(): void; +} +declare var Blob: { + prototype: Blob; + new(): Blob; +} + +interface ApplicationCache extends EventTarget { + status: number; + ondownloading: (ev: Event) => any; + onprogress: (ev: ProgressEvent) => any; + onupdateready: (ev: Event) => any; + oncached: (ev: Event) => any; + onobsolete: (ev: Event) => any; + onerror: (ev: ErrorEvent) => any; + onchecking: (ev: Event) => any; + onnoupdate: (ev: Event) => any; + swapCache(): void; + abort(): void; + update(): void; + CHECKING: number; + UNCACHED: number; + UPDATEREADY: number; + DOWNLOADING: number; + IDLE: number; + OBSOLETE: number; + addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var ApplicationCache: { + prototype: ApplicationCache; + new(): ApplicationCache; + CHECKING: number; + UNCACHED: number; + UPDATEREADY: number; + DOWNLOADING: number; + IDLE: number; + OBSOLETE: number; +} + +interface FrameRequestCallback { + (time: number): void; +} + +interface PopStateEvent extends Event { + state: any; + initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void; +} +declare var PopStateEvent: { + prototype: PopStateEvent; + new(): PopStateEvent; +} + +interface CSSKeyframeRule extends CSSRule { + keyText: string; + style: CSSStyleDeclaration; +} +declare var CSSKeyframeRule: { + prototype: CSSKeyframeRule; + new(): CSSKeyframeRule; +} + +interface MSFileSaver { + msSaveBlob(blob: any, defaultName?: string): boolean; + msSaveOrOpenBlob(blob: any, defaultName?: string): boolean; +} + +interface MSStream { + type: string; + msDetachStream(): any; + msClose(): void; +} +declare var MSStream: { + prototype: MSStream; + new(): MSStream; +} + +interface MSBlobBuilder { + append(data: any, endings?: string): void; + getBlob(contentType?: string): Blob; +} +declare var MSBlobBuilder: { + prototype: MSBlobBuilder; + new(): MSBlobBuilder; +} -interface XMLHttpRequest { - addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface DOMSettableTokenList extends DOMTokenList { + value: string; +} +declare var DOMSettableTokenList: { + prototype: DOMSettableTokenList; + new(): DOMSettableTokenList; } -interface HTMLFrameSetElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; +interface IDBFactory { + open(name: string, version?: number): IDBOpenDBRequest; + cmp(first: any, second: any): number; + deleteDatabase(name: string): IDBOpenDBRequest; +} +declare var IDBFactory: { + prototype: IDBFactory; + new(): IDBFactory; +} + +interface MSPointerEvent extends MouseEvent { + width: number; + rotation: number; + pressure: number; + pointerType: any; + isPrimary: boolean; + tiltY: number; + height: number; + intermediatePoints: any; + currentPoint: any; + tiltX: number; + hwTimestamp: number; + pointerId: number; + initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void; + getCurrentPoint(element: Element): void; + getIntermediatePoints(element: Element): void; + MSPOINTER_TYPE_PEN: number; + MSPOINTER_TYPE_MOUSE: number; + MSPOINTER_TYPE_TOUCH: number; +} +declare var MSPointerEvent: { + prototype: MSPointerEvent; + new(): MSPointerEvent; + MSPOINTER_TYPE_PEN: number; + MSPOINTER_TYPE_MOUSE: number; + MSPOINTER_TYPE_TOUCH: number; +} + +interface MSManipulationEvent extends UIEvent { + lastState: number; + currentState: number; + initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void; + MS_MANIPULATION_STATE_STOPPED: number; + MS_MANIPULATION_STATE_ACTIVE: number; + MS_MANIPULATION_STATE_INERTIA: number; + MS_MANIPULATION_STATE_SELECTING: number; + MS_MANIPULATION_STATE_COMMITTED: number; + MS_MANIPULATION_STATE_PRESELECT: number; + MS_MANIPULATION_STATE_DRAGGING: number; + MS_MANIPULATION_STATE_CANCELLED: number; +} +declare var MSManipulationEvent: { + prototype: MSManipulationEvent; + new(): MSManipulationEvent; + MS_MANIPULATION_STATE_STOPPED: number; + MS_MANIPULATION_STATE_ACTIVE: number; + MS_MANIPULATION_STATE_INERTIA: number; + MS_MANIPULATION_STATE_SELECTING: number; + MS_MANIPULATION_STATE_COMMITTED: number; + MS_MANIPULATION_STATE_PRESELECT: number; + MS_MANIPULATION_STATE_DRAGGING: number; + MS_MANIPULATION_STATE_CANCELLED: number; +} + +interface HTMLDataListElement extends HTMLElement { + options: HTMLCollection; +} +declare var HTMLDataListElement: { + prototype: HTMLDataListElement; + new(): HTMLDataListElement; +} + +interface SVGFEImageElement extends SVGElement, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGURIReference, SVGExternalResourcesRequired { + preserveAspectRatio: SVGAnimatedPreserveAspectRatio; +} +declare var SVGFEImageElement: { + prototype: SVGFEImageElement; + new(): SVGFEImageElement; +} + +interface AbstractWorker extends EventTarget { + onerror: (ev: ErrorEvent) => any; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } -interface Screen { - addEventListener(type: "msorientationchange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + operator: SVGAnimatedEnumeration; + in2: SVGAnimatedString; + k2: SVGAnimatedNumber; + k1: SVGAnimatedNumber; + k3: SVGAnimatedNumber; + in1: SVGAnimatedString; + k4: SVGAnimatedNumber; + SVG_FECOMPOSITE_OPERATOR_OUT: number; + SVG_FECOMPOSITE_OPERATOR_OVER: number; + SVG_FECOMPOSITE_OPERATOR_XOR: number; + SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number; + SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number; + SVG_FECOMPOSITE_OPERATOR_IN: number; + SVG_FECOMPOSITE_OPERATOR_ATOP: number; +} +declare var SVGFECompositeElement: { + prototype: SVGFECompositeElement; + new(): SVGFECompositeElement; + SVG_FECOMPOSITE_OPERATOR_OUT: number; + SVG_FECOMPOSITE_OPERATOR_OVER: number; + SVG_FECOMPOSITE_OPERATOR_XOR: number; + SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number; + SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number; + SVG_FECOMPOSITE_OPERATOR_IN: number; + SVG_FECOMPOSITE_OPERATOR_ATOP: number; +} + +interface ValidityState { + customError: boolean; + valueMissing: boolean; + stepMismatch: boolean; + rangeUnderflow: boolean; + rangeOverflow: boolean; + typeMismatch: boolean; + patternMismatch: boolean; + tooLong: boolean; + valid: boolean; +} +declare var ValidityState: { + prototype: ValidityState; + new(): ValidityState; +} + +interface HTMLTrackElement extends HTMLElement { + kind: string; + src: string; + srclang: string; + track: TextTrack; + label: string; + default: boolean; + readyState: number; + ERROR: number; + LOADING: number; + LOADED: number; + NONE: number; +} +declare var HTMLTrackElement: { + prototype: HTMLTrackElement; + new(): HTMLTrackElement; + ERROR: number; + LOADING: number; + LOADED: number; + NONE: number; +} + +interface MSApp { + createFileFromStorageFile(storageFile: any): File; + createBlobFromRandomAccessStream(type: string, seeker: any): Blob; + createStreamFromInputStream(type: string, inputStream: any): MSStream; + terminateApp(exceptionObject: any): void; + createDataPackage(object: any): any; + execUnsafeLocalFunction(unsafeFunction: MSUnsafeFunctionCallback): any; + getHtmlPrintDocumentSource(htmlDoc: any): any; + addPublicLocalApplicationUri(uri: string): void; + createDataPackageFromSelection(): any; + getViewOpener(): MSAppView; + suppressSubdownloadCredentialPrompts(suppress: boolean): void; + execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void; + isTaskScheduledAtPriorityOrHigher(priority: string): boolean; + execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any; + createNewView(uri: string): MSAppView; + getCurrentPriority(): string; + NORMAL: string; + HIGH: string; + IDLE: string; + CURRENT: string; } +declare var MSApp: MSApp; -interface SVGSVGElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "zoom", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + in1: SVGAnimatedString; +} +declare var SVGFEComponentTransferElement: { + prototype: SVGFEComponentTransferElement; + new(): SVGFEComponentTransferElement; } -interface HTMLIFrameElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; +interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { + kernelUnitLengthY: SVGAnimatedNumber; + surfaceScale: SVGAnimatedNumber; + in1: SVGAnimatedString; + kernelUnitLengthX: SVGAnimatedNumber; + diffuseConstant: SVGAnimatedNumber; +} +declare var SVGFEDiffuseLightingElement: { + prototype: SVGFEDiffuseLightingElement; + new(): SVGFEDiffuseLightingElement; +} + +interface MSCSSMatrix { + m24: number; + m34: number; + a: number; + d: number; + m32: number; + m41: number; + m11: number; + f: number; + e: number; + m23: number; + m14: number; + m33: number; + m22: number; + m21: number; + c: number; + m12: number; + b: number; + m42: number; + m31: number; + m43: number; + m13: number; + m44: number; + multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix; + skewY(angle: number): MSCSSMatrix; + setMatrixValue(value: string): void; + inverse(): MSCSSMatrix; + rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix; + toString(): string; + rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix; + translate(x: number, y: number, z?: number): MSCSSMatrix; + scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix; + skewX(angle: number): MSCSSMatrix; +} +declare var MSCSSMatrix: { + prototype: MSCSSMatrix; + new(text?: string): MSCSSMatrix; +} + +interface Worker extends AbstractWorker { + onmessage: (ev: MessageEvent) => any; + postMessage(message: any, ports?: any): void; + terminate(): void; + addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var Worker: { + prototype: Worker; + new(stringUrl: string): Worker; +} + +interface MSExecAtPriorityFunctionCallback { + (...args: any[]): any; +} + +interface MSGraphicsTrust { + status: string; + constrictionActive: boolean; +} +declare var MSGraphicsTrust: { + prototype: MSGraphicsTrust; + new(): MSGraphicsTrust; +} + +interface SubtleCrypto { + unwrapKey(wrappedKey: ArrayBufferView, keyAlgorithm: any, keyEncryptionKey: Key, extractable?: boolean, keyUsages?: string[]): KeyOperation; + encrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; + importKey(format: string, keyData: ArrayBufferView, algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; + wrapKey(key: Key, keyEncryptionKey: Key, keyWrappingAlgorithm: any): KeyOperation; + verify(algorithm: any, key: Key, signature: ArrayBufferView, buffer?: ArrayBufferView): CryptoOperation; + deriveKey(algorithm: any, baseKey: Key, derivedKeyType: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; + digest(algorithm: any, buffer?: ArrayBufferView): CryptoOperation; + exportKey(format: string, key: Key): KeyOperation; + generateKey(algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation; + sign(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; + decrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation; +} +declare var SubtleCrypto: { + prototype: SubtleCrypto; + new(): SubtleCrypto; +} + +interface Crypto extends RandomSource { + subtle: SubtleCrypto; +} +declare var Crypto: { + prototype: Crypto; + new(): Crypto; +} + +interface VideoPlaybackQuality { + totalFrameDelay: number; + creationTime: number; + totalVideoFrames: number; + droppedVideoFrames: number; +} +declare var VideoPlaybackQuality: { + prototype: VideoPlaybackQuality; + new(): VideoPlaybackQuality; +} -interface HTMLBodyElement { +interface GlobalEventHandlers { + onpointerenter: (ev: PointerEvent) => any; + onpointerout: (ev: PointerEvent) => any; + onpointerdown: (ev: PointerEvent) => any; + onpointerup: (ev: PointerEvent) => any; + onpointercancel: (ev: PointerEvent) => any; + onpointerover: (ev: PointerEvent) => any; + onpointermove: (ev: PointerEvent) => any; + onpointerleave: (ev: PointerEvent) => any; addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; @@ -14159,680 +12415,1630 @@ interface HTMLBodyElement { addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; + addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +} + +interface Key { + algorithm: Algorithm; + type: string; + extractable: boolean; + keyUsage: string[]; +} +declare var Key: { + prototype: Key; + new(): Key; +} + +interface DeviceAcceleration { + y: number; + x: number; + z: number; +} +declare var DeviceAcceleration: { + prototype: DeviceAcceleration; + new(): DeviceAcceleration; +} + +interface HTMLAllCollection extends HTMLCollection { + namedItem(name: string): Element; + // [name: string]: Element; +} +declare var HTMLAllCollection: { + prototype: HTMLAllCollection; + new(): HTMLAllCollection; +} + +interface AesGcmEncryptResult { + ciphertext: ArrayBuffer; + tag: ArrayBuffer; +} +declare var AesGcmEncryptResult: { + prototype: AesGcmEncryptResult; + new(): AesGcmEncryptResult; +} + +interface NavigationCompletedEvent extends NavigationEvent { + webErrorStatus: number; + isSuccess: boolean; +} +declare var NavigationCompletedEvent: { + prototype: NavigationCompletedEvent; + new(): NavigationCompletedEvent; +} + +interface MutationRecord { + oldValue: string; + previousSibling: Node; + addedNodes: NodeList; + attributeName: string; + removedNodes: NodeList; + target: Node; + nextSibling: Node; + attributeNamespace: string; + type: string; +} +declare var MutationRecord: { + prototype: MutationRecord; + new(): MutationRecord; +} + +interface MimeTypeArray { + length: number; + item(index: number): Plugin; + [index: number]: Plugin; + namedItem(type: string): Plugin; + // [type: string]: Plugin; +} +declare var MimeTypeArray: { + prototype: MimeTypeArray; + new(): MimeTypeArray; +} + +interface KeyOperation extends EventTarget { + oncomplete: (ev: Event) => any; + onerror: (ev: ErrorEvent) => any; + result: any; + addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var KeyOperation: { + prototype: KeyOperation; + new(): KeyOperation; +} + +interface DOMStringMap { +} +declare var DOMStringMap: { + prototype: DOMStringMap; + new(): DOMStringMap; +} + +interface DeviceOrientationEvent extends Event { + gamma: number; + alpha: number; + absolute: boolean; + beta: number; + initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void; +} +declare var DeviceOrientationEvent: { + prototype: DeviceOrientationEvent; + new(): DeviceOrientationEvent; +} + +interface MSMediaKeys { + keySystem: string; + createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession; +} +declare var MSMediaKeys: { + prototype: MSMediaKeys; + new(keySystem: string): MSMediaKeys; + isTypeSupported(keySystem: string, type?: string): boolean; +} -interface XDomainRequest { - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface MSMediaKeyMessageEvent extends Event { + destinationURL: string; + message: Uint8Array; +} +declare var MSMediaKeyMessageEvent: { + prototype: MSMediaKeyMessageEvent; + new(): MSMediaKeyMessageEvent; } -interface HTMLMarqueeElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface MSHTMLWebViewElement extends HTMLElement { + documentTitle: string; + width: number; + src: string; + canGoForward: boolean; + height: number; + canGoBack: boolean; + navigateWithHttpRequestMessage(requestMessage: any): void; + goBack(): void; + navigate(uri: string): void; + stop(): void; + navigateToString(contents: string): void; + captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation; + capturePreviewToBlobAsync(): MSWebViewAsyncOperation; + refresh(): void; + goForward(): void; + navigateToLocalStreamUri(source: string, streamResolver: any): void; + invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation; + buildLocalStreamUri(contentIdentifier: string, relativePath: string): string; +} +declare var MSHTMLWebViewElement: { + prototype: MSHTMLWebViewElement; + new(): MSHTMLWebViewElement; } -interface MSWindowExtensions { - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; +interface NavigationEvent extends Event { + uri: string; +} +declare var NavigationEvent: { + prototype: NavigationEvent; + new(): NavigationEvent; +} + +interface RandomSource { + getRandomValues(array: ArrayBufferView): ArrayBufferView; +} + +interface MSInputMethodContext extends EventTarget { + oncandidatewindowshow: (ev: any) => any; + target: HTMLElement; + compositionStartOffset: number; + oncandidatewindowhide: (ev: any) => any; + oncandidatewindowupdate: (ev: any) => any; + compositionEndOffset: number; + getCompositionAlternatives(): string[]; + getCandidateWindowClientRect(): ClientRect; + hasComposition(): boolean; + isCandidateWindowVisible(): boolean; + addEventListener(type: "candidatewindowshow", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "candidatewindowhide", listener: (ev: any) => any, useCapture?: boolean): void; + addEventListener(type: "candidatewindowupdate", listener: (ev: any) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var MSInputMethodContext: { + prototype: MSInputMethodContext; + new(): MSInputMethodContext; +} + +interface DeviceRotationRate { + gamma: number; + alpha: number; + beta: number; +} +declare var DeviceRotationRate: { + prototype: DeviceRotationRate; + new(): DeviceRotationRate; +} + +interface PluginArray { + length: number; + refresh(reload?: boolean): void; + item(index: number): Plugin; + [index: number]: Plugin; + namedItem(name: string): Plugin; + // [name: string]: Plugin; +} +declare var PluginArray: { + prototype: PluginArray; + new(): PluginArray; +} + +interface MSMediaKeyError { + systemCode: number; + code: number; + MS_MEDIA_KEYERR_SERVICE: number; + MS_MEDIA_KEYERR_HARDWARECHANGE: number; + MS_MEDIA_KEYERR_OUTPUT: number; + MS_MEDIA_KEYERR_DOMAIN: number; + MS_MEDIA_KEYERR_UNKNOWN: number; + MS_MEDIA_KEYERR_CLIENT: number; +} +declare var MSMediaKeyError: { + prototype: MSMediaKeyError; + new(): MSMediaKeyError; + MS_MEDIA_KEYERR_SERVICE: number; + MS_MEDIA_KEYERR_HARDWARECHANGE: number; + MS_MEDIA_KEYERR_OUTPUT: number; + MS_MEDIA_KEYERR_DOMAIN: number; + MS_MEDIA_KEYERR_UNKNOWN: number; + MS_MEDIA_KEYERR_CLIENT: number; +} + +interface Plugin { + length: number; + filename: string; + version: string; + name: string; + description: string; + item(index: number): MimeType; + [index: number]: MimeType; + namedItem(type: string): MimeType; + // [type: string]: MimeType; +} +declare var Plugin: { + prototype: Plugin; + new(): Plugin; +} + +interface MediaSource extends EventTarget { + sourceBuffers: SourceBufferList; + duration: number; + readyState: string; + activeSourceBuffers: SourceBufferList; + addSourceBuffer(type: string): SourceBuffer; + endOfStream(error?: string): void; + removeSourceBuffer(sourceBuffer: SourceBuffer): void; +} +declare var MediaSource: { + prototype: MediaSource; + new(): MediaSource; + isTypeSupported(type: string): boolean; +} + +interface SourceBufferList extends EventTarget { + length: number; + item(index: number): SourceBuffer; + [index: number]: SourceBuffer; +} +declare var SourceBufferList: { + prototype: SourceBufferList; + new(): SourceBufferList; +} -interface HTMLMediaElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface XMLDocument extends Document { +} +declare var XMLDocument: { + prototype: XMLDocument; + new(): XMLDocument; } -interface HTMLVideoElement { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFormatChanged", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface DeviceMotionEvent extends Event { + rotationRate: DeviceRotationRate; + acceleration: DeviceAcceleration; + interval: number; + accelerationIncludingGravity: DeviceAcceleration; + initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void; +} +declare var DeviceMotionEvent: { + prototype: DeviceMotionEvent; + new(): DeviceMotionEvent; } -interface TextTrackCue { - addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface MimeType { + enabledPlugin: Plugin; + suffixes: string; + type: string; + description: string; +} +declare var MimeType: { + prototype: MimeType; + new(): MimeType; } -interface WebSocket { - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface PointerEvent extends MouseEvent { + width: number; + rotation: number; + pressure: number; + pointerType: any; + isPrimary: boolean; + tiltY: number; + height: number; + intermediatePoints: any; + currentPoint: any; + tiltX: number; + hwTimestamp: number; + pointerId: number; + initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void; + getCurrentPoint(element: Element): void; + getIntermediatePoints(element: Element): void; +} +declare var PointerEvent: { + prototype: PointerEvent; + new(): PointerEvent; } -interface XMLHttpRequestEventTarget { - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface MSDocumentExtensions { + captureEvents(): void; + releaseEvents(): void; } -interface AudioTrackList { - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: "removetrack", listener: (ev: any /*PluginArray*/) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface MutationObserver { + observe(target: Node, options: MutationObserverInit): void; + takeRecords(): MutationRecord[]; + disconnect(): void; +} +declare var MutationObserver: { + prototype: MutationObserver; + new (callback: (arr: MutationRecord[], observer: MutationObserver)=>any): MutationObserver; } -interface MSBaseReader { - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; +interface MSWebViewAsyncOperation extends EventTarget { + target: MSHTMLWebViewElement; + oncomplete: (ev: Event) => any; + error: DOMError; + onerror: (ev: ErrorEvent) => any; + readyState: number; + type: number; + result: any; + start(): void; + ERROR: number; + TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; + TYPE_INVOKE_SCRIPT: number; + COMPLETED: number; + TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; + STARTED: number; + addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } -interface IDBTransaction { +declare var MSWebViewAsyncOperation: { + prototype: MSWebViewAsyncOperation; + new(): MSWebViewAsyncOperation; + ERROR: number; + TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; + TYPE_INVOKE_SCRIPT: number; + COMPLETED: number; + TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; + STARTED: number; +} + +interface ScriptNotifyEvent extends Event { + value: string; + callingUri: string; +} +declare var ScriptNotifyEvent: { + prototype: ScriptNotifyEvent; + new(): ScriptNotifyEvent; +} + +interface PerformanceNavigationTiming extends PerformanceEntry { + redirectStart: number; + domainLookupEnd: number; + responseStart: number; + domComplete: number; + domainLookupStart: number; + loadEventStart: number; + unloadEventEnd: number; + fetchStart: number; + requestStart: number; + domInteractive: number; + navigationStart: number; + connectEnd: number; + loadEventEnd: number; + connectStart: number; + responseEnd: number; + domLoading: number; + redirectEnd: number; + redirectCount: number; + unloadEventStart: number; + domContentLoadedEventStart: number; + domContentLoadedEventEnd: number; + type: string; +} +declare var PerformanceNavigationTiming: { + prototype: PerformanceNavigationTiming; + new(): PerformanceNavigationTiming; +} + +interface MSMediaKeyNeededEvent extends Event { + initData: Uint8Array; +} +declare var MSMediaKeyNeededEvent: { + prototype: MSMediaKeyNeededEvent; + new(): MSMediaKeyNeededEvent; +} + +interface LongRunningScriptDetectedEvent extends Event { + stopPageScriptExecution: boolean; + executionTime: number; +} +declare var LongRunningScriptDetectedEvent: { + prototype: LongRunningScriptDetectedEvent; + new(): LongRunningScriptDetectedEvent; +} + +interface MSAppView { + viewId: number; + close(): void; + postMessage(message: any, targetOrigin: string, ports?: any): void; +} +declare var MSAppView: { + prototype: MSAppView; + new(): MSAppView; +} + +interface PerfWidgetExternal { + maxCpuSpeed: number; + independentRenderingEnabled: boolean; + irDisablingContentString: string; + irStatusAvailable: boolean; + performanceCounter: number; + averagePaintTime: number; + activeNetworkRequestCount: number; + paintRequestsPerSecond: number; + extraInformationEnabled: boolean; + performanceCounterFrequency: number; + averageFrameTime: number; + repositionWindow(x: number, y: number): void; + getRecentMemoryUsage(last: number): any; + getMemoryUsage(): number; + resizeWindow(width: number, height: number): void; + getProcessCpuUsage(): number; + removeEventListener(eventType: string, callback: (ev: any) => any): void; + getRecentCpuUsage(last: number): any; + addEventListener(eventType: string, callback: (ev: any) => any): void; + getRecentFrames(last: number): any; + getRecentPaintRequests(last: number): any; +} +declare var PerfWidgetExternal: { + prototype: PerfWidgetExternal; + new(): PerfWidgetExternal; +} + +interface PageTransitionEvent extends Event { + persisted: boolean; +} +declare var PageTransitionEvent: { + prototype: PageTransitionEvent; + new(): PageTransitionEvent; +} + +interface MutationCallback { + (mutations: MutationRecord[], observer: MutationObserver): void; +} + +interface HTMLDocument extends Document { +} +declare var HTMLDocument: { + prototype: HTMLDocument; + new(): HTMLDocument; +} + +interface KeyPair { + privateKey: Key; + publicKey: Key; +} +declare var KeyPair: { + prototype: KeyPair; + new(): KeyPair; +} + +interface MSMediaKeySession extends EventTarget { + sessionId: string; + error: MSMediaKeyError; + keySystem: string; + close(): void; + update(key: Uint8Array): void; +} +declare var MSMediaKeySession: { + prototype: MSMediaKeySession; + new(): MSMediaKeySession; +} + +interface UnviewableContentIdentifiedEvent extends NavigationEvent { + referrer: string; +} +declare var UnviewableContentIdentifiedEvent: { + prototype: UnviewableContentIdentifiedEvent; + new(): UnviewableContentIdentifiedEvent; +} + +interface CryptoOperation extends EventTarget { + algorithm: Algorithm; + oncomplete: (ev: Event) => any; + onerror: (ev: ErrorEvent) => any; + onprogress: (ev: ProgressEvent) => any; + onabort: (ev: UIEvent) => any; + key: Key; + result: any; + abort(): void; + finish(): void; + process(buffer: ArrayBufferView): void; addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; } +declare var CryptoOperation: { + prototype: CryptoOperation; + new(): CryptoOperation; +} -interface TextTrackList { - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLTexture extends WebGLObject { +} +declare var WebGLTexture: { + prototype: WebGLTexture; + new(): WebGLTexture; } -interface IDBDatabase { - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface OES_texture_float { +} +declare var OES_texture_float: { + prototype: OES_texture_float; + new(): OES_texture_float; +} + +interface WebGLContextEvent extends Event { + statusMessage: string; +} +declare var WebGLContextEvent: { + prototype: WebGLContextEvent; + new(): WebGLContextEvent; +} + +interface WebGLRenderbuffer extends WebGLObject { +} +declare var WebGLRenderbuffer: { + prototype: WebGLRenderbuffer; + new(): WebGLRenderbuffer; +} + +interface WebGLUniformLocation { +} +declare var WebGLUniformLocation: { + prototype: WebGLUniformLocation; + new(): WebGLUniformLocation; +} + +interface WebGLActiveInfo { + name: string; + type: number; + size: number; +} +declare var WebGLActiveInfo: { + prototype: WebGLActiveInfo; + new(): WebGLActiveInfo; +} + +interface WEBGL_compressed_texture_s3tc { + COMPRESSED_RGBA_S3TC_DXT1_EXT: number; + COMPRESSED_RGBA_S3TC_DXT5_EXT: number; + COMPRESSED_RGBA_S3TC_DXT3_EXT: number; + COMPRESSED_RGB_S3TC_DXT1_EXT: number; +} +declare var WEBGL_compressed_texture_s3tc: { + prototype: WEBGL_compressed_texture_s3tc; + new(): WEBGL_compressed_texture_s3tc; + COMPRESSED_RGBA_S3TC_DXT1_EXT: number; + COMPRESSED_RGBA_S3TC_DXT5_EXT: number; + COMPRESSED_RGBA_S3TC_DXT3_EXT: number; + COMPRESSED_RGB_S3TC_DXT1_EXT: number; +} + +interface WebGLRenderingContext { + drawingBufferWidth: number; + drawingBufferHeight: number; + canvas: HTMLCanvasElement; + getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation; + bindTexture(target: number, texture: WebGLTexture): void; + bufferData(target: number, data: ArrayBufferView, usage: number): void; + bufferData(target: number, data: ArrayBuffer, usage: number): void; + bufferData(target: number, size: number, usage: number): void; + depthMask(flag: boolean): void; + getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; + vertexAttrib3fv(indx: number, values: number[]): void; + vertexAttrib3fv(indx: number, values: Float32Array): void; + linkProgram(program: WebGLProgram): void; + getSupportedExtensions(): string[]; + bufferSubData(target: number, offset: number, data: ArrayBuffer): void; + bufferSubData(target: number, offset: number, data: ArrayBufferView): void; + vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void; + polygonOffset(factor: number, units: number): void; + blendColor(red: number, green: number, blue: number, alpha: number): void; + createTexture(): WebGLTexture; + hint(target: number, mode: number): void; + getVertexAttrib(index: number, pname: number): any; + enableVertexAttribArray(index: number): void; + depthRange(zNear: number, zFar: number): void; + cullFace(mode: number): void; + createFramebuffer(): WebGLFramebuffer; + uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; + uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; + framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void; + deleteFramebuffer(framebuffer: WebGLFramebuffer): void; + colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void; + compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; + uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; + uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; + getExtension(name: string): any; + createProgram(): WebGLProgram; + deleteShader(shader: WebGLShader): void; + getAttachedShaders(program: WebGLProgram): WebGLShader[]; + enable(cap: number): void; + blendEquation(mode: number): void; + texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; + createBuffer(): WebGLBuffer; + deleteTexture(texture: WebGLTexture): void; + useProgram(program: WebGLProgram): void; + vertexAttrib2fv(indx: number, values: number[]): void; + vertexAttrib2fv(indx: number, values: Float32Array): void; + checkFramebufferStatus(target: number): number; + frontFace(mode: number): void; + getBufferParameter(target: number, pname: number): any; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; + copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void; + getVertexAttribOffset(index: number, pname: number): number; + disableVertexAttribArray(index: number): void; + blendFunc(sfactor: number, dfactor: number): void; + drawElements(mode: number, count: number, type: number, offset: number): void; + isFramebuffer(framebuffer: WebGLFramebuffer): boolean; + uniform3iv(location: WebGLUniformLocation, v: number[]): void; + uniform3iv(location: WebGLUniformLocation, v: Int32Array): void; + lineWidth(width: number): void; + getShaderInfoLog(shader: WebGLShader): string; + getTexParameter(target: number, pname: number): any; + getParameter(pname: number): any; + getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat; + getContextAttributes(): WebGLContextAttributes; + vertexAttrib1f(indx: number, x: number): void; + bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void; + compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void; + isContextLost(): boolean; + uniform1iv(location: WebGLUniformLocation, v: number[]): void; + uniform1iv(location: WebGLUniformLocation, v: Int32Array): void; + getRenderbufferParameter(target: number, pname: number): any; + uniform2fv(location: WebGLUniformLocation, v: number[]): void; + uniform2fv(location: WebGLUniformLocation, v: Float32Array): void; + isTexture(texture: WebGLTexture): boolean; + getError(): number; + shaderSource(shader: WebGLShader, source: string): void; + deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void; + stencilMask(mask: number): void; + bindBuffer(target: number, buffer: WebGLBuffer): void; + getAttribLocation(program: WebGLProgram, name: string): number; + uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; + blendEquationSeparate(modeRGB: number, modeAlpha: number): void; + clear(mask: number): void; + blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void; + stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void; + readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; + scissor(x: number, y: number, width: number, height: number): void; + uniform2i(location: WebGLUniformLocation, x: number, y: number): void; + getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo; + getShaderSource(shader: WebGLShader): string; + generateMipmap(target: number): void; + bindAttribLocation(program: WebGLProgram, index: number, name: string): void; + uniform1fv(location: WebGLUniformLocation, v: number[]): void; + uniform1fv(location: WebGLUniformLocation, v: Float32Array): void; + uniform2iv(location: WebGLUniformLocation, v: number[]): void; + uniform2iv(location: WebGLUniformLocation, v: Int32Array): void; + stencilOp(fail: number, zfail: number, zpass: number): void; + uniform4fv(location: WebGLUniformLocation, v: number[]): void; + uniform4fv(location: WebGLUniformLocation, v: Float32Array): void; + vertexAttrib1fv(indx: number, values: number[]): void; + vertexAttrib1fv(indx: number, values: Float32Array): void; + flush(): void; + uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + deleteProgram(program: WebGLProgram): void; + isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean; + uniform1i(location: WebGLUniformLocation, x: number): void; + getProgramParameter(program: WebGLProgram, pname: number): any; + getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo; + stencilFunc(func: number, ref: number, mask: number): void; + pixelStorei(pname: number, param: number): void; + disable(cap: number): void; + vertexAttrib4fv(indx: number, values: number[]): void; + vertexAttrib4fv(indx: number, values: Float32Array): void; + createRenderbuffer(): WebGLRenderbuffer; + isBuffer(buffer: WebGLBuffer): boolean; + stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; + getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any; + uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + sampleCoverage(value: number, invert: boolean): void; + depthFunc(func: number): void; + texParameterf(target: number, pname: number, param: number): void; + vertexAttrib3f(indx: number, x: number, y: number, z: number): void; + drawArrays(mode: number, first: number, count: number): void; + texParameteri(target: number, pname: number, param: number): void; + vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void; + getShaderParameter(shader: WebGLShader, pname: number): any; + clearDepth(depth: number): void; + activeTexture(texture: number): void; + viewport(x: number, y: number, width: number, height: number): void; + detachShader(program: WebGLProgram, shader: WebGLShader): void; + uniform1f(location: WebGLUniformLocation, x: number): void; + uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void; + uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void; + deleteBuffer(buffer: WebGLBuffer): void; + copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void; + uniform3fv(location: WebGLUniformLocation, v: number[]): void; + uniform3fv(location: WebGLUniformLocation, v: Float32Array): void; + stencilMaskSeparate(face: number, mask: number): void; + attachShader(program: WebGLProgram, shader: WebGLShader): void; + compileShader(shader: WebGLShader): void; + clearColor(red: number, green: number, blue: number, alpha: number): void; + isShader(shader: WebGLShader): boolean; + clearStencil(s: number): void; + framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void; + finish(): void; + uniform2f(location: WebGLUniformLocation, x: number, y: number): void; + renderbufferStorage(target: number, internalformat: number, width: number, height: number): void; + uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; + getProgramInfoLog(program: WebGLProgram): string; + validateProgram(program: WebGLProgram): void; + isEnabled(cap: number): boolean; + vertexAttrib2f(indx: number, x: number, y: number): void; + isProgram(program: WebGLProgram): boolean; + createShader(type: number): WebGLShader; + bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void; + uniform4iv(location: WebGLUniformLocation, v: number[]): void; + uniform4iv(location: WebGLUniformLocation, v: Int32Array): void; + DEPTH_FUNC: number; + DEPTH_COMPONENT16: number; + REPLACE: number; + REPEAT: number; + VERTEX_ATTRIB_ARRAY_ENABLED: number; + FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number; + STENCIL_BUFFER_BIT: number; + RENDERER: number; + STENCIL_BACK_REF: number; + TEXTURE26: number; + RGB565: number; + DITHER: number; + CONSTANT_COLOR: number; + GENERATE_MIPMAP_HINT: number; + POINTS: number; + DECR: number; + INT_VEC3: number; + TEXTURE28: number; + ONE_MINUS_CONSTANT_ALPHA: number; + BACK: number; + RENDERBUFFER_STENCIL_SIZE: number; + UNPACK_FLIP_Y_WEBGL: number; + BLEND: number; + TEXTURE9: number; + ARRAY_BUFFER_BINDING: number; + MAX_VIEWPORT_DIMS: number; + INVALID_FRAMEBUFFER_OPERATION: number; + TEXTURE: number; + TEXTURE0: number; + TEXTURE31: number; + TEXTURE24: number; + HIGH_INT: number; + RENDERBUFFER_BINDING: number; + BLEND_COLOR: number; + FASTEST: number; + STENCIL_WRITEMASK: number; + ALIASED_POINT_SIZE_RANGE: number; + TEXTURE12: number; + DST_ALPHA: number; + BLEND_EQUATION_RGB: number; + FRAMEBUFFER_COMPLETE: number; + NEAREST_MIPMAP_NEAREST: number; + VERTEX_ATTRIB_ARRAY_SIZE: number; + TEXTURE3: number; + DEPTH_WRITEMASK: number; + CONTEXT_LOST_WEBGL: number; + INVALID_VALUE: number; + TEXTURE_MAG_FILTER: number; + ONE_MINUS_CONSTANT_COLOR: number; + ONE_MINUS_SRC_ALPHA: number; + TEXTURE_CUBE_MAP_POSITIVE_Z: number; + NOTEQUAL: number; + ALPHA: number; + DEPTH_STENCIL: number; + MAX_VERTEX_UNIFORM_VECTORS: number; + DEPTH_COMPONENT: number; + RENDERBUFFER_RED_SIZE: number; + TEXTURE20: number; + RED_BITS: number; + RENDERBUFFER_BLUE_SIZE: number; + SCISSOR_BOX: number; + VENDOR: number; + FRONT_AND_BACK: number; + CONSTANT_ALPHA: number; + VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number; + NEAREST: number; + CULL_FACE: number; + ALIASED_LINE_WIDTH_RANGE: number; + TEXTURE19: number; + FRONT: number; + DEPTH_CLEAR_VALUE: number; + GREEN_BITS: number; + TEXTURE29: number; + TEXTURE23: number; + MAX_RENDERBUFFER_SIZE: number; + STENCIL_ATTACHMENT: number; + TEXTURE27: number; + BOOL_VEC2: number; + OUT_OF_MEMORY: number; + MIRRORED_REPEAT: number; + POLYGON_OFFSET_UNITS: number; + TEXTURE_MIN_FILTER: number; + STENCIL_BACK_PASS_DEPTH_PASS: number; + LINE_LOOP: number; + FLOAT_MAT3: number; + TEXTURE14: number; + LINEAR: number; + RGB5_A1: number; + ONE_MINUS_SRC_COLOR: number; + SAMPLE_COVERAGE_INVERT: number; + DONT_CARE: number; + FRAMEBUFFER_BINDING: number; + RENDERBUFFER_ALPHA_SIZE: number; + STENCIL_REF: number; + ZERO: number; + DECR_WRAP: number; + SAMPLE_COVERAGE: number; + STENCIL_BACK_FUNC: number; + TEXTURE30: number; + VIEWPORT: number; + STENCIL_BITS: number; + FLOAT: number; + COLOR_WRITEMASK: number; + SAMPLE_COVERAGE_VALUE: number; + TEXTURE_CUBE_MAP_NEGATIVE_Y: number; + STENCIL_BACK_FAIL: number; + FLOAT_MAT4: number; + UNSIGNED_SHORT_4_4_4_4: number; + TEXTURE6: number; + RENDERBUFFER_WIDTH: number; + RGBA4: number; + ALWAYS: number; + BLEND_EQUATION_ALPHA: number; + COLOR_BUFFER_BIT: number; + TEXTURE_CUBE_MAP: number; + DEPTH_BUFFER_BIT: number; + STENCIL_CLEAR_VALUE: number; + BLEND_EQUATION: number; + RENDERBUFFER_GREEN_SIZE: number; + NEAREST_MIPMAP_LINEAR: number; + VERTEX_ATTRIB_ARRAY_TYPE: number; + INCR_WRAP: number; + ONE_MINUS_DST_COLOR: number; + HIGH_FLOAT: number; + BYTE: number; + FRONT_FACE: number; + SAMPLE_ALPHA_TO_COVERAGE: number; + CCW: number; + TEXTURE13: number; + MAX_VERTEX_ATTRIBS: number; + MAX_VERTEX_TEXTURE_IMAGE_UNITS: number; + TEXTURE_WRAP_T: number; + UNPACK_PREMULTIPLY_ALPHA_WEBGL: number; + FLOAT_VEC2: number; + LUMINANCE: number; + GREATER: number; + INT_VEC2: number; + VALIDATE_STATUS: number; + FRAMEBUFFER: number; + FRAMEBUFFER_UNSUPPORTED: number; + TEXTURE5: number; + FUNC_SUBTRACT: number; + BLEND_DST_ALPHA: number; + SAMPLER_CUBE: number; + ONE_MINUS_DST_ALPHA: number; + LESS: number; + TEXTURE_CUBE_MAP_POSITIVE_X: number; + BLUE_BITS: number; + DEPTH_TEST: number; + VERTEX_ATTRIB_ARRAY_STRIDE: number; + DELETE_STATUS: number; + TEXTURE18: number; + POLYGON_OFFSET_FACTOR: number; + UNSIGNED_INT: number; + TEXTURE_2D: number; + DST_COLOR: number; + FLOAT_MAT2: number; + COMPRESSED_TEXTURE_FORMATS: number; + MAX_FRAGMENT_UNIFORM_VECTORS: number; + DEPTH_STENCIL_ATTACHMENT: number; + LUMINANCE_ALPHA: number; + CW: number; + VERTEX_ATTRIB_ARRAY_NORMALIZED: number; + TEXTURE_CUBE_MAP_NEGATIVE_Z: number; + LINEAR_MIPMAP_LINEAR: number; + BUFFER_SIZE: number; + SAMPLE_BUFFERS: number; + TEXTURE15: number; + ACTIVE_TEXTURE: number; + VERTEX_SHADER: number; + TEXTURE22: number; + VERTEX_ATTRIB_ARRAY_POINTER: number; + INCR: number; + COMPILE_STATUS: number; + MAX_COMBINED_TEXTURE_IMAGE_UNITS: number; + TEXTURE7: number; + UNSIGNED_SHORT_5_5_5_1: number; + DEPTH_BITS: number; + RGBA: number; + TRIANGLE_STRIP: number; + COLOR_CLEAR_VALUE: number; + BROWSER_DEFAULT_WEBGL: number; + INVALID_ENUM: number; + SCISSOR_TEST: number; + LINE_STRIP: number; + FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number; + STENCIL_FUNC: number; + FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number; + RENDERBUFFER_HEIGHT: number; + TEXTURE8: number; + TRIANGLES: number; + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number; + STENCIL_BACK_VALUE_MASK: number; + TEXTURE25: number; + RENDERBUFFER: number; + LEQUAL: number; + TEXTURE1: number; + STENCIL_INDEX8: number; + FUNC_ADD: number; + STENCIL_FAIL: number; + BLEND_SRC_ALPHA: number; + BOOL: number; + ALPHA_BITS: number; + LOW_INT: number; + TEXTURE10: number; + SRC_COLOR: number; + MAX_VARYING_VECTORS: number; + BLEND_DST_RGB: number; + TEXTURE_BINDING_CUBE_MAP: number; + STENCIL_INDEX: number; + TEXTURE_BINDING_2D: number; + MEDIUM_INT: number; + SHADER_TYPE: number; + POLYGON_OFFSET_FILL: number; + DYNAMIC_DRAW: number; + TEXTURE4: number; + STENCIL_BACK_PASS_DEPTH_FAIL: number; + STREAM_DRAW: number; + MAX_CUBE_MAP_TEXTURE_SIZE: number; + TEXTURE17: number; + TRIANGLE_FAN: number; + UNPACK_ALIGNMENT: number; + CURRENT_PROGRAM: number; + LINES: number; + INVALID_OPERATION: number; + FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number; + LINEAR_MIPMAP_NEAREST: number; + CLAMP_TO_EDGE: number; + RENDERBUFFER_DEPTH_SIZE: number; + TEXTURE_WRAP_S: number; + ELEMENT_ARRAY_BUFFER: number; + UNSIGNED_SHORT_5_6_5: number; + ACTIVE_UNIFORMS: number; + FLOAT_VEC3: number; + NO_ERROR: number; + ATTACHED_SHADERS: number; + DEPTH_ATTACHMENT: number; + TEXTURE11: number; + STENCIL_TEST: number; + ONE: number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number; + STATIC_DRAW: number; + GEQUAL: number; + BOOL_VEC4: number; + COLOR_ATTACHMENT0: number; + PACK_ALIGNMENT: number; + MAX_TEXTURE_SIZE: number; + STENCIL_PASS_DEPTH_FAIL: number; + CULL_FACE_MODE: number; + TEXTURE16: number; + STENCIL_BACK_WRITEMASK: number; + SRC_ALPHA: number; + UNSIGNED_SHORT: number; + TEXTURE21: number; + FUNC_REVERSE_SUBTRACT: number; + SHADING_LANGUAGE_VERSION: number; + EQUAL: number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number; + BOOL_VEC3: number; + SAMPLER_2D: number; + TEXTURE_CUBE_MAP_NEGATIVE_X: number; + MAX_TEXTURE_IMAGE_UNITS: number; + TEXTURE_CUBE_MAP_POSITIVE_Y: number; + RENDERBUFFER_INTERNAL_FORMAT: number; + STENCIL_VALUE_MASK: number; + ELEMENT_ARRAY_BUFFER_BINDING: number; + ARRAY_BUFFER: number; + DEPTH_RANGE: number; + NICEST: number; + ACTIVE_ATTRIBUTES: number; + NEVER: number; + FLOAT_VEC4: number; + CURRENT_VERTEX_ATTRIB: number; + STENCIL_PASS_DEPTH_PASS: number; + INVERT: number; + LINK_STATUS: number; + RGB: number; + INT_VEC4: number; + TEXTURE2: number; + UNPACK_COLORSPACE_CONVERSION_WEBGL: number; + MEDIUM_FLOAT: number; + SRC_ALPHA_SATURATE: number; + BUFFER_USAGE: number; + SHORT: number; + NONE: number; + UNSIGNED_BYTE: number; + INT: number; + SUBPIXEL_BITS: number; + KEEP: number; + SAMPLES: number; + FRAGMENT_SHADER: number; + LINE_WIDTH: number; + BLEND_SRC_RGB: number; + LOW_FLOAT: number; + VERSION: number; } - -interface IDBOpenDBRequest { - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +declare var WebGLRenderingContext: { + prototype: WebGLRenderingContext; + new(): WebGLRenderingContext; + DEPTH_FUNC: number; + DEPTH_COMPONENT16: number; + REPLACE: number; + REPEAT: number; + VERTEX_ATTRIB_ARRAY_ENABLED: number; + FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number; + STENCIL_BUFFER_BIT: number; + RENDERER: number; + STENCIL_BACK_REF: number; + TEXTURE26: number; + RGB565: number; + DITHER: number; + CONSTANT_COLOR: number; + GENERATE_MIPMAP_HINT: number; + POINTS: number; + DECR: number; + INT_VEC3: number; + TEXTURE28: number; + ONE_MINUS_CONSTANT_ALPHA: number; + BACK: number; + RENDERBUFFER_STENCIL_SIZE: number; + UNPACK_FLIP_Y_WEBGL: number; + BLEND: number; + TEXTURE9: number; + ARRAY_BUFFER_BINDING: number; + MAX_VIEWPORT_DIMS: number; + INVALID_FRAMEBUFFER_OPERATION: number; + TEXTURE: number; + TEXTURE0: number; + TEXTURE31: number; + TEXTURE24: number; + HIGH_INT: number; + RENDERBUFFER_BINDING: number; + BLEND_COLOR: number; + FASTEST: number; + STENCIL_WRITEMASK: number; + ALIASED_POINT_SIZE_RANGE: number; + TEXTURE12: number; + DST_ALPHA: number; + BLEND_EQUATION_RGB: number; + FRAMEBUFFER_COMPLETE: number; + NEAREST_MIPMAP_NEAREST: number; + VERTEX_ATTRIB_ARRAY_SIZE: number; + TEXTURE3: number; + DEPTH_WRITEMASK: number; + CONTEXT_LOST_WEBGL: number; + INVALID_VALUE: number; + TEXTURE_MAG_FILTER: number; + ONE_MINUS_CONSTANT_COLOR: number; + ONE_MINUS_SRC_ALPHA: number; + TEXTURE_CUBE_MAP_POSITIVE_Z: number; + NOTEQUAL: number; + ALPHA: number; + DEPTH_STENCIL: number; + MAX_VERTEX_UNIFORM_VECTORS: number; + DEPTH_COMPONENT: number; + RENDERBUFFER_RED_SIZE: number; + TEXTURE20: number; + RED_BITS: number; + RENDERBUFFER_BLUE_SIZE: number; + SCISSOR_BOX: number; + VENDOR: number; + FRONT_AND_BACK: number; + CONSTANT_ALPHA: number; + VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number; + NEAREST: number; + CULL_FACE: number; + ALIASED_LINE_WIDTH_RANGE: number; + TEXTURE19: number; + FRONT: number; + DEPTH_CLEAR_VALUE: number; + GREEN_BITS: number; + TEXTURE29: number; + TEXTURE23: number; + MAX_RENDERBUFFER_SIZE: number; + STENCIL_ATTACHMENT: number; + TEXTURE27: number; + BOOL_VEC2: number; + OUT_OF_MEMORY: number; + MIRRORED_REPEAT: number; + POLYGON_OFFSET_UNITS: number; + TEXTURE_MIN_FILTER: number; + STENCIL_BACK_PASS_DEPTH_PASS: number; + LINE_LOOP: number; + FLOAT_MAT3: number; + TEXTURE14: number; + LINEAR: number; + RGB5_A1: number; + ONE_MINUS_SRC_COLOR: number; + SAMPLE_COVERAGE_INVERT: number; + DONT_CARE: number; + FRAMEBUFFER_BINDING: number; + RENDERBUFFER_ALPHA_SIZE: number; + STENCIL_REF: number; + ZERO: number; + DECR_WRAP: number; + SAMPLE_COVERAGE: number; + STENCIL_BACK_FUNC: number; + TEXTURE30: number; + VIEWPORT: number; + STENCIL_BITS: number; + FLOAT: number; + COLOR_WRITEMASK: number; + SAMPLE_COVERAGE_VALUE: number; + TEXTURE_CUBE_MAP_NEGATIVE_Y: number; + STENCIL_BACK_FAIL: number; + FLOAT_MAT4: number; + UNSIGNED_SHORT_4_4_4_4: number; + TEXTURE6: number; + RENDERBUFFER_WIDTH: number; + RGBA4: number; + ALWAYS: number; + BLEND_EQUATION_ALPHA: number; + COLOR_BUFFER_BIT: number; + TEXTURE_CUBE_MAP: number; + DEPTH_BUFFER_BIT: number; + STENCIL_CLEAR_VALUE: number; + BLEND_EQUATION: number; + RENDERBUFFER_GREEN_SIZE: number; + NEAREST_MIPMAP_LINEAR: number; + VERTEX_ATTRIB_ARRAY_TYPE: number; + INCR_WRAP: number; + ONE_MINUS_DST_COLOR: number; + HIGH_FLOAT: number; + BYTE: number; + FRONT_FACE: number; + SAMPLE_ALPHA_TO_COVERAGE: number; + CCW: number; + TEXTURE13: number; + MAX_VERTEX_ATTRIBS: number; + MAX_VERTEX_TEXTURE_IMAGE_UNITS: number; + TEXTURE_WRAP_T: number; + UNPACK_PREMULTIPLY_ALPHA_WEBGL: number; + FLOAT_VEC2: number; + LUMINANCE: number; + GREATER: number; + INT_VEC2: number; + VALIDATE_STATUS: number; + FRAMEBUFFER: number; + FRAMEBUFFER_UNSUPPORTED: number; + TEXTURE5: number; + FUNC_SUBTRACT: number; + BLEND_DST_ALPHA: number; + SAMPLER_CUBE: number; + ONE_MINUS_DST_ALPHA: number; + LESS: number; + TEXTURE_CUBE_MAP_POSITIVE_X: number; + BLUE_BITS: number; + DEPTH_TEST: number; + VERTEX_ATTRIB_ARRAY_STRIDE: number; + DELETE_STATUS: number; + TEXTURE18: number; + POLYGON_OFFSET_FACTOR: number; + UNSIGNED_INT: number; + TEXTURE_2D: number; + DST_COLOR: number; + FLOAT_MAT2: number; + COMPRESSED_TEXTURE_FORMATS: number; + MAX_FRAGMENT_UNIFORM_VECTORS: number; + DEPTH_STENCIL_ATTACHMENT: number; + LUMINANCE_ALPHA: number; + CW: number; + VERTEX_ATTRIB_ARRAY_NORMALIZED: number; + TEXTURE_CUBE_MAP_NEGATIVE_Z: number; + LINEAR_MIPMAP_LINEAR: number; + BUFFER_SIZE: number; + SAMPLE_BUFFERS: number; + TEXTURE15: number; + ACTIVE_TEXTURE: number; + VERTEX_SHADER: number; + TEXTURE22: number; + VERTEX_ATTRIB_ARRAY_POINTER: number; + INCR: number; + COMPILE_STATUS: number; + MAX_COMBINED_TEXTURE_IMAGE_UNITS: number; + TEXTURE7: number; + UNSIGNED_SHORT_5_5_5_1: number; + DEPTH_BITS: number; + RGBA: number; + TRIANGLE_STRIP: number; + COLOR_CLEAR_VALUE: number; + BROWSER_DEFAULT_WEBGL: number; + INVALID_ENUM: number; + SCISSOR_TEST: number; + LINE_STRIP: number; + FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number; + STENCIL_FUNC: number; + FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number; + RENDERBUFFER_HEIGHT: number; + TEXTURE8: number; + TRIANGLES: number; + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number; + STENCIL_BACK_VALUE_MASK: number; + TEXTURE25: number; + RENDERBUFFER: number; + LEQUAL: number; + TEXTURE1: number; + STENCIL_INDEX8: number; + FUNC_ADD: number; + STENCIL_FAIL: number; + BLEND_SRC_ALPHA: number; + BOOL: number; + ALPHA_BITS: number; + LOW_INT: number; + TEXTURE10: number; + SRC_COLOR: number; + MAX_VARYING_VECTORS: number; + BLEND_DST_RGB: number; + TEXTURE_BINDING_CUBE_MAP: number; + STENCIL_INDEX: number; + TEXTURE_BINDING_2D: number; + MEDIUM_INT: number; + SHADER_TYPE: number; + POLYGON_OFFSET_FILL: number; + DYNAMIC_DRAW: number; + TEXTURE4: number; + STENCIL_BACK_PASS_DEPTH_FAIL: number; + STREAM_DRAW: number; + MAX_CUBE_MAP_TEXTURE_SIZE: number; + TEXTURE17: number; + TRIANGLE_FAN: number; + UNPACK_ALIGNMENT: number; + CURRENT_PROGRAM: number; + LINES: number; + INVALID_OPERATION: number; + FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number; + LINEAR_MIPMAP_NEAREST: number; + CLAMP_TO_EDGE: number; + RENDERBUFFER_DEPTH_SIZE: number; + TEXTURE_WRAP_S: number; + ELEMENT_ARRAY_BUFFER: number; + UNSIGNED_SHORT_5_6_5: number; + ACTIVE_UNIFORMS: number; + FLOAT_VEC3: number; + NO_ERROR: number; + ATTACHED_SHADERS: number; + DEPTH_ATTACHMENT: number; + TEXTURE11: number; + STENCIL_TEST: number; + ONE: number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number; + STATIC_DRAW: number; + GEQUAL: number; + BOOL_VEC4: number; + COLOR_ATTACHMENT0: number; + PACK_ALIGNMENT: number; + MAX_TEXTURE_SIZE: number; + STENCIL_PASS_DEPTH_FAIL: number; + CULL_FACE_MODE: number; + TEXTURE16: number; + STENCIL_BACK_WRITEMASK: number; + SRC_ALPHA: number; + UNSIGNED_SHORT: number; + TEXTURE21: number; + FUNC_REVERSE_SUBTRACT: number; + SHADING_LANGUAGE_VERSION: number; + EQUAL: number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number; + BOOL_VEC3: number; + SAMPLER_2D: number; + TEXTURE_CUBE_MAP_NEGATIVE_X: number; + MAX_TEXTURE_IMAGE_UNITS: number; + TEXTURE_CUBE_MAP_POSITIVE_Y: number; + RENDERBUFFER_INTERNAL_FORMAT: number; + STENCIL_VALUE_MASK: number; + ELEMENT_ARRAY_BUFFER_BINDING: number; + ARRAY_BUFFER: number; + DEPTH_RANGE: number; + NICEST: number; + ACTIVE_ATTRIBUTES: number; + NEVER: number; + FLOAT_VEC4: number; + CURRENT_VERTEX_ATTRIB: number; + STENCIL_PASS_DEPTH_PASS: number; + INVERT: number; + LINK_STATUS: number; + RGB: number; + INT_VEC4: number; + TEXTURE2: number; + UNPACK_COLORSPACE_CONVERSION_WEBGL: number; + MEDIUM_FLOAT: number; + SRC_ALPHA_SATURATE: number; + BUFFER_USAGE: number; + SHORT: number; + NONE: number; + UNSIGNED_BYTE: number; + INT: number; + SUBPIXEL_BITS: number; + KEEP: number; + SAMPLES: number; + FRAGMENT_SHADER: number; + LINE_WIDTH: number; + BLEND_SRC_RGB: number; + LOW_FLOAT: number; + VERSION: number; } -interface TextTrack { - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLProgram extends WebGLObject { +} +declare var WebGLProgram: { + prototype: WebGLProgram; + new(): WebGLProgram; } -interface IDBRequest { - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface OES_standard_derivatives { + FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number; +} +declare var OES_standard_derivatives: { + prototype: OES_standard_derivatives; + new(): OES_standard_derivatives; + FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number; } -interface MessagePort { - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLFramebuffer extends WebGLObject { +} +declare var WebGLFramebuffer: { + prototype: WebGLFramebuffer; + new(): WebGLFramebuffer; } -interface ApplicationCache { - addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLShader extends WebGLObject { +} +declare var WebGLShader: { + prototype: WebGLShader; + new(): WebGLShader; } -interface AbstractWorker { - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface OES_texture_float_linear { } -interface Worker { - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +declare var OES_texture_float_linear: { + prototype: OES_texture_float_linear; + new(): OES_texture_float_linear; } -interface GlobalEventHandlers { - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLObject { } -interface KeyOperation { - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +declare var WebGLObject: { + prototype: WebGLObject; + new(): WebGLObject; } -interface MSInputMethodContext { - addEventListener(type: "candidatewindowshow", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "candidatewindowhide", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: "candidatewindowupdate", listener: (ev: any) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLBuffer extends WebGLObject { +} +declare var WebGLBuffer: { + prototype: WebGLBuffer; + new(): WebGLBuffer; } -interface MSWebViewAsyncOperation { - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface WebGLShaderPrecisionFormat { + rangeMin: number; + rangeMax: number; + precision: number; +} +declare var WebGLShaderPrecisionFormat: { + prototype: WebGLShaderPrecisionFormat; + new(): WebGLShaderPrecisionFormat; } -interface CryptoOperation { - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +interface EXT_texture_filter_anisotropic { + TEXTURE_MAX_ANISOTROPY_EXT: number; + MAX_TEXTURE_MAX_ANISOTROPY_EXT: number; +} +declare var EXT_texture_filter_anisotropic: { + prototype: EXT_texture_filter_anisotropic; + new(): EXT_texture_filter_anisotropic; + TEXTURE_MAX_ANISOTROPY_EXT: number; + MAX_TEXTURE_MAX_ANISOTROPY_EXT: number; } +declare var Option: { new(text?: string, value?: string, defaultSelected?: boolean, selected?:boolean): HTMLOptionElement; }; +declare var Image: { new(width?: number, height?: number): HTMLImageElement; }; +declare var Audio: { new(src?: string): HTMLAudioElement; }; +declare var ondragend: (ev: DragEvent) => any; +declare var onkeydown: (ev: KeyboardEvent) => any; +declare var ondragover: (ev: DragEvent) => any; +declare var onkeyup: (ev: KeyboardEvent) => any; +declare var onreset: (ev: Event) => any; +declare var onmouseup: (ev: MouseEvent) => any; +declare var ondragstart: (ev: DragEvent) => any; +declare var ondrag: (ev: DragEvent) => any; +declare var screenX: number; +declare var onmouseover: (ev: MouseEvent) => any; +declare var ondragleave: (ev: DragEvent) => any; +declare var history: History; +declare var pageXOffset: number; +declare var name: string; +declare var onafterprint: (ev: Event) => any; +declare var onpause: (ev: Event) => any; +declare var onbeforeprint: (ev: Event) => any; +declare var top: Window; +declare var onmousedown: (ev: MouseEvent) => any; +declare var onseeked: (ev: Event) => any; +declare var opener: Window; +declare var onclick: (ev: MouseEvent) => any; +declare var innerHeight: number; +declare var onwaiting: (ev: Event) => any; +declare var ononline: (ev: Event) => any; +declare var ondurationchange: (ev: Event) => any; +declare var frames: Window; +declare var onblur: (ev: FocusEvent) => any; +declare var onemptied: (ev: Event) => any; +declare var onseeking: (ev: Event) => any; +declare var oncanplay: (ev: Event) => any; +declare var outerWidth: number; +declare var onstalled: (ev: Event) => any; +declare var onmousemove: (ev: MouseEvent) => any; +declare var innerWidth: number; +declare var onoffline: (ev: Event) => any; +declare var length: number; +declare var screen: Screen; +declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; +declare var onratechange: (ev: Event) => any; +declare var onstorage: (ev: StorageEvent) => any; +declare var onloadstart: (ev: Event) => any; +declare var ondragenter: (ev: DragEvent) => any; +declare var onsubmit: (ev: Event) => any; +declare var self: Window; +declare var document: Document; +declare var onprogress: (ev: ProgressEvent) => any; +declare var ondblclick: (ev: MouseEvent) => any; +declare var pageYOffset: number; +declare var oncontextmenu: (ev: MouseEvent) => any; +declare var onchange: (ev: Event) => any; +declare var onloadedmetadata: (ev: Event) => any; +declare var onplay: (ev: Event) => any; +declare var onerror: ErrorEventHandler; +declare var onplaying: (ev: Event) => any; +declare var parent: Window; +declare var location: Location; +declare var oncanplaythrough: (ev: Event) => any; +declare var onabort: (ev: UIEvent) => any; +declare var onreadystatechange: (ev: Event) => any; +declare var outerHeight: number; +declare var onkeypress: (ev: KeyboardEvent) => any; +declare var frameElement: Element; +declare var onloadeddata: (ev: Event) => any; +declare var onsuspend: (ev: Event) => any; +declare var window: Window; +declare var onfocus: (ev: FocusEvent) => any; +declare var onmessage: (ev: MessageEvent) => any; +declare var ontimeupdate: (ev: Event) => any; +declare var onresize: (ev: UIEvent) => any; +declare var onselect: (ev: UIEvent) => any; +declare var navigator: Navigator; +declare var styleMedia: StyleMedia; +declare var ondrop: (ev: DragEvent) => any; +declare var onmouseout: (ev: MouseEvent) => any; +declare var onended: (ev: Event) => any; +declare var onhashchange: (ev: Event) => any; +declare var onunload: (ev: Event) => any; +declare var onscroll: (ev: UIEvent) => any; +declare var screenY: number; +declare var onmousewheel: (ev: MouseWheelEvent) => any; +declare var onload: (ev: Event) => any; +declare var onvolumechange: (ev: Event) => any; +declare var oninput: (ev: Event) => any; +declare var performance: Performance; +declare var onmspointerdown: (ev: any) => any; +declare var animationStartTime: number; +declare var onmsgesturedoubletap: (ev: any) => any; +declare var onmspointerhover: (ev: any) => any; +declare var onmsgesturehold: (ev: any) => any; +declare var onmspointermove: (ev: any) => any; +declare var onmsgesturechange: (ev: any) => any; +declare var onmsgesturestart: (ev: any) => any; +declare var onmspointercancel: (ev: any) => any; +declare var onmsgestureend: (ev: any) => any; +declare var onmsgesturetap: (ev: any) => any; +declare var onmspointerout: (ev: any) => any; +declare var msAnimationStartTime: number; +declare var applicationCache: ApplicationCache; +declare var onmsinertiastart: (ev: any) => any; +declare var onmspointerover: (ev: any) => any; +declare var onpopstate: (ev: PopStateEvent) => any; +declare var onmspointerup: (ev: any) => any; +declare var onpageshow: (ev: PageTransitionEvent) => any; +declare var ondevicemotion: (ev: DeviceMotionEvent) => any; +declare var devicePixelRatio: number; +declare var msCrypto: Crypto; +declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; +declare var doNotTrack: string; +declare var onmspointerenter: (ev: any) => any; +declare var onpagehide: (ev: PageTransitionEvent) => any; +declare var onmspointerleave: (ev: any) => any; +declare function alert(message?: any): void; +declare function scroll(x?: number, y?: number): void; +declare function focus(): void; +declare function scrollTo(x?: number, y?: number): void; +declare function print(): void; +declare function prompt(message?: string, _default?: string): string; +declare function toString(): string; +declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window; +declare function scrollBy(x?: number, y?: number): void; +declare function confirm(message?: string): boolean; +declare function close(): void; +declare function postMessage(message: any, targetOrigin: string, ports?: any): void; +declare function showModalDialog(url?: string, argument?: any, options?: any): any; +declare function blur(): void; +declare function getSelection(): Selection; +declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; +declare function msCancelRequestAnimationFrame(handle: number): void; +declare function matchMedia(mediaQuery: string): MediaQueryList; +declare function cancelAnimationFrame(handle: number): void; +declare function msIsStaticHTML(html: string): boolean; +declare function msMatchMedia(mediaQuery: string): MediaQueryList; +declare function requestAnimationFrame(callback: FrameRequestCallback): number; +declare function msRequestAnimationFrame(callback: FrameRequestCallback): number; +declare function removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void; +declare function dispatchEvent(evt: Event): boolean; +declare function attachEvent(event: string, listener: EventListener): boolean; +declare function detachEvent(event: string, listener: EventListener): void; +declare var localStorage: Storage; +declare var status: string; +declare var onmouseleave: (ev: MouseEvent) => any; +declare var screenLeft: number; +declare var offscreenBuffering: any; +declare var maxConnectionsPerServer: number; +declare var onmouseenter: (ev: MouseEvent) => any; +declare var clipboardData: DataTransfer; +declare var defaultStatus: string; +declare var clientInformation: Navigator; +declare var closed: boolean; +declare var onhelp: (ev: Event) => any; +declare var external: External; +declare var event: MSEventObj; +declare var onfocusout: (ev: FocusEvent) => any; +declare var screenTop: number; +declare var onfocusin: (ev: FocusEvent) => any; +declare function showModelessDialog(url?: string, argument?: any, options?: any): Window; +declare function navigate(url: string): void; +declare function resizeBy(x?: number, y?: number): void; +declare function item(index: any): any; +declare function resizeTo(x?: number, y?: number): void; +declare function createPopup(arguments?: any): MSPopupWindow; +declare function toStaticHTML(html: string): string; +declare function execScript(code: string, language?: string): any; +declare function msWriteProfilerMark(profilerMarkName: string): void; +declare function moveTo(x?: number, y?: number): void; +declare function moveBy(x?: number, y?: number): void; +declare function showHelp(url: string, helpArg?: any, features?: string): void; +declare function captureEvents(): void; +declare function releaseEvents(): void; +declare var sessionStorage: Storage; +declare function clearTimeout(handle: number): void; +declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; +declare function clearInterval(handle: number): void; +declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function msSetImmediate(expression: any, ...args: any[]): number; +declare function clearImmediate(handle: number): void; +declare function msClearImmediate(handle: number): void; +declare function setImmediate(expression: any, ...args: any[]): number; +declare function btoa(rawString: string): string; +declare function atob(encodedString: string): string; +declare var msIndexedDB: IDBFactory; +declare var indexedDB: IDBFactory; +declare var console: Console; +declare var onpointerenter: (ev: PointerEvent) => any; +declare var onpointerout: (ev: PointerEvent) => any; +declare var onpointerdown: (ev: PointerEvent) => any; +declare var onpointerup: (ev: PointerEvent) => any; +declare var onpointercancel: (ev: PointerEvent) => any; +declare var onpointerover: (ev: PointerEvent) => any; +declare var onpointermove: (ev: PointerEvent) => any; +declare var onpointerleave: (ev: PointerEvent) => any; declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -14929,17 +14135,17 @@ declare function addEventListener(type: "pagehide", listener: (ev: PageTransitio declare function addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListener, useCapture?: boolean): void; - ///////////////////////////// /// WorkerGlobalScope APIs ///////////////////////////// -// TODO: These are only available in a Web Worker - should be in a separate lib file +// These are only available in a Web Worker declare function importScripts(...urls: string[]): void; ///////////////////////////// /// Windows Script Host APIS ///////////////////////////// + declare var ActiveXObject: { new (s: string): any; }; interface ITextWriter { diff --git a/third_party/typescript/typescriptServices.js b/third_party/typescript/typescriptServices.js index b446b07..aa0db31 100644 --- a/third_party/typescript/typescriptServices.js +++ b/third_party/typescript/typescriptServices.js @@ -13,69645 +13,32831 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -/*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- - -The TypeScript software is based on or incorporates material and code from the projects listed below -(collectively "Third Party Code"). Microsoft is not the original author of the -Third Party Code. The original copyright notice and the license, under which -Microsoft received such Third Party Code, are set forth below. Such license and -notices are provided for informational purposes only. Microsoft licenses the Third -Party Code to you under the terms of the Apache 2.0 License. -All Third Party Code licensed by Microsoft under the Apache License, Version 2.0 (the "License"); you -may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR -CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions and -limitations under the License. ---------------------------------------------- -Third Party Code Components --------------------------------------------- ----- Mozilla Developer Code--------- -The following Mozilla Developer Code is under Public Domain as updated after Aug. 20, 2012, see, https://developer.mozilla.org/en-US/docs/Project:Copyrights -1. Array filter Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter -Any copyright is dedicated to the Public Domain. - -2. Array forEach Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach -Any copyright is dedicated to the Public Domain. - -3. Array indexOf Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf -Any copyright is dedicated to the Public Domain. - -4. Array map Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map -Any copyright is dedicated to the Public Domain. - -5. Array Reduce Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce -Any copyright is dedicated to the Public Domain. - -6. String Trim Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim -Any copyright is dedicated to the Public Domain. - -7. Date now Compatibility Method, -Available at https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now -Any copyright is dedicated to the Public Domain. - -------------JSON2 Script------------------------ -json2.js 2012-10-08 -Public Domain. -NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -See, http://www.JSON.org/js.html - ---------------r.js---------------------- -Copyright (c) 2010-2011 Dojo Foundation. All Rights Reserved. -Originally License under MIT License -------------------------------------------------------------------------- -Provided for Informational Purposes Only -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------------- - -------------- End of ThirdPartyNotices --------------------------------------------------- */ -var TypeScript; -(function (TypeScript) { - TypeScript.DiagnosticCode = { - error_TS_0_1: "error TS{0}: {1}", - warning_TS_0_1: "warning TS{0}: {1}", - Unrecognized_escape_sequence: "Unrecognized escape sequence.", - Unexpected_character_0: "Unexpected character {0}.", - Missing_close_quote_character: "Missing close quote character.", - Identifier_expected: "Identifier expected.", - _0_keyword_expected: "'{0}' keyword expected.", - _0_expected: "'{0}' expected.", - Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.", - Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.", - Unexpected_token_0_expected: "Unexpected token; '{0}' expected.", - Trailing_separator_not_allowed: "Trailing separator not allowed.", - AsteriskSlash_expected: "'*/' expected.", - public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.", - Unexpected_token: "Unexpected token.", - Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.", - Rest_parameter_must_be_last_in_list: "Rest parameter must be last in list.", - Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.", - Required_parameter_cannot_follow_optional_parameter: "Required parameter cannot follow optional parameter.", - Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.", - Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.", - Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.", - Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.", - Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.", - Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.", - Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.", - extends_clause_already_seen: "'extends' clause already seen.", - extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.", - Classes_can_only_extend_a_single_class: "Classes can only extend a single class.", - implements_clause_already_seen: "'implements' clause already seen.", - Accessibility_modifier_already_seen: "Accessibility modifier already seen.", - _0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.", - _0_modifier_already_seen: "'{0}' modifier already seen.", - _0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.", - Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.", - super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.", - Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.", - Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.", - Implementations_are_not_allowed_in_ambient_contexts: "Implementations are not allowed in ambient contexts.", - declare_modifier_not_allowed_for_code_already_in_an_ambient_context: "'declare' modifier not allowed for code already in an ambient context.", - Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.", - Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration: "Parameter property declarations can only be used in a non-ambient constructor declaration.", - Function_implementation_expected: "Function implementation expected.", - Constructor_implementation_expected: "Constructor implementation expected.", - Function_overload_name_must_be_0: "Function overload name must be '{0}'.", - _0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.", - declare_modifier_cannot_appear_on_an_interface_declaration: "'declare' modifier cannot appear on an interface declaration.", - declare_modifier_required_for_top_level_element: "'declare' modifier required for top level element.", - Rest_parameter_cannot_be_optional: "Rest parameter cannot be optional.", - Rest_parameter_cannot_have_an_initializer: "Rest parameter cannot have an initializer.", - set_accessor_must_have_one_and_only_one_parameter: "'set' accessor must have one and only one parameter.", - set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.", - set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.", - set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.", - get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.", - Modifiers_cannot_appear_here: "Modifiers cannot appear here.", - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.", - Class_name_cannot_be_0: "Class name cannot be '{0}'.", - Interface_name_cannot_be_0: "Interface name cannot be '{0}'.", - Enum_name_cannot_be_0: "Enum name cannot be '{0}'.", - Module_name_cannot_be_0: "Module name cannot be '{0}'.", - Enum_member_must_have_initializer: "Enum member must have initializer.", - Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.", - Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.", - Module_cannot_have_multiple_export_assignments: "Module cannot have multiple export assignments.", - Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.", - module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement", - constructor_function_accessor_or_variable: "constructor, function, accessor or variable", - statement: "statement", - case_or_default_clause: "case or default clause", - identifier: "identifier", - call_construct_index_property_or_function_signature: "call, construct, index, property or function signature", - expression: "expression", - type_name: "type name", - property_or_accessor: "property or accessor", - parameter: "parameter", - type: "type", - type_parameter: "type parameter", - declare_modifier_not_allowed_on_import_declaration: "'declare' modifier not allowed on import declaration.", - Function_overload_must_be_static: "Function overload must be static.", - Function_overload_must_not_be_static: "Function overload must not be static.", - Parameter_property_declarations_cannot_be_used_in_a_constructor_overload: "Parameter property declarations cannot be used in a constructor overload.", - Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.", - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.", - Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.", - _0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.", - _0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.", - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.", - Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.", - Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.", - Duplicate_identifier_0: "Duplicate identifier '{0}'.", - The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", - The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", - super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.", - The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.", - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?", - Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.", - Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.", - Value_of_type_0_is_not_indexable_by_type_1: "Value of type '{0}' is not indexable by type '{1}'.", - Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.", - Operator_0_cannot_be_applied_to_types_1_and_2_3: "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}", - Cannot_convert_0_to_1: "Cannot convert '{0}' to '{1}'.", - Cannot_convert_0_to_1_NL_2: "Cannot convert '{0}' to '{1}':{NL}{2}", - Expected_var_class_interface_or_module: "Expected var, class, interface, or module.", - Operator_0_cannot_be_applied_to_type_1: "Operator '{0}' cannot be applied to type '{1}'.", - Getter_0_already_declared: "Getter '{0}' already declared.", - Setter_0_already_declared: "Setter '{0}' already declared.", - Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.", - Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.", - Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.", - Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.", - Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.", - Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.", - Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.", - Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.", - Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.", - Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.", - Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.", - Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.", - Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.", - Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.", - Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.", - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.", - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.", - Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.", - Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.", - Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.", - Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.", - Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.", - Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}", - Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.", - Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.", - Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.", - Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.", - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.", - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.", - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.", - Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.", - Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.", - Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.", - Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.", - Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.", - Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.", - Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.", - Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.", - Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.", - Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.", - Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.", - Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.", - Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.", - Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.", - Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.", - new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", - A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.", - Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.", - Unable_to_resolve_external_module_0: "Unable to resolve external module '{0}'.", - Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.", - A_class_may_only_extend_another_class: "A class may only extend another class.", - A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.", - An_interface_may_only_extend_another_class_or_interface: "An interface may only extend another class or interface.", - Unable_to_resolve_type: "Unable to resolve type.", - Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.", - Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.", - Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.", - Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.", - Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}", - Invalid_new_expression: "Invalid 'new' expression.", - Call_signatures_used_in_a_new_expression_must_have_a_void_return_type: "Call signatures used in a 'new' expression must have a 'void' return type.", - Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.", - Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2: "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.", - Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.", - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.", - Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.", - Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).", - Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.", - Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.", - The_property_0_does_not_exist_on_value_of_type_1: "The property '{0}' does not exist on value of type '{1}'.", - Could_not_find_symbol_0: "Could not find symbol '{0}'.", - get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.", - this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.", - Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.", - Class_0_is_recursively_referenced_as_a_base_type_of_itself: "Class '{0}' is recursively referenced as a base type of itself.", - Interface_0_is_recursively_referenced_as_a_base_type_of_itself: "Interface '{0}' is recursively referenced as a base type of itself.", - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.", - super_cannot_be_referenced_in_non_derived_classes: "'super' cannot be referenced in non-derived classes.", - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.", - Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.", - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.", - _0_1_is_inaccessible: "'{0}.{1}' is inaccessible.", - this_cannot_be_referenced_within_module_bodies: "'this' cannot be referenced within module bodies.", - Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.", - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", - The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type: "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.", - Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.", - Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.", - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.", - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.", - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.", - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.", - Setters_cannot_return_a_value: "Setters cannot return a value.", - Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.", - Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.", - Type_0_does_not_have_type_parameters: "Type '{0}' does not have type parameters.", - Getters_must_return_a_value: "Getters must return a value.", - Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.", - Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.", - Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.", - Cannot_resolve_return_type_reference: "Cannot resolve return type reference.", - Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.", - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.", - All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.", - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.", - Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}", - Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}", - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.", - this_cannot_be_referenced_in_static_initializers_in_a_class_body: "'this' cannot be referenced in static initializers in a class body.", - Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}", - Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}", - Duplicate_overload_signature_for_0: "Duplicate overload signature for '{0}'.", - Duplicate_constructor_overload_signature: "Duplicate constructor overload signature.", - Duplicate_overload_call_signature: "Duplicate overload call signature.", - Duplicate_overload_construct_signature: "Duplicate overload construct signature.", - Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.", - Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}", - Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.", - Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.", - Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.", - Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.", - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.", - this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.", - Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.", - Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.", - Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.", - A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.", - Rest_parameters_must_be_array_types: "Rest parameters must be array types.", - Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.", - Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.", - Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.", - Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.", - Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.", - All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}", - All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.", - All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}", - Generic_type_references_must_include_all_type_arguments: "Generic type references must include all type arguments.", - Default_arguments_are_only_allowed_in_implementation: "Default arguments are only allowed in implementation.", - Overloads_cannot_differ_only_by_return_type: "Overloads cannot differ only by return type.", - Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.", - Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.", - Could_not_find_symbol_0_in_module_1: "Could not find symbol '{0}' in module '{1}'.", - Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.", - Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.", - Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.", - Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.", - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.", - Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.", - Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.", - Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}", - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.", - Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.", - All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.", - super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.", - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.", - Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.", - Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.", - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.", - Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions: "Could not find the best common type of types of all return statement expressions.", - Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.", - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.", - continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.", - break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.", - Jump_target_not_found: "Jump target not found.", - Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.", - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.", - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.", - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.", - TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.", - TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.", - TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}", - TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.", - TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.", - TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.", - TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.", - TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.", - TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.", - TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.", - Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.", - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.", - Type_of_conditional_0_must_be_identical_to_1_or_2: "Type of conditional '{0}' must be identical to '{1}' or '{2}'.", - Type_of_conditional_0_must_be_identical_to_1_2_or_3: "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.", - Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.", - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.", - Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.", - Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.", - Duplicate_string_index_signature: "Duplicate string index signature.", - Duplicate_number_index_signature: "Duplicate number index signature.", - All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.", - Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.", - Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.", - Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.", - Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}", - Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.", - Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.", - Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.", - Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.", - Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.", - Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.", - Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", - Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.", - Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.", - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.", - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.", - Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}", - Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.", - Type_reference_must_refer_to_type: "Type reference must refer to type.", - In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.", - _0_overload_s: " (+ {0} overload(s))", - Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.", - Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.", - Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.", - Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}", - Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.", - Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.", - Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.", - Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}", - Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}", - Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}", - Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", - Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", - Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.", - Current_host_does_not_support_0_option: "Current host does not support '{0}' option.", - ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'", - Module_code_generation_0_not_supported: "Module code generation '{0}' not supported.", - Could_not_find_file_0: "Could not find file: '{0}'.", - A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.", - Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.", - Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.", - Emit_Error_0: "Emit Error: {0}.", - Cannot_read_file_0_1: "Cannot read file '{0}': {1}", - Unsupported_file_encoding: "Unsupported file encoding.", - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form or -. For example '{0}' or '{1}'.", - Unsupported_locale_0: "Unsupported locale: '{0}'.", - Execution_Failed_NL: "Execution Failed.{NL}", - Invalid_call_to_up: "Invalid call to 'up'", - Invalid_call_to_down: "Invalid call to 'down'", - Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.", - Unknown_option_0: "Unknown option '{0}'", - Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.", - Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}", - Could_not_delete_file_0: "Could not delete file '{0}'", - Could_not_create_directory_0: "Could not create directory '{0}'", - Error_while_executing_file_0: "Error while executing file '{0}': ", - Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.", - Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.", - Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.", - Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.", - Option_0_specified_without_1: "Option '{0}' specified without '{1}'", - codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.", - Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.", - Generates_corresponding_0_file: "Generates corresponding {0} file.", - Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.", - Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.", - Watch_input_files: "Watch input files.", - Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.", - Do_not_emit_comments_to_output: "Do not emit comments to output.", - Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.", - Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'", - Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'", - Print_this_message: "Print this message.", - Print_the_compiler_s_version_0: "Print the compiler's version: {0}", - Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.", - Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'", - Syntax_0: "Syntax: {0}", - options: "options", - file1: "file", - Examples: "Examples:", - Options: "Options:", - Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.", - Version_0: "Version {0}", - Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.", - NL_Recompiling_0: "{NL}Recompiling ({0}):", - STRING: "STRING", - KIND: "KIND", - file2: "FILE", - VERSION: "VERSION", - LOCATION: "LOCATION", - DIRECTORY: "DIRECTORY", - NUMBER: "NUMBER", - Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.", - Additional_locations: "Additional locations:", - This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.", - Unknown_rule: "Unknown rule.", - Invalid_line_number_0: "Invalid line number ({0})", - Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.", - Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.", - Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.", - Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.", - Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.", - new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.", - _0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.", - Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.", - Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.", - Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.", - Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.", - Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.", - _0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.", - Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.", - Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening." - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ArrayUtilities = (function () { - function ArrayUtilities() { - } - ArrayUtilities.isArray = function (value) { - return Object.prototype.toString.apply(value, []) === '[object Array]'; - }; - - ArrayUtilities.sequenceEquals = function (array1, array2, equals) { - if (array1 === array2) { - return true; - } - - if (array1 === null || array2 === null) { - return false; - } - - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0, n = array1.length; i < n; i++) { - if (!equals(array1[i], array2[i])) { - return false; - } - } - - return true; - }; - - ArrayUtilities.contains = function (array, value) { - for (var i = 0; i < array.length; i++) { - if (array[i] === value) { - return true; - } - } - - return false; - }; - - ArrayUtilities.groupBy = function (array, func) { - var result = {}; - - for (var i = 0, n = array.length; i < n; i++) { - var v = array[i]; - var k = func(v); - - var list = result[k] || []; - list.push(v); - result[k] = list; - } - - return result; - }; - - ArrayUtilities.distinct = function (array, equalsFn) { - var result = []; - - for (var i = 0, n = array.length; i < n; i++) { - var current = array[i]; - for (var j = 0; j < result.length; j++) { - if (equalsFn(result[j], current)) { - break; - } - } - - if (j === result.length) { - result.push(current); - } - } - - return result; - }; - - ArrayUtilities.min = function (array, func) { - var min = func(array[0]); - - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next < min) { - min = next; - } - } - - return min; - }; - - ArrayUtilities.max = function (array, func) { - var max = func(array[0]); - - for (var i = 1; i < array.length; i++) { - var next = func(array[i]); - if (next > max) { - max = next; - } - } - - return max; - }; - - ArrayUtilities.last = function (array) { - if (array.length === 0) { - throw TypeScript.Errors.argumentOutOfRange('array'); - } - - return array[array.length - 1]; - }; - - ArrayUtilities.lastOrDefault = function (array, predicate) { - for (var i = array.length - 1; i >= 0; i--) { - var v = array[i]; - if (predicate(v, i)) { - return v; - } - } - - return null; - }; - - ArrayUtilities.firstOrDefault = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (func(value, i)) { - return value; - } - } - - return null; - }; - - ArrayUtilities.first = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - var value = array[i]; - if (!func || func(value, i)) { - return value; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - - ArrayUtilities.sum = function (array, func) { - var result = 0; - - for (var i = 0, n = array.length; i < n; i++) { - result += func(array[i]); - } - - return result; - }; - - ArrayUtilities.select = function (values, func) { - var result = new Array(values.length); - - for (var i = 0; i < values.length; i++) { - result[i] = func(values[i]); - } - - return result; - }; - - ArrayUtilities.where = function (values, func) { - var result = new Array(); - - for (var i = 0; i < values.length; i++) { - if (func(values[i])) { - result.push(values[i]); - } - } - - return result; - }; - - ArrayUtilities.any = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (func(array[i])) { - return true; - } - } - - return false; - }; - - ArrayUtilities.all = function (array, func) { - for (var i = 0, n = array.length; i < n; i++) { - if (!func(array[i])) { - return false; - } - } - - return true; - }; - - ArrayUtilities.binarySearch = function (array, value) { - var low = 0; - var high = array.length - 1; - - while (low <= high) { - var middle = low + ((high - low) >> 1); - var midValue = array[middle]; - - if (midValue === value) { - return middle; - } else if (midValue > value) { - high = middle - 1; - } else { - low = middle + 1; - } - } - - return ~low; - }; - - ArrayUtilities.createArray = function (length, defaultValue) { - var result = new Array(length); - for (var i = 0; i < length; i++) { - result[i] = defaultValue; - } - - return result; - }; - - ArrayUtilities.grow = function (array, length, defaultValue) { - var count = length - array.length; - for (var i = 0; i < count; i++) { - array.push(defaultValue); - } - }; - - ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) { - for (var i = 0; i < length; i++) { - destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]; - } - }; - - ArrayUtilities.indexOf = function (array, predicate) { - for (var i = 0, n = array.length; i < n; i++) { - if (predicate(array[i])) { - return i; - } - } - - return -1; - }; - return ArrayUtilities; - })(); - TypeScript.ArrayUtilities = ArrayUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitVector) { - var pool = []; - var Constants; - (function (Constants) { - Constants[Constants["MaxBitsPerEncodedNumber"] = 30] = "MaxBitsPerEncodedNumber"; - Constants[Constants["BitsPerEncodedBiStateValue"] = 1] = "BitsPerEncodedBiStateValue"; - - Constants[Constants["BitsPerEncodedTriStateValue"] = 2] = "BitsPerEncodedTriStateValue"; - - Constants[Constants["BiStateEncodedTrue"] = 1] = "BiStateEncodedTrue"; - Constants[Constants["BiStateClearBitsMask"] = 1] = "BiStateClearBitsMask"; - - Constants[Constants["TriStateEncodedFalse"] = 1] = "TriStateEncodedFalse"; - Constants[Constants["TriStateEncodedTrue"] = 2] = "TriStateEncodedTrue"; - Constants[Constants["TriStateClearBitsMask"] = 3] = "TriStateClearBitsMask"; - })(Constants || (Constants = {})); - - var BitVectorImpl = (function () { - function BitVectorImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.bits = []; - } - BitVectorImpl.prototype.computeTriStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; - - return (index / encodedValuesPerNumber) >>> 0; - }; - - BitVectorImpl.prototype.computeBiStateArrayIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; - - return (index / encodedValuesPerNumber) >>> 0; - }; - - BitVectorImpl.prototype.computeTriStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 2 /* BitsPerEncodedTriStateValue */; - - return (index % encodedValuesPerNumber) * 2 /* BitsPerEncodedTriStateValue */; - }; - - BitVectorImpl.prototype.computeBiStateEncodedValueIndex = function (index) { - var encodedValuesPerNumber = 30 /* MaxBitsPerEncodedNumber */ / 1 /* BitsPerEncodedBiStateValue */; - - return (index % encodedValuesPerNumber) * 1 /* BitsPerEncodedBiStateValue */; - }; - - BitVectorImpl.prototype.valueAt = function (index) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return undefined; - } - - var bitIndex = this.computeTriStateEncodedValueIndex(index); - if (encoded & (2 /* TriStateEncodedTrue */ << bitIndex)) { - return true; - } else if (encoded & (1 /* TriStateEncodedFalse */ << bitIndex)) { - return false; - } else { - return undefined; - } - } else { - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - return false; - } - - var bitIndex = this.computeBiStateEncodedValueIndex(index); - if (encoded & (1 /* BiStateEncodedTrue */ << bitIndex)) { - return true; - } else { - return false; - } - } - }; - - BitVectorImpl.prototype.setValueAt = function (index, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - if (this.allowUndefinedValues) { - TypeScript.Debug.assert(value === true || value === false || value === undefined, "value must only be true, false or undefined."); - - var arrayIndex = this.computeTriStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === undefined) { - return; - } - - encoded = 0; - } - - var bitIndex = this.computeTriStateEncodedValueIndex(index); - - var clearMask = ~(3 /* TriStateClearBitsMask */ << bitIndex); - encoded = encoded & clearMask; - - if (value === true) { - encoded = encoded | (2 /* TriStateEncodedTrue */ << bitIndex); - } else if (value === false) { - encoded = encoded | (1 /* TriStateEncodedFalse */ << bitIndex); - } - - this.bits[arrayIndex] = encoded; - } else { - TypeScript.Debug.assert(value === true || value === false, "value must only be true or false."); - - var arrayIndex = this.computeBiStateArrayIndex(index); - var encoded = this.bits[arrayIndex]; - if (encoded === undefined) { - if (value === false) { - return; - } - - encoded = 0; - } - - var bitIndex = this.computeBiStateEncodedValueIndex(index); - - encoded = encoded & ~(1 /* BiStateClearBitsMask */ << bitIndex); - - if (value) { - encoded = encoded | (1 /* BiStateEncodedTrue */ << bitIndex); - } - - this.bits[arrayIndex] = encoded; - } - }; - - BitVectorImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - this.bits.length = 0; - pool.push(this); - }; - return BitVectorImpl; - })(); - - function getBitVector(allowUndefinedValues) { - if (pool.length === 0) { - return new BitVectorImpl(allowUndefinedValues); - } - - var vector = pool.pop(); - vector.isReleased = false; - vector.allowUndefinedValues = allowUndefinedValues; - - return vector; - } - BitVector.getBitVector = getBitVector; - })(TypeScript.BitVector || (TypeScript.BitVector = {})); - var BitVector = TypeScript.BitVector; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (BitMatrix) { - var pool = []; - - var BitMatrixImpl = (function () { - function BitMatrixImpl(allowUndefinedValues) { - this.allowUndefinedValues = allowUndefinedValues; - this.isReleased = false; - this.vectors = []; - } - BitMatrixImpl.prototype.valueAt = function (x, y) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - return this.allowUndefinedValues ? undefined : false; - } - - return vector.valueAt(y); - }; - - BitMatrixImpl.prototype.setValueAt = function (x, y, value) { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - var vector = this.vectors[x]; - if (!vector) { - if (value === undefined) { - return; - } - - vector = TypeScript.BitVector.getBitVector(this.allowUndefinedValues); - this.vectors[x] = vector; - } - - vector.setValueAt(y, value); - }; - - BitMatrixImpl.prototype.release = function () { - TypeScript.Debug.assert(!this.isReleased, "Should not use a released bitvector"); - this.isReleased = true; - - for (var name in this.vectors) { - if (this.vectors.hasOwnProperty(name)) { - var vector = this.vectors[name]; - vector.release(); - } - } - - this.vectors.length = 0; - pool.push(this); - }; - return BitMatrixImpl; - })(); - - function getBitMatrix(allowUndefinedValues) { - if (pool.length === 0) { - return new BitMatrixImpl(allowUndefinedValues); - } - - var matrix = pool.pop(); - matrix.isReleased = false; - matrix.allowUndefinedValues = allowUndefinedValues; - - return matrix; - } - BitMatrix.getBitMatrix = getBitMatrix; - })(TypeScript.BitMatrix || (TypeScript.BitMatrix = {})); - var BitMatrix = TypeScript.BitMatrix; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Constants) { - Constants[Constants["Max31BitInteger"] = 1073741823] = "Max31BitInteger"; - Constants[Constants["Min31BitInteger"] = -1073741824] = "Min31BitInteger"; - })(TypeScript.Constants || (TypeScript.Constants = {})); - var Constants = TypeScript.Constants; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (AssertionLevel) { - AssertionLevel[AssertionLevel["None"] = 0] = "None"; - AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; - AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; - AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; - })(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {})); - var AssertionLevel = TypeScript.AssertionLevel; - - var Debug = (function () { - function Debug() { - } - Debug.shouldAssert = function (level) { - return this.currentAssertionLevel >= level; - }; - - Debug.assert = function (expression, message, verboseDebugInfo) { - if (typeof message === "undefined") { message = ""; } - if (typeof verboseDebugInfo === "undefined") { verboseDebugInfo = null; } - if (!expression) { - var verboseDebugString = ""; - if (verboseDebugInfo) { - verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo(); - } - - throw new Error("Debug Failure. False expression: " + message + verboseDebugString); - } - }; - - Debug.fail = function (message) { - Debug.assert(false, message); - }; - Debug.currentAssertionLevel = 0 /* None */; - return Debug; - })(); - TypeScript.Debug = Debug; -})(TypeScript || (TypeScript = {})); -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TypeScript; -(function (TypeScript) { - TypeScript.LocalizedDiagnosticMessages = null; - - var Location = (function () { - function Location(fileName, lineMap, start, length) { - this._fileName = fileName; - this._lineMap = lineMap; - this._start = start; - this._length = length; - } - Location.prototype.fileName = function () { - return this._fileName; - }; - - Location.prototype.lineMap = function () { - return this._lineMap; - }; - - Location.prototype.line = function () { - return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0; - }; - - Location.prototype.character = function () { - return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0; - }; - - Location.prototype.start = function () { - return this._start; - }; - - Location.prototype.length = function () { - return this._length; - }; - - Location.equals = function (location1, location2) { - return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length; - }; - return Location; - })(); - TypeScript.Location = Location; - - var Diagnostic = (function (_super) { - __extends(Diagnostic, _super); - function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - _super.call(this, fileName, lineMap, start, length); - this._diagnosticKey = diagnosticKey; - this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null; - this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null; - } - Diagnostic.prototype.toJSON = function (key) { - var result = {}; - result.start = this.start(); - result.length = this.length(); - - result.diagnosticCode = this._diagnosticKey; - - var _arguments = this.arguments(); - if (_arguments && _arguments.length > 0) { - result.arguments = _arguments; - } - - return result; - }; - - Diagnostic.prototype.diagnosticKey = function () { - return this._diagnosticKey; - }; - - Diagnostic.prototype.arguments = function () { - return this._arguments; - }; - - Diagnostic.prototype.text = function () { - return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.message = function () { - return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments); - }; - - Diagnostic.prototype.additionalLocations = function () { - return this._additionalLocations || []; - }; - - Diagnostic.equals = function (diagnostic1, diagnostic2) { - return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { - return v1 === v2; - }); - }; - - Diagnostic.prototype.info = function () { - return getDiagnosticInfoFromKey(this.diagnosticKey()); - }; - return Diagnostic; - })(Location); - TypeScript.Diagnostic = Diagnostic; - - function newLine() { - return TypeScript.Environment ? TypeScript.Environment.newLine : "\r\n"; - } - TypeScript.newLine = newLine; - - function getLargestIndex(diagnostic) { - var largest = -1; - var regex = /\{(\d+)\}/g; - - var match; - while (match = regex.exec(diagnostic)) { - var val = parseInt(match[1]); - if (!isNaN(val) && val > largest) { - largest = val; - } - } - - return largest; - } - - function getDiagnosticInfoFromKey(diagnosticKey) { - var result = TypeScript.diagnosticInformationMap[diagnosticKey]; - TypeScript.Debug.assert(result); - return result; - } - - function getLocalizedText(diagnosticKey, args) { - if (TypeScript.LocalizedDiagnosticMessages) { - } - - var diagnosticMessageText = TypeScript.LocalizedDiagnosticMessages ? TypeScript.LocalizedDiagnosticMessages[diagnosticKey] : diagnosticKey; - TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null); - - var actualCount = args ? args.length : 0; - - var expectedCount = 1 + getLargestIndex(diagnosticKey); - - if (expectedCount !== actualCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount])); - } - - var valueCount = 1 + getLargestIndex(diagnosticMessageText); - if (valueCount !== expectedCount) { - throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount])); - } - - diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) { - return typeof args[num] !== 'undefined' ? args[num] : match; - }); - - diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) { - return TypeScript.newLine(); - }); - - return diagnosticMessageText; - } - TypeScript.getLocalizedText = getLocalizedText; - - function getDiagnosticMessage(diagnosticKey, args) { - var diagnostic = getDiagnosticInfoFromKey(diagnosticKey); - var diagnosticMessageText = getLocalizedText(diagnosticKey, args); - - var message; - if (diagnostic.category === 1 /* Error */) { - message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else if (diagnostic.category === 0 /* Warning */) { - message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]); - } else { - message = diagnosticMessageText; - } - - return message; - } - TypeScript.getDiagnosticMessage = getDiagnosticMessage; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Errors = (function () { - function Errors() { - } - Errors.argument = function (argument, message) { - return new Error("Invalid argument: " + argument + ". " + message); - }; - - Errors.argumentOutOfRange = function (argument) { - return new Error("Argument out of range: " + argument); - }; - - Errors.argumentNull = function (argument) { - return new Error("Argument null: " + argument); - }; - - Errors.abstract = function () { - return new Error("Operation not implemented properly by subclass."); - }; - - Errors.notYetImplemented = function () { - return new Error("Not yet implemented."); - }; - - Errors.invalidOperation = function (message) { - return new Error("Invalid operation: " + message); - }; - return Errors; - })(); - TypeScript.Errors = Errors; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Hash = (function () { - function Hash() { - } - Hash.computeFnv1aCharArrayHashCode = function (text, start, len) { - var hashCode = Hash.FNV_BASE; - var end = start + len; - - for (var i = start; i < end; i++) { - hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); - } - - return hashCode; - }; - - Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) { - var hash = 0; - - for (var i = 0; i < len; i++) { - var ch = key[start + i]; - - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - return hash & 0x7FFFFFFF; - }; - - Hash.computeSimple31BitStringHashCode = function (key) { - var hash = 0; - - var start = 0; - var len = key.length; - - for (var i = 0; i < len; i++) { - var ch = key.charCodeAt(start + i); - - hash = ((((hash << 5) - hash) | 0) + ch) | 0; - } - - return hash & 0x7FFFFFFF; - }; - - Hash.computeMurmur2StringHashCode = function (key, seed) { - var m = 0x5bd1e995; - var r = 24; - - var numberOfCharsLeft = key.length; - var h = Math.abs(seed ^ numberOfCharsLeft); - - var index = 0; - while (numberOfCharsLeft >= 2) { - var c1 = key.charCodeAt(index); - var c2 = key.charCodeAt(index + 1); - - var k = Math.abs(c1 | (c2 << 16)); - - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); - k ^= k >> r; - k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); - - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= k; - - index += 2; - numberOfCharsLeft -= 2; - } - - if (numberOfCharsLeft === 1) { - h ^= key.charCodeAt(index); - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - } - - h ^= h >> 13; - h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); - h ^= h >> 15; - - return h; - }; - - Hash.getPrime = function (min) { - for (var i = 0; i < Hash.primes.length; i++) { - var num = Hash.primes[i]; - if (num >= min) { - return num; - } - } - - throw TypeScript.Errors.notYetImplemented(); - }; - - Hash.expandPrime = function (oldSize) { - var num = oldSize << 1; - if (num > 2146435069 && 2146435069 > oldSize) { - return 2146435069; - } - return Hash.getPrime(num); - }; - - Hash.combine = function (value, currentHash) { - return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; - }; - Hash.FNV_BASE = 2166136261; - Hash.FNV_PRIME = 16777619; - - Hash.primes = [ - 3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, - 631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419, - 10103, 12143, 14591, 17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431, - 90523, 108631, 130363, 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, - 672827, 807403, 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, - 4166287, 4999559, 5999471, 7199369]; - return Hash; - })(); - TypeScript.Hash = Hash; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultHashTableCapacity = 1024; - - var HashTableEntry = (function () { - function HashTableEntry(Key, Value, HashCode, Next) { - this.Key = Key; - this.Value = Value; - this.HashCode = HashCode; - this.Next = Next; - } - return HashTableEntry; - })(); - - var HashTable = (function () { - function HashTable(capacity, hash) { - this.hash = hash; - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); - } - HashTable.prototype.set = function (key, value) { - this.addOrSet(key, value, false); - }; - - HashTable.prototype.add = function (key, value) { - this.addOrSet(key, value, true); - }; - - HashTable.prototype.containsKey = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - return entry !== null; - }; - - HashTable.prototype.get = function (key) { - var hashCode = this.computeHashCode(key); - var entry = this.findEntry(key, hashCode); - - return entry === null ? null : entry.Value; - }; - - HashTable.prototype.computeHashCode = function (key) { - var hashCode = this.hash === null ? key.hashCode : this.hash(key); - - hashCode = hashCode & 0x7FFFFFFF; - TypeScript.Debug.assert(hashCode >= 0); - - return hashCode; - }; - - HashTable.prototype.addOrSet = function (key, value, throwOnExistingEntry) { - var hashCode = this.computeHashCode(key); - - var entry = this.findEntry(key, hashCode); - if (entry !== null) { - if (throwOnExistingEntry) { - throw TypeScript.Errors.argument('key', "Key was already in table."); - } - - entry.Key = key; - entry.Value = value; - return; - } - - return this.addEntry(key, value, hashCode); - }; - - HashTable.prototype.findEntry = function (key, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && key === e.Key) { - return e; - } - } - - return null; - }; - - HashTable.prototype.addEntry = function (key, value, hashCode) { - var index = hashCode % this.entries.length; - - var e = new HashTableEntry(key, value, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count >= (this.entries.length / 2)) { - this.grow(); - } - - this.count++; - return e.Key; - }; - - HashTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - return HashTable; - })(); - Collections.HashTable = HashTable; - - function createHashTable(capacity, hash) { - if (typeof capacity === "undefined") { capacity = Collections.DefaultHashTableCapacity; } - if (typeof hash === "undefined") { hash = null; } - return new HashTable(capacity, hash); - } - Collections.createHashTable = createHashTable; - - var currentHashCode = 1; - function identityHashCode(value) { - if (value.__hash === undefined) { - value.__hash = currentHashCode; - currentHashCode++; - } - - return value.__hash; - } - Collections.identityHashCode = identityHashCode; - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - TypeScript.nodeMakeDirectoryTime = 0; - TypeScript.nodeCreateBufferTime = 0; - TypeScript.nodeWriteFileSyncTime = 0; - - (function (ByteOrderMark) { - ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; - ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; - ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; - ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; - })(TypeScript.ByteOrderMark || (TypeScript.ByteOrderMark = {})); - var ByteOrderMark = TypeScript.ByteOrderMark; - - var FileInformation = (function () { - function FileInformation(contents, byteOrderMark) { - this.contents = contents; - this.byteOrderMark = byteOrderMark; - } - return FileInformation; - })(); - TypeScript.FileInformation = FileInformation; - - TypeScript.Environment = (function () { - function getWindowsScriptHostEnvironment() { - try { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - } catch (e) { - return null; - } - - var streamObjectPool = []; - - function getStreamObject() { - if (streamObjectPool.length > 0) { - return streamObjectPool.pop(); - } else { - return new ActiveXObject("ADODB.Stream"); - } - } - - function releaseStreamObject(obj) { - streamObjectPool.push(obj); - } - - var args = []; - for (var i = 0; i < WScript.Arguments.length; i++) { - args[i] = WScript.Arguments.Item(i); - } - - return { - newLine: "\r\n", - currentDirectory: function () { - return WScript.CreateObject("WScript.Shell").CurrentDirectory; - }, - supportsCodePage: function () { - return WScript.ReadFile; - }, - readFile: function (path, codepage) { - try { - if (codepage !== null && this.supportsCodePage()) { - try { - var contents = WScript.ReadFile(path, codepage); - return new FileInformation(contents, 0 /* None */); - } catch (e) { - } - } - - var streamObj = getStreamObject(); - streamObj.Open(); - streamObj.Type = 2; - - streamObj.Charset = 'x-ansi'; - - streamObj.LoadFromFile(path); - var bomChar = streamObj.ReadText(2); - - streamObj.Position = 0; - - var byteOrderMark = 0 /* None */; - - if (bomChar.charCodeAt(0) === 0xFE && bomChar.charCodeAt(1) === 0xFF) { - streamObj.Charset = 'unicode'; - byteOrderMark = 2 /* Utf16BigEndian */; - } else if (bomChar.charCodeAt(0) === 0xFF && bomChar.charCodeAt(1) === 0xFE) { - streamObj.Charset = 'unicode'; - byteOrderMark = 3 /* Utf16LittleEndian */; - } else if (bomChar.charCodeAt(0) === 0xEF && bomChar.charCodeAt(1) === 0xBB) { - streamObj.Charset = 'utf-8'; - byteOrderMark = 1 /* Utf8 */; - } else { - streamObj.Charset = 'utf-8'; - } - - var contents = streamObj.ReadText(-1); - streamObj.Close(); - releaseStreamObject(streamObj); - return new FileInformation(contents, byteOrderMark); - } catch (err) { - var message; - if (err.number === -2147024809) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unsupported_file_encoding, null); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Cannot_read_file_0_1, [path, err.message]); - } - - throw new Error(message); - } - }, - writeFile: function (path, contents, writeByteOrderMark) { - var textStream = getStreamObject(); - textStream.Charset = 'utf-8'; - textStream.Open(); - textStream.WriteText(contents, 0); - - if (!writeByteOrderMark) { - textStream.Position = 3; - } else { - textStream.Position = 0; - } - - var fileStream = getStreamObject(); - fileStream.Type = 1; - fileStream.Open(); - - textStream.CopyTo(fileStream); - - fileStream.Flush(); - fileStream.SaveToFile(path, 2); - fileStream.Close(); - - textStream.Flush(); - textStream.Close(); - }, - fileExists: function (path) { - return fso.FileExists(path); - }, - deleteFile: function (path) { - if (fso.FileExists(path)) { - fso.DeleteFile(path, true); - } - }, - directoryExists: function (path) { - return fso.FolderExists(path); - }, - listFiles: function (path, spec, options) { - options = options || {}; - function filesInFolder(folder, root) { - var paths = []; - var fc; - - if (options.recursive) { - fc = new Enumerator(folder.subfolders); - - for (; !fc.atEnd(); fc.moveNext()) { - paths = paths.concat(filesInFolder(fc.item(), root + "\\" + fc.item().Name)); - } - } - - fc = new Enumerator(folder.files); - - for (; !fc.atEnd(); fc.moveNext()) { - if (!spec || fc.item().Name.match(spec)) { - paths.push(root + "\\" + fc.item().Name); - } - } - - return paths; - } - - var folder = fso.GetFolder(path); - var paths = []; - - return filesInFolder(folder, path); - }, - arguments: args, - standardOut: WScript.StdOut - }; - } - ; - - function getNodeEnvironment() { - var _fs = require('fs'); - var _path = require('path'); - var _module = require('module'); - var _os = require('os'); - - return { - newLine: _os.EOL, - currentDirectory: function () { - return process.cwd(); - }, - supportsCodePage: function () { - return false; - }, - readFile: function (file, codepage) { - if (codepage !== null) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.codepage_option_not_supported_on_current_platform, null)); - } - - var buffer = _fs.readFileSync(file); - switch (buffer[0]) { - case 0xFE: - if (buffer[1] === 0xFF) { - var i = 0; - while ((i + 1) < buffer.length) { - var temp = buffer[i]; - buffer[i] = buffer[i + 1]; - buffer[i + 1] = temp; - i += 2; - } - return new FileInformation(buffer.toString("ucs2", 2), 2 /* Utf16BigEndian */); - } - break; - case 0xFF: - if (buffer[1] === 0xFE) { - return new FileInformation(buffer.toString("ucs2", 2), 3 /* Utf16LittleEndian */); - } - break; - case 0xEF: - if (buffer[1] === 0xBB) { - return new FileInformation(buffer.toString("utf8", 3), 1 /* Utf8 */); - } - } - - return new FileInformation(buffer.toString("utf8", 0), 0 /* None */); - }, - writeFile: function (path, contents, writeByteOrderMark) { - function mkdirRecursiveSync(path) { - var stats = _fs.statSync(path); - if (stats.isFile()) { - throw "\"" + path + "\" exists but isn't a directory."; - } else if (stats.isDirectory()) { - return; - } else { - mkdirRecursiveSync(_path.dirname(path)); - _fs.mkdirSync(path, 509); - } - } - var start = new Date().getTime(); - mkdirRecursiveSync(_path.dirname(path)); - TypeScript.nodeMakeDirectoryTime += new Date().getTime() - start; - - if (writeByteOrderMark) { - contents = '\uFEFF' + contents; - } - - var start = new Date().getTime(); - - var chunkLength = 4 * 1024; - var fileDescriptor = _fs.openSync(path, "w"); - try { - for (var index = 0; index < contents.length; index += chunkLength) { - var bufferStart = new Date().getTime(); - var buffer = new Buffer(contents.substr(index, chunkLength), "utf8"); - TypeScript.nodeCreateBufferTime += new Date().getTime() - bufferStart; - - _fs.writeSync(fileDescriptor, buffer, 0, buffer.length, null); - } - } finally { - _fs.closeSync(fileDescriptor); - } - - TypeScript.nodeWriteFileSyncTime += new Date().getTime() - start; - }, - fileExists: function (path) { - return _fs.existsSync(path); - }, - deleteFile: function (path) { - try { - _fs.unlinkSync(path); - } catch (e) { - } - }, - directoryExists: function (path) { - return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); - }, - listFiles: function dir(path, spec, options) { - options = options || {}; - - function filesInFolder(folder) { - var paths = []; - - var files = _fs.readdirSync(folder); - for (var i = 0; i < files.length; i++) { - var stat = _fs.statSync(folder + "\\" + files[i]); - if (options.recursive && stat.isDirectory()) { - paths = paths.concat(filesInFolder(folder + "\\" + files[i])); - } else if (stat.isFile() && (!spec || files[i].match(spec))) { - paths.push(folder + "\\" + files[i]); - } - } - - return paths; - } - - return filesInFolder(path); - }, - arguments: process.argv.slice(2), - standardOut: { - Write: function (str) { - process.stdout.write(str); - }, - WriteLine: function (str) { - process.stdout.write(str + '\n'); - }, - Close: function () { - } - } - }; - } - ; - - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { - return getWindowsScriptHostEnvironment(); - } else if (typeof module !== 'undefined' && module.exports) { - return getNodeEnvironment(); - } else { - return null; - } - })(); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (IntegerUtilities) { - function integerDivide(numerator, denominator) { - return (numerator / denominator) >> 0; - } - IntegerUtilities.integerDivide = integerDivide; - - function integerMultiplyLow32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0; - return resultLow32; - } - IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits; - - function integerMultiplyHigh32Bits(n1, n2) { - var n1Low16 = n1 & 0x0000ffff; - var n1High16 = n1 >>> 16; - - var n2Low16 = n2 & 0x0000ffff; - var n2High16 = n2 >>> 16; - - var resultHigh32 = n1High16 * n2High16 + ((((n1Low16 * n2Low16) >>> 17) + n1Low16 * n2High16) >>> 15); - return resultHigh32; - } - IntegerUtilities.integerMultiplyHigh32Bits = integerMultiplyHigh32Bits; - - function isInteger(text) { - return /^[0-9]+$/.test(text); - } - IntegerUtilities.isInteger = isInteger; - - function isHexInteger(text) { - return /^0(x|X)[0-9a-fA-F]+$/.test(text); - } - IntegerUtilities.isHexInteger = isHexInteger; - })(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {})); - var IntegerUtilities = TypeScript.IntegerUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineMap = (function () { - function LineMap(_computeLineStarts, length) { - this._computeLineStarts = _computeLineStarts; - this.length = length; - this._lineStarts = null; - } - LineMap.prototype.toJSON = function (key) { - return { lineStarts: this.lineStarts(), length: this.length }; - }; - - LineMap.prototype.equals = function (other) { - return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { - return v1 === v2; - }); - }; - - LineMap.prototype.lineStarts = function () { - if (this._lineStarts === null) { - this._lineStarts = this._computeLineStarts(); - } - - return this._lineStarts; - }; - - LineMap.prototype.lineCount = function () { - return this.lineStarts().length; - }; - - LineMap.prototype.getPosition = function (line, character) { - return this.lineStarts()[line] + character; - }; - - LineMap.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - LineMap.prototype.getLineStartPosition = function (lineNumber) { - return this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - lineAndCharacter.line = lineNumber; - lineAndCharacter.character = position - this.lineStarts()[lineNumber]; - }; - - LineMap.prototype.getLineAndCharacterFromPosition = function (position) { - if (position < 0 || position > this.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]); - }; - LineMap.empty = new LineMap(function () { - return [0]; - }, 0); - return LineMap; - })(); - TypeScript.LineMap = LineMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var LineAndCharacter = (function () { - function LineAndCharacter(line, character) { - this._line = 0; - this._character = 0; - if (line < 0) { - throw TypeScript.Errors.argumentOutOfRange("line"); - } - - if (character < 0) { - throw TypeScript.Errors.argumentOutOfRange("character"); - } - - this._line = line; - this._character = character; - } - LineAndCharacter.prototype.line = function () { - return this._line; - }; - - LineAndCharacter.prototype.character = function () { - return this._character; - }; - return LineAndCharacter; - })(); - TypeScript.LineAndCharacter = LineAndCharacter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MathPrototype = (function () { - function MathPrototype() { - } - MathPrototype.max = function (a, b) { - return a >= b ? a : b; - }; - - MathPrototype.min = function (a, b) { - return a <= b ? a : b; - }; - return MathPrototype; - })(); - TypeScript.MathPrototype = MathPrototype; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Collections) { - Collections.DefaultStringTableCapacity = 256; - - var StringTableEntry = (function () { - function StringTableEntry(Text, HashCode, Next) { - this.Text = Text; - this.HashCode = HashCode; - this.Next = Next; - } - return StringTableEntry; - })(); - - var StringTable = (function () { - function StringTable(capacity) { - this.count = 0; - var size = TypeScript.Hash.getPrime(capacity); - this.entries = TypeScript.ArrayUtilities.createArray(size, null); - } - StringTable.prototype.addCharArray = function (key, start, len) { - var hashCode = TypeScript.Hash.computeSimple31BitCharArrayHashCode(key, start, len) & 0x7FFFFFFF; - - var entry = this.findCharArrayEntry(key, start, len, hashCode); - if (entry !== null) { - return entry.Text; - } - - var slice = key.slice(start, start + len); - return this.addEntry(TypeScript.StringUtilities.fromCharCodeArray(slice), hashCode); - }; - - StringTable.prototype.findCharArrayEntry = function (key, start, len, hashCode) { - for (var e = this.entries[hashCode % this.entries.length]; e !== null; e = e.Next) { - if (e.HashCode === hashCode && StringTable.textCharArrayEquals(e.Text, key, start, len)) { - return e; - } - } - - return null; - }; - - StringTable.prototype.addEntry = function (text, hashCode) { - var index = hashCode % this.entries.length; - - var e = new StringTableEntry(text, hashCode, this.entries[index]); - - this.entries[index] = e; - - if (this.count === this.entries.length) { - this.grow(); - } - - this.count++; - return e.Text; - }; - - StringTable.prototype.grow = function () { - var newSize = TypeScript.Hash.expandPrime(this.entries.length); - - var oldEntries = this.entries; - var newEntries = TypeScript.ArrayUtilities.createArray(newSize, null); - - this.entries = newEntries; - - for (var i = 0; i < oldEntries.length; i++) { - var e = oldEntries[i]; - while (e !== null) { - var newIndex = e.HashCode % newSize; - var tmp = e.Next; - e.Next = newEntries[newIndex]; - newEntries[newIndex] = e; - e = tmp; - } - } - }; - - StringTable.textCharArrayEquals = function (text, array, start, length) { - if (text.length !== length) { - return false; - } - - var s = start; - for (var i = 0; i < length; i++) { - if (text.charCodeAt(i) !== array[s]) { - return false; - } - - s++; - } - - return true; - }; - return StringTable; - })(); - Collections.StringTable = StringTable; - - Collections.DefaultStringTable = new StringTable(Collections.DefaultStringTableCapacity); - })(TypeScript.Collections || (TypeScript.Collections = {})); - var Collections = TypeScript.Collections; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var StringUtilities = (function () { - function StringUtilities() { - } - StringUtilities.isString = function (value) { - return Object.prototype.toString.apply(value, []) === '[object String]'; - }; - - StringUtilities.fromCharCodeArray = function (array) { - return String.fromCharCode.apply(null, array); - }; - - StringUtilities.endsWith = function (string, value) { - return string.substring(string.length - value.length, string.length) === value; - }; - - StringUtilities.startsWith = function (string, value) { - return string.substr(0, value.length) === value; - }; - - StringUtilities.copyTo = function (source, sourceIndex, destination, destinationIndex, count) { - for (var i = 0; i < count; i++) { - destination[destinationIndex + i] = source.charCodeAt(sourceIndex + i); - } - }; - - StringUtilities.repeat = function (value, count) { - return Array(count + 1).join(value); - }; - - StringUtilities.stringEquals = function (val1, val2) { - return val1 === val2; - }; - return StringUtilities; - })(); - TypeScript.StringUtilities = StringUtilities; -})(TypeScript || (TypeScript = {})); -var global = Function("return this").call(null); - -var TypeScript; -(function (TypeScript) { - var Clock; - (function (Clock) { - Clock.now; - Clock.resolution; - - if (typeof WScript !== "undefined" && typeof global['WScript'].InitializeProjection !== "undefined") { - global['WScript'].InitializeProjection(); - - Clock.now = function () { - return TestUtilities.QueryPerformanceCounter(); - }; - - Clock.resolution = TestUtilities.QueryPerformanceFrequency(); - } else { - Clock.now = function () { - return Date.now(); - }; - - Clock.resolution = 1000; - } - })(Clock || (Clock = {})); - - var Timer = (function () { - function Timer() { - this.time = 0; - } - Timer.prototype.start = function () { - this.time = 0; - this.startTime = Clock.now(); - }; - - Timer.prototype.end = function () { - this.time = (Clock.now() - this.startTime); - }; - return Timer; - })(); - TypeScript.Timer = Timer; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (DiagnosticCategory) { - DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; - DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; - DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; - DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; - })(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {})); - var DiagnosticCategory = TypeScript.DiagnosticCategory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.diagnosticInformationMap = { - "error TS{0}: {1}": { - "code": 0, - "category": 3 /* NoPrefix */ - }, - "warning TS{0}: {1}": { - "code": 1, - "category": 3 /* NoPrefix */ - }, - "Unrecognized escape sequence.": { - "code": 1000, - "category": 1 /* Error */ - }, - "Unexpected character {0}.": { - "code": 1001, - "category": 1 /* Error */ - }, - "Missing close quote character.": { - "code": 1002, - "category": 1 /* Error */ - }, - "Identifier expected.": { - "code": 1003, - "category": 1 /* Error */ - }, - "'{0}' keyword expected.": { - "code": 1004, - "category": 1 /* Error */ - }, - "'{0}' expected.": { - "code": 1005, - "category": 1 /* Error */ - }, - "Identifier expected; '{0}' is a keyword.": { - "code": 1006, - "category": 1 /* Error */ - }, - "Automatic semicolon insertion not allowed.": { - "code": 1007, - "category": 1 /* Error */ - }, - "Unexpected token; '{0}' expected.": { - "code": 1008, - "category": 1 /* Error */ - }, - "Trailing separator not allowed.": { - "code": 1009, - "category": 1 /* Error */ - }, - "'*/' expected.": { - "code": 1010, - "category": 1 /* Error */ - }, - "'public' or 'private' modifier must precede 'static'.": { - "code": 1011, - "category": 1 /* Error */ - }, - "Unexpected token.": { - "code": 1012, - "category": 1 /* Error */ - }, - "Catch clause parameter cannot have a type annotation.": { - "code": 1013, - "category": 1 /* Error */ - }, - "Rest parameter must be last in list.": { - "code": 1014, - "category": 1 /* Error */ - }, - "Parameter cannot have question mark and initializer.": { - "code": 1015, - "category": 1 /* Error */ - }, - "Required parameter cannot follow optional parameter.": { - "code": 1016, - "category": 1 /* Error */ - }, - "Index signatures cannot have rest parameters.": { - "code": 1017, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have accessibility modifiers.": { - "code": 1018, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have a question mark.": { - "code": 1019, - "category": 1 /* Error */ - }, - "Index signature parameter cannot have an initializer.": { - "code": 1020, - "category": 1 /* Error */ - }, - "Index signature must have a type annotation.": { - "code": 1021, - "category": 1 /* Error */ - }, - "Index signature parameter must have a type annotation.": { - "code": 1022, - "category": 1 /* Error */ - }, - "Index signature parameter type must be 'string' or 'number'.": { - "code": 1023, - "category": 1 /* Error */ - }, - "'extends' clause already seen.": { - "code": 1024, - "category": 1 /* Error */ - }, - "'extends' clause must precede 'implements' clause.": { - "code": 1025, - "category": 1 /* Error */ - }, - "Classes can only extend a single class.": { - "code": 1026, - "category": 1 /* Error */ - }, - "'implements' clause already seen.": { - "code": 1027, - "category": 1 /* Error */ - }, - "Accessibility modifier already seen.": { - "code": 1028, - "category": 1 /* Error */ - }, - "'{0}' modifier must precede '{1}' modifier.": { - "code": 1029, - "category": 1 /* Error */ - }, - "'{0}' modifier already seen.": { - "code": 1030, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a class element.": { - "code": 1031, - "category": 1 /* Error */ - }, - "Interface declaration cannot have 'implements' clause.": { - "code": 1032, - "category": 1 /* Error */ - }, - "'super' invocation cannot have type arguments.": { - "code": 1034, - "category": 1 /* Error */ - }, - "Only ambient modules can use quoted names.": { - "code": 1035, - "category": 1 /* Error */ - }, - "Statements are not allowed in ambient contexts.": { - "code": 1036, - "category": 1 /* Error */ - }, - "Implementations are not allowed in ambient contexts.": { - "code": 1037, - "category": 1 /* Error */ - }, - "'declare' modifier not allowed for code already in an ambient context.": { - "code": 1038, - "category": 1 /* Error */ - }, - "Initializers are not allowed in ambient contexts.": { - "code": 1039, - "category": 1 /* Error */ - }, - "Parameter property declarations can only be used in a non-ambient constructor declaration.": { - "code": 1040, - "category": 1 /* Error */ - }, - "Function implementation expected.": { - "code": 1041, - "category": 1 /* Error */ - }, - "Constructor implementation expected.": { - "code": 1042, - "category": 1 /* Error */ - }, - "Function overload name must be '{0}'.": { - "code": 1043, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a module element.": { - "code": 1044, - "category": 1 /* Error */ - }, - "'declare' modifier cannot appear on an interface declaration.": { - "code": 1045, - "category": 1 /* Error */ - }, - "'declare' modifier required for top level element.": { - "code": 1046, - "category": 1 /* Error */ - }, - "Rest parameter cannot be optional.": { - "code": 1047, - "category": 1 /* Error */ - }, - "Rest parameter cannot have an initializer.": { - "code": 1048, - "category": 1 /* Error */ - }, - "'set' accessor must have one and only one parameter.": { - "code": 1049, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot be optional.": { - "code": 1051, - "category": 1 /* Error */ - }, - "'set' accessor parameter cannot have an initializer.": { - "code": 1052, - "category": 1 /* Error */ - }, - "'set' accessor cannot have rest parameter.": { - "code": 1053, - "category": 1 /* Error */ - }, - "'get' accessor cannot have parameters.": { - "code": 1054, - "category": 1 /* Error */ - }, - "Modifiers cannot appear here.": { - "code": 1055, - "category": 1 /* Error */ - }, - "Accessors are only available when targeting ECMAScript 5 and higher.": { - "code": 1056, - "category": 1 /* Error */ - }, - "Class name cannot be '{0}'.": { - "code": 1057, - "category": 1 /* Error */ - }, - "Interface name cannot be '{0}'.": { - "code": 1058, - "category": 1 /* Error */ - }, - "Enum name cannot be '{0}'.": { - "code": 1059, - "category": 1 /* Error */ - }, - "Module name cannot be '{0}'.": { - "code": 1060, - "category": 1 /* Error */ - }, - "Enum member must have initializer.": { - "code": 1061, - "category": 1 /* Error */ - }, - "Export assignment cannot be used in internal modules.": { - "code": 1063, - "category": 1 /* Error */ - }, - "Export assignment not allowed in module with exported element.": { - "code": 1064, - "category": 1 /* Error */ - }, - "Module cannot have multiple export assignments.": { - "code": 1065, - "category": 1 /* Error */ - }, - "Ambient enum elements can only have integer literal initializers.": { - "code": 1066, - "category": 1 /* Error */ - }, - "module, class, interface, enum, import or statement": { - "code": 1067, - "category": 3 /* NoPrefix */ - }, - "constructor, function, accessor or variable": { - "code": 1068, - "category": 3 /* NoPrefix */ - }, - "statement": { - "code": 1069, - "category": 3 /* NoPrefix */ - }, - "case or default clause": { - "code": 1070, - "category": 3 /* NoPrefix */ - }, - "identifier": { - "code": 1071, - "category": 3 /* NoPrefix */ - }, - "call, construct, index, property or function signature": { - "code": 1072, - "category": 3 /* NoPrefix */ - }, - "expression": { - "code": 1073, - "category": 3 /* NoPrefix */ - }, - "type name": { - "code": 1074, - "category": 3 /* NoPrefix */ - }, - "property or accessor": { - "code": 1075, - "category": 3 /* NoPrefix */ - }, - "parameter": { - "code": 1076, - "category": 3 /* NoPrefix */ - }, - "type": { - "code": 1077, - "category": 3 /* NoPrefix */ - }, - "type parameter": { - "code": 1078, - "category": 3 /* NoPrefix */ - }, - "'declare' modifier not allowed on import declaration.": { - "code": 1079, - "category": 1 /* Error */ - }, - "Function overload must be static.": { - "code": 1080, - "category": 1 /* Error */ - }, - "Function overload must not be static.": { - "code": 1081, - "category": 1 /* Error */ - }, - "Parameter property declarations cannot be used in a constructor overload.": { - "code": 1083, - "category": 1 /* Error */ - }, - "Invalid 'reference' directive syntax.": { - "code": 1084, - "category": 1 /* Error */ - }, - "Octal literals are not available when targeting ECMAScript 5 and higher.": { - "code": 1085, - "category": 1 /* Error */ - }, - "Accessors are not allowed in ambient contexts.": { - "code": 1086, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a constructor declaration.": { - "code": 1089, - "category": 1 /* Error */ - }, - "'{0}' modifier cannot appear on a parameter.": { - "code": 1090, - "category": 1 /* Error */ - }, - "Only a single variable declaration is allowed in a 'for...in' statement.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type parameters cannot appear on a constructor declaration.": { - "code": 1091, - "category": 1 /* Error */ - }, - "Type annotation cannot appear on a constructor declaration.": { - "code": 1092, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'.": { - "code": 2000, - "category": 1 /* Error */ - }, - "The name '{0}' does not exist in the current scope.": { - "code": 2001, - "category": 1 /* Error */ - }, - "The name '{0}' does not refer to a value.": { - "code": 2002, - "category": 1 /* Error */ - }, - "'super' can only be used inside a class instance method.": { - "code": 2003, - "category": 1 /* Error */ - }, - "The left-hand side of an assignment expression must be a variable, property or indexer.": { - "code": 2004, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable. Did you mean to include 'new'?": { - "code": 2161, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not callable.": { - "code": 2006, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not newable.": { - "code": 2007, - "category": 1 /* Error */ - }, - "Value of type '{0}' is not indexable by type '{1}'.": { - "code": 2008, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { - "code": 2009, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}': {3}": { - "code": 2010, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}'.": { - "code": 2011, - "category": 1 /* Error */ - }, - "Cannot convert '{0}' to '{1}':{NL}{2}": { - "code": 2012, - "category": 1 /* Error */ - }, - "Expected var, class, interface, or module.": { - "code": 2013, - "category": 1 /* Error */ - }, - "Operator '{0}' cannot be applied to type '{1}'.": { - "code": 2014, - "category": 1 /* Error */ - }, - "Getter '{0}' already declared.": { - "code": 2015, - "category": 1 /* Error */ - }, - "Setter '{0}' already declared.": { - "code": 2016, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends private class '{1}'.": { - "code": 2018, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements private interface '{1}'.": { - "code": 2019, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends private interface '{1}'.": { - "code": 2020, - "category": 1 /* Error */ - }, - "Exported class '{0}' extends class from inaccessible module {1}.": { - "code": 2021, - "category": 1 /* Error */ - }, - "Exported class '{0}' implements interface from inaccessible module {1}.": { - "code": 2022, - "category": 1 /* Error */ - }, - "Exported interface '{0}' extends interface from inaccessible module {1}.": { - "code": 2023, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2024, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class has or is using private type '{1}'.": { - "code": 2025, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2026, - "category": 1 /* Error */ - }, - "Exported variable '{0}' has or is using private type '{1}'.": { - "code": 2027, - "category": 1 /* Error */ - }, - "Public static property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2028, - "category": 1 /* Error */ - }, - "Public property '{0}' of exported class is using inaccessible module {1}.": { - "code": 2029, - "category": 1 /* Error */ - }, - "Property '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2030, - "category": 1 /* Error */ - }, - "Exported variable '{0}' is using inaccessible module {1}.": { - "code": 2031, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { - "code": 2032, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { - "code": 2033, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { - "code": 2034, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2035, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2036, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2037, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2038, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2039, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2040, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { - "code": 2041, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { - "code": 2042, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { - "code": 2043, - "category": 1 /* Error */ - }, - "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2044, - "category": 1 /* Error */ - }, - "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2045, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2046, - "category": 1 /* Error */ - }, - "Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2047, - "category": 1 /* Error */ - }, - "Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2048, - "category": 1 /* Error */ - }, - "Parameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2049, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class has or is using private type '{0}'.": { - "code": 2050, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class has or is using private type '{0}'.": { - "code": 2051, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface has or is using private type '{0}'.": { - "code": 2052, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface has or is using private type '{0}'.": { - "code": 2053, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface has or is using private type '{0}'.": { - "code": 2054, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class has or is using private type '{0}'.": { - "code": 2055, - "category": 1 /* Error */ - }, - "Return type of public method from exported class has or is using private type '{0}'.": { - "code": 2056, - "category": 1 /* Error */ - }, - "Return type of method from exported interface has or is using private type '{0}'.": { - "code": 2057, - "category": 1 /* Error */ - }, - "Return type of exported function has or is using private type '{0}'.": { - "code": 2058, - "category": 1 /* Error */ - }, - "Return type of public static property getter from exported class is using inaccessible module {0}.": { - "code": 2059, - "category": 1 /* Error */ - }, - "Return type of public property getter from exported class is using inaccessible module {0}.": { - "code": 2060, - "category": 1 /* Error */ - }, - "Return type of constructor signature from exported interface is using inaccessible module {0}.": { - "code": 2061, - "category": 1 /* Error */ - }, - "Return type of call signature from exported interface is using inaccessible module {0}.": { - "code": 2062, - "category": 1 /* Error */ - }, - "Return type of index signature from exported interface is using inaccessible module {0}.": { - "code": 2063, - "category": 1 /* Error */ - }, - "Return type of public static method from exported class is using inaccessible module {0}.": { - "code": 2064, - "category": 1 /* Error */ - }, - "Return type of public method from exported class is using inaccessible module {0}.": { - "code": 2065, - "category": 1 /* Error */ - }, - "Return type of method from exported interface is using inaccessible module {0}.": { - "code": 2066, - "category": 1 /* Error */ - }, - "Return type of exported function is using inaccessible module {0}.": { - "code": 2067, - "category": 1 /* Error */ - }, - "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { - "code": 2068, - "category": 1 /* Error */ - }, - "A parameter list must follow a generic type argument list. '(' expected.": { - "code": 2069, - "category": 1 /* Error */ - }, - "Multiple constructor implementations are not allowed.": { - "code": 2070, - "category": 1 /* Error */ - }, - "Unable to resolve external module '{0}'.": { - "code": 2071, - "category": 1 /* Error */ - }, - "Module cannot be aliased to a non-module type.": { - "code": 2072, - "category": 1 /* Error */ - }, - "A class may only extend another class.": { - "code": 2073, - "category": 1 /* Error */ - }, - "A class may only implement another class or interface.": { - "code": 2074, - "category": 1 /* Error */ - }, - "An interface may only extend another class or interface.": { - "code": 2075, - "category": 1 /* Error */ - }, - "Unable to resolve type.": { - "code": 2077, - "category": 1 /* Error */ - }, - "Unable to resolve type of '{0}'.": { - "code": 2078, - "category": 1 /* Error */ - }, - "Unable to resolve type parameter constraint.": { - "code": 2079, - "category": 1 /* Error */ - }, - "Type parameter constraint cannot be a primitive type.": { - "code": 2080, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target.": { - "code": 2081, - "category": 1 /* Error */ - }, - "Supplied parameters do not match any signature of call target:{NL}{0}": { - "code": 2082, - "category": 1 /* Error */ - }, - "Invalid 'new' expression.": { - "code": 2083, - "category": 1 /* Error */ - }, - "Call signatures used in a 'new' expression must have a 'void' return type.": { - "code": 2084, - "category": 1 /* Error */ - }, - "Could not select overload for 'new' expression.": { - "code": 2085, - "category": 1 /* Error */ - }, - "Type '{0}' does not satisfy the constraint '{1}' for type parameter '{2}'.": { - "code": 2086, - "category": 1 /* Error */ - }, - "Could not select overload for 'call' expression.": { - "code": 2087, - "category": 1 /* Error */ - }, - "Cannot invoke an expression whose type lacks a call signature.": { - "code": 2088, - "category": 1 /* Error */ - }, - "Calls to 'super' are only valid inside a class.": { - "code": 2089, - "category": 1 /* Error */ - }, - "Generic type '{0}' requires {1} type argument(s).": { - "code": 2090, - "category": 1 /* Error */ - }, - "Type of array literal cannot be determined. Best common type could not be found for array elements.": { - "code": 2092, - "category": 1 /* Error */ - }, - "Could not find enclosing symbol for dotted name '{0}'.": { - "code": 2093, - "category": 1 /* Error */ - }, - "The property '{0}' does not exist on value of type '{1}'.": { - "code": 2094, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}'.": { - "code": 2095, - "category": 1 /* Error */ - }, - "'get' and 'set' accessor must have the same type.": { - "code": 2096, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in current location.": { - "code": 2097, - "category": 1 /* Error */ - }, - "Static members cannot reference class type parameters.": { - "code": 2099, - "category": 1 /* Error */ - }, - "Class '{0}' is recursively referenced as a base type of itself.": { - "code": 2100, - "category": 1 /* Error */ - }, - "Interface '{0}' is recursively referenced as a base type of itself.": { - "code": 2101, - "category": 1 /* Error */ - }, - "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { - "code": 2102, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in non-derived classes.": { - "code": 2103, - "category": 1 /* Error */ - }, - "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { - "code": 2104, - "category": 1 /* Error */ - }, - "Constructors for derived classes must contain a 'super' call.": { - "code": 2105, - "category": 1 /* Error */ - }, - "Super calls are not permitted outside constructors or in nested functions inside constructors.": { - "code": 2106, - "category": 1 /* Error */ - }, - "'{0}.{1}' is inaccessible.": { - "code": 2107, - "category": 1 /* Error */ - }, - "'this' cannot be referenced within module bodies.": { - "code": 2108, - "category": 1 /* Error */ - }, - "Invalid '+' expression - types not known to support the addition operator.": { - "code": 2111, - "category": 1 /* Error */ - }, - "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2112, - "category": 1 /* Error */ - }, - "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { - "code": 2113, - "category": 1 /* Error */ - }, - "The type of a unary arithmetic operation operand must be of type 'any', 'number' or an enum type.": { - "code": 2114, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement cannot use a type annotation.": { - "code": 2115, - "category": 1 /* Error */ - }, - "Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { - "code": 2116, - "category": 1 /* Error */ - }, - "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { - "code": 2117, - "category": 1 /* Error */ - }, - "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { - "code": 2118, - "category": 1 /* Error */ - }, - "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { - "code": 2119, - "category": 1 /* Error */ - }, - "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { - "code": 2120, - "category": 1 /* Error */ - }, - "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { - "code": 2121, - "category": 1 /* Error */ - }, - "Setters cannot return a value.": { - "code": 2122, - "category": 1 /* Error */ - }, - "Tried to query type of uninitialized module '{0}'.": { - "code": 2123, - "category": 1 /* Error */ - }, - "Tried to set variable type to uninitialized module type '{0}'.": { - "code": 2124, - "category": 1 /* Error */ - }, - "Type '{0}' does not have type parameters.": { - "code": 2125, - "category": 1 /* Error */ - }, - "Getters must return a value.": { - "code": 2126, - "category": 1 /* Error */ - }, - "Getter and setter accessors do not agree in visibility.": { - "code": 2127, - "category": 1 /* Error */ - }, - "Invalid left-hand side of assignment expression.": { - "code": 2130, - "category": 1 /* Error */ - }, - "Function declared a non-void return type, but has no return expression.": { - "code": 2131, - "category": 1 /* Error */ - }, - "Cannot resolve return type reference.": { - "code": 2132, - "category": 1 /* Error */ - }, - "Constructors cannot have a return type of 'void'.": { - "code": 2133, - "category": 1 /* Error */ - }, - "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { - "code": 2134, - "category": 1 /* Error */ - }, - "All symbols within a with block will be resolved to 'any'.": { - "code": 2135, - "category": 1 /* Error */ - }, - "Import declarations in an internal module cannot reference an external module.": { - "code": 2136, - "category": 1 /* Error */ - }, - "Class {0} declares interface {1} but does not implement it:{NL}{2}": { - "code": 2137, - "category": 1 /* Error */ - }, - "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { - "code": 2138, - "category": 1 /* Error */ - }, - "The operand of an increment or decrement operator must be a variable, property or indexer.": { - "code": 2139, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in static initializers in a class body.": { - "code": 2140, - "category": 1 /* Error */ - }, - "Class '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2141, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend class '{1}':{NL}{2}": { - "code": 2142, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot extend interface '{1}':{NL}{2}": { - "code": 2143, - "category": 1 /* Error */ - }, - "Duplicate overload signature for '{0}'.": { - "code": 2144, - "category": 1 /* Error */ - }, - "Duplicate constructor overload signature.": { - "code": 2145, - "category": 1 /* Error */ - }, - "Duplicate overload call signature.": { - "code": 2146, - "category": 1 /* Error */ - }, - "Duplicate overload construct signature.": { - "code": 2147, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition.": { - "code": 2148, - "category": 1 /* Error */ - }, - "Overload signature is not compatible with function definition:{NL}{0}": { - "code": 2149, - "category": 1 /* Error */ - }, - "Overload signatures must all be public or private.": { - "code": 2150, - "category": 1 /* Error */ - }, - "Overload signatures must all be exported or not exported.": { - "code": 2151, - "category": 1 /* Error */ - }, - "Overload signatures must all be ambient or non-ambient.": { - "code": 2152, - "category": 1 /* Error */ - }, - "Overload signatures must all be optional or required.": { - "code": 2153, - "category": 1 /* Error */ - }, - "Specialized overload signature is not assignable to any non-specialized signature.": { - "code": 2154, - "category": 1 /* Error */ - }, - "'this' cannot be referenced in constructor arguments.": { - "code": 2155, - "category": 1 /* Error */ - }, - "Instance member cannot be accessed off a class.": { - "code": 2157, - "category": 1 /* Error */ - }, - "Untyped function calls may not accept type arguments.": { - "code": 2158, - "category": 1 /* Error */ - }, - "Non-generic functions may not accept type arguments.": { - "code": 2159, - "category": 1 /* Error */ - }, - "A generic type may not reference itself with a wrapped form of its own type parameters.": { - "code": 2160, - "category": 1 /* Error */ - }, - "Rest parameters must be array types.": { - "code": 2162, - "category": 1 /* Error */ - }, - "Overload signature implementation cannot use specialized type.": { - "code": 2163, - "category": 1 /* Error */ - }, - "Export assignments may only be used at the top-level of external modules.": { - "code": 2164, - "category": 1 /* Error */ - }, - "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2165, - "category": 1 /* Error */ - }, - "Only public methods of the base class are accessible via the 'super' keyword.": { - "code": 2166, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { - "code": 2167, - "category": 1 /* Error */ - }, - "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { - "code": 2168, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}'.": { - "code": 2169, - "category": 1 /* Error */ - }, - "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { - "code": 2170, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}'.": { - "code": 2171, - "category": 1 /* Error */ - }, - "All named properties must be assignable to string indexer type '{0}':{NL}{1}": { - "code": 2172, - "category": 1 /* Error */ - }, - "Generic type references must include all type arguments.": { - "code": 2173, - "category": 1 /* Error */ - }, - "Default arguments are only allowed in implementation.": { - "code": 2174, - "category": 1 /* Error */ - }, - "Overloads cannot differ only by return type.": { - "code": 2175, - "category": 1 /* Error */ - }, - "Function expression declared a non-void return type, but has no return expression.": { - "code": 2176, - "category": 1 /* Error */ - }, - "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { - "code": 2177, - "category": 1 /* Error */ - }, - "Could not find symbol '{0}' in module '{1}'.": { - "code": 2178, - "category": 1 /* Error */ - }, - "Unable to resolve module reference '{0}'.": { - "code": 2179, - "category": 1 /* Error */ - }, - "Could not find module '{0}' in module '{1}'.": { - "code": 2180, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { - "code": 2181, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { - "code": 2182, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { - "code": 2183, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { - "code": 2184, - "category": 1 /* Error */ - }, - "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { - "code": 2185, - "category": 1 /* Error */ - }, - "Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { - "code": 2186, - "category": 1 /* Error */ - }, - "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { - "code": 2187, - "category": 1 /* Error */ - }, - "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { - "code": 2188, - "category": 1 /* Error */ - }, - "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { - "code": 2189, - "category": 1 /* Error */ - }, - "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { - "code": 2190, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot be reopened.": { - "code": 2191, - "category": 1 /* Error */ - }, - "All declarations of merged declaration '{0}' must be exported or not exported.": { - "code": 2192, - "category": 1 /* Error */ - }, - "'super' cannot be referenced in constructor arguments.": { - "code": 2193, - "category": 1 /* Error */ - }, - "Return type of constructor signature must be assignable to the instance type of the class.": { - "code": 2194, - "category": 1 /* Error */ - }, - "Ambient external module declaration must be defined in global context.": { - "code": 2195, - "category": 1 /* Error */ - }, - "Ambient external module declaration cannot specify relative module name.": { - "code": 2196, - "category": 1 /* Error */ - }, - "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { - "code": 2197, - "category": 1 /* Error */ - }, - "Could not find the best common type of types of all return statement expressions.": { - "code": 2198, - "category": 1 /* Error */ - }, - "Import declaration cannot refer to external module reference when --noResolve option is set.": { - "code": 2199, - "category": 1 /* Error */ - }, - "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { - "code": 2200, - "category": 1 /* Error */ - }, - "'continue' statement can only be used within an enclosing iteration statement.": { - "code": 2201, - "category": 1 /* Error */ - }, - "'break' statement can only be used within an enclosing iteration or switch statement.": { - "code": 2202, - "category": 1 /* Error */ - }, - "Jump target not found.": { - "code": 2203, - "category": 1 /* Error */ - }, - "Jump target cannot cross function boundary.": { - "code": 2204, - "category": 1 /* Error */ - }, - "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { - "code": 2205, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { - "code": 2206, - "category": 1 /* Error */ - }, - "Expression resolves to '_super' that compiler uses to capture base class reference.": { - "code": 2207, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { - "code": 2208, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { - "code": 2209, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { - "code": 2210, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { - "code": 2211, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { - "code": 2212, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function has or is using private type '{1}'.": { - "code": 2213, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { - "code": 2214, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { - "code": 2215, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { - "code": 2216, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { - "code": 2217, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { - "code": 2218, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported function is using inaccessible module {1}.": { - "code": 2219, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class has or is using private type '{1}'.": { - "code": 2220, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { - "code": 2221, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported class is using inaccessible module {1}.": { - "code": 2222, - "category": 1 /* Error */ - }, - "TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { - "code": 2223, - "category": 1 /* Error */ - }, - "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { - "code": 2224, - "category": 1 /* Error */ - }, - "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { - "code": 2225, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}' or '{2}'.": { - "code": 2226, - "category": 1 /* Error */ - }, - "Type of conditional '{0}' must be identical to '{1}', '{2}' or '{3}'.": { - "code": 2227, - "category": 1 /* Error */ - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { - "code": 2228, - "category": 1 /* Error */ - }, - "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { - "code": 2229, - "category": 1 /* Error */ - }, - "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { - "code": 2230, - "category": 1 /* Error */ - }, - "Parameter '{0}' cannot be referenced in its initializer.": { - "code": 2231, - "category": 1 /* Error */ - }, - "Duplicate string index signature.": { - "code": 2232, - "category": 1 /* Error */ - }, - "Duplicate number index signature.": { - "code": 2233, - "category": 1 /* Error */ - }, - "All declarations of an interface must have identical type parameters.": { - "code": 2234, - "category": 1 /* Error */ - }, - "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { - "code": 2235, - "category": 1 /* Error */ - }, - "Type '{0}' is missing property '{1}' from type '{2}'.": { - "code": 4000, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { - "code": 4001, - "category": 3 /* NoPrefix */ - }, - "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { - "code": 4002, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4003, - "category": 3 /* NoPrefix */ - }, - "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4004, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define property '{2}' as private.": { - "code": 4005, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4006, - "category": 3 /* NoPrefix */ - }, - "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4007, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a call signature, but type '{1}' lacks one.": { - "code": 4008, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4009, - "category": 3 /* NoPrefix */ - }, - "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4010, - "category": 3 /* NoPrefix */ - }, - "Type '{0}' requires a construct signature, but type '{1}' lacks one.": { - "code": 4011, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible.": { - "code": 4012, - "category": 3 /* NoPrefix */ - }, - "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { - "code": 4013, - "category": 3 /* NoPrefix */ - }, - "Call signature expects {0} or fewer parameters.": { - "code": 4014, - "category": 3 /* NoPrefix */ - }, - "Could not apply type '{0}' to argument {1} which is of type '{2}'.": { - "code": 4015, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4016, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { - "code": 4017, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { - "code": 4018, - "category": 3 /* NoPrefix */ - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { - "code": 4019, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { - "code": 4020, - "category": 3 /* NoPrefix */ - }, - "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { - "code": 4021, - "category": 3 /* NoPrefix */ - }, - "Type reference cannot refer to container '{0}'.": { - "code": 4022, - "category": 1 /* Error */ - }, - "Type reference must refer to type.": { - "code": 4023, - "category": 1 /* Error */ - }, - "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { - "code": 4024, - "category": 1 /* Error */ - }, - " (+ {0} overload(s))": { - "code": 4025, - "category": 2 /* Message */ - }, - "Variable declaration cannot have the same name as an import declaration.": { - "code": 4026, - "category": 1 /* Error */ - }, - "Signature expected {0} type arguments, got {1} instead.": { - "code": 4027, - "category": 1 /* Error */ - }, - "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { - "code": 4028, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { - "code": 4029, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { - "code": 4030, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { - "code": 4031, - "category": 3 /* NoPrefix */ - }, - "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { - "code": 4032, - "category": 3 /* NoPrefix */ - }, - "Types of string indexer of types '{0}' and '{1}' are not identical.": { - "code": 4033, - "category": 3 /* NoPrefix */ - }, - "Types of number indexer of types '{0}' and '{1}' are not identical.": { - "code": 4034, - "category": 3 /* NoPrefix */ - }, - "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { - "code": 4035, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { - "code": 4036, - "category": 3 /* NoPrefix */ - }, - "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { - "code": 4037, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { - "code": 4038, - "category": 3 /* NoPrefix */ - }, - "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { - "code": 4039, - "category": 3 /* NoPrefix */ - }, - "Types '{0}' and '{1}' define static property '{2}' as private.": { - "code": 4040, - "category": 3 /* NoPrefix */ - }, - "Current host does not support '{0}' option.": { - "code": 5001, - "category": 1 /* Error */ - }, - "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { - "code": 5002, - "category": 1 /* Error */ - }, - "Module code generation '{0}' not supported.": { - "code": 5003, - "category": 1 /* Error */ - }, - "Could not find file: '{0}'.": { - "code": 5004, - "category": 1 /* Error */ - }, - "A file cannot have a reference to itself.": { - "code": 5006, - "category": 1 /* Error */ - }, - "Cannot resolve referenced file: '{0}'.": { - "code": 5007, - "category": 1 /* Error */ - }, - "Cannot find the common subdirectory path for the input files.": { - "code": 5009, - "category": 1 /* Error */ - }, - "Emit Error: {0}.": { - "code": 5011, - "category": 1 /* Error */ - }, - "Cannot read file '{0}': {1}": { - "code": 5012, - "category": 1 /* Error */ - }, - "Unsupported file encoding.": { - "code": 5013, - "category": 3 /* NoPrefix */ - }, - "Locale must be of the form or -. For example '{0}' or '{1}'.": { - "code": 5014, - "category": 1 /* Error */ - }, - "Unsupported locale: '{0}'.": { - "code": 5015, - "category": 1 /* Error */ - }, - "Execution Failed.{NL}": { - "code": 5016, - "category": 1 /* Error */ - }, - "Invalid call to 'up'": { - "code": 5019, - "category": 1 /* Error */ - }, - "Invalid call to 'down'": { - "code": 5020, - "category": 1 /* Error */ - }, - "Base64 value '{0}' finished with a continuation bit.": { - "code": 5021, - "category": 1 /* Error */ - }, - "Unknown option '{0}'": { - "code": 5023, - "category": 1 /* Error */ - }, - "Expected {0} arguments to message, got {1} instead.": { - "code": 5024, - "category": 1 /* Error */ - }, - "Expected the message '{0}' to have {1} arguments, but it had {2}": { - "code": 5025, - "category": 1 /* Error */ - }, - "Could not delete file '{0}'": { - "code": 5034, - "category": 1 /* Error */ - }, - "Could not create directory '{0}'": { - "code": 5035, - "category": 1 /* Error */ - }, - "Error while executing file '{0}': ": { - "code": 5036, - "category": 1 /* Error */ - }, - "Cannot compile external modules unless the '--module' flag is provided.": { - "code": 5037, - "category": 1 /* Error */ - }, - "Option mapRoot cannot be specified without specifying sourcemap option.": { - "code": 5038, - "category": 1 /* Error */ - }, - "Option sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5039, - "category": 1 /* Error */ - }, - "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { - "code": 5040, - "category": 1 /* Error */ - }, - "Option '{0}' specified without '{1}'": { - "code": 5041, - "category": 1 /* Error */ - }, - "'codepage' option not supported on current platform.": { - "code": 5042, - "category": 1 /* Error */ - }, - "Concatenate and emit output to single file.": { - "code": 6001, - "category": 2 /* Message */ - }, - "Generates corresponding {0} file.": { - "code": 6002, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate map files instead of generated locations.": { - "code": 6003, - "category": 2 /* Message */ - }, - "Specifies the location where debugger should locate TypeScript files instead of source locations.": { - "code": 6004, - "category": 2 /* Message */ - }, - "Watch input files.": { - "code": 6005, - "category": 2 /* Message */ - }, - "Redirect output structure to the directory.": { - "code": 6006, - "category": 2 /* Message */ - }, - "Do not emit comments to output.": { - "code": 6009, - "category": 2 /* Message */ - }, - "Skip resolution and preprocessing.": { - "code": 6010, - "category": 2 /* Message */ - }, - "Specify ECMAScript target version: '{0}' (default), or '{1}'": { - "code": 6015, - "category": 2 /* Message */ - }, - "Specify module code generation: '{0}' or '{1}'": { - "code": 6016, - "category": 2 /* Message */ - }, - "Print this message.": { - "code": 6017, - "category": 2 /* Message */ - }, - "Print the compiler's version: {0}": { - "code": 6019, - "category": 2 /* Message */ - }, - "Allow use of deprecated '{0}' keyword when referencing an external module.": { - "code": 6021, - "category": 2 /* Message */ - }, - "Specify locale for errors and messages. For example '{0}' or '{1}'": { - "code": 6022, - "category": 2 /* Message */ - }, - "Syntax: {0}": { - "code": 6023, - "category": 2 /* Message */ - }, - "options": { - "code": 6024, - "category": 2 /* Message */ - }, - "file1": { - "code": 6025, - "category": 2 /* Message */ - }, - "Examples:": { - "code": 6026, - "category": 2 /* Message */ - }, - "Options:": { - "code": 6027, - "category": 2 /* Message */ - }, - "Insert command line options and files from a file.": { - "code": 6030, - "category": 2 /* Message */ - }, - "Version {0}": { - "code": 6029, - "category": 2 /* Message */ - }, - "Use the '{0}' flag to see options.": { - "code": 6031, - "category": 2 /* Message */ - }, - "{NL}Recompiling ({0}):": { - "code": 6032, - "category": 2 /* Message */ - }, - "STRING": { - "code": 6033, - "category": 2 /* Message */ - }, - "KIND": { - "code": 6034, - "category": 2 /* Message */ - }, - "file2": { - "code": 6035, - "category": 2 /* Message */ - }, - "VERSION": { - "code": 6036, - "category": 2 /* Message */ - }, - "LOCATION": { - "code": 6037, - "category": 2 /* Message */ - }, - "DIRECTORY": { - "code": 6038, - "category": 2 /* Message */ - }, - "NUMBER": { - "code": 6039, - "category": 2 /* Message */ - }, - "Specify the codepage to use when opening source files.": { - "code": 6040, - "category": 2 /* Message */ - }, - "Additional locations:": { - "code": 6041, - "category": 2 /* Message */ - }, - "This version of the Javascript runtime does not support the '{0}' function.": { - "code": 7000, - "category": 1 /* Error */ - }, - "Unknown rule.": { - "code": 7002, - "category": 1 /* Error */ - }, - "Invalid line number ({0})": { - "code": 7003, - "category": 1 /* Error */ - }, - "Warn on expressions and declarations with an implied 'any' type.": { - "code": 7004, - "category": 2 /* Message */ - }, - "Variable '{0}' implicitly has an 'any' type.": { - "code": 7005, - "category": 1 /* Error */ - }, - "Parameter '{0}' of '{1}' implicitly has an 'any' type.": { - "code": 7006, - "category": 1 /* Error */ - }, - "Parameter '{0}' of function type implicitly has an 'any' type.": { - "code": 7007, - "category": 1 /* Error */ - }, - "Member '{0}' of object type implicitly has an 'any' type.": { - "code": 7008, - "category": 1 /* Error */ - }, - "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { - "code": 7009, - "category": 1 /* Error */ - }, - "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7010, - "category": 1 /* Error */ - }, - "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7011, - "category": 1 /* Error */ - }, - "Parameter '{0}' of lambda function implicitly has an 'any' type.": { - "code": 7012, - "category": 1 /* Error */ - }, - "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7013, - "category": 1 /* Error */ - }, - "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { - "code": 7014, - "category": 1 /* Error */ - }, - "Array Literal implicitly has an 'any' type from widening.": { - "code": 7015, - "category": 1 /* Error */ - }, - "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { - "code": 7016, - "category": 1 /* Error */ - }, - "Index signature of object type implicitly has an 'any' type.": { - "code": 7017, - "category": 1 /* Error */ - }, - "Object literal's property '{0}' implicitly has an 'any' type from widening.": { - "code": 7018, - "category": 1 /* Error */ - } - }; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CharacterCodes) { - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; - - CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; - - CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; - - CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; - - CharacterCodes[CharacterCodes["_"] = 95] = "_"; - CharacterCodes[CharacterCodes["$"] = 36] = "$"; - - CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; - CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; - CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; - - CharacterCodes[CharacterCodes["a"] = 97] = "a"; - CharacterCodes[CharacterCodes["b"] = 98] = "b"; - CharacterCodes[CharacterCodes["c"] = 99] = "c"; - CharacterCodes[CharacterCodes["d"] = 100] = "d"; - CharacterCodes[CharacterCodes["e"] = 101] = "e"; - CharacterCodes[CharacterCodes["f"] = 102] = "f"; - CharacterCodes[CharacterCodes["g"] = 103] = "g"; - CharacterCodes[CharacterCodes["h"] = 104] = "h"; - CharacterCodes[CharacterCodes["i"] = 105] = "i"; - CharacterCodes[CharacterCodes["k"] = 107] = "k"; - CharacterCodes[CharacterCodes["l"] = 108] = "l"; - CharacterCodes[CharacterCodes["m"] = 109] = "m"; - CharacterCodes[CharacterCodes["n"] = 110] = "n"; - CharacterCodes[CharacterCodes["o"] = 111] = "o"; - CharacterCodes[CharacterCodes["p"] = 112] = "p"; - CharacterCodes[CharacterCodes["q"] = 113] = "q"; - CharacterCodes[CharacterCodes["r"] = 114] = "r"; - CharacterCodes[CharacterCodes["s"] = 115] = "s"; - CharacterCodes[CharacterCodes["t"] = 116] = "t"; - CharacterCodes[CharacterCodes["u"] = 117] = "u"; - CharacterCodes[CharacterCodes["v"] = 118] = "v"; - CharacterCodes[CharacterCodes["w"] = 119] = "w"; - CharacterCodes[CharacterCodes["x"] = 120] = "x"; - CharacterCodes[CharacterCodes["y"] = 121] = "y"; - CharacterCodes[CharacterCodes["z"] = 122] = "z"; - - CharacterCodes[CharacterCodes["A"] = 65] = "A"; - CharacterCodes[CharacterCodes["E"] = 69] = "E"; - CharacterCodes[CharacterCodes["F"] = 70] = "F"; - CharacterCodes[CharacterCodes["X"] = 88] = "X"; - CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; - - CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 64] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; - CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; - CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; - CharacterCodes[CharacterCodes["question"] = 63] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; - - CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; - })(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {})); - var CharacterCodes = TypeScript.CharacterCodes; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - (function (ScriptSnapshot) { - var StringScriptSnapshot = (function () { - function StringScriptSnapshot(text) { - this.text = text; - this._lineStartPositions = null; - } - StringScriptSnapshot.prototype.getText = function (start, end) { - return this.text.substring(start, end); - }; - - StringScriptSnapshot.prototype.getLength = function () { - return this.text.length; - }; - - StringScriptSnapshot.prototype.getLineStartPositions = function () { - if (!this._lineStartPositions) { - this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text); - } - - return this._lineStartPositions; - }; - - StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - throw TypeScript.Errors.notYetImplemented(); - }; - return StringScriptSnapshot; - })(); - - function fromString(text) { - return new StringScriptSnapshot(text); - } - ScriptSnapshot.fromString = fromString; - })(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {})); - var ScriptSnapshot = TypeScript.ScriptSnapshot; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LineMap1) { - function fromSimpleText(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return text.charCodeAt(index); - }, length: text.length() }); - }, text.length()); - } - LineMap1.fromSimpleText = fromSimpleText; - - function fromScriptSnapshot(scriptSnapshot) { - return new TypeScript.LineMap(function () { - return scriptSnapshot.getLineStartPositions(); - }, scriptSnapshot.getLength()); - } - LineMap1.fromScriptSnapshot = fromScriptSnapshot; - - function fromString(text) { - return new TypeScript.LineMap(function () { - return TypeScript.TextUtilities.parseLineStarts(text); - }, text.length); - } - LineMap1.fromString = fromString; - })(TypeScript.LineMap1 || (TypeScript.LineMap1 = {})); - var LineMap1 = TypeScript.LineMap1; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextFactory) { - function getStartAndLengthOfLineBreakEndingAt(text, index, info) { - var c = text.charCodeAt(index); - if (c === 10 /* lineFeed */) { - if (index > 0 && text.charCodeAt(index - 1) === 13 /* carriageReturn */) { - info.startPosition = index - 1; - info.length = 2; - } else { - info.startPosition = index; - info.length = 1; - } - } else if (TypeScript.TextUtilities.isAnyLineBreakCharacter(c)) { - info.startPosition = index; - info.length = 1; - } else { - info.startPosition = index + 1; - info.length = 0; - } - } - - var LinebreakInfo = (function () { - function LinebreakInfo(startPosition, length) { - this.startPosition = startPosition; - this.length = length; - } - return LinebreakInfo; - })(); - - var TextLine = (function () { - function TextLine(text, body, lineBreakLength, lineNumber) { - this._text = null; - this._textSpan = null; - if (text === null) { - throw TypeScript.Errors.argumentNull('text'); - } - TypeScript.Debug.assert(lineBreakLength >= 0); - TypeScript.Debug.assert(lineNumber >= 0); - this._text = text; - this._textSpan = body; - this._lineBreakLength = lineBreakLength; - this._lineNumber = lineNumber; - } - TextLine.prototype.start = function () { - return this._textSpan.start(); - }; - - TextLine.prototype.end = function () { - return this._textSpan.end(); - }; - - TextLine.prototype.endIncludingLineBreak = function () { - return this.end() + this._lineBreakLength; - }; - - TextLine.prototype.extent = function () { - return this._textSpan; - }; - - TextLine.prototype.extentIncludingLineBreak = function () { - return TypeScript.TextSpan.fromBounds(this.start(), this.endIncludingLineBreak()); - }; - - TextLine.prototype.toString = function () { - return this._text.toString(this._textSpan); - }; - - TextLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - return TextLine; - })(); - - var TextBase = (function () { - function TextBase() { - this.linebreakInfo = new LinebreakInfo(0, 0); - this.lastLineFoundForPosition = null; - } - TextBase.prototype.length = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.charCodeAt = function (position) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - TextBase.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this, span); - }; - - TextBase.prototype.substr = function (start, length, intern) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.lineCount = function () { - return this._lineStarts().length; - }; - - TextBase.prototype.lines = function () { - var lines = []; - - var length = this.lineCount(); - for (var i = 0; i < length; ++i) { - lines[i] = this.getLineFromLineNumber(i); - } - - return lines; - }; - - TextBase.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this._lineStarts(); - }, this.length()); - }; - - TextBase.prototype._lineStarts = function () { - throw TypeScript.Errors.abstract(); - }; - - TextBase.prototype.getLineFromLineNumber = function (lineNumber) { - var lineStarts = this._lineStarts(); - - if (lineNumber < 0 || lineNumber >= lineStarts.length) { - throw TypeScript.Errors.argumentOutOfRange("lineNumber"); - } - - var first = lineStarts[lineNumber]; - if (lineNumber === lineStarts.length - 1) { - return new TextLine(this, new TypeScript.TextSpan(first, this.length() - first), 0, lineNumber); - } else { - getStartAndLengthOfLineBreakEndingAt(this, lineStarts[lineNumber + 1] - 1, this.linebreakInfo); - return new TextLine(this, new TypeScript.TextSpan(first, this.linebreakInfo.startPosition - first), this.linebreakInfo.length, lineNumber); - } - }; - - TextBase.prototype.getLineFromPosition = function (position) { - var lastFound = this.lastLineFoundForPosition; - if (lastFound !== null && lastFound.start() <= position && lastFound.endIncludingLineBreak() > position) { - return lastFound; - } - - var lineNumber = this.getLineNumberFromPosition(position); - - var result = this.getLineFromLineNumber(lineNumber); - this.lastLineFoundForPosition = result; - return result; - }; - - TextBase.prototype.getLineNumberFromPosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - if (position === this.length()) { - return this.lineCount() - 1; - } - - var lineNumber = TypeScript.ArrayUtilities.binarySearch(this._lineStarts(), position); - if (lineNumber < 0) { - lineNumber = (~lineNumber) - 1; - } - - return lineNumber; - }; - - TextBase.prototype.getLinePosition = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var lineNumber = this.getLineNumberFromPosition(position); - - return new TypeScript.LineAndCharacter(lineNumber, position - this._lineStarts()[lineNumber]); - }; - return TextBase; - })(); - - var SubText = (function (_super) { - __extends(SubText, _super); - function SubText(text, span) { - _super.call(this); - this._lazyLineStarts = null; - - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SubText.prototype.length = function () { - return this.span.length(); - }; - - SubText.prototype.charCodeAt = function (position) { - if (position < 0 || position > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.text.charCodeAt(this.span.start() + position); - }; - - SubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SubText.prototype.substr = function (start, length, intern) { - var startInOriginalText = this.span.start() + start; - return this.text.substr(startInOriginalText, length, intern); - }; - - SubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SubText.prototype._lineStarts = function () { - var _this = this; - if (!this._lazyLineStarts) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { - return _this.charCodeAt(index); - }, length: this.length() }); - } - - return this._lazyLineStarts; - }; - return SubText; - })(TextBase); - - var StringText = (function (_super) { - __extends(StringText, _super); - function StringText(data) { - _super.call(this); - this.source = null; - this._lazyLineStarts = null; - - if (data === null) { - throw TypeScript.Errors.argumentNull("data"); - } - - this.source = data; - } - StringText.prototype.length = function () { - return this.source.length; - }; - - StringText.prototype.charCodeAt = function (position) { - if (position < 0 || position >= this.source.length) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - return this.source.charCodeAt(position); - }; - - StringText.prototype.substr = function (start, length, intern) { - return this.source.substr(start, length); - }; - - StringText.prototype.toString = function (span) { - if (typeof span === "undefined") { span = null; } - if (span === null) { - span = new TypeScript.TextSpan(0, this.length()); - } - - this.checkSubSpan(span); - - if (span.start() === 0 && span.length() === this.length()) { - return this.source; - } - - return this.source.substr(span.start(), span.length()); - }; - - StringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.source, sourceIndex, destination, destinationIndex, count); - }; - - StringText.prototype._lineStarts = function () { - if (this._lazyLineStarts === null) { - this._lazyLineStarts = TypeScript.TextUtilities.parseLineStarts(this.source); - } - - return this._lazyLineStarts; - }; - return StringText; - })(TextBase); - - function createText(value) { - return new StringText(value); - } - TextFactory.createText = createText; - })(TypeScript.TextFactory || (TypeScript.TextFactory = {})); - var TextFactory = TypeScript.TextFactory; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (SimpleText) { - var SimpleSubText = (function () { - function SimpleSubText(text, span) { - this.text = null; - this.span = null; - if (text === null) { - throw TypeScript.Errors.argumentNull("text"); - } - - if (span.start() < 0 || span.start() >= text.length() || span.end() < 0 || span.end() > text.length()) { - throw TypeScript.Errors.argument("span"); - } - - this.text = text; - this.span = span; - } - SimpleSubText.prototype.checkSubSpan = function (span) { - if (span.start() < 0 || span.start() > this.length() || span.end() > this.length()) { - throw TypeScript.Errors.argumentOutOfRange("span"); - } - }; - - SimpleSubText.prototype.checkSubPosition = function (position) { - if (position < 0 || position >= this.length()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - }; - - SimpleSubText.prototype.length = function () { - return this.span.length(); - }; - - SimpleSubText.prototype.subText = function (span) { - this.checkSubSpan(span); - - return new SimpleSubText(this.text, this.getCompositeSpan(span.start(), span.length())); - }; - - SimpleSubText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var span = this.getCompositeSpan(sourceIndex, count); - this.text.copyTo(span.start(), destination, destinationIndex, span.length()); - }; - - SimpleSubText.prototype.substr = function (start, length, intern) { - var span = this.getCompositeSpan(start, length); - return this.text.substr(span.start(), span.length(), intern); - }; - - SimpleSubText.prototype.getCompositeSpan = function (start, length) { - var compositeStart = TypeScript.MathPrototype.min(this.text.length(), this.span.start() + start); - var compositeEnd = TypeScript.MathPrototype.min(this.text.length(), compositeStart + length); - return new TypeScript.TextSpan(compositeStart, compositeEnd - compositeStart); - }; - - SimpleSubText.prototype.charCodeAt = function (index) { - this.checkSubPosition(index); - return this.text.charCodeAt(this.span.start() + index); - }; - - SimpleSubText.prototype.lineMap = function () { - return TypeScript.LineMap1.fromSimpleText(this); - }; - return SimpleSubText; - })(); - - var SimpleStringText = (function () { - function SimpleStringText(value) { - this.value = value; - this._lineMap = null; - } - SimpleStringText.prototype.length = function () { - return this.value.length; - }; - - SimpleStringText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - TypeScript.StringUtilities.copyTo(this.value, sourceIndex, destination, destinationIndex, count); - }; - - SimpleStringText.prototype.substr = function (start, length, intern) { - if (intern) { - var array = length <= SimpleStringText.charArray.length ? SimpleStringText.charArray : TypeScript.ArrayUtilities.createArray(length, 0); - this.copyTo(start, array, 0, length); - return TypeScript.Collections.DefaultStringTable.addCharArray(array, 0, length); - } - - return this.value.substr(start, length); - }; - - SimpleStringText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleStringText.prototype.charCodeAt = function (index) { - return this.value.charCodeAt(index); - }; - - SimpleStringText.prototype.lineMap = function () { - if (!this._lineMap) { - this._lineMap = TypeScript.LineMap1.fromString(this.value); - } - - return this._lineMap; - }; - SimpleStringText.charArray = TypeScript.ArrayUtilities.createArray(1024, 0); - return SimpleStringText; - })(); - - var SimpleScriptSnapshotText = (function () { - function SimpleScriptSnapshotText(scriptSnapshot) { - this.scriptSnapshot = scriptSnapshot; - } - SimpleScriptSnapshotText.prototype.charCodeAt = function (index) { - return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0); - }; - - SimpleScriptSnapshotText.prototype.length = function () { - return this.scriptSnapshot.getLength(); - }; - - SimpleScriptSnapshotText.prototype.copyTo = function (sourceIndex, destination, destinationIndex, count) { - var text = this.scriptSnapshot.getText(sourceIndex, sourceIndex + count); - TypeScript.StringUtilities.copyTo(text, 0, destination, destinationIndex, count); - }; - - SimpleScriptSnapshotText.prototype.substr = function (start, length, intern) { - return this.scriptSnapshot.getText(start, start + length); - }; - - SimpleScriptSnapshotText.prototype.subText = function (span) { - return new SimpleSubText(this, span); - }; - - SimpleScriptSnapshotText.prototype.lineMap = function () { - var _this = this; - return new TypeScript.LineMap(function () { - return _this.scriptSnapshot.getLineStartPositions(); - }, this.length()); - }; - return SimpleScriptSnapshotText; - })(); - - function fromString(value) { - return new SimpleStringText(value); - } - SimpleText.fromString = fromString; - - function fromScriptSnapshot(scriptSnapshot) { - return new SimpleScriptSnapshotText(scriptSnapshot); - } - SimpleText.fromScriptSnapshot = fromScriptSnapshot; - })(TypeScript.SimpleText || (TypeScript.SimpleText = {})); - var SimpleText = TypeScript.SimpleText; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (TextUtilities) { - function parseLineStarts(text) { - var length = text.length; - - if (0 === length) { - var result = new Array(); - result.push(0); - return result; - } - - var position = 0; - var index = 0; - var arrayBuilder = new Array(); - var lineNumber = 0; - - while (index < length) { - var c = text.charCodeAt(index); - var lineBreakLength; - - if (c > 13 /* carriageReturn */ && c <= 127) { - index++; - continue; - } else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) { - lineBreakLength = 2; - } else if (c === 10 /* lineFeed */) { - lineBreakLength = 1; - } else { - lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index); - } - - if (0 === lineBreakLength) { - index++; - } else { - arrayBuilder.push(position); - index += lineBreakLength; - position = index; - lineNumber++; - } - } - - arrayBuilder.push(position); - - return arrayBuilder; - } - TextUtilities.parseLineStarts = parseLineStarts; - - function getLengthOfLineBreakSlow(text, index, c) { - if (c === 13 /* carriageReturn */) { - var next = index + 1; - return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1; - } else if (isAnyLineBreakCharacter(c)) { - return 1; - } else { - return 0; - } - } - TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow; - - function getLengthOfLineBreak(text, index) { - var c = text.charCodeAt(index); - - if (c > 13 /* carriageReturn */ && c <= 127) { - return 0; - } - - return getLengthOfLineBreakSlow(text, index, c); - } - TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak; - - function isAnyLineBreakCharacter(c) { - return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */; - } - TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter; - })(TypeScript.TextUtilities || (TypeScript.TextUtilities = {})); - var TextUtilities = TypeScript.TextUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextSpan = (function () { - function TextSpan(start, length) { - if (start < 0) { - TypeScript.Errors.argument("start"); - } - - if (length < 0) { - TypeScript.Errors.argument("length"); - } - - this._start = start; - this._length = length; - } - TextSpan.prototype.start = function () { - return this._start; - }; - - TextSpan.prototype.length = function () { - return this._length; - }; - - TextSpan.prototype.end = function () { - return this._start + this._length; - }; - - TextSpan.prototype.isEmpty = function () { - return this._length === 0; - }; - - TextSpan.prototype.containsPosition = function (position) { - return position >= this._start && position < this.end(); - }; - - TextSpan.prototype.containsTextSpan = function (span) { - return span._start >= this._start && span.end() <= this.end(); - }; - - TextSpan.prototype.overlapsWith = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - return overlapStart < overlapEnd; - }; - - TextSpan.prototype.overlap = function (span) { - var overlapStart = TypeScript.MathPrototype.max(this._start, span._start); - var overlapEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (overlapStart < overlapEnd) { - return TextSpan.fromBounds(overlapStart, overlapEnd); - } - - return null; - }; - - TextSpan.prototype.intersectsWithTextSpan = function (span) { - return span._start <= this.end() && span.end() >= this._start; - }; - - TextSpan.prototype.intersectsWith = function (start, length) { - var end = start + length; - return start <= this.end() && end >= this._start; - }; - - TextSpan.prototype.intersectsWithPosition = function (position) { - return position <= this.end() && position >= this._start; - }; - - TextSpan.prototype.intersection = function (span) { - var intersectStart = TypeScript.MathPrototype.max(this._start, span._start); - var intersectEnd = TypeScript.MathPrototype.min(this.end(), span.end()); - - if (intersectStart <= intersectEnd) { - return TextSpan.fromBounds(intersectStart, intersectEnd); - } - - return null; - }; - - TextSpan.fromBounds = function (start, end) { - TypeScript.Debug.assert(start >= 0); - TypeScript.Debug.assert(end - start >= 0); - return new TextSpan(start, end - start); - }; - return TextSpan; - })(); - TypeScript.TextSpan = TextSpan; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextChangeRange = (function () { - function TextChangeRange(span, newLength) { - if (newLength < 0) { - throw TypeScript.Errors.argumentOutOfRange("newLength"); - } - - this._span = span; - this._newLength = newLength; - } - TextChangeRange.prototype.span = function () { - return this._span; - }; - - TextChangeRange.prototype.newLength = function () { - return this._newLength; - }; - - TextChangeRange.prototype.newSpan = function () { - return new TypeScript.TextSpan(this.span().start(), this.newLength()); - }; - - TextChangeRange.prototype.isUnchanged = function () { - return this.span().isEmpty() && this.newLength() === 0; - }; - - TextChangeRange.collapseChangesFromSingleVersion = function (changes) { - var diff = 0; - var start = 1073741823 /* Max31BitInteger */; - var end = 0; - - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - diff += change.newLength() - change.span().length(); - - if (change.span().start() < start) { - start = change.span().start(); - } - - if (change.span().end() > end) { - end = change.span().end(); - } - } - - if (start > end) { - return null; - } - - var combined = TypeScript.TextSpan.fromBounds(start, end); - var newLen = combined.length() + diff; - - return new TextChangeRange(combined, newLen); - }; - - TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) { - if (changes.length === 0) { - return TextChangeRange.unchanged; - } - - if (changes.length === 1) { - return changes[0]; - } - - var change0 = changes[0]; - - var oldStartN = change0.span().start(); - var oldEndN = change0.span().end(); - var newEndN = oldStartN + change0.newLength(); - - for (var i = 1; i < changes.length; i++) { - var nextChange = changes[i]; - - var oldStart1 = oldStartN; - var oldEnd1 = oldEndN; - var newEnd1 = newEndN; - - var oldStart2 = nextChange.span().start(); - var oldEnd2 = nextChange.span().end(); - var newEnd2 = oldStart2 + nextChange.newLength(); - - oldStartN = TypeScript.MathPrototype.min(oldStart1, oldStart2); - oldEndN = TypeScript.MathPrototype.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); - newEndN = TypeScript.MathPrototype.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); - } - - return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN); - }; - TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0); - return TextChangeRange; - })(); - TypeScript.TextChangeRange = TextChangeRange; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CharacterInfo = (function () { - function CharacterInfo() { - } - CharacterInfo.isDecimalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 57 /* _9 */; - }; - CharacterInfo.isOctalDigit = function (c) { - return c >= 48 /* _0 */ && c <= 55 /* _7 */; - }; - - CharacterInfo.isHexDigit = function (c) { - return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */); - }; - - CharacterInfo.hexValue = function (c) { - return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10; - }; - - CharacterInfo.isWhitespace = function (ch) { - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - return true; - } - - return false; - }; - - CharacterInfo.isLineTerminator = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - } - - return false; - }; - return CharacterInfo; - })(); - TypeScript.CharacterInfo = CharacterInfo; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxConstants) { - SyntaxConstants[SyntaxConstants["TriviaNewLineMask"] = 0x00000001] = "TriviaNewLineMask"; - SyntaxConstants[SyntaxConstants["TriviaCommentMask"] = 0x00000002] = "TriviaCommentMask"; - SyntaxConstants[SyntaxConstants["TriviaFullWidthShift"] = 2] = "TriviaFullWidthShift"; - - SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed"; - SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask"; - SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask"; - SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift"; - - SyntaxConstants[SyntaxConstants["IsVariableWidthKeyword"] = 1 << 31] = "IsVariableWidthKeyword"; - })(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {})); - var SyntaxConstants = TypeScript.SyntaxConstants; -})(TypeScript || (TypeScript = {})); -var FormattingOptions = (function () { - function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { - this.useTabs = useTabs; - this.spacesPerTab = spacesPerTab; - this.indentSpaces = indentSpaces; - this.newLineCharacter = newLineCharacter; - } - FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n"); - return FormattingOptions; -})(); -var TypeScript; -(function (TypeScript) { - (function (Indentation) { - function columnForEndOfToken(token, syntaxInformationMap, options) { - return columnForStartOfToken(token, syntaxInformationMap, options) + token.width(); - } - Indentation.columnForEndOfToken = columnForEndOfToken; - - function columnForStartOfToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - var current = token; - while (current !== firstTokenInLine) { - current = syntaxInformationMap.previousToken(current); - - if (current === firstTokenInLine) { - leadingTextInReverse.push(current.trailingTrivia().fullText()); - leadingTextInReverse.push(current.text()); - } else { - leadingTextInReverse.push(current.fullText()); - } - } - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfToken = columnForStartOfToken; - - function columnForStartOfFirstTokenInLineContainingToken(token, syntaxInformationMap, options) { - var firstTokenInLine = syntaxInformationMap.firstTokenInLineContainingToken(token); - var leadingTextInReverse = []; - - collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); - - return columnForLeadingTextInReverse(leadingTextInReverse, options); - } - Indentation.columnForStartOfFirstTokenInLineContainingToken = columnForStartOfFirstTokenInLineContainingToken; - - function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) { - var leadingTrivia = firstTokenInLine.leadingTrivia(); - - for (var i = leadingTrivia.count() - 1; i >= 0; i--) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.kind() === 5 /* NewLineTrivia */) { - break; - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments)); - - if (lineSegments.length > 0) { - break; - } - } - - leadingTextInReverse.push(trivia.fullText()); - } - } - - function columnForLeadingTextInReverse(leadingTextInReverse, options) { - var column = 0; - - for (var i = leadingTextInReverse.length - 1; i >= 0; i--) { - var text = leadingTextInReverse[i]; - column = columnForPositionInStringWorker(text, text.length, column, options); - } - - return column; - } - - function columnForPositionInString(input, position, options) { - return columnForPositionInStringWorker(input, position, 0, options); - } - Indentation.columnForPositionInString = columnForPositionInString; - - function columnForPositionInStringWorker(input, position, startColumn, options) { - var column = startColumn; - var spacesPerTab = options.spacesPerTab; - - for (var j = 0; j < position; j++) { - var ch = input.charCodeAt(j); - - if (ch === 9 /* tab */) { - column += spacesPerTab - column % spacesPerTab; - } else { - column++; - } - } - - return column; - } - - function indentationString(column, options) { - var numberOfTabs = 0; - var numberOfSpaces = TypeScript.MathPrototype.max(0, column); - - if (options.useTabs) { - numberOfTabs = Math.floor(column / options.spacesPerTab); - numberOfSpaces -= numberOfTabs * options.spacesPerTab; - } - - return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces); - } - Indentation.indentationString = indentationString; - - function indentationTrivia(column, options) { - return TypeScript.Syntax.whitespace(this.indentationString(column, options)); - } - Indentation.indentationTrivia = indentationTrivia; - - function firstNonWhitespacePosition(value) { - for (var i = 0; i < value.length; i++) { - var ch = value.charCodeAt(i); - if (!TypeScript.CharacterInfo.isWhitespace(ch)) { - return i; - } - } - - return value.length; - } - Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; - })(TypeScript.Indentation || (TypeScript.Indentation = {})); - var Indentation = TypeScript.Indentation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (LanguageVersion) { - LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; - LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; - })(TypeScript.LanguageVersion || (TypeScript.LanguageVersion = {})); - var LanguageVersion = TypeScript.LanguageVersion; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ParseOptions = (function () { - function ParseOptions(languageVersion, allowAutomaticSemicolonInsertion) { - this._languageVersion = languageVersion; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - } - ParseOptions.prototype.toJSON = function (key) { - return { allowAutomaticSemicolonInsertion: this._allowAutomaticSemicolonInsertion }; - }; - - ParseOptions.prototype.languageVersion = function () { - return this._languageVersion; - }; - - ParseOptions.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - return ParseOptions; - })(); - TypeScript.ParseOptions = ParseOptions; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionedElement = (function () { - function PositionedElement(parent, element, fullStart) { - this._parent = parent; - this._element = element; - this._fullStart = fullStart; - } - PositionedElement.create = function (parent, element, fullStart) { - if (element === null) { - return null; - } - - if (element.isNode()) { - return new PositionedNode(parent, element, fullStart); - } else if (element.isToken()) { - return new PositionedToken(parent, element, fullStart); - } else if (element.isList()) { - return new PositionedList(parent, element, fullStart); - } else if (element.isSeparatedList()) { - return new PositionedSeparatedList(parent, element, fullStart); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - PositionedElement.prototype.parent = function () { - return this._parent; - }; - - PositionedElement.prototype.parentElement = function () { - return this._parent && this._parent._element; - }; - - PositionedElement.prototype.element = function () { - return this._element; - }; - - PositionedElement.prototype.kind = function () { - return this.element().kind(); - }; - - PositionedElement.prototype.childIndex = function (child) { - return TypeScript.Syntax.childIndex(this.element(), child); - }; - - PositionedElement.prototype.childCount = function () { - return this.element().childCount(); - }; - - PositionedElement.prototype.childAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - return PositionedElement.create(this, this.element().childAt(index), this.fullStart() + offset); - }; - - PositionedElement.prototype.childStart = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEnd = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.childStartAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth(); - }; - - PositionedElement.prototype.childEndAt = function (index) { - var offset = TypeScript.Syntax.childOffsetAt(this.element(), index); - var child = this.element().childAt(index); - return this.fullStart() + offset + child.leadingTriviaWidth() + child.width(); - }; - - PositionedElement.prototype.getPositionedChild = function (child) { - var offset = TypeScript.Syntax.childOffset(this.element(), child); - return PositionedElement.create(this, child, this.fullStart() + offset); - }; - - PositionedElement.prototype.fullStart = function () { - return this._fullStart; - }; - - PositionedElement.prototype.fullEnd = function () { - return this.fullStart() + this.element().fullWidth(); - }; - - PositionedElement.prototype.fullWidth = function () { - return this.element().fullWidth(); - }; - - PositionedElement.prototype.start = function () { - return this.fullStart() + this.element().leadingTriviaWidth(); - }; - - PositionedElement.prototype.end = function () { - return this.fullStart() + this.element().leadingTriviaWidth() + this.element().width(); - }; - - PositionedElement.prototype.root = function () { - var current = this; - while (current.parent() !== null) { - current = current.parent(); - } - - return current; - }; - - PositionedElement.prototype.containingNode = function () { - var current = this.parent(); - - while (current !== null && !current.element().isNode()) { - current = current.parent(); - } - - return current; - }; - return PositionedElement; - })(); - TypeScript.PositionedElement = PositionedElement; - - var PositionedNodeOrToken = (function (_super) { - __extends(PositionedNodeOrToken, _super); - function PositionedNodeOrToken(parent, nodeOrToken, fullStart) { - _super.call(this, parent, nodeOrToken, fullStart); - } - PositionedNodeOrToken.prototype.nodeOrToken = function () { - return this.element(); - }; - return PositionedNodeOrToken; - })(PositionedElement); - TypeScript.PositionedNodeOrToken = PositionedNodeOrToken; - - var PositionedNode = (function (_super) { - __extends(PositionedNode, _super); - function PositionedNode(parent, node, fullStart) { - _super.call(this, parent, node, fullStart); - } - PositionedNode.prototype.node = function () { - return this.element(); - }; - return PositionedNode; - })(PositionedNodeOrToken); - TypeScript.PositionedNode = PositionedNode; - - var PositionedToken = (function (_super) { - __extends(PositionedToken, _super); - function PositionedToken(parent, token, fullStart) { - _super.call(this, parent, token, fullStart); - } - PositionedToken.prototype.token = function () { - return this.element(); - }; - - PositionedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var triviaList = this.token().leadingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var currentTriviaEndPosition = this.start(); - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), currentTriviaEndPosition - trivia.fullWidth()); - } - - currentTriviaEndPosition -= trivia.fullWidth(); - } - } - - var start = this.fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - var triviaList = this.token().trailingTrivia(); - if (includeSkippedTokens && triviaList && triviaList.hasSkippedToken()) { - var fullStart = this.end(); - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (trivia.isSkippedToken()) { - return new PositionedSkippedToken(this, trivia.skippedToken(), fullStart); - } - - fullStart += trivia.fullWidth(); - } - } - - return this.root().node().findToken(this.fullEnd(), includeSkippedTokens); - }; - return PositionedToken; - })(PositionedNodeOrToken); - TypeScript.PositionedToken = PositionedToken; - - var PositionedList = (function (_super) { - __extends(PositionedList, _super); - function PositionedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedList.prototype.list = function () { - return this.element(); - }; - return PositionedList; - })(PositionedElement); - TypeScript.PositionedList = PositionedList; - - var PositionedSeparatedList = (function (_super) { - __extends(PositionedSeparatedList, _super); - function PositionedSeparatedList(parent, list, fullStart) { - _super.call(this, parent, list, fullStart); - } - PositionedSeparatedList.prototype.list = function () { - return this.element(); - }; - return PositionedSeparatedList; - })(PositionedElement); - TypeScript.PositionedSeparatedList = PositionedSeparatedList; - - var PositionedSkippedToken = (function (_super) { - __extends(PositionedSkippedToken, _super); - function PositionedSkippedToken(parentToken, token, fullStart) { - _super.call(this, parentToken.parent(), token, fullStart); - this._parentToken = parentToken; - } - PositionedSkippedToken.prototype.parentToken = function () { - return this._parentToken; - }; - - PositionedSkippedToken.prototype.previousToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var start = this.fullStart(); - - if (includeSkippedTokens) { - var previousToken; - - if (start >= this.parentToken().end()) { - previousToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - - return this.parentToken(); - } else { - previousToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), start - 1); - - if (previousToken) { - return previousToken; - } - } - } - - var start = this.parentToken().fullStart(); - if (start === 0) { - return null; - } - - return this.root().node().findToken(start - 1, includeSkippedTokens); - }; - - PositionedSkippedToken.prototype.nextToken = function (includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - if (this.token().tokenKind === 10 /* EndOfFileToken */) { - return null; - } - - if (includeSkippedTokens) { - var end = this.end(); - var nextToken; - - if (end <= this.parentToken().start()) { - nextToken = TypeScript.Syntax.findSkippedTokenInLeadingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - - return this.parentToken(); - } else { - nextToken = TypeScript.Syntax.findSkippedTokenInTrailingTriviaList(this.parentToken(), end); - - if (nextToken) { - return nextToken; - } - } - } - - return this.root().node().findToken(this.parentToken().fullEnd(), includeSkippedTokens); - }; - return PositionedSkippedToken; - })(PositionedToken); - TypeScript.PositionedSkippedToken = PositionedSkippedToken; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxKind) { - SyntaxKind[SyntaxKind["None"] = 0] = "None"; - SyntaxKind[SyntaxKind["List"] = 1] = "List"; - SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList"; - SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList"; - - SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia"; - SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia"; - SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia"; - SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia"; - SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia"; - - SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken"; - SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken"; - - SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName"; - - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral"; - - SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword"; - - SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword"; - - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword"; - - SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword"; - - SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken"; - SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken"; - - SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit"; - - SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName"; - - SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType"; - SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType"; - SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType"; - SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery"; - - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment"; - - SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration"; - SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration"; - SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration"; - SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration"; - - SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor"; - - SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature"; - SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature"; - SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; - - SyntaxKind[SyntaxKind["Block"] = 146] = "Block"; - SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; - SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement"; - - SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression"; - SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression"; - SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression"; - SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression"; - SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression"; - SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression"; - SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression"; - SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression"; - SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression"; - SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression"; - SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression"; - SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression"; - SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression"; - SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression"; - SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression"; - SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression"; - SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression"; - SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression"; - SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression"; - SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression"; - SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression"; - SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression"; - SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression"; - SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression"; - SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression"; - SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression"; - SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression"; - SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression"; - SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression"; - SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression"; - SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression"; - SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression"; - SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression"; - SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression"; - SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression"; - SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression"; - SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression"; - SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression"; - SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression"; - SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression"; - SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression"; - SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression"; - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression"; - SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression"; - SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression"; - - SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator"; - - SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList"; - SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList"; - SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList"; - SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList"; - - SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause"; - SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause"; - SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause"; - SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause"; - SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause"; - SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause"; - SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause"; - - SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter"; - SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint"; - - SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment"; - - SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment"; - - SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter"; - SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement"; - SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation"; - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference"; - SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference"; - SyntaxKind[SyntaxKind["Last"] = SyntaxKind.ModuleNameModuleReference] = "Last"; - - SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; - SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword"; - - SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword"; - SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword"; - - SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword"; - SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword"; - - SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword"; - - SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken"; - - SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; - SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation"; - - SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth"; - SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth"; - - SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia"; - SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia"; - })(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {})); - var SyntaxKind = TypeScript.SyntaxKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - var textToKeywordKind = { - "any": 60 /* AnyKeyword */, - "boolean": 61 /* BooleanKeyword */, - "break": 15 /* BreakKeyword */, - "case": 16 /* CaseKeyword */, - "catch": 17 /* CatchKeyword */, - "class": 44 /* ClassKeyword */, - "continue": 18 /* ContinueKeyword */, - "const": 45 /* ConstKeyword */, - "constructor": 62 /* ConstructorKeyword */, - "debugger": 19 /* DebuggerKeyword */, - "declare": 63 /* DeclareKeyword */, - "default": 20 /* DefaultKeyword */, - "delete": 21 /* DeleteKeyword */, - "do": 22 /* DoKeyword */, - "else": 23 /* ElseKeyword */, - "enum": 46 /* EnumKeyword */, - "export": 47 /* ExportKeyword */, - "extends": 48 /* ExtendsKeyword */, - "false": 24 /* FalseKeyword */, - "finally": 25 /* FinallyKeyword */, - "for": 26 /* ForKeyword */, - "function": 27 /* FunctionKeyword */, - "get": 64 /* GetKeyword */, - "if": 28 /* IfKeyword */, - "implements": 51 /* ImplementsKeyword */, - "import": 49 /* ImportKeyword */, - "in": 29 /* InKeyword */, - "instanceof": 30 /* InstanceOfKeyword */, - "interface": 52 /* InterfaceKeyword */, - "let": 53 /* LetKeyword */, - "module": 65 /* ModuleKeyword */, - "new": 31 /* NewKeyword */, - "null": 32 /* NullKeyword */, - "number": 67 /* NumberKeyword */, - "package": 54 /* PackageKeyword */, - "private": 55 /* PrivateKeyword */, - "protected": 56 /* ProtectedKeyword */, - "public": 57 /* PublicKeyword */, - "require": 66 /* RequireKeyword */, - "return": 33 /* ReturnKeyword */, - "set": 68 /* SetKeyword */, - "static": 58 /* StaticKeyword */, - "string": 69 /* StringKeyword */, - "super": 50 /* SuperKeyword */, - "switch": 34 /* SwitchKeyword */, - "this": 35 /* ThisKeyword */, - "throw": 36 /* ThrowKeyword */, - "true": 37 /* TrueKeyword */, - "try": 38 /* TryKeyword */, - "typeof": 39 /* TypeOfKeyword */, - "var": 40 /* VarKeyword */, - "void": 41 /* VoidKeyword */, - "while": 42 /* WhileKeyword */, - "with": 43 /* WithKeyword */, - "yield": 59 /* YieldKeyword */, - "{": 70 /* OpenBraceToken */, - "}": 71 /* CloseBraceToken */, - "(": 72 /* OpenParenToken */, - ")": 73 /* CloseParenToken */, - "[": 74 /* OpenBracketToken */, - "]": 75 /* CloseBracketToken */, - ".": 76 /* DotToken */, - "...": 77 /* DotDotDotToken */, - ";": 78 /* SemicolonToken */, - ",": 79 /* CommaToken */, - "<": 80 /* LessThanToken */, - ">": 81 /* GreaterThanToken */, - "<=": 82 /* LessThanEqualsToken */, - ">=": 83 /* GreaterThanEqualsToken */, - "==": 84 /* EqualsEqualsToken */, - "=>": 85 /* EqualsGreaterThanToken */, - "!=": 86 /* ExclamationEqualsToken */, - "===": 87 /* EqualsEqualsEqualsToken */, - "!==": 88 /* ExclamationEqualsEqualsToken */, - "+": 89 /* PlusToken */, - "-": 90 /* MinusToken */, - "*": 91 /* AsteriskToken */, - "%": 92 /* PercentToken */, - "++": 93 /* PlusPlusToken */, - "--": 94 /* MinusMinusToken */, - "<<": 95 /* LessThanLessThanToken */, - ">>": 96 /* GreaterThanGreaterThanToken */, - ">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 98 /* AmpersandToken */, - "|": 99 /* BarToken */, - "^": 100 /* CaretToken */, - "!": 101 /* ExclamationToken */, - "~": 102 /* TildeToken */, - "&&": 103 /* AmpersandAmpersandToken */, - "||": 104 /* BarBarToken */, - "?": 105 /* QuestionToken */, - ":": 106 /* ColonToken */, - "=": 107 /* EqualsToken */, - "+=": 108 /* PlusEqualsToken */, - "-=": 109 /* MinusEqualsToken */, - "*=": 110 /* AsteriskEqualsToken */, - "%=": 111 /* PercentEqualsToken */, - "<<=": 112 /* LessThanLessThanEqualsToken */, - ">>=": 113 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 115 /* AmpersandEqualsToken */, - "|=": 116 /* BarEqualsToken */, - "^=": 117 /* CaretEqualsToken */, - "/": 118 /* SlashToken */, - "/=": 119 /* SlashEqualsToken */ - }; - - var kindToText = new Array(); - - for (var name in textToKeywordKind) { - if (textToKeywordKind.hasOwnProperty(name)) { - kindToText[textToKeywordKind[name]] = name; - } - } - - kindToText[62 /* ConstructorKeyword */] = "constructor"; - - function getTokenKind(text) { - if (textToKeywordKind.hasOwnProperty(text)) { - return textToKeywordKind[text]; - } - - return 0 /* None */; - } - SyntaxFacts.getTokenKind = getTokenKind; - - function getText(kind) { - var result = kindToText[kind]; - return result !== undefined ? result : null; - } - SyntaxFacts.getText = getText; - - function isTokenKind(kind) { - return kind >= 9 /* FirstToken */ && kind <= 119 /* LastToken */; - } - SyntaxFacts.isTokenKind = isTokenKind; - - function isAnyKeyword(kind) { - return kind >= 15 /* FirstKeyword */ && kind <= 69 /* LastKeyword */; - } - SyntaxFacts.isAnyKeyword = isAnyKeyword; - - function isStandardKeyword(kind) { - return kind >= 15 /* FirstStandardKeyword */ && kind <= 43 /* LastStandardKeyword */; - } - SyntaxFacts.isStandardKeyword = isStandardKeyword; - - function isFutureReservedKeyword(kind) { - return kind >= 44 /* FirstFutureReservedKeyword */ && kind <= 50 /* LastFutureReservedKeyword */; - } - SyntaxFacts.isFutureReservedKeyword = isFutureReservedKeyword; - - function isFutureReservedStrictKeyword(kind) { - return kind >= 51 /* FirstFutureReservedStrictKeyword */ && kind <= 59 /* LastFutureReservedStrictKeyword */; - } - SyntaxFacts.isFutureReservedStrictKeyword = isFutureReservedStrictKeyword; - - function isAnyPunctuation(kind) { - return kind >= 70 /* FirstPunctuation */ && kind <= 119 /* LastPunctuation */; - } - SyntaxFacts.isAnyPunctuation = isAnyPunctuation; - - function isPrefixUnaryExpressionOperatorToken(tokenKind) { - return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken; - - function isBinaryExpressionOperatorToken(tokenKind) { - return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; - } - SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken; - - function getPrefixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 89 /* PlusToken */: - return 164 /* PlusExpression */; - case 90 /* MinusToken */: - return 165 /* NegateExpression */; - case 102 /* TildeToken */: - return 166 /* BitwiseNotExpression */; - case 101 /* ExclamationToken */: - return 167 /* LogicalNotExpression */; - case 93 /* PlusPlusToken */: - return 168 /* PreIncrementExpression */; - case 94 /* MinusMinusToken */: - return 169 /* PreDecrementExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken; - - function getPostfixUnaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 93 /* PlusPlusToken */: - return 210 /* PostIncrementExpression */; - case 94 /* MinusMinusToken */: - return 211 /* PostDecrementExpression */; - default: - return 0 /* None */; - } - } - SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken; - - function getBinaryExpressionFromOperatorToken(tokenKind) { - switch (tokenKind) { - case 91 /* AsteriskToken */: - return 205 /* MultiplyExpression */; - - case 118 /* SlashToken */: - return 206 /* DivideExpression */; - - case 92 /* PercentToken */: - return 207 /* ModuloExpression */; - - case 89 /* PlusToken */: - return 208 /* AddExpression */; - - case 90 /* MinusToken */: - return 209 /* SubtractExpression */; - - case 95 /* LessThanLessThanToken */: - return 202 /* LeftShiftExpression */; - - case 96 /* GreaterThanGreaterThanToken */: - return 203 /* SignedRightShiftExpression */; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - return 204 /* UnsignedRightShiftExpression */; - - case 80 /* LessThanToken */: - return 196 /* LessThanExpression */; - - case 81 /* GreaterThanToken */: - return 197 /* GreaterThanExpression */; - - case 82 /* LessThanEqualsToken */: - return 198 /* LessThanOrEqualExpression */; - - case 83 /* GreaterThanEqualsToken */: - return 199 /* GreaterThanOrEqualExpression */; - - case 30 /* InstanceOfKeyword */: - return 200 /* InstanceOfExpression */; - - case 29 /* InKeyword */: - return 201 /* InExpression */; - - case 84 /* EqualsEqualsToken */: - return 192 /* EqualsWithTypeConversionExpression */; - - case 86 /* ExclamationEqualsToken */: - return 193 /* NotEqualsWithTypeConversionExpression */; - - case 87 /* EqualsEqualsEqualsToken */: - return 194 /* EqualsExpression */; - - case 88 /* ExclamationEqualsEqualsToken */: - return 195 /* NotEqualsExpression */; - - case 98 /* AmpersandToken */: - return 191 /* BitwiseAndExpression */; - - case 100 /* CaretToken */: - return 190 /* BitwiseExclusiveOrExpression */; - - case 99 /* BarToken */: - return 189 /* BitwiseOrExpression */; - - case 103 /* AmpersandAmpersandToken */: - return 188 /* LogicalAndExpression */; - - case 104 /* BarBarToken */: - return 187 /* LogicalOrExpression */; - - case 116 /* BarEqualsToken */: - return 182 /* OrAssignmentExpression */; - - case 115 /* AmpersandEqualsToken */: - return 180 /* AndAssignmentExpression */; - - case 117 /* CaretEqualsToken */: - return 181 /* ExclusiveOrAssignmentExpression */; - - case 112 /* LessThanLessThanEqualsToken */: - return 183 /* LeftShiftAssignmentExpression */; - - case 113 /* GreaterThanGreaterThanEqualsToken */: - return 184 /* SignedRightShiftAssignmentExpression */; - - case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - return 185 /* UnsignedRightShiftAssignmentExpression */; - - case 108 /* PlusEqualsToken */: - return 175 /* AddAssignmentExpression */; - - case 109 /* MinusEqualsToken */: - return 176 /* SubtractAssignmentExpression */; - - case 110 /* AsteriskEqualsToken */: - return 177 /* MultiplyAssignmentExpression */; - - case 119 /* SlashEqualsToken */: - return 178 /* DivideAssignmentExpression */; - - case 111 /* PercentEqualsToken */: - return 179 /* ModuloAssignmentExpression */; - - case 107 /* EqualsToken */: - return 174 /* AssignmentExpression */; - - case 79 /* CommaToken */: - return 173 /* CommaExpression */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken; - - function getOperatorTokenFromBinaryExpression(tokenKind) { - switch (tokenKind) { - case 205 /* MultiplyExpression */: - return 91 /* AsteriskToken */; - - case 206 /* DivideExpression */: - return 118 /* SlashToken */; - - case 207 /* ModuloExpression */: - return 92 /* PercentToken */; - - case 208 /* AddExpression */: - return 89 /* PlusToken */; - - case 209 /* SubtractExpression */: - return 90 /* MinusToken */; - - case 202 /* LeftShiftExpression */: - return 95 /* LessThanLessThanToken */; - - case 203 /* SignedRightShiftExpression */: - return 96 /* GreaterThanGreaterThanToken */; - - case 204 /* UnsignedRightShiftExpression */: - return 97 /* GreaterThanGreaterThanGreaterThanToken */; - - case 196 /* LessThanExpression */: - return 80 /* LessThanToken */; - - case 197 /* GreaterThanExpression */: - return 81 /* GreaterThanToken */; - - case 198 /* LessThanOrEqualExpression */: - return 82 /* LessThanEqualsToken */; - - case 199 /* GreaterThanOrEqualExpression */: - return 83 /* GreaterThanEqualsToken */; - - case 200 /* InstanceOfExpression */: - return 30 /* InstanceOfKeyword */; - - case 201 /* InExpression */: - return 29 /* InKeyword */; - - case 192 /* EqualsWithTypeConversionExpression */: - return 84 /* EqualsEqualsToken */; - - case 193 /* NotEqualsWithTypeConversionExpression */: - return 86 /* ExclamationEqualsToken */; - - case 194 /* EqualsExpression */: - return 87 /* EqualsEqualsEqualsToken */; - - case 195 /* NotEqualsExpression */: - return 88 /* ExclamationEqualsEqualsToken */; - - case 191 /* BitwiseAndExpression */: - return 98 /* AmpersandToken */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 100 /* CaretToken */; - - case 189 /* BitwiseOrExpression */: - return 99 /* BarToken */; - - case 188 /* LogicalAndExpression */: - return 103 /* AmpersandAmpersandToken */; - - case 187 /* LogicalOrExpression */: - return 104 /* BarBarToken */; - - case 182 /* OrAssignmentExpression */: - return 116 /* BarEqualsToken */; - - case 180 /* AndAssignmentExpression */: - return 115 /* AmpersandEqualsToken */; - - case 181 /* ExclusiveOrAssignmentExpression */: - return 117 /* CaretEqualsToken */; - - case 183 /* LeftShiftAssignmentExpression */: - return 112 /* LessThanLessThanEqualsToken */; - - case 184 /* SignedRightShiftAssignmentExpression */: - return 113 /* GreaterThanGreaterThanEqualsToken */; - - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; - - case 175 /* AddAssignmentExpression */: - return 108 /* PlusEqualsToken */; - - case 176 /* SubtractAssignmentExpression */: - return 109 /* MinusEqualsToken */; - - case 177 /* MultiplyAssignmentExpression */: - return 110 /* AsteriskEqualsToken */; - - case 178 /* DivideAssignmentExpression */: - return 119 /* SlashEqualsToken */; - - case 179 /* ModuloAssignmentExpression */: - return 111 /* PercentEqualsToken */; - - case 174 /* AssignmentExpression */: - return 107 /* EqualsToken */; - - case 173 /* CommaExpression */: - return 79 /* CommaToken */; - - default: - return 0 /* None */; - } - } - SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression; - - function isAnyDivideToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideToken = isAnyDivideToken; - - function isAnyDivideOrRegularExpressionToken(kind) { - switch (kind) { - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - case 12 /* RegularExpressionLiteral */: - return true; - default: - return false; - } - } - SyntaxFacts.isAnyDivideOrRegularExpressionToken = isAnyDivideOrRegularExpressionToken; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - var isNumericLiteralStart = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); - - for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) { - if (character >= 97 /* a */ && character <= 122 /* z */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if ((character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) { - isIdentifierStartCharacter[character] = true; - isIdentifierPartCharacter[character] = true; - } else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) { - isIdentifierPartCharacter[character] = true; - isNumericLiteralStart[character] = true; - } - } - - isNumericLiteralStart[46 /* dot */] = true; - - for (var keywordKind = 15 /* FirstKeyword */; keywordKind <= 69 /* LastKeyword */; keywordKind++) { - var keyword = TypeScript.SyntaxFacts.getText(keywordKind); - isKeywordStartCharacter[keyword.charCodeAt(0)] = true; - } - - var Scanner = (function () { - function Scanner(fileName, text, languageVersion, window) { - if (typeof window === "undefined") { window = TypeScript.ArrayUtilities.createArray(2048, 0); } - this.slidingWindow = new TypeScript.SlidingWindow(this, window, 0, text.length()); - this.fileName = fileName; - this.text = text; - this._languageVersion = languageVersion; - } - Scanner.prototype.languageVersion = function () { - return this._languageVersion; - }; - - Scanner.prototype.fetchMoreItems = function (argument, sourceIndex, window, destinationIndex, spaceAvailable) { - var charactersRemaining = this.text.length() - sourceIndex; - var amountToRead = TypeScript.MathPrototype.min(charactersRemaining, spaceAvailable); - this.text.copyTo(sourceIndex, window, destinationIndex, amountToRead); - return amountToRead; - }; - - Scanner.prototype.currentCharCode = function () { - return this.slidingWindow.currentItem(null); - }; - - Scanner.prototype.absoluteIndex = function () { - return this.slidingWindow.absoluteIndex(); - }; - - Scanner.prototype.setAbsoluteIndex = function (index) { - this.slidingWindow.setAbsoluteIndex(index); - }; - - Scanner.prototype.scan = function (diagnostics, allowRegularExpression) { - var diagnosticsLength = diagnostics.length; - var fullStart = this.slidingWindow.absoluteIndex(); - var leadingTriviaInfo = this.scanTriviaInfo(diagnostics, false); - - var start = this.slidingWindow.absoluteIndex(); - var kindAndFlags = this.scanSyntaxToken(diagnostics, allowRegularExpression); - var end = this.slidingWindow.absoluteIndex(); - - var trailingTriviaInfo = this.scanTriviaInfo(diagnostics, true); - var fullEnd = this.slidingWindow.absoluteIndex(); - - var isVariableWidthKeyword = (kindAndFlags & -2147483648 /* IsVariableWidthKeyword */) !== 0; - var kind = kindAndFlags & ~-2147483648 /* IsVariableWidthKeyword */; - - var token = this.createToken(fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword); - - return diagnosticsLength !== diagnostics.length ? TypeScript.Syntax.realizeToken(token) : token; - }; - - Scanner.prototype.createToken = function (fullStart, leadingTriviaInfo, start, kind, end, fullEnd, trailingTriviaInfo, isVariableWidthKeyword) { - if (!isVariableWidthKeyword && kind >= 15 /* FirstFixedWidth */) { - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.FixedWidthTokenWithNoTrivia(kind); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - return new TypeScript.Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } else { - var width = end - start; - - var fullText = this.text.substr(fullStart, fullEnd - fullStart, false); - - if (leadingTriviaInfo === 0) { - if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithNoTrivia(fullText, kind); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo); - } - } else if (trailingTriviaInfo === 0) { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo); - } else { - return new TypeScript.Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo); - } - } - }; - - Scanner.scanTrivia = function (text, start, length, isTrailing) { - var scanner = new Scanner(null, text.subText(new TypeScript.TextSpan(start, length)), 1 /* EcmaScript5 */, Scanner.triviaWindow); - return scanner.scanTrivia(text, start, isTrailing); - }; - - Scanner.prototype.scanTrivia = function (underlyingText, underlyingTextStart, isTrailing) { - var trivia = new Array(); - - while (true) { - if (!this.slidingWindow.isAtEndOfSource()) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - trivia.push(this.scanWhitespaceTrivia(underlyingText, underlyingTextStart)); - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - trivia.push(this.scanSingleLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - if (ch2 === 42 /* asterisk */) { - trivia.push(this.scanMultiLineCommentTrivia(underlyingText, underlyingTextStart)); - continue; - } - - throw TypeScript.Errors.invalidOperation(); - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - trivia.push(this.scanLineTerminatorSequenceTrivia(ch)); - - if (!isTrailing) { - continue; - } - - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - return TypeScript.Syntax.triviaList(trivia); - } - }; - - Scanner.prototype.scanTriviaInfo = function (diagnostics, isTrailing) { - var width = 0; - var hasCommentOrNewLine = 0; - - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - - case 47 /* slash */: - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 47 /* slash */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanSingleLineCommentTriviaLength(); - continue; - } - - if (ch2 === 42 /* asterisk */) { - hasCommentOrNewLine |= 2 /* TriviaCommentMask */; - width += this.scanMultiLineCommentTriviaLength(diagnostics); - continue; - } - - break; - - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - hasCommentOrNewLine |= 1 /* TriviaNewLineMask */; - width += this.scanLineTerminatorSequenceLength(ch); - - if (!isTrailing) { - continue; - } - - break; - } - - return (width << 2 /* TriviaFullWidthShift */) | hasCommentOrNewLine; - } - }; - - Scanner.prototype.isNewLineCharacter = function (ch) { - switch (ch) { - case 13 /* carriageReturn */: - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - return true; - default: - return false; - } - }; - - Scanner.prototype.scanWhitespaceTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - - var width = 0; - while (true) { - var ch = this.currentCharCode(); - - switch (ch) { - case 32 /* space */: - case 160 /* nonBreakingSpace */: - case 8192 /* enQuad */: - case 8193 /* emQuad */: - case 8194 /* enSpace */: - case 8195 /* emSpace */: - case 8196 /* threePerEmSpace */: - case 8197 /* fourPerEmSpace */: - case 8198 /* sixPerEmSpace */: - case 8199 /* figureSpace */: - case 8200 /* punctuationSpace */: - case 8201 /* thinSpace */: - case 8202 /* hairSpace */: - case 8203 /* zeroWidthSpace */: - case 8239 /* narrowNoBreakSpace */: - case 12288 /* ideographicSpace */: - - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 65279 /* byteOrderMark */: - this.slidingWindow.moveToNextItem(); - width++; - continue; - } - - break; - } - - return TypeScript.Syntax.deferredTrivia(4 /* WhitespaceTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.slidingWindow.absoluteIndex(); - var width = this.scanSingleLineCommentTriviaLength(); - - return TypeScript.Syntax.deferredTrivia(7 /* SingleLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanSingleLineCommentTriviaLength = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource() || this.isNewLineCharacter(this.currentCharCode())) { - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanMultiLineCommentTrivia = function (underlyingText, underlyingTextStart) { - var absoluteStartIndex = this.absoluteIndex(); - var width = this.scanMultiLineCommentTriviaLength(null); - - return TypeScript.Syntax.deferredTrivia(6 /* MultiLineCommentTrivia */, underlyingText, underlyingTextStart + absoluteStartIndex, width); - }; - - Scanner.prototype.scanMultiLineCommentTriviaLength = function (diagnostics) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - var width = 2; - while (true) { - if (this.slidingWindow.isAtEndOfSource()) { - if (diagnostics !== null) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), this.slidingWindow.absoluteIndex(), 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null)); - } - - return width; - } - - var ch = this.currentCharCode(); - if (ch === 42 /* asterisk */ && this.slidingWindow.peekItemN(1) === 47 /* slash */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - width += 2; - return width; - } - - this.slidingWindow.moveToNextItem(); - width++; - } - }; - - Scanner.prototype.scanLineTerminatorSequenceTrivia = function (ch) { - var absoluteStartIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - var width = this.scanLineTerminatorSequenceLength(ch); - - var text = this.substring(absoluteStartIndex, absoluteStartIndex + width, false); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(absoluteStartIndex); - - return TypeScript.Syntax.trivia(5 /* NewLineTrivia */, text); - }; - - Scanner.prototype.scanLineTerminatorSequenceLength = function (ch) { - this.slidingWindow.moveToNextItem(); - - if (ch === 13 /* carriageReturn */ && this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - return 2; - } else { - return 1; - } - }; - - Scanner.prototype.scanSyntaxToken = function (diagnostics, allowRegularExpression) { - if (this.slidingWindow.isAtEndOfSource()) { - return 10 /* EndOfFileToken */; - } - - var character = this.currentCharCode(); - - switch (character) { - case 34 /* doubleQuote */: - case 39 /* singleQuote */: - return this.scanStringLiteral(diagnostics); - - case 47 /* slash */: - return this.scanSlashToken(allowRegularExpression); - - case 46 /* dot */: - return this.scanDotToken(diagnostics); - - case 45 /* minus */: - return this.scanMinusToken(); - - case 33 /* exclamation */: - return this.scanExclamationToken(); - - case 61 /* equals */: - return this.scanEqualsToken(); - - case 124 /* bar */: - return this.scanBarToken(); - - case 42 /* asterisk */: - return this.scanAsteriskToken(); - - case 43 /* plus */: - return this.scanPlusToken(); - - case 37 /* percent */: - return this.scanPercentToken(); - - case 38 /* ampersand */: - return this.scanAmpersandToken(); - - case 94 /* caret */: - return this.scanCaretToken(); - - case 60 /* lessThan */: - return this.scanLessThanToken(); - - case 62 /* greaterThan */: - return this.advanceAndSetTokenKind(81 /* GreaterThanToken */); - - case 44 /* comma */: - return this.advanceAndSetTokenKind(79 /* CommaToken */); - - case 58 /* colon */: - return this.advanceAndSetTokenKind(106 /* ColonToken */); - - case 59 /* semicolon */: - return this.advanceAndSetTokenKind(78 /* SemicolonToken */); - - case 126 /* tilde */: - return this.advanceAndSetTokenKind(102 /* TildeToken */); - - case 40 /* openParen */: - return this.advanceAndSetTokenKind(72 /* OpenParenToken */); - - case 41 /* closeParen */: - return this.advanceAndSetTokenKind(73 /* CloseParenToken */); - - case 123 /* openBrace */: - return this.advanceAndSetTokenKind(70 /* OpenBraceToken */); - - case 125 /* closeBrace */: - return this.advanceAndSetTokenKind(71 /* CloseBraceToken */); - - case 91 /* openBracket */: - return this.advanceAndSetTokenKind(74 /* OpenBracketToken */); - - case 93 /* closeBracket */: - return this.advanceAndSetTokenKind(75 /* CloseBracketToken */); - - case 63 /* question */: - return this.advanceAndSetTokenKind(105 /* QuestionToken */); - } - - if (isNumericLiteralStart[character]) { - return this.scanNumericLiteral(diagnostics); - } - - if (isIdentifierStartCharacter[character]) { - var result = this.tryFastScanIdentifierOrKeyword(character); - if (result !== 0 /* None */) { - return result; - } - } - - if (this.isIdentifierStart(this.peekCharOrUnicodeEscape())) { - return this.slowScanIdentifierOrKeyword(diagnostics); - } - - return this.scanDefaultCharacter(character, diagnostics); - }; - - Scanner.prototype.isIdentifierStart = function (interpretedChar) { - if (isIdentifierStartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.isIdentifierPart = function (interpretedChar) { - if (isIdentifierPartCharacter[interpretedChar]) { - return true; - } - - return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, this._languageVersion); - }; - - Scanner.prototype.tryFastScanIdentifierOrKeyword = function (firstCharacter) { - var slidingWindow = this.slidingWindow; - var window = slidingWindow.window; - - var startIndex = slidingWindow.currentRelativeItemIndex; - var endIndex = slidingWindow.windowCount; - var currentIndex = startIndex; - var character = 0; - - while (currentIndex < endIndex) { - character = window[currentIndex]; - if (!isIdentifierPartCharacter[character]) { - break; - } - - currentIndex++; - } - - if (currentIndex === endIndex) { - return 0 /* None */; - } else if (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */) { - return 0 /* None */; - } else { - var kind; - var identifierLength = currentIndex - startIndex; - if (isKeywordStartCharacter[firstCharacter]) { - kind = TypeScript.ScannerUtilities.identifierKind(window, startIndex, identifierLength); - } else { - kind = 11 /* IdentifierName */; - } - - slidingWindow.setAbsoluteIndex(slidingWindow.absoluteIndex() + identifierLength); - - return kind; - } - }; - - Scanner.prototype.slowScanIdentifierOrKeyword = function (diagnostics) { - var startIndex = this.slidingWindow.absoluteIndex(); - var sawUnicodeEscape = false; - - do { - var unicodeEscape = this.scanCharOrUnicodeEscape(diagnostics); - sawUnicodeEscape = sawUnicodeEscape || unicodeEscape; - } while(this.isIdentifierPart(this.peekCharOrUnicodeEscape())); - - var length = this.slidingWindow.absoluteIndex() - startIndex; - var text = this.text.substr(startIndex, length, false); - var valueText = TypeScript.Syntax.massageEscapes(text); - - var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText); - if (keywordKind >= 15 /* FirstKeyword */ && keywordKind <= 69 /* LastKeyword */) { - if (sawUnicodeEscape) { - return keywordKind | -2147483648 /* IsVariableWidthKeyword */; - } else { - return keywordKind; - } - } - - return 11 /* IdentifierName */; - }; - - Scanner.prototype.scanNumericLiteral = function (diagnostics) { - if (this.isHexNumericLiteral()) { - this.scanHexNumericLiteral(); - } else if (this.isOctalNumericLiteral()) { - this.scanOctalNumericLiteral(diagnostics); - } else { - this.scanDecimalNumericLiteral(); - } - - return 13 /* NumericLiteral */; - }; - - Scanner.prototype.isOctalNumericLiteral = function () { - return this.currentCharCode() === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(this.slidingWindow.peekItemN(1)); - }; - - Scanner.prototype.scanOctalNumericLiteral = function (diagnostics) { - var position = this.absoluteIndex(); - - while (TypeScript.CharacterInfo.isOctalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - - if (this.languageVersion() >= 1 /* EcmaScript5 */) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, this.absoluteIndex() - position, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null)); - } - }; - - Scanner.prototype.scanDecimalDigits = function () { - while (TypeScript.CharacterInfo.isDecimalDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.scanDecimalNumericLiteral = function () { - this.scanDecimalDigits(); - - if (this.currentCharCode() === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - } - - this.scanDecimalDigits(); - - var ch = this.currentCharCode(); - if (ch === 101 /* e */ || ch === 69 /* E */) { - var nextChar1 = this.slidingWindow.peekItemN(1); - - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) { - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) { - var nextChar2 = this.slidingWindow.peekItemN(2); - if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - this.scanDecimalDigits(); - } - } - } - }; - - Scanner.prototype.scanHexNumericLiteral = function () { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - - while (TypeScript.CharacterInfo.isHexDigit(this.currentCharCode())) { - this.slidingWindow.moveToNextItem(); - } - }; - - Scanner.prototype.isHexNumericLiteral = function () { - if (this.currentCharCode() === 48 /* _0 */) { - var ch = this.slidingWindow.peekItemN(1); - - if (ch === 120 /* x */ || ch === 88 /* X */) { - ch = this.slidingWindow.peekItemN(2); - - return TypeScript.CharacterInfo.isHexDigit(ch); - } - } - - return false; - }; - - Scanner.prototype.advanceAndSetTokenKind = function (kind) { - this.slidingWindow.moveToNextItem(); - return kind; - }; - - Scanner.prototype.scanLessThanToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 82 /* LessThanEqualsToken */; - } else if (this.currentCharCode() === 60 /* lessThan */) { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 112 /* LessThanLessThanEqualsToken */; - } else { - return 95 /* LessThanLessThanToken */; - } - } else { - return 80 /* LessThanToken */; - } - }; - - Scanner.prototype.scanBarToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 116 /* BarEqualsToken */; - } else if (this.currentCharCode() === 124 /* bar */) { - this.slidingWindow.moveToNextItem(); - return 104 /* BarBarToken */; - } else { - return 99 /* BarToken */; - } - }; - - Scanner.prototype.scanCaretToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 117 /* CaretEqualsToken */; - } else { - return 100 /* CaretToken */; - } - }; - - Scanner.prototype.scanAmpersandToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 115 /* AmpersandEqualsToken */; - } else if (this.currentCharCode() === 38 /* ampersand */) { - this.slidingWindow.moveToNextItem(); - return 103 /* AmpersandAmpersandToken */; - } else { - return 98 /* AmpersandToken */; - } - }; - - Scanner.prototype.scanPercentToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 111 /* PercentEqualsToken */; - } else { - return 92 /* PercentToken */; - } - }; - - Scanner.prototype.scanMinusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 109 /* MinusEqualsToken */; - } else if (character === 45 /* minus */) { - this.slidingWindow.moveToNextItem(); - return 94 /* MinusMinusToken */; - } else { - return 90 /* MinusToken */; - } - }; - - Scanner.prototype.scanPlusToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 108 /* PlusEqualsToken */; - } else if (character === 43 /* plus */) { - this.slidingWindow.moveToNextItem(); - return 93 /* PlusPlusToken */; - } else { - return 89 /* PlusToken */; - } - }; - - Scanner.prototype.scanAsteriskToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 110 /* AsteriskEqualsToken */; - } else { - return 91 /* AsteriskToken */; - } - }; - - Scanner.prototype.scanEqualsToken = function () { - this.slidingWindow.moveToNextItem(); - var character = this.currentCharCode(); - if (character === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 87 /* EqualsEqualsEqualsToken */; - } else { - return 84 /* EqualsEqualsToken */; - } - } else if (character === 62 /* greaterThan */) { - this.slidingWindow.moveToNextItem(); - return 85 /* EqualsGreaterThanToken */; - } else { - return 107 /* EqualsToken */; - } - }; - - Scanner.prototype.isDotPrefixedNumericLiteral = function () { - if (this.currentCharCode() === 46 /* dot */) { - var ch = this.slidingWindow.peekItemN(1); - return TypeScript.CharacterInfo.isDecimalDigit(ch); - } - - return false; - }; - - Scanner.prototype.scanDotToken = function (diagnostics) { - if (this.isDotPrefixedNumericLiteral()) { - return this.scanNumericLiteral(diagnostics); - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 46 /* dot */ && this.slidingWindow.peekItemN(1) === 46 /* dot */) { - this.slidingWindow.moveToNextItem(); - this.slidingWindow.moveToNextItem(); - return 77 /* DotDotDotToken */; - } else { - return 76 /* DotToken */; - } - }; - - Scanner.prototype.scanSlashToken = function (allowRegularExpression) { - if (allowRegularExpression) { - var result = this.tryScanRegularExpressionToken(); - if (result !== 0 /* None */) { - return result; - } - } - - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - return 119 /* SlashEqualsToken */; - } else { - return 118 /* SlashToken */; - } - }; - - Scanner.prototype.tryScanRegularExpressionToken = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var inEscape = false; - var inCharacterClass = false; - while (true) { - var ch = this.currentCharCode(); - - if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 0 /* None */; - } - - this.slidingWindow.moveToNextItem(); - if (inEscape) { - inEscape = false; - continue; - } - - switch (ch) { - case 92 /* backslash */: - inEscape = true; - continue; - - case 91 /* openBracket */: - inCharacterClass = true; - continue; - - case 93 /* closeBracket */: - inCharacterClass = false; - continue; - - case 47 /* slash */: - if (inCharacterClass) { - continue; - } - - break; - - default: - continue; - } - - break; - } - - while (isIdentifierPartCharacter[this.currentCharCode()]) { - this.slidingWindow.moveToNextItem(); - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - return 12 /* RegularExpressionLiteral */; - }; - - Scanner.prototype.scanExclamationToken = function () { - this.slidingWindow.moveToNextItem(); - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - if (this.currentCharCode() === 61 /* equals */) { - this.slidingWindow.moveToNextItem(); - - return 88 /* ExclamationEqualsEqualsToken */; - } else { - return 86 /* ExclamationEqualsToken */; - } - } else { - return 101 /* ExclamationToken */; - } - }; - - Scanner.prototype.scanDefaultCharacter = function (character, diagnostics) { - var position = this.slidingWindow.absoluteIndex(); - this.slidingWindow.moveToNextItem(); - - var text = String.fromCharCode(character); - var messageText = this.getErrorMessageText(text); - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), position, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText])); - - return 9 /* ErrorToken */; - }; - - Scanner.prototype.getErrorMessageText = function (text) { - if (text === "\\") { - return '"\\"'; - } - - return JSON.stringify(text); - }; - - Scanner.prototype.skipEscapeSequence = function (diagnostics) { - var rewindPoint = this.slidingWindow.getAndPinAbsoluteIndex(); - - this.slidingWindow.moveToNextItem(); - - var ch = this.currentCharCode(); - this.slidingWindow.moveToNextItem(); - switch (ch) { - case 120 /* x */: - case 117 /* u */: - this.slidingWindow.rewindToPinnedIndex(rewindPoint); - var value = this.scanUnicodeOrHexEscape(diagnostics); - break; - - case 13 /* carriageReturn */: - if (this.currentCharCode() === 10 /* lineFeed */) { - this.slidingWindow.moveToNextItem(); - } - break; - - default: - break; - } - - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint); - }; - - Scanner.prototype.scanStringLiteral = function (diagnostics) { - var quoteCharacter = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - while (true) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - this.skipEscapeSequence(diagnostics); - } else if (ch === quoteCharacter) { - this.slidingWindow.moveToNextItem(); - break; - } else if (this.isNewLineCharacter(ch) || this.slidingWindow.isAtEndOfSource()) { - diagnostics.push(new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), TypeScript.MathPrototype.min(this.slidingWindow.absoluteIndex(), this.text.length()), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null)); - break; - } else { - this.slidingWindow.moveToNextItem(); - } - } - - return 14 /* StringLiteral */; - }; - - Scanner.prototype.isUnicodeEscape = function (character) { - if (character === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - return true; - } - } - - return false; - }; - - Scanner.prototype.peekCharOrUnicodeEscape = function () { - var character = this.currentCharCode(); - if (this.isUnicodeEscape(character)) { - return this.peekUnicodeOrHexEscape(); - } else { - return character; - } - }; - - Scanner.prototype.peekUnicodeOrHexEscape = function () { - var startIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var ch = this.scanUnicodeOrHexEscape(null); - - this.slidingWindow.rewindToPinnedIndex(startIndex); - this.slidingWindow.releaseAndUnpinAbsoluteIndex(startIndex); - - return ch; - }; - - Scanner.prototype.scanCharOrUnicodeEscape = function (errors) { - var ch = this.currentCharCode(); - if (ch === 92 /* backslash */) { - var ch2 = this.slidingWindow.peekItemN(1); - if (ch2 === 117 /* u */) { - this.scanUnicodeOrHexEscape(errors); - return true; - } - } - - this.slidingWindow.moveToNextItem(); - return false; - }; - - Scanner.prototype.scanUnicodeOrHexEscape = function (errors) { - var start = this.slidingWindow.absoluteIndex(); - var character = this.currentCharCode(); - - this.slidingWindow.moveToNextItem(); - - character = this.currentCharCode(); - - var intChar = 0; - this.slidingWindow.moveToNextItem(); - - var count = character === 117 /* u */ ? 4 : 2; - - for (var i = 0; i < count; i++) { - var ch2 = this.currentCharCode(); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - if (errors !== null) { - var end = this.slidingWindow.absoluteIndex(); - var info = this.createIllegalEscapeDiagnostic(start, end); - errors.push(info); - } - - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - this.slidingWindow.moveToNextItem(); - } - - return intChar; - }; - - Scanner.prototype.substring = function (start, end, intern) { - var length = end - start; - var offset = start - this.slidingWindow.windowAbsoluteStartIndex; - - if (intern) { - return TypeScript.Collections.DefaultStringTable.addCharArray(this.slidingWindow.window, offset, length); - } else { - return TypeScript.StringUtilities.fromCharCodeArray(this.slidingWindow.window.slice(offset, offset + length)); - } - }; - - Scanner.prototype.createIllegalEscapeDiagnostic = function (start, end) { - return new TypeScript.Diagnostic(this.fileName, this.text.lineMap(), start, end - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null); - }; - - Scanner.isValidIdentifier = function (text, languageVersion) { - var scanner = new Scanner(null, text, languageVersion, Scanner.triviaWindow); - var errors = new Array(); - var token = scanner.scan(errors, false); - - return errors.length === 0 && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && token.width() === text.length(); - }; - Scanner.triviaWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - return Scanner; - })(); - TypeScript.Scanner = Scanner; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ScannerUtilities = (function () { - function ScannerUtilities() { - } - ScannerUtilities.identifierKind = function (array, startIndex, length) { - switch (length) { - case 2: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - switch (array[startIndex + 1]) { - case 102 /* f */: - return 28 /* IfKeyword */; - case 110 /* n */: - return 29 /* InKeyword */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 3: - switch (array[startIndex]) { - case 102 /* f */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */; - case 118 /* v */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */; - case 97 /* a */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */; - case 103 /* g */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 4: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - switch (array[startIndex + 1]) { - case 108 /* l */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 1]) { - case 104 /* h */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 117 /* u */ && array[startIndex + 3] === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 118 /* v */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 5: - switch (array[startIndex]) { - case 98 /* b */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */; - case 108 /* l */: - return (array[startIndex + 2] === 97 /* a */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */; - case 111 /* o */: - return (array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 97 /* a */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 114 /* r */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */; - case 119 /* w */: - return (array[startIndex + 1] === 104 /* h */ && array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */; - case 121 /* y */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 101 /* e */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 6: - switch (array[startIndex]) { - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 108 /* l */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */; - case 115 /* s */: - switch (array[startIndex + 1]) { - case 119 /* w */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 99 /* c */ && array[startIndex + 5] === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */; - case 116 /* t */: - switch (array[startIndex + 2]) { - case 97 /* a */: - return (array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 3] === 105 /* i */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 116 /* t */: - return (array[startIndex + 1] === 121 /* y */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 111 /* o */ && array[startIndex + 5] === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */; - case 105 /* i */: - return (array[startIndex + 1] === 109 /* m */ && array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 111 /* o */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 100 /* d */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */; - case 110 /* n */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 109 /* m */ && array[startIndex + 3] === 98 /* b */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 7: - switch (array[startIndex]) { - case 100 /* d */: - switch (array[startIndex + 1]) { - case 101 /* e */: - switch (array[startIndex + 2]) { - case 102 /* f */: - return (array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 117 /* u */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */; - case 99 /* c */: - return (array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 102 /* f */: - return (array[startIndex + 1] === 105 /* i */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 97 /* a */ && array[startIndex + 4] === 108 /* l */ && array[startIndex + 5] === 108 /* l */ && array[startIndex + 6] === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */; - case 101 /* e */: - return (array[startIndex + 1] === 120 /* x */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 110 /* n */ && array[startIndex + 5] === 100 /* d */ && array[startIndex + 6] === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - switch (array[startIndex + 1]) { - case 97 /* a */: - return (array[startIndex + 2] === 99 /* c */ && array[startIndex + 3] === 107 /* k */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 2] === 105 /* i */ && array[startIndex + 3] === 118 /* v */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 116 /* t */ && array[startIndex + 6] === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 98 /* b */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 97 /* a */ && array[startIndex + 6] === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */; - case 114 /* r */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 113 /* q */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 8: - switch (array[startIndex]) { - case 99 /* c */: - return (array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 105 /* i */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */; - case 100 /* d */: - return (array[startIndex + 1] === 101 /* e */ && array[startIndex + 2] === 98 /* b */ && array[startIndex + 3] === 117 /* u */ && array[startIndex + 4] === 103 /* g */ && array[startIndex + 5] === 103 /* g */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */; - case 102 /* f */: - return (array[startIndex + 1] === 117 /* u */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 99 /* c */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 105 /* i */ && array[startIndex + 6] === 111 /* o */ && array[startIndex + 7] === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 9: - switch (array[startIndex]) { - case 105 /* i */: - return (array[startIndex + 1] === 110 /* n */ && array[startIndex + 2] === 116 /* t */ && array[startIndex + 3] === 101 /* e */ && array[startIndex + 4] === 114 /* r */ && array[startIndex + 5] === 102 /* f */ && array[startIndex + 6] === 97 /* a */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */; - case 112 /* p */: - return (array[startIndex + 1] === 114 /* r */ && array[startIndex + 2] === 111 /* o */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 99 /* c */ && array[startIndex + 6] === 116 /* t */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - case 10: - switch (array[startIndex]) { - case 105 /* i */: - switch (array[startIndex + 1]) { - case 110 /* n */: - return (array[startIndex + 2] === 115 /* s */ && array[startIndex + 3] === 116 /* t */ && array[startIndex + 4] === 97 /* a */ && array[startIndex + 5] === 110 /* n */ && array[startIndex + 6] === 99 /* c */ && array[startIndex + 7] === 101 /* e */ && array[startIndex + 8] === 111 /* o */ && array[startIndex + 9] === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */; - case 109 /* m */: - return (array[startIndex + 2] === 112 /* p */ && array[startIndex + 3] === 108 /* l */ && array[startIndex + 4] === 101 /* e */ && array[startIndex + 5] === 109 /* m */ && array[startIndex + 6] === 101 /* e */ && array[startIndex + 7] === 110 /* n */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - - default: - return 11 /* IdentifierName */; - } - - case 11: - return (array[startIndex] === 99 /* c */ && array[startIndex + 1] === 111 /* o */ && array[startIndex + 2] === 110 /* n */ && array[startIndex + 3] === 115 /* s */ && array[startIndex + 4] === 116 /* t */ && array[startIndex + 5] === 114 /* r */ && array[startIndex + 6] === 117 /* u */ && array[startIndex + 7] === 99 /* c */ && array[startIndex + 8] === 116 /* t */ && array[startIndex + 9] === 111 /* o */ && array[startIndex + 10] === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */; - default: - return 11 /* IdentifierName */; - } - }; - return ScannerUtilities; - })(); - TypeScript.ScannerUtilities = ScannerUtilities; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySeparatedSyntaxList = (function () { - function EmptySeparatedSyntaxList() { - } - EmptySeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - EmptySeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isList = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - EmptySeparatedSyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return []; - }; - - EmptySeparatedSyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySeparatedSyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySeparatedSyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySeparatedSyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySeparatedSyntaxList.prototype.width = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - - EmptySeparatedSyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - return EmptySeparatedSyntaxList; - })(); - - Syntax.emptySeparatedList = new EmptySeparatedSyntaxList(); - - var SingletonSeparatedSyntaxList = (function () { - function SingletonSeparatedSyntaxList(item) { - this.item = item; - } - SingletonSeparatedSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - SingletonSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - SingletonSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - - SingletonSeparatedSyntaxList.prototype.childCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return 1; - }; - SingletonSeparatedSyntaxList.prototype.separatorCount = function () { - return 0; - }; - - SingletonSeparatedSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - SingletonSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - return [this.item]; - }; - - SingletonSeparatedSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSeparatedSyntaxList.prototype.separatorAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - SingletonSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSeparatedSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSeparatedSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSeparatedSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSeparatedSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedSeparatedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSeparatedSyntaxList; - })(); - - var NormalSeparatedSyntaxList = (function () { - function NormalSeparatedSyntaxList(elements) { - this._data = 0; - this.elements = elements; - } - NormalSeparatedSyntaxList.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - NormalSeparatedSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isList = function () { - return false; - }; - NormalSeparatedSyntaxList.prototype.isSeparatedList = function () { - return true; - }; - NormalSeparatedSyntaxList.prototype.toJSON = function (key) { - return this.elements; - }; - - NormalSeparatedSyntaxList.prototype.childCount = function () { - return this.elements.length; - }; - NormalSeparatedSyntaxList.prototype.nonSeparatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length + 1, 2); - }; - NormalSeparatedSyntaxList.prototype.separatorCount = function () { - return TypeScript.IntegerUtilities.integerDivide(this.elements.length, 2); - }; - - NormalSeparatedSyntaxList.prototype.toArray = function () { - return this.elements.slice(0); - }; - - NormalSeparatedSyntaxList.prototype.toNonSeparatorArray = function () { - var result = []; - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - result.push(this.nonSeparatorAt(i)); - } - - return result; - }; - - NormalSeparatedSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[index]; - }; - - NormalSeparatedSyntaxList.prototype.nonSeparatorAt = function (index) { - var value = index * 2; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.separatorAt = function (index) { - var value = index * 2 + 1; - if (value < 0 || value >= this.elements.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.elements[value]; - }; - - NormalSeparatedSyntaxList.prototype.firstToken = function () { - var token; - for (var i = 0, n = this.elements.length; i < n; i++) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.firstToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.lastToken = function () { - var token; - for (var i = this.elements.length - 1; i >= 0; i--) { - if (i % 2 === 0) { - var nodeOrToken = this.elements[i]; - token = nodeOrToken.lastToken(); - if (token !== null) { - return token; - } - } else { - token = this.elements[i]; - if (token.width() > 0) { - return token; - } - } - } - - return null; - }; - - NormalSeparatedSyntaxList.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSeparatedSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i).isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSeparatedSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSeparatedSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSeparatedSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSeparatedSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSeparatedSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - fullWidth += childWidth; - - isIncrementallyUnusable = isIncrementallyUnusable || element.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSeparatedSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSeparatedSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedSeparatedList(parent, this, fullStart); - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - - var childWidth = element.fullWidth(); - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSeparatedSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.elements.length; i < n; i++) { - var element = this.elements[i]; - element.collectTextElements(elements); - } - }; - - NormalSeparatedSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.elements); - } else { - array.splice.apply(array, [index, 0].concat(this.elements)); - } - }; - return NormalSeparatedSyntaxList; - })(); - - function separatedList(nodes) { - return separatedListAndValidate(nodes, false); - } - Syntax.separatedList = separatedList; - - function separatedListAndValidate(nodes, validate) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptySeparatedList; - } - - if (validate) { - for (var i = 0; i < nodes.length; i++) { - var item = nodes[i]; - - if (i % 2 === 1) { - } - } - } - - if (nodes.length === 1) { - return new SingletonSeparatedSyntaxList(nodes[0]); - } - - return new NormalSeparatedSyntaxList(nodes); - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SlidingWindow = (function () { - function SlidingWindow(source, window, defaultValue, sourceLength) { - if (typeof sourceLength === "undefined") { sourceLength = -1; } - this.source = source; - this.window = window; - this.defaultValue = defaultValue; - this.sourceLength = sourceLength; - this.windowCount = 0; - this.windowAbsoluteStartIndex = 0; - this.currentRelativeItemIndex = 0; - this._pinCount = 0; - this.firstPinnedAbsoluteIndex = -1; - } - SlidingWindow.prototype.windowAbsoluteEndIndex = function () { - return this.windowAbsoluteStartIndex + this.windowCount; - }; - - SlidingWindow.prototype.addMoreItemsToWindow = function (argument) { - if (this.sourceLength >= 0 && this.absoluteIndex() >= this.sourceLength) { - return false; - } - - if (this.windowCount >= this.window.length) { - this.tryShiftOrGrowWindow(); - } - - var spaceAvailable = this.window.length - this.windowCount; - var amountFetched = this.source.fetchMoreItems(argument, this.windowAbsoluteEndIndex(), this.window, this.windowCount, spaceAvailable); - - this.windowCount += amountFetched; - return amountFetched > 0; - }; - - SlidingWindow.prototype.tryShiftOrGrowWindow = function () { - var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1); - - var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex; - - if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) { - var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex; - - var shiftCount = this.windowCount - shiftStartIndex; - - if (shiftCount > 0) { - TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount); - } - - this.windowAbsoluteStartIndex += shiftStartIndex; - - this.windowCount -= shiftStartIndex; - - this.currentRelativeItemIndex -= shiftStartIndex; - } else { - TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue); - } - }; - - SlidingWindow.prototype.absoluteIndex = function () { - return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.isAtEndOfSource = function () { - return this.absoluteIndex() >= this.sourceLength; - }; - - SlidingWindow.prototype.getAndPinAbsoluteIndex = function () { - var absoluteIndex = this.absoluteIndex(); - var pinCount = this._pinCount++; - if (pinCount === 0) { - this.firstPinnedAbsoluteIndex = absoluteIndex; - } - - return absoluteIndex; - }; - - SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) { - this._pinCount--; - if (this._pinCount === 0) { - this.firstPinnedAbsoluteIndex = -1; - } - }; - - SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) { - var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex; - - this.currentRelativeItemIndex = relativeIndex; - }; - - SlidingWindow.prototype.currentItem = function (argument) { - if (this.currentRelativeItemIndex >= this.windowCount) { - if (!this.addMoreItemsToWindow(argument)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex]; - }; - - SlidingWindow.prototype.peekItemN = function (n) { - while (this.currentRelativeItemIndex + n >= this.windowCount) { - if (!this.addMoreItemsToWindow(null)) { - return this.defaultValue; - } - } - - return this.window[this.currentRelativeItemIndex + n]; - }; - - SlidingWindow.prototype.moveToNextItem = function () { - this.currentRelativeItemIndex++; - }; - - SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () { - this.windowCount = this.currentRelativeItemIndex; - }; - - SlidingWindow.prototype.setAbsoluteIndex = function (absoluteIndex) { - if (this.absoluteIndex() === absoluteIndex) { - return; - } - - if (this._pinCount > 0) { - } - - if (absoluteIndex >= this.windowAbsoluteStartIndex && absoluteIndex < this.windowAbsoluteEndIndex()) { - this.currentRelativeItemIndex = (absoluteIndex - this.windowAbsoluteStartIndex); - } else { - this.windowAbsoluteStartIndex = absoluteIndex; - - this.windowCount = 0; - - this.currentRelativeItemIndex = 0; - } - }; - - SlidingWindow.prototype.pinCount = function () { - return this._pinCount; - }; - return SlidingWindow; - })(); - TypeScript.SlidingWindow = SlidingWindow; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function emptySourceUnit() { - return Syntax.normalModeFactory.sourceUnit(Syntax.emptyList, Syntax.token(10 /* EndOfFileToken */, { text: "" })); - } - Syntax.emptySourceUnit = emptySourceUnit; - - function getStandaloneExpression(positionedToken) { - var token = positionedToken.token(); - if (positionedToken !== null && positionedToken.kind() === 11 /* IdentifierName */) { - var parentPositionedNode = positionedToken.containingNode(); - var parentNode = parentPositionedNode.node(); - - if (parentNode.kind() === 121 /* QualifiedName */ && parentNode.right === token) { - return parentPositionedNode; - } else if (parentNode.kind() === 212 /* MemberAccessExpression */ && parentNode.name === token) { - return parentPositionedNode; - } - } - - return positionedToken; - } - Syntax.getStandaloneExpression = getStandaloneExpression; - - function isInModuleOrTypeContext(positionedToken) { - if (positionedToken !== null) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var parent = positionedNodeOrToken.containingNode(); - - if (parent !== null) { - switch (parent.kind()) { - case 246 /* ModuleNameModuleReference */: - return true; - case 121 /* QualifiedName */: - return true; - default: - return isInTypeOnlyContext(positionedToken); - } - } - } - - return false; - } - Syntax.isInModuleOrTypeContext = isInModuleOrTypeContext; - - function isInTypeOnlyContext(positionedToken) { - var positionedNodeOrToken = Syntax.getStandaloneExpression(positionedToken); - var positionedParent = positionedNodeOrToken.containingNode(); - - var parent = positionedParent.node(); - var nodeOrToken = positionedNodeOrToken.nodeOrToken(); - - if (parent !== null) { - switch (parent.kind()) { - case 124 /* ArrayType */: - return parent.type === nodeOrToken; - case 220 /* CastExpression */: - return parent.type === nodeOrToken; - case 244 /* TypeAnnotation */: - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - case 228 /* TypeArgumentList */: - return true; - } - } - - return false; - } - Syntax.isInTypeOnlyContext = isInTypeOnlyContext; - - function childOffset(parent, child) { - var offset = 0; - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return offset; - } - - if (current !== null) { - offset += current.fullWidth(); - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childOffset = childOffset; - - function childOffsetAt(parent, index) { - var offset = 0; - for (var i = 0; i < index; i++) { - var current = parent.childAt(i); - if (current !== null) { - offset += current.fullWidth(); - } - } - - return offset; - } - Syntax.childOffsetAt = childOffsetAt; - - function childIndex(parent, child) { - for (var i = 0, n = parent.childCount(); i < n; i++) { - var current = parent.childAt(i); - if (current === child) { - return i; - } - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.childIndex = childIndex; - - function nodeStructuralEquals(node1, node2) { - if (node1 === null) { - return node2 === null; - } - - return node1.structuralEquals(node2); - } - Syntax.nodeStructuralEquals = nodeStructuralEquals; - - function nodeOrTokenStructuralEquals(node1, node2) { - if (node1 === node2) { - return true; - } - - if (node1 === null || node2 === null) { - return false; - } - - if (node1.isToken()) { - return node2.isToken() ? tokenStructuralEquals(node1, node2) : false; - } - - return node2.isNode() ? nodeStructuralEquals(node1, node2) : false; - } - Syntax.nodeOrTokenStructuralEquals = nodeOrTokenStructuralEquals; - - function tokenStructuralEquals(token1, token2) { - if (token1 === token2) { - return true; - } - - if (token1 === null || token2 === null) { - return false; - } - - return token1.kind() === token2.kind() && token1.width() === token2.width() && token1.fullWidth() === token2.fullWidth() && token1.text() === token2.text() && Syntax.triviaListStructuralEquals(token1.leadingTrivia(), token2.leadingTrivia()) && Syntax.triviaListStructuralEquals(token1.trailingTrivia(), token2.trailingTrivia()); - } - Syntax.tokenStructuralEquals = tokenStructuralEquals; - - function triviaListStructuralEquals(triviaList1, triviaList2) { - if (triviaList1.count() !== triviaList2.count()) { - return false; - } - - for (var i = 0, n = triviaList1.count(); i < n; i++) { - if (!Syntax.triviaStructuralEquals(triviaList1.syntaxTriviaAt(i), triviaList2.syntaxTriviaAt(i))) { - return false; - } - } - - return true; - } - Syntax.triviaListStructuralEquals = triviaListStructuralEquals; - - function triviaStructuralEquals(trivia1, trivia2) { - return trivia1.kind() === trivia2.kind() && trivia1.fullWidth() === trivia2.fullWidth() && trivia1.fullText() === trivia2.fullText(); - } - Syntax.triviaStructuralEquals = triviaStructuralEquals; - - function listStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var child1 = list1.childAt(i); - var child2 = list2.childAt(i); - - if (!Syntax.nodeOrTokenStructuralEquals(child1, child2)) { - return false; - } - } - - return true; - } - Syntax.listStructuralEquals = listStructuralEquals; - - function separatedListStructuralEquals(list1, list2) { - if (list1.childCount() !== list2.childCount()) { - return false; - } - - for (var i = 0, n = list1.childCount(); i < n; i++) { - var element1 = list1.childAt(i); - var element2 = list2.childAt(i); - if (!Syntax.nodeOrTokenStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - } - Syntax.separatedListStructuralEquals = separatedListStructuralEquals; - - function elementStructuralEquals(element1, element2) { - if (element1 === element2) { - return true; - } - - if (element1 === null || element2 === null) { - return false; - } - - if (element2.kind() !== element2.kind()) { - return false; - } - - if (element1.isToken()) { - return tokenStructuralEquals(element1, element2); - } else if (element1.isNode()) { - return nodeStructuralEquals(element1, element2); - } else if (element1.isList()) { - return listStructuralEquals(element1, element2); - } else if (element1.isSeparatedList()) { - return separatedListStructuralEquals(element1, element2); - } - - throw TypeScript.Errors.invalidOperation(); - } - Syntax.elementStructuralEquals = elementStructuralEquals; - - function identifierName(text, info) { - if (typeof info === "undefined") { info = null; } - return Syntax.identifier(text); - } - Syntax.identifierName = identifierName; - - function trueExpression() { - return Syntax.token(37 /* TrueKeyword */); - } - Syntax.trueExpression = trueExpression; - - function falseExpression() { - return Syntax.token(24 /* FalseKeyword */); - } - Syntax.falseExpression = falseExpression; - - function numericLiteralExpression(text) { - return Syntax.token(13 /* NumericLiteral */, { text: text }); - } - Syntax.numericLiteralExpression = numericLiteralExpression; - - function stringLiteralExpression(text) { - return Syntax.token(14 /* StringLiteral */, { text: text }); - } - Syntax.stringLiteralExpression = stringLiteralExpression; - - function isSuperInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperInvocationExpression = isSuperInvocationExpression; - - function isSuperInvocationExpressionStatement(node) { - return node.kind() === 149 /* ExpressionStatement */ && isSuperInvocationExpression(node.expression); - } - Syntax.isSuperInvocationExpressionStatement = isSuperInvocationExpressionStatement; - - function isSuperMemberAccessExpression(node) { - return node.kind() === 212 /* MemberAccessExpression */ && node.expression.kind() === 50 /* SuperKeyword */; - } - Syntax.isSuperMemberAccessExpression = isSuperMemberAccessExpression; - - function isSuperMemberAccessInvocationExpression(node) { - return node.kind() === 213 /* InvocationExpression */ && isSuperMemberAccessExpression(node.expression); - } - Syntax.isSuperMemberAccessInvocationExpression = isSuperMemberAccessInvocationExpression; - - function assignmentExpression(left, token, right) { - return Syntax.normalModeFactory.binaryExpression(174 /* AssignmentExpression */, left, token, right); - } - Syntax.assignmentExpression = assignmentExpression; - - function nodeHasSkippedOrMissingTokens(node) { - for (var i = 0; i < node.childCount(); i++) { - var child = node.childAt(i); - if (child !== null && child.isToken()) { - var token = child; - - if (token.hasSkippedToken() || (token.width() === 0 && token.kind() !== 10 /* EndOfFileToken */)) { - return true; - } - } - } - return false; - } - Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens; - - function isUnterminatedStringLiteral(token) { - if (token && token.kind() === 14 /* StringLiteral */) { - var text = token.text(); - return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0); - } - - return false; - } - Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral; - - function isUnterminatedMultilineCommentTrivia(trivia) { - if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) { - var text = trivia.fullText(); - return text.length < 4 || text.substring(text.length - 2) !== "*/"; - } - return false; - } - Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia; - - function isEntirelyInsideCommentTrivia(trivia, fullStart, position) { - if (trivia && trivia.isComment() && position > fullStart) { - var end = fullStart + trivia.fullWidth(); - if (position < end) { - return true; - } else if (position === end) { - return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia); - } - } - - return false; - } - Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia; - - function isEntirelyInsideComment(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - var fullStart = positionedToken.fullStart(); - var triviaList = null; - var lastTriviaBeforeToken = null; - - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - if (positionedToken.token().hasLeadingTrivia()) { - triviaList = positionedToken.token().leadingTrivia(); - } else { - positionedToken = positionedToken.previousToken(); - if (positionedToken) { - if (positionedToken && positionedToken.token().hasTrailingTrivia()) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - } - } else { - if (position <= (fullStart + positionedToken.token().leadingTriviaWidth())) { - triviaList = positionedToken.token().leadingTrivia(); - } else if (position >= (fullStart + positionedToken.token().width())) { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - } - - if (triviaList) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - if (position <= fullStart) { - break; - } else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) { - lastTriviaBeforeToken = trivia; - break; - } - - fullStart += trivia.fullWidth(); - } - } - - return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position); - } - Syntax.isEntirelyInsideComment = isEntirelyInsideComment; - - function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) { - var positionedToken = sourceUnit.findToken(position); - - if (positionedToken) { - if (positionedToken.kind() === 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(); - return positionedToken && positionedToken.token().trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken.token()); - } else if (position > positionedToken.start()) { - return (position < positionedToken.end() && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= positionedToken.end() && isUnterminatedStringLiteral(positionedToken.token())); - } - } - - return false; - } - Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral; - - function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullStart; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullStart = positionedToken.fullStart(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullStart = positionedToken.end(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullStart); - } - - fullStart += triviaWidth; - } - } - - return null; - } - - function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) { - var triviaList = null; - var fullEnd; - - if (lookInLeadingTriviaList) { - triviaList = positionedToken.token().leadingTrivia(); - fullEnd = positionedToken.fullStart() + triviaList.fullWidth(); - } else { - triviaList = positionedToken.token().trailingTrivia(); - fullEnd = positionedToken.fullEnd(); - } - - if (triviaList && triviaList.hasSkippedToken()) { - for (var i = triviaList.count() - 1; i >= 0; i--) { - var trivia = triviaList.syntaxTriviaAt(i); - var triviaWidth = trivia.fullWidth(); - - if (trivia.isSkippedToken() && position >= fullEnd) { - return new TypeScript.PositionedSkippedToken(positionedToken, trivia.skippedToken(), fullEnd - triviaWidth); - } - - fullEnd -= triviaWidth; - } - } - - return null; - } - - function findSkippedTokenInLeadingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, true); - } - Syntax.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList; - - function findSkippedTokenInTrailingTriviaList(positionedToken, position) { - return findSkippedTokenInTriviaList(positionedToken, position, false); - } - Syntax.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList; - - function findSkippedTokenInPositionedToken(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken; - - function findSkippedTokenOnLeft(positionedToken, position) { - var positionInLeadingTriviaList = (position < positionedToken.start()); - return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList); - } - Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft; - - function getAncestorOfKind(positionedToken, kind) { - while (positionedToken && positionedToken.parent()) { - if (positionedToken.parent().kind() === kind) { - return positionedToken.parent(); - } - - positionedToken = positionedToken.parent(); - } - - return null; - } - Syntax.getAncestorOfKind = getAncestorOfKind; - - function hasAncestorOfKind(positionedToken, kind) { - return Syntax.getAncestorOfKind(positionedToken, kind) !== null; - } - Syntax.hasAncestorOfKind = hasAncestorOfKind; - - function isIntegerLiteral(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.isToken() && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - Syntax.isIntegerLiteral = isIntegerLiteral; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var NormalModeFactory = (function () { - function NormalModeFactory() { - } - NormalModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, false); - }; - NormalModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, false); - }; - NormalModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, false); - }; - NormalModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - NormalModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, false); - }; - NormalModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, false); - }; - NormalModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, false); - }; - NormalModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, false); - }; - NormalModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, false); - }; - NormalModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, false); - }; - NormalModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, false); - }; - NormalModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(false); - }; - NormalModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, false); - }; - NormalModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, false); - }; - NormalModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, false); - }; - NormalModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, false); - }; - NormalModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, false); - }; - NormalModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, false); - }; - NormalModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, false); - }; - NormalModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, false); - }; - NormalModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, false); - }; - NormalModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, false); - }; - NormalModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, false); - }; - NormalModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, false); - }; - NormalModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, false); - }; - NormalModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, false); - }; - NormalModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, false); - }; - NormalModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, false); - }; - NormalModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, false); - }; - NormalModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, false); - }; - NormalModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, false); - }; - NormalModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, false); - }; - NormalModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, false); - }; - NormalModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, false); - }; - NormalModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, false); - }; - NormalModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, false); - }; - NormalModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, false); - }; - NormalModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, false); - }; - NormalModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, false); - }; - NormalModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, false); - }; - NormalModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, false); - }; - NormalModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, false); - }; - NormalModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, false); - }; - NormalModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, false); - }; - NormalModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, false); - }; - NormalModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, false); - }; - NormalModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, false); - }; - NormalModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, false); - }; - NormalModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, false); - }; - NormalModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, false); - }; - NormalModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, false); - }; - NormalModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, false); - }; - NormalModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, false); - }; - NormalModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, false); - }; - NormalModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, false); - }; - NormalModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, false); - }; - NormalModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, false); - }; - NormalModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, false); - }; - NormalModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, false); - }; - NormalModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, false); - }; - NormalModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, false); - }; - NormalModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, false); - }; - NormalModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, false); - }; - NormalModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, false); - }; - NormalModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, false); - }; - NormalModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, false); - }; - NormalModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, false); - }; - NormalModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, false); - }; - NormalModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, false); - }; - NormalModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, false); - }; - NormalModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, false); - }; - return NormalModeFactory; - })(); - Syntax.NormalModeFactory = NormalModeFactory; - - var StrictModeFactory = (function () { - function StrictModeFactory() { - } - StrictModeFactory.prototype.sourceUnit = function (moduleElements, endOfFileToken) { - return new TypeScript.SourceUnitSyntax(moduleElements, endOfFileToken, true); - }; - StrictModeFactory.prototype.externalModuleReference = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - return new TypeScript.ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, true); - }; - StrictModeFactory.prototype.moduleNameModuleReference = function (moduleName) { - return new TypeScript.ModuleNameModuleReferenceSyntax(moduleName, true); - }; - StrictModeFactory.prototype.importDeclaration = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new TypeScript.ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, true); - }; - StrictModeFactory.prototype.exportAssignment = function (exportKeyword, equalsToken, identifier, semicolonToken) { - return new TypeScript.ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.classDeclaration = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - return new TypeScript.ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.interfaceDeclaration = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - return new TypeScript.InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, true); - }; - StrictModeFactory.prototype.heritageClause = function (kind, extendsOrImplementsKeyword, typeNames) { - return new TypeScript.HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, true); - }; - StrictModeFactory.prototype.moduleDeclaration = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - return new TypeScript.ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.functionDeclaration = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - return new TypeScript.FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.variableStatement = function (modifiers, variableDeclaration, semicolonToken) { - return new TypeScript.VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, true); - }; - StrictModeFactory.prototype.variableDeclaration = function (varKeyword, variableDeclarators) { - return new TypeScript.VariableDeclarationSyntax(varKeyword, variableDeclarators, true); - }; - StrictModeFactory.prototype.variableDeclarator = function (propertyName, typeAnnotation, equalsValueClause) { - return new TypeScript.VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.equalsValueClause = function (equalsToken, value) { - return new TypeScript.EqualsValueClauseSyntax(equalsToken, value, true); - }; - StrictModeFactory.prototype.prefixUnaryExpression = function (kind, operatorToken, operand) { - return new TypeScript.PrefixUnaryExpressionSyntax(kind, operatorToken, operand, true); - }; - StrictModeFactory.prototype.arrayLiteralExpression = function (openBracketToken, expressions, closeBracketToken) { - return new TypeScript.ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, true); - }; - StrictModeFactory.prototype.omittedExpression = function () { - return new TypeScript.OmittedExpressionSyntax(true); - }; - StrictModeFactory.prototype.parenthesizedExpression = function (openParenToken, expression, closeParenToken) { - return new TypeScript.ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, true); - }; - StrictModeFactory.prototype.simpleArrowFunctionExpression = function (identifier, equalsGreaterThanToken, block, expression) { - return new TypeScript.SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.parenthesizedArrowFunctionExpression = function (callSignature, equalsGreaterThanToken, block, expression) { - return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, true); - }; - StrictModeFactory.prototype.qualifiedName = function (left, dotToken, right) { - return new TypeScript.QualifiedNameSyntax(left, dotToken, right, true); - }; - StrictModeFactory.prototype.typeArgumentList = function (lessThanToken, typeArguments, greaterThanToken) { - return new TypeScript.TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, true); - }; - StrictModeFactory.prototype.constructorType = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.functionType = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - return new TypeScript.FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, true); - }; - StrictModeFactory.prototype.objectType = function (openBraceToken, typeMembers, closeBraceToken) { - return new TypeScript.ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, true); - }; - StrictModeFactory.prototype.arrayType = function (type, openBracketToken, closeBracketToken) { - return new TypeScript.ArrayTypeSyntax(type, openBracketToken, closeBracketToken, true); - }; - StrictModeFactory.prototype.genericType = function (name, typeArgumentList) { - return new TypeScript.GenericTypeSyntax(name, typeArgumentList, true); - }; - StrictModeFactory.prototype.typeQuery = function (typeOfKeyword, name) { - return new TypeScript.TypeQuerySyntax(typeOfKeyword, name, true); - }; - StrictModeFactory.prototype.typeAnnotation = function (colonToken, type) { - return new TypeScript.TypeAnnotationSyntax(colonToken, type, true); - }; - StrictModeFactory.prototype.block = function (openBraceToken, statements, closeBraceToken) { - return new TypeScript.BlockSyntax(openBraceToken, statements, closeBraceToken, true); - }; - StrictModeFactory.prototype.parameter = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - return new TypeScript.ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, true); - }; - StrictModeFactory.prototype.memberAccessExpression = function (expression, dotToken, name) { - return new TypeScript.MemberAccessExpressionSyntax(expression, dotToken, name, true); - }; - StrictModeFactory.prototype.postfixUnaryExpression = function (kind, operand, operatorToken) { - return new TypeScript.PostfixUnaryExpressionSyntax(kind, operand, operatorToken, true); - }; - StrictModeFactory.prototype.elementAccessExpression = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - return new TypeScript.ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, true); - }; - StrictModeFactory.prototype.invocationExpression = function (expression, argumentList) { - return new TypeScript.InvocationExpressionSyntax(expression, argumentList, true); - }; - StrictModeFactory.prototype.argumentList = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - return new TypeScript.ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, true); - }; - StrictModeFactory.prototype.binaryExpression = function (kind, left, operatorToken, right) { - return new TypeScript.BinaryExpressionSyntax(kind, left, operatorToken, right, true); - }; - StrictModeFactory.prototype.conditionalExpression = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - return new TypeScript.ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, true); - }; - StrictModeFactory.prototype.constructSignature = function (newKeyword, callSignature) { - return new TypeScript.ConstructSignatureSyntax(newKeyword, callSignature, true); - }; - StrictModeFactory.prototype.methodSignature = function (propertyName, questionToken, callSignature) { - return new TypeScript.MethodSignatureSyntax(propertyName, questionToken, callSignature, true); - }; - StrictModeFactory.prototype.indexSignature = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - return new TypeScript.IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.propertySignature = function (propertyName, questionToken, typeAnnotation) { - return new TypeScript.PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, true); - }; - StrictModeFactory.prototype.callSignature = function (typeParameterList, parameterList, typeAnnotation) { - return new TypeScript.CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, true); - }; - StrictModeFactory.prototype.parameterList = function (openParenToken, parameters, closeParenToken) { - return new TypeScript.ParameterListSyntax(openParenToken, parameters, closeParenToken, true); - }; - StrictModeFactory.prototype.typeParameterList = function (lessThanToken, typeParameters, greaterThanToken) { - return new TypeScript.TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, true); - }; - StrictModeFactory.prototype.typeParameter = function (identifier, constraint) { - return new TypeScript.TypeParameterSyntax(identifier, constraint, true); - }; - StrictModeFactory.prototype.constraint = function (extendsKeyword, type) { - return new TypeScript.ConstraintSyntax(extendsKeyword, type, true); - }; - StrictModeFactory.prototype.elseClause = function (elseKeyword, statement) { - return new TypeScript.ElseClauseSyntax(elseKeyword, statement, true); - }; - StrictModeFactory.prototype.ifStatement = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - return new TypeScript.IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, true); - }; - StrictModeFactory.prototype.expressionStatement = function (expression, semicolonToken) { - return new TypeScript.ExpressionStatementSyntax(expression, semicolonToken, true); - }; - StrictModeFactory.prototype.constructorDeclaration = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - return new TypeScript.ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.memberFunctionDeclaration = function (modifiers, propertyName, callSignature, block, semicolonToken) { - return new TypeScript.MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, true); - }; - StrictModeFactory.prototype.getAccessor = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - return new TypeScript.GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, true); - }; - StrictModeFactory.prototype.setAccessor = function (modifiers, setKeyword, propertyName, parameterList, block) { - return new TypeScript.SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, true); - }; - StrictModeFactory.prototype.memberVariableDeclaration = function (modifiers, variableDeclarator, semicolonToken) { - return new TypeScript.MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, true); - }; - StrictModeFactory.prototype.indexMemberDeclaration = function (modifiers, indexSignature, semicolonToken) { - return new TypeScript.IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, true); - }; - StrictModeFactory.prototype.throwStatement = function (throwKeyword, expression, semicolonToken) { - return new TypeScript.ThrowStatementSyntax(throwKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.returnStatement = function (returnKeyword, expression, semicolonToken) { - return new TypeScript.ReturnStatementSyntax(returnKeyword, expression, semicolonToken, true); - }; - StrictModeFactory.prototype.objectCreationExpression = function (newKeyword, expression, argumentList) { - return new TypeScript.ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, true); - }; - StrictModeFactory.prototype.switchStatement = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - return new TypeScript.SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, true); - }; - StrictModeFactory.prototype.caseSwitchClause = function (caseKeyword, expression, colonToken, statements) { - return new TypeScript.CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, true); - }; - StrictModeFactory.prototype.defaultSwitchClause = function (defaultKeyword, colonToken, statements) { - return new TypeScript.DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, true); - }; - StrictModeFactory.prototype.breakStatement = function (breakKeyword, identifier, semicolonToken) { - return new TypeScript.BreakStatementSyntax(breakKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.continueStatement = function (continueKeyword, identifier, semicolonToken) { - return new TypeScript.ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, true); - }; - StrictModeFactory.prototype.forStatement = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - return new TypeScript.ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.forInStatement = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - return new TypeScript.ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.whileStatement = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.withStatement = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - return new TypeScript.WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, true); - }; - StrictModeFactory.prototype.enumDeclaration = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - return new TypeScript.EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, true); - }; - StrictModeFactory.prototype.enumElement = function (propertyName, equalsValueClause) { - return new TypeScript.EnumElementSyntax(propertyName, equalsValueClause, true); - }; - StrictModeFactory.prototype.castExpression = function (lessThanToken, type, greaterThanToken, expression) { - return new TypeScript.CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, true); - }; - StrictModeFactory.prototype.objectLiteralExpression = function (openBraceToken, propertyAssignments, closeBraceToken) { - return new TypeScript.ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, true); - }; - StrictModeFactory.prototype.simplePropertyAssignment = function (propertyName, colonToken, expression) { - return new TypeScript.SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, true); - }; - StrictModeFactory.prototype.functionPropertyAssignment = function (propertyName, callSignature, block) { - return new TypeScript.FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, true); - }; - StrictModeFactory.prototype.functionExpression = function (functionKeyword, identifier, callSignature, block) { - return new TypeScript.FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, true); - }; - StrictModeFactory.prototype.emptyStatement = function (semicolonToken) { - return new TypeScript.EmptyStatementSyntax(semicolonToken, true); - }; - StrictModeFactory.prototype.tryStatement = function (tryKeyword, block, catchClause, finallyClause) { - return new TypeScript.TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, true); - }; - StrictModeFactory.prototype.catchClause = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - return new TypeScript.CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, true); - }; - StrictModeFactory.prototype.finallyClause = function (finallyKeyword, block) { - return new TypeScript.FinallyClauseSyntax(finallyKeyword, block, true); - }; - StrictModeFactory.prototype.labeledStatement = function (identifier, colonToken, statement) { - return new TypeScript.LabeledStatementSyntax(identifier, colonToken, statement, true); - }; - StrictModeFactory.prototype.doStatement = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - return new TypeScript.DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, true); - }; - StrictModeFactory.prototype.typeOfExpression = function (typeOfKeyword, expression) { - return new TypeScript.TypeOfExpressionSyntax(typeOfKeyword, expression, true); - }; - StrictModeFactory.prototype.deleteExpression = function (deleteKeyword, expression) { - return new TypeScript.DeleteExpressionSyntax(deleteKeyword, expression, true); - }; - StrictModeFactory.prototype.voidExpression = function (voidKeyword, expression) { - return new TypeScript.VoidExpressionSyntax(voidKeyword, expression, true); - }; - StrictModeFactory.prototype.debuggerStatement = function (debuggerKeyword, semicolonToken) { - return new TypeScript.DebuggerStatementSyntax(debuggerKeyword, semicolonToken, true); - }; - return StrictModeFactory; - })(); - Syntax.StrictModeFactory = StrictModeFactory; - - Syntax.normalModeFactory = new NormalModeFactory(); - Syntax.strictModeFactory = new StrictModeFactory(); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (SyntaxFacts) { - function isDirectivePrologueElement(node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - var expression = expressionStatement.expression; - - if (expression.kind() === 14 /* StringLiteral */) { - return true; - } - } - - return false; - } - SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement; - - function isUseStrictDirective(node) { - var expressionStatement = node; - var stringLiteral = expressionStatement.expression; - - var text = stringLiteral.text(); - return text === '"use strict"' || text === "'use strict'"; - } - SyntaxFacts.isUseStrictDirective = isUseStrictDirective; - - function isIdentifierNameOrAnyKeyword(token) { - var tokenKind = token.tokenKind; - return tokenKind === 11 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind); - } - SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword; - })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); - var SyntaxFacts = TypeScript.SyntaxFacts; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var EmptySyntaxList = (function () { - function EmptySyntaxList() { - } - EmptySyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - EmptySyntaxList.prototype.isNode = function () { - return false; - }; - EmptySyntaxList.prototype.isToken = function () { - return false; - }; - EmptySyntaxList.prototype.isList = function () { - return true; - }; - EmptySyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - EmptySyntaxList.prototype.toJSON = function (key) { - return []; - }; - - EmptySyntaxList.prototype.childCount = function () { - return 0; - }; - - EmptySyntaxList.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptySyntaxList.prototype.toArray = function () { - return []; - }; - - EmptySyntaxList.prototype.collectTextElements = function (elements) { - }; - - EmptySyntaxList.prototype.firstToken = function () { - return null; - }; - - EmptySyntaxList.prototype.lastToken = function () { - return null; - }; - - EmptySyntaxList.prototype.fullWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.width = function () { - return 0; - }; - - EmptySyntaxList.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - EmptySyntaxList.prototype.leadingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.trailingTriviaWidth = function () { - return 0; - }; - - EmptySyntaxList.prototype.fullText = function () { - return ""; - }; - - EmptySyntaxList.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptySyntaxList.prototype.isIncrementallyUnusable = function () { - return false; - }; - - EmptySyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - throw TypeScript.Errors.invalidOperation(); - }; - - EmptySyntaxList.prototype.insertChildrenInto = function (array, index) { - }; - return EmptySyntaxList; - })(); - Syntax.EmptySyntaxList = EmptySyntaxList; - - Syntax.emptyList = new EmptySyntaxList(); - - var SingletonSyntaxList = (function () { - function SingletonSyntaxList(item) { - this.item = item; - } - SingletonSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - SingletonSyntaxList.prototype.isToken = function () { - return false; - }; - SingletonSyntaxList.prototype.isNode = function () { - return false; - }; - SingletonSyntaxList.prototype.isList = function () { - return true; - }; - SingletonSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - SingletonSyntaxList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxList.prototype.childCount = function () { - return 1; - }; - - SingletonSyntaxList.prototype.childAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxList.prototype.firstToken = function () { - return this.item.firstToken(); - }; - - SingletonSyntaxList.prototype.lastToken = function () { - return this.item.lastToken(); - }; - - SingletonSyntaxList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxList.prototype.width = function () { - return this.item.width(); - }; - - SingletonSyntaxList.prototype.leadingTrivia = function () { - return this.item.leadingTrivia(); - }; - - SingletonSyntaxList.prototype.trailingTrivia = function () { - return this.item.trailingTrivia(); - }; - - SingletonSyntaxList.prototype.leadingTriviaWidth = function () { - return this.item.leadingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.trailingTriviaWidth = function () { - return this.item.trailingTriviaWidth(); - }; - - SingletonSyntaxList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxList.prototype.isTypeScriptSpecific = function () { - return this.item.isTypeScriptSpecific(); - }; - - SingletonSyntaxList.prototype.isIncrementallyUnusable = function () { - return this.item.isIncrementallyUnusable(); - }; - - SingletonSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - return this.item.findTokenInternal(new TypeScript.PositionedList(parent, this, fullStart), position, fullStart); - }; - - SingletonSyntaxList.prototype.insertChildrenInto = function (array, index) { - array.splice(index, 0, this.item); - }; - return SingletonSyntaxList; - })(); - - var NormalSyntaxList = (function () { - function NormalSyntaxList(nodeOrTokens) { - this._data = 0; - this.nodeOrTokens = nodeOrTokens; - } - NormalSyntaxList.prototype.kind = function () { - return 1 /* List */; - }; - - NormalSyntaxList.prototype.isNode = function () { - return false; - }; - NormalSyntaxList.prototype.isToken = function () { - return false; - }; - NormalSyntaxList.prototype.isList = function () { - return true; - }; - NormalSyntaxList.prototype.isSeparatedList = function () { - return false; - }; - - NormalSyntaxList.prototype.toJSON = function (key) { - return this.nodeOrTokens; - }; - - NormalSyntaxList.prototype.childCount = function () { - return this.nodeOrTokens.length; - }; - - NormalSyntaxList.prototype.childAt = function (index) { - if (index < 0 || index >= this.nodeOrTokens.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.nodeOrTokens[index]; - }; - - NormalSyntaxList.prototype.toArray = function () { - return this.nodeOrTokens.slice(0); - }; - - NormalSyntaxList.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var element = this.nodeOrTokens[i]; - element.collectTextElements(elements); - } - }; - - NormalSyntaxList.prototype.firstToken = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var token = this.nodeOrTokens[i].firstToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.lastToken = function () { - for (var i = this.nodeOrTokens.length - 1; i >= 0; i--) { - var token = this.nodeOrTokens[i].lastToken(); - if (token !== null) { - return token; - } - } - - return null; - }; - - NormalSyntaxList.prototype.fullText = function () { - var elements = new Array(); - this.collectTextElements(elements); - return elements.join(""); - }; - - NormalSyntaxList.prototype.isTypeScriptSpecific = function () { - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - if (this.nodeOrTokens[i].isTypeScriptSpecific()) { - return true; - } - } - - return false; - }; - - NormalSyntaxList.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - NormalSyntaxList.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - NormalSyntaxList.prototype.width = function () { - var fullWidth = this.fullWidth(); - return fullWidth - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.leadingTrivia = function () { - return this.firstToken().leadingTrivia(); - }; - - NormalSyntaxList.prototype.trailingTrivia = function () { - return this.lastToken().trailingTrivia(); - }; - - NormalSyntaxList.prototype.leadingTriviaWidth = function () { - return this.firstToken().leadingTriviaWidth(); - }; - - NormalSyntaxList.prototype.trailingTriviaWidth = function () { - return this.lastToken().trailingTriviaWidth(); - }; - - NormalSyntaxList.prototype.computeData = function () { - var fullWidth = 0; - var isIncrementallyUnusable = false; - - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var node = this.nodeOrTokens[i]; - fullWidth += node.fullWidth(); - isIncrementallyUnusable = isIncrementallyUnusable || node.isIncrementallyUnusable(); - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - NormalSyntaxList.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data = this.computeData(); - } - - return this._data; - }; - - NormalSyntaxList.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedList(parent, this, fullStart); - for (var i = 0, n = this.nodeOrTokens.length; i < n; i++) { - var nodeOrToken = this.nodeOrTokens[i]; - - var childWidth = nodeOrToken.fullWidth(); - if (position < childWidth) { - return nodeOrToken.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - NormalSyntaxList.prototype.insertChildrenInto = function (array, index) { - if (index === 0) { - array.unshift.apply(array, this.nodeOrTokens); - } else { - array.splice.apply(array, [index, 0].concat(this.nodeOrTokens)); - } - }; - return NormalSyntaxList; - })(); - - function list(nodes) { - if (nodes === undefined || nodes === null || nodes.length === 0) { - return Syntax.emptyList; - } - - if (nodes.length === 1) { - var item = nodes[0]; - return new SingletonSyntaxList(item); - } - - return new NormalSyntaxList(nodes); - } - Syntax.list = list; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNode = (function () { - function SyntaxNode(parsedInStrictMode) { - this._data = parsedInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0; - } - SyntaxNode.prototype.isNode = function () { - return true; - }; - SyntaxNode.prototype.isToken = function () { - return false; - }; - SyntaxNode.prototype.isList = function () { - return false; - }; - SyntaxNode.prototype.isSeparatedList = function () { - return false; - }; - - SyntaxNode.prototype.kind = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childCount = function () { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.childAt = function (slot) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.firstToken = function () { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.firstToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.lastToken = function () { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.fullWidth() > 0 || element.kind() === 10 /* EndOfFileToken */) { - return element.lastToken(); - } - } - } - - return null; - }; - - SyntaxNode.prototype.insertChildrenInto = function (array, index) { - for (var i = this.childCount() - 1; i >= 0; i--) { - var element = this.childAt(i); - - if (element !== null) { - if (element.isNode() || element.isToken()) { - array.splice(index, 0, element); - } else if (element.isList()) { - element.insertChildrenInto(array, index); - } else if (element.isSeparatedList()) { - element.insertChildrenInto(array, index); - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - } - }; - - SyntaxNode.prototype.leadingTrivia = function () { - var firstToken = this.firstToken(); - return firstToken ? firstToken.leadingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.trailingTrivia = function () { - var lastToken = this.lastToken(); - return lastToken ? lastToken.trailingTrivia() : TypeScript.Syntax.emptyTriviaList; - }; - - SyntaxNode.prototype.toJSON = function (key) { - var result = { - kind: TypeScript.SyntaxKind[this.kind()], - fullWidth: this.fullWidth() - }; - - if (this.isIncrementallyUnusable()) { - result.isIncrementallyUnusable = true; - } - - if (this.parsedInStrictMode()) { - result.parsedInStrictMode = true; - } - - var thisAsIndexable = this; - for (var i = 0, n = this.childCount(); i < n; i++) { - var value = this.childAt(i); - - if (value) { - for (var name in this) { - if (value === thisAsIndexable[name]) { - result[name] = value; - break; - } - } - } - } - - return result; - }; - - SyntaxNode.prototype.accept = function (visitor) { - throw TypeScript.Errors.abstract(); - }; - - SyntaxNode.prototype.fullText = function () { - var elements = []; - this.collectTextElements(elements); - return elements.join(""); - }; - - SyntaxNode.prototype.collectTextElements = function (elements) { - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - element.collectTextElements(elements); - } - } - }; - - SyntaxNode.prototype.replaceToken = function (token1, token2) { - if (token1 === token2) { - return this; - } - - return this.accept(new TypeScript.SyntaxTokenReplacer(token1, token2)); - }; - - SyntaxNode.prototype.withLeadingTrivia = function (trivia) { - return this.replaceToken(this.firstToken(), this.firstToken().withLeadingTrivia(trivia)); - }; - - SyntaxNode.prototype.withTrailingTrivia = function (trivia) { - return this.replaceToken(this.lastToken(), this.lastToken().withTrailingTrivia(trivia)); - }; - - SyntaxNode.prototype.hasLeadingTrivia = function () { - return this.lastToken().hasLeadingTrivia(); - }; - - SyntaxNode.prototype.hasTrailingTrivia = function () { - return this.lastToken().hasTrailingTrivia(); - }; - - SyntaxNode.prototype.isTypeScriptSpecific = function () { - return false; - }; - - SyntaxNode.prototype.isIncrementallyUnusable = function () { - return (this.data() & 2 /* NodeIncrementallyUnusableMask */) !== 0; - }; - - SyntaxNode.prototype.parsedInStrictMode = function () { - return (this.data() & 4 /* NodeParsedInStrictModeMask */) !== 0; - }; - - SyntaxNode.prototype.fullWidth = function () { - return this.data() >>> 3 /* NodeFullWidthShift */; - }; - - SyntaxNode.prototype.computeData = function () { - var slotCount = this.childCount(); - - var fullWidth = 0; - var childWidth = 0; - - var isIncrementallyUnusable = ((this._data & 2 /* NodeIncrementallyUnusableMask */) !== 0) || slotCount === 0; - - for (var i = 0, n = slotCount; i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - childWidth = element.fullWidth(); - fullWidth += childWidth; - - if (!isIncrementallyUnusable) { - isIncrementallyUnusable = element.isIncrementallyUnusable(); - } - } - } - - return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; - }; - - SyntaxNode.prototype.data = function () { - if ((this._data & 1 /* NodeDataComputed */) === 0) { - this._data |= this.computeData(); - } - - return this._data; - }; - - SyntaxNode.prototype.findToken = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var endOfFileToken = this.tryGetEndOfFileAt(position); - if (endOfFileToken !== null) { - return endOfFileToken; - } - - if (position < 0 || position >= this.fullWidth()) { - throw TypeScript.Errors.argumentOutOfRange("position"); - } - - var positionedToken = this.findTokenInternal(null, position, 0); - - if (includeSkippedTokens) { - return TypeScript.Syntax.findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken; - } - - return positionedToken; - }; - - SyntaxNode.prototype.tryGetEndOfFileAt = function (position) { - if (this.kind() === 120 /* SourceUnit */ && position === this.fullWidth()) { - var sourceUnit = this; - return new TypeScript.PositionedToken(new TypeScript.PositionedNode(null, sourceUnit, 0), sourceUnit.endOfFileToken, sourceUnit.moduleElements.fullWidth()); - } - - return null; - }; - - SyntaxNode.prototype.findTokenInternal = function (parent, position, fullStart) { - parent = new TypeScript.PositionedNode(parent, this, fullStart); - for (var i = 0, n = this.childCount(); i < n; i++) { - var element = this.childAt(i); - - if (element !== null) { - var childWidth = element.fullWidth(); - - if (position < childWidth) { - return element.findTokenInternal(parent, position, fullStart); - } - - position -= childWidth; - fullStart += childWidth; - } - } - - throw TypeScript.Errors.invalidOperation(); - }; - - SyntaxNode.prototype.findTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - var start = positionedToken.start(); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (position > start) { - return positionedToken; - } - - if (positionedToken.fullStart() === 0) { - return null; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.findCompleteTokenOnLeft = function (position, includeSkippedTokens) { - if (typeof includeSkippedTokens === "undefined") { includeSkippedTokens = false; } - var positionedToken = this.findToken(position, false); - - if (includeSkippedTokens) { - positionedToken = TypeScript.Syntax.findSkippedTokenOnLeft(positionedToken, position) || positionedToken; - } - - if (positionedToken.token().width() > 0 && position >= positionedToken.end()) { - return positionedToken; - } - - return positionedToken.previousToken(includeSkippedTokens); - }; - - SyntaxNode.prototype.isModuleElement = function () { - return false; - }; - - SyntaxNode.prototype.isClassElement = function () { - return false; - }; - - SyntaxNode.prototype.isTypeMember = function () { - return false; - }; - - SyntaxNode.prototype.isStatement = function () { - return false; - }; - - SyntaxNode.prototype.isExpression = function () { - return false; - }; - - SyntaxNode.prototype.isSwitchClause = function () { - return false; - }; - - SyntaxNode.prototype.structuralEquals = function (node) { - if (this === node) { - return true; - } - if (node === null) { - return false; - } - if (this.kind() !== node.kind()) { - return false; - } - - for (var i = 0, n = this.childCount(); i < n; i++) { - var element1 = this.childAt(i); - var element2 = node.childAt(i); - - if (!TypeScript.Syntax.elementStructuralEquals(element1, element2)) { - return false; - } - } - - return true; - }; - - SyntaxNode.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - SyntaxNode.prototype.leadingTriviaWidth = function () { - var firstToken = this.firstToken(); - return firstToken === null ? 0 : firstToken.leadingTriviaWidth(); - }; - - SyntaxNode.prototype.trailingTriviaWidth = function () { - var lastToken = this.lastToken(); - return lastToken === null ? 0 : lastToken.trailingTriviaWidth(); - }; - return SyntaxNode; - })(); - TypeScript.SyntaxNode = SyntaxNode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceUnitSyntax = (function (_super) { - __extends(SourceUnitSyntax, _super); - function SourceUnitSyntax(moduleElements, endOfFileToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleElements = moduleElements; - this.endOfFileToken = endOfFileToken; - } - SourceUnitSyntax.prototype.accept = function (visitor) { - return visitor.visitSourceUnit(this); - }; - - SourceUnitSyntax.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnitSyntax.prototype.childCount = function () { - return 2; - }; - - SourceUnitSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleElements; - case 1: - return this.endOfFileToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SourceUnitSyntax.prototype.update = function (moduleElements, endOfFileToken) { - if (this.moduleElements === moduleElements && this.endOfFileToken === endOfFileToken) { - return this; - } - - return new SourceUnitSyntax(moduleElements, endOfFileToken, this.parsedInStrictMode()); - }; - - SourceUnitSyntax.create = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.create1 = function (endOfFileToken) { - return new SourceUnitSyntax(TypeScript.Syntax.emptyList, endOfFileToken, false); - }; - - SourceUnitSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SourceUnitSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(moduleElements, this.endOfFileToken); - }; - - SourceUnitSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - SourceUnitSyntax.prototype.withEndOfFileToken = function (endOfFileToken) { - return this.update(this.moduleElements, endOfFileToken); - }; - - SourceUnitSyntax.prototype.isTypeScriptSpecific = function () { - if (this.moduleElements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SourceUnitSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SourceUnitSyntax = SourceUnitSyntax; - - var ExternalModuleReferenceSyntax = (function (_super) { - __extends(ExternalModuleReferenceSyntax, _super); - function ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.requireKeyword = requireKeyword; - this.openParenToken = openParenToken; - this.stringLiteral = stringLiteral; - this.closeParenToken = closeParenToken; - } - ExternalModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitExternalModuleReference(this); - }; - - ExternalModuleReferenceSyntax.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - - ExternalModuleReferenceSyntax.prototype.childCount = function () { - return 4; - }; - - ExternalModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.requireKeyword; - case 1: - return this.openParenToken; - case 2: - return this.stringLiteral; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExternalModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ExternalModuleReferenceSyntax.prototype.update = function (requireKeyword, openParenToken, stringLiteral, closeParenToken) { - if (this.requireKeyword === requireKeyword && this.openParenToken === openParenToken && this.stringLiteral === stringLiteral && this.closeParenToken === closeParenToken) { - return this; - } - - return new ExternalModuleReferenceSyntax(requireKeyword, openParenToken, stringLiteral, closeParenToken, this.parsedInStrictMode()); - }; - - ExternalModuleReferenceSyntax.create1 = function (stringLiteral) { - return new ExternalModuleReferenceSyntax(TypeScript.Syntax.token(66 /* RequireKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), stringLiteral, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ExternalModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExternalModuleReferenceSyntax.prototype.withRequireKeyword = function (requireKeyword) { - return this.update(requireKeyword, this.openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.requireKeyword, openParenToken, this.stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.requireKeyword, this.openParenToken, stringLiteral, this.closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.requireKeyword, this.openParenToken, this.stringLiteral, closeParenToken); - }; - - ExternalModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExternalModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax; - - var ModuleNameModuleReferenceSyntax = (function (_super) { - __extends(ModuleNameModuleReferenceSyntax, _super); - function ModuleNameModuleReferenceSyntax(moduleName, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.moduleName = moduleName; - } - ModuleNameModuleReferenceSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleNameModuleReference(this); - }; - - ModuleNameModuleReferenceSyntax.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - - ModuleNameModuleReferenceSyntax.prototype.childCount = function () { - return 1; - }; - - ModuleNameModuleReferenceSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.moduleName; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleNameModuleReferenceSyntax.prototype.isModuleReference = function () { - return true; - }; - - ModuleNameModuleReferenceSyntax.prototype.update = function (moduleName) { - if (this.moduleName === moduleName) { - return this; - } - - return new ModuleNameModuleReferenceSyntax(moduleName, this.parsedInStrictMode()); - }; - - ModuleNameModuleReferenceSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleNameModuleReferenceSyntax.prototype.withModuleName = function (moduleName) { - return this.update(moduleName); - }; - - ModuleNameModuleReferenceSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleNameModuleReferenceSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax; - - var ImportDeclarationSyntax = (function (_super) { - __extends(ImportDeclarationSyntax, _super); - function ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.importKeyword = importKeyword; - this.identifier = identifier; - this.equalsToken = equalsToken; - this.moduleReference = moduleReference; - this.semicolonToken = semicolonToken; - } - ImportDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitImportDeclaration(this); - }; - - ImportDeclarationSyntax.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - ImportDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.importKeyword; - case 2: - return this.identifier; - case 3: - return this.equalsToken; - case 4: - return this.moduleReference; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ImportDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ImportDeclarationSyntax.prototype.update = function (modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - if (this.modifiers === modifiers && this.importKeyword === importKeyword && this.identifier === identifier && this.equalsToken === equalsToken && this.moduleReference === moduleReference && this.semicolonToken === semicolonToken) { - return this; - } - - return new ImportDeclarationSyntax(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, this.parsedInStrictMode()); - }; - - ImportDeclarationSyntax.create = function (importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, importKeyword, identifier, equalsToken, moduleReference, semicolonToken, false); - }; - - ImportDeclarationSyntax.create1 = function (identifier, moduleReference) { - return new ImportDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(49 /* ImportKeyword */), identifier, TypeScript.Syntax.token(107 /* EqualsToken */), moduleReference, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ImportDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ImportDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ImportDeclarationSyntax.prototype.withImportKeyword = function (importKeyword) { - return this.update(this.modifiers, importKeyword, this.identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.importKeyword, identifier, this.equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, equalsToken, this.moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withModuleReference = function (moduleReference) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, moduleReference, this.semicolonToken); - }; - - ImportDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.importKeyword, this.identifier, this.equalsToken, this.moduleReference, semicolonToken); - }; - - ImportDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ImportDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ImportDeclarationSyntax = ImportDeclarationSyntax; - - var ExportAssignmentSyntax = (function (_super) { - __extends(ExportAssignmentSyntax, _super); - function ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.exportKeyword = exportKeyword; - this.equalsToken = equalsToken; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ExportAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitExportAssignment(this); - }; - - ExportAssignmentSyntax.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignmentSyntax.prototype.childCount = function () { - return 4; - }; - - ExportAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.exportKeyword; - case 1: - return this.equalsToken; - case 2: - return this.identifier; - case 3: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExportAssignmentSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExportAssignmentSyntax.prototype.update = function (exportKeyword, equalsToken, identifier, semicolonToken) { - if (this.exportKeyword === exportKeyword && this.equalsToken === equalsToken && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExportAssignmentSyntax(exportKeyword, equalsToken, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ExportAssignmentSyntax.create1 = function (identifier) { - return new ExportAssignmentSyntax(TypeScript.Syntax.token(47 /* ExportKeyword */), TypeScript.Syntax.token(107 /* EqualsToken */), identifier, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExportAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExportAssignmentSyntax.prototype.withExportKeyword = function (exportKeyword) { - return this.update(exportKeyword, this.equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(this.exportKeyword, equalsToken, this.identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.exportKeyword, this.equalsToken, identifier, this.semicolonToken); - }; - - ExportAssignmentSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.exportKeyword, this.equalsToken, this.identifier, semicolonToken); - }; - - ExportAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ExportAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExportAssignmentSyntax = ExportAssignmentSyntax; - - var ClassDeclarationSyntax = (function (_super) { - __extends(ClassDeclarationSyntax, _super); - function ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.classKeyword = classKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.openBraceToken = openBraceToken; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - } - ClassDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitClassDeclaration(this); - }; - - ClassDeclarationSyntax.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclarationSyntax.prototype.childCount = function () { - return 8; - }; - - ClassDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.classKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.openBraceToken; - case 6: - return this.classElements; - case 7: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ClassDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ClassDeclarationSyntax.prototype.update = function (modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { - if (this.modifiers === modifiers && this.classKeyword === classKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.openBraceToken === openBraceToken && this.classElements === classElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ClassDeclarationSyntax(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ClassDeclarationSyntax.create = function (classKeyword, identifier, openBraceToken, closeBraceToken) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, classKeyword, identifier, null, TypeScript.Syntax.emptyList, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ClassDeclarationSyntax.create1 = function (identifier) { - return new ClassDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(44 /* ClassKeyword */), identifier, null, TypeScript.Syntax.emptyList, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ClassDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ClassDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ClassDeclarationSyntax.prototype.withClassKeyword = function (classKeyword) { - return this.update(this.modifiers, classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.classKeyword, identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.classKeyword, this.identifier, typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, heritageClauses, this.openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - ClassDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, openBraceToken, this.classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElements = function (classElements) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, classElements, this.closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.withClassElement = function (classElement) { - return this.withClassElements(TypeScript.Syntax.list([classElement])); - }; - - ClassDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.classKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.openBraceToken, this.classElements, closeBraceToken); - }; - - ClassDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ClassDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ClassDeclarationSyntax = ClassDeclarationSyntax; - - var InterfaceDeclarationSyntax = (function (_super) { - __extends(InterfaceDeclarationSyntax, _super); - function InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.interfaceKeyword = interfaceKeyword; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - } - InterfaceDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitInterfaceDeclaration(this); - }; - - InterfaceDeclarationSyntax.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - InterfaceDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.interfaceKeyword; - case 2: - return this.identifier; - case 3: - return this.typeParameterList; - case 4: - return this.heritageClauses; - case 5: - return this.body; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InterfaceDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - InterfaceDeclarationSyntax.prototype.update = function (modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { - if (this.modifiers === modifiers && this.interfaceKeyword === interfaceKeyword && this.identifier === identifier && this.typeParameterList === typeParameterList && this.heritageClauses === heritageClauses && this.body === body) { - return this; - } - - return new InterfaceDeclarationSyntax(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body, this.parsedInStrictMode()); - }; - - InterfaceDeclarationSyntax.create = function (interfaceKeyword, identifier, body) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, interfaceKeyword, identifier, null, TypeScript.Syntax.emptyList, body, false); - }; - - InterfaceDeclarationSyntax.create1 = function (identifier) { - return new InterfaceDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(52 /* InterfaceKeyword */), identifier, null, TypeScript.Syntax.emptyList, ObjectTypeSyntax.create1(), false); - }; - - InterfaceDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InterfaceDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - InterfaceDeclarationSyntax.prototype.withInterfaceKeyword = function (interfaceKeyword) { - return this.update(this.modifiers, interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.interfaceKeyword, identifier, this.typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, typeParameterList, this.heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClauses = function (heritageClauses) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, heritageClauses, this.body); - }; - - InterfaceDeclarationSyntax.prototype.withHeritageClause = function (heritageClause) { - return this.withHeritageClauses(TypeScript.Syntax.list([heritageClause])); - }; - - InterfaceDeclarationSyntax.prototype.withBody = function (body) { - return this.update(this.modifiers, this.interfaceKeyword, this.identifier, this.typeParameterList, this.heritageClauses, body); - }; - - InterfaceDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return InterfaceDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax; - - var HeritageClauseSyntax = (function (_super) { - __extends(HeritageClauseSyntax, _super); - function HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsOrImplementsKeyword = extendsOrImplementsKeyword; - this.typeNames = typeNames; - - this._kind = kind; - } - HeritageClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitHeritageClause(this); - }; - - HeritageClauseSyntax.prototype.childCount = function () { - return 2; - }; - - HeritageClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsOrImplementsKeyword; - case 1: - return this.typeNames; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - HeritageClauseSyntax.prototype.kind = function () { - return this._kind; - }; - - HeritageClauseSyntax.prototype.update = function (kind, extendsOrImplementsKeyword, typeNames) { - if (this._kind === kind && this.extendsOrImplementsKeyword === extendsOrImplementsKeyword && this.typeNames === typeNames) { - return this; - } - - return new HeritageClauseSyntax(kind, extendsOrImplementsKeyword, typeNames, this.parsedInStrictMode()); - }; - - HeritageClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - HeritageClauseSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withExtendsOrImplementsKeyword = function (extendsOrImplementsKeyword) { - return this.update(this._kind, extendsOrImplementsKeyword, this.typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeNames = function (typeNames) { - return this.update(this._kind, this.extendsOrImplementsKeyword, typeNames); - }; - - HeritageClauseSyntax.prototype.withTypeName = function (typeName) { - return this.withTypeNames(TypeScript.Syntax.separatedList([typeName])); - }; - - HeritageClauseSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return HeritageClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.HeritageClauseSyntax = HeritageClauseSyntax; - - var ModuleDeclarationSyntax = (function (_super) { - __extends(ModuleDeclarationSyntax, _super); - function ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.moduleKeyword = moduleKeyword; - this.name = name; - this.stringLiteral = stringLiteral; - this.openBraceToken = openBraceToken; - this.moduleElements = moduleElements; - this.closeBraceToken = closeBraceToken; - } - ModuleDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitModuleDeclaration(this); - }; - - ModuleDeclarationSyntax.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclarationSyntax.prototype.childCount = function () { - return 7; - }; - - ModuleDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.moduleKeyword; - case 2: - return this.name; - case 3: - return this.stringLiteral; - case 4: - return this.openBraceToken; - case 5: - return this.moduleElements; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ModuleDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - ModuleDeclarationSyntax.prototype.update = function (modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { - if (this.modifiers === modifiers && this.moduleKeyword === moduleKeyword && this.name === name && this.stringLiteral === stringLiteral && this.openBraceToken === openBraceToken && this.moduleElements === moduleElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ModuleDeclarationSyntax(modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken, this.parsedInStrictMode()); - }; - - ModuleDeclarationSyntax.create = function (moduleKeyword, openBraceToken, closeBraceToken) { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, moduleKeyword, null, null, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - ModuleDeclarationSyntax.create1 = function () { - return new ModuleDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(65 /* ModuleKeyword */), null, null, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ModuleDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ModuleDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ModuleDeclarationSyntax.prototype.withModuleKeyword = function (moduleKeyword) { - return this.update(this.modifiers, moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withName = function (name) { - return this.update(this.modifiers, this.moduleKeyword, name, this.stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withStringLiteral = function (stringLiteral) { - return this.update(this.modifiers, this.moduleKeyword, this.name, stringLiteral, this.openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, openBraceToken, this.moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElements = function (moduleElements) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, moduleElements, this.closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.withModuleElement = function (moduleElement) { - return this.withModuleElements(TypeScript.Syntax.list([moduleElement])); - }; - - ModuleDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.moduleKeyword, this.name, this.stringLiteral, this.openBraceToken, this.moduleElements, closeBraceToken); - }; - - ModuleDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ModuleDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ModuleDeclarationSyntax = ModuleDeclarationSyntax; - - var FunctionDeclarationSyntax = (function (_super) { - __extends(FunctionDeclarationSyntax, _super); - function FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - FunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionDeclaration(this); - }; - - FunctionDeclarationSyntax.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - FunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.functionKeyword; - case 2: - return this.identifier; - case 3: - return this.callSignature; - case 4: - return this.block; - case 5: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionDeclarationSyntax.prototype.isStatement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - FunctionDeclarationSyntax.prototype.update = function (modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new FunctionDeclarationSyntax(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - FunctionDeclarationSyntax.create = function (functionKeyword, identifier, callSignature) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, functionKeyword, identifier, callSignature, null, null, false); - }; - - FunctionDeclarationSyntax.create1 = function (identifier) { - return new FunctionDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(27 /* FunctionKeyword */), identifier, CallSignatureSyntax.create1(), null, null, false); - }; - - FunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - FunctionDeclarationSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(this.modifiers, functionKeyword, this.identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.functionKeyword, identifier, this.callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, callSignature, this.block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, block, this.semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.functionKeyword, this.identifier, this.callSignature, this.block, semicolonToken); - }; - - FunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block !== null && this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionDeclarationSyntax = FunctionDeclarationSyntax; - - var VariableStatementSyntax = (function (_super) { - __extends(VariableStatementSyntax, _super); - function VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclaration = variableDeclaration; - this.semicolonToken = semicolonToken; - } - VariableStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableStatement(this); - }; - - VariableStatementSyntax.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatementSyntax.prototype.childCount = function () { - return 3; - }; - - VariableStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclaration; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableStatementSyntax.prototype.isStatement = function () { - return true; - }; - - VariableStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - VariableStatementSyntax.prototype.update = function (modifiers, variableDeclaration, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclaration === variableDeclaration && this.semicolonToken === semicolonToken) { - return this; - } - - return new VariableStatementSyntax(modifiers, variableDeclaration, semicolonToken, this.parsedInStrictMode()); - }; - - VariableStatementSyntax.create = function (variableDeclaration, semicolonToken) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, semicolonToken, false); - }; - - VariableStatementSyntax.create1 = function (variableDeclaration) { - return new VariableStatementSyntax(TypeScript.Syntax.emptyList, variableDeclaration, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - VariableStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableStatementSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - VariableStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.modifiers, variableDeclaration, this.semicolonToken); - }; - - VariableStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclaration, semicolonToken); - }; - - VariableStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableStatementSyntax = VariableStatementSyntax; - - var VariableDeclarationSyntax = (function (_super) { - __extends(VariableDeclarationSyntax, _super); - function VariableDeclarationSyntax(varKeyword, variableDeclarators, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.varKeyword = varKeyword; - this.variableDeclarators = variableDeclarators; - } - VariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclaration(this); - }; - - VariableDeclarationSyntax.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclarationSyntax.prototype.childCount = function () { - return 2; - }; - - VariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.varKeyword; - case 1: - return this.variableDeclarators; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclarationSyntax.prototype.update = function (varKeyword, variableDeclarators) { - if (this.varKeyword === varKeyword && this.variableDeclarators === variableDeclarators) { - return this; - } - - return new VariableDeclarationSyntax(varKeyword, variableDeclarators, this.parsedInStrictMode()); - }; - - VariableDeclarationSyntax.create1 = function (variableDeclarators) { - return new VariableDeclarationSyntax(TypeScript.Syntax.token(40 /* VarKeyword */), variableDeclarators, false); - }; - - VariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclarationSyntax.prototype.withVarKeyword = function (varKeyword) { - return this.update(varKeyword, this.variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarators = function (variableDeclarators) { - return this.update(this.varKeyword, variableDeclarators); - }; - - VariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.withVariableDeclarators(TypeScript.Syntax.separatedList([variableDeclarator])); - }; - - VariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclarators.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclarationSyntax = VariableDeclarationSyntax; - - var VariableDeclaratorSyntax = (function (_super) { - __extends(VariableDeclaratorSyntax, _super); - function VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - VariableDeclaratorSyntax.prototype.accept = function (visitor) { - return visitor.visitVariableDeclarator(this); - }; - - VariableDeclaratorSyntax.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - - VariableDeclaratorSyntax.prototype.childCount = function () { - return 3; - }; - - VariableDeclaratorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.typeAnnotation; - case 2: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VariableDeclaratorSyntax.prototype.update = function (propertyName, typeAnnotation, equalsValueClause) { - if (this.propertyName === propertyName && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new VariableDeclaratorSyntax(propertyName, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - VariableDeclaratorSyntax.create = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.create1 = function (propertyName) { - return new VariableDeclaratorSyntax(propertyName, null, null, false); - }; - - VariableDeclaratorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VariableDeclaratorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, typeAnnotation, this.equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, this.typeAnnotation, equalsValueClause); - }; - - VariableDeclaratorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VariableDeclaratorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VariableDeclaratorSyntax = VariableDeclaratorSyntax; - - var EqualsValueClauseSyntax = (function (_super) { - __extends(EqualsValueClauseSyntax, _super); - function EqualsValueClauseSyntax(equalsToken, value, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.equalsToken = equalsToken; - this.value = value; - } - EqualsValueClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitEqualsValueClause(this); - }; - - EqualsValueClauseSyntax.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - - EqualsValueClauseSyntax.prototype.childCount = function () { - return 2; - }; - - EqualsValueClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.equalsToken; - case 1: - return this.value; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EqualsValueClauseSyntax.prototype.update = function (equalsToken, value) { - if (this.equalsToken === equalsToken && this.value === value) { - return this; - } - - return new EqualsValueClauseSyntax(equalsToken, value, this.parsedInStrictMode()); - }; - - EqualsValueClauseSyntax.create1 = function (value) { - return new EqualsValueClauseSyntax(TypeScript.Syntax.token(107 /* EqualsToken */), value, false); - }; - - EqualsValueClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EqualsValueClauseSyntax.prototype.withEqualsToken = function (equalsToken) { - return this.update(equalsToken, this.value); - }; - - EqualsValueClauseSyntax.prototype.withValue = function (value) { - return this.update(this.equalsToken, value); - }; - - EqualsValueClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.value.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EqualsValueClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EqualsValueClauseSyntax = EqualsValueClauseSyntax; - - var PrefixUnaryExpressionSyntax = (function (_super) { - __extends(PrefixUnaryExpressionSyntax, _super); - function PrefixUnaryExpressionSyntax(kind, operatorToken, operand, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operatorToken = operatorToken; - this.operand = operand; - - this._kind = kind; - } - PrefixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPrefixUnaryExpression(this); - }; - - PrefixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PrefixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operatorToken; - case 1: - return this.operand; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PrefixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PrefixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PrefixUnaryExpressionSyntax.prototype.update = function (kind, operatorToken, operand) { - if (this._kind === kind && this.operatorToken === operatorToken && this.operand === operand) { - return this; - } - - return new PrefixUnaryExpressionSyntax(kind, operatorToken, operand, this.parsedInStrictMode()); - }; - - PrefixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PrefixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, operatorToken, this.operand); - }; - - PrefixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, this.operatorToken, operand); - }; - - PrefixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PrefixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax; - - var ArrayLiteralExpressionSyntax = (function (_super) { - __extends(ArrayLiteralExpressionSyntax, _super); - function ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.expressions = expressions; - this.closeBracketToken = closeBracketToken; - } - ArrayLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayLiteralExpression(this); - }; - - ArrayLiteralExpressionSyntax.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.expressions; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ArrayLiteralExpressionSyntax.prototype.update = function (openBracketToken, expressions, closeBracketToken) { - if (this.openBracketToken === openBracketToken && this.expressions === expressions && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayLiteralExpressionSyntax(openBracketToken, expressions, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayLiteralExpressionSyntax.create = function (openBracketToken, closeBracketToken) { - return new ArrayLiteralExpressionSyntax(openBracketToken, TypeScript.Syntax.emptySeparatedList, closeBracketToken, false); - }; - - ArrayLiteralExpressionSyntax.create1 = function () { - return new ArrayLiteralExpressionSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayLiteralExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpressions = function (expressions) { - return this.update(this.openBracketToken, expressions, this.closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.withExpression = function (expression) { - return this.withExpressions(TypeScript.Syntax.separatedList([expression])); - }; - - ArrayLiteralExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.expressions, closeBracketToken); - }; - - ArrayLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expressions.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArrayLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax; - - var OmittedExpressionSyntax = (function (_super) { - __extends(OmittedExpressionSyntax, _super); - function OmittedExpressionSyntax(parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - } - OmittedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitOmittedExpression(this); - }; - - OmittedExpressionSyntax.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpressionSyntax.prototype.childCount = function () { - return 0; - }; - - OmittedExpressionSyntax.prototype.childAt = function (slot) { - throw TypeScript.Errors.invalidOperation(); - }; - - OmittedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - OmittedExpressionSyntax.prototype.update = function () { - return this; - }; - - OmittedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - OmittedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return OmittedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.OmittedExpressionSyntax = OmittedExpressionSyntax; - - var ParenthesizedExpressionSyntax = (function (_super) { - __extends(ParenthesizedExpressionSyntax, _super); - function ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - } - ParenthesizedExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedExpression(this); - }; - - ParenthesizedExpressionSyntax.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ParenthesizedExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.expression; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedExpressionSyntax.prototype.update = function (openParenToken, expression, closeParenToken) { - if (this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParenthesizedExpressionSyntax(openParenToken, expression, closeParenToken, this.parsedInStrictMode()); - }; - - ParenthesizedExpressionSyntax.create1 = function (expression) { - return new ParenthesizedExpressionSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParenthesizedExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedExpressionSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.openParenToken, expression, this.closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.expression, closeParenToken); - }; - - ParenthesizedExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParenthesizedExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax; - - var SimpleArrowFunctionExpressionSyntax = (function (_super) { - __extends(SimpleArrowFunctionExpressionSyntax, _super); - function SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - SimpleArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitSimpleArrowFunctionExpression(this); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - SimpleArrowFunctionExpressionSyntax.prototype.update = function (identifier, equalsGreaterThanToken, block, expression) { - if (this.identifier === identifier && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - SimpleArrowFunctionExpressionSyntax.create = function (identifier, equalsGreaterThanToken) { - return new SimpleArrowFunctionExpressionSyntax(identifier, equalsGreaterThanToken, null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.create1 = function (identifier) { - return new SimpleArrowFunctionExpressionSyntax(identifier, TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.identifier, equalsGreaterThanToken, this.block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.identifier, this.equalsGreaterThanToken, block, this.expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.identifier, this.equalsGreaterThanToken, this.block, expression); - }; - - SimpleArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SimpleArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax; - - var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) { - __extends(ParenthesizedArrowFunctionExpressionSyntax, _super); - function ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.callSignature = callSignature; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.block = block; - this.expression = expression; - } - ParenthesizedArrowFunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitParenthesizedArrowFunctionExpression(this); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.callSignature; - case 1: - return this.equalsGreaterThanToken; - case 2: - return this.block; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isArrowFunctionExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.update = function (callSignature, equalsGreaterThanToken, block, expression) { - if (this.callSignature === callSignature && this.equalsGreaterThanToken === equalsGreaterThanToken && this.block === block && this.expression === expression) { - return this; - } - - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, block, expression, this.parsedInStrictMode()); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create = function (callSignature, equalsGreaterThanToken) { - return new ParenthesizedArrowFunctionExpressionSyntax(callSignature, equalsGreaterThanToken, null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.create1 = function () { - return new ParenthesizedArrowFunctionExpressionSyntax(CallSignatureSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), null, null, false); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(callSignature, this.equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.callSignature, equalsGreaterThanToken, this.block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.callSignature, this.equalsGreaterThanToken, block, this.expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.callSignature, this.equalsGreaterThanToken, this.block, expression); - }; - - ParenthesizedArrowFunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ParenthesizedArrowFunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax; - - var QualifiedNameSyntax = (function (_super) { - __extends(QualifiedNameSyntax, _super); - function QualifiedNameSyntax(left, dotToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.dotToken = dotToken; - this.right = right; - } - QualifiedNameSyntax.prototype.accept = function (visitor) { - return visitor.visitQualifiedName(this); - }; - - QualifiedNameSyntax.prototype.kind = function () { - return 121 /* QualifiedName */; - }; - - QualifiedNameSyntax.prototype.childCount = function () { - return 3; - }; - - QualifiedNameSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.dotToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - QualifiedNameSyntax.prototype.isName = function () { - return true; - }; - - QualifiedNameSyntax.prototype.isType = function () { - return true; - }; - - QualifiedNameSyntax.prototype.update = function (left, dotToken, right) { - if (this.left === left && this.dotToken === dotToken && this.right === right) { - return this; - } - - return new QualifiedNameSyntax(left, dotToken, right, this.parsedInStrictMode()); - }; - - QualifiedNameSyntax.create1 = function (left, right) { - return new QualifiedNameSyntax(left, TypeScript.Syntax.token(76 /* DotToken */), right, false); - }; - - QualifiedNameSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - QualifiedNameSyntax.prototype.withLeft = function (left) { - return this.update(left, this.dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.left, dotToken, this.right); - }; - - QualifiedNameSyntax.prototype.withRight = function (right) { - return this.update(this.left, this.dotToken, right); - }; - - QualifiedNameSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return QualifiedNameSyntax; - })(TypeScript.SyntaxNode); - TypeScript.QualifiedNameSyntax = QualifiedNameSyntax; - - var TypeArgumentListSyntax = (function (_super) { - __extends(TypeArgumentListSyntax, _super); - function TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeArguments = typeArguments; - this.greaterThanToken = greaterThanToken; - } - TypeArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeArgumentList(this); - }; - - TypeArgumentListSyntax.prototype.kind = function () { - return 228 /* TypeArgumentList */; - }; - - TypeArgumentListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeArguments; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeArgumentListSyntax.prototype.update = function (lessThanToken, typeArguments, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeArguments === typeArguments && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeArgumentListSyntax(lessThanToken, typeArguments, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeArgumentListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeArgumentListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeArgumentListSyntax.create1 = function () { - return new TypeArgumentListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeArgumentListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArguments = function (typeArguments) { - return this.update(this.lessThanToken, typeArguments, this.greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.withTypeArgument = function (typeArgument) { - return this.withTypeArguments(TypeScript.Syntax.separatedList([typeArgument])); - }; - - TypeArgumentListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeArguments, greaterThanToken); - }; - - TypeArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeArgumentListSyntax = TypeArgumentListSyntax; - - var ConstructorTypeSyntax = (function (_super) { - __extends(ConstructorTypeSyntax, _super); - function ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - ConstructorTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorType(this); - }; - - ConstructorTypeSyntax.prototype.kind = function () { - return 125 /* ConstructorType */; - }; - - ConstructorTypeSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.typeParameterList; - case 2: - return this.parameterList; - case 3: - return this.equalsGreaterThanToken; - case 4: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorTypeSyntax.prototype.isType = function () { - return true; - }; - - ConstructorTypeSyntax.prototype.update = function (newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.newKeyword === newKeyword && this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new ConstructorTypeSyntax(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - ConstructorTypeSyntax.create = function (newKeyword, parameterList, equalsGreaterThanToken, type) { - return new ConstructorTypeSyntax(newKeyword, null, parameterList, equalsGreaterThanToken, type, false); - }; - - ConstructorTypeSyntax.create1 = function (type) { - return new ConstructorTypeSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - ConstructorTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorTypeSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(this.newKeyword, typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.newKeyword, this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - ConstructorTypeSyntax.prototype.withType = function (type) { - return this.update(this.newKeyword, this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - ConstructorTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorTypeSyntax = ConstructorTypeSyntax; - - var FunctionTypeSyntax = (function (_super) { - __extends(FunctionTypeSyntax, _super); - function FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.equalsGreaterThanToken = equalsGreaterThanToken; - this.type = type; - } - FunctionTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionType(this); - }; - - FunctionTypeSyntax.prototype.kind = function () { - return 123 /* FunctionType */; - }; - - FunctionTypeSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.equalsGreaterThanToken; - case 3: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionTypeSyntax.prototype.isType = function () { - return true; - }; - - FunctionTypeSyntax.prototype.update = function (typeParameterList, parameterList, equalsGreaterThanToken, type) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.equalsGreaterThanToken === equalsGreaterThanToken && this.type === type) { - return this; - } - - return new FunctionTypeSyntax(typeParameterList, parameterList, equalsGreaterThanToken, type, this.parsedInStrictMode()); - }; - - FunctionTypeSyntax.create = function (parameterList, equalsGreaterThanToken, type) { - return new FunctionTypeSyntax(null, parameterList, equalsGreaterThanToken, type, false); - }; - - FunctionTypeSyntax.create1 = function (type) { - return new FunctionTypeSyntax(null, ParameterListSyntax.create1(), TypeScript.Syntax.token(85 /* EqualsGreaterThanToken */), type, false); - }; - - FunctionTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionTypeSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withEqualsGreaterThanToken = function (equalsGreaterThanToken) { - return this.update(this.typeParameterList, this.parameterList, equalsGreaterThanToken, this.type); - }; - - FunctionTypeSyntax.prototype.withType = function (type) { - return this.update(this.typeParameterList, this.parameterList, this.equalsGreaterThanToken, type); - }; - - FunctionTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return FunctionTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionTypeSyntax = FunctionTypeSyntax; - - var ObjectTypeSyntax = (function (_super) { - __extends(ObjectTypeSyntax, _super); - function ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.typeMembers = typeMembers; - this.closeBraceToken = closeBraceToken; - } - ObjectTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectType(this); - }; - - ObjectTypeSyntax.prototype.kind = function () { - return 122 /* ObjectType */; - }; - - ObjectTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.typeMembers; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectTypeSyntax.prototype.isType = function () { - return true; - }; - - ObjectTypeSyntax.prototype.update = function (openBraceToken, typeMembers, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.typeMembers === typeMembers && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectTypeSyntax(openBraceToken, typeMembers, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectTypeSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectTypeSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectTypeSyntax.create1 = function () { - return new ObjectTypeSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectTypeSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMembers = function (typeMembers) { - return this.update(this.openBraceToken, typeMembers, this.closeBraceToken); - }; - - ObjectTypeSyntax.prototype.withTypeMember = function (typeMember) { - return this.withTypeMembers(TypeScript.Syntax.separatedList([typeMember])); - }; - - ObjectTypeSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.typeMembers, closeBraceToken); - }; - - ObjectTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ObjectTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectTypeSyntax = ObjectTypeSyntax; - - var ArrayTypeSyntax = (function (_super) { - __extends(ArrayTypeSyntax, _super); - function ArrayTypeSyntax(type, openBracketToken, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.type = type; - this.openBracketToken = openBracketToken; - this.closeBracketToken = closeBracketToken; - } - ArrayTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitArrayType(this); - }; - - ArrayTypeSyntax.prototype.kind = function () { - return 124 /* ArrayType */; - }; - - ArrayTypeSyntax.prototype.childCount = function () { - return 3; - }; - - ArrayTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.type; - case 1: - return this.openBracketToken; - case 2: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArrayTypeSyntax.prototype.isType = function () { - return true; - }; - - ArrayTypeSyntax.prototype.update = function (type, openBracketToken, closeBracketToken) { - if (this.type === type && this.openBracketToken === openBracketToken && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ArrayTypeSyntax(type, openBracketToken, closeBracketToken, this.parsedInStrictMode()); - }; - - ArrayTypeSyntax.create1 = function (type) { - return new ArrayTypeSyntax(type, TypeScript.Syntax.token(74 /* OpenBracketToken */), TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ArrayTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArrayTypeSyntax.prototype.withType = function (type) { - return this.update(type, this.openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.type, openBracketToken, this.closeBracketToken); - }; - - ArrayTypeSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.type, this.openBracketToken, closeBracketToken); - }; - - ArrayTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ArrayTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArrayTypeSyntax = ArrayTypeSyntax; - - var GenericTypeSyntax = (function (_super) { - __extends(GenericTypeSyntax, _super); - function GenericTypeSyntax(name, typeArgumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.name = name; - this.typeArgumentList = typeArgumentList; - } - GenericTypeSyntax.prototype.accept = function (visitor) { - return visitor.visitGenericType(this); - }; - - GenericTypeSyntax.prototype.kind = function () { - return 126 /* GenericType */; - }; - - GenericTypeSyntax.prototype.childCount = function () { - return 2; - }; - - GenericTypeSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.name; - case 1: - return this.typeArgumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GenericTypeSyntax.prototype.isType = function () { - return true; - }; - - GenericTypeSyntax.prototype.update = function (name, typeArgumentList) { - if (this.name === name && this.typeArgumentList === typeArgumentList) { - return this; - } - - return new GenericTypeSyntax(name, typeArgumentList, this.parsedInStrictMode()); - }; - - GenericTypeSyntax.create1 = function (name) { - return new GenericTypeSyntax(name, TypeArgumentListSyntax.create1(), false); - }; - - GenericTypeSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GenericTypeSyntax.prototype.withName = function (name) { - return this.update(name, this.typeArgumentList); - }; - - GenericTypeSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(this.name, typeArgumentList); - }; - - GenericTypeSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return GenericTypeSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GenericTypeSyntax = GenericTypeSyntax; - - var TypeQuerySyntax = (function (_super) { - __extends(TypeQuerySyntax, _super); - function TypeQuerySyntax(typeOfKeyword, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.name = name; - } - TypeQuerySyntax.prototype.accept = function (visitor) { - return visitor.visitTypeQuery(this); - }; - - TypeQuerySyntax.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuerySyntax.prototype.childCount = function () { - return 2; - }; - - TypeQuerySyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeQuerySyntax.prototype.isType = function () { - return true; - }; - - TypeQuerySyntax.prototype.update = function (typeOfKeyword, name) { - if (this.typeOfKeyword === typeOfKeyword && this.name === name) { - return this; - } - - return new TypeQuerySyntax(typeOfKeyword, name, this.parsedInStrictMode()); - }; - - TypeQuerySyntax.create1 = function (name) { - return new TypeQuerySyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), name, false); - }; - - TypeQuerySyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeQuerySyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.name); - }; - - TypeQuerySyntax.prototype.withName = function (name) { - return this.update(this.typeOfKeyword, name); - }; - - TypeQuerySyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeQuerySyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeQuerySyntax = TypeQuerySyntax; - - var TypeAnnotationSyntax = (function (_super) { - __extends(TypeAnnotationSyntax, _super); - function TypeAnnotationSyntax(colonToken, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.colonToken = colonToken; - this.type = type; - } - TypeAnnotationSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeAnnotation(this); - }; - - TypeAnnotationSyntax.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - - TypeAnnotationSyntax.prototype.childCount = function () { - return 2; - }; - - TypeAnnotationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.colonToken; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeAnnotationSyntax.prototype.update = function (colonToken, type) { - if (this.colonToken === colonToken && this.type === type) { - return this; - } - - return new TypeAnnotationSyntax(colonToken, type, this.parsedInStrictMode()); - }; - - TypeAnnotationSyntax.create1 = function (type) { - return new TypeAnnotationSyntax(TypeScript.Syntax.token(106 /* ColonToken */), type, false); - }; - - TypeAnnotationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeAnnotationSyntax.prototype.withColonToken = function (colonToken) { - return this.update(colonToken, this.type); - }; - - TypeAnnotationSyntax.prototype.withType = function (type) { - return this.update(this.colonToken, type); - }; - - TypeAnnotationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeAnnotationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeAnnotationSyntax = TypeAnnotationSyntax; - - var BlockSyntax = (function (_super) { - __extends(BlockSyntax, _super); - function BlockSyntax(openBraceToken, statements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.statements = statements; - this.closeBraceToken = closeBraceToken; - } - BlockSyntax.prototype.accept = function (visitor) { - return visitor.visitBlock(this); - }; - - BlockSyntax.prototype.kind = function () { - return 146 /* Block */; - }; - - BlockSyntax.prototype.childCount = function () { - return 3; - }; - - BlockSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.statements; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BlockSyntax.prototype.isStatement = function () { - return true; - }; - - BlockSyntax.prototype.isModuleElement = function () { - return true; - }; - - BlockSyntax.prototype.update = function (openBraceToken, statements, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.statements === statements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new BlockSyntax(openBraceToken, statements, closeBraceToken, this.parsedInStrictMode()); - }; - - BlockSyntax.create = function (openBraceToken, closeBraceToken) { - return new BlockSyntax(openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - BlockSyntax.create1 = function () { - return new BlockSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - BlockSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BlockSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatements = function (statements) { - return this.update(this.openBraceToken, statements, this.closeBraceToken); - }; - - BlockSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - BlockSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.statements, closeBraceToken); - }; - - BlockSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BlockSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BlockSyntax = BlockSyntax; - - var ParameterSyntax = (function (_super) { - __extends(ParameterSyntax, _super); - function ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - } - ParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitParameter(this); - }; - - ParameterSyntax.prototype.kind = function () { - return 242 /* Parameter */; - }; - - ParameterSyntax.prototype.childCount = function () { - return 6; - }; - - ParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.dotDotDotToken; - case 1: - return this.modifiers; - case 2: - return this.identifier; - case 3: - return this.questionToken; - case 4: - return this.typeAnnotation; - case 5: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterSyntax.prototype.update = function (dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - if (this.dotDotDotToken === dotDotDotToken && this.modifiers === modifiers && this.identifier === identifier && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new ParameterSyntax(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause, this.parsedInStrictMode()); - }; - - ParameterSyntax.create = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.create1 = function (identifier) { - return new ParameterSyntax(null, TypeScript.Syntax.emptyList, identifier, null, null, null, false); - }; - - ParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterSyntax.prototype.withDotDotDotToken = function (dotDotDotToken) { - return this.update(dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifiers = function (modifiers) { - return this.update(this.dotDotDotToken, modifiers, this.identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.dotDotDotToken, this.modifiers, identifier, this.questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, questionToken, this.typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, typeAnnotation, this.equalsValueClause); - }; - - ParameterSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.dotDotDotToken, this.modifiers, this.identifier, this.questionToken, this.typeAnnotation, equalsValueClause); - }; - - ParameterSyntax.prototype.isTypeScriptSpecific = function () { - if (this.dotDotDotToken !== null) { - return true; - } - if (this.modifiers.isTypeScriptSpecific()) { - return true; - } - if (this.questionToken !== null) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.equalsValueClause !== null) { - return true; - } - return false; - }; - return ParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterSyntax = ParameterSyntax; - - var MemberAccessExpressionSyntax = (function (_super) { - __extends(MemberAccessExpressionSyntax, _super); - function MemberAccessExpressionSyntax(expression, dotToken, name, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.dotToken = dotToken; - this.name = name; - } - MemberAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberAccessExpression(this); - }; - - MemberAccessExpressionSyntax.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - MemberAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.dotToken; - case 2: - return this.name; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - MemberAccessExpressionSyntax.prototype.update = function (expression, dotToken, name) { - if (this.expression === expression && this.dotToken === dotToken && this.name === name) { - return this; - } - - return new MemberAccessExpressionSyntax(expression, dotToken, name, this.parsedInStrictMode()); - }; - - MemberAccessExpressionSyntax.create1 = function (expression, name) { - return new MemberAccessExpressionSyntax(expression, TypeScript.Syntax.token(76 /* DotToken */), name, false); - }; - - MemberAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withDotToken = function (dotToken) { - return this.update(this.expression, dotToken, this.name); - }; - - MemberAccessExpressionSyntax.prototype.withName = function (name) { - return this.update(this.expression, this.dotToken, name); - }; - - MemberAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MemberAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax; - - var PostfixUnaryExpressionSyntax = (function (_super) { - __extends(PostfixUnaryExpressionSyntax, _super); - function PostfixUnaryExpressionSyntax(kind, operand, operatorToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.operand = operand; - this.operatorToken = operatorToken; - - this._kind = kind; - } - PostfixUnaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitPostfixUnaryExpression(this); - }; - - PostfixUnaryExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - PostfixUnaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.operand; - case 1: - return this.operatorToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PostfixUnaryExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - PostfixUnaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - PostfixUnaryExpressionSyntax.prototype.update = function (kind, operand, operatorToken) { - if (this._kind === kind && this.operand === operand && this.operatorToken === operatorToken) { - return this; - } - - return new PostfixUnaryExpressionSyntax(kind, operand, operatorToken, this.parsedInStrictMode()); - }; - - PostfixUnaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PostfixUnaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperand = function (operand) { - return this.update(this._kind, operand, this.operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.operand, operatorToken); - }; - - PostfixUnaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.operand.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return PostfixUnaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax; - - var ElementAccessExpressionSyntax = (function (_super) { - __extends(ElementAccessExpressionSyntax, _super); - function ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.openBracketToken = openBracketToken; - this.argumentExpression = argumentExpression; - this.closeBracketToken = closeBracketToken; - } - ElementAccessExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitElementAccessExpression(this); - }; - - ElementAccessExpressionSyntax.prototype.kind = function () { - return 221 /* ElementAccessExpression */; - }; - - ElementAccessExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - ElementAccessExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.openBracketToken; - case 2: - return this.argumentExpression; - case 3: - return this.closeBracketToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElementAccessExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ElementAccessExpressionSyntax.prototype.update = function (expression, openBracketToken, argumentExpression, closeBracketToken) { - if (this.expression === expression && this.openBracketToken === openBracketToken && this.argumentExpression === argumentExpression && this.closeBracketToken === closeBracketToken) { - return this; - } - - return new ElementAccessExpressionSyntax(expression, openBracketToken, argumentExpression, closeBracketToken, this.parsedInStrictMode()); - }; - - ElementAccessExpressionSyntax.create1 = function (expression, argumentExpression) { - return new ElementAccessExpressionSyntax(expression, TypeScript.Syntax.token(74 /* OpenBracketToken */), argumentExpression, TypeScript.Syntax.token(75 /* CloseBracketToken */), false); - }; - - ElementAccessExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElementAccessExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(this.expression, openBracketToken, this.argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withArgumentExpression = function (argumentExpression) { - return this.update(this.expression, this.openBracketToken, argumentExpression, this.closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.expression, this.openBracketToken, this.argumentExpression, closeBracketToken); - }; - - ElementAccessExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentExpression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElementAccessExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax; - - var InvocationExpressionSyntax = (function (_super) { - __extends(InvocationExpressionSyntax, _super); - function InvocationExpressionSyntax(expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.argumentList = argumentList; - } - InvocationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitInvocationExpression(this); - }; - - InvocationExpressionSyntax.prototype.kind = function () { - return 213 /* InvocationExpression */; - }; - - InvocationExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - InvocationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - InvocationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - InvocationExpressionSyntax.prototype.update = function (expression, argumentList) { - if (this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new InvocationExpressionSyntax(expression, argumentList, this.parsedInStrictMode()); - }; - - InvocationExpressionSyntax.create1 = function (expression) { - return new InvocationExpressionSyntax(expression, ArgumentListSyntax.create1(), false); - }; - - InvocationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - InvocationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.argumentList); - }; - - InvocationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.expression, argumentList); - }; - - InvocationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return InvocationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.InvocationExpressionSyntax = InvocationExpressionSyntax; - - var ArgumentListSyntax = (function (_super) { - __extends(ArgumentListSyntax, _super); - function ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeArgumentList = typeArgumentList; - this.openParenToken = openParenToken; - this.closeParenToken = closeParenToken; - - this.arguments = _arguments; - } - ArgumentListSyntax.prototype.accept = function (visitor) { - return visitor.visitArgumentList(this); - }; - - ArgumentListSyntax.prototype.kind = function () { - return 226 /* ArgumentList */; - }; - - ArgumentListSyntax.prototype.childCount = function () { - return 4; - }; - - ArgumentListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeArgumentList; - case 1: - return this.openParenToken; - case 2: - return this.arguments; - case 3: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ArgumentListSyntax.prototype.update = function (typeArgumentList, openParenToken, _arguments, closeParenToken) { - if (this.typeArgumentList === typeArgumentList && this.openParenToken === openParenToken && this.arguments === _arguments && this.closeParenToken === closeParenToken) { - return this; - } - - return new ArgumentListSyntax(typeArgumentList, openParenToken, _arguments, closeParenToken, this.parsedInStrictMode()); - }; - - ArgumentListSyntax.create = function (openParenToken, closeParenToken) { - return new ArgumentListSyntax(null, openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ArgumentListSyntax.create1 = function () { - return new ArgumentListSyntax(null, TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ArgumentListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ArgumentListSyntax.prototype.withTypeArgumentList = function (typeArgumentList) { - return this.update(typeArgumentList, this.openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.typeArgumentList, openParenToken, this.arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArguments = function (_arguments) { - return this.update(this.typeArgumentList, this.openParenToken, _arguments, this.closeParenToken); - }; - - ArgumentListSyntax.prototype.withArgument = function (_argument) { - return this.withArguments(TypeScript.Syntax.separatedList([_argument])); - }; - - ArgumentListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.typeArgumentList, this.openParenToken, this.arguments, closeParenToken); - }; - - ArgumentListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeArgumentList !== null && this.typeArgumentList.isTypeScriptSpecific()) { - return true; - } - if (this.arguments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ArgumentListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ArgumentListSyntax = ArgumentListSyntax; - - var BinaryExpressionSyntax = (function (_super) { - __extends(BinaryExpressionSyntax, _super); - function BinaryExpressionSyntax(kind, left, operatorToken, right, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.left = left; - this.operatorToken = operatorToken; - this.right = right; - - this._kind = kind; - } - BinaryExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitBinaryExpression(this); - }; - - BinaryExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - BinaryExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.left; - case 1: - return this.operatorToken; - case 2: - return this.right; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BinaryExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - BinaryExpressionSyntax.prototype.kind = function () { - return this._kind; - }; - - BinaryExpressionSyntax.prototype.update = function (kind, left, operatorToken, right) { - if (this._kind === kind && this.left === left && this.operatorToken === operatorToken && this.right === right) { - return this; - } - - return new BinaryExpressionSyntax(kind, left, operatorToken, right, this.parsedInStrictMode()); - }; - - BinaryExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BinaryExpressionSyntax.prototype.withKind = function (kind) { - return this.update(kind, this.left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withLeft = function (left) { - return this.update(this._kind, left, this.operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withOperatorToken = function (operatorToken) { - return this.update(this._kind, this.left, operatorToken, this.right); - }; - - BinaryExpressionSyntax.prototype.withRight = function (right) { - return this.update(this._kind, this.left, this.operatorToken, right); - }; - - BinaryExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.left.isTypeScriptSpecific()) { - return true; - } - if (this.right.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return BinaryExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BinaryExpressionSyntax = BinaryExpressionSyntax; - - var ConditionalExpressionSyntax = (function (_super) { - __extends(ConditionalExpressionSyntax, _super); - function ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.condition = condition; - this.questionToken = questionToken; - this.whenTrue = whenTrue; - this.colonToken = colonToken; - this.whenFalse = whenFalse; - } - ConditionalExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitConditionalExpression(this); - }; - - ConditionalExpressionSyntax.prototype.kind = function () { - return 186 /* ConditionalExpression */; - }; - - ConditionalExpressionSyntax.prototype.childCount = function () { - return 5; - }; - - ConditionalExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.condition; - case 1: - return this.questionToken; - case 2: - return this.whenTrue; - case 3: - return this.colonToken; - case 4: - return this.whenFalse; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConditionalExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ConditionalExpressionSyntax.prototype.update = function (condition, questionToken, whenTrue, colonToken, whenFalse) { - if (this.condition === condition && this.questionToken === questionToken && this.whenTrue === whenTrue && this.colonToken === colonToken && this.whenFalse === whenFalse) { - return this; - } - - return new ConditionalExpressionSyntax(condition, questionToken, whenTrue, colonToken, whenFalse, this.parsedInStrictMode()); - }; - - ConditionalExpressionSyntax.create1 = function (condition, whenTrue, whenFalse) { - return new ConditionalExpressionSyntax(condition, TypeScript.Syntax.token(105 /* QuestionToken */), whenTrue, TypeScript.Syntax.token(106 /* ColonToken */), whenFalse, false); - }; - - ConditionalExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConditionalExpressionSyntax.prototype.withCondition = function (condition) { - return this.update(condition, this.questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.condition, questionToken, this.whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenTrue = function (whenTrue) { - return this.update(this.condition, this.questionToken, whenTrue, this.colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.condition, this.questionToken, this.whenTrue, colonToken, this.whenFalse); - }; - - ConditionalExpressionSyntax.prototype.withWhenFalse = function (whenFalse) { - return this.update(this.condition, this.questionToken, this.whenTrue, this.colonToken, whenFalse); - }; - - ConditionalExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.whenTrue.isTypeScriptSpecific()) { - return true; - } - if (this.whenFalse.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ConditionalExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConditionalExpressionSyntax = ConditionalExpressionSyntax; - - var ConstructSignatureSyntax = (function (_super) { - __extends(ConstructSignatureSyntax, _super); - function ConstructSignatureSyntax(newKeyword, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.callSignature = callSignature; - } - ConstructSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructSignature(this); - }; - - ConstructSignatureSyntax.prototype.kind = function () { - return 143 /* ConstructSignature */; - }; - - ConstructSignatureSyntax.prototype.childCount = function () { - return 2; - }; - - ConstructSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - ConstructSignatureSyntax.prototype.update = function (newKeyword, callSignature) { - if (this.newKeyword === newKeyword && this.callSignature === callSignature) { - return this; - } - - return new ConstructSignatureSyntax(newKeyword, callSignature, this.parsedInStrictMode()); - }; - - ConstructSignatureSyntax.create1 = function () { - return new ConstructSignatureSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), CallSignatureSyntax.create1(), false); - }; - - ConstructSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructSignatureSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.callSignature); - }; - - ConstructSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.newKeyword, callSignature); - }; - - ConstructSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructSignatureSyntax = ConstructSignatureSyntax; - - var MethodSignatureSyntax = (function (_super) { - __extends(MethodSignatureSyntax, _super); - function MethodSignatureSyntax(propertyName, questionToken, callSignature, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - } - MethodSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitMethodSignature(this); - }; - - MethodSignatureSyntax.prototype.kind = function () { - return 145 /* MethodSignature */; - }; - - MethodSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - MethodSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.callSignature; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MethodSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - MethodSignatureSyntax.prototype.update = function (propertyName, questionToken, callSignature) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.callSignature === callSignature) { - return this; - } - - return new MethodSignatureSyntax(propertyName, questionToken, callSignature, this.parsedInStrictMode()); - }; - - MethodSignatureSyntax.create = function (propertyName, callSignature) { - return new MethodSignatureSyntax(propertyName, null, callSignature, false); - }; - - MethodSignatureSyntax.create1 = function (propertyName) { - return new MethodSignatureSyntax(propertyName, null, CallSignatureSyntax.create1(), false); - }; - - MethodSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MethodSignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.callSignature); - }; - - MethodSignatureSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, this.questionToken, callSignature); - }; - - MethodSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return MethodSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MethodSignatureSyntax = MethodSignatureSyntax; - - var IndexSignatureSyntax = (function (_super) { - __extends(IndexSignatureSyntax, _super); - function IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBracketToken = openBracketToken; - this.parameter = parameter; - this.closeBracketToken = closeBracketToken; - this.typeAnnotation = typeAnnotation; - } - IndexSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexSignature(this); - }; - - IndexSignatureSyntax.prototype.kind = function () { - return 144 /* IndexSignature */; - }; - - IndexSignatureSyntax.prototype.childCount = function () { - return 4; - }; - - IndexSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBracketToken; - case 1: - return this.parameter; - case 2: - return this.closeBracketToken; - case 3: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - IndexSignatureSyntax.prototype.update = function (openBracketToken, parameter, closeBracketToken, typeAnnotation) { - if (this.openBracketToken === openBracketToken && this.parameter === parameter && this.closeBracketToken === closeBracketToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, typeAnnotation, this.parsedInStrictMode()); - }; - - IndexSignatureSyntax.create = function (openBracketToken, parameter, closeBracketToken) { - return new IndexSignatureSyntax(openBracketToken, parameter, closeBracketToken, null, false); - }; - - IndexSignatureSyntax.create1 = function (parameter) { - return new IndexSignatureSyntax(TypeScript.Syntax.token(74 /* OpenBracketToken */), parameter, TypeScript.Syntax.token(75 /* CloseBracketToken */), null, false); - }; - - IndexSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexSignatureSyntax.prototype.withOpenBracketToken = function (openBracketToken) { - return this.update(openBracketToken, this.parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withParameter = function (parameter) { - return this.update(this.openBracketToken, parameter, this.closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withCloseBracketToken = function (closeBracketToken) { - return this.update(this.openBracketToken, this.parameter, closeBracketToken, this.typeAnnotation); - }; - - IndexSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.openBracketToken, this.parameter, this.closeBracketToken, typeAnnotation); - }; - - IndexSignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexSignatureSyntax = IndexSignatureSyntax; - - var PropertySignatureSyntax = (function (_super) { - __extends(PropertySignatureSyntax, _super); - function PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - } - PropertySignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitPropertySignature(this); - }; - - PropertySignatureSyntax.prototype.kind = function () { - return 141 /* PropertySignature */; - }; - - PropertySignatureSyntax.prototype.childCount = function () { - return 3; - }; - - PropertySignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.questionToken; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - PropertySignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - PropertySignatureSyntax.prototype.update = function (propertyName, questionToken, typeAnnotation) { - if (this.propertyName === propertyName && this.questionToken === questionToken && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new PropertySignatureSyntax(propertyName, questionToken, typeAnnotation, this.parsedInStrictMode()); - }; - - PropertySignatureSyntax.create = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.create1 = function (propertyName) { - return new PropertySignatureSyntax(propertyName, null, null, false); - }; - - PropertySignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - PropertySignatureSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withQuestionToken = function (questionToken) { - return this.update(this.propertyName, questionToken, this.typeAnnotation); - }; - - PropertySignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.propertyName, this.questionToken, typeAnnotation); - }; - - PropertySignatureSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return PropertySignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.PropertySignatureSyntax = PropertySignatureSyntax; - - var CallSignatureSyntax = (function (_super) { - __extends(CallSignatureSyntax, _super); - function CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - } - CallSignatureSyntax.prototype.accept = function (visitor) { - return visitor.visitCallSignature(this); - }; - - CallSignatureSyntax.prototype.kind = function () { - return 142 /* CallSignature */; - }; - - CallSignatureSyntax.prototype.childCount = function () { - return 3; - }; - - CallSignatureSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeParameterList; - case 1: - return this.parameterList; - case 2: - return this.typeAnnotation; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CallSignatureSyntax.prototype.isTypeMember = function () { - return true; - }; - - CallSignatureSyntax.prototype.update = function (typeParameterList, parameterList, typeAnnotation) { - if (this.typeParameterList === typeParameterList && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation) { - return this; - } - - return new CallSignatureSyntax(typeParameterList, parameterList, typeAnnotation, this.parsedInStrictMode()); - }; - - CallSignatureSyntax.create = function (parameterList) { - return new CallSignatureSyntax(null, parameterList, null, false); - }; - - CallSignatureSyntax.create1 = function () { - return new CallSignatureSyntax(null, ParameterListSyntax.create1(), null, false); - }; - - CallSignatureSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CallSignatureSyntax.prototype.withTypeParameterList = function (typeParameterList) { - return this.update(typeParameterList, this.parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.typeParameterList, parameterList, this.typeAnnotation); - }; - - CallSignatureSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.typeParameterList, this.parameterList, typeAnnotation); - }; - - CallSignatureSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeParameterList !== null) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - return false; - }; - return CallSignatureSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CallSignatureSyntax = CallSignatureSyntax; - - var ParameterListSyntax = (function (_super) { - __extends(ParameterListSyntax, _super); - function ParameterListSyntax(openParenToken, parameters, closeParenToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openParenToken = openParenToken; - this.parameters = parameters; - this.closeParenToken = closeParenToken; - } - ParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitParameterList(this); - }; - - ParameterListSyntax.prototype.kind = function () { - return 227 /* ParameterList */; - }; - - ParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - ParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openParenToken; - case 1: - return this.parameters; - case 2: - return this.closeParenToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParameterListSyntax.prototype.update = function (openParenToken, parameters, closeParenToken) { - if (this.openParenToken === openParenToken && this.parameters === parameters && this.closeParenToken === closeParenToken) { - return this; - } - - return new ParameterListSyntax(openParenToken, parameters, closeParenToken, this.parsedInStrictMode()); - }; - - ParameterListSyntax.create = function (openParenToken, closeParenToken) { - return new ParameterListSyntax(openParenToken, TypeScript.Syntax.emptySeparatedList, closeParenToken, false); - }; - - ParameterListSyntax.create1 = function () { - return new ParameterListSyntax(TypeScript.Syntax.token(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(73 /* CloseParenToken */), false); - }; - - ParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ParameterListSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(openParenToken, this.parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameters = function (parameters) { - return this.update(this.openParenToken, parameters, this.closeParenToken); - }; - - ParameterListSyntax.prototype.withParameter = function (parameter) { - return this.withParameters(TypeScript.Syntax.separatedList([parameter])); - }; - - ParameterListSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.openParenToken, this.parameters, closeParenToken); - }; - - ParameterListSyntax.prototype.isTypeScriptSpecific = function () { - if (this.parameters.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ParameterListSyntax = ParameterListSyntax; - - var TypeParameterListSyntax = (function (_super) { - __extends(TypeParameterListSyntax, _super); - function TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.typeParameters = typeParameters; - this.greaterThanToken = greaterThanToken; - } - TypeParameterListSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameterList(this); - }; - - TypeParameterListSyntax.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - - TypeParameterListSyntax.prototype.childCount = function () { - return 3; - }; - - TypeParameterListSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.typeParameters; - case 2: - return this.greaterThanToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterListSyntax.prototype.update = function (lessThanToken, typeParameters, greaterThanToken) { - if (this.lessThanToken === lessThanToken && this.typeParameters === typeParameters && this.greaterThanToken === greaterThanToken) { - return this; - } - - return new TypeParameterListSyntax(lessThanToken, typeParameters, greaterThanToken, this.parsedInStrictMode()); - }; - - TypeParameterListSyntax.create = function (lessThanToken, greaterThanToken) { - return new TypeParameterListSyntax(lessThanToken, TypeScript.Syntax.emptySeparatedList, greaterThanToken, false); - }; - - TypeParameterListSyntax.create1 = function () { - return new TypeParameterListSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(81 /* GreaterThanToken */), false); - }; - - TypeParameterListSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterListSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameters = function (typeParameters) { - return this.update(this.lessThanToken, typeParameters, this.greaterThanToken); - }; - - TypeParameterListSyntax.prototype.withTypeParameter = function (typeParameter) { - return this.withTypeParameters(TypeScript.Syntax.separatedList([typeParameter])); - }; - - TypeParameterListSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.typeParameters, greaterThanToken); - }; - - TypeParameterListSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterListSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterListSyntax = TypeParameterListSyntax; - - var TypeParameterSyntax = (function (_super) { - __extends(TypeParameterSyntax, _super); - function TypeParameterSyntax(identifier, constraint, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.constraint = constraint; - } - TypeParameterSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeParameter(this); - }; - - TypeParameterSyntax.prototype.kind = function () { - return 238 /* TypeParameter */; - }; - - TypeParameterSyntax.prototype.childCount = function () { - return 2; - }; - - TypeParameterSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.constraint; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeParameterSyntax.prototype.update = function (identifier, constraint) { - if (this.identifier === identifier && this.constraint === constraint) { - return this; - } - - return new TypeParameterSyntax(identifier, constraint, this.parsedInStrictMode()); - }; - - TypeParameterSyntax.create = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.create1 = function (identifier) { - return new TypeParameterSyntax(identifier, null, false); - }; - - TypeParameterSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeParameterSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.constraint); - }; - - TypeParameterSyntax.prototype.withConstraint = function (constraint) { - return this.update(this.identifier, constraint); - }; - - TypeParameterSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return TypeParameterSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeParameterSyntax = TypeParameterSyntax; - - var ConstraintSyntax = (function (_super) { - __extends(ConstraintSyntax, _super); - function ConstraintSyntax(extendsKeyword, type, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.extendsKeyword = extendsKeyword; - this.type = type; - } - ConstraintSyntax.prototype.accept = function (visitor) { - return visitor.visitConstraint(this); - }; - - ConstraintSyntax.prototype.kind = function () { - return 239 /* Constraint */; - }; - - ConstraintSyntax.prototype.childCount = function () { - return 2; - }; - - ConstraintSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.extendsKeyword; - case 1: - return this.type; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstraintSyntax.prototype.update = function (extendsKeyword, type) { - if (this.extendsKeyword === extendsKeyword && this.type === type) { - return this; - } - - return new ConstraintSyntax(extendsKeyword, type, this.parsedInStrictMode()); - }; - - ConstraintSyntax.create1 = function (type) { - return new ConstraintSyntax(TypeScript.Syntax.token(48 /* ExtendsKeyword */), type, false); - }; - - ConstraintSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstraintSyntax.prototype.withExtendsKeyword = function (extendsKeyword) { - return this.update(extendsKeyword, this.type); - }; - - ConstraintSyntax.prototype.withType = function (type) { - return this.update(this.extendsKeyword, type); - }; - - ConstraintSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstraintSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstraintSyntax = ConstraintSyntax; - - var ElseClauseSyntax = (function (_super) { - __extends(ElseClauseSyntax, _super); - function ElseClauseSyntax(elseKeyword, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.elseKeyword = elseKeyword; - this.statement = statement; - } - ElseClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitElseClause(this); - }; - - ElseClauseSyntax.prototype.kind = function () { - return 235 /* ElseClause */; - }; - - ElseClauseSyntax.prototype.childCount = function () { - return 2; - }; - - ElseClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.elseKeyword; - case 1: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ElseClauseSyntax.prototype.update = function (elseKeyword, statement) { - if (this.elseKeyword === elseKeyword && this.statement === statement) { - return this; - } - - return new ElseClauseSyntax(elseKeyword, statement, this.parsedInStrictMode()); - }; - - ElseClauseSyntax.create1 = function (statement) { - return new ElseClauseSyntax(TypeScript.Syntax.token(23 /* ElseKeyword */), statement, false); - }; - - ElseClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ElseClauseSyntax.prototype.withElseKeyword = function (elseKeyword) { - return this.update(elseKeyword, this.statement); - }; - - ElseClauseSyntax.prototype.withStatement = function (statement) { - return this.update(this.elseKeyword, statement); - }; - - ElseClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ElseClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ElseClauseSyntax = ElseClauseSyntax; - - var IfStatementSyntax = (function (_super) { - __extends(IfStatementSyntax, _super); - function IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.ifKeyword = ifKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - this.elseClause = elseClause; - } - IfStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitIfStatement(this); - }; - - IfStatementSyntax.prototype.kind = function () { - return 147 /* IfStatement */; - }; - - IfStatementSyntax.prototype.childCount = function () { - return 6; - }; - - IfStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.ifKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - case 5: - return this.elseClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IfStatementSyntax.prototype.isStatement = function () { - return true; - }; - - IfStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - IfStatementSyntax.prototype.update = function (ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { - if (this.ifKeyword === ifKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement && this.elseClause === elseClause) { - return this; - } - - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause, this.parsedInStrictMode()); - }; - - IfStatementSyntax.create = function (ifKeyword, openParenToken, condition, closeParenToken, statement) { - return new IfStatementSyntax(ifKeyword, openParenToken, condition, closeParenToken, statement, null, false); - }; - - IfStatementSyntax.create1 = function (condition, statement) { - return new IfStatementSyntax(TypeScript.Syntax.token(28 /* IfKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, null, false); - }; - - IfStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IfStatementSyntax.prototype.withIfKeyword = function (ifKeyword) { - return this.update(ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.ifKeyword, openParenToken, this.condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.ifKeyword, this.openParenToken, condition, this.closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, closeParenToken, this.statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, statement, this.elseClause); - }; - - IfStatementSyntax.prototype.withElseClause = function (elseClause) { - return this.update(this.ifKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement, elseClause); - }; - - IfStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.elseClause !== null && this.elseClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return IfStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IfStatementSyntax = IfStatementSyntax; - - var ExpressionStatementSyntax = (function (_super) { - __extends(ExpressionStatementSyntax, _super); - function ExpressionStatementSyntax(expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ExpressionStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitExpressionStatement(this); - }; - - ExpressionStatementSyntax.prototype.kind = function () { - return 149 /* ExpressionStatement */; - }; - - ExpressionStatementSyntax.prototype.childCount = function () { - return 2; - }; - - ExpressionStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.expression; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ExpressionStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ExpressionStatementSyntax.prototype.update = function (expression, semicolonToken) { - if (this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ExpressionStatementSyntax(expression, semicolonToken, this.parsedInStrictMode()); - }; - - ExpressionStatementSyntax.create1 = function (expression) { - return new ExpressionStatementSyntax(expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ExpressionStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ExpressionStatementSyntax.prototype.withExpression = function (expression) { - return this.update(expression, this.semicolonToken); - }; - - ExpressionStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.expression, semicolonToken); - }; - - ExpressionStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ExpressionStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ExpressionStatementSyntax = ExpressionStatementSyntax; - - var ConstructorDeclarationSyntax = (function (_super) { - __extends(ConstructorDeclarationSyntax, _super); - function ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.constructorKeyword = constructorKeyword; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - ConstructorDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitConstructorDeclaration(this); - }; - - ConstructorDeclarationSyntax.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; - }; - - ConstructorDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - ConstructorDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.constructorKeyword; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ConstructorDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - ConstructorDeclarationSyntax.prototype.update = function (modifiers, constructorKeyword, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.constructorKeyword === constructorKeyword && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new ConstructorDeclarationSyntax(modifiers, constructorKeyword, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - ConstructorDeclarationSyntax.create = function (constructorKeyword, callSignature) { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, constructorKeyword, callSignature, null, null, false); - }; - - ConstructorDeclarationSyntax.create1 = function () { - return new ConstructorDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(62 /* ConstructorKeyword */), CallSignatureSyntax.create1(), null, null, false); - }; - - ConstructorDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ConstructorDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - ConstructorDeclarationSyntax.prototype.withConstructorKeyword = function (constructorKeyword) { - return this.update(this.modifiers, constructorKeyword, this.callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.constructorKeyword, callSignature, this.block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, block, this.semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.constructorKeyword, this.callSignature, this.block, semicolonToken); - }; - - ConstructorDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return ConstructorDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax; - - var MemberFunctionDeclarationSyntax = (function (_super) { - __extends(MemberFunctionDeclarationSyntax, _super); - function MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - this.semicolonToken = semicolonToken; - } - MemberFunctionDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberFunctionDeclaration(this); - }; - - MemberFunctionDeclarationSyntax.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; - }; - - MemberFunctionDeclarationSyntax.prototype.childCount = function () { - return 5; - }; - - MemberFunctionDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.propertyName; - case 2: - return this.callSignature; - case 3: - return this.block; - case 4: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberFunctionDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberFunctionDeclarationSyntax.prototype.update = function (modifiers, propertyName, callSignature, block, semicolonToken) { - if (this.modifiers === modifiers && this.propertyName === propertyName && this.callSignature === callSignature && this.block === block && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberFunctionDeclarationSyntax(modifiers, propertyName, callSignature, block, semicolonToken, this.parsedInStrictMode()); - }; - - MemberFunctionDeclarationSyntax.create = function (propertyName, callSignature) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, callSignature, null, null, false); - }; - - MemberFunctionDeclarationSyntax.create1 = function (propertyName) { - return new MemberFunctionDeclarationSyntax(TypeScript.Syntax.emptyList, propertyName, CallSignatureSyntax.create1(), null, null, false); - }; - - MemberFunctionDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberFunctionDeclarationSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, propertyName, this.callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.modifiers, this.propertyName, callSignature, this.block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.propertyName, this.callSignature, block, this.semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.propertyName, this.callSignature, this.block, semicolonToken); - }; - - MemberFunctionDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberFunctionDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax; - - var GetAccessorSyntax = (function (_super) { - __extends(GetAccessorSyntax, _super); - function GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.getKeyword = getKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - } - GetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitGetAccessor(this); - }; - - GetAccessorSyntax.prototype.kind = function () { - return 139 /* GetAccessor */; - }; - - GetAccessorSyntax.prototype.childCount = function () { - return 6; - }; - - GetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.getKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.typeAnnotation; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - GetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - GetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - GetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - GetAccessorSyntax.prototype.update = function (modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block) { - if (this.modifiers === modifiers && this.getKeyword === getKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.typeAnnotation === typeAnnotation && this.block === block) { - return this; - } - - return new GetAccessorSyntax(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block, this.parsedInStrictMode()); - }; - - GetAccessorSyntax.create = function (getKeyword, propertyName, parameterList, block) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, getKeyword, propertyName, parameterList, null, block, false); - }; - - GetAccessorSyntax.create1 = function (propertyName) { - return new GetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(64 /* GetKeyword */), propertyName, ParameterListSyntax.create1(), null, BlockSyntax.create1(), false); - }; - - GetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - GetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - GetAccessorSyntax.prototype.withGetKeyword = function (getKeyword) { - return this.update(this.modifiers, getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.getKeyword, propertyName, this.parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, parameterList, this.typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, typeAnnotation, this.block); - }; - - GetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.getKeyword, this.propertyName, this.parameterList, this.typeAnnotation, block); - }; - - GetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - if (this.modifiers.childCount() > 0) { - return true; - } - if (this.parameterList.isTypeScriptSpecific()) { - return true; - } - if (this.typeAnnotation !== null) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return GetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.GetAccessorSyntax = GetAccessorSyntax; - - var SetAccessorSyntax = (function (_super) { - __extends(SetAccessorSyntax, _super); - function SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.setKeyword = setKeyword; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - } - SetAccessorSyntax.prototype.accept = function (visitor) { - return visitor.visitSetAccessor(this); - }; - - SetAccessorSyntax.prototype.kind = function () { - return 140 /* SetAccessor */; - }; - - SetAccessorSyntax.prototype.childCount = function () { - return 5; - }; - - SetAccessorSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.setKeyword; - case 2: - return this.propertyName; - case 3: - return this.parameterList; - case 4: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SetAccessorSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - SetAccessorSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SetAccessorSyntax.prototype.isClassElement = function () { - return true; - }; - - SetAccessorSyntax.prototype.update = function (modifiers, setKeyword, propertyName, parameterList, block) { - if (this.modifiers === modifiers && this.setKeyword === setKeyword && this.propertyName === propertyName && this.parameterList === parameterList && this.block === block) { - return this; - } - - return new SetAccessorSyntax(modifiers, setKeyword, propertyName, parameterList, block, this.parsedInStrictMode()); - }; - - SetAccessorSyntax.create = function (setKeyword, propertyName, parameterList, block) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, setKeyword, propertyName, parameterList, block, false); - }; - - SetAccessorSyntax.create1 = function (propertyName) { - return new SetAccessorSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(68 /* SetKeyword */), propertyName, ParameterListSyntax.create1(), BlockSyntax.create1(), false); - }; - - SetAccessorSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SetAccessorSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - SetAccessorSyntax.prototype.withSetKeyword = function (setKeyword) { - return this.update(this.modifiers, setKeyword, this.propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(this.modifiers, this.setKeyword, propertyName, this.parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withParameterList = function (parameterList) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, parameterList, this.block); - }; - - SetAccessorSyntax.prototype.withBlock = function (block) { - return this.update(this.modifiers, this.setKeyword, this.propertyName, this.parameterList, block); - }; - - SetAccessorSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return SetAccessorSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SetAccessorSyntax = SetAccessorSyntax; - - var MemberVariableDeclarationSyntax = (function (_super) { - __extends(MemberVariableDeclarationSyntax, _super); - function MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - this.semicolonToken = semicolonToken; - } - MemberVariableDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitMemberVariableDeclaration(this); - }; - - MemberVariableDeclarationSyntax.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; - }; - - MemberVariableDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - MemberVariableDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.variableDeclarator; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - MemberVariableDeclarationSyntax.prototype.isMemberDeclaration = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - MemberVariableDeclarationSyntax.prototype.update = function (modifiers, variableDeclarator, semicolonToken) { - if (this.modifiers === modifiers && this.variableDeclarator === variableDeclarator && this.semicolonToken === semicolonToken) { - return this; - } - - return new MemberVariableDeclarationSyntax(modifiers, variableDeclarator, semicolonToken, this.parsedInStrictMode()); - }; - - MemberVariableDeclarationSyntax.create = function (variableDeclarator, semicolonToken) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, semicolonToken, false); - }; - - MemberVariableDeclarationSyntax.create1 = function (variableDeclarator) { - return new MemberVariableDeclarationSyntax(TypeScript.Syntax.emptyList, variableDeclarator, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - MemberVariableDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - MemberVariableDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - MemberVariableDeclarationSyntax.prototype.withVariableDeclarator = function (variableDeclarator) { - return this.update(this.modifiers, variableDeclarator, this.semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.variableDeclarator, semicolonToken); - }; - - MemberVariableDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return MemberVariableDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax; - - var IndexMemberDeclarationSyntax = (function (_super) { - __extends(IndexMemberDeclarationSyntax, _super); - function IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.indexSignature = indexSignature; - this.semicolonToken = semicolonToken; - } - IndexMemberDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitIndexMemberDeclaration(this); - }; - - IndexMemberDeclarationSyntax.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; - }; - - IndexMemberDeclarationSyntax.prototype.childCount = function () { - return 3; - }; - - IndexMemberDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.indexSignature; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - IndexMemberDeclarationSyntax.prototype.isClassElement = function () { - return true; - }; - - IndexMemberDeclarationSyntax.prototype.update = function (modifiers, indexSignature, semicolonToken) { - if (this.modifiers === modifiers && this.indexSignature === indexSignature && this.semicolonToken === semicolonToken) { - return this; - } - - return new IndexMemberDeclarationSyntax(modifiers, indexSignature, semicolonToken, this.parsedInStrictMode()); - }; - - IndexMemberDeclarationSyntax.create = function (indexSignature, semicolonToken) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, semicolonToken, false); - }; - - IndexMemberDeclarationSyntax.create1 = function (indexSignature) { - return new IndexMemberDeclarationSyntax(TypeScript.Syntax.emptyList, indexSignature, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - IndexMemberDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - IndexMemberDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - IndexMemberDeclarationSyntax.prototype.withIndexSignature = function (indexSignature) { - return this.update(this.modifiers, indexSignature, this.semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.modifiers, this.indexSignature, semicolonToken); - }; - - IndexMemberDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return IndexMemberDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax; - - var ThrowStatementSyntax = (function (_super) { - __extends(ThrowStatementSyntax, _super); - function ThrowStatementSyntax(throwKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.throwKeyword = throwKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ThrowStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitThrowStatement(this); - }; - - ThrowStatementSyntax.prototype.kind = function () { - return 157 /* ThrowStatement */; - }; - - ThrowStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ThrowStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.throwKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ThrowStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ThrowStatementSyntax.prototype.update = function (throwKeyword, expression, semicolonToken) { - if (this.throwKeyword === throwKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ThrowStatementSyntax(throwKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ThrowStatementSyntax.create1 = function (expression) { - return new ThrowStatementSyntax(TypeScript.Syntax.token(36 /* ThrowKeyword */), expression, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ThrowStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ThrowStatementSyntax.prototype.withThrowKeyword = function (throwKeyword) { - return this.update(throwKeyword, this.expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.throwKeyword, expression, this.semicolonToken); - }; - - ThrowStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.throwKeyword, this.expression, semicolonToken); - }; - - ThrowStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ThrowStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ThrowStatementSyntax = ThrowStatementSyntax; - - var ReturnStatementSyntax = (function (_super) { - __extends(ReturnStatementSyntax, _super); - function ReturnStatementSyntax(returnKeyword, expression, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.returnKeyword = returnKeyword; - this.expression = expression; - this.semicolonToken = semicolonToken; - } - ReturnStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitReturnStatement(this); - }; - - ReturnStatementSyntax.prototype.kind = function () { - return 150 /* ReturnStatement */; - }; - - ReturnStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ReturnStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.returnKeyword; - case 1: - return this.expression; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ReturnStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ReturnStatementSyntax.prototype.update = function (returnKeyword, expression, semicolonToken) { - if (this.returnKeyword === returnKeyword && this.expression === expression && this.semicolonToken === semicolonToken) { - return this; - } - - return new ReturnStatementSyntax(returnKeyword, expression, semicolonToken, this.parsedInStrictMode()); - }; - - ReturnStatementSyntax.create = function (returnKeyword, semicolonToken) { - return new ReturnStatementSyntax(returnKeyword, null, semicolonToken, false); - }; - - ReturnStatementSyntax.create1 = function () { - return new ReturnStatementSyntax(TypeScript.Syntax.token(33 /* ReturnKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ReturnStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ReturnStatementSyntax.prototype.withReturnKeyword = function (returnKeyword) { - return this.update(returnKeyword, this.expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.returnKeyword, expression, this.semicolonToken); - }; - - ReturnStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.returnKeyword, this.expression, semicolonToken); - }; - - ReturnStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression !== null && this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ReturnStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ReturnStatementSyntax = ReturnStatementSyntax; - - var ObjectCreationExpressionSyntax = (function (_super) { - __extends(ObjectCreationExpressionSyntax, _super); - function ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.newKeyword = newKeyword; - this.expression = expression; - this.argumentList = argumentList; - } - ObjectCreationExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectCreationExpression(this); - }; - - ObjectCreationExpressionSyntax.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; - }; - - ObjectCreationExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectCreationExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.newKeyword; - case 1: - return this.expression; - case 2: - return this.argumentList; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectCreationExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectCreationExpressionSyntax.prototype.update = function (newKeyword, expression, argumentList) { - if (this.newKeyword === newKeyword && this.expression === expression && this.argumentList === argumentList) { - return this; - } - - return new ObjectCreationExpressionSyntax(newKeyword, expression, argumentList, this.parsedInStrictMode()); - }; - - ObjectCreationExpressionSyntax.create = function (newKeyword, expression) { - return new ObjectCreationExpressionSyntax(newKeyword, expression, null, false); - }; - - ObjectCreationExpressionSyntax.create1 = function (expression) { - return new ObjectCreationExpressionSyntax(TypeScript.Syntax.token(31 /* NewKeyword */), expression, null, false); - }; - - ObjectCreationExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectCreationExpressionSyntax.prototype.withNewKeyword = function (newKeyword) { - return this.update(newKeyword, this.expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.newKeyword, expression, this.argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.withArgumentList = function (argumentList) { - return this.update(this.newKeyword, this.expression, argumentList); - }; - - ObjectCreationExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.argumentList !== null && this.argumentList.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectCreationExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax; - - var SwitchStatementSyntax = (function (_super) { - __extends(SwitchStatementSyntax, _super); - function SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.switchKeyword = switchKeyword; - this.openParenToken = openParenToken; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.openBraceToken = openBraceToken; - this.switchClauses = switchClauses; - this.closeBraceToken = closeBraceToken; - } - SwitchStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitSwitchStatement(this); - }; - - SwitchStatementSyntax.prototype.kind = function () { - return 151 /* SwitchStatement */; - }; - - SwitchStatementSyntax.prototype.childCount = function () { - return 7; - }; - - SwitchStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.switchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.expression; - case 3: - return this.closeParenToken; - case 4: - return this.openBraceToken; - case 5: - return this.switchClauses; - case 6: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SwitchStatementSyntax.prototype.isStatement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - SwitchStatementSyntax.prototype.update = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { - if (this.switchKeyword === switchKeyword && this.openParenToken === openParenToken && this.expression === expression && this.closeParenToken === closeParenToken && this.openBraceToken === openBraceToken && this.switchClauses === switchClauses && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken, this.parsedInStrictMode()); - }; - - SwitchStatementSyntax.create = function (switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, closeBraceToken) { - return new SwitchStatementSyntax(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, TypeScript.Syntax.emptyList, closeBraceToken, false); - }; - - SwitchStatementSyntax.create1 = function (expression) { - return new SwitchStatementSyntax(TypeScript.Syntax.token(34 /* SwitchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptyList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - SwitchStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SwitchStatementSyntax.prototype.withSwitchKeyword = function (switchKeyword) { - return this.update(switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.switchKeyword, openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.switchKeyword, this.openParenToken, expression, this.closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, closeParenToken, this.openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, openBraceToken, this.switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClauses = function (switchClauses) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, switchClauses, this.closeBraceToken); - }; - - SwitchStatementSyntax.prototype.withSwitchClause = function (switchClause) { - return this.withSwitchClauses(TypeScript.Syntax.list([switchClause])); - }; - - SwitchStatementSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.switchKeyword, this.openParenToken, this.expression, this.closeParenToken, this.openBraceToken, this.switchClauses, closeBraceToken); - }; - - SwitchStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.switchClauses.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SwitchStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SwitchStatementSyntax = SwitchStatementSyntax; - - var CaseSwitchClauseSyntax = (function (_super) { - __extends(CaseSwitchClauseSyntax, _super); - function CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.caseKeyword = caseKeyword; - this.expression = expression; - this.colonToken = colonToken; - this.statements = statements; - } - CaseSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCaseSwitchClause(this); - }; - - CaseSwitchClauseSyntax.prototype.kind = function () { - return 233 /* CaseSwitchClause */; - }; - - CaseSwitchClauseSyntax.prototype.childCount = function () { - return 4; - }; - - CaseSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.caseKeyword; - case 1: - return this.expression; - case 2: - return this.colonToken; - case 3: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CaseSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - CaseSwitchClauseSyntax.prototype.update = function (caseKeyword, expression, colonToken, statements) { - if (this.caseKeyword === caseKeyword && this.expression === expression && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, statements, this.parsedInStrictMode()); - }; - - CaseSwitchClauseSyntax.create = function (caseKeyword, expression, colonToken) { - return new CaseSwitchClauseSyntax(caseKeyword, expression, colonToken, TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.create1 = function (expression) { - return new CaseSwitchClauseSyntax(TypeScript.Syntax.token(16 /* CaseKeyword */), expression, TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - CaseSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CaseSwitchClauseSyntax.prototype.withCaseKeyword = function (caseKeyword) { - return this.update(caseKeyword, this.expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withExpression = function (expression) { - return this.update(this.caseKeyword, expression, this.colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.caseKeyword, this.expression, colonToken, this.statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.caseKeyword, this.expression, this.colonToken, statements); - }; - - CaseSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - CaseSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CaseSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax; - - var DefaultSwitchClauseSyntax = (function (_super) { - __extends(DefaultSwitchClauseSyntax, _super); - function DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.defaultKeyword = defaultKeyword; - this.colonToken = colonToken; - this.statements = statements; - } - DefaultSwitchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitDefaultSwitchClause(this); - }; - - DefaultSwitchClauseSyntax.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; - }; - - DefaultSwitchClauseSyntax.prototype.childCount = function () { - return 3; - }; - - DefaultSwitchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.defaultKeyword; - case 1: - return this.colonToken; - case 2: - return this.statements; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DefaultSwitchClauseSyntax.prototype.isSwitchClause = function () { - return true; - }; - - DefaultSwitchClauseSyntax.prototype.update = function (defaultKeyword, colonToken, statements) { - if (this.defaultKeyword === defaultKeyword && this.colonToken === colonToken && this.statements === statements) { - return this; - } - - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, statements, this.parsedInStrictMode()); - }; - - DefaultSwitchClauseSyntax.create = function (defaultKeyword, colonToken) { - return new DefaultSwitchClauseSyntax(defaultKeyword, colonToken, TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.create1 = function () { - return new DefaultSwitchClauseSyntax(TypeScript.Syntax.token(20 /* DefaultKeyword */), TypeScript.Syntax.token(106 /* ColonToken */), TypeScript.Syntax.emptyList, false); - }; - - DefaultSwitchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DefaultSwitchClauseSyntax.prototype.withDefaultKeyword = function (defaultKeyword) { - return this.update(defaultKeyword, this.colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.defaultKeyword, colonToken, this.statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatements = function (statements) { - return this.update(this.defaultKeyword, this.colonToken, statements); - }; - - DefaultSwitchClauseSyntax.prototype.withStatement = function (statement) { - return this.withStatements(TypeScript.Syntax.list([statement])); - }; - - DefaultSwitchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statements.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DefaultSwitchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax; - - var BreakStatementSyntax = (function (_super) { - __extends(BreakStatementSyntax, _super); - function BreakStatementSyntax(breakKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.breakKeyword = breakKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - BreakStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitBreakStatement(this); - }; - - BreakStatementSyntax.prototype.kind = function () { - return 152 /* BreakStatement */; - }; - - BreakStatementSyntax.prototype.childCount = function () { - return 3; - }; - - BreakStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.breakKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - BreakStatementSyntax.prototype.isStatement = function () { - return true; - }; - - BreakStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - BreakStatementSyntax.prototype.update = function (breakKeyword, identifier, semicolonToken) { - if (this.breakKeyword === breakKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new BreakStatementSyntax(breakKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - BreakStatementSyntax.create = function (breakKeyword, semicolonToken) { - return new BreakStatementSyntax(breakKeyword, null, semicolonToken, false); - }; - - BreakStatementSyntax.create1 = function () { - return new BreakStatementSyntax(TypeScript.Syntax.token(15 /* BreakKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - BreakStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - BreakStatementSyntax.prototype.withBreakKeyword = function (breakKeyword) { - return this.update(breakKeyword, this.identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.breakKeyword, identifier, this.semicolonToken); - }; - - BreakStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.breakKeyword, this.identifier, semicolonToken); - }; - - BreakStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return BreakStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.BreakStatementSyntax = BreakStatementSyntax; - - var ContinueStatementSyntax = (function (_super) { - __extends(ContinueStatementSyntax, _super); - function ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.continueKeyword = continueKeyword; - this.identifier = identifier; - this.semicolonToken = semicolonToken; - } - ContinueStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitContinueStatement(this); - }; - - ContinueStatementSyntax.prototype.kind = function () { - return 153 /* ContinueStatement */; - }; - - ContinueStatementSyntax.prototype.childCount = function () { - return 3; - }; - - ContinueStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.continueKeyword; - case 1: - return this.identifier; - case 2: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ContinueStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ContinueStatementSyntax.prototype.update = function (continueKeyword, identifier, semicolonToken) { - if (this.continueKeyword === continueKeyword && this.identifier === identifier && this.semicolonToken === semicolonToken) { - return this; - } - - return new ContinueStatementSyntax(continueKeyword, identifier, semicolonToken, this.parsedInStrictMode()); - }; - - ContinueStatementSyntax.create = function (continueKeyword, semicolonToken) { - return new ContinueStatementSyntax(continueKeyword, null, semicolonToken, false); - }; - - ContinueStatementSyntax.create1 = function () { - return new ContinueStatementSyntax(TypeScript.Syntax.token(18 /* ContinueKeyword */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - ContinueStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ContinueStatementSyntax.prototype.withContinueKeyword = function (continueKeyword) { - return this.update(continueKeyword, this.identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.continueKeyword, identifier, this.semicolonToken); - }; - - ContinueStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.continueKeyword, this.identifier, semicolonToken); - }; - - ContinueStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return ContinueStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ContinueStatementSyntax = ContinueStatementSyntax; - - var ForStatementSyntax = (function (_super) { - __extends(ForStatementSyntax, _super); - function ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.firstSemicolonToken = firstSemicolonToken; - this.condition = condition; - this.secondSemicolonToken = secondSemicolonToken; - this.incrementor = incrementor; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForStatement(this); - }; - - ForStatementSyntax.prototype.kind = function () { - return 154 /* ForStatement */; - }; - - ForStatementSyntax.prototype.childCount = function () { - return 10; - }; - - ForStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.initializer; - case 4: - return this.firstSemicolonToken; - case 5: - return this.condition; - case 6: - return this.secondSemicolonToken; - case 7: - return this.incrementor; - case 8: - return this.closeParenToken; - case 9: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.initializer === initializer && this.firstSemicolonToken === firstSemicolonToken && this.condition === condition && this.secondSemicolonToken === secondSemicolonToken && this.incrementor === incrementor && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForStatementSyntax(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForStatementSyntax.create = function (forKeyword, openParenToken, firstSemicolonToken, secondSemicolonToken, closeParenToken, statement) { - return new ForStatementSyntax(forKeyword, openParenToken, null, null, firstSemicolonToken, null, secondSemicolonToken, null, closeParenToken, statement, false); - }; - - ForStatementSyntax.create1 = function (statement) { - return new ForStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(78 /* SemicolonToken */), null, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withInitializer = function (initializer) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withFirstSemicolonToken = function (firstSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withSecondSemicolonToken = function (secondSemicolonToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, secondSemicolonToken, this.incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withIncrementor = function (incrementor) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, incrementor, this.closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, closeParenToken, this.statement); - }; - - ForStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.initializer, this.firstSemicolonToken, this.condition, this.secondSemicolonToken, this.incrementor, this.closeParenToken, statement); - }; - - ForStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.initializer !== null && this.initializer.isTypeScriptSpecific()) { - return true; - } - if (this.condition !== null && this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.incrementor !== null && this.incrementor.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForStatementSyntax = ForStatementSyntax; - - var ForInStatementSyntax = (function (_super) { - __extends(ForInStatementSyntax, _super); - function ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.forKeyword = forKeyword; - this.openParenToken = openParenToken; - this.variableDeclaration = variableDeclaration; - this.left = left; - this.inKeyword = inKeyword; - this.expression = expression; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - ForInStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitForInStatement(this); - }; - - ForInStatementSyntax.prototype.kind = function () { - return 155 /* ForInStatement */; - }; - - ForInStatementSyntax.prototype.childCount = function () { - return 8; - }; - - ForInStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.forKeyword; - case 1: - return this.openParenToken; - case 2: - return this.variableDeclaration; - case 3: - return this.left; - case 4: - return this.inKeyword; - case 5: - return this.expression; - case 6: - return this.closeParenToken; - case 7: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ForInStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isStatement = function () { - return true; - }; - - ForInStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - ForInStatementSyntax.prototype.update = function (forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { - if (this.forKeyword === forKeyword && this.openParenToken === openParenToken && this.variableDeclaration === variableDeclaration && this.left === left && this.inKeyword === inKeyword && this.expression === expression && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new ForInStatementSyntax(forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement, this.parsedInStrictMode()); - }; - - ForInStatementSyntax.create = function (forKeyword, openParenToken, inKeyword, expression, closeParenToken, statement) { - return new ForInStatementSyntax(forKeyword, openParenToken, null, null, inKeyword, expression, closeParenToken, statement, false); - }; - - ForInStatementSyntax.create1 = function (expression, statement) { - return new ForInStatementSyntax(TypeScript.Syntax.token(26 /* ForKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), null, null, TypeScript.Syntax.token(29 /* InKeyword */), expression, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - ForInStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ForInStatementSyntax.prototype.withForKeyword = function (forKeyword) { - return this.update(forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.forKeyword, openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withVariableDeclaration = function (variableDeclaration) { - return this.update(this.forKeyword, this.openParenToken, variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withLeft = function (left) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, left, this.inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withInKeyword = function (inKeyword) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, inKeyword, this.expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withExpression = function (expression) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, expression, this.closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, closeParenToken, this.statement); - }; - - ForInStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.forKeyword, this.openParenToken, this.variableDeclaration, this.left, this.inKeyword, this.expression, this.closeParenToken, statement); - }; - - ForInStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.variableDeclaration !== null && this.variableDeclaration.isTypeScriptSpecific()) { - return true; - } - if (this.left !== null && this.left.isTypeScriptSpecific()) { - return true; - } - if (this.expression.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ForInStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ForInStatementSyntax = ForInStatementSyntax; - - var WhileStatementSyntax = (function (_super) { - __extends(WhileStatementSyntax, _super); - function WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WhileStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWhileStatement(this); - }; - - WhileStatementSyntax.prototype.kind = function () { - return 158 /* WhileStatement */; - }; - - WhileStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WhileStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.whileKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WhileStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WhileStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WhileStatementSyntax.prototype.update = function (whileKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WhileStatementSyntax(whileKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WhileStatementSyntax.create1 = function (condition, statement) { - return new WhileStatementSyntax(TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WhileStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WhileStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WhileStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WhileStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WhileStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WhileStatementSyntax = WhileStatementSyntax; - - var WithStatementSyntax = (function (_super) { - __extends(WithStatementSyntax, _super); - function WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.withKeyword = withKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.statement = statement; - } - WithStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitWithStatement(this); - }; - - WithStatementSyntax.prototype.kind = function () { - return 163 /* WithStatement */; - }; - - WithStatementSyntax.prototype.childCount = function () { - return 5; - }; - - WithStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.withKeyword; - case 1: - return this.openParenToken; - case 2: - return this.condition; - case 3: - return this.closeParenToken; - case 4: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - WithStatementSyntax.prototype.isStatement = function () { - return true; - }; - - WithStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - WithStatementSyntax.prototype.update = function (withKeyword, openParenToken, condition, closeParenToken, statement) { - if (this.withKeyword === withKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.statement === statement) { - return this; - } - - return new WithStatementSyntax(withKeyword, openParenToken, condition, closeParenToken, statement, this.parsedInStrictMode()); - }; - - WithStatementSyntax.create1 = function (condition, statement) { - return new WithStatementSyntax(TypeScript.Syntax.token(43 /* WithKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), statement, false); - }; - - WithStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - WithStatementSyntax.prototype.withWithKeyword = function (withKeyword) { - return this.update(withKeyword, this.openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.withKeyword, openParenToken, this.condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.withKeyword, this.openParenToken, condition, this.closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.withKeyword, this.openParenToken, this.condition, closeParenToken, this.statement); - }; - - WithStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.withKeyword, this.openParenToken, this.condition, this.closeParenToken, statement); - }; - - WithStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.condition.isTypeScriptSpecific()) { - return true; - } - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return WithStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.WithStatementSyntax = WithStatementSyntax; - - var EnumDeclarationSyntax = (function (_super) { - __extends(EnumDeclarationSyntax, _super); - function EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.modifiers = modifiers; - this.enumKeyword = enumKeyword; - this.identifier = identifier; - this.openBraceToken = openBraceToken; - this.enumElements = enumElements; - this.closeBraceToken = closeBraceToken; - } - EnumDeclarationSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumDeclaration(this); - }; - - EnumDeclarationSyntax.prototype.kind = function () { - return 132 /* EnumDeclaration */; - }; - - EnumDeclarationSyntax.prototype.childCount = function () { - return 6; - }; - - EnumDeclarationSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.modifiers; - case 1: - return this.enumKeyword; - case 2: - return this.identifier; - case 3: - return this.openBraceToken; - case 4: - return this.enumElements; - case 5: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumDeclarationSyntax.prototype.isModuleElement = function () { - return true; - }; - - EnumDeclarationSyntax.prototype.update = function (modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { - if (this.modifiers === modifiers && this.enumKeyword === enumKeyword && this.identifier === identifier && this.openBraceToken === openBraceToken && this.enumElements === enumElements && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new EnumDeclarationSyntax(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken, this.parsedInStrictMode()); - }; - - EnumDeclarationSyntax.create = function (enumKeyword, identifier, openBraceToken, closeBraceToken) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, enumKeyword, identifier, openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - EnumDeclarationSyntax.create1 = function (identifier) { - return new EnumDeclarationSyntax(TypeScript.Syntax.emptyList, TypeScript.Syntax.token(46 /* EnumKeyword */), identifier, TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - EnumDeclarationSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumDeclarationSyntax.prototype.withModifiers = function (modifiers) { - return this.update(modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withModifier = function (modifier) { - return this.withModifiers(TypeScript.Syntax.list([modifier])); - }; - - EnumDeclarationSyntax.prototype.withEnumKeyword = function (enumKeyword) { - return this.update(this.modifiers, enumKeyword, this.identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.modifiers, this.enumKeyword, identifier, this.openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, openBraceToken, this.enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElements = function (enumElements) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, enumElements, this.closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.withEnumElement = function (enumElement) { - return this.withEnumElements(TypeScript.Syntax.separatedList([enumElement])); - }; - - EnumDeclarationSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.modifiers, this.enumKeyword, this.identifier, this.openBraceToken, this.enumElements, closeBraceToken); - }; - - EnumDeclarationSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return EnumDeclarationSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumDeclarationSyntax = EnumDeclarationSyntax; - - var EnumElementSyntax = (function (_super) { - __extends(EnumElementSyntax, _super); - function EnumElementSyntax(propertyName, equalsValueClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - } - EnumElementSyntax.prototype.accept = function (visitor) { - return visitor.visitEnumElement(this); - }; - - EnumElementSyntax.prototype.kind = function () { - return 243 /* EnumElement */; - }; - - EnumElementSyntax.prototype.childCount = function () { - return 2; - }; - - EnumElementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.equalsValueClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EnumElementSyntax.prototype.update = function (propertyName, equalsValueClause) { - if (this.propertyName === propertyName && this.equalsValueClause === equalsValueClause) { - return this; - } - - return new EnumElementSyntax(propertyName, equalsValueClause, this.parsedInStrictMode()); - }; - - EnumElementSyntax.create = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.create1 = function (propertyName) { - return new EnumElementSyntax(propertyName, null, false); - }; - - EnumElementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EnumElementSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.equalsValueClause); - }; - - EnumElementSyntax.prototype.withEqualsValueClause = function (equalsValueClause) { - return this.update(this.propertyName, equalsValueClause); - }; - - EnumElementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.equalsValueClause !== null && this.equalsValueClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return EnumElementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EnumElementSyntax = EnumElementSyntax; - - var CastExpressionSyntax = (function (_super) { - __extends(CastExpressionSyntax, _super); - function CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.lessThanToken = lessThanToken; - this.type = type; - this.greaterThanToken = greaterThanToken; - this.expression = expression; - } - CastExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitCastExpression(this); - }; - - CastExpressionSyntax.prototype.kind = function () { - return 220 /* CastExpression */; - }; - - CastExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - CastExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.lessThanToken; - case 1: - return this.type; - case 2: - return this.greaterThanToken; - case 3: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CastExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - CastExpressionSyntax.prototype.update = function (lessThanToken, type, greaterThanToken, expression) { - if (this.lessThanToken === lessThanToken && this.type === type && this.greaterThanToken === greaterThanToken && this.expression === expression) { - return this; - } - - return new CastExpressionSyntax(lessThanToken, type, greaterThanToken, expression, this.parsedInStrictMode()); - }; - - CastExpressionSyntax.create1 = function (type, expression) { - return new CastExpressionSyntax(TypeScript.Syntax.token(80 /* LessThanToken */), type, TypeScript.Syntax.token(81 /* GreaterThanToken */), expression, false); - }; - - CastExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CastExpressionSyntax.prototype.withLessThanToken = function (lessThanToken) { - return this.update(lessThanToken, this.type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withType = function (type) { - return this.update(this.lessThanToken, type, this.greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withGreaterThanToken = function (greaterThanToken) { - return this.update(this.lessThanToken, this.type, greaterThanToken, this.expression); - }; - - CastExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.lessThanToken, this.type, this.greaterThanToken, expression); - }; - - CastExpressionSyntax.prototype.isTypeScriptSpecific = function () { - return true; - }; - return CastExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CastExpressionSyntax = CastExpressionSyntax; - - var ObjectLiteralExpressionSyntax = (function (_super) { - __extends(ObjectLiteralExpressionSyntax, _super); - function ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.openBraceToken = openBraceToken; - this.propertyAssignments = propertyAssignments; - this.closeBraceToken = closeBraceToken; - } - ObjectLiteralExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitObjectLiteralExpression(this); - }; - - ObjectLiteralExpressionSyntax.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; - }; - - ObjectLiteralExpressionSyntax.prototype.childCount = function () { - return 3; - }; - - ObjectLiteralExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.openBraceToken; - case 1: - return this.propertyAssignments; - case 2: - return this.closeBraceToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ObjectLiteralExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - ObjectLiteralExpressionSyntax.prototype.update = function (openBraceToken, propertyAssignments, closeBraceToken) { - if (this.openBraceToken === openBraceToken && this.propertyAssignments === propertyAssignments && this.closeBraceToken === closeBraceToken) { - return this; - } - - return new ObjectLiteralExpressionSyntax(openBraceToken, propertyAssignments, closeBraceToken, this.parsedInStrictMode()); - }; - - ObjectLiteralExpressionSyntax.create = function (openBraceToken, closeBraceToken) { - return new ObjectLiteralExpressionSyntax(openBraceToken, TypeScript.Syntax.emptySeparatedList, closeBraceToken, false); - }; - - ObjectLiteralExpressionSyntax.create1 = function () { - return new ObjectLiteralExpressionSyntax(TypeScript.Syntax.token(70 /* OpenBraceToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.token(71 /* CloseBraceToken */), false); - }; - - ObjectLiteralExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - ObjectLiteralExpressionSyntax.prototype.withOpenBraceToken = function (openBraceToken) { - return this.update(openBraceToken, this.propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignments = function (propertyAssignments) { - return this.update(this.openBraceToken, propertyAssignments, this.closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.withPropertyAssignment = function (propertyAssignment) { - return this.withPropertyAssignments(TypeScript.Syntax.separatedList([propertyAssignment])); - }; - - ObjectLiteralExpressionSyntax.prototype.withCloseBraceToken = function (closeBraceToken) { - return this.update(this.openBraceToken, this.propertyAssignments, closeBraceToken); - }; - - ObjectLiteralExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.propertyAssignments.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return ObjectLiteralExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax; - - var SimplePropertyAssignmentSyntax = (function (_super) { - __extends(SimplePropertyAssignmentSyntax, _super); - function SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.colonToken = colonToken; - this.expression = expression; - } - SimplePropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitSimplePropertyAssignment(this); - }; - - SimplePropertyAssignmentSyntax.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; - }; - - SimplePropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - SimplePropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.colonToken; - case 2: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SimplePropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - SimplePropertyAssignmentSyntax.prototype.update = function (propertyName, colonToken, expression) { - if (this.propertyName === propertyName && this.colonToken === colonToken && this.expression === expression) { - return this; - } - - return new SimplePropertyAssignmentSyntax(propertyName, colonToken, expression, this.parsedInStrictMode()); - }; - - SimplePropertyAssignmentSyntax.create1 = function (propertyName, expression) { - return new SimplePropertyAssignmentSyntax(propertyName, TypeScript.Syntax.token(106 /* ColonToken */), expression, false); - }; - - SimplePropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - SimplePropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.propertyName, colonToken, this.expression); - }; - - SimplePropertyAssignmentSyntax.prototype.withExpression = function (expression) { - return this.update(this.propertyName, this.colonToken, expression); - }; - - SimplePropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return SimplePropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax; - - var FunctionPropertyAssignmentSyntax = (function (_super) { - __extends(FunctionPropertyAssignmentSyntax, _super); - function FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - } - FunctionPropertyAssignmentSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionPropertyAssignment(this); - }; - - FunctionPropertyAssignmentSyntax.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; - }; - - FunctionPropertyAssignmentSyntax.prototype.childCount = function () { - return 3; - }; - - FunctionPropertyAssignmentSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.propertyName; - case 1: - return this.callSignature; - case 2: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionPropertyAssignmentSyntax.prototype.isPropertyAssignment = function () { - return true; - }; - - FunctionPropertyAssignmentSyntax.prototype.update = function (propertyName, callSignature, block) { - if (this.propertyName === propertyName && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionPropertyAssignmentSyntax(propertyName, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionPropertyAssignmentSyntax.create1 = function (propertyName) { - return new FunctionPropertyAssignmentSyntax(propertyName, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionPropertyAssignmentSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionPropertyAssignmentSyntax.prototype.withPropertyName = function (propertyName) { - return this.update(propertyName, this.callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.propertyName, callSignature, this.block); - }; - - FunctionPropertyAssignmentSyntax.prototype.withBlock = function (block) { - return this.update(this.propertyName, this.callSignature, block); - }; - - FunctionPropertyAssignmentSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionPropertyAssignmentSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax; - - var FunctionExpressionSyntax = (function (_super) { - __extends(FunctionExpressionSyntax, _super); - function FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.functionKeyword = functionKeyword; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - } - FunctionExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitFunctionExpression(this); - }; - - FunctionExpressionSyntax.prototype.kind = function () { - return 222 /* FunctionExpression */; - }; - - FunctionExpressionSyntax.prototype.childCount = function () { - return 4; - }; - - FunctionExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.functionKeyword; - case 1: - return this.identifier; - case 2: - return this.callSignature; - case 3: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FunctionExpressionSyntax.prototype.isPrimaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isMemberExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isPostfixExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - FunctionExpressionSyntax.prototype.update = function (functionKeyword, identifier, callSignature, block) { - if (this.functionKeyword === functionKeyword && this.identifier === identifier && this.callSignature === callSignature && this.block === block) { - return this; - } - - return new FunctionExpressionSyntax(functionKeyword, identifier, callSignature, block, this.parsedInStrictMode()); - }; - - FunctionExpressionSyntax.create = function (functionKeyword, callSignature, block) { - return new FunctionExpressionSyntax(functionKeyword, null, callSignature, block, false); - }; - - FunctionExpressionSyntax.create1 = function () { - return new FunctionExpressionSyntax(TypeScript.Syntax.token(27 /* FunctionKeyword */), null, CallSignatureSyntax.create1(), BlockSyntax.create1(), false); - }; - - FunctionExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FunctionExpressionSyntax.prototype.withFunctionKeyword = function (functionKeyword) { - return this.update(functionKeyword, this.identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.functionKeyword, identifier, this.callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withCallSignature = function (callSignature) { - return this.update(this.functionKeyword, this.identifier, callSignature, this.block); - }; - - FunctionExpressionSyntax.prototype.withBlock = function (block) { - return this.update(this.functionKeyword, this.identifier, this.callSignature, block); - }; - - FunctionExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.callSignature.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FunctionExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FunctionExpressionSyntax = FunctionExpressionSyntax; - - var EmptyStatementSyntax = (function (_super) { - __extends(EmptyStatementSyntax, _super); - function EmptyStatementSyntax(semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.semicolonToken = semicolonToken; - } - EmptyStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitEmptyStatement(this); - }; - - EmptyStatementSyntax.prototype.kind = function () { - return 156 /* EmptyStatement */; - }; - - EmptyStatementSyntax.prototype.childCount = function () { - return 1; - }; - - EmptyStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - EmptyStatementSyntax.prototype.isStatement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - EmptyStatementSyntax.prototype.update = function (semicolonToken) { - if (this.semicolonToken === semicolonToken) { - return this; - } - - return new EmptyStatementSyntax(semicolonToken, this.parsedInStrictMode()); - }; - - EmptyStatementSyntax.create1 = function () { - return new EmptyStatementSyntax(TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - EmptyStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - EmptyStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(semicolonToken); - }; - - EmptyStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return EmptyStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.EmptyStatementSyntax = EmptyStatementSyntax; - - var TryStatementSyntax = (function (_super) { - __extends(TryStatementSyntax, _super); - function TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.tryKeyword = tryKeyword; - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - } - TryStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitTryStatement(this); - }; - - TryStatementSyntax.prototype.kind = function () { - return 159 /* TryStatement */; - }; - - TryStatementSyntax.prototype.childCount = function () { - return 4; - }; - - TryStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.tryKeyword; - case 1: - return this.block; - case 2: - return this.catchClause; - case 3: - return this.finallyClause; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TryStatementSyntax.prototype.isStatement = function () { - return true; - }; - - TryStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - TryStatementSyntax.prototype.update = function (tryKeyword, block, catchClause, finallyClause) { - if (this.tryKeyword === tryKeyword && this.block === block && this.catchClause === catchClause && this.finallyClause === finallyClause) { - return this; - } - - return new TryStatementSyntax(tryKeyword, block, catchClause, finallyClause, this.parsedInStrictMode()); - }; - - TryStatementSyntax.create = function (tryKeyword, block) { - return new TryStatementSyntax(tryKeyword, block, null, null, false); - }; - - TryStatementSyntax.create1 = function () { - return new TryStatementSyntax(TypeScript.Syntax.token(38 /* TryKeyword */), BlockSyntax.create1(), null, null, false); - }; - - TryStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TryStatementSyntax.prototype.withTryKeyword = function (tryKeyword) { - return this.update(tryKeyword, this.block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withBlock = function (block) { - return this.update(this.tryKeyword, block, this.catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withCatchClause = function (catchClause) { - return this.update(this.tryKeyword, this.block, catchClause, this.finallyClause); - }; - - TryStatementSyntax.prototype.withFinallyClause = function (finallyClause) { - return this.update(this.tryKeyword, this.block, this.catchClause, finallyClause); - }; - - TryStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - if (this.catchClause !== null && this.catchClause.isTypeScriptSpecific()) { - return true; - } - if (this.finallyClause !== null && this.finallyClause.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TryStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TryStatementSyntax = TryStatementSyntax; - - var CatchClauseSyntax = (function (_super) { - __extends(CatchClauseSyntax, _super); - function CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.catchKeyword = catchKeyword; - this.openParenToken = openParenToken; - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.closeParenToken = closeParenToken; - this.block = block; - } - CatchClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitCatchClause(this); - }; - - CatchClauseSyntax.prototype.kind = function () { - return 236 /* CatchClause */; - }; - - CatchClauseSyntax.prototype.childCount = function () { - return 6; - }; - - CatchClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.catchKeyword; - case 1: - return this.openParenToken; - case 2: - return this.identifier; - case 3: - return this.typeAnnotation; - case 4: - return this.closeParenToken; - case 5: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - CatchClauseSyntax.prototype.update = function (catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { - if (this.catchKeyword === catchKeyword && this.openParenToken === openParenToken && this.identifier === identifier && this.typeAnnotation === typeAnnotation && this.closeParenToken === closeParenToken && this.block === block) { - return this; - } - - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block, this.parsedInStrictMode()); - }; - - CatchClauseSyntax.create = function (catchKeyword, openParenToken, identifier, closeParenToken, block) { - return new CatchClauseSyntax(catchKeyword, openParenToken, identifier, null, closeParenToken, block, false); - }; - - CatchClauseSyntax.create1 = function (identifier) { - return new CatchClauseSyntax(TypeScript.Syntax.token(17 /* CatchKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), identifier, null, TypeScript.Syntax.token(73 /* CloseParenToken */), BlockSyntax.create1(), false); - }; - - CatchClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - CatchClauseSyntax.prototype.withCatchKeyword = function (catchKeyword) { - return this.update(catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.catchKeyword, openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withIdentifier = function (identifier) { - return this.update(this.catchKeyword, this.openParenToken, identifier, this.typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withTypeAnnotation = function (typeAnnotation) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, typeAnnotation, this.closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, closeParenToken, this.block); - }; - - CatchClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.catchKeyword, this.openParenToken, this.identifier, this.typeAnnotation, this.closeParenToken, block); - }; - - CatchClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.typeAnnotation !== null && this.typeAnnotation.isTypeScriptSpecific()) { - return true; - } - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return CatchClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.CatchClauseSyntax = CatchClauseSyntax; - - var FinallyClauseSyntax = (function (_super) { - __extends(FinallyClauseSyntax, _super); - function FinallyClauseSyntax(finallyKeyword, block, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.finallyKeyword = finallyKeyword; - this.block = block; - } - FinallyClauseSyntax.prototype.accept = function (visitor) { - return visitor.visitFinallyClause(this); - }; - - FinallyClauseSyntax.prototype.kind = function () { - return 237 /* FinallyClause */; - }; - - FinallyClauseSyntax.prototype.childCount = function () { - return 2; - }; - - FinallyClauseSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.finallyKeyword; - case 1: - return this.block; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - FinallyClauseSyntax.prototype.update = function (finallyKeyword, block) { - if (this.finallyKeyword === finallyKeyword && this.block === block) { - return this; - } - - return new FinallyClauseSyntax(finallyKeyword, block, this.parsedInStrictMode()); - }; - - FinallyClauseSyntax.create1 = function () { - return new FinallyClauseSyntax(TypeScript.Syntax.token(25 /* FinallyKeyword */), BlockSyntax.create1(), false); - }; - - FinallyClauseSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - FinallyClauseSyntax.prototype.withFinallyKeyword = function (finallyKeyword) { - return this.update(finallyKeyword, this.block); - }; - - FinallyClauseSyntax.prototype.withBlock = function (block) { - return this.update(this.finallyKeyword, block); - }; - - FinallyClauseSyntax.prototype.isTypeScriptSpecific = function () { - if (this.block.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return FinallyClauseSyntax; - })(TypeScript.SyntaxNode); - TypeScript.FinallyClauseSyntax = FinallyClauseSyntax; - - var LabeledStatementSyntax = (function (_super) { - __extends(LabeledStatementSyntax, _super); - function LabeledStatementSyntax(identifier, colonToken, statement, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.identifier = identifier; - this.colonToken = colonToken; - this.statement = statement; - } - LabeledStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitLabeledStatement(this); - }; - - LabeledStatementSyntax.prototype.kind = function () { - return 160 /* LabeledStatement */; - }; - - LabeledStatementSyntax.prototype.childCount = function () { - return 3; - }; - - LabeledStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.identifier; - case 1: - return this.colonToken; - case 2: - return this.statement; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - LabeledStatementSyntax.prototype.isStatement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - LabeledStatementSyntax.prototype.update = function (identifier, colonToken, statement) { - if (this.identifier === identifier && this.colonToken === colonToken && this.statement === statement) { - return this; - } - - return new LabeledStatementSyntax(identifier, colonToken, statement, this.parsedInStrictMode()); - }; - - LabeledStatementSyntax.create1 = function (identifier, statement) { - return new LabeledStatementSyntax(identifier, TypeScript.Syntax.token(106 /* ColonToken */), statement, false); - }; - - LabeledStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - LabeledStatementSyntax.prototype.withIdentifier = function (identifier) { - return this.update(identifier, this.colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withColonToken = function (colonToken) { - return this.update(this.identifier, colonToken, this.statement); - }; - - LabeledStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.identifier, this.colonToken, statement); - }; - - LabeledStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return LabeledStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.LabeledStatementSyntax = LabeledStatementSyntax; - - var DoStatementSyntax = (function (_super) { - __extends(DoStatementSyntax, _super); - function DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.doKeyword = doKeyword; - this.statement = statement; - this.whileKeyword = whileKeyword; - this.openParenToken = openParenToken; - this.condition = condition; - this.closeParenToken = closeParenToken; - this.semicolonToken = semicolonToken; - } - DoStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDoStatement(this); - }; - - DoStatementSyntax.prototype.kind = function () { - return 161 /* DoStatement */; - }; - - DoStatementSyntax.prototype.childCount = function () { - return 7; - }; - - DoStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.doKeyword; - case 1: - return this.statement; - case 2: - return this.whileKeyword; - case 3: - return this.openParenToken; - case 4: - return this.condition; - case 5: - return this.closeParenToken; - case 6: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DoStatementSyntax.prototype.isIterationStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DoStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DoStatementSyntax.prototype.update = function (doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { - if (this.doKeyword === doKeyword && this.statement === statement && this.whileKeyword === whileKeyword && this.openParenToken === openParenToken && this.condition === condition && this.closeParenToken === closeParenToken && this.semicolonToken === semicolonToken) { - return this; - } - - return new DoStatementSyntax(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken, this.parsedInStrictMode()); - }; - - DoStatementSyntax.create1 = function (statement, condition) { - return new DoStatementSyntax(TypeScript.Syntax.token(22 /* DoKeyword */), statement, TypeScript.Syntax.token(42 /* WhileKeyword */), TypeScript.Syntax.token(72 /* OpenParenToken */), condition, TypeScript.Syntax.token(73 /* CloseParenToken */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DoStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DoStatementSyntax.prototype.withDoKeyword = function (doKeyword) { - return this.update(doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withStatement = function (statement) { - return this.update(this.doKeyword, statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withWhileKeyword = function (whileKeyword) { - return this.update(this.doKeyword, this.statement, whileKeyword, this.openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withOpenParenToken = function (openParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, openParenToken, this.condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCondition = function (condition) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, condition, this.closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withCloseParenToken = function (closeParenToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, closeParenToken, this.semicolonToken); - }; - - DoStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.doKeyword, this.statement, this.whileKeyword, this.openParenToken, this.condition, this.closeParenToken, semicolonToken); - }; - - DoStatementSyntax.prototype.isTypeScriptSpecific = function () { - if (this.statement.isTypeScriptSpecific()) { - return true; - } - if (this.condition.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DoStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DoStatementSyntax = DoStatementSyntax; - - var TypeOfExpressionSyntax = (function (_super) { - __extends(TypeOfExpressionSyntax, _super); - function TypeOfExpressionSyntax(typeOfKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.typeOfKeyword = typeOfKeyword; - this.expression = expression; - } - TypeOfExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitTypeOfExpression(this); - }; - - TypeOfExpressionSyntax.prototype.kind = function () { - return 171 /* TypeOfExpression */; - }; - - TypeOfExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - TypeOfExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.typeOfKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - TypeOfExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - TypeOfExpressionSyntax.prototype.update = function (typeOfKeyword, expression) { - if (this.typeOfKeyword === typeOfKeyword && this.expression === expression) { - return this; - } - - return new TypeOfExpressionSyntax(typeOfKeyword, expression, this.parsedInStrictMode()); - }; - - TypeOfExpressionSyntax.create1 = function (expression) { - return new TypeOfExpressionSyntax(TypeScript.Syntax.token(39 /* TypeOfKeyword */), expression, false); - }; - - TypeOfExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - TypeOfExpressionSyntax.prototype.withTypeOfKeyword = function (typeOfKeyword) { - return this.update(typeOfKeyword, this.expression); - }; - - TypeOfExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.typeOfKeyword, expression); - }; - - TypeOfExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return TypeOfExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.TypeOfExpressionSyntax = TypeOfExpressionSyntax; - - var DeleteExpressionSyntax = (function (_super) { - __extends(DeleteExpressionSyntax, _super); - function DeleteExpressionSyntax(deleteKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.deleteKeyword = deleteKeyword; - this.expression = expression; - } - DeleteExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitDeleteExpression(this); - }; - - DeleteExpressionSyntax.prototype.kind = function () { - return 170 /* DeleteExpression */; - }; - - DeleteExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - DeleteExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.deleteKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DeleteExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - DeleteExpressionSyntax.prototype.update = function (deleteKeyword, expression) { - if (this.deleteKeyword === deleteKeyword && this.expression === expression) { - return this; - } - - return new DeleteExpressionSyntax(deleteKeyword, expression, this.parsedInStrictMode()); - }; - - DeleteExpressionSyntax.create1 = function (expression) { - return new DeleteExpressionSyntax(TypeScript.Syntax.token(21 /* DeleteKeyword */), expression, false); - }; - - DeleteExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DeleteExpressionSyntax.prototype.withDeleteKeyword = function (deleteKeyword) { - return this.update(deleteKeyword, this.expression); - }; - - DeleteExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.deleteKeyword, expression); - }; - - DeleteExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return DeleteExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DeleteExpressionSyntax = DeleteExpressionSyntax; - - var VoidExpressionSyntax = (function (_super) { - __extends(VoidExpressionSyntax, _super); - function VoidExpressionSyntax(voidKeyword, expression, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.voidKeyword = voidKeyword; - this.expression = expression; - } - VoidExpressionSyntax.prototype.accept = function (visitor) { - return visitor.visitVoidExpression(this); - }; - - VoidExpressionSyntax.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpressionSyntax.prototype.childCount = function () { - return 2; - }; - - VoidExpressionSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.voidKeyword; - case 1: - return this.expression; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - VoidExpressionSyntax.prototype.isUnaryExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.isExpression = function () { - return true; - }; - - VoidExpressionSyntax.prototype.update = function (voidKeyword, expression) { - if (this.voidKeyword === voidKeyword && this.expression === expression) { - return this; - } - - return new VoidExpressionSyntax(voidKeyword, expression, this.parsedInStrictMode()); - }; - - VoidExpressionSyntax.create1 = function (expression) { - return new VoidExpressionSyntax(TypeScript.Syntax.token(41 /* VoidKeyword */), expression, false); - }; - - VoidExpressionSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - VoidExpressionSyntax.prototype.withVoidKeyword = function (voidKeyword) { - return this.update(voidKeyword, this.expression); - }; - - VoidExpressionSyntax.prototype.withExpression = function (expression) { - return this.update(this.voidKeyword, expression); - }; - - VoidExpressionSyntax.prototype.isTypeScriptSpecific = function () { - if (this.expression.isTypeScriptSpecific()) { - return true; - } - return false; - }; - return VoidExpressionSyntax; - })(TypeScript.SyntaxNode); - TypeScript.VoidExpressionSyntax = VoidExpressionSyntax; - - var DebuggerStatementSyntax = (function (_super) { - __extends(DebuggerStatementSyntax, _super); - function DebuggerStatementSyntax(debuggerKeyword, semicolonToken, parsedInStrictMode) { - _super.call(this, parsedInStrictMode); - this.debuggerKeyword = debuggerKeyword; - this.semicolonToken = semicolonToken; - } - DebuggerStatementSyntax.prototype.accept = function (visitor) { - return visitor.visitDebuggerStatement(this); - }; - - DebuggerStatementSyntax.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - - DebuggerStatementSyntax.prototype.childCount = function () { - return 2; - }; - - DebuggerStatementSyntax.prototype.childAt = function (slot) { - switch (slot) { - case 0: - return this.debuggerKeyword; - case 1: - return this.semicolonToken; - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - DebuggerStatementSyntax.prototype.isStatement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.isModuleElement = function () { - return true; - }; - - DebuggerStatementSyntax.prototype.update = function (debuggerKeyword, semicolonToken) { - if (this.debuggerKeyword === debuggerKeyword && this.semicolonToken === semicolonToken) { - return this; - } - - return new DebuggerStatementSyntax(debuggerKeyword, semicolonToken, this.parsedInStrictMode()); - }; - - DebuggerStatementSyntax.create1 = function () { - return new DebuggerStatementSyntax(TypeScript.Syntax.token(19 /* DebuggerKeyword */), TypeScript.Syntax.token(78 /* SemicolonToken */), false); - }; - - DebuggerStatementSyntax.prototype.withLeadingTrivia = function (trivia) { - return _super.prototype.withLeadingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withTrailingTrivia = function (trivia) { - return _super.prototype.withTrailingTrivia.call(this, trivia); - }; - - DebuggerStatementSyntax.prototype.withDebuggerKeyword = function (debuggerKeyword) { - return this.update(debuggerKeyword, this.semicolonToken); - }; - - DebuggerStatementSyntax.prototype.withSemicolonToken = function (semicolonToken) { - return this.update(this.debuggerKeyword, semicolonToken); - }; - - DebuggerStatementSyntax.prototype.isTypeScriptSpecific = function () { - return false; - }; - return DebuggerStatementSyntax; - })(TypeScript.SyntaxNode); - TypeScript.DebuggerStatementSyntax = DebuggerStatementSyntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxRewriter = (function () { - function SyntaxRewriter() { - } - SyntaxRewriter.prototype.visitToken = function (token) { - return token; - }; - - SyntaxRewriter.prototype.visitNode = function (node) { - return node.accept(this); - }; - - SyntaxRewriter.prototype.visitNodeOrToken = function (node) { - return node.isToken() ? this.visitToken(node) : this.visitNode(node); - }; - - SyntaxRewriter.prototype.visitList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = this.visitNodeOrToken(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.list(newItems); - }; - - SyntaxRewriter.prototype.visitSeparatedList = function (list) { - var newItems = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - var newItem = item.isToken() ? this.visitToken(item) : this.visitNode(item); - - if (item !== newItem && newItems === null) { - newItems = []; - for (var j = 0; j < i; j++) { - newItems.push(list.childAt(j)); - } - } - - if (newItems) { - newItems.push(newItem); - } - } - - return newItems === null ? list : TypeScript.Syntax.separatedList(newItems); - }; - - SyntaxRewriter.prototype.visitSourceUnit = function (node) { - return node.update(this.visitList(node.moduleElements), this.visitToken(node.endOfFileToken)); - }; - - SyntaxRewriter.prototype.visitExternalModuleReference = function (node) { - return node.update(this.visitToken(node.requireKeyword), this.visitToken(node.openParenToken), this.visitToken(node.stringLiteral), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitModuleNameModuleReference = function (node) { - return node.update(this.visitNodeOrToken(node.moduleName)); - }; - - SyntaxRewriter.prototype.visitImportDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.importKeyword), this.visitToken(node.identifier), this.visitToken(node.equalsToken), this.visitNodeOrToken(node.moduleReference), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitExportAssignment = function (node) { - return node.update(this.visitToken(node.exportKeyword), this.visitToken(node.equalsToken), this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitClassDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.classKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitToken(node.openBraceToken), this.visitList(node.classElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitInterfaceDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.interfaceKeyword), this.visitToken(node.identifier), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitList(node.heritageClauses), this.visitNode(node.body)); - }; - - SyntaxRewriter.prototype.visitHeritageClause = function (node) { - return node.update(node.kind(), this.visitToken(node.extendsOrImplementsKeyword), this.visitSeparatedList(node.typeNames)); - }; - - SyntaxRewriter.prototype.visitModuleDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.moduleKeyword), node.name === null ? null : this.visitNodeOrToken(node.name), node.stringLiteral === null ? null : this.visitToken(node.stringLiteral), this.visitToken(node.openBraceToken), this.visitList(node.moduleElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.functionKeyword), this.visitToken(node.identifier), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableStatement = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclaration), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitVariableDeclaration = function (node) { - return node.update(this.visitToken(node.varKeyword), this.visitSeparatedList(node.variableDeclarators)); - }; - - SyntaxRewriter.prototype.visitVariableDeclarator = function (node) { - return node.update(this.visitToken(node.propertyName), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitEqualsValueClause = function (node) { - return node.update(this.visitToken(node.equalsToken), this.visitNodeOrToken(node.value)); - }; - - SyntaxRewriter.prototype.visitPrefixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.operand)); - }; - - SyntaxRewriter.prototype.visitArrayLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitSeparatedList(node.expressions), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitOmittedExpression = function (node) { - return node; - }; - - SyntaxRewriter.prototype.visitParenthesizedExpression = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitSimpleArrowFunctionExpression = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return node.update(this.visitNode(node.callSignature), this.visitToken(node.equalsGreaterThanToken), node.block === null ? null : this.visitNode(node.block), node.expression === null ? null : this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitQualifiedName = function (node) { - return node.update(this.visitNodeOrToken(node.left), this.visitToken(node.dotToken), this.visitToken(node.right)); - }; - - SyntaxRewriter.prototype.visitTypeArgumentList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeArguments), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitConstructorType = function (node) { - return node.update(this.visitToken(node.newKeyword), node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitFunctionType = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), this.visitToken(node.equalsGreaterThanToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitObjectType = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.typeMembers), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitArrayType = function (node) { - return node.update(this.visitNodeOrToken(node.type), this.visitToken(node.openBracketToken), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitGenericType = function (node) { - return node.update(this.visitNodeOrToken(node.name), this.visitNode(node.typeArgumentList)); - }; - - SyntaxRewriter.prototype.visitTypeQuery = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.name)); - }; - - SyntaxRewriter.prototype.visitTypeAnnotation = function (node) { - return node.update(this.visitToken(node.colonToken), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitBlock = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitList(node.statements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitParameter = function (node) { - return node.update(node.dotDotDotToken === null ? null : this.visitToken(node.dotDotDotToken), this.visitList(node.modifiers), this.visitToken(node.identifier), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitMemberAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.dotToken), this.visitToken(node.name)); - }; - - SyntaxRewriter.prototype.visitPostfixUnaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.operand), this.visitToken(node.operatorToken)); - }; - - SyntaxRewriter.prototype.visitElementAccessExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.openBracketToken), this.visitNodeOrToken(node.argumentExpression), this.visitToken(node.closeBracketToken)); - }; - - SyntaxRewriter.prototype.visitInvocationExpression = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitArgumentList = function (node) { - return node.update(node.typeArgumentList === null ? null : this.visitNode(node.typeArgumentList), this.visitToken(node.openParenToken), this.visitSeparatedList(node.arguments), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitBinaryExpression = function (node) { - return node.update(node.kind(), this.visitNodeOrToken(node.left), this.visitToken(node.operatorToken), this.visitNodeOrToken(node.right)); - }; - - SyntaxRewriter.prototype.visitConditionalExpression = function (node) { - return node.update(this.visitNodeOrToken(node.condition), this.visitToken(node.questionToken), this.visitNodeOrToken(node.whenTrue), this.visitToken(node.colonToken), this.visitNodeOrToken(node.whenFalse)); - }; - - SyntaxRewriter.prototype.visitConstructSignature = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitMethodSignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), this.visitNode(node.callSignature)); - }; - - SyntaxRewriter.prototype.visitIndexSignature = function (node) { - return node.update(this.visitToken(node.openBracketToken), this.visitNode(node.parameter), this.visitToken(node.closeBracketToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitPropertySignature = function (node) { - return node.update(this.visitToken(node.propertyName), node.questionToken === null ? null : this.visitToken(node.questionToken), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitCallSignature = function (node) { - return node.update(node.typeParameterList === null ? null : this.visitNode(node.typeParameterList), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation)); - }; - - SyntaxRewriter.prototype.visitParameterList = function (node) { - return node.update(this.visitToken(node.openParenToken), this.visitSeparatedList(node.parameters), this.visitToken(node.closeParenToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameterList = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitSeparatedList(node.typeParameters), this.visitToken(node.greaterThanToken)); - }; - - SyntaxRewriter.prototype.visitTypeParameter = function (node) { - return node.update(this.visitToken(node.identifier), node.constraint === null ? null : this.visitNode(node.constraint)); - }; - - SyntaxRewriter.prototype.visitConstraint = function (node) { - return node.update(this.visitToken(node.extendsKeyword), this.visitNodeOrToken(node.type)); - }; - - SyntaxRewriter.prototype.visitElseClause = function (node) { - return node.update(this.visitToken(node.elseKeyword), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitIfStatement = function (node) { - return node.update(this.visitToken(node.ifKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement), node.elseClause === null ? null : this.visitNode(node.elseClause)); - }; - - SyntaxRewriter.prototype.visitExpressionStatement = function (node) { - return node.update(this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitConstructorDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.constructorKeyword), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitMemberFunctionDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.propertyName), this.visitNode(node.callSignature), node.block === null ? null : this.visitNode(node.block), node.semicolonToken === null ? null : this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitGetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.getKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitSetAccessor = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.setKeyword), this.visitToken(node.propertyName), this.visitNode(node.parameterList), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitMemberVariableDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.variableDeclarator), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitIndexMemberDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitNode(node.indexSignature), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitThrowStatement = function (node) { - return node.update(this.visitToken(node.throwKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitReturnStatement = function (node) { - return node.update(this.visitToken(node.returnKeyword), node.expression === null ? null : this.visitNodeOrToken(node.expression), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitObjectCreationExpression = function (node) { - return node.update(this.visitToken(node.newKeyword), this.visitNodeOrToken(node.expression), node.argumentList === null ? null : this.visitNode(node.argumentList)); - }; - - SyntaxRewriter.prototype.visitSwitchStatement = function (node) { - return node.update(this.visitToken(node.switchKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitToken(node.openBraceToken), this.visitList(node.switchClauses), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitCaseSwitchClause = function (node) { - return node.update(this.visitToken(node.caseKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitDefaultSwitchClause = function (node) { - return node.update(this.visitToken(node.defaultKeyword), this.visitToken(node.colonToken), this.visitList(node.statements)); - }; - - SyntaxRewriter.prototype.visitBreakStatement = function (node) { - return node.update(this.visitToken(node.breakKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitContinueStatement = function (node) { - return node.update(this.visitToken(node.continueKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitForStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.initializer === null ? null : this.visitNodeOrToken(node.initializer), this.visitToken(node.firstSemicolonToken), node.condition === null ? null : this.visitNodeOrToken(node.condition), this.visitToken(node.secondSemicolonToken), node.incrementor === null ? null : this.visitNodeOrToken(node.incrementor), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitForInStatement = function (node) { - return node.update(this.visitToken(node.forKeyword), this.visitToken(node.openParenToken), node.variableDeclaration === null ? null : this.visitNode(node.variableDeclaration), node.left === null ? null : this.visitNodeOrToken(node.left), this.visitToken(node.inKeyword), this.visitNodeOrToken(node.expression), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWhileStatement = function (node) { - return node.update(this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitWithStatement = function (node) { - return node.update(this.visitToken(node.withKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitEnumDeclaration = function (node) { - return node.update(this.visitList(node.modifiers), this.visitToken(node.enumKeyword), this.visitToken(node.identifier), this.visitToken(node.openBraceToken), this.visitSeparatedList(node.enumElements), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitEnumElement = function (node) { - return node.update(this.visitToken(node.propertyName), node.equalsValueClause === null ? null : this.visitNode(node.equalsValueClause)); - }; - - SyntaxRewriter.prototype.visitCastExpression = function (node) { - return node.update(this.visitToken(node.lessThanToken), this.visitNodeOrToken(node.type), this.visitToken(node.greaterThanToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitObjectLiteralExpression = function (node) { - return node.update(this.visitToken(node.openBraceToken), this.visitSeparatedList(node.propertyAssignments), this.visitToken(node.closeBraceToken)); - }; - - SyntaxRewriter.prototype.visitSimplePropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitToken(node.colonToken), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitFunctionPropertyAssignment = function (node) { - return node.update(this.visitToken(node.propertyName), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFunctionExpression = function (node) { - return node.update(this.visitToken(node.functionKeyword), node.identifier === null ? null : this.visitToken(node.identifier), this.visitNode(node.callSignature), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitEmptyStatement = function (node) { - return node.update(this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTryStatement = function (node) { - return node.update(this.visitToken(node.tryKeyword), this.visitNode(node.block), node.catchClause === null ? null : this.visitNode(node.catchClause), node.finallyClause === null ? null : this.visitNode(node.finallyClause)); - }; - - SyntaxRewriter.prototype.visitCatchClause = function (node) { - return node.update(this.visitToken(node.catchKeyword), this.visitToken(node.openParenToken), this.visitToken(node.identifier), node.typeAnnotation === null ? null : this.visitNode(node.typeAnnotation), this.visitToken(node.closeParenToken), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitFinallyClause = function (node) { - return node.update(this.visitToken(node.finallyKeyword), this.visitNode(node.block)); - }; - - SyntaxRewriter.prototype.visitLabeledStatement = function (node) { - return node.update(this.visitToken(node.identifier), this.visitToken(node.colonToken), this.visitNodeOrToken(node.statement)); - }; - - SyntaxRewriter.prototype.visitDoStatement = function (node) { - return node.update(this.visitToken(node.doKeyword), this.visitNodeOrToken(node.statement), this.visitToken(node.whileKeyword), this.visitToken(node.openParenToken), this.visitNodeOrToken(node.condition), this.visitToken(node.closeParenToken), this.visitToken(node.semicolonToken)); - }; - - SyntaxRewriter.prototype.visitTypeOfExpression = function (node) { - return node.update(this.visitToken(node.typeOfKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDeleteExpression = function (node) { - return node.update(this.visitToken(node.deleteKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitVoidExpression = function (node) { - return node.update(this.visitToken(node.voidKeyword), this.visitNodeOrToken(node.expression)); - }; - - SyntaxRewriter.prototype.visitDebuggerStatement = function (node) { - return node.update(this.visitToken(node.debuggerKeyword), this.visitToken(node.semicolonToken)); - }; - return SyntaxRewriter; - })(); - TypeScript.SyntaxRewriter = SyntaxRewriter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxDedenter = (function (_super) { - __extends(SyntaxDedenter, _super); - function SyntaxDedenter(dedentFirstToken, dedentationAmount, minimumIndent, options) { - _super.call(this); - this.dedentationAmount = dedentationAmount; - this.minimumIndent = minimumIndent; - this.options = options; - this.lastTriviaWasNewLine = dedentFirstToken; - } - SyntaxDedenter.prototype.abort = function () { - this.lastTriviaWasNewLine = false; - this.dedentationAmount = 0; - }; - - SyntaxDedenter.prototype.isAborted = function () { - return this.dedentationAmount === 0; - }; - - SyntaxDedenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.dedentTriviaList(token.leadingTrivia())); - } - - if (this.isAborted()) { - return token; - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxDedenter.prototype.dedentTriviaList = function (triviaList) { - var result = []; - var dedentNextWhitespace = true; - - for (var i = 0, n = triviaList.count(); i < n && !this.isAborted(); i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var dedentThisTrivia = dedentNextWhitespace; - dedentNextWhitespace = false; - - if (dedentThisTrivia) { - if (trivia.kind() === 4 /* WhitespaceTrivia */) { - var hasFollowingNewLine = (i < triviaList.count() - 1) && triviaList.syntaxTriviaAt(i + 1).kind() === 5 /* NewLineTrivia */; - result.push(this.dedentWhitespace(trivia, hasFollowingNewLine)); - continue; - } else if (trivia.kind() !== 5 /* NewLineTrivia */) { - this.abort(); - break; - } - } - - if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { - result.push(this.dedentMultiLineComment(trivia)); - continue; - } - - result.push(trivia); - if (trivia.kind() === 5 /* NewLineTrivia */) { - dedentNextWhitespace = true; - } - } - - if (dedentNextWhitespace) { - this.abort(); - } - - if (this.isAborted()) { - return triviaList; - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxDedenter.prototype.dedentSegment = function (segment, hasFollowingNewLineTrivia) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition === segment.length) { - if (hasFollowingNewLineTrivia) { - return ""; - } - } else if (TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment.substring(firstNonWhitespacePosition); - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = TypeScript.MathPrototype.min(firstNonWhitespaceColumn, TypeScript.MathPrototype.max(firstNonWhitespaceColumn - this.dedentationAmount, this.minimumIndent)); - - if (newFirstNonWhitespaceColumn === firstNonWhitespaceColumn) { - this.abort(); - return segment; - } - - this.dedentationAmount = firstNonWhitespaceColumn - newFirstNonWhitespaceColumn; - TypeScript.Debug.assert(this.dedentationAmount >= 0); - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxDedenter.prototype.dedentWhitespace = function (trivia, hasFollowingNewLineTrivia) { - var newIndentation = this.dedentSegment(trivia.fullText(), hasFollowingNewLineTrivia); - return TypeScript.Syntax.whitespace(newIndentation); - }; - - SyntaxDedenter.prototype.dedentMultiLineComment = function (trivia) { - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - if (segments.length === 1) { - return trivia; - } - - for (var i = 1; i < segments.length; i++) { - var segment = segments[i]; - segments[i] = this.dedentSegment(segment, false); - } - - var result = segments.join(""); - - return TypeScript.Syntax.multiLineComment(result); - }; - - SyntaxDedenter.dedentNode = function (node, dedentFirstToken, dedentAmount, minimumIndent, options) { - var dedenter = new SyntaxDedenter(dedentFirstToken, dedentAmount, minimumIndent, options); - var result = node.accept(dedenter); - - if (dedenter.isAborted()) { - return node; - } - - return result; - }; - return SyntaxDedenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxDedenter = SyntaxDedenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxIndenter = (function (_super) { - __extends(SyntaxIndenter, _super); - function SyntaxIndenter(indentFirstToken, indentationAmount, options) { - _super.call(this); - this.indentationAmount = indentationAmount; - this.options = options; - this.lastTriviaWasNewLine = indentFirstToken; - this.indentationTrivia = TypeScript.Indentation.indentationTrivia(this.indentationAmount, this.options); - } - SyntaxIndenter.prototype.visitToken = function (token) { - if (token.width() === 0) { - return token; - } - - var result = token; - if (this.lastTriviaWasNewLine) { - result = token.withLeadingTrivia(this.indentTriviaList(token.leadingTrivia())); - } - - this.lastTriviaWasNewLine = token.hasTrailingNewLine(); - return result; - }; - - SyntaxIndenter.prototype.indentTriviaList = function (triviaList) { - var result = []; - - var indentNextTrivia = true; - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - var indentThisTrivia = indentNextTrivia; - indentNextTrivia = false; - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.indentMultiLineComment(trivia, indentThisTrivia, result); - continue; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - this.indentSingleLineOrSkippedText(trivia, indentThisTrivia, result); - continue; - - case 4 /* WhitespaceTrivia */: - this.indentWhitespace(trivia, indentThisTrivia, result); - continue; - - case 5 /* NewLineTrivia */: - result.push(trivia); - indentNextTrivia = true; - continue; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - - if (indentNextTrivia) { - result.push(this.indentationTrivia); - } - - return TypeScript.Syntax.triviaList(result); - }; - - SyntaxIndenter.prototype.indentSegment = function (segment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return segment; - } - - var firstNonWhitespaceColumn = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - - var newFirstNonWhitespaceColumn = firstNonWhitespaceColumn + this.indentationAmount; - - var indentationString = TypeScript.Indentation.indentationString(newFirstNonWhitespaceColumn, this.options); - - return indentationString + segment.substring(firstNonWhitespacePosition); - }; - - SyntaxIndenter.prototype.indentWhitespace = function (trivia, indentThisTrivia, result) { - if (!indentThisTrivia) { - result.push(trivia); - return; - } - - var newIndentation = this.indentSegment(trivia.fullText()); - result.push(TypeScript.Syntax.whitespace(newIndentation)); - }; - - SyntaxIndenter.prototype.indentSingleLineOrSkippedText = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - result.push(trivia); - }; - - SyntaxIndenter.prototype.indentMultiLineComment = function (trivia, indentThisTrivia, result) { - if (indentThisTrivia) { - result.push(this.indentationTrivia); - } - - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - for (var i = 1; i < segments.length; i++) { - segments[i] = this.indentSegment(segments[i]); - } - - var newText = segments.join(""); - result.push(TypeScript.Syntax.multiLineComment(newText)); - }; - - SyntaxIndenter.indentNode = function (node, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - return node.accept(indenter); - }; - - SyntaxIndenter.indentNodes = function (nodes, indentFirstToken, indentAmount, options) { - var indenter = new SyntaxIndenter(indentFirstToken, indentAmount, options); - var result = TypeScript.ArrayUtilities.select(nodes, function (n) { - return n.accept(indenter); - }); - - return result; - }; - return SyntaxIndenter; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxIndenter = SyntaxIndenter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var VariableWidthTokenWithNoTrivia = (function () { - function VariableWidthTokenWithNoTrivia(fullText, kind) { - this._fullText = fullText; - this.tokenKind = kind; - } - VariableWidthTokenWithNoTrivia.prototype.clone = function () { - return new VariableWidthTokenWithNoTrivia(this._fullText, this.tokenKind); - }; - - VariableWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithNoTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithNoTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithNoTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithNoTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithNoTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithNoTrivia; - })(); - Syntax.VariableWidthTokenWithNoTrivia = VariableWidthTokenWithNoTrivia; - - var VariableWidthTokenWithLeadingTrivia = (function () { - function VariableWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - VariableWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingTrivia = VariableWidthTokenWithLeadingTrivia; - - var VariableWidthTokenWithTrailingTrivia = (function () { - function VariableWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - VariableWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithTrailingTrivia = VariableWidthTokenWithTrailingTrivia; - - var VariableWidthTokenWithLeadingAndTrailingTrivia = (function () { - function VariableWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new VariableWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.fullWidth() - this.leadingTriviaWidth() - this.trailingTriviaWidth(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return this.fullText().substr(this.leadingTriviaWidth(), this.width()); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - if (this._value === undefined) { - this._value = Syntax.value(this); - } - - return this._value; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - if (this._valueText === undefined) { - this._valueText = Syntax.valueText(this); - } - - return this._valueText; - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - VariableWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return VariableWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.VariableWidthTokenWithLeadingAndTrailingTrivia = VariableWidthTokenWithLeadingAndTrailingTrivia; - - var FixedWidthTokenWithNoTrivia = (function () { - function FixedWidthTokenWithNoTrivia(kind) { - this.tokenKind = kind; - } - FixedWidthTokenWithNoTrivia.prototype.clone = function () { - return new FixedWidthTokenWithNoTrivia(this.tokenKind); - }; - - FixedWidthTokenWithNoTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithNoTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithNoTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithNoTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithNoTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithNoTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.fullText = function () { - return this.text(); - }; - - FixedWidthTokenWithNoTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithNoTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithNoTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithNoTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithNoTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithNoTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithNoTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithNoTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithNoTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithNoTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithNoTrivia; - })(); - Syntax.FixedWidthTokenWithNoTrivia = FixedWidthTokenWithNoTrivia; - - var FixedWidthTokenWithLeadingTrivia = (function () { - function FixedWidthTokenWithLeadingTrivia(fullText, kind, leadingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - } - FixedWidthTokenWithLeadingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingTrivia = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingComment = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingNewLine = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithLeadingTrivia.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithLeadingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingTrivia = FixedWidthTokenWithLeadingTrivia; - - var FixedWidthTokenWithTrailingTrivia = (function () { - function FixedWidthTokenWithTrailingTrivia(fullText, kind, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithTrailingTrivia(this._fullText, this.tokenKind, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingTrivia = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingComment = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingNewLine = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTriviaWidth = function () { - return 0; - }; - FixedWidthTokenWithTrailingTrivia.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithTrailingTrivia = FixedWidthTokenWithTrailingTrivia; - - var FixedWidthTokenWithLeadingAndTrailingTrivia = (function () { - function FixedWidthTokenWithLeadingAndTrailingTrivia(fullText, kind, leadingTriviaInfo, trailingTriviaInfo) { - this._fullText = fullText; - this.tokenKind = kind; - this._leadingTriviaInfo = leadingTriviaInfo; - this._trailingTriviaInfo = trailingTriviaInfo; - } - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.clone = function () { - return new FixedWidthTokenWithLeadingAndTrailingTrivia(this._fullText, this.tokenKind, this._leadingTriviaInfo, this._trailingTriviaInfo); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isNode = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isToken = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isList = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isSeparatedList = function () { - return false; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.kind = function () { - return this.tokenKind; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childCount = function () { - return 0; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange('index'); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.width = function () { - return this.text().length; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.text = function () { - return TypeScript.SyntaxFacts.getText(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.fullText = function () { - return this._fullText; - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.value = function () { - return Syntax.value(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.valueText = function () { - return Syntax.valueText(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingComment = function () { - return hasTriviaComment(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingNewLine = function () { - return hasTriviaNewLine(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasLeadingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTriviaWidth = function () { - return getTriviaWidth(this._leadingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.leadingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), 0, getTriviaWidth(this._leadingTriviaInfo), false); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingTrivia = function () { - return true; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingComment = function () { - return hasTriviaComment(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingNewLine = function () { - return hasTriviaNewLine(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasTrailingSkippedText = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTriviaWidth = function () { - return getTriviaWidth(this._trailingTriviaInfo); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.trailingTrivia = function () { - return TypeScript.Scanner.scanTrivia(TypeScript.SimpleText.fromString(this._fullText), this.leadingTriviaWidth() + this.width(), getTriviaWidth(this._trailingTriviaInfo), true); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.hasSkippedToken = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.toJSON = function (key) { - return Syntax.tokenToJSON(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.firstToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.lastToken = function () { - return this; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isTypeScriptSpecific = function () { - return false; - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isIncrementallyUnusable = function () { - return this.fullWidth() === 0 || TypeScript.SyntaxFacts.isAnyDivideOrRegularExpressionToken(this.tokenKind); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.realize = function () { - return Syntax.realizeToken(this); - }; - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.collectTextElements = function (elements) { - collectTokenTextElements(this, elements); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isExpression = function () { - return Syntax.isExpression(this); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - FixedWidthTokenWithLeadingAndTrailingTrivia.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return FixedWidthTokenWithLeadingAndTrailingTrivia; - })(); - Syntax.FixedWidthTokenWithLeadingAndTrailingTrivia = FixedWidthTokenWithLeadingAndTrailingTrivia; - - function collectTokenTextElements(token, elements) { - token.leadingTrivia().collectTextElements(elements); - elements.push(token.text()); - token.trailingTrivia().collectTextElements(elements); - } - - function getTriviaWidth(value) { - return value >>> 2 /* TriviaFullWidthShift */; - } - - function hasTriviaComment(value) { - return (value & 2 /* TriviaCommentMask */) !== 0; - } - - function hasTriviaNewLine(value) { - return (value & 1 /* TriviaNewLineMask */) !== 0; - } - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - function isExpression(token) { - switch (token.tokenKind) { - case 11 /* IdentifierName */: - case 12 /* RegularExpressionLiteral */: - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 50 /* SuperKeyword */: - return true; - } - - return false; - } - Syntax.isExpression = isExpression; - - function realizeToken(token) { - return new RealizedToken(token.tokenKind, token.leadingTrivia(), token.text(), token.value(), token.valueText(), token.trailingTrivia()); - } - Syntax.realizeToken = realizeToken; - - function convertToIdentifierName(token) { - TypeScript.Debug.assert(TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)); - return new RealizedToken(11 /* IdentifierName */, token.leadingTrivia(), token.text(), token.text(), token.text(), token.trailingTrivia()); - } - Syntax.convertToIdentifierName = convertToIdentifierName; - - function tokenToJSON(token) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === token.kind()) { - result.kind = name; - break; - } - } - - result.width = token.width(); - if (token.fullWidth() !== token.width()) { - result.fullWidth = token.fullWidth(); - } - - result.text = token.text(); - - var value = token.value(); - if (value !== null) { - result.value = value; - result.valueText = token.valueText(); - } - - if (token.hasLeadingTrivia()) { - result.hasLeadingTrivia = true; - } - - if (token.hasLeadingComment()) { - result.hasLeadingComment = true; - } - - if (token.hasLeadingNewLine()) { - result.hasLeadingNewLine = true; - } - - if (token.hasLeadingSkippedText()) { - result.hasLeadingSkippedText = true; - } - - if (token.hasTrailingTrivia()) { - result.hasTrailingTrivia = true; - } - - if (token.hasTrailingComment()) { - result.hasTrailingComment = true; - } - - if (token.hasTrailingNewLine()) { - result.hasTrailingNewLine = true; - } - - if (token.hasTrailingSkippedText()) { - result.hasTrailingSkippedText = true; - } - - var trivia = token.leadingTrivia(); - if (trivia.count() > 0) { - result.leadingTrivia = trivia; - } - - trivia = token.trailingTrivia(); - if (trivia.count() > 0) { - result.trailingTrivia = trivia; - } - - return result; - } - Syntax.tokenToJSON = tokenToJSON; - - function value(token) { - return value1(token.tokenKind, token.text()); - } - Syntax.value = value; - - function hexValue(text, start, length) { - var intChar = 0; - for (var i = 0; i < length; i++) { - var ch2 = text.charCodeAt(start + i); - if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { - break; - } - - intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); - } - - return intChar; - } - - var characterArray = []; - - function convertEscapes(text) { - characterArray.length = 0; - var result = ""; - - for (var i = 0, n = text.length; i < n; i++) { - var ch = text.charCodeAt(i); - - if (ch === 92 /* backslash */) { - i++; - if (i < n) { - ch = text.charCodeAt(i); - switch (ch) { - case 48 /* _0 */: - characterArray.push(0 /* nullCharacter */); - continue; - - case 98 /* b */: - characterArray.push(8 /* backspace */); - continue; - - case 102 /* f */: - characterArray.push(12 /* formFeed */); - continue; - - case 110 /* n */: - characterArray.push(10 /* lineFeed */); - continue; - - case 114 /* r */: - characterArray.push(13 /* carriageReturn */); - continue; - - case 116 /* t */: - characterArray.push(9 /* tab */); - continue; - - case 118 /* v */: - characterArray.push(11 /* verticalTab */); - continue; - - case 120 /* x */: - characterArray.push(hexValue(text, i + 1, 2)); - i += 2; - continue; - - case 117 /* u */: - characterArray.push(hexValue(text, i + 1, 4)); - i += 4; - continue; - - case 13 /* carriageReturn */: - var nextIndex = i + 1; - if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) { - i++; - } - continue; - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - continue; - - default: - } - } - } - - characterArray.push(ch); - - if (i && !(i % 1024)) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - characterArray.length = 0; - } - } - - if (characterArray.length) { - result = result.concat(String.fromCharCode.apply(null, characterArray)); - } - - return result; - } - - function massageEscapes(text) { - return text.indexOf("\\") >= 0 ? convertEscapes(text) : text; - } - Syntax.massageEscapes = massageEscapes; - - function value1(kind, text) { - if (kind === 11 /* IdentifierName */) { - return massageEscapes(text); - } - - switch (kind) { - case 37 /* TrueKeyword */: - return true; - case 24 /* FalseKeyword */: - return false; - case 32 /* NullKeyword */: - return null; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return TypeScript.SyntaxFacts.getText(kind); - } - - if (kind === 13 /* NumericLiteral */) { - return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text); - } else if (kind === 14 /* StringLiteral */) { - if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) { - return massageEscapes(text.substr(1, text.length - 2)); - } else { - return massageEscapes(text.substr(1)); - } - } else if (kind === 12 /* RegularExpressionLiteral */) { - return regularExpressionValue(text); - } else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) { - return null; - } else { - throw TypeScript.Errors.invalidOperation(); - } - } - - function regularExpressionValue(text) { - try { - var lastSlash = text.lastIndexOf("/"); - var body = text.substring(1, lastSlash); - var flags = text.substring(lastSlash + 1); - return new RegExp(body, flags); - } catch (e) { - return null; - } - } - - function valueText1(kind, text) { - var value = value1(kind, text); - return value === null ? "" : value.toString(); - } - - function valueText(token) { - var value = token.value(); - return value === null ? "" : value.toString(); - } - Syntax.valueText = valueText; - - var EmptyToken = (function () { - function EmptyToken(kind) { - this.tokenKind = kind; - } - EmptyToken.prototype.clone = function () { - return new EmptyToken(this.tokenKind); - }; - - EmptyToken.prototype.kind = function () { - return this.tokenKind; - }; - - EmptyToken.prototype.isToken = function () { - return true; - }; - EmptyToken.prototype.isNode = function () { - return false; - }; - EmptyToken.prototype.isList = function () { - return false; - }; - EmptyToken.prototype.isSeparatedList = function () { - return false; - }; - - EmptyToken.prototype.childCount = function () { - return 0; - }; - - EmptyToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - EmptyToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - EmptyToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - EmptyToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - EmptyToken.prototype.firstToken = function () { - return this; - }; - EmptyToken.prototype.lastToken = function () { - return this; - }; - EmptyToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - EmptyToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - EmptyToken.prototype.fullWidth = function () { - return 0; - }; - EmptyToken.prototype.width = function () { - return 0; - }; - EmptyToken.prototype.text = function () { - return ""; - }; - EmptyToken.prototype.fullText = function () { - return ""; - }; - EmptyToken.prototype.value = function () { - return null; - }; - EmptyToken.prototype.valueText = function () { - return ""; - }; - - EmptyToken.prototype.hasLeadingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasLeadingComment = function () { - return false; - }; - EmptyToken.prototype.hasLeadingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasLeadingSkippedText = function () { - return false; - }; - EmptyToken.prototype.leadingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.hasTrailingTrivia = function () { - return false; - }; - EmptyToken.prototype.hasTrailingComment = function () { - return false; - }; - EmptyToken.prototype.hasTrailingNewLine = function () { - return false; - }; - EmptyToken.prototype.hasTrailingSkippedText = function () { - return false; - }; - EmptyToken.prototype.hasSkippedToken = function () { - return false; - }; - - EmptyToken.prototype.trailingTriviaWidth = function () { - return 0; - }; - EmptyToken.prototype.leadingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.trailingTrivia = function () { - return Syntax.emptyTriviaList; - }; - EmptyToken.prototype.realize = function () { - return realizeToken(this); - }; - EmptyToken.prototype.collectTextElements = function (elements) { - }; - - EmptyToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return this.realize().withLeadingTrivia(leadingTrivia); - }; - - EmptyToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return this.realize().withTrailingTrivia(trailingTrivia); - }; - - EmptyToken.prototype.isExpression = function () { - return isExpression(this); - }; - - EmptyToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - EmptyToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return EmptyToken; - })(); - - function emptyToken(kind) { - return new EmptyToken(kind); - } - Syntax.emptyToken = emptyToken; - - var RealizedToken = (function () { - function RealizedToken(tokenKind, leadingTrivia, text, value, valueText, trailingTrivia) { - this.tokenKind = tokenKind; - this._leadingTrivia = leadingTrivia; - this._text = text; - this._value = value; - this._valueText = valueText; - this._trailingTrivia = trailingTrivia; - } - RealizedToken.prototype.clone = function () { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.kind = function () { - return this.tokenKind; - }; - RealizedToken.prototype.toJSON = function (key) { - return tokenToJSON(this); - }; - RealizedToken.prototype.firstToken = function () { - return this; - }; - RealizedToken.prototype.lastToken = function () { - return this; - }; - RealizedToken.prototype.isTypeScriptSpecific = function () { - return false; - }; - - RealizedToken.prototype.isIncrementallyUnusable = function () { - return true; - }; - - RealizedToken.prototype.accept = function (visitor) { - return visitor.visitToken(this); - }; - - RealizedToken.prototype.childCount = function () { - return 0; - }; - - RealizedToken.prototype.childAt = function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }; - - RealizedToken.prototype.isToken = function () { - return true; - }; - RealizedToken.prototype.isNode = function () { - return false; - }; - RealizedToken.prototype.isList = function () { - return false; - }; - RealizedToken.prototype.isSeparatedList = function () { - return false; - }; - RealizedToken.prototype.isTrivia = function () { - return false; - }; - RealizedToken.prototype.isTriviaList = function () { - return false; - }; - - RealizedToken.prototype.fullWidth = function () { - return this._leadingTrivia.fullWidth() + this.width() + this._trailingTrivia.fullWidth(); - }; - RealizedToken.prototype.width = function () { - return this.text().length; - }; - - RealizedToken.prototype.text = function () { - return this._text; - }; - RealizedToken.prototype.fullText = function () { - return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText(); - }; - - RealizedToken.prototype.value = function () { - return this._value; - }; - RealizedToken.prototype.valueText = function () { - return this._valueText; - }; - - RealizedToken.prototype.hasLeadingTrivia = function () { - return this._leadingTrivia.count() > 0; - }; - RealizedToken.prototype.hasLeadingComment = function () { - return this._leadingTrivia.hasComment(); - }; - RealizedToken.prototype.hasLeadingNewLine = function () { - return this._leadingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasLeadingSkippedText = function () { - return this._leadingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.leadingTriviaWidth = function () { - return this._leadingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasTrailingTrivia = function () { - return this._trailingTrivia.count() > 0; - }; - RealizedToken.prototype.hasTrailingComment = function () { - return this._trailingTrivia.hasComment(); - }; - RealizedToken.prototype.hasTrailingNewLine = function () { - return this._trailingTrivia.hasNewLine(); - }; - RealizedToken.prototype.hasTrailingSkippedText = function () { - return this._trailingTrivia.hasSkippedToken(); - }; - RealizedToken.prototype.trailingTriviaWidth = function () { - return this._trailingTrivia.fullWidth(); - }; - - RealizedToken.prototype.hasSkippedToken = function () { - return this.hasLeadingSkippedText() || this.hasTrailingSkippedText(); - }; - - RealizedToken.prototype.leadingTrivia = function () { - return this._leadingTrivia; - }; - RealizedToken.prototype.trailingTrivia = function () { - return this._trailingTrivia; - }; - - RealizedToken.prototype.findTokenInternal = function (parent, position, fullStart) { - return new TypeScript.PositionedToken(parent, this, fullStart); - }; - - RealizedToken.prototype.collectTextElements = function (elements) { - this.leadingTrivia().collectTextElements(elements); - elements.push(this.text()); - this.trailingTrivia().collectTextElements(elements); - }; - - RealizedToken.prototype.withLeadingTrivia = function (leadingTrivia) { - return new RealizedToken(this.tokenKind, leadingTrivia, this._text, this._value, this._valueText, this._trailingTrivia); - }; - - RealizedToken.prototype.withTrailingTrivia = function (trailingTrivia) { - return new RealizedToken(this.tokenKind, this._leadingTrivia, this._text, this._value, this._valueText, trailingTrivia); - }; - - RealizedToken.prototype.isExpression = function () { - return isExpression(this); - }; - - RealizedToken.prototype.isPrimaryExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isMemberExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isPostfixExpression = function () { - return this.isExpression(); - }; - - RealizedToken.prototype.isUnaryExpression = function () { - return this.isExpression(); - }; - return RealizedToken; - })(); - - function token(kind, info) { - if (typeof info === "undefined") { info = null; } - var text = (info !== null && info.text !== undefined) ? info.text : TypeScript.SyntaxFacts.getText(kind); - - return new RealizedToken(kind, Syntax.triviaList(info === null ? null : info.leadingTrivia), text, value1(kind, text), valueText1(kind, text), Syntax.triviaList(info === null ? null : info.trailingTrivia)); - } - Syntax.token = token; - - function identifier(text, info) { - if (typeof info === "undefined") { info = null; } - info = info || {}; - info.text = text; - return token(11 /* IdentifierName */, info); - } - Syntax.identifier = identifier; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTokenReplacer = (function (_super) { - __extends(SyntaxTokenReplacer, _super); - function SyntaxTokenReplacer(token1, token2) { - _super.call(this); - this.token1 = token1; - this.token2 = token2; - } - SyntaxTokenReplacer.prototype.visitToken = function (token) { - if (token === this.token1) { - var result = this.token2; - this.token1 = null; - this.token2 = null; - - return result; - } - - return token; - }; - - SyntaxTokenReplacer.prototype.visitNode = function (node) { - if (this.token1 === null) { - return node; - } - - return _super.prototype.visitNode.call(this, node); - }; - - SyntaxTokenReplacer.prototype.visitList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitList.call(this, list); - }; - - SyntaxTokenReplacer.prototype.visitSeparatedList = function (list) { - if (this.token1 === null) { - return list; - } - - return _super.prototype.visitSeparatedList.call(this, list); - }; - return SyntaxTokenReplacer; - })(TypeScript.SyntaxRewriter); - TypeScript.SyntaxTokenReplacer = SyntaxTokenReplacer; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - var AbstractTrivia = (function () { - function AbstractTrivia(_kind) { - this._kind = _kind; - } - AbstractTrivia.prototype.fullWidth = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.fullText = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.abstract(); - }; - - AbstractTrivia.prototype.toJSON = function (key) { - var result = {}; - - for (var name in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind[name] === this._kind) { - result.kind = name; - break; - } - } - - if (this.isSkippedToken()) { - result.skippedToken = this.skippedToken(); - } else { - result.text = this.fullText(); - } - return result; - }; - - AbstractTrivia.prototype.kind = function () { - return this._kind; - }; - - AbstractTrivia.prototype.isWhitespace = function () { - return this.kind() === 4 /* WhitespaceTrivia */; - }; - - AbstractTrivia.prototype.isComment = function () { - return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */; - }; - - AbstractTrivia.prototype.isNewLine = function () { - return this.kind() === 5 /* NewLineTrivia */; - }; - - AbstractTrivia.prototype.isSkippedToken = function () { - return this.kind() === 8 /* SkippedTokenTrivia */; - }; - - AbstractTrivia.prototype.collectTextElements = function (elements) { - elements.push(this.fullText()); - }; - return AbstractTrivia; - })(); - - var NormalTrivia = (function (_super) { - __extends(NormalTrivia, _super); - function NormalTrivia(kind, _text) { - _super.call(this, kind); - this._text = _text; - } - NormalTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - NormalTrivia.prototype.fullText = function () { - return this._text; - }; - - NormalTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return NormalTrivia; - })(AbstractTrivia); - - var SkippedTokenTrivia = (function (_super) { - __extends(SkippedTokenTrivia, _super); - function SkippedTokenTrivia(_skippedToken) { - _super.call(this, 8 /* SkippedTokenTrivia */); - this._skippedToken = _skippedToken; - } - SkippedTokenTrivia.prototype.fullWidth = function () { - return this.fullText().length; - }; - - SkippedTokenTrivia.prototype.fullText = function () { - return this.skippedToken().fullText(); - }; - - SkippedTokenTrivia.prototype.skippedToken = function () { - return this._skippedToken; - }; - return SkippedTokenTrivia; - })(AbstractTrivia); - - var DeferredTrivia = (function (_super) { - __extends(DeferredTrivia, _super); - function DeferredTrivia(kind, _text, _fullStart, _fullWidth) { - _super.call(this, kind); - this._text = _text; - this._fullStart = _fullStart; - this._fullWidth = _fullWidth; - this._fullText = null; - } - DeferredTrivia.prototype.fullWidth = function () { - return this._fullWidth; - }; - - DeferredTrivia.prototype.fullText = function () { - if (!this._fullText) { - this._fullText = this._text.substr(this._fullStart, this._fullWidth, false); - this._text = null; - } - - return this._fullText; - }; - - DeferredTrivia.prototype.skippedToken = function () { - throw TypeScript.Errors.invalidOperation(); - }; - return DeferredTrivia; - })(AbstractTrivia); - - function deferredTrivia(kind, text, fullStart, fullWidth) { - return new DeferredTrivia(kind, text, fullStart, fullWidth); - } - Syntax.deferredTrivia = deferredTrivia; - - function trivia(kind, text) { - return new NormalTrivia(kind, text); - } - Syntax.trivia = trivia; - - function skippedTokenTrivia(token) { - TypeScript.Debug.assert(!token.hasLeadingTrivia()); - TypeScript.Debug.assert(!token.hasTrailingTrivia()); - TypeScript.Debug.assert(token.fullWidth() > 0); - return new SkippedTokenTrivia(token); - } - Syntax.skippedTokenTrivia = skippedTokenTrivia; - - function spaces(count) { - return trivia(4 /* WhitespaceTrivia */, TypeScript.StringUtilities.repeat(" ", count)); - } - Syntax.spaces = spaces; - - function whitespace(text) { - return trivia(4 /* WhitespaceTrivia */, text); - } - Syntax.whitespace = whitespace; - - function multiLineComment(text) { - return trivia(6 /* MultiLineCommentTrivia */, text); - } - Syntax.multiLineComment = multiLineComment; - - function singleLineComment(text) { - return trivia(7 /* SingleLineCommentTrivia */, text); - } - Syntax.singleLineComment = singleLineComment; - - Syntax.spaceTrivia = spaces(1); - Syntax.lineFeedTrivia = trivia(5 /* NewLineTrivia */, "\n"); - Syntax.carriageReturnTrivia = trivia(5 /* NewLineTrivia */, "\r"); - Syntax.carriageReturnLineFeedTrivia = trivia(5 /* NewLineTrivia */, "\r\n"); - - function splitMultiLineCommentTriviaIntoMultipleLines(trivia) { - var result = []; - - var triviaText = trivia.fullText(); - var currentIndex = 0; - - for (var i = 0; i < triviaText.length; i++) { - var ch = triviaText.charCodeAt(i); - - var isCarriageReturnLineFeed = false; - switch (ch) { - case 13 /* carriageReturn */: - if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) { - i++; - } - - case 10 /* lineFeed */: - case 8233 /* paragraphSeparator */: - case 8232 /* lineSeparator */: - result.push(triviaText.substring(currentIndex, i + 1)); - - currentIndex = i + 1; - continue; - } - } - - result.push(triviaText.substring(currentIndex)); - return result; - } - Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines; - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (Syntax) { - Syntax.emptyTriviaList = { - kind: function () { - return 3 /* TriviaList */; - }, - count: function () { - return 0; - }, - syntaxTriviaAt: function (index) { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - last: function () { - throw TypeScript.Errors.argumentOutOfRange("index"); - }, - fullWidth: function () { - return 0; - }, - fullText: function () { - return ""; - }, - hasComment: function () { - return false; - }, - hasNewLine: function () { - return false; - }, - hasSkippedToken: function () { - return false; - }, - toJSON: function (key) { - return []; - }, - collectTextElements: function (elements) { - }, - toArray: function () { - return []; - }, - concat: function (trivia) { - return trivia; - } - }; - - function concatTrivia(list1, list2) { - if (list1.count() === 0) { - return list2; - } - - if (list2.count() === 0) { - return list1; - } - - var trivia = list1.toArray(); - trivia.push.apply(trivia, list2.toArray()); - - return triviaList(trivia); - } - - function isComment(trivia) { - return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */; - } - - var SingletonSyntaxTriviaList = (function () { - function SingletonSyntaxTriviaList(item) { - this.item = item; - } - SingletonSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - SingletonSyntaxTriviaList.prototype.count = function () { - return 1; - }; - - SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index !== 0) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.last = function () { - return this.item; - }; - - SingletonSyntaxTriviaList.prototype.fullWidth = function () { - return this.item.fullWidth(); - }; - - SingletonSyntaxTriviaList.prototype.fullText = function () { - return this.item.fullText(); - }; - - SingletonSyntaxTriviaList.prototype.hasComment = function () { - return isComment(this.item); - }; - - SingletonSyntaxTriviaList.prototype.hasNewLine = function () { - return this.item.kind() === 5 /* NewLineTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () { - return this.item.kind() === 8 /* SkippedTokenTrivia */; - }; - - SingletonSyntaxTriviaList.prototype.toJSON = function (key) { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.collectTextElements = function (elements) { - this.item.collectTextElements(elements); - }; - - SingletonSyntaxTriviaList.prototype.toArray = function () { - return [this.item]; - }; - - SingletonSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return SingletonSyntaxTriviaList; - })(); - - var NormalSyntaxTriviaList = (function () { - function NormalSyntaxTriviaList(trivia) { - this.trivia = trivia; - } - NormalSyntaxTriviaList.prototype.kind = function () { - return 3 /* TriviaList */; - }; - - NormalSyntaxTriviaList.prototype.count = function () { - return this.trivia.length; - }; - - NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { - if (index < 0 || index >= this.trivia.length) { - throw TypeScript.Errors.argumentOutOfRange("index"); - } - - return this.trivia[index]; - }; - - NormalSyntaxTriviaList.prototype.last = function () { - return this.trivia[this.trivia.length - 1]; - }; - - NormalSyntaxTriviaList.prototype.fullWidth = function () { - return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { - return t.fullWidth(); - }); - }; - - NormalSyntaxTriviaList.prototype.fullText = function () { - var result = ""; - - for (var i = 0, n = this.trivia.length; i < n; i++) { - result += this.trivia[i].fullText(); - } - - return result; - }; - - NormalSyntaxTriviaList.prototype.hasComment = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (isComment(this.trivia[i])) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasNewLine = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 5 /* NewLineTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.hasSkippedToken = function () { - for (var i = 0; i < this.trivia.length; i++) { - if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) { - return true; - } - } - - return false; - }; - - NormalSyntaxTriviaList.prototype.toJSON = function (key) { - return this.trivia; - }; - - NormalSyntaxTriviaList.prototype.collectTextElements = function (elements) { - for (var i = 0; i < this.trivia.length; i++) { - this.trivia[i].collectTextElements(elements); - } - }; - - NormalSyntaxTriviaList.prototype.toArray = function () { - return this.trivia.slice(0); - }; - - NormalSyntaxTriviaList.prototype.concat = function (trivia) { - return concatTrivia(this, trivia); - }; - return NormalSyntaxTriviaList; - })(); - - function triviaList(trivia) { - if (trivia === undefined || trivia === null || trivia.length === 0) { - return Syntax.emptyTriviaList; - } - - if (trivia.length === 1) { - return new SingletonSyntaxTriviaList(trivia[0]); - } - - return new NormalSyntaxTriviaList(trivia); - } - Syntax.triviaList = triviaList; - - Syntax.spaceTriviaList = triviaList([Syntax.spaceTrivia]); - })(TypeScript.Syntax || (TypeScript.Syntax = {})); - var Syntax = TypeScript.Syntax; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxUtilities = (function () { - function SyntaxUtilities() { - } - SyntaxUtilities.isAngleBracket = function (positionedElement) { - var element = positionedElement.element(); - var parent = positionedElement.parentElement(); - if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) { - switch (parent.kind()) { - case 228 /* TypeArgumentList */: - case 229 /* TypeParameterList */: - case 220 /* CastExpression */: - return true; - } - } - - return false; - }; - - SyntaxUtilities.getToken = function (list, kind) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var token = list.childAt(i); - if (token.tokenKind === kind) { - return token; - } - } - - return null; - }; - - SyntaxUtilities.containsToken = function (list, kind) { - return SyntaxUtilities.getToken(list, kind) !== null; - }; - - SyntaxUtilities.hasExportKeyword = function (moduleElement) { - return SyntaxUtilities.getExportKeyword(moduleElement) !== null; - }; - - SyntaxUtilities.getExportKeyword = function (moduleElement) { - switch (moduleElement.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - case 128 /* InterfaceDeclaration */: - case 133 /* ImportDeclaration */: - return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */); - default: - return null; - } - }; - - SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) { - if (!positionNode) { - return false; - } - - var node = positionNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 148 /* VariableStatement */: - case 132 /* EnumDeclaration */: - if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - return true; - } - - case 133 /* ImportDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - if (node.isClassElement() || node.isModuleElement()) { - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - - case 243 /* EnumElement */: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode().containingNode()); - - default: - return SyntaxUtilities.isAmbientDeclarationSyntax(positionNode.containingNode()); - } - }; - return SyntaxUtilities; - })(); - TypeScript.SyntaxUtilities = SyntaxUtilities; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxVisitor = (function () { - function SyntaxVisitor() { - } - SyntaxVisitor.prototype.defaultVisit = function (node) { - return null; - }; - - SyntaxVisitor.prototype.visitToken = function (token) { - return this.defaultVisit(token); - }; - - SyntaxVisitor.prototype.visitSourceUnit = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExternalModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleNameModuleReference = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitImportDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExportAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitClassDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInterfaceDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitHeritageClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitModuleDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVariableDeclarator = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEqualsValueClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPrefixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitOmittedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitQualifiedName = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArrayType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGenericType = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeQuery = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeAnnotation = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBlock = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPostfixUnaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElementAccessExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitInvocationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitArgumentList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBinaryExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConditionalExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMethodSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitPropertySignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCallSignature = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameterList = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeParameter = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstraint = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitElseClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIfStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitExpressionStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitConstructorDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitGetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSetAccessor = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitMemberVariableDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitIndexMemberDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitThrowStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitReturnStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectCreationExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSwitchStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCaseSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDefaultSwitchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitBreakStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitContinueStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitForInStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWhileStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitWithStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumDeclaration = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEnumElement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCastExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitObjectLiteralExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitSimplePropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFunctionExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitEmptyStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTryStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitCatchClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitFinallyClause = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitLabeledStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDoStatement = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitTypeOfExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDeleteExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitVoidExpression = function (node) { - return this.defaultVisit(node); - }; - - SyntaxVisitor.prototype.visitDebuggerStatement = function (node) { - return this.defaultVisit(node); - }; - return SyntaxVisitor; - })(); - TypeScript.SyntaxVisitor = SyntaxVisitor; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxWalker = (function () { - function SyntaxWalker() { - } - SyntaxWalker.prototype.visitToken = function (token) { - }; - - SyntaxWalker.prototype.visitNode = function (node) { - node.accept(this); - }; - - SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) { - if (nodeOrToken.isToken()) { - this.visitToken(nodeOrToken); - } else { - this.visitNode(nodeOrToken); - } - }; - - SyntaxWalker.prototype.visitOptionalToken = function (token) { - if (token === null) { - return; - } - - this.visitToken(token); - }; - - SyntaxWalker.prototype.visitOptionalNode = function (node) { - if (node === null) { - return; - } - - this.visitNode(node); - }; - - SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) { - if (nodeOrToken === null) { - return; - } - - this.visitNodeOrToken(nodeOrToken); - }; - - SyntaxWalker.prototype.visitList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.visitNodeOrToken(list.childAt(i)); - } - }; - - SyntaxWalker.prototype.visitSeparatedList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - var item = list.childAt(i); - this.visitNodeOrToken(item); - } - }; - - SyntaxWalker.prototype.visitSourceUnit = function (node) { - this.visitList(node.moduleElements); - this.visitToken(node.endOfFileToken); - }; - - SyntaxWalker.prototype.visitExternalModuleReference = function (node) { - this.visitToken(node.requireKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.stringLiteral); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) { - this.visitNodeOrToken(node.moduleName); - }; - - SyntaxWalker.prototype.visitImportDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.importKeyword); - this.visitToken(node.identifier); - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.moduleReference); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitExportAssignment = function (node) { - this.visitToken(node.exportKeyword); - this.visitToken(node.equalsToken); - this.visitToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitClassDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.classKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitToken(node.openBraceToken); - this.visitList(node.classElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.interfaceKeyword); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeParameterList); - this.visitList(node.heritageClauses); - this.visitNode(node.body); - }; - - SyntaxWalker.prototype.visitHeritageClause = function (node) { - this.visitToken(node.extendsOrImplementsKeyword); - this.visitSeparatedList(node.typeNames); - }; - - SyntaxWalker.prototype.visitModuleDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.moduleKeyword); - this.visitOptionalNodeOrToken(node.name); - this.visitOptionalToken(node.stringLiteral); - this.visitToken(node.openBraceToken); - this.visitList(node.moduleElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.functionKeyword); - this.visitToken(node.identifier); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableStatement = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclaration); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitVariableDeclaration = function (node) { - this.visitToken(node.varKeyword); - this.visitSeparatedList(node.variableDeclarators); - }; - - SyntaxWalker.prototype.visitVariableDeclarator = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitEqualsValueClause = function (node) { - this.visitToken(node.equalsToken); - this.visitNodeOrToken(node.value); - }; - - SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) { - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.operand); - }; - - SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) { - this.visitToken(node.openBracketToken); - this.visitSeparatedList(node.expressions); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitOmittedExpression = function (node) { - }; - - SyntaxWalker.prototype.visitParenthesizedExpression = function (node) { - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - this.visitNode(node.callSignature); - this.visitToken(node.equalsGreaterThanToken); - this.visitOptionalNode(node.block); - this.visitOptionalNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitQualifiedName = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.dotToken); - this.visitToken(node.right); - }; - - SyntaxWalker.prototype.visitTypeArgumentList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeArguments); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitConstructorType = function (node) { - this.visitToken(node.newKeyword); - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitFunctionType = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitToken(node.equalsGreaterThanToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitObjectType = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.typeMembers); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitArrayType = function (node) { - this.visitNodeOrToken(node.type); - this.visitToken(node.openBracketToken); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitGenericType = function (node) { - this.visitNodeOrToken(node.name); - this.visitNode(node.typeArgumentList); - }; - - SyntaxWalker.prototype.visitTypeQuery = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.name); - }; - - SyntaxWalker.prototype.visitTypeAnnotation = function (node) { - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitBlock = function (node) { - this.visitToken(node.openBraceToken); - this.visitList(node.statements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitParameter = function (node) { - this.visitOptionalToken(node.dotDotDotToken); - this.visitList(node.modifiers); - this.visitToken(node.identifier); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitMemberAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.dotToken); - this.visitToken(node.name); - }; - - SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) { - this.visitNodeOrToken(node.operand); - this.visitToken(node.operatorToken); - }; - - SyntaxWalker.prototype.visitElementAccessExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.openBracketToken); - this.visitNodeOrToken(node.argumentExpression); - this.visitToken(node.closeBracketToken); - }; - - SyntaxWalker.prototype.visitInvocationExpression = function (node) { - this.visitNodeOrToken(node.expression); - this.visitNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitArgumentList = function (node) { - this.visitOptionalNode(node.typeArgumentList); - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.arguments); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitBinaryExpression = function (node) { - this.visitNodeOrToken(node.left); - this.visitToken(node.operatorToken); - this.visitNodeOrToken(node.right); - }; - - SyntaxWalker.prototype.visitConditionalExpression = function (node) { - this.visitNodeOrToken(node.condition); - this.visitToken(node.questionToken); - this.visitNodeOrToken(node.whenTrue); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.whenFalse); - }; - - SyntaxWalker.prototype.visitConstructSignature = function (node) { - this.visitToken(node.newKeyword); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitMethodSignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitNode(node.callSignature); - }; - - SyntaxWalker.prototype.visitIndexSignature = function (node) { - this.visitToken(node.openBracketToken); - this.visitNode(node.parameter); - this.visitToken(node.closeBracketToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitPropertySignature = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalToken(node.questionToken); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitCallSignature = function (node) { - this.visitOptionalNode(node.typeParameterList); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - }; - - SyntaxWalker.prototype.visitParameterList = function (node) { - this.visitToken(node.openParenToken); - this.visitSeparatedList(node.parameters); - this.visitToken(node.closeParenToken); - }; - - SyntaxWalker.prototype.visitTypeParameterList = function (node) { - this.visitToken(node.lessThanToken); - this.visitSeparatedList(node.typeParameters); - this.visitToken(node.greaterThanToken); - }; - - SyntaxWalker.prototype.visitTypeParameter = function (node) { - this.visitToken(node.identifier); - this.visitOptionalNode(node.constraint); - }; - - SyntaxWalker.prototype.visitConstraint = function (node) { - this.visitToken(node.extendsKeyword); - this.visitNodeOrToken(node.type); - }; - - SyntaxWalker.prototype.visitElseClause = function (node) { - this.visitToken(node.elseKeyword); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitIfStatement = function (node) { - this.visitToken(node.ifKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - this.visitOptionalNode(node.elseClause); - }; - - SyntaxWalker.prototype.visitExpressionStatement = function (node) { - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitConstructorDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.constructorKeyword); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitOptionalNode(node.block); - this.visitOptionalToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitGetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.getKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitOptionalNode(node.typeAnnotation); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitSetAccessor = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.setKeyword); - this.visitToken(node.propertyName); - this.visitNode(node.parameterList); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.variableDeclarator); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitNode(node.indexSignature); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitThrowStatement = function (node) { - this.visitToken(node.throwKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitReturnStatement = function (node) { - this.visitToken(node.returnKeyword); - this.visitOptionalNodeOrToken(node.expression); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitObjectCreationExpression = function (node) { - this.visitToken(node.newKeyword); - this.visitNodeOrToken(node.expression); - this.visitOptionalNode(node.argumentList); - }; - - SyntaxWalker.prototype.visitSwitchStatement = function (node) { - this.visitToken(node.switchKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitToken(node.openBraceToken); - this.visitList(node.switchClauses); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitCaseSwitchClause = function (node) { - this.visitToken(node.caseKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) { - this.visitToken(node.defaultKeyword); - this.visitToken(node.colonToken); - this.visitList(node.statements); - }; - - SyntaxWalker.prototype.visitBreakStatement = function (node) { - this.visitToken(node.breakKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitContinueStatement = function (node) { - this.visitToken(node.continueKeyword); - this.visitOptionalToken(node.identifier); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitForStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.initializer); - this.visitToken(node.firstSemicolonToken); - this.visitOptionalNodeOrToken(node.condition); - this.visitToken(node.secondSemicolonToken); - this.visitOptionalNodeOrToken(node.incrementor); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitForInStatement = function (node) { - this.visitToken(node.forKeyword); - this.visitToken(node.openParenToken); - this.visitOptionalNode(node.variableDeclaration); - this.visitOptionalNodeOrToken(node.left); - this.visitToken(node.inKeyword); - this.visitNodeOrToken(node.expression); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWhileStatement = function (node) { - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitWithStatement = function (node) { - this.visitToken(node.withKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitEnumDeclaration = function (node) { - this.visitList(node.modifiers); - this.visitToken(node.enumKeyword); - this.visitToken(node.identifier); - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.enumElements); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitEnumElement = function (node) { - this.visitToken(node.propertyName); - this.visitOptionalNode(node.equalsValueClause); - }; - - SyntaxWalker.prototype.visitCastExpression = function (node) { - this.visitToken(node.lessThanToken); - this.visitNodeOrToken(node.type); - this.visitToken(node.greaterThanToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) { - this.visitToken(node.openBraceToken); - this.visitSeparatedList(node.propertyAssignments); - this.visitToken(node.closeBraceToken); - }; - - SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) { - this.visitToken(node.propertyName); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFunctionExpression = function (node) { - this.visitToken(node.functionKeyword); - this.visitOptionalToken(node.identifier); - this.visitNode(node.callSignature); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitEmptyStatement = function (node) { - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTryStatement = function (node) { - this.visitToken(node.tryKeyword); - this.visitNode(node.block); - this.visitOptionalNode(node.catchClause); - this.visitOptionalNode(node.finallyClause); - }; - - SyntaxWalker.prototype.visitCatchClause = function (node) { - this.visitToken(node.catchKeyword); - this.visitToken(node.openParenToken); - this.visitToken(node.identifier); - this.visitOptionalNode(node.typeAnnotation); - this.visitToken(node.closeParenToken); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitFinallyClause = function (node) { - this.visitToken(node.finallyKeyword); - this.visitNode(node.block); - }; - - SyntaxWalker.prototype.visitLabeledStatement = function (node) { - this.visitToken(node.identifier); - this.visitToken(node.colonToken); - this.visitNodeOrToken(node.statement); - }; - - SyntaxWalker.prototype.visitDoStatement = function (node) { - this.visitToken(node.doKeyword); - this.visitNodeOrToken(node.statement); - this.visitToken(node.whileKeyword); - this.visitToken(node.openParenToken); - this.visitNodeOrToken(node.condition); - this.visitToken(node.closeParenToken); - this.visitToken(node.semicolonToken); - }; - - SyntaxWalker.prototype.visitTypeOfExpression = function (node) { - this.visitToken(node.typeOfKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDeleteExpression = function (node) { - this.visitToken(node.deleteKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitVoidExpression = function (node) { - this.visitToken(node.voidKeyword); - this.visitNodeOrToken(node.expression); - }; - - SyntaxWalker.prototype.visitDebuggerStatement = function (node) { - this.visitToken(node.debuggerKeyword); - this.visitToken(node.semicolonToken); - }; - return SyntaxWalker; - })(); - TypeScript.SyntaxWalker = SyntaxWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PositionTrackingWalker = (function (_super) { - __extends(PositionTrackingWalker, _super); - function PositionTrackingWalker() { - _super.apply(this, arguments); - this._position = 0; - } - PositionTrackingWalker.prototype.visitToken = function (token) { - this._position += token.fullWidth(); - }; - - PositionTrackingWalker.prototype.position = function () { - return this._position; - }; - - PositionTrackingWalker.prototype.skip = function (element) { - this._position += element.fullWidth(); - }; - return PositionTrackingWalker; - })(TypeScript.SyntaxWalker); - TypeScript.PositionTrackingWalker = PositionTrackingWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxInformationMap = (function (_super) { - __extends(SyntaxInformationMap, _super); - function SyntaxInformationMap(trackParents, trackPreviousToken) { - _super.call(this); - this.trackParents = trackParents; - this.trackPreviousToken = trackPreviousToken; - this.tokenToInformation = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this.elementToPosition = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._previousToken = null; - this._previousTokenInformation = null; - this._currentPosition = 0; - this._elementToParent = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - this._parentStack = []; - this._parentStack.push(null); - } - SyntaxInformationMap.create = function (node, trackParents, trackPreviousToken) { - var map = new SyntaxInformationMap(trackParents, trackPreviousToken); - map.visitNode(node); - return map; - }; - - SyntaxInformationMap.prototype.visitNode = function (node) { - this.trackParents && this._elementToParent.add(node, TypeScript.ArrayUtilities.last(this._parentStack)); - this.elementToPosition.add(node, this._currentPosition); - - this.trackParents && this._parentStack.push(node); - _super.prototype.visitNode.call(this, node); - this.trackParents && this._parentStack.pop(); - }; - - SyntaxInformationMap.prototype.visitToken = function (token) { - this.trackParents && this._elementToParent.add(token, TypeScript.ArrayUtilities.last(this._parentStack)); - - if (this.trackPreviousToken) { - var tokenInformation = { - previousToken: this._previousToken, - nextToken: null - }; - - if (this._previousTokenInformation !== null) { - this._previousTokenInformation.nextToken = token; - } - - this._previousToken = token; - this._previousTokenInformation = tokenInformation; - - this.tokenToInformation.add(token, tokenInformation); - } - - this.elementToPosition.add(token, this._currentPosition); - this._currentPosition += token.fullWidth(); - }; - - SyntaxInformationMap.prototype.parent = function (element) { - return this._elementToParent.get(element); - }; - - SyntaxInformationMap.prototype.fullStart = function (element) { - return this.elementToPosition.get(element); - }; - - SyntaxInformationMap.prototype.start = function (element) { - return this.fullStart(element) + element.leadingTriviaWidth(); - }; - - SyntaxInformationMap.prototype.end = function (element) { - return this.start(element) + element.width(); - }; - - SyntaxInformationMap.prototype.previousToken = function (token) { - return this.tokenInformation(token).previousToken; - }; - - SyntaxInformationMap.prototype.tokenInformation = function (token) { - return this.tokenToInformation.get(token); - }; - - SyntaxInformationMap.prototype.firstTokenInLineContainingToken = function (token) { - var current = token; - while (true) { - var information = this.tokenInformation(current); - if (this.isFirstTokenInLineWorker(information)) { - break; - } - - current = information.previousToken; - } - - return current; - }; - - SyntaxInformationMap.prototype.isFirstTokenInLine = function (token) { - var information = this.tokenInformation(token); - return this.isFirstTokenInLineWorker(information); - }; - - SyntaxInformationMap.prototype.isFirstTokenInLineWorker = function (information) { - return information.previousToken === null || information.previousToken.hasTrailingNewLine(); - }; - return SyntaxInformationMap; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxInformationMap = SyntaxInformationMap; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxNodeInvariantsChecker = (function (_super) { - __extends(SyntaxNodeInvariantsChecker, _super); - function SyntaxNodeInvariantsChecker() { - _super.apply(this, arguments); - this.tokenTable = TypeScript.Collections.createHashTable(TypeScript.Collections.DefaultHashTableCapacity, TypeScript.Collections.identityHashCode); - } - SyntaxNodeInvariantsChecker.checkInvariants = function (node) { - node.accept(new SyntaxNodeInvariantsChecker()); - }; - - SyntaxNodeInvariantsChecker.prototype.visitToken = function (token) { - this.tokenTable.add(token, token); - }; - return SyntaxNodeInvariantsChecker; - })(TypeScript.SyntaxWalker); - TypeScript.SyntaxNodeInvariantsChecker = SyntaxNodeInvariantsChecker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DepthLimitedWalker = (function (_super) { - __extends(DepthLimitedWalker, _super); - function DepthLimitedWalker(maximumDepth) { - _super.call(this); - this._depth = 0; - this._maximumDepth = 0; - this._maximumDepth = maximumDepth; - } - DepthLimitedWalker.prototype.visitNode = function (node) { - if (this._depth < this._maximumDepth) { - this._depth++; - _super.prototype.visitNode.call(this, node); - this._depth--; - } else { - this.skip(node); - } - }; - return DepthLimitedWalker; - })(TypeScript.PositionTrackingWalker); - TypeScript.DepthLimitedWalker = DepthLimitedWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Parser) { - - - var ExpressionPrecedence; - (function (ExpressionPrecedence) { - ExpressionPrecedence[ExpressionPrecedence["CommaExpressionPrecedence"] = 1] = "CommaExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["AssignmentExpressionPrecedence"] = 2] = "AssignmentExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ConditionalExpressionPrecedence"] = 3] = "ConditionalExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["ArrowFunctionPrecedence"] = 4] = "ArrowFunctionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["LogicalOrExpressionPrecedence"] = 5] = "LogicalOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["LogicalAndExpressionPrecedence"] = 6] = "LogicalAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 7] = "BitwiseOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 8] = "BitwiseExclusiveOrExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 9] = "BitwiseAndExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["EqualityExpressionPrecedence"] = 10] = "EqualityExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["RelationalExpressionPrecedence"] = 11] = "RelationalExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["ShiftExpressionPrecdence"] = 12] = "ShiftExpressionPrecdence"; - ExpressionPrecedence[ExpressionPrecedence["AdditiveExpressionPrecedence"] = 13] = "AdditiveExpressionPrecedence"; - ExpressionPrecedence[ExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 14] = "MultiplicativeExpressionPrecedence"; - - ExpressionPrecedence[ExpressionPrecedence["UnaryExpressionPrecedence"] = 15] = "UnaryExpressionPrecedence"; - })(ExpressionPrecedence || (ExpressionPrecedence = {})); - - var ListParsingState; - (function (ListParsingState) { - ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 1 << 0] = "SourceUnit_ModuleElements"; - ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1 << 1] = "ClassDeclaration_ClassElements"; - ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 1 << 2] = "ModuleDeclaration_ModuleElements"; - ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 1 << 3] = "SwitchStatement_SwitchClauses"; - ListParsingState[ListParsingState["SwitchClause_Statements"] = 1 << 4] = "SwitchClause_Statements"; - ListParsingState[ListParsingState["Block_Statements"] = 1 << 5] = "Block_Statements"; - ListParsingState[ListParsingState["TryBlock_Statements"] = 1 << 6] = "TryBlock_Statements"; - ListParsingState[ListParsingState["CatchBlock_Statements"] = 1 << 7] = "CatchBlock_Statements"; - ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 1 << 8] = "EnumDeclaration_EnumElements"; - ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 1 << 9] = "ObjectType_TypeMembers"; - ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 1 << 10] = "ClassOrInterfaceDeclaration_HeritageClauses"; - ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 1 << 11] = "HeritageClause_TypeNameList"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 1 << 12] = "VariableDeclaration_VariableDeclarators_AllowIn"; - ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 1 << 13] = "VariableDeclaration_VariableDeclarators_DisallowIn"; - ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 1 << 14] = "ArgumentList_AssignmentExpressions"; - ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 1 << 15] = "ObjectLiteralExpression_PropertyAssignments"; - ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 1 << 16] = "ArrayLiteralExpression_AssignmentExpressions"; - ListParsingState[ListParsingState["ParameterList_Parameters"] = 1 << 17] = "ParameterList_Parameters"; - ListParsingState[ListParsingState["TypeArgumentList_Types"] = 1 << 18] = "TypeArgumentList_Types"; - ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 1 << 19] = "TypeParameterList_TypeParameters"; - - ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState"; - ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState"; - })(ListParsingState || (ListParsingState = {})); - - var SyntaxCursor = (function () { - function SyntaxCursor(sourceUnit) { - this._elements = []; - this._index = 0; - this._pinCount = 0; - sourceUnit.insertChildrenInto(this._elements, 0); - } - SyntaxCursor.prototype.isFinished = function () { - return this._index === this._elements.length; - }; - - SyntaxCursor.prototype.currentElement = function () { - if (this.isFinished()) { - return null; - } - - return this._elements[this._index]; - }; - - SyntaxCursor.prototype.currentNode = function () { - var element = this.currentElement(); - return element !== null && element.isNode() ? element : null; - }; - - SyntaxCursor.prototype.moveToFirstChild = function () { - if (this.isFinished()) { - return; - } - - var element = this._elements[this._index]; - if (element.isToken()) { - return; - } - - var node = element; - - this._elements.splice(this._index, 1); - - node.insertChildrenInto(this._elements, this._index); - }; - - SyntaxCursor.prototype.moveToNextSibling = function () { - if (this.isFinished()) { - return; - } - - if (this._pinCount > 0) { - this._index++; - return; - } - - this._elements.shift(); - }; - - SyntaxCursor.prototype.getAndPinCursorIndex = function () { - this._pinCount++; - return this._index; - }; - - SyntaxCursor.prototype.releaseAndUnpinCursorIndex = function (index) { - this._pinCount--; - if (this._pinCount === 0) { - } - }; - - SyntaxCursor.prototype.rewindToPinnedCursorIndex = function (index) { - this._index = index; - }; - - SyntaxCursor.prototype.pinCount = function () { - return this._pinCount; - }; - - SyntaxCursor.prototype.moveToFirstToken = function () { - var element; - - while (!this.isFinished()) { - element = this.currentElement(); - if (element.isNode()) { - this.moveToFirstChild(); - continue; - } - - return; - } - }; - - SyntaxCursor.prototype.currentToken = function () { - this.moveToFirstToken(); - if (this.isFinished()) { - return null; - } - - var element = this.currentElement(); - - return element; - }; - - SyntaxCursor.prototype.peekToken = function (n) { - this.moveToFirstToken(); - var pin = this.getAndPinCursorIndex(); - - for (var i = 0; i < n; i++) { - this.moveToNextSibling(); - this.moveToFirstToken(); - } - - var result = this.currentToken(); - this.rewindToPinnedCursorIndex(pin); - this.releaseAndUnpinCursorIndex(pin); - - return result; - }; - return SyntaxCursor; - })(); - - - - var NormalParserSource = (function () { - function NormalParserSource(fileName, text, languageVersion) { - this._previousToken = null; - this._absolutePosition = 0; - this._tokenDiagnostics = []; - this.rewindPointPool = []; - this.rewindPointPoolCount = 0; - this.slidingWindow = new TypeScript.SlidingWindow(this, TypeScript.ArrayUtilities.createArray(32, null), null); - this.scanner = new TypeScript.Scanner(fileName, text, languageVersion); - } - NormalParserSource.prototype.currentNode = function () { - return null; - }; - - NormalParserSource.prototype.moveToNextNode = function () { - throw TypeScript.Errors.invalidOperation(); - }; - - NormalParserSource.prototype.absolutePosition = function () { - return this._absolutePosition; - }; - - NormalParserSource.prototype.previousToken = function () { - return this._previousToken; - }; - - NormalParserSource.prototype.tokenDiagnostics = function () { - return this._tokenDiagnostics; - }; - - NormalParserSource.prototype.getOrCreateRewindPoint = function () { - if (this.rewindPointPoolCount === 0) { - return {}; - } - - this.rewindPointPoolCount--; - var result = this.rewindPointPool[this.rewindPointPoolCount]; - this.rewindPointPool[this.rewindPointPoolCount] = null; - return result; - }; - - NormalParserSource.prototype.getRewindPoint = function () { - var slidingWindowIndex = this.slidingWindow.getAndPinAbsoluteIndex(); - - var rewindPoint = this.getOrCreateRewindPoint(); - - rewindPoint.slidingWindowIndex = slidingWindowIndex; - rewindPoint.previousToken = this._previousToken; - rewindPoint.absolutePosition = this._absolutePosition; - - rewindPoint.pinCount = this.slidingWindow.pinCount(); - - return rewindPoint; - }; - - NormalParserSource.prototype.isPinned = function () { - return this.slidingWindow.pinCount() > 0; - }; - - NormalParserSource.prototype.rewind = function (rewindPoint) { - this.slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); - - this._previousToken = rewindPoint.previousToken; - this._absolutePosition = rewindPoint.absolutePosition; - }; - - NormalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this.slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex); - - this.rewindPointPool[this.rewindPointPoolCount] = rewindPoint; - this.rewindPointPoolCount++; - }; - - NormalParserSource.prototype.fetchMoreItems = function (allowRegularExpression, sourceIndex, window, destinationIndex, spaceAvailable) { - window[destinationIndex] = this.scanner.scan(this._tokenDiagnostics, allowRegularExpression); - return 1; - }; - - NormalParserSource.prototype.peekToken = function (n) { - return this.slidingWindow.peekItemN(n); - }; - - NormalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - this._absolutePosition += currentToken.fullWidth(); - this._previousToken = currentToken; - - this.slidingWindow.moveToNextItem(); - }; - - NormalParserSource.prototype.currentToken = function () { - return this.slidingWindow.currentItem(false); - }; - - NormalParserSource.prototype.removeDiagnosticsOnOrAfterPosition = function (position) { - var tokenDiagnosticsLength = this._tokenDiagnostics.length; - while (tokenDiagnosticsLength > 0) { - var diagnostic = this._tokenDiagnostics[tokenDiagnosticsLength - 1]; - if (diagnostic.start() >= position) { - tokenDiagnosticsLength--; - } else { - break; - } - } - - this._tokenDiagnostics.length = tokenDiagnosticsLength; - }; - - NormalParserSource.prototype.resetToPosition = function (absolutePosition, previousToken) { - this._absolutePosition = absolutePosition; - this._previousToken = previousToken; - - this.removeDiagnosticsOnOrAfterPosition(absolutePosition); - - this.slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); - - this.scanner.setAbsoluteIndex(absolutePosition); - }; - - NormalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - this.resetToPosition(this._absolutePosition, this._previousToken); - - var token = this.slidingWindow.currentItem(true); - - return token; - }; - return NormalParserSource; - })(); - - var IncrementalParserSource = (function () { - function IncrementalParserSource(oldSyntaxTree, textChangeRange, newText) { - this._changeDelta = 0; - var oldSourceUnit = oldSyntaxTree.sourceUnit(); - this._oldSourceUnitCursor = new SyntaxCursor(oldSourceUnit); - - this._changeRange = IncrementalParserSource.extendToAffectedRange(textChangeRange, oldSourceUnit); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert((oldSourceUnit.fullWidth() - this._changeRange.span().length() + this._changeRange.newLength()) === newText.length()); - } - - this._normalParserSource = new NormalParserSource(oldSyntaxTree.fileName(), newText, oldSyntaxTree.parseOptions().languageVersion()); - } - IncrementalParserSource.extendToAffectedRange = function (changeRange, sourceUnit) { - var maxLookahead = 1; - - var start = changeRange.span().start(); - - for (var i = 0; start > 0 && i <= maxLookahead; i++) { - var token = sourceUnit.findToken(start); - - var position = token.fullStart(); - - start = TypeScript.MathPrototype.max(0, position - 1); - } - - var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end()); - var finalLength = changeRange.newLength() + (changeRange.span().start() - start); - - return new TypeScript.TextChangeRange(finalSpan, finalLength); - }; - - IncrementalParserSource.prototype.absolutePosition = function () { - return this._normalParserSource.absolutePosition(); - }; - - IncrementalParserSource.prototype.previousToken = function () { - return this._normalParserSource.previousToken(); - }; - - IncrementalParserSource.prototype.tokenDiagnostics = function () { - return this._normalParserSource.tokenDiagnostics(); - }; - - IncrementalParserSource.prototype.getRewindPoint = function () { - var rewindPoint = this._normalParserSource.getRewindPoint(); - var oldSourceUnitCursorIndex = this._oldSourceUnitCursor.getAndPinCursorIndex(); - - rewindPoint.changeDelta = this._changeDelta; - rewindPoint.changeRange = this._changeRange; - rewindPoint.oldSourceUnitCursorIndex = oldSourceUnitCursorIndex; - - return rewindPoint; - }; - - IncrementalParserSource.prototype.rewind = function (rewindPoint) { - this._changeRange = rewindPoint.changeRange; - this._changeDelta = rewindPoint.changeDelta; - this._oldSourceUnitCursor.rewindToPinnedCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - - this._normalParserSource.rewind(rewindPoint); - }; - - IncrementalParserSource.prototype.releaseRewindPoint = function (rewindPoint) { - this._oldSourceUnitCursor.releaseAndUnpinCursorIndex(rewindPoint.oldSourceUnitCursorIndex); - this._normalParserSource.releaseRewindPoint(rewindPoint); - }; - - IncrementalParserSource.prototype.canReadFromOldSourceUnit = function () { - if (this._normalParserSource.isPinned()) { - return false; - } - - if (this._changeRange !== null && this._changeRange.newSpan().intersectsWithPosition(this.absolutePosition())) { - return false; - } - - this.syncCursorToNewTextIfBehind(); - - return this._changeDelta === 0 && !this._oldSourceUnitCursor.isFinished(); - }; - - IncrementalParserSource.prototype.currentNode = function () { - if (this.canReadFromOldSourceUnit()) { - return this.tryGetNodeFromOldSourceUnit(); - } - - return null; - }; - - IncrementalParserSource.prototype.currentToken = function () { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryGetTokenFromOldSourceUnit(); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.currentToken(); - }; - - IncrementalParserSource.prototype.currentTokenAllowingRegularExpression = function () { - return this._normalParserSource.currentTokenAllowingRegularExpression(); - }; - - IncrementalParserSource.prototype.syncCursorToNewTextIfBehind = function () { - while (true) { - if (this._oldSourceUnitCursor.isFinished()) { - break; - } - - if (this._changeDelta >= 0) { - break; - } - - var currentElement = this._oldSourceUnitCursor.currentElement(); - - if (currentElement.isNode() && (currentElement.fullWidth() > Math.abs(this._changeDelta))) { - this._oldSourceUnitCursor.moveToFirstChild(); - } else { - this._oldSourceUnitCursor.moveToNextSibling(); - - this._changeDelta += currentElement.fullWidth(); - } - } - }; - - IncrementalParserSource.prototype.intersectsWithChangeRangeSpanInOriginalText = function (start, length) { - return this._changeRange !== null && this._changeRange.span().intersectsWith(start, length); - }; - - IncrementalParserSource.prototype.tryGetNodeFromOldSourceUnit = function () { - while (true) { - var node = this._oldSourceUnitCursor.currentNode(); - if (node === null) { - return null; - } - - if (!this.intersectsWithChangeRangeSpanInOriginalText(this.absolutePosition(), node.fullWidth())) { - if (!node.isIncrementallyUnusable()) { - return node; - } - } - - this._oldSourceUnitCursor.moveToFirstChild(); - } - }; - - IncrementalParserSource.prototype.canReuseTokenFromOldSourceUnit = function (position, token) { - if (token !== null) { - if (!this.intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { - if (!token.isIncrementallyUnusable()) { - return true; - } - } - } - - return false; - }; - - IncrementalParserSource.prototype.tryGetTokenFromOldSourceUnit = function () { - var token = this._oldSourceUnitCursor.currentToken(); - - return this.canReuseTokenFromOldSourceUnit(this.absolutePosition(), token) ? token : null; - }; - - IncrementalParserSource.prototype.peekToken = function (n) { - if (this.canReadFromOldSourceUnit()) { - var token = this.tryPeekTokenFromOldSourceUnit(n); - if (token !== null) { - return token; - } - } - - return this._normalParserSource.peekToken(n); - }; - - IncrementalParserSource.prototype.tryPeekTokenFromOldSourceUnit = function (n) { - var currentPosition = this.absolutePosition(); - for (var i = 0; i < n; i++) { - var interimToken = this._oldSourceUnitCursor.peekToken(i); - if (!this.canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { - return null; - } - - currentPosition += interimToken.fullWidth(); - } - - var token = this._oldSourceUnitCursor.peekToken(n); - return this.canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null; - }; - - IncrementalParserSource.prototype.moveToNextNode = function () { - var currentElement = this._oldSourceUnitCursor.currentElement(); - var currentNode = this._oldSourceUnitCursor.currentNode(); - - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentNode.fullWidth(); - var previousToken = currentNode.lastToken(); - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - }; - - IncrementalParserSource.prototype.moveToNextToken = function () { - var currentToken = this.currentToken(); - - if (this._oldSourceUnitCursor.currentToken() === currentToken) { - this._oldSourceUnitCursor.moveToNextSibling(); - - var absolutePosition = this.absolutePosition() + currentToken.fullWidth(); - var previousToken = currentToken; - this._normalParserSource.resetToPosition(absolutePosition, previousToken); - - if (this._changeRange !== null) { - } - } else { - this._changeDelta -= currentToken.fullWidth(); - - this._normalParserSource.moveToNextToken(); - - if (this._changeRange !== null) { - var changeRangeSpanInNewText = this._changeRange.newSpan(); - if (this.absolutePosition() >= changeRangeSpanInNewText.end()) { - this._changeDelta += this._changeRange.newLength() - this._changeRange.span().length(); - this._changeRange = null; - } - } - } - }; - return IncrementalParserSource; - })(); - - var ParserImpl = (function () { - function ParserImpl(fileName, lineMap, source, parseOptions, newText_forDebuggingPurposesOnly) { - this.newText_forDebuggingPurposesOnly = newText_forDebuggingPurposesOnly; - this.listParsingState = 0; - this.isInStrictMode = false; - this.diagnostics = []; - this.factory = TypeScript.Syntax.normalModeFactory; - this.mergeTokensStorage = []; - this.arrayPool = []; - this.fileName = fileName; - this.lineMap = lineMap; - this.source = source; - this.parseOptions = parseOptions; - } - ParserImpl.prototype.getRewindPoint = function () { - var rewindPoint = this.source.getRewindPoint(); - - rewindPoint.diagnosticsCount = this.diagnostics.length; - - rewindPoint.isInStrictMode = this.isInStrictMode; - rewindPoint.listParsingState = this.listParsingState; - - return rewindPoint; - }; - - ParserImpl.prototype.rewind = function (rewindPoint) { - this.source.rewind(rewindPoint); - - this.diagnostics.length = rewindPoint.diagnosticsCount; - }; - - ParserImpl.prototype.releaseRewindPoint = function (rewindPoint) { - this.source.releaseRewindPoint(rewindPoint); - }; - - ParserImpl.prototype.currentTokenStart = function () { - return this.source.absolutePosition() + this.currentToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenStart = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.source.absolutePosition() - this.previousToken().fullWidth() + this.previousToken().leadingTriviaWidth(); - }; - - ParserImpl.prototype.previousTokenEnd = function () { - if (this.previousToken() === null) { - return 0; - } - - return this.previousTokenStart() + this.previousToken().width(); - }; - - ParserImpl.prototype.currentNode = function () { - var node = this.source.currentNode(); - - if (node === null || node.parsedInStrictMode() !== this.isInStrictMode) { - return null; - } - - return node; - }; - - ParserImpl.prototype.currentToken = function () { - return this.source.currentToken(); - }; - - ParserImpl.prototype.currentTokenAllowingRegularExpression = function () { - return this.source.currentTokenAllowingRegularExpression(); - }; - - ParserImpl.prototype.peekToken = function (n) { - return this.source.peekToken(n); - }; - - ParserImpl.prototype.eatAnyToken = function () { - var token = this.currentToken(); - this.moveToNextToken(); - return token; - }; - - ParserImpl.prototype.moveToNextToken = function () { - this.source.moveToNextToken(); - }; - - ParserImpl.prototype.previousToken = function () { - return this.source.previousToken(); - }; - - ParserImpl.prototype.eatNode = function () { - var node = this.source.currentNode(); - this.source.moveToNextNode(); - return node; - }; - - ParserImpl.prototype.eatToken = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.tryEatToken = function (kind) { - if (this.currentToken().tokenKind === kind) { - return this.eatToken(kind); - } - - return null; - }; - - ParserImpl.prototype.eatKeyword = function (kind) { - var token = this.currentToken(); - if (token.tokenKind === kind) { - this.moveToNextToken(); - return token; - } - - return this.createMissingToken(kind, token); - }; - - ParserImpl.prototype.isIdentifier = function (token) { - var tokenKind = token.tokenKind; - - if (tokenKind === 11 /* IdentifierName */) { - return true; - } - - if (tokenKind >= 51 /* FirstFutureReservedStrictKeyword */) { - if (tokenKind <= 59 /* LastFutureReservedStrictKeyword */) { - return !this.isInStrictMode; - } - - return tokenKind <= 69 /* LastTypeScriptKeyword */; - } - - return false; - }; - - ParserImpl.prototype.eatIdentifierNameToken = function () { - var token = this.currentToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - this.moveToNextToken(); - return token; - } - - if (TypeScript.SyntaxFacts.isAnyKeyword(token.tokenKind)) { - this.moveToNextToken(); - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.eatIdentifierToken = function () { - var token = this.currentToken(); - if (this.isIdentifier(token)) { - this.moveToNextToken(); - - if (token.tokenKind === 11 /* IdentifierName */) { - return token; - } - - return TypeScript.Syntax.convertToIdentifierName(token); - } - - return this.createMissingToken(11 /* IdentifierName */, token); - }; - - ParserImpl.prototype.canEatAutomaticSemicolon = function (allowWithoutNewLine) { - var token = this.currentToken(); - - if (token.tokenKind === 10 /* EndOfFileToken */) { - return true; - } - - if (token.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - if (allowWithoutNewLine) { - return true; - } - - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.canEatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return true; - } - - return this.canEatAutomaticSemicolon(allowWithoutNewline); - }; - - ParserImpl.prototype.eatExplicitOrAutomaticSemicolon = function (allowWithoutNewline) { - var token = this.currentToken(); - - if (token.tokenKind === 78 /* SemicolonToken */) { - return this.eatToken(78 /* SemicolonToken */); - } - - if (this.canEatAutomaticSemicolon(allowWithoutNewline)) { - var semicolonToken = TypeScript.Syntax.emptyToken(78 /* SemicolonToken */); - - if (!this.parseOptions.allowAutomaticSemicolonInsertion()) { - this.addDiagnostic(new TypeScript.Diagnostic(this.fileName, this.lineMap, this.previousTokenEnd(), 0, TypeScript.DiagnosticCode.Automatic_semicolon_insertion_not_allowed, null)); - } - - return semicolonToken; - } - - return this.eatToken(78 /* SemicolonToken */); - }; - - ParserImpl.prototype.isKeyword = function (kind) { - if (kind >= 15 /* FirstKeyword */) { - if (kind <= 50 /* LastFutureReservedKeyword */) { - return true; - } - - if (this.isInStrictMode) { - return kind <= 59 /* LastFutureReservedStrictKeyword */; - } - } - - return false; - }; - - ParserImpl.prototype.createMissingToken = function (expectedKind, actual) { - var diagnostic = this.getExpectedTokenDiagnostic(expectedKind, actual); - this.addDiagnostic(diagnostic); - - return TypeScript.Syntax.emptyToken(expectedKind); - }; - - ParserImpl.prototype.getExpectedTokenDiagnostic = function (expectedKind, actual) { - var token = this.currentToken(); - - if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(expectedKind)]); - } else { - if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.tokenKind)) { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword, [TypeScript.SyntaxFacts.getText(actual.tokenKind)]); - } else { - return new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Identifier_expected, null); - } - } - }; - - ParserImpl.getPrecedence = function (expressionKind) { - switch (expressionKind) { - case 173 /* CommaExpression */: - return 1 /* CommaExpressionPrecedence */; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return 2 /* AssignmentExpressionPrecedence */; - - case 186 /* ConditionalExpression */: - return 3 /* ConditionalExpressionPrecedence */; - - case 187 /* LogicalOrExpression */: - return 5 /* LogicalOrExpressionPrecedence */; - - case 188 /* LogicalAndExpression */: - return 6 /* LogicalAndExpressionPrecedence */; - - case 189 /* BitwiseOrExpression */: - return 7 /* BitwiseOrExpressionPrecedence */; - - case 190 /* BitwiseExclusiveOrExpression */: - return 8 /* BitwiseExclusiveOrExpressionPrecedence */; - - case 191 /* BitwiseAndExpression */: - return 9 /* BitwiseAndExpressionPrecedence */; - - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - return 10 /* EqualityExpressionPrecedence */; - - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - return 11 /* RelationalExpressionPrecedence */; - - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - return 12 /* ShiftExpressionPrecdence */; - - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return 13 /* AdditiveExpressionPrecedence */; - - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - return 14 /* MultiplicativeExpressionPrecedence */; - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 167 /* LogicalNotExpression */: - case 170 /* DeleteExpression */: - case 171 /* TypeOfExpression */: - case 172 /* VoidExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return 15 /* UnaryExpressionPrecedence */; - } - - throw TypeScript.Errors.invalidOperation(); - }; - - ParserImpl.prototype.addSkippedTokenAfterNodeOrToken = function (nodeOrToken, skippedToken) { - if (nodeOrToken.isToken()) { - return this.addSkippedTokenAfterToken(nodeOrToken, skippedToken); - } else if (nodeOrToken.isNode()) { - return this.addSkippedTokenAfterNode(nodeOrToken, skippedToken); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.addSkippedTokenAfterNode = function (node, skippedToken) { - var oldToken = node.lastToken(); - var newToken = this.addSkippedTokenAfterToken(oldToken, skippedToken); - - return node.replaceToken(oldToken, newToken); - }; - - ParserImpl.prototype.addSkippedTokensBeforeNode = function (node, skippedTokens) { - if (skippedTokens.length > 0) { - var oldToken = node.firstToken(); - var newToken = this.addSkippedTokensBeforeToken(oldToken, skippedTokens); - - return node.replaceToken(oldToken, newToken); - } - - return node; - }; - - ParserImpl.prototype.addSkippedTokensBeforeToken = function (token, skippedTokens) { - var leadingTrivia = []; - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(leadingTrivia, skippedTokens[i]); - } - - this.addTriviaTo(token.leadingTrivia(), leadingTrivia); - - this.returnArray(skippedTokens); - return token.withLeadingTrivia(TypeScript.Syntax.triviaList(leadingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokensAfterToken = function (token, skippedTokens) { - if (skippedTokens.length === 0) { - this.returnArray(skippedTokens); - return token; - } - - var trailingTrivia = token.trailingTrivia().toArray(); - - for (var i = 0, n = skippedTokens.length; i < n; i++) { - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]); - } - - this.returnArray(skippedTokens); - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenAfterToken = function (token, skippedToken) { - var trailingTrivia = token.trailingTrivia().toArray(); - this.addSkippedTokenToTriviaArray(trailingTrivia, skippedToken); - - return token.withTrailingTrivia(TypeScript.Syntax.triviaList(trailingTrivia)); - }; - - ParserImpl.prototype.addSkippedTokenToTriviaArray = function (array, skippedToken) { - this.addTriviaTo(skippedToken.leadingTrivia(), array); - - var trimmedToken = skippedToken.withLeadingTrivia(TypeScript.Syntax.emptyTriviaList).withTrailingTrivia(TypeScript.Syntax.emptyTriviaList); - array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken)); - - this.addTriviaTo(skippedToken.trailingTrivia(), array); - }; - - ParserImpl.prototype.addTriviaTo = function (list, array) { - for (var i = 0, n = list.count(); i < n; i++) { - array.push(list.syntaxTriviaAt(i)); - } - }; - - ParserImpl.prototype.parseSyntaxTree = function (isDeclaration) { - var sourceUnit = this.parseSourceUnit(); - - var allDiagnostics = this.source.tokenDiagnostics().concat(this.diagnostics); - allDiagnostics.sort(function (a, b) { - return a.start() - b.start(); - }); - - return new TypeScript.SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, this.fileName, this.lineMap, this.parseOptions); - }; - - ParserImpl.prototype.setStrictMode = function (isInStrictMode) { - this.isInStrictMode = isInStrictMode; - this.factory = isInStrictMode ? TypeScript.Syntax.strictModeFactory : TypeScript.Syntax.normalModeFactory; - }; - - ParserImpl.prototype.parseSourceUnit = function () { - var savedIsInStrictMode = this.isInStrictMode; - - var result = this.parseSyntaxList(1 /* SourceUnit_ModuleElements */, ParserImpl.updateStrictModeState); - var moduleElements = result.list; - - this.setStrictMode(savedIsInStrictMode); - - var sourceUnit = this.factory.sourceUnit(moduleElements, this.currentToken()); - sourceUnit = this.addSkippedTokensBeforeNode(sourceUnit, result.skippedTokens); - - if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullWidth() === this.newText_forDebuggingPurposesOnly.length()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - TypeScript.Debug.assert(sourceUnit.fullText() === this.newText_forDebuggingPurposesOnly.substr(0, this.newText_forDebuggingPurposesOnly.length(), false)); - } - } - - return sourceUnit; - }; - - ParserImpl.updateStrictModeState = function (parser, items) { - if (!parser.isInStrictMode) { - for (var i = 0; i < items.length; i++) { - var item = items[i]; - if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) { - return; - } - } - - parser.setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1])); - } - }; - - ParserImpl.prototype.isModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return true; - } - - var modifierCount = this.modifierCount(); - return this.isImportDeclaration(modifierCount) || this.isExportAssignment() || this.isModuleDeclaration(modifierCount) || this.isInterfaceDeclaration(modifierCount) || this.isClassDeclaration(modifierCount) || this.isEnumDeclaration(modifierCount) || this.isStatement(inErrorRecovery); - }; - - ParserImpl.prototype.parseModuleElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isModuleElement()) { - return this.eatNode(); - } - - var modifierCount = this.modifierCount(); - if (this.isImportDeclaration(modifierCount)) { - return this.parseImportDeclaration(); - } else if (this.isExportAssignment()) { - return this.parseExportAssignment(); - } else if (this.isModuleDeclaration(modifierCount)) { - return this.parseModuleDeclaration(); - } else if (this.isInterfaceDeclaration(modifierCount)) { - return this.parseInterfaceDeclaration(); - } else if (this.isClassDeclaration(modifierCount)) { - return this.parseClassDeclaration(); - } else if (this.isEnumDeclaration(modifierCount)) { - return this.parseEnumDeclaration(); - } else if (this.isStatement(inErrorRecovery)) { - return this.parseStatement(inErrorRecovery); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isImportDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 49 /* ImportKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 49 /* ImportKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseImportDeclaration = function () { - var modifiers = this.parseModifiers(); - var importKeyword = this.eatKeyword(49 /* ImportKeyword */); - var identifier = this.eatIdentifierToken(); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var moduleReference = this.parseModuleReference(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.importDeclaration(modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken); - }; - - ParserImpl.prototype.isExportAssignment = function () { - return this.currentToken().tokenKind === 47 /* ExportKeyword */ && this.peekToken(1).tokenKind === 107 /* EqualsToken */; - }; - - ParserImpl.prototype.parseExportAssignment = function () { - var exportKeyword = this.eatKeyword(47 /* ExportKeyword */); - var equalsToken = this.eatToken(107 /* EqualsToken */); - var identifier = this.eatIdentifierToken(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.exportAssignment(exportKeyword, equalsToken, identifier, semicolonToken); - }; - - ParserImpl.prototype.parseModuleReference = function () { - if (this.isExternalModuleReference()) { - return this.parseExternalModuleReference(); - } else { - return this.parseModuleNameModuleReference(); - } - }; - - ParserImpl.prototype.isExternalModuleReference = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 66 /* RequireKeyword */) { - return this.peekToken(1).tokenKind === 72 /* OpenParenToken */; - } - - return false; - }; - - ParserImpl.prototype.parseExternalModuleReference = function () { - var requireKeyword = this.eatKeyword(66 /* RequireKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var stringLiteral = this.eatToken(14 /* StringLiteral */); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.externalModuleReference(requireKeyword, openParenToken, stringLiteral, closeParenToken); - }; - - ParserImpl.prototype.parseModuleNameModuleReference = function () { - var name = this.parseName(); - return this.factory.moduleNameModuleReference(name); - }; - - ParserImpl.prototype.parseIdentifierName = function () { - var identifierName = this.eatIdentifierNameToken(); - return identifierName; - }; - - ParserImpl.prototype.tryParseTypeArgumentList = function (inExpression) { - if (this.currentToken().kind() !== 80 /* LessThanToken */) { - return null; - } - - var lessThanToken; - var greaterThanToken; - var result; - var typeArguments; - - if (!inExpression) { - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - return this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - } - - var rewindPoint = this.getRewindPoint(); - - lessThanToken = this.eatToken(80 /* LessThanToken */); - - result = this.parseSeparatedSyntaxList(262144 /* TypeArgumentList_Types */); - typeArguments = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (greaterThanToken.fullWidth() === 0 || !this.canFollowTypeArgumentListInExpression(this.currentToken().kind())) { - this.rewind(rewindPoint); - - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeArgumentList = this.factory.typeArgumentList(lessThanToken, typeArguments, greaterThanToken); - - return typeArgumentList; - } - }; - - ParserImpl.prototype.canFollowTypeArgumentListInExpression = function (kind) { - switch (kind) { - case 72 /* OpenParenToken */: - case 76 /* DotToken */: - - case 73 /* CloseParenToken */: - case 75 /* CloseBracketToken */: - case 106 /* ColonToken */: - case 78 /* SemicolonToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - case 84 /* EqualsEqualsToken */: - case 87 /* EqualsEqualsEqualsToken */: - case 86 /* ExclamationEqualsToken */: - case 88 /* ExclamationEqualsEqualsToken */: - case 103 /* AmpersandAmpersandToken */: - case 104 /* BarBarToken */: - case 100 /* CaretToken */: - case 98 /* AmpersandToken */: - case 99 /* BarToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseName = function () { - var shouldContinue = this.isIdentifier(this.currentToken()); - var current = this.eatIdentifierToken(); - - while (shouldContinue && this.currentToken().tokenKind === 76 /* DotToken */) { - var dotToken = this.eatToken(76 /* DotToken */); - - var currentToken = this.currentToken(); - var identifierName; - - if (TypeScript.SyntaxFacts.isAnyKeyword(currentToken.tokenKind) && this.previousToken().hasTrailingNewLine() && !currentToken.hasTrailingNewLine() && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.peekToken(1))) { - identifierName = this.createMissingToken(11 /* IdentifierName */, currentToken); - } else { - identifierName = this.eatIdentifierNameToken(); - } - - current = this.factory.qualifiedName(current, dotToken, identifierName); - - shouldContinue = identifierName.fullWidth() > 0; - } - - return current; - }; - - ParserImpl.prototype.isEnumDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 46 /* EnumKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 46 /* EnumKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseEnumDeclaration = function () { - var modifiers = this.parseModifiers(); - var enumKeyword = this.eatKeyword(46 /* EnumKeyword */); - var identifier = this.eatIdentifierToken(); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var enumElements = TypeScript.Syntax.emptySeparatedList; - - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(256 /* EnumDeclaration_EnumElements */); - enumElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.enumDeclaration(modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken); - }; - - ParserImpl.prototype.isEnumElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return true; - } - - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseEnumElement = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 243 /* EnumElement */) { - return this.eatNode(); - } - - var propertyName = this.eatPropertyName(); - var equalsValueClause = null; - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.enumElement(propertyName, equalsValueClause); - }; - - ParserImpl.isModifier = function (token) { - switch (token.tokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 47 /* ExportKeyword */: - case 63 /* DeclareKeyword */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.modifierCount = function () { - var modifierCount = 0; - while (true) { - if (ParserImpl.isModifier(this.peekToken(modifierCount))) { - modifierCount++; - continue; - } - - break; - } - - return modifierCount; - }; - - ParserImpl.prototype.parseModifiers = function () { - var tokens = this.getArray(); - - while (true) { - if (ParserImpl.isModifier(this.currentToken())) { - tokens.push(this.eatAnyToken()); - continue; - } - - break; - } - - var result = TypeScript.Syntax.list(tokens); - - this.returnZeroOrOneLengthArray(tokens); - - return result; - }; - - ParserImpl.prototype.isClassDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 44 /* ClassKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 44 /* ClassKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseHeritageClauses = function () { - var heritageClauses = TypeScript.Syntax.emptyList; - - if (this.isHeritageClause()) { - var result = this.parseSyntaxList(1024 /* ClassOrInterfaceDeclaration_HeritageClauses */); - heritageClauses = result.list; - TypeScript.Debug.assert(result.skippedTokens.length === 0); - } - - return heritageClauses; - }; - - ParserImpl.prototype.parseClassDeclaration = function () { - var modifiers = this.parseModifiers(); - - var classKeyword = this.eatKeyword(44 /* ClassKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - var classElements = TypeScript.Syntax.emptyList; - - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(2 /* ClassDeclaration_ClassElements */); - - classElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.classDeclaration(modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken); - }; - - ParserImpl.isPublicOrPrivateKeyword = function (token) { - return token.tokenKind === 57 /* PublicKeyword */ || token.tokenKind === 55 /* PrivateKeyword */; - }; - - ParserImpl.prototype.isAccessor = function (inErrorRecovery) { - var index = this.modifierCount(); - - if (this.peekToken(index).tokenKind !== 64 /* GetKeyword */ && this.peekToken(index).tokenKind !== 68 /* SetKeyword */) { - return false; - } - - index++; - return this.isPropertyName(this.peekToken(index), inErrorRecovery); - }; - - ParserImpl.prototype.parseAccessor = function (checkForStrictMode) { - var modifiers = this.parseModifiers(); - - if (this.currentToken().tokenKind === 64 /* GetKeyword */) { - return this.parseGetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else if (this.currentToken().tokenKind === 68 /* SetKeyword */) { - return this.parseSetMemberAccessorDeclaration(modifiers, checkForStrictMode); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseGetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var getKeyword = this.eatKeyword(64 /* GetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.getAccessor(modifiers, getKeyword, propertyName, parameterList, typeAnnotation, block); - }; - - ParserImpl.prototype.parseSetMemberAccessorDeclaration = function (modifiers, checkForStrictMode) { - var setKeyword = this.eatKeyword(68 /* SetKeyword */); - var propertyName = this.eatPropertyName(); - var parameterList = this.parseParameterList(); - var block = this.parseBlock(false, checkForStrictMode); - - return this.factory.setAccessor(modifiers, setKeyword, propertyName, parameterList, block); - }; - - ParserImpl.prototype.isClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return true; - } - - return this.isConstructorDeclaration() || this.isMemberFunctionDeclaration(inErrorRecovery) || this.isAccessor(inErrorRecovery) || this.isMemberVariableDeclaration(inErrorRecovery) || this.isIndexMemberDeclaration(); - }; - - ParserImpl.prototype.parseClassElement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isClassElement()) { - return this.eatNode(); - } - - if (this.isConstructorDeclaration()) { - return this.parseConstructorDeclaration(); - } else if (this.isMemberFunctionDeclaration(inErrorRecovery)) { - return this.parseMemberFunctionDeclaration(); - } else if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(false); - } else if (this.isMemberVariableDeclaration(inErrorRecovery)) { - return this.parseMemberVariableDeclaration(); - } else if (this.isIndexMemberDeclaration()) { - return this.parseIndexMemberDeclaration(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isConstructorDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 62 /* ConstructorKeyword */; - }; - - ParserImpl.prototype.parseConstructorDeclaration = function () { - var modifiers = this.parseModifiers(); - var constructorKeyword = this.eatKeyword(62 /* ConstructorKeyword */); - var callSignature = this.parseCallSignature(false); - - var semicolonToken = null; - var block = null; - - if (this.isBlock()) { - block = this.parseBlock(false, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.constructorDeclaration(modifiers, constructorKeyword, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isMemberFunctionDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isCallSignature(index + 1)) { - return true; - } - - if (ParserImpl.isModifier(token)) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberFunctionDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isCallSignature(1)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var block = null; - var semicolon = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolon = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.memberFunctionDeclaration(modifiers, propertyName, callSignature, block, semicolon); - }; - - ParserImpl.prototype.isDefinitelyMemberVariablePropertyName = function (index) { - if (TypeScript.SyntaxFacts.isAnyKeyword(this.peekToken(index).tokenKind)) { - switch (this.peekToken(index + 1).tokenKind) { - case 78 /* SemicolonToken */: - case 107 /* EqualsToken */: - case 106 /* ColonToken */: - case 71 /* CloseBraceToken */: - case 10 /* EndOfFileToken */: - return true; - default: - return false; - } - } else { - return true; - } - }; - - ParserImpl.prototype.isMemberVariableDeclaration = function (inErrorRecovery) { - var index = 0; - - while (true) { - var token = this.peekToken(index); - if (this.isPropertyName(token, inErrorRecovery) && this.isDefinitelyMemberVariablePropertyName(index)) { - return true; - } - - if (ParserImpl.isModifier(this.peekToken(index))) { - index++; - continue; - } - - return false; - } - }; - - ParserImpl.prototype.parseMemberVariableDeclaration = function () { - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (this.isPropertyName(currentToken, false) && this.isDefinitelyMemberVariablePropertyName(0)) { - break; - } - - TypeScript.Debug.assert(ParserImpl.isModifier(currentToken)); - modifierArray.push(this.eatAnyToken()); - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var variableDeclarator = this.parseVariableDeclarator(true, true); - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.memberVariableDeclaration(modifiers, variableDeclarator, semicolon); - }; - - ParserImpl.prototype.isIndexMemberDeclaration = function () { - var index = this.modifierCount(); - return this.isIndexSignature(index); - }; - - ParserImpl.prototype.parseIndexMemberDeclaration = function () { - var modifiers = this.parseModifiers(); - var indexSignature = this.parseIndexSignature(); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.indexMemberDeclaration(modifiers, indexSignature, semicolonToken); - }; - - ParserImpl.prototype.tryAddUnexpectedEqualsGreaterThanToken = function (callSignature) { - var token0 = this.currentToken(); - - var hasEqualsGreaterThanToken = token0.tokenKind === 85 /* EqualsGreaterThanToken */; - if (hasEqualsGreaterThanToken) { - if (callSignature.lastToken()) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]); - this.addDiagnostic(diagnostic); - - var token = this.eatAnyToken(); - return this.addSkippedTokenAfterNode(callSignature, token0); - } - } - - return callSignature; - }; - - ParserImpl.prototype.isFunctionDeclaration = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 27 /* FunctionKeyword */; - }; - - ParserImpl.prototype.parseFunctionDeclaration = function () { - var modifiers = this.parseModifiers(); - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = this.eatIdentifierToken(); - var callSignature = this.parseCallSignature(false); - - var parseBlockEvenWithNoOpenBrace = false; - var newCallSignature = this.tryAddUnexpectedEqualsGreaterThanToken(callSignature); - if (newCallSignature !== callSignature) { - parseBlockEvenWithNoOpenBrace = true; - callSignature = newCallSignature; - } - - var semicolonToken = null; - var block = null; - - if (parseBlockEvenWithNoOpenBrace || this.isBlock()) { - block = this.parseBlock(parseBlockEvenWithNoOpenBrace, true); - } else { - semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - } - - return this.factory.functionDeclaration(modifiers, functionKeyword, identifier, callSignature, block, semicolonToken); - }; - - ParserImpl.prototype.isModuleDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 65 /* ModuleKeyword */) { - return true; - } - - if (this.currentToken().tokenKind === 65 /* ModuleKeyword */) { - var token1 = this.peekToken(1); - return this.isIdentifier(token1) || token1.tokenKind === 14 /* StringLiteral */; - } - - return false; - }; - - ParserImpl.prototype.parseModuleDeclaration = function () { - var modifiers = this.parseModifiers(); - var moduleKeyword = this.eatKeyword(65 /* ModuleKeyword */); - - var moduleName = null; - var stringLiteral = null; - - if (this.currentToken().tokenKind === 14 /* StringLiteral */) { - stringLiteral = this.eatToken(14 /* StringLiteral */); - } else { - moduleName = this.parseName(); - } - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var moduleElements = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(4 /* ModuleDeclaration_ModuleElements */); - moduleElements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.moduleDeclaration(modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, closeBraceToken); - }; - - ParserImpl.prototype.isInterfaceDeclaration = function (modifierCount) { - if (modifierCount > 0 && this.peekToken(modifierCount).tokenKind === 52 /* InterfaceKeyword */) { - return true; - } - - return this.currentToken().tokenKind === 52 /* InterfaceKeyword */ && this.isIdentifier(this.peekToken(1)); - }; - - ParserImpl.prototype.parseInterfaceDeclaration = function () { - var modifiers = this.parseModifiers(); - var interfaceKeyword = this.eatKeyword(52 /* InterfaceKeyword */); - var identifier = this.eatIdentifierToken(); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var heritageClauses = this.parseHeritageClauses(); - - var objectType = this.parseObjectType(); - return this.factory.interfaceDeclaration(modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, objectType); - }; - - ParserImpl.prototype.parseObjectType = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var typeMembers = TypeScript.Syntax.emptySeparatedList; - if (openBraceToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(512 /* ObjectType_TypeMembers */); - typeMembers = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.objectType(openBraceToken, typeMembers, closeBraceToken); - }; - - ParserImpl.prototype.isTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return true; - } - - return this.isCallSignature(0) || this.isConstructSignature() || this.isIndexSignature(0) || this.isMethodSignature(inErrorRecovery) || this.isPropertySignature(inErrorRecovery); - }; - - ParserImpl.prototype.parseTypeMember = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isTypeMember()) { - return this.eatNode(); - } - - if (this.isCallSignature(0)) { - return this.parseCallSignature(false); - } else if (this.isConstructSignature()) { - return this.parseConstructSignature(); - } else if (this.isIndexSignature(0)) { - return this.parseIndexSignature(); - } else if (this.isMethodSignature(inErrorRecovery)) { - return this.parseMethodSignature(); - } else if (this.isPropertySignature(inErrorRecovery)) { - return this.parsePropertySignature(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseConstructSignature = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var callSignature = this.parseCallSignature(false); - - return this.factory.constructSignature(newKeyword, callSignature); - }; - - ParserImpl.prototype.parseIndexSignature = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var parameter = this.parseParameter(); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.indexSignature(openBracketToken, parameter, closeBracketToken, typeAnnotation); - }; - - ParserImpl.prototype.parseMethodSignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var callSignature = this.parseCallSignature(false); - - return this.factory.methodSignature(propertyName, questionToken, callSignature); - }; - - ParserImpl.prototype.parsePropertySignature = function () { - var propertyName = this.eatPropertyName(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.propertySignature(propertyName, questionToken, typeAnnotation); - }; - - ParserImpl.prototype.isCallSignature = function (tokenIndex) { - var tokenKind = this.peekToken(tokenIndex).tokenKind; - return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */; - }; - - ParserImpl.prototype.isConstructSignature = function () { - if (this.currentToken().tokenKind !== 31 /* NewKeyword */) { - return false; - } - - var token1 = this.peekToken(1); - return token1.tokenKind === 80 /* LessThanToken */ || token1.tokenKind === 72 /* OpenParenToken */; - }; - - ParserImpl.prototype.isIndexSignature = function (tokenIndex) { - return this.peekToken(tokenIndex).tokenKind === 74 /* OpenBracketToken */; - }; - - ParserImpl.prototype.isMethodSignature = function (inErrorRecovery) { - if (this.isPropertyName(this.currentToken(), inErrorRecovery)) { - if (this.isCallSignature(1)) { - return true; - } - - if (this.peekToken(1).tokenKind === 105 /* QuestionToken */ && this.isCallSignature(2)) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPropertySignature = function (inErrorRecovery) { - var currentToken = this.currentToken(); - - if (ParserImpl.isModifier(currentToken) && !currentToken.hasTrailingNewLine() && this.isPropertyName(this.peekToken(1), inErrorRecovery)) { - return false; - } - - return this.isPropertyName(currentToken, inErrorRecovery); - }; - - ParserImpl.prototype.isHeritageClause = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */; - }; - - ParserImpl.prototype.isNotHeritageClauseTypeName = function () { - if (this.currentToken().tokenKind === 51 /* ImplementsKeyword */ || this.currentToken().tokenKind === 48 /* ExtendsKeyword */) { - return this.isIdentifier(this.peekToken(1)); - } - - return false; - }; - - ParserImpl.prototype.isHeritageClauseTypeName = function () { - if (this.isIdentifier(this.currentToken())) { - return !this.isNotHeritageClauseTypeName(); - } - - return false; - }; - - ParserImpl.prototype.parseHeritageClause = function () { - var extendsOrImplementsKeyword = this.eatAnyToken(); - TypeScript.Debug.assert(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ || extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - - var result = this.parseSeparatedSyntaxList(2048 /* HeritageClause_TypeNameList */); - var typeNames = result.list; - extendsOrImplementsKeyword = this.addSkippedTokensAfterToken(extendsOrImplementsKeyword, result.skippedTokens); - - return this.factory.heritageClause(extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, extendsOrImplementsKeyword, typeNames); - }; - - ParserImpl.prototype.isStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return true; - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - var token1 = this.peekToken(1); - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { - return false; - } - - break; - - case 28 /* IfKeyword */: - case 70 /* OpenBraceToken */: - case 33 /* ReturnKeyword */: - case 34 /* SwitchKeyword */: - case 36 /* ThrowKeyword */: - case 15 /* BreakKeyword */: - case 18 /* ContinueKeyword */: - case 26 /* ForKeyword */: - case 42 /* WhileKeyword */: - case 43 /* WithKeyword */: - case 22 /* DoKeyword */: - case 38 /* TryKeyword */: - case 19 /* DebuggerKeyword */: - return true; - } - - if (this.isInterfaceDeclaration(0) || this.isClassDeclaration(0) || this.isEnumDeclaration(0) || this.isModuleDeclaration(0)) { - return false; - } - - return this.isLabeledStatement(currentToken) || this.isVariableStatement() || this.isFunctionDeclaration() || this.isEmptyStatement(currentToken, inErrorRecovery) || this.isExpressionStatement(currentToken); - }; - - ParserImpl.prototype.parseStatement = function (inErrorRecovery) { - if (this.currentNode() !== null && this.currentNode().isStatement()) { - return this.eatNode(); - } - - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 28 /* IfKeyword */: - return this.parseIfStatement(); - case 70 /* OpenBraceToken */: - return this.parseBlock(false, false); - case 33 /* ReturnKeyword */: - return this.parseReturnStatement(); - case 34 /* SwitchKeyword */: - return this.parseSwitchStatement(); - case 36 /* ThrowKeyword */: - return this.parseThrowStatement(); - case 15 /* BreakKeyword */: - return this.parseBreakStatement(); - case 18 /* ContinueKeyword */: - return this.parseContinueStatement(); - case 26 /* ForKeyword */: - return this.parseForOrForInStatement(); - case 42 /* WhileKeyword */: - return this.parseWhileStatement(); - case 43 /* WithKeyword */: - return this.parseWithStatement(); - case 22 /* DoKeyword */: - return this.parseDoStatement(); - case 38 /* TryKeyword */: - return this.parseTryStatement(); - case 19 /* DebuggerKeyword */: - return this.parseDebuggerStatement(); - } - - if (this.isVariableStatement()) { - return this.parseVariableStatement(); - } else if (this.isLabeledStatement(currentToken)) { - return this.parseLabeledStatement(); - } else if (this.isFunctionDeclaration()) { - return this.parseFunctionDeclaration(); - } else if (this.isEmptyStatement(currentToken, inErrorRecovery)) { - return this.parseEmptyStatement(); - } else { - return this.parseExpressionStatement(); - } - }; - - ParserImpl.prototype.parseDebuggerStatement = function () { - var debuggerKeyword = this.eatKeyword(19 /* DebuggerKeyword */); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.debuggerStatement(debuggerKeyword, semicolonToken); - }; - - ParserImpl.prototype.parseDoStatement = function () { - var doKeyword = this.eatKeyword(22 /* DoKeyword */); - var statement = this.parseStatement(false); - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(true); - - return this.factory.doStatement(doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken); - }; - - ParserImpl.prototype.isLabeledStatement = function (currentToken) { - return this.isIdentifier(currentToken) && this.peekToken(1).tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseLabeledStatement = function () { - var identifier = this.eatIdentifierToken(); - var colonToken = this.eatToken(106 /* ColonToken */); - var statement = this.parseStatement(false); - - return this.factory.labeledStatement(identifier, colonToken, statement); - }; - - ParserImpl.prototype.parseTryStatement = function () { - var tryKeyword = this.eatKeyword(38 /* TryKeyword */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 64 /* TryBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - var catchClause = null; - if (this.isCatchClause()) { - catchClause = this.parseCatchClause(); - } - - var finallyClause = null; - if (catchClause === null || this.isFinallyClause()) { - finallyClause = this.parseFinallyClause(); - } - - return this.factory.tryStatement(tryKeyword, block, catchClause, finallyClause); - }; - - ParserImpl.prototype.isCatchClause = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */; - }; - - ParserImpl.prototype.parseCatchClause = function () { - var catchKeyword = this.eatKeyword(17 /* CatchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var identifier = this.eatIdentifierToken(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var savedListParsingState = this.listParsingState; - this.listParsingState |= 128 /* CatchBlock_Statements */; - var block = this.parseBlock(false, false); - this.listParsingState = savedListParsingState; - - return this.factory.catchClause(catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block); - }; - - ParserImpl.prototype.isFinallyClause = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.parseFinallyClause = function () { - var finallyKeyword = this.eatKeyword(25 /* FinallyKeyword */); - var block = this.parseBlock(false, false); - - return this.factory.finallyClause(finallyKeyword, block); - }; - - ParserImpl.prototype.parseWithStatement = function () { - var withKeyword = this.eatKeyword(43 /* WithKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.withStatement(withKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.parseWhileStatement = function () { - var whileKeyword = this.eatKeyword(42 /* WhileKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.whileStatement(whileKeyword, openParenToken, condition, closeParenToken, statement); - }; - - ParserImpl.prototype.isEmptyStatement = function (currentToken, inErrorRecovery) { - if (inErrorRecovery) { - return false; - } - - return currentToken.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.parseEmptyStatement = function () { - var semicolonToken = this.eatToken(78 /* SemicolonToken */); - return this.factory.emptyStatement(semicolonToken); - }; - - ParserImpl.prototype.parseForOrForInStatement = function () { - var forKeyword = this.eatKeyword(26 /* ForKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 40 /* VarKeyword */) { - return this.parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken); - } else if (currentToken.tokenKind === 78 /* SemicolonToken */) { - return this.parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken); - } else { - return this.parseForOrForInStatementWithInitializer(forKeyword, openParenToken); - } - }; - - ParserImpl.prototype.parseForOrForInStatementWithVariableDeclaration = function (forKeyword, openParenToken) { - var variableDeclaration = this.parseVariableDeclaration(false); - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - } - - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); - }; - - ParserImpl.prototype.parseForInStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var inKeyword = this.eatKeyword(29 /* InKeyword */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forInStatement(forKeyword, openParenToken, variableDeclaration, initializer, inKeyword, expression, closeParenToken, statement); - }; - - ParserImpl.prototype.parseForOrForInStatementWithInitializer = function (forKeyword, openParenToken) { - var initializer = this.parseExpression(false); - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return this.parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } else { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); - } - }; - - ParserImpl.prototype.parseForStatementWithNoVariableDeclarationOrInitializer = function (forKeyword, openParenToken) { - return this.parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null); - }; - - ParserImpl.prototype.parseForStatementWithVariableDeclarationOrInitializer = function (forKeyword, openParenToken, variableDeclaration, initializer) { - var firstSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var condition = null; - if (this.currentToken().tokenKind !== 78 /* SemicolonToken */ && this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - condition = this.parseExpression(true); - } - - var secondSemicolonToken = this.eatToken(78 /* SemicolonToken */); - - var incrementor = null; - if (this.currentToken().tokenKind !== 73 /* CloseParenToken */ && this.currentToken().tokenKind !== 10 /* EndOfFileToken */) { - incrementor = this.parseExpression(true); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - return this.factory.forStatement(forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement); - }; - - ParserImpl.prototype.parseBreakStatement = function () { - var breakKeyword = this.eatKeyword(15 /* BreakKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.breakStatement(breakKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseContinueStatement = function () { - var continueKeyword = this.eatKeyword(18 /* ContinueKeyword */); - - var identifier = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - } - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - return this.factory.continueStatement(continueKeyword, identifier, semicolon); - }; - - ParserImpl.prototype.parseSwitchStatement = function () { - var switchKeyword = this.eatKeyword(34 /* SwitchKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var switchClauses = TypeScript.Syntax.emptyList; - if (openBraceToken.width() > 0) { - var result = this.parseSyntaxList(8 /* SwitchStatement_SwitchClauses */); - switchClauses = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - return this.factory.switchStatement(switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken); - }; - - ParserImpl.prototype.isCaseSwitchClause = function () { - return this.currentToken().tokenKind === 16 /* CaseKeyword */; - }; - - ParserImpl.prototype.isDefaultSwitchClause = function () { - return this.currentToken().tokenKind === 20 /* DefaultKeyword */; - }; - - ParserImpl.prototype.isSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return true; - } - - return this.isCaseSwitchClause() || this.isDefaultSwitchClause(); - }; - - ParserImpl.prototype.parseSwitchClause = function () { - if (this.currentNode() !== null && this.currentNode().isSwitchClause()) { - return this.eatNode(); - } - - if (this.isCaseSwitchClause()) { - return this.parseCaseSwitchClause(); - } else if (this.isDefaultSwitchClause()) { - return this.parseDefaultSwitchClause(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseCaseSwitchClause = function () { - var caseKeyword = this.eatKeyword(16 /* CaseKeyword */); - var expression = this.parseExpression(true); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.caseSwitchClause(caseKeyword, expression, colonToken, statements); - }; - - ParserImpl.prototype.parseDefaultSwitchClause = function () { - var defaultKeyword = this.eatKeyword(20 /* DefaultKeyword */); - var colonToken = this.eatToken(106 /* ColonToken */); - var statements = TypeScript.Syntax.emptyList; - - if (colonToken.fullWidth() > 0) { - var result = this.parseSyntaxList(16 /* SwitchClause_Statements */); - statements = result.list; - colonToken = this.addSkippedTokensAfterToken(colonToken, result.skippedTokens); - } - - return this.factory.defaultSwitchClause(defaultKeyword, colonToken, statements); - }; - - ParserImpl.prototype.parseThrowStatement = function () { - var throwKeyword = this.eatKeyword(36 /* ThrowKeyword */); - - var expression = null; - if (this.canEatExplicitOrAutomaticSemicolon(false)) { - var token = this.createMissingToken(11 /* IdentifierName */, null); - expression = token; - } else { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.throwStatement(throwKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.parseReturnStatement = function () { - var returnKeyword = this.eatKeyword(33 /* ReturnKeyword */); - - var expression = null; - if (!this.canEatExplicitOrAutomaticSemicolon(false)) { - expression = this.parseExpression(true); - } - - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.returnStatement(returnKeyword, expression, semicolonToken); - }; - - ParserImpl.prototype.isExpressionStatement = function (currentToken) { - var kind = currentToken.tokenKind; - if (kind === 70 /* OpenBraceToken */ || kind === 27 /* FunctionKeyword */) { - return false; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.isAssignmentOrOmittedExpression = function () { - var currentToken = this.currentToken(); - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return this.isExpression(currentToken); - }; - - ParserImpl.prototype.parseAssignmentOrOmittedExpression = function () { - if (this.currentToken().tokenKind === 79 /* CommaToken */) { - return this.factory.omittedExpression(); - } - - return this.parseAssignmentExpression(true); - }; - - ParserImpl.prototype.isExpression = function (currentToken) { - switch (currentToken.tokenKind) { - case 13 /* NumericLiteral */: - case 14 /* StringLiteral */: - case 12 /* RegularExpressionLiteral */: - - case 74 /* OpenBracketToken */: - - case 72 /* OpenParenToken */: - - case 80 /* LessThanToken */: - - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 89 /* PlusToken */: - case 90 /* MinusToken */: - case 102 /* TildeToken */: - case 101 /* ExclamationToken */: - - case 70 /* OpenBraceToken */: - - case 85 /* EqualsGreaterThanToken */: - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - - case 50 /* SuperKeyword */: - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - - case 31 /* NewKeyword */: - - case 21 /* DeleteKeyword */: - case 41 /* VoidKeyword */: - case 39 /* TypeOfKeyword */: - - case 27 /* FunctionKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseExpressionStatement = function () { - var expression = this.parseExpression(true); - - var semicolon = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.expressionStatement(expression, semicolon); - }; - - ParserImpl.prototype.parseIfStatement = function () { - var ifKeyword = this.eatKeyword(28 /* IfKeyword */); - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var condition = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - var statement = this.parseStatement(false); - - var elseClause = null; - if (this.isElseClause()) { - elseClause = this.parseElseClause(); - } - - return this.factory.ifStatement(ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause); - }; - - ParserImpl.prototype.isElseClause = function () { - return this.currentToken().tokenKind === 23 /* ElseKeyword */; - }; - - ParserImpl.prototype.parseElseClause = function () { - var elseKeyword = this.eatKeyword(23 /* ElseKeyword */); - var statement = this.parseStatement(false); - - return this.factory.elseClause(elseKeyword, statement); - }; - - ParserImpl.prototype.isVariableStatement = function () { - var index = this.modifierCount(); - return this.peekToken(index).tokenKind === 40 /* VarKeyword */; - }; - - ParserImpl.prototype.parseVariableStatement = function () { - var modifiers = this.parseModifiers(); - var variableDeclaration = this.parseVariableDeclaration(true); - var semicolonToken = this.eatExplicitOrAutomaticSemicolon(false); - - return this.factory.variableStatement(modifiers, variableDeclaration, semicolonToken); - }; - - ParserImpl.prototype.parseVariableDeclaration = function (allowIn) { - var varKeyword = this.eatKeyword(40 /* VarKeyword */); - - var listParsingState = allowIn ? 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */; - - var result = this.parseSeparatedSyntaxList(listParsingState); - var variableDeclarators = result.list; - varKeyword = this.addSkippedTokensAfterToken(varKeyword, result.skippedTokens); - - return this.factory.variableDeclaration(varKeyword, variableDeclarators); - }; - - ParserImpl.prototype.isVariableDeclarator = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 225 /* VariableDeclarator */) { - return true; - } - - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.canReuseVariableDeclaratorNode = function (node) { - if (node === null || node.kind() !== 225 /* VariableDeclarator */) { - return false; - } - - var variableDeclarator = node; - return variableDeclarator.equalsValueClause === null; - }; - - ParserImpl.prototype.parseVariableDeclarator = function (allowIn, allowPropertyName) { - if (this.canReuseVariableDeclaratorNode(this.currentNode())) { - return this.eatNode(); - } - - var propertyName = allowPropertyName ? this.eatPropertyName() : this.eatIdentifierToken(); - var equalsValueClause = null; - var typeAnnotation = null; - - if (propertyName.width() > 0) { - typeAnnotation = this.parseOptionalTypeAnnotation(false); - - if (this.isEqualsValueClause(false)) { - equalsValueClause = this.parseEqualsValueClause(allowIn); - } - } - - return this.factory.variableDeclarator(propertyName, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.isColonValueClause = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.isEqualsValueClause = function (inParameter) { - var token0 = this.currentToken(); - if (token0.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (!this.previousToken().hasTrailingNewLine()) { - if (token0.tokenKind === 85 /* EqualsGreaterThanToken */) { - return false; - } - - if (token0.tokenKind === 70 /* OpenBraceToken */ && inParameter) { - return false; - } - - return this.isExpression(token0); - } - - return false; - }; - - ParserImpl.prototype.parseEqualsValueClause = function (allowIn) { - var equalsToken = this.eatToken(107 /* EqualsToken */); - var value = this.parseAssignmentExpression(allowIn); - - return this.factory.equalsValueClause(equalsToken, value); - }; - - ParserImpl.prototype.parseExpression = function (allowIn) { - return this.parseSubExpression(0, allowIn); - }; - - ParserImpl.prototype.parseAssignmentExpression = function (allowIn) { - return this.parseSubExpression(2 /* AssignmentExpressionPrecedence */, allowIn); - }; - - ParserImpl.prototype.parseUnaryExpressionOrLower = function () { - var currentTokenKind = this.currentToken().tokenKind; - if (TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(currentTokenKind)) { - var operatorKind = TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(currentTokenKind); - - var operatorToken = this.eatAnyToken(); - - var operand = this.parseUnaryExpressionOrLower(); - return this.factory.prefixUnaryExpression(operatorKind, operatorToken, operand); - } else if (currentTokenKind === 39 /* TypeOfKeyword */) { - return this.parseTypeOfExpression(); - } else if (currentTokenKind === 41 /* VoidKeyword */) { - return this.parseVoidExpression(); - } else if (currentTokenKind === 21 /* DeleteKeyword */) { - return this.parseDeleteExpression(); - } else if (currentTokenKind === 80 /* LessThanToken */) { - return this.parseCastExpression(); - } else { - return this.parsePostfixExpressionOrLower(); - } - }; - - ParserImpl.prototype.parseSubExpression = function (precedence, allowIn) { - if (precedence <= 2 /* AssignmentExpressionPrecedence */) { - if (this.isSimpleArrowFunctionExpression()) { - return this.parseSimpleArrowFunctionExpression(); - } - - var parethesizedArrowFunction = this.tryParseParenthesizedArrowFunctionExpression(); - if (parethesizedArrowFunction !== null) { - return parethesizedArrowFunction; - } - } - - var leftOperand = this.parseUnaryExpressionOrLower(); - return this.parseBinaryOrConditionalExpressions(precedence, allowIn, leftOperand); - }; - - ParserImpl.prototype.parseBinaryOrConditionalExpressions = function (precedence, allowIn, leftOperand) { - while (true) { - var token0 = this.currentToken(); - var token0Kind = token0.tokenKind; - - if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(token0Kind)) { - if (token0Kind === 29 /* InKeyword */ && !allowIn) { - break; - } - - var mergedToken = this.tryMergeBinaryExpressionTokens(); - var tokenKind = mergedToken === null ? token0Kind : mergedToken.syntaxKind; - - var binaryExpressionKind = TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(tokenKind); - var newPrecedence = ParserImpl.getPrecedence(binaryExpressionKind); - - if (newPrecedence < precedence) { - break; - } - - if (newPrecedence === precedence && !this.isRightAssociative(binaryExpressionKind)) { - break; - } - - var operatorToken = mergedToken === null ? token0 : TypeScript.Syntax.token(mergedToken.syntaxKind).withLeadingTrivia(token0.leadingTrivia()).withTrailingTrivia(this.peekToken(mergedToken.tokenCount - 1).trailingTrivia()); - - var skipCount = mergedToken === null ? 1 : mergedToken.tokenCount; - for (var i = 0; i < skipCount; i++) { - this.eatAnyToken(); - } - - leftOperand = this.factory.binaryExpression(binaryExpressionKind, leftOperand, operatorToken, this.parseSubExpression(newPrecedence, allowIn)); - continue; - } - - if (token0Kind === 105 /* QuestionToken */ && precedence <= 3 /* ConditionalExpressionPrecedence */) { - var questionToken = this.eatToken(105 /* QuestionToken */); - - var whenTrueExpression = this.parseAssignmentExpression(allowIn); - var colon = this.eatToken(106 /* ColonToken */); - - var whenFalseExpression = this.parseAssignmentExpression(allowIn); - leftOperand = this.factory.conditionalExpression(leftOperand, questionToken, whenTrueExpression, colon, whenFalseExpression); - continue; - } - - break; - } - - return leftOperand; - }; - - ParserImpl.prototype.tryMergeBinaryExpressionTokens = function () { - var token0 = this.currentToken(); - - if (token0.tokenKind === 81 /* GreaterThanToken */ && !token0.hasTrailingTrivia()) { - var storage = this.mergeTokensStorage; - storage[0] = 0 /* None */; - storage[1] = 0 /* None */; - storage[2] = 0 /* None */; - - for (var i = 0; i < storage.length; i++) { - var nextToken = this.peekToken(i + 1); - - if (!nextToken.hasLeadingTrivia()) { - storage[i] = nextToken.tokenKind; - } - - if (nextToken.hasTrailingTrivia()) { - break; - } - } - - if (storage[0] === 81 /* GreaterThanToken */) { - if (storage[1] === 81 /* GreaterThanToken */) { - if (storage[2] === 107 /* EqualsToken */) { - return { tokenCount: 4, syntaxKind: 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 3, syntaxKind: 97 /* GreaterThanGreaterThanGreaterThanToken */ }; - } - } else if (storage[1] === 107 /* EqualsToken */) { - return { tokenCount: 3, syntaxKind: 113 /* GreaterThanGreaterThanEqualsToken */ }; - } else { - return { tokenCount: 2, syntaxKind: 96 /* GreaterThanGreaterThanToken */ }; - } - } else if (storage[0] === 107 /* EqualsToken */) { - return { tokenCount: 2, syntaxKind: 83 /* GreaterThanEqualsToken */ }; - } - } - - return null; - }; - - ParserImpl.prototype.isRightAssociative = function (expressionKind) { - switch (expressionKind) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - return true; - default: - return false; - } - }; - - ParserImpl.prototype.parseMemberExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } - - var expression = this.parsePrimaryExpression(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - return this.parseMemberExpressionRest(expression, false, inObjectCreation); - }; - - ParserImpl.prototype.parseCallExpressionOrLower = function () { - var expression; - if (this.currentToken().tokenKind === 50 /* SuperKeyword */) { - expression = this.eatKeyword(50 /* SuperKeyword */); - - var currentTokenKind = this.currentToken().tokenKind; - if (currentTokenKind !== 72 /* OpenParenToken */ && currentTokenKind !== 76 /* DotToken */) { - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - } - } else { - expression = this.parseMemberExpressionOrLower(false); - } - - return this.parseMemberExpressionRest(expression, true, false); - }; - - ParserImpl.prototype.parseMemberExpressionRest = function (expression, allowArguments, inObjectCreation) { - while (true) { - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 72 /* OpenParenToken */: - if (!allowArguments) { - return expression; - } - - expression = this.factory.invocationExpression(expression, this.parseArgumentList(null)); - continue; - - case 80 /* LessThanToken */: - if (!allowArguments) { - return expression; - } - - var argumentList = this.tryParseArgumentList(); - if (argumentList !== null) { - expression = this.factory.invocationExpression(expression, argumentList); - continue; - } - - break; - - case 74 /* OpenBracketToken */: - expression = this.parseElementAccessExpression(expression, inObjectCreation); - continue; - - case 76 /* DotToken */: - expression = this.factory.memberAccessExpression(expression, this.eatToken(76 /* DotToken */), this.eatIdentifierNameToken()); - continue; - } - - return expression; - } - }; - - ParserImpl.prototype.parseLeftHandSideExpressionOrLower = function () { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseCallExpressionOrLower(); - } - }; - - ParserImpl.prototype.parsePostfixExpressionOrLower = function () { - var expression = this.parseLeftHandSideExpressionOrLower(); - if (expression === null) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = this.currentToken().tokenKind; - - switch (currentTokenKind) { - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - if (this.previousToken() !== null && this.previousToken().hasTrailingNewLine()) { - break; - } - - return this.factory.postfixUnaryExpression(TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(currentTokenKind), expression, this.eatAnyToken()); - } - - return expression; - }; - - ParserImpl.prototype.tryParseGenericArgumentList = function () { - var rewindPoint = this.getRewindPoint(); - - var typeArgumentList = this.tryParseTypeArgumentList(true); - var token0 = this.currentToken(); - - var isOpenParen = token0.tokenKind === 72 /* OpenParenToken */; - var isDot = token0.tokenKind === 76 /* DotToken */; - var isOpenParenOrDot = isOpenParen || isDot; - - var argumentList = null; - if (typeArgumentList === null || !isOpenParenOrDot) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - - if (isDot) { - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token0.width(), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null); - this.addDiagnostic(diagnostic); - - return this.factory.argumentList(typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList, TypeScript.Syntax.emptyToken(73 /* CloseParenToken */)); - } else { - return this.parseArgumentList(typeArgumentList); - } - } - }; - - ParserImpl.prototype.tryParseArgumentList = function () { - if (this.currentToken().tokenKind === 80 /* LessThanToken */) { - return this.tryParseGenericArgumentList(); - } - - if (this.currentToken().tokenKind === 72 /* OpenParenToken */) { - return this.parseArgumentList(null); - } - - return null; - }; - - ParserImpl.prototype.parseArgumentList = function (typeArgumentList) { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - - var _arguments = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.fullWidth() > 0) { - var result = this.parseSeparatedSyntaxList(16384 /* ArgumentList_AssignmentExpressions */); - _arguments = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.argumentList(typeArgumentList, openParenToken, _arguments, closeParenToken); - }; - - ParserImpl.prototype.parseElementAccessExpression = function (expression, inObjectCreation) { - var start = this.currentTokenStart(); - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var argumentExpression; - - if (this.currentToken().tokenKind === 75 /* CloseBracketToken */ && inObjectCreation) { - var end = this.currentTokenStart() + this.currentToken().width(); - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, start, end - start, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null); - this.addDiagnostic(diagnostic); - - argumentExpression = TypeScript.Syntax.emptyToken(11 /* IdentifierName */); - } else { - argumentExpression = this.parseExpression(true); - } - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.elementAccessExpression(expression, openBracketToken, argumentExpression, closeBracketToken); - }; - - ParserImpl.prototype.parsePrimaryExpression = function () { - var currentToken = this.currentToken(); - - if (this.isIdentifier(currentToken)) { - return this.eatIdentifierToken(); - } - - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 35 /* ThisKeyword */: - return this.parseThisExpression(); - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.parseLiteralExpression(); - - case 32 /* NullKeyword */: - return this.parseLiteralExpression(); - - case 27 /* FunctionKeyword */: - return this.parseFunctionExpression(); - - case 13 /* NumericLiteral */: - return this.parseLiteralExpression(); - - case 12 /* RegularExpressionLiteral */: - return this.parseLiteralExpression(); - - case 14 /* StringLiteral */: - return this.parseLiteralExpression(); - - case 74 /* OpenBracketToken */: - return this.parseArrayLiteralExpression(); - - case 70 /* OpenBraceToken */: - return this.parseObjectLiteralExpression(); - - case 72 /* OpenParenToken */: - return this.parseParenthesizedExpression(); - - case 118 /* SlashToken */: - case 119 /* SlashEqualsToken */: - var result = this.tryReparseDivideAsRegularExpression(); - if (result !== null) { - return result; - } - break; - } - - return null; - }; - - ParserImpl.prototype.tryReparseDivideAsRegularExpression = function () { - var currentToken = this.currentToken(); - - if (this.previousToken() !== null) { - var previousTokenKind = this.previousToken().tokenKind; - switch (previousTokenKind) { - case 11 /* IdentifierName */: - return null; - - case 35 /* ThisKeyword */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return null; - - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 93 /* PlusPlusToken */: - case 94 /* MinusMinusToken */: - case 75 /* CloseBracketToken */: - return null; - } - } - - currentToken = this.currentTokenAllowingRegularExpression(); - - if (currentToken.tokenKind === 118 /* SlashToken */ || currentToken.tokenKind === 119 /* SlashEqualsToken */) { - return null; - } else if (currentToken.tokenKind === 12 /* RegularExpressionLiteral */) { - return this.parseLiteralExpression(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.parseTypeOfExpression = function () { - var typeOfKeyword = this.eatKeyword(39 /* TypeOfKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.typeOfExpression(typeOfKeyword, expression); - }; - - ParserImpl.prototype.parseDeleteExpression = function () { - var deleteKeyword = this.eatKeyword(21 /* DeleteKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.deleteExpression(deleteKeyword, expression); - }; - - ParserImpl.prototype.parseVoidExpression = function () { - var voidKeyword = this.eatKeyword(41 /* VoidKeyword */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.voidExpression(voidKeyword, expression); - }; - - ParserImpl.prototype.parseFunctionExpression = function () { - var functionKeyword = this.eatKeyword(27 /* FunctionKeyword */); - var identifier = null; - - if (this.isIdentifier(this.currentToken())) { - identifier = this.eatIdentifierToken(); - } - - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionExpression(functionKeyword, identifier, callSignature, block); - }; - - ParserImpl.prototype.parseObjectCreationExpression = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - - var expression = this.parseObjectCreationExpressionOrLower(true); - var argumentList = this.tryParseArgumentList(); - - var result = this.factory.objectCreationExpression(newKeyword, expression, argumentList); - return this.parseMemberExpressionRest(result, true, false); - }; - - ParserImpl.prototype.parseObjectCreationExpressionOrLower = function (inObjectCreation) { - if (this.currentToken().tokenKind === 31 /* NewKeyword */) { - return this.parseObjectCreationExpression(); - } else { - return this.parseMemberExpressionOrLower(inObjectCreation); - } - }; - - ParserImpl.prototype.parseCastExpression = function () { - var lessThanToken = this.eatToken(80 /* LessThanToken */); - var type = this.parseType(); - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - var expression = this.parseUnaryExpressionOrLower(); - - return this.factory.castExpression(lessThanToken, type, greaterThanToken, expression); - }; - - ParserImpl.prototype.parseParenthesizedExpression = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var expression = this.parseExpression(true); - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - - return this.factory.parenthesizedExpression(openParenToken, expression, closeParenToken); - }; - - ParserImpl.prototype.tryParseParenthesizedArrowFunctionExpression = function () { - var tokenKind = this.currentToken().tokenKind; - if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) { - return null; - } - - if (this.isDefinitelyArrowFunctionExpression()) { - return this.parseParenthesizedArrowFunctionExpression(false); - } - - if (!this.isPossiblyArrowFunctionExpression()) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var arrowFunction = this.parseParenthesizedArrowFunctionExpression(true); - if (arrowFunction === null) { - this.rewind(rewindPoint); - } - - this.releaseRewindPoint(rewindPoint); - return arrowFunction; - }; - - ParserImpl.prototype.parseParenthesizedArrowFunctionExpression = function (requireArrow) { - var currentToken = this.currentToken(); - - var callSignature = this.parseCallSignature(true); - - if (requireArrow && this.currentToken().tokenKind !== 85 /* EqualsGreaterThanToken */) { - return null; - } - - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.parenthesizedArrowFunctionExpression(callSignature, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.tryParseArrowFunctionBlock = function () { - if (this.isBlock()) { - return this.parseBlock(false, false); - } else { - if (this.isStatement(false) && !this.isExpressionStatement(this.currentToken()) && !this.isFunctionDeclaration()) { - return this.parseBlock(true, false); - } else { - return null; - } - } - }; - - ParserImpl.prototype.isSimpleArrowFunctionExpression = function () { - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.isIdentifier(this.currentToken()) && this.peekToken(1).tokenKind === 85 /* EqualsGreaterThanToken */; - }; - - ParserImpl.prototype.parseSimpleArrowFunctionExpression = function () { - var identifier = this.eatIdentifierToken(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - - var block = this.tryParseArrowFunctionBlock(); - var expression = null; - if (block === null) { - expression = this.parseAssignmentExpression(true); - } - - return this.factory.simpleArrowFunctionExpression(identifier, equalsGreaterThanToken, block, expression); - }; - - ParserImpl.prototype.isBlock = function () { - return this.currentToken().tokenKind === 70 /* OpenBraceToken */; - }; - - ParserImpl.prototype.isDefinitelyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return false; - } - - var token1 = this.peekToken(1); - var token2; - - if (token1.tokenKind === 73 /* CloseParenToken */) { - token2 = this.peekToken(2); - return token2.tokenKind === 106 /* ColonToken */ || token2.tokenKind === 85 /* EqualsGreaterThanToken */ || token2.tokenKind === 70 /* OpenBraceToken */; - } - - if (token1.tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - token2 = this.peekToken(2); - if (token1.tokenKind === 57 /* PublicKeyword */ || token1.tokenKind === 55 /* PrivateKeyword */) { - if (this.isIdentifier(token2)) { - return true; - } - } - - if (!this.isIdentifier(token1)) { - return false; - } - - if (token2.tokenKind === 106 /* ColonToken */) { - return true; - } - - var token3 = this.peekToken(3); - if (token2.tokenKind === 105 /* QuestionToken */) { - if (token3.tokenKind === 106 /* ColonToken */ || token3.tokenKind === 73 /* CloseParenToken */ || token3.tokenKind === 79 /* CommaToken */) { - return true; - } - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - if (token3.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.isPossiblyArrowFunctionExpression = function () { - var token0 = this.currentToken(); - if (token0.tokenKind !== 72 /* OpenParenToken */) { - return true; - } - - var token1 = this.peekToken(1); - - if (!this.isIdentifier(token1)) { - return false; - } - - var token2 = this.peekToken(2); - if (token2.tokenKind === 107 /* EqualsToken */) { - return true; - } - - if (token2.tokenKind === 79 /* CommaToken */) { - return true; - } - - if (token2.tokenKind === 73 /* CloseParenToken */) { - var token3 = this.peekToken(3); - if (token3.tokenKind === 106 /* ColonToken */) { - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseObjectLiteralExpression = function () { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var result = this.parseSeparatedSyntaxList(32768 /* ObjectLiteralExpression_PropertyAssignments */); - var propertyAssignments = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.objectLiteralExpression(openBraceToken, propertyAssignments, closeBraceToken); - }; - - ParserImpl.prototype.parsePropertyAssignment = function (inErrorRecovery) { - if (this.isAccessor(inErrorRecovery)) { - return this.parseAccessor(true); - } else if (this.isFunctionPropertyAssignment(inErrorRecovery)) { - return this.parseFunctionPropertyAssignment(); - } else if (this.isSimplePropertyAssignment(inErrorRecovery)) { - return this.parseSimplePropertyAssignment(); - } else { - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isPropertyAssignment = function (inErrorRecovery) { - return this.isAccessor(inErrorRecovery) || this.isFunctionPropertyAssignment(inErrorRecovery) || this.isSimplePropertyAssignment(inErrorRecovery); - }; - - ParserImpl.prototype.eatPropertyName = function () { - return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(this.currentToken()) ? this.eatIdentifierNameToken() : this.eatAnyToken(); - }; - - ParserImpl.prototype.isFunctionPropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery) && this.isCallSignature(1); - }; - - ParserImpl.prototype.parseFunctionPropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var callSignature = this.parseCallSignature(false); - var block = this.parseBlock(false, true); - - return this.factory.functionPropertyAssignment(propertyName, callSignature, block); - }; - - ParserImpl.prototype.isSimplePropertyAssignment = function (inErrorRecovery) { - return this.isPropertyName(this.currentToken(), inErrorRecovery); - }; - - ParserImpl.prototype.parseSimplePropertyAssignment = function () { - var propertyName = this.eatPropertyName(); - var colonToken = this.eatToken(106 /* ColonToken */); - var expression = this.parseAssignmentExpression(true); - - return this.factory.simplePropertyAssignment(propertyName, colonToken, expression); - }; - - ParserImpl.prototype.isPropertyName = function (token, inErrorRecovery) { - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - if (inErrorRecovery) { - return this.isIdentifier(token); - } else { - return true; - } - } - - switch (token.tokenKind) { - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - return true; - - default: - return false; - } - }; - - ParserImpl.prototype.parseArrayLiteralExpression = function () { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - - var result = this.parseSeparatedSyntaxList(65536 /* ArrayLiteralExpression_AssignmentExpressions */); - var expressions = result.list; - openBracketToken = this.addSkippedTokensAfterToken(openBracketToken, result.skippedTokens); - - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - return this.factory.arrayLiteralExpression(openBracketToken, expressions, closeBracketToken); - }; - - ParserImpl.prototype.parseLiteralExpression = function () { - return this.eatAnyToken(); - }; - - ParserImpl.prototype.parseThisExpression = function () { - return this.eatKeyword(35 /* ThisKeyword */); - }; - - ParserImpl.prototype.parseBlock = function (parseBlockEvenWithNoOpenBrace, checkForStrictMode) { - var openBraceToken = this.eatToken(70 /* OpenBraceToken */); - - var statements = TypeScript.Syntax.emptyList; - - if (parseBlockEvenWithNoOpenBrace || openBraceToken.width() > 0) { - var savedIsInStrictMode = this.isInStrictMode; - - var processItems = checkForStrictMode ? ParserImpl.updateStrictModeState : null; - var result = this.parseSyntaxList(32 /* Block_Statements */, processItems); - statements = result.list; - openBraceToken = this.addSkippedTokensAfterToken(openBraceToken, result.skippedTokens); - - this.setStrictMode(savedIsInStrictMode); - } - - var closeBraceToken = this.eatToken(71 /* CloseBraceToken */); - - return this.factory.block(openBraceToken, statements, closeBraceToken); - }; - - ParserImpl.prototype.parseCallSignature = function (requireCompleteTypeParameterList) { - var typeParameterList = this.parseOptionalTypeParameterList(requireCompleteTypeParameterList); - var parameterList = this.parseParameterList(); - var typeAnnotation = this.parseOptionalTypeAnnotation(false); - - return this.factory.callSignature(typeParameterList, parameterList, typeAnnotation); - }; - - ParserImpl.prototype.parseOptionalTypeParameterList = function (requireCompleteTypeParameterList) { - if (this.currentToken().tokenKind !== 80 /* LessThanToken */) { - return null; - } - - var rewindPoint = this.getRewindPoint(); - - var lessThanToken = this.eatToken(80 /* LessThanToken */); - - var result = this.parseSeparatedSyntaxList(524288 /* TypeParameterList_TypeParameters */); - var typeParameters = result.list; - lessThanToken = this.addSkippedTokensAfterToken(lessThanToken, result.skippedTokens); - - var greaterThanToken = this.eatToken(81 /* GreaterThanToken */); - - if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { - this.rewind(rewindPoint); - this.releaseRewindPoint(rewindPoint); - return null; - } else { - this.releaseRewindPoint(rewindPoint); - var typeParameterList = this.factory.typeParameterList(lessThanToken, typeParameters, greaterThanToken); - - return typeParameterList; - } - }; - - ParserImpl.prototype.isTypeParameter = function () { - return this.isIdentifier(this.currentToken()); - }; - - ParserImpl.prototype.parseTypeParameter = function () { - var identifier = this.eatIdentifierToken(); - var constraint = this.parseOptionalConstraint(); - - return this.factory.typeParameter(identifier, constraint); - }; - - ParserImpl.prototype.parseOptionalConstraint = function () { - if (this.currentToken().kind() !== 48 /* ExtendsKeyword */) { - return null; - } - - var extendsKeyword = this.eatKeyword(48 /* ExtendsKeyword */); - var type = this.parseType(); - - return this.factory.constraint(extendsKeyword, type); - }; - - ParserImpl.prototype.parseParameterList = function () { - var openParenToken = this.eatToken(72 /* OpenParenToken */); - var parameters = TypeScript.Syntax.emptySeparatedList; - - if (openParenToken.width() > 0) { - var result = this.parseSeparatedSyntaxList(131072 /* ParameterList_Parameters */); - parameters = result.list; - openParenToken = this.addSkippedTokensAfterToken(openParenToken, result.skippedTokens); - } - - var closeParenToken = this.eatToken(73 /* CloseParenToken */); - return this.factory.parameterList(openParenToken, parameters, closeParenToken); - }; - - ParserImpl.prototype.isTypeAnnotation = function () { - return this.currentToken().tokenKind === 106 /* ColonToken */; - }; - - ParserImpl.prototype.parseOptionalTypeAnnotation = function (allowStringLiteral) { - return this.isTypeAnnotation() ? this.parseTypeAnnotation(allowStringLiteral) : null; - }; - - ParserImpl.prototype.parseTypeAnnotation = function (allowStringLiteral) { - var colonToken = this.eatToken(106 /* ColonToken */); - var type = allowStringLiteral && this.currentToken().tokenKind === 14 /* StringLiteral */ ? this.eatToken(14 /* StringLiteral */) : this.parseType(); - - return this.factory.typeAnnotation(colonToken, type); - }; - - ParserImpl.prototype.isType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - switch (currentTokenKind) { - case 39 /* TypeOfKeyword */: - - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - - case 70 /* OpenBraceToken */: - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - - case 31 /* NewKeyword */: - return true; - } - - return this.isIdentifier(currentToken); - }; - - ParserImpl.prototype.parseType = function () { - var currentToken = this.currentToken(); - var currentTokenKind = currentToken.tokenKind; - - var type = this.parseNonArrayType(currentToken); - - while (this.currentToken().tokenKind === 74 /* OpenBracketToken */) { - var openBracketToken = this.eatToken(74 /* OpenBracketToken */); - var closeBracketToken = this.eatToken(75 /* CloseBracketToken */); - - type = this.factory.arrayType(type, openBracketToken, closeBracketToken); - } - - return type; - }; - - ParserImpl.prototype.isTypeQuery = function () { - return this.currentToken().tokenKind === 39 /* TypeOfKeyword */; - }; - - ParserImpl.prototype.parseTypeQuery = function () { - var typeOfKeyword = this.eatToken(39 /* TypeOfKeyword */); - var name = this.parseName(); - - return this.factory.typeQuery(typeOfKeyword, name); - }; - - ParserImpl.prototype.parseNonArrayType = function (currentToken) { - var currentTokenKind = currentToken.tokenKind; - switch (currentTokenKind) { - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 61 /* BooleanKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - return this.eatAnyToken(); - - case 70 /* OpenBraceToken */: - return this.parseObjectType(); - - case 72 /* OpenParenToken */: - case 80 /* LessThanToken */: - return this.parseFunctionType(); - - case 31 /* NewKeyword */: - return this.parseConstructorType(); - - case 39 /* TypeOfKeyword */: - return this.parseTypeQuery(); - } - - return this.parseNameOrGenericType(); - }; - - ParserImpl.prototype.parseNameOrGenericType = function () { - var name = this.parseName(); - var typeArgumentList = this.tryParseTypeArgumentList(false); - - return typeArgumentList === null ? name : this.factory.genericType(name, typeArgumentList); - }; - - ParserImpl.prototype.parseFunctionType = function () { - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var returnType = this.parseType(); - - return this.factory.functionType(typeParameterList, parameterList, equalsGreaterThanToken, returnType); - }; - - ParserImpl.prototype.parseConstructorType = function () { - var newKeyword = this.eatKeyword(31 /* NewKeyword */); - var typeParameterList = this.parseOptionalTypeParameterList(false); - var parameterList = this.parseParameterList(); - var equalsGreaterThanToken = this.eatToken(85 /* EqualsGreaterThanToken */); - var type = this.parseType(); - - return this.factory.constructorType(newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type); - }; - - ParserImpl.prototype.isParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return true; - } - - var token = this.currentToken(); - var tokenKind = token.tokenKind; - if (tokenKind === 77 /* DotDotDotToken */) { - return true; - } - - if (ParserImpl.isModifier(token) && !this.isModifierUsedAsParameterIdentifier(token)) { - return true; - } - - return this.isIdentifier(token); - }; - - ParserImpl.prototype.isModifierUsedAsParameterIdentifier = function (token) { - if (this.isIdentifier(token)) { - var nextTokenKind = this.peekToken(1).tokenKind; - switch (nextTokenKind) { - case 73 /* CloseParenToken */: - case 106 /* ColonToken */: - case 107 /* EqualsToken */: - case 79 /* CommaToken */: - case 105 /* QuestionToken */: - return true; - } - } - - return false; - }; - - ParserImpl.prototype.parseParameter = function () { - if (this.currentNode() !== null && this.currentNode().kind() === 242 /* Parameter */) { - return this.eatNode(); - } - - var dotDotDotToken = this.tryEatToken(77 /* DotDotDotToken */); - - var modifierArray = this.getArray(); - - while (true) { - var currentToken = this.currentToken(); - if (ParserImpl.isModifier(currentToken) && !this.isModifierUsedAsParameterIdentifier(currentToken)) { - modifierArray.push(this.eatAnyToken()); - continue; - } - - break; - } - - var modifiers = TypeScript.Syntax.list(modifierArray); - this.returnZeroOrOneLengthArray(modifierArray); - - var identifier = this.eatIdentifierToken(); - var questionToken = this.tryEatToken(105 /* QuestionToken */); - var typeAnnotation = this.parseOptionalTypeAnnotation(true); - - var equalsValueClause = null; - if (this.isEqualsValueClause(true)) { - equalsValueClause = this.parseEqualsValueClause(true); - } - - return this.factory.parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); - }; - - ParserImpl.prototype.parseSyntaxList = function (currentListType, processItems) { - if (typeof processItems === "undefined") { processItems = null; } - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSyntaxListWorker(currentListType, processItems); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.parseSeparatedSyntaxList = function (currentListType) { - var savedListParsingState = this.listParsingState; - this.listParsingState |= currentListType; - - var result = this.parseSeparatedSyntaxListWorker(currentListType); - - this.listParsingState = savedListParsingState; - - return result; - }; - - ParserImpl.prototype.abortParsingListOrMoveToNextToken = function (currentListType, items, skippedTokens) { - this.reportUnexpectedTokenDiagnostic(currentListType); - - for (var state = 524288 /* LastListParsingState */; state >= 1 /* FirstListParsingState */; state >>= 1) { - if ((this.listParsingState & state) !== 0) { - if (this.isExpectedListTerminator(state) || this.isExpectedListItem(state, true)) { - return true; - } - } - } - - var skippedToken = this.currentToken(); - - this.moveToNextToken(); - - this.addSkippedTokenToList(items, skippedTokens, skippedToken); - - return false; - }; - - ParserImpl.prototype.addSkippedTokenToList = function (items, skippedTokens, skippedToken) { - for (var i = items.length - 1; i >= 0; i--) { - var item = items[i]; - var lastToken = item.lastToken(); - if (lastToken.fullWidth() > 0) { - items[i] = this.addSkippedTokenAfterNodeOrToken(item, skippedToken); - return; - } - } - - skippedTokens.push(skippedToken); - }; - - ParserImpl.prototype.tryParseExpectedListItem = function (currentListType, inErrorRecovery, items, processItems) { - if (this.isExpectedListItem(currentListType, inErrorRecovery)) { - var item = this.parseExpectedListItem(currentListType, inErrorRecovery); - - items.push(item); - - if (processItems !== null) { - processItems(this, items); - } - } - }; - - ParserImpl.prototype.listIsTerminated = function (currentListType) { - return this.isExpectedListTerminator(currentListType) || this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.getArray = function () { - if (this.arrayPool.length > 0) { - return this.arrayPool.pop(); - } - - return []; - }; - - ParserImpl.prototype.returnZeroOrOneLengthArray = function (array) { - if (array.length <= 1) { - this.returnArray(array); - } - }; - - ParserImpl.prototype.returnArray = function (array) { - array.length = 0; - this.arrayPool.push(array); - }; - - ParserImpl.prototype.parseSyntaxListWorker = function (currentListType, processItems) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - - while (true) { - var oldItemsCount = items.length; - this.tryParseExpectedListItem(currentListType, false, items, processItems); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } - } - } - - var result = TypeScript.Syntax.list(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.parseSeparatedSyntaxListWorker = function (currentListType) { - var items = this.getArray(); - var skippedTokens = this.getArray(); - TypeScript.Debug.assert(items.length === 0); - TypeScript.Debug.assert(skippedTokens.length === 0); - TypeScript.Debug.assert(skippedTokens !== items); - - var separatorKind = this.separatorKind(currentListType); - var allowAutomaticSemicolonInsertion = separatorKind === 78 /* SemicolonToken */; - - var inErrorRecovery = false; - var listWasTerminated = false; - while (true) { - var oldItemsCount = items.length; - - this.tryParseExpectedListItem(currentListType, inErrorRecovery, items, null); - - var newItemsCount = items.length; - if (newItemsCount === oldItemsCount) { - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - var abort = this.abortParsingListOrMoveToNextToken(currentListType, items, skippedTokens); - if (abort) { - break; - } else { - inErrorRecovery = true; - continue; - } - } - - inErrorRecovery = false; - - var currentToken = this.currentToken(); - if (currentToken.tokenKind === separatorKind || currentToken.tokenKind === 79 /* CommaToken */) { - items.push(this.eatAnyToken()); - continue; - } - - if (this.listIsTerminated(currentListType)) { - listWasTerminated = true; - break; - } - - if (allowAutomaticSemicolonInsertion && this.canEatAutomaticSemicolon(false)) { - items.push(this.eatExplicitOrAutomaticSemicolon(false)); - - continue; - } - - items.push(this.eatToken(separatorKind)); - - inErrorRecovery = true; - } - - var result = TypeScript.Syntax.separatedList(items); - - this.returnZeroOrOneLengthArray(items); - - return { skippedTokens: skippedTokens, list: result }; - }; - - ParserImpl.prototype.separatorKind = function (currentListType) { - switch (currentListType) { - case 2048 /* HeritageClause_TypeNameList */: - case 16384 /* ArgumentList_AssignmentExpressions */: - case 256 /* EnumDeclaration_EnumElements */: - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - case 131072 /* ParameterList_Parameters */: - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - case 262144 /* TypeArgumentList_Types */: - case 524288 /* TypeParameterList_TypeParameters */: - return 79 /* CommaToken */; - - case 512 /* ObjectType_TypeMembers */: - return 78 /* SemicolonToken */; - - case 1 /* SourceUnit_ModuleElements */: - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - case 2 /* ClassDeclaration_ClassElements */: - case 4 /* ModuleDeclaration_ModuleElements */: - case 8 /* SwitchStatement_SwitchClauses */: - case 16 /* SwitchClause_Statements */: - case 32 /* Block_Statements */: - default: - throw TypeScript.Errors.notYetImplemented(); - } - }; - - ParserImpl.prototype.reportUnexpectedTokenDiagnostic = function (listType) { - var token = this.currentToken(); - - var diagnostic = new TypeScript.Diagnostic(this.fileName, this.lineMap, this.currentTokenStart(), token.width(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [this.getExpectedListElementType(listType)]); - this.addDiagnostic(diagnostic); - }; - - ParserImpl.prototype.addDiagnostic = function (diagnostic) { - if (this.diagnostics.length > 0 && this.diagnostics[this.diagnostics.length - 1].start() === diagnostic.start()) { - return; - } - - this.diagnostics.push(diagnostic); - }; - - ParserImpl.prototype.isExpectedListTerminator = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isExpectedSourceUnit_ModuleElementsTerminator(); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isExpectedClassDeclaration_ClassElementsTerminator(); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isExpectedModuleDeclaration_ModuleElementsTerminator(); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isExpectedSwitchStatement_SwitchClausesTerminator(); - - case 16 /* SwitchClause_Statements */: - return this.isExpectedSwitchClause_StatementsTerminator(); - - case 32 /* Block_Statements */: - return this.isExpectedBlock_StatementsTerminator(); - - case 64 /* TryBlock_Statements */: - return this.isExpectedTryBlock_StatementsTerminator(); - - case 128 /* CatchBlock_Statements */: - return this.isExpectedCatchBlock_StatementsTerminator(); - - case 256 /* EnumDeclaration_EnumElements */: - return this.isExpectedEnumDeclaration_EnumElementsTerminator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isExpectedObjectType_TypeMembersTerminator(); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpressionsTerminator(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isExpectedHeritageClause_TypeNameListTerminator(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator(); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); - - case 131072 /* ParameterList_Parameters */: - return this.isExpectedParameterList_ParametersTerminator(); - - case 262144 /* TypeArgumentList_Types */: - return this.isExpectedTypeArgumentList_TypesTerminator(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isExpectedTypeParameterList_TypeParametersTerminator(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isExpectedLiteralExpression_AssignmentExpressionsTerminator(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedSourceUnit_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 10 /* EndOfFileToken */; - }; - - ParserImpl.prototype.isExpectedEnumDeclaration_EnumElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedModuleDeclaration_ModuleElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectType_TypeMembersTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedLiteralExpression_AssignmentExpressionsTerminator = function () { - return this.currentToken().tokenKind === 75 /* CloseBracketToken */; - }; - - ParserImpl.prototype.isExpectedTypeArgumentList_TypesTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (this.canFollowTypeArgumentListInExpression(token.tokenKind)) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedTypeParameterList_TypeParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 81 /* GreaterThanToken */) { - return true; - } - - if (token.tokenKind === 72 /* OpenParenToken */ || token.tokenKind === 70 /* OpenBraceToken */ || token.tokenKind === 48 /* ExtendsKeyword */ || token.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedParameterList_ParametersTerminator = function () { - var token = this.currentToken(); - if (token.tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (token.tokenKind === 70 /* OpenBraceToken */) { - return true; - } - - if (token.tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator = function () { - if (this.currentToken().tokenKind === 78 /* SemicolonToken */ || this.currentToken().tokenKind === 73 /* CloseParenToken */) { - return true; - } - - if (this.currentToken().tokenKind === 29 /* InKeyword */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator = function () { - if (this.previousToken().tokenKind === 79 /* CommaToken */) { - return false; - } - - if (this.currentToken().tokenKind === 85 /* EqualsGreaterThanToken */) { - return true; - } - - return this.canEatExplicitOrAutomaticSemicolon(false); - }; - - ParserImpl.prototype.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 70 /* OpenBraceToken */ || token0.tokenKind === 71 /* CloseBraceToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedHeritageClause_TypeNameListTerminator = function () { - var token0 = this.currentToken(); - if (token0.tokenKind === 48 /* ExtendsKeyword */ || token0.tokenKind === 51 /* ImplementsKeyword */) { - return true; - } - - if (this.isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) { - return true; - } - - return false; - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpressionsTerminator = function () { - var token0 = this.currentToken(); - return token0.tokenKind === 73 /* CloseParenToken */ || token0.tokenKind === 78 /* SemicolonToken */; - }; - - ParserImpl.prototype.isExpectedClassDeclaration_ClassElementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchStatement_SwitchClausesTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedSwitchClause_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */ || this.isSwitchClause(); - }; - - ParserImpl.prototype.isExpectedBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 71 /* CloseBraceToken */; - }; - - ParserImpl.prototype.isExpectedTryBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 17 /* CatchKeyword */ || this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedCatchBlock_StatementsTerminator = function () { - return this.currentToken().tokenKind === 25 /* FinallyKeyword */; - }; - - ParserImpl.prototype.isExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.isHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.isClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.isModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.isSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.isStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.isStatement(inErrorRecovery); - - case 64 /* TryBlock_Statements */: - case 128 /* CatchBlock_Statements */: - return false; - - case 256 /* EnumDeclaration_EnumElements */: - return this.isEnumElement(inErrorRecovery); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.isVariableDeclarator(); - - case 512 /* ObjectType_TypeMembers */: - return this.isTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.isExpectedArgumentList_AssignmentExpression(); - - case 2048 /* HeritageClause_TypeNameList */: - return this.isHeritageClauseTypeName(); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.isPropertyAssignment(inErrorRecovery); - - case 131072 /* ParameterList_Parameters */: - return this.isParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.isType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.isTypeParameter(); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.isAssignmentOrOmittedExpression(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.isExpectedArgumentList_AssignmentExpression = function () { - var currentToken = this.currentToken(); - if (this.isExpression(currentToken)) { - return true; - } - - if (currentToken.tokenKind === 79 /* CommaToken */) { - return true; - } - - return false; - }; - - ParserImpl.prototype.parseExpectedListItem = function (currentListType, inErrorRecovery) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return this.parseHeritageClause(); - - case 2 /* ClassDeclaration_ClassElements */: - return this.parseClassElement(inErrorRecovery); - - case 4 /* ModuleDeclaration_ModuleElements */: - return this.parseModuleElement(inErrorRecovery); - - case 8 /* SwitchStatement_SwitchClauses */: - return this.parseSwitchClause(); - - case 16 /* SwitchClause_Statements */: - return this.parseStatement(inErrorRecovery); - - case 32 /* Block_Statements */: - return this.parseStatement(inErrorRecovery); - - case 256 /* EnumDeclaration_EnumElements */: - return this.parseEnumElement(); - - case 512 /* ObjectType_TypeMembers */: - return this.parseTypeMember(inErrorRecovery); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return this.parseAssignmentExpression(true); - - case 2048 /* HeritageClause_TypeNameList */: - return this.parseNameOrGenericType(); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - return this.parseVariableDeclarator(true, false); - - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return this.parseVariableDeclarator(false, false); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return this.parsePropertyAssignment(inErrorRecovery); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return this.parseAssignmentOrOmittedExpression(); - - case 131072 /* ParameterList_Parameters */: - return this.parseParameter(); - - case 262144 /* TypeArgumentList_Types */: - return this.parseType(); - - case 524288 /* TypeParameterList_TypeParameters */: - return this.parseTypeParameter(); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - ParserImpl.prototype.getExpectedListElementType = function (currentListType) { - switch (currentListType) { - case 1 /* SourceUnit_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 1024 /* ClassOrInterfaceDeclaration_HeritageClauses */: - return '{'; - - case 2 /* ClassDeclaration_ClassElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null); - - case 4 /* ModuleDeclaration_ModuleElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); - - case 8 /* SwitchStatement_SwitchClauses */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null); - - case 16 /* SwitchClause_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 32 /* Block_Statements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); - - case 4096 /* VariableDeclaration_VariableDeclarators_AllowIn */: - case 8192 /* VariableDeclaration_VariableDeclarators_DisallowIn */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 256 /* EnumDeclaration_EnumElements */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); - - case 512 /* ObjectType_TypeMembers */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null); - - case 16384 /* ArgumentList_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - case 2048 /* HeritageClause_TypeNameList */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null); - - case 32768 /* ObjectLiteralExpression_PropertyAssignments */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null); - - case 131072 /* ParameterList_Parameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); - - case 262144 /* TypeArgumentList_Types */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null); - - case 524288 /* TypeParameterList_TypeParameters */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null); - - case 65536 /* ArrayLiteralExpression_AssignmentExpressions */: - return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - default: - throw TypeScript.Errors.invalidOperation(); - } - }; - return ParserImpl; - })(); - - function parse(fileName, text, isDeclaration, options) { - var source = new NormalParserSource(fileName, text, options.languageVersion()); - - return new ParserImpl(fileName, text.lineMap(), source, options, text).parseSyntaxTree(isDeclaration); - } - Parser.parse = parse; - - function incrementalParse(oldSyntaxTree, textChangeRange, newText) { - if (textChangeRange.isUnchanged()) { - return oldSyntaxTree; - } - - var source = new IncrementalParserSource(oldSyntaxTree, textChangeRange, newText); - - return new ParserImpl(oldSyntaxTree.fileName(), newText.lineMap(), source, oldSyntaxTree.parseOptions(), newText).parseSyntaxTree(oldSyntaxTree.isDeclaration()); - } - Parser.incrementalParse = incrementalParse; - })(TypeScript.Parser || (TypeScript.Parser = {})); - var Parser = TypeScript.Parser; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SyntaxTree = (function () { - function SyntaxTree(sourceUnit, isDeclaration, diagnostics, fileName, lineMap, parseOtions) { - this._allDiagnostics = null; - this._sourceUnit = sourceUnit; - this._isDeclaration = isDeclaration; - this._parserDiagnostics = diagnostics; - this._fileName = fileName; - this._lineMap = lineMap; - this._parseOptions = parseOtions; - } - SyntaxTree.prototype.toJSON = function (key) { - var result = {}; - - result.isDeclaration = this._isDeclaration; - result.languageVersion = TypeScript.LanguageVersion[this._parseOptions.languageVersion()]; - result.parseOptions = this._parseOptions; - - if (this.diagnostics().length > 0) { - result.diagnostics = this.diagnostics(); - } - - result.sourceUnit = this._sourceUnit; - result.lineMap = this._lineMap; - - return result; - }; - - SyntaxTree.prototype.sourceUnit = function () { - return this._sourceUnit; - }; - - SyntaxTree.prototype.isDeclaration = function () { - return this._isDeclaration; - }; - - SyntaxTree.prototype.computeDiagnostics = function () { - if (this._parserDiagnostics.length > 0) { - return this._parserDiagnostics; - } - - var diagnostics = []; - this.sourceUnit().accept(new GrammarCheckerWalker(this, diagnostics)); - - return diagnostics; - }; - - SyntaxTree.prototype.diagnostics = function () { - if (this._allDiagnostics === null) { - this._allDiagnostics = this.computeDiagnostics(); - } - - return this._allDiagnostics; - }; - - SyntaxTree.prototype.fileName = function () { - return this._fileName; - }; - - SyntaxTree.prototype.lineMap = function () { - return this._lineMap; - }; - - SyntaxTree.prototype.parseOptions = function () { - return this._parseOptions; - }; - - SyntaxTree.prototype.structuralEquals = function (tree) { - return TypeScript.ArrayUtilities.sequenceEquals(this.diagnostics(), tree.diagnostics(), TypeScript.Diagnostic.equals) && this.sourceUnit().structuralEquals(tree.sourceUnit()); - }; - return SyntaxTree; - })(); - TypeScript.SyntaxTree = SyntaxTree; - - var GrammarCheckerWalker = (function (_super) { - __extends(GrammarCheckerWalker, _super); - function GrammarCheckerWalker(syntaxTree, diagnostics) { - _super.call(this); - this.syntaxTree = syntaxTree; - this.diagnostics = diagnostics; - this.inAmbientDeclaration = false; - this.inBlock = false; - this.inObjectLiteralExpression = false; - this.currentConstructor = null; - } - GrammarCheckerWalker.prototype.childFullStart = function (parent, child) { - return this.position() + TypeScript.Syntax.childOffset(parent, child); - }; - - GrammarCheckerWalker.prototype.childStart = function (parent, child) { - return this.childFullStart(parent, child) + child.leadingTriviaWidth(); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic = function (start, length, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start, length, diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.pushDiagnostic1 = function (elementFullStart, element, diagnosticKey, args) { - if (typeof args === "undefined") { args = null; } - this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), elementFullStart + element.leadingTriviaWidth(), element.width(), diagnosticKey, args)); - }; - - GrammarCheckerWalker.prototype.visitCatchClause = function (node) { - if (node.typeAnnotation) { - this.pushDiagnostic(this.childStart(node, node.typeAnnotation), node.typeAnnotation.width(), TypeScript.DiagnosticCode.Catch_clause_parameter_cannot_have_a_type_annotation); - } - - _super.prototype.visitCatchClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkParameterListOrder = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - var seenOptionalParameter = false; - var parameterCount = node.parameters.nonSeparatorCount(); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameterIndex = i / 2; - var parameter = node.parameters.childAt(i); - - if (parameter.dotDotDotToken) { - if (parameterIndex !== (parameterCount - 1)) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_must_be_last_in_list); - return true; - } - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Rest_parameter_cannot_have_an_initializer); - return true; - } - } else if (parameter.questionToken || parameter.equalsValueClause) { - seenOptionalParameter = true; - - if (parameter.questionToken && parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer); - return true; - } - } else { - if (seenOptionalParameter) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Required_parameter_cannot_follow_optional_parameter); - return true; - } - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterListAcessibilityModifiers = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameters); - - for (var i = 0, n = node.parameters.childCount(); i < n; i++) { - var nodeOrToken = node.parameters.childAt(i); - if (i % 2 === 0) { - var parameter = node.parameters.childAt(i); - - if (this.checkParameterAccessibilityModifiers(node, parameter, parameterFullStart)) { - return true; - } - } - - parameterFullStart += nodeOrToken.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifiers = function (parameterList, parameter, parameterFullStart) { - if (parameter.modifiers.childCount() > 0) { - var modifiers = parameter.modifiers; - var modifierFullStart = parameterFullStart + TypeScript.Syntax.childOffset(parameter, modifiers); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - - if (this.checkParameterAccessibilityModifier(parameterList, modifier, modifierFullStart, i)) { - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierFullStart, modifierIndex) { - if (modifier.tokenKind !== 57 /* PublicKeyword */ && modifier.tokenKind !== 55 /* PrivateKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]); - return true; - } else { - if (modifierIndex > 0) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (!this.inAmbientDeclaration && this.currentConstructor && !this.currentConstructor.block && this.currentConstructor.callSignature.parameterList === parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_cannot_be_used_in_a_constructor_overload); - return true; - } else if (this.inAmbientDeclaration || this.currentConstructor === null || this.currentConstructor.callSignature.parameterList !== parameterList) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Parameter_property_declarations_can_only_be_used_in_a_non_ambient_constructor_declaration); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForTrailingSeparator = function (parent, list) { - if (list.childCount() === 0 || list.childCount() % 2 === 1) { - return false; - } - - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i === n - 1) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode.Trailing_separator_not_allowed); - } - - currentElementFullStart += child.fullWidth(); - } - - return true; - }; - - GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, expected) { - if (list.childCount() > 0) { - return false; - } - - var listFullStart = this.childFullStart(parent, list); - var tokenAtStart = this.syntaxTree.sourceUnit().findToken(listFullStart); - - this.pushDiagnostic1(listFullStart, tokenAtStart.token(), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [expected]); - - return true; - }; - - GrammarCheckerWalker.prototype.visitParameterList = function (node) { - if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingSeparator(node, node.parameters)) { - this.skip(node); - return; - } - - _super.prototype.visitParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitHeritageClause = function (node) { - if (this.checkForTrailingSeparator(node, node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null))) { - this.skip(node); - return; - } - - _super.prototype.visitHeritageClause.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.arguments)) { - this.skip(node); - return; - } - - _super.prototype.visitArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) { - if (this.checkForTrailingSeparator(node, node.variableDeclarators) || this.checkForAtLeastOneElement(node, node.variableDeclarators, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeArgumentList.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) { - if (this.checkForTrailingSeparator(node, node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null))) { - this.skip(node); - return; - } - - _super.prototype.visitTypeParameterList.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) { - var parameterFullStart = this.childFullStart(node, node.parameter); - var parameter = node.parameter; - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters); - return true; - } else if (parameter.modifiers.childCount() > 0) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers); - return true; - } else if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark); - return true; - } else if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer); - return true; - } else if (!parameter.typeAnnotation) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation); - return true; - } else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexSignature = function (node) { - if (this.checkIndexSignatureParameter(node)) { - this.skip(node); - return; - } - - if (!node.typeAnnotation) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation); - this.skip(node); - return; - } - - _super.prototype.visitIndexSignature.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - var seenImplementsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 2); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause); - return true; - } - - if (heritageClause.typeNames.nonSeparatorCount() > 1) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - if (seenImplementsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen); - return true; - } - - seenImplementsClause = true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) { - if (this.inAmbientDeclaration) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_for_code_already_in_an_ambient_context); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, typeKeyword, modifiers) { - if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) { - if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - this.pushDiagnostic1(this.childFullStart(moduleElement, typeKeyword), typeKeyword.firstToken(), TypeScript.DiagnosticCode.declare_modifier_required_for_top_level_element); - return true; - } - } - }; - - GrammarCheckerWalker.prototype.checkFunctionOverloads = function (node, moduleElements) { - if (!this.inAmbientDeclaration && !this.syntaxTree.isDeclaration()) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - - var inFunctionOverloadChain = false; - var functionOverloadChainName = null; - - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - var lastElement = i === (n - 1); - - if (inFunctionOverloadChain) { - if (moduleElement.kind() !== 129 /* FunctionDeclaration */) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - var functionDeclaration = moduleElement; - if (functionDeclaration.identifier.valueText() !== functionOverloadChainName) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - } - - if (moduleElement.kind() === 129 /* FunctionDeclaration */) { - functionDeclaration = moduleElement; - if (!TypeScript.SyntaxUtilities.containsToken(functionDeclaration.modifiers, 63 /* DeclareKeyword */)) { - inFunctionOverloadChain = functionDeclaration.block === null; - functionOverloadChainName = functionDeclaration.identifier.valueText(); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(moduleElementFullStart, moduleElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = moduleElements.childAt(i + 1); - if (nextElement.kind() === 129 /* FunctionDeclaration */) { - var nextFunction = nextElement; - - if (nextFunction.identifier.valueText() !== functionOverloadChainName && nextFunction.block === null) { - var identifierFullStart = moduleElementFullStart + TypeScript.Syntax.childOffset(moduleElement, functionDeclaration.identifier); - this.pushDiagnostic1(identifierFullStart, functionDeclaration.identifier, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else { - inFunctionOverloadChain = false; - functionOverloadChainName = ""; - } - } - - moduleElementFullStart += moduleElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkClassOverloads = function (node) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var classElementFullStart = this.childFullStart(node, node.classElements); - - var inFunctionOverloadChain = false; - var inConstructorOverloadChain = false; - - var functionOverloadChainName = null; - var isInStaticOverloadChain = null; - var memberFunctionDeclaration = null; - - for (var i = 0, n = node.classElements.childCount(); i < n; i++) { - var classElement = node.classElements.childAt(i); - var lastElement = i === (n - 1); - var isStaticOverload = null; - - if (inFunctionOverloadChain) { - if (classElement.kind() !== 135 /* MemberFunctionDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - - memberFunctionDeclaration = classElement; - if (memberFunctionDeclaration.propertyName.valueText() !== functionOverloadChainName) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_overload_name_must_be_0, [functionOverloadChainName]); - return true; - } - - isStaticOverload = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - if (isStaticOverload !== isInStaticOverloadChain) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - var diagnostic = isInStaticOverloadChain ? TypeScript.DiagnosticCode.Function_overload_must_be_static : TypeScript.DiagnosticCode.Function_overload_must_not_be_static; - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, diagnostic, null); - return true; - } - } else if (inConstructorOverloadChain) { - if (classElement.kind() !== 137 /* ConstructorDeclaration */) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - if (classElement.kind() === 135 /* MemberFunctionDeclaration */) { - memberFunctionDeclaration = classElement; - - inFunctionOverloadChain = memberFunctionDeclaration.block === null; - functionOverloadChainName = memberFunctionDeclaration.propertyName.valueText(); - isInStaticOverloadChain = TypeScript.SyntaxUtilities.containsToken(memberFunctionDeclaration.modifiers, 58 /* StaticKeyword */); - - if (inFunctionOverloadChain) { - if (lastElement) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } else { - var nextElement = node.classElements.childAt(i + 1); - if (nextElement.kind() === 135 /* MemberFunctionDeclaration */) { - var nextMemberFunction = nextElement; - - if (nextMemberFunction.propertyName.valueText() !== functionOverloadChainName && nextMemberFunction.block === null) { - var propertyNameFullStart = classElementFullStart + TypeScript.Syntax.childOffset(classElement, memberFunctionDeclaration.propertyName); - this.pushDiagnostic1(propertyNameFullStart, memberFunctionDeclaration.propertyName, TypeScript.DiagnosticCode.Function_implementation_expected); - return true; - } - } - } - } - } else if (classElement.kind() === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = classElement; - - inConstructorOverloadChain = constructorDeclaration.block === null; - if (lastElement && inConstructorOverloadChain) { - this.pushDiagnostic1(classElementFullStart, classElement.firstToken(), TypeScript.DiagnosticCode.Constructor_implementation_expected); - return true; - } - } - - classElementFullStart += classElement.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForReservedName = function (parent, name, diagnosticKey) { - var nameFullStart = this.childFullStart(parent, name); - var token; - var tokenFullStart; - - var current = name; - while (current !== null) { - if (current.kind() === 121 /* QualifiedName */) { - var qualifiedName = current; - token = qualifiedName.right; - tokenFullStart = nameFullStart + this.childFullStart(qualifiedName, token); - current = qualifiedName.left; - } else { - TypeScript.Debug.assert(current.kind() === 11 /* IdentifierName */); - token = current; - tokenFullStart = nameFullStart; - current = null; - } - - switch (token.valueText()) { - case "any": - case "number": - case "boolean": - case "string": - case "void": - this.pushDiagnostic(tokenFullStart + token.leadingTriviaWidth(), token.width(), diagnosticKey, [token.valueText()]); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Class_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.classKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node) || this.checkClassOverloads(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitClassDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) { - var heritageClauseFullStart = this.childFullStart(node, node.heritageClauses); - - var seenExtendsClause = false; - - for (var i = 0, n = node.heritageClauses.childCount(); i < n; i++) { - TypeScript.Debug.assert(i <= 1); - var heritageClause = node.heritageClauses.childAt(i); - - if (heritageClause.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */) { - if (seenExtendsClause) { - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); - return true; - } - - seenExtendsClause = true; - } else { - TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.tokenKind === 51 /* ImplementsKeyword */); - this.pushDiagnostic1(heritageClauseFullStart, heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause); - return true; - } - - heritageClauseFullStart += heritageClause.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) { - var modifierFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.declare_modifier_cannot_appear_on_an_interface_declaration); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Interface_name_cannot_be_0) || this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) { - this.skip(node); - return; - } - - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) { - var modifierFullStart = this.position(); - - var seenAccessibilityModifier = false; - var seenStaticModifier = false; - - for (var i = 0, n = list.childCount(); i < n; i++) { - var modifier = list.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */) { - if (seenAccessibilityModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return true; - } - - if (seenStaticModifier) { - var previousToken = list.childAt(i - 1); - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]); - return true; - } - - seenAccessibilityModifier = true; - } else if (modifier.tokenKind === 58 /* StaticKeyword */) { - if (seenStaticModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return true; - } - - seenStaticModifier = true; - } else { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]); - return true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberVariableDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node, getKeyword, parameterList) { - var getKeywordFullStart = this.childFullStart(node, getKeyword); - if (parameterList.parameters.childCount() !== 0) { - this.pushDiagnostic1(getKeywordFullStart, getKeyword, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) { - if (this.checkIndexMemberModifiers(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIndexMemberDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) { - if (node.modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(node, node.modifiers); - this.pushDiagnostic1(modifierFullStart, node.modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, node, languageVersion, diagnosticKey) { - if (this.syntaxTree.parseOptions().languageVersion() < languageVersion) { - var nodeFullStart = this.childFullStart(parent, node); - this.pushDiagnostic1(nodeFullStart, node, diagnosticKey); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - GrammarCheckerWalker.prototype.visitGetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.getKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkGetAccessorParameter(node, node.getKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitGetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) { - if (this.inAmbientDeclaration) { - this.pushDiagnostic1(this.position(), accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts, null); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node, setKeyword, parameterList) { - var setKeywordFullStart = this.childFullStart(node, setKeyword); - if (parameterList.parameters.childCount() !== 1) { - this.pushDiagnostic1(setKeywordFullStart, setKeyword, TypeScript.DiagnosticCode.set_accessor_must_have_one_and_only_one_parameter); - return true; - } - - var parameterListFullStart = this.childFullStart(node, parameterList); - var parameterFullStart = parameterListFullStart + TypeScript.Syntax.childOffset(parameterList, parameterList.openParenToken); - var parameter = parameterList.parameters.childAt(0); - - if (parameter.questionToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional); - return true; - } - - if (parameter.equalsValueClause) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer); - return true; - } - - if (parameter.dotDotDotToken) { - this.pushDiagnostic1(parameterFullStart, parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSetAccessor = function (node) { - if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.setKeyword, 1 /* EcmaScript5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkSetAccessorParameter(node, node.setKeyword, node.parameterList)) { - this.skip(node); - return; - } - - _super.prototype.visitSetAccessor.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) { - if (this.checkForReservedName(node, node.identifier, TypeScript.DiagnosticCode.Enum_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.enumKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitEnumDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkEnumElements = function (node) { - var enumElementFullStart = this.childFullStart(node, node.enumElements); - - var previousValueWasComputed = false; - for (var i = 0, n = node.enumElements.childCount(); i < n; i++) { - var child = node.enumElements.childAt(i); - - if (i % 2 === 0) { - var enumElement = child; - - if (!enumElement.equalsValueClause && previousValueWasComputed) { - this.pushDiagnostic1(enumElementFullStart, enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer, null); - return true; - } - - if (enumElement.equalsValueClause) { - var value = enumElement.equalsValueClause.value; - previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value); - } - } - - enumElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitEnumElement = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - var expression = node.equalsValueClause.value; - if (!TypeScript.Syntax.isIntegerLiteral(expression)) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers); - this.skip(node); - return; - } - } - - _super.prototype.visitEnumElement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) { - if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) { - this.pushDiagnostic1(this.position(), node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments); - } - - _super.prototype.visitInvocationExpression.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) { - var modifierFullStart = this.position(); - var seenExportModifier = false; - var seenDeclareModifier = false; - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var modifier = modifiers.childAt(i); - if (modifier.tokenKind === 57 /* PublicKeyword */ || modifier.tokenKind === 55 /* PrivateKeyword */ || modifier.tokenKind === 58 /* StaticKeyword */) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]); - return true; - } - - if (modifier.tokenKind === 63 /* DeclareKeyword */) { - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); - return; - } - - seenDeclareModifier = true; - } else if (modifier.tokenKind === 47 /* ExportKeyword */) { - if (seenExportModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); - return; - } - - if (seenDeclareModifier) { - this.pushDiagnostic1(modifierFullStart, modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]); - return; - } - - seenExportModifier = true; - } - - modifierFullStart += modifier.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) { - var currentElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - if (child.kind() === 133 /* ImportDeclaration */) { - var importDeclaration = child; - if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (node.stringLiteral === null) { - this.pushDiagnostic1(currentElementFullStart, importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module, null); - } - } - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) { - var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); - - if (declareToken) { - this.pushDiagnostic1(this.childFullStart(modifiers, declareToken), declareToken, TypeScript.DiagnosticCode.declare_modifier_not_allowed_on_import_declaration); - return true; - } - }; - - GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - _super.prototype.visitImportDeclaration.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) { - if (this.checkForReservedName(node, node.name, TypeScript.DiagnosticCode.Module_name_cannot_be_0) || this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.moduleKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (!TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */) && this.checkFunctionOverloads(node, node.moduleElements)) { - this.skip(node); - return; - } - - if (node.stringLiteral) { - if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { - var stringLiteralFullStart = this.childFullStart(node, node.stringLiteral); - this.pushDiagnostic1(stringLiteralFullStart, node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names); - this.skip(node); - return; - } - } - - if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitModuleDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExports = function (node, moduleElements) { - var seenExportedElement = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (TypeScript.SyntaxUtilities.hasExportKeyword(child)) { - seenExportedElement = true; - break; - } - } - - var moduleElementFullStart = this.childFullStart(node, moduleElements); - if (seenExportedElement) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_not_allowed_in_module_with_exported_element); - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkForMultipleExportAssignments = function (node, moduleElements) { - var moduleElementFullStart = this.childFullStart(node, moduleElements); - var seenExportAssignment = false; - var errorFound = false; - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var child = moduleElements.childAt(i); - if (child.kind() === 134 /* ExportAssignment */) { - if (seenExportAssignment) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Module_cannot_have_multiple_export_assignments); - errorFound = true; - } - seenExportAssignment = true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return errorFound; - }; - - GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) { - var moduleElementFullStart = this.childFullStart(node, node.moduleElements); - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var child = node.moduleElements.childAt(i); - - if (child.kind() === 134 /* ExportAssignment */) { - this.pushDiagnostic1(moduleElementFullStart, child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules); - - return true; - } - - moduleElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBlock = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Implementations_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - if (this.checkFunctionOverloads(node, node.statements)) { - this.skip(node); - return; - } - - var savedInBlock = this.inBlock; - this.inBlock = true; - _super.prototype.visitBlock.call(this, node); - this.inBlock = savedInBlock; - }; - - GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) { - if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { - this.pushDiagnostic1(this.position(), node.firstToken(), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitBreakStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitBreakStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitContinueStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitContinueStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDebuggerStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitDoStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitDoStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitEmptyStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitExpressionStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitForInStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForInStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) { - if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.nonSeparatorCount() > 1) { - var variableDeclarationFullStart = this.childFullStart(node, node.variableDeclaration); - - this.pushDiagnostic1(variableDeclarationFullStart, node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitForStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitForStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitIfStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitIfStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitLabeledStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitReturnStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitReturnStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitSwitchStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitThrowStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitThrowStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitTryStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitTryStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWhileStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWhileStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitWithStatement = function (node) { - if (this.checkForStatementInAmbientContxt(node)) { - this.skip(node); - return; - } - - _super.prototype.visitWithStatement.call(this, node); - }; - - GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) { - if (this.inBlock || this.inObjectLiteralExpression) { - if (modifiers.childCount() > 0) { - var modifierFullStart = this.childFullStart(parent, modifiers); - this.pushDiagnostic1(modifierFullStart, modifiers.childAt(0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); - return true; - } - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.functionKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitFunctionDeclaration.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableStatement = function (node) { - if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); - _super.prototype.visitVariableStatement.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) { - var currentElementFullStart = this.childFullStart(parent, list); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (i % 2 === 1 && child.kind() !== kind) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]); - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitObjectType = function (node) { - if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) { - this.skip(node); - return; - } - - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitObjectType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitArrayType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitArrayType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitFunctionType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitFunctionType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitConstructorType = function (node) { - var savedInAmbientDeclaration = this.inAmbientDeclaration; - this.inAmbientDeclaration = true; - _super.prototype.visitConstructorType.call(this, node); - this.inAmbientDeclaration = savedInAmbientDeclaration; - }; - - GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) { - if (this.inAmbientDeclaration && node.equalsValueClause) { - this.pushDiagnostic1(this.childFullStart(node, node.equalsValueClause), node.equalsValueClause.firstToken(), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts); - this.skip(node); - return; - } - - _super.prototype.visitVariableDeclarator.call(this, node); - }; - - GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) { - if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) { - this.skip(node); - return; - } - - var savedCurrentConstructor = this.currentConstructor; - this.currentConstructor = node; - _super.prototype.visitConstructorDeclaration.call(this, node); - this.currentConstructor = savedCurrentConstructor; - }; - - GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) { - var currentElementFullStart = this.position(); - - for (var i = 0, n = modifiers.childCount(); i < n; i++) { - var child = modifiers.childAt(i); - if (child.kind() !== 57 /* PublicKeyword */) { - this.pushDiagnostic1(currentElementFullStart, child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]); - return true; - } - - currentElementFullStart += child.fullWidth(); - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeParameterList) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeParameterListFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(callSignatureFullStart, node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) { - var currentElementFullStart = this.position(); - - if (node.callSignature.typeAnnotation) { - var callSignatureFullStart = this.childFullStart(node, node.callSignature); - var typeAnnotationFullStart = callSignatureFullStart + TypeScript.Syntax.childOffset(node.callSignature, node.callSignature.typeAnnotation); - this.pushDiagnostic1(typeAnnotationFullStart, node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration); - return true; - } - - return false; - }; - - GrammarCheckerWalker.prototype.visitSourceUnit = function (node) { - if (this.checkFunctionOverloads(node, node.moduleElements) || this.checkForDisallowedExports(node, node.moduleElements) || this.checkForMultipleExportAssignments(node, node.moduleElements)) { - this.skip(node); - return; - } - - _super.prototype.visitSourceUnit.call(this, node); - }; - return GrammarCheckerWalker; - })(TypeScript.PositionTrackingWalker); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Unicode = (function () { - function Unicode() { - } - Unicode.lookupInUnicodeMap = function (code, map) { - if (code < map[0]) { - return false; - } - - var lo = 0; - var hi = map.length; - var mid; - - while (lo + 1 < hi) { - mid = lo + (hi - lo) / 2; - - mid -= mid % 2; - if (map[mid] <= code && code <= map[mid + 1]) { - return true; - } - - if (code < map[mid]) { - hi = mid; - } else { - lo = mid + 2; - } - } - - return false; - }; - - Unicode.isIdentifierStart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - - Unicode.isIdentifierPart = function (code, languageVersion) { - if (languageVersion === 0 /* EcmaScript3 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart); - } else if (languageVersion === 1 /* EcmaScript5 */) { - return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart); - } else { - throw TypeScript.Errors.argumentOutOfRange("languageVersion"); - } - }; - Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - - Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; - return Unicode; - })(); - TypeScript.Unicode = Unicode; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (CompilerDiagnostics) { - CompilerDiagnostics.debug = false; - - CompilerDiagnostics.diagnosticWriter = null; - - CompilerDiagnostics.analysisPass = 0; - - function Alert(output) { - if (CompilerDiagnostics.diagnosticWriter) { - CompilerDiagnostics.diagnosticWriter.Alert(output); - } - } - CompilerDiagnostics.Alert = Alert; - - function debugPrint(s) { - if (CompilerDiagnostics.debug) { - Alert(s); - } - } - CompilerDiagnostics.debugPrint = debugPrint; - - function assert(condition, s) { - if (CompilerDiagnostics.debug) { - if (!condition) { - Alert(s); - } - } - } - CompilerDiagnostics.assert = assert; - })(TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {})); - var CompilerDiagnostics = TypeScript.CompilerDiagnostics; - - var NullLogger = (function () { - function NullLogger() { - } - NullLogger.prototype.information = function () { - return false; - }; - NullLogger.prototype.debug = function () { - return false; - }; - NullLogger.prototype.warning = function () { - return false; - }; - NullLogger.prototype.error = function () { - return false; - }; - NullLogger.prototype.fatal = function () { - return false; - }; - NullLogger.prototype.log = function (s) { - }; - return NullLogger; - })(); - TypeScript.NullLogger = NullLogger; - - function timeFunction(logger, funcDescription, func) { - var start = (new Date()).getTime(); - var result = func(); - var end = (new Date()).getTime(); - if (logger.information()) { - logger.log(funcDescription + " completed in " + (end - start) + " msec"); - } - return result; - } - TypeScript.timeFunction = timeFunction; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Document = (function () { - function Document(_compiler, _semanticInfoChain, fileName, referencedFiles, _scriptSnapshot, byteOrderMark, version, isOpen, _syntaxTree, _topLevelDecl) { - this._compiler = _compiler; - this._semanticInfoChain = _semanticInfoChain; - this.fileName = fileName; - this.referencedFiles = referencedFiles; - this._scriptSnapshot = _scriptSnapshot; - this.byteOrderMark = byteOrderMark; - this.version = version; - this.isOpen = isOpen; - this._syntaxTree = _syntaxTree; - this._topLevelDecl = _topLevelDecl; - this._diagnostics = null; - this._bloomFilter = null; - this._sourceUnit = null; - this._lineMap = null; - this._declASTMap = []; - this._astDeclMap = []; - this._amdDependencies = undefined; - this._externalModuleIndicatorSpan = undefined; - } - Document.prototype.invalidate = function () { - this._declASTMap.length = 0; - this._astDeclMap.length = 0; - this._topLevelDecl = null; - - this._syntaxTree = null; - this._sourceUnit = null; - this._diagnostics = null; - this._bloomFilter = null; - }; - - Document.prototype.isDeclareFile = function () { - return TypeScript.isDTSFile(this.fileName); - }; - - Document.prototype.cacheSyntaxTreeInfo = function (syntaxTree) { - var start = new Date().getTime(); - this._diagnostics = syntaxTree.diagnostics(); - TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start; - - this._lineMap = syntaxTree.lineMap(); - - var sourceUnit = syntaxTree.sourceUnit(); - var leadingTrivia = sourceUnit.leadingTrivia(); - - this._externalModuleIndicatorSpan = this.getImplicitImportSpan(leadingTrivia) || this.getTopLevelImportOrExportSpan(sourceUnit); - - var amdDependencies = []; - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.isComment()) { - var amdDependency = this.getAmdDependency(trivia.fullText()); - if (amdDependency) { - amdDependencies.push(amdDependency); - } - } - } - - this._amdDependencies = amdDependencies; - }; - - Document.prototype.getAmdDependency = function (comment) { - var amdDependencyRegEx = /^\/\/\/\s*/gim; - var match = implicitImportRegEx.exec(trivia.fullText()); - - if (match) { - return new TypeScript.TextSpan(position, trivia.fullWidth()); - } - - return null; - }; - - Document.prototype.getTopLevelImportOrExportSpan = function (node) { - var firstToken; - var position = 0; - - for (var i = 0, n = node.moduleElements.childCount(); i < n; i++) { - var moduleElement = node.moduleElements.childAt(i); - - firstToken = moduleElement.firstToken(); - if (firstToken !== null && firstToken.tokenKind === 47 /* ExportKeyword */) { - return new TypeScript.TextSpan(position + firstToken.leadingTriviaWidth(), firstToken.width()); - } - - if (moduleElement.kind() === 133 /* ImportDeclaration */) { - var importDecl = moduleElement; - if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) { - return new TypeScript.TextSpan(position + importDecl.leadingTriviaWidth(), importDecl.width()); - } - } - - position += moduleElement.fullWidth(); - } - - return null; - ; - }; - - Document.prototype.sourceUnit = function () { - if (!this._sourceUnit) { - var start = new Date().getTime(); - var syntaxTree = this.syntaxTree(); - this._sourceUnit = TypeScript.SyntaxTreeToAstVisitor.visit(syntaxTree, this.fileName, this._compiler.compilationSettings(), this.isOpen); - TypeScript.astTranslationTime += new Date().getTime() - start; - - if (!this.isOpen) { - this._syntaxTree = null; - } - } - - return this._sourceUnit; - }; - - Document.prototype.diagnostics = function () { - if (this._diagnostics === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._diagnostics); - } - - return this._diagnostics; - }; - - Document.prototype.lineMap = function () { - if (this._lineMap === null) { - this.syntaxTree(); - TypeScript.Debug.assert(this._lineMap); - } - - return this._lineMap; - }; - - Document.prototype.isExternalModule = function () { - return this.externalModuleIndicatorSpan() !== null; - }; - - Document.prototype.externalModuleIndicatorSpan = function () { - if (this._externalModuleIndicatorSpan === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._externalModuleIndicatorSpan !== undefined); - } - - return this._externalModuleIndicatorSpan; - }; - - Document.prototype.amdDependencies = function () { - if (this._amdDependencies === undefined) { - this.syntaxTree(); - TypeScript.Debug.assert(this._amdDependencies !== undefined); - } - - return this._amdDependencies; - }; - - Document.prototype.syntaxTree = function () { - var result = this._syntaxTree; - if (!result) { - var start = new Date().getTime(); - - result = TypeScript.Parser.parse(this.fileName, TypeScript.SimpleText.fromScriptSnapshot(this._scriptSnapshot), TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())); - - TypeScript.syntaxTreeParseTime += new Date().getTime() - start; - - if (this.isOpen || !this._sourceUnit) { - this._syntaxTree = result; - } - } - - this.cacheSyntaxTreeInfo(result); - return result; - }; - - Document.prototype.bloomFilter = function () { - if (!this._bloomFilter) { - var identifiers = TypeScript.createIntrinsicsObject(); - var pre = function (cur) { - if (TypeScript.ASTHelpers.isValidAstNode(cur)) { - if (cur.kind() === 11 /* IdentifierName */) { - var nodeText = cur.valueText(); - - identifiers[nodeText] = true; - } - } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(this.sourceUnit(), pre, null, identifiers); - - var identifierCount = 0; - for (var name in identifiers) { - if (identifiers[name]) { - identifierCount++; - } - } - - this._bloomFilter = new TypeScript.BloomFilter(identifierCount); - this._bloomFilter.addKeys(identifiers); - } - return this._bloomFilter; - }; - - Document.prototype.emitToOwnOutputFile = function () { - return !this._compiler.compilationSettings().outFileOption() || this.isExternalModule(); - }; - - Document.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) { - var oldSyntaxTree = this._syntaxTree; - - if (textChangeRange !== null && TypeScript.Debug.shouldAssert(1 /* Normal */)) { - var oldText = this._scriptSnapshot; - var newText = scriptSnapshot; - - TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength()); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldTextPrefix = oldText.getText(0, textChangeRange.span().start()); - var newTextPrefix = newText.getText(0, textChangeRange.span().start()); - TypeScript.Debug.assert(oldTextPrefix === newTextPrefix); - - var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength()); - var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength()); - TypeScript.Debug.assert(oldTextSuffix === newTextSuffix); - } - } - - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var newSyntaxTree = textChangeRange === null || oldSyntaxTree === null ? TypeScript.Parser.parse(this.fileName, text, TypeScript.isDTSFile(this.fileName), TypeScript.getParseOptions(this._compiler.compilationSettings())) : TypeScript.Parser.incrementalParse(oldSyntaxTree, textChangeRange, text); - - return new Document(this._compiler, this._semanticInfoChain, this.fileName, this.referencedFiles, scriptSnapshot, this.byteOrderMark, version, isOpen, newSyntaxTree, null); - }; - - Document.create = function (compiler, semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - return new Document(compiler, semanticInfoChain, fileName, referencedFiles, scriptSnapshot, byteOrderMark, version, isOpen, null, null); - }; - - Document.prototype.topLevelDecl = function () { - if (this._topLevelDecl === null) { - this._topLevelDecl = TypeScript.DeclarationCreator.create(this, this._semanticInfoChain, this._compiler.compilationSettings()); - } - - return this._topLevelDecl; - }; - - Document.prototype._getDeclForAST = function (ast) { - this.topLevelDecl(); - return this._astDeclMap[ast.syntaxID()]; - }; - - Document.prototype.getEnclosingDecl = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - return this._getDeclForAST(ast); - } - - ast = ast.parent; - var decl = null; - while (ast) { - decl = this._getDeclForAST(ast); - - if (decl) { - break; - } - - ast = ast.parent; - } - - return decl._getEnclosingDeclFromParentDecl(); - }; - - Document.prototype._setDeclForAST = function (ast, decl) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._astDeclMap[ast.syntaxID()] = decl; - }; - - Document.prototype._getASTForDecl = function (decl) { - return this._declASTMap[decl.declID]; - }; - - Document.prototype._setASTForDecl = function (decl, ast) { - TypeScript.Debug.assert(decl.fileName() === this.fileName); - this._declASTMap[decl.declID] = ast; - }; - return Document; - })(); - TypeScript.Document = Document; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function hasFlag(val, flag) { - return (val & flag) !== 0; - } - TypeScript.hasFlag = hasFlag; - - (function (TypeRelationshipFlags) { - TypeRelationshipFlags[TypeRelationshipFlags["SuccessfulComparison"] = 0] = "SuccessfulComparison"; - TypeRelationshipFlags[TypeRelationshipFlags["RequiredPropertyIsMissing"] = 1 << 1] = "RequiredPropertyIsMissing"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleSignatures"] = 1 << 2] = "IncompatibleSignatures"; - TypeRelationshipFlags[TypeRelationshipFlags["SourceSignatureHasTooManyParameters"] = 3] = "SourceSignatureHasTooManyParameters"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleReturnTypes"] = 1 << 4] = "IncompatibleReturnTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatiblePropertyTypes"] = 1 << 5] = "IncompatiblePropertyTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["IncompatibleParameterTypes"] = 1 << 6] = "IncompatibleParameterTypes"; - TypeRelationshipFlags[TypeRelationshipFlags["InconsistantPropertyAccesibility"] = 1 << 7] = "InconsistantPropertyAccesibility"; - })(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {})); - var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags; - - (function (ModuleGenTarget) { - ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; - ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; - ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous"; - })(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {})); - var ModuleGenTarget = TypeScript.ModuleGenTarget; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var proto = "__proto__"; - - var BlockIntrinsics = (function () { - function BlockIntrinsics() { - this.prototype = undefined; - this.toString = undefined; - this.toLocaleString = undefined; - this.valueOf = undefined; - this.hasOwnProperty = undefined; - this.propertyIsEnumerable = undefined; - this.isPrototypeOf = undefined; - this["constructor"] = undefined; - - this[proto] = null; - this[proto] = undefined; - } - return BlockIntrinsics; - })(); - - function createIntrinsicsObject() { - return new BlockIntrinsics(); - } - TypeScript.createIntrinsicsObject = createIntrinsicsObject; - - var StringHashTable = (function () { - function StringHashTable() { - this.itemCount = 0; - this.table = createIntrinsicsObject(); - } - StringHashTable.prototype.getAllKeys = function () { - var result = []; - - for (var k in this.table) { - if (this.table[k] !== undefined) { - result.push(k); - } - } - - return result; - }; - - StringHashTable.prototype.add = function (key, data) { - if (this.table[key] !== undefined) { - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.addOrUpdate = function (key, data) { - if (this.table[key] !== undefined) { - this.table[key] = data; - return false; - } - - this.table[key] = data; - this.itemCount++; - return true; - }; - - StringHashTable.prototype.map = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - fn(k, this.table[k], context); - } - } - }; - - StringHashTable.prototype.every = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (!fn(k, this.table[k], context)) { - return false; - } - } - } - - return true; - }; - - StringHashTable.prototype.some = function (fn, context) { - for (var k in this.table) { - var data = this.table[k]; - - if (data !== undefined) { - if (fn(k, this.table[k], context)) { - return true; - } - } - } - - return false; - }; - - StringHashTable.prototype.count = function () { - return this.itemCount; - }; - - StringHashTable.prototype.lookup = function (key) { - var data = this.table[key]; - return data === undefined ? null : data; - }; - - StringHashTable.prototype.remove = function (key) { - if (this.table[key] !== undefined) { - this.table[key] = undefined; - this.itemCount--; - } - }; - return StringHashTable; - })(); - TypeScript.StringHashTable = StringHashTable; - - var IdentiferNameHashTable = (function (_super) { - __extends(IdentiferNameHashTable, _super); - function IdentiferNameHashTable() { - _super.apply(this, arguments); - } - IdentiferNameHashTable.prototype.getAllKeys = function () { - var result = []; - - _super.prototype.map.call(this, function (k, v, c) { - if (v !== undefined) { - result.push(k.substring(1)); - } - }, null); - - return result; - }; - - IdentiferNameHashTable.prototype.add = function (key, data) { - return _super.prototype.add.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.addOrUpdate = function (key, data) { - return _super.prototype.addOrUpdate.call(this, "#" + key, data); - }; - - IdentiferNameHashTable.prototype.map = function (fn, context) { - return _super.prototype.map.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.every = function (fn, context) { - return _super.prototype.every.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.some = function (fn, context) { - return _super.prototype.some.call(this, function (k, v, c) { - return fn(k.substring(1), v, c); - }, context); - }; - - IdentiferNameHashTable.prototype.lookup = function (key) { - return _super.prototype.lookup.call(this, "#" + key); - }; - return IdentiferNameHashTable; - })(StringHashTable); - TypeScript.IdentiferNameHashTable = IdentiferNameHashTable; -})(TypeScript || (TypeScript = {})); - -var TypeScript; -(function (TypeScript) { - (function (ASTHelpers) { - function scriptIsElided(sourceUnit) { - return TypeScript.isDTSFile(sourceUnit.fileName()) || moduleMembersAreElided(sourceUnit.moduleElements); - } - ASTHelpers.scriptIsElided = scriptIsElided; - - function moduleIsElided(declaration) { - return TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) || moduleMembersAreElided(declaration.moduleElements); - } - ASTHelpers.moduleIsElided = moduleIsElided; - - function moduleMembersAreElided(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - if (!moduleIsElided(member)) { - return false; - } - } else if (member.kind() !== 128 /* InterfaceDeclaration */) { - return false; - } - } - - return true; - } - - function enumIsElided(declaration) { - if (TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - return true; - } - - return false; - } - ASTHelpers.enumIsElided = enumIsElided; - - function isValidAstNode(ast) { - if (!ast) - return false; - - if (ast.start() === -1 || ast.end() === -1) - return false; - - return true; - } - ASTHelpers.isValidAstNode = isValidAstNode; - - function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) { - if (typeof useTrailingTriviaAsLimChar === "undefined") { useTrailingTriviaAsLimChar = true; } - if (typeof forceInclusive === "undefined") { forceInclusive = false; } - var top = null; - - var pre = function (cur, walker) { - if (isValidAstNode(cur)) { - var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && cur.width() === 0; - - if (isInvalid1) { - walker.options.goChildren = false; - } else { - var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === script.end() + script.trailingTriviaWidth(); - - var minChar = cur.start(); - var limChar = cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0) + (inclusive ? 1 : 0); - if (pos >= minChar && pos < limChar) { - if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || cur.end() > cur.start()) { - if (top === null) { - top = cur; - } else if (cur.start() >= top.start() && (cur.end() + (useTrailingTriviaAsLimChar ? cur.trailingTriviaWidth() : 0)) <= (top.end() + (useTrailingTriviaAsLimChar ? top.trailingTriviaWidth() : 0))) { - if (top.width() !== 0 || cur.width() !== 0) { - top = cur; - } - } - } - } - - walker.options.goChildren = (minChar <= pos && pos <= limChar); - } - } - }; - - TypeScript.getAstWalkerFactory().walk(script, pre); - return top; - } - ASTHelpers.getAstAtPosition = getAstAtPosition; - - function getExtendsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 230 /* ExtendsHeritageClause */; - }); - } - ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause; - - function getImplementsHeritageClause(clauses) { - if (!clauses) { - return null; - } - - return clauses.firstOrDefault(function (c) { - return c.typeNames.nonSeparatorCount() > 0 && c.kind() === 231 /* ImplementsHeritageClause */; - }); - } - ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause; - - function isCallExpression(ast) { - return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */); - } - ASTHelpers.isCallExpression = isCallExpression; - - function isCallExpressionTarget(ast) { - if (!ast) { - return false; - } - - var current = ast; - - while (current && current.parent) { - if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) { - current = current.parent; - continue; - } - - break; - } - - if (current && current.parent) { - if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) { - return current === current.parent.expression; - } - } - - return false; - } - ASTHelpers.isCallExpressionTarget = isCallExpressionTarget; - - function isNameOfSomeDeclaration(ast) { - if (ast === null || ast.parent === null) { - return false; - } - if (ast.kind() !== 11 /* IdentifierName */) { - return false; - } - - switch (ast.parent.kind()) { - case 131 /* ClassDeclaration */: - return ast.parent.identifier === ast; - case 128 /* InterfaceDeclaration */: - return ast.parent.identifier === ast; - case 132 /* EnumDeclaration */: - return ast.parent.identifier === ast; - case 130 /* ModuleDeclaration */: - return ast.parent.name === ast || ast.parent.stringLiteral === ast; - case 225 /* VariableDeclarator */: - return ast.parent.propertyName === ast; - case 129 /* FunctionDeclaration */: - return ast.parent.identifier === ast; - case 135 /* MemberFunctionDeclaration */: - return ast.parent.propertyName === ast; - case 242 /* Parameter */: - return ast.parent.identifier === ast; - case 238 /* TypeParameter */: - return ast.parent.identifier === ast; - case 240 /* SimplePropertyAssignment */: - return ast.parent.propertyName === ast; - case 241 /* FunctionPropertyAssignment */: - return ast.parent.propertyName === ast; - case 243 /* EnumElement */: - return ast.parent.propertyName === ast; - case 133 /* ImportDeclaration */: - return ast.parent.identifier === ast; - } - - return false; - } - - function isDeclarationASTOrDeclarationNameAST(ast) { - return isNameOfSomeDeclaration(ast) || isDeclarationAST(ast); - } - ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST; - - function getEnclosingParameterForInitializer(ast) { - var current = ast; - while (current) { - switch (current.kind()) { - case 232 /* EqualsValueClause */: - if (current.parent && current.parent.kind() === 242 /* Parameter */) { - return current.parent; - } - break; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - - current = current.parent; - } - return null; - } - ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer; - - function getEnclosingMemberVariableDeclaration(ast) { - var current = ast; - - while (current) { - switch (current.kind()) { - case 136 /* MemberVariableDeclaration */: - return current; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - return null; - } - current = current.parent; - } - - return null; - } - ASTHelpers.getEnclosingMemberVariableDeclaration = getEnclosingMemberVariableDeclaration; - - function isNameOfFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast; - } - ASTHelpers.isNameOfFunction = isNameOfFunction; - - function isNameOfMemberFunction(ast) { - return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast; - } - ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction; - - function isNameOfMemberAccessExpression(ast) { - if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) { - return true; - } - - return false; - } - ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression; - - function isRightSideOfQualifiedName(ast) { - if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) { - return true; - } - - return false; - } - ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName; - - function parentIsModuleDeclaration(ast) { - return ast.parent && ast.parent.kind() === 130 /* ModuleDeclaration */; - } - ASTHelpers.parentIsModuleDeclaration = parentIsModuleDeclaration; - - function parametersFromIdentifier(id) { - return { - length: 1, - lastParameterIsRest: function () { - return false; - }, - ast: id, - astAt: function (index) { - return id; - }, - identifierAt: function (index) { - return id; - }, - typeAt: function (index) { - return null; - }, - initializerAt: function (index) { - return null; - }, - isOptionalAt: function (index) { - return false; - } - }; - } - ASTHelpers.parametersFromIdentifier = parametersFromIdentifier; - - function parametersFromParameter(parameter) { - return { - length: 1, - lastParameterIsRest: function () { - return parameter.dotDotDotToken !== null; - }, - ast: parameter, - astAt: function (index) { - return parameter; - }, - identifierAt: function (index) { - return parameter.identifier; - }, - typeAt: function (index) { - return getType(parameter); - }, - initializerAt: function (index) { - return parameter.equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(parameter); - } - }; - } - ASTHelpers.parametersFromParameter = parametersFromParameter; - - function parameterIsOptional(parameter) { - return parameter.questionToken !== null || parameter.equalsValueClause !== null; - } - - function parametersFromParameterList(list) { - return { - length: list.parameters.nonSeparatorCount(), - lastParameterIsRest: function () { - return TypeScript.lastParameterIsRest(list); - }, - ast: list.parameters, - astAt: function (index) { - return list.parameters.nonSeparatorAt(index); - }, - identifierAt: function (index) { - return list.parameters.nonSeparatorAt(index).identifier; - }, - typeAt: function (index) { - return getType(list.parameters.nonSeparatorAt(index)); - }, - initializerAt: function (index) { - return list.parameters.nonSeparatorAt(index).equalsValueClause; - }, - isOptionalAt: function (index) { - return parameterIsOptional(list.parameters.nonSeparatorAt(index)); - } - }; - } - ASTHelpers.parametersFromParameterList = parametersFromParameterList; - - function isDeclarationAST(ast) { - switch (ast.kind()) { - case 225 /* VariableDeclarator */: - return getVariableStatement(ast) !== null; - - case 133 /* ImportDeclaration */: - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 242 /* Parameter */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 144 /* IndexSignature */: - case 129 /* FunctionDeclaration */: - case 130 /* ModuleDeclaration */: - case 124 /* ArrayType */: - case 122 /* ObjectType */: - case 238 /* TypeParameter */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 136 /* MemberVariableDeclaration */: - case 138 /* IndexMemberDeclaration */: - case 132 /* EnumDeclaration */: - case 243 /* EnumElement */: - case 240 /* SimplePropertyAssignment */: - case 241 /* FunctionPropertyAssignment */: - case 222 /* FunctionExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - case 145 /* MethodSignature */: - case 141 /* PropertySignature */: - return true; - default: - return false; - } - } - ASTHelpers.isDeclarationAST = isDeclarationAST; - - function docComments(ast) { - if (isDeclarationAST(ast)) { - var preComments = ast.kind() === 225 /* VariableDeclarator */ ? getVariableStatement(ast).preComments() : ast.preComments(); - - if (preComments && preComments.length > 0) { - var preCommentsLength = preComments.length; - var docComments = new Array(); - for (var i = preCommentsLength - 1; i >= 0; i--) { - if (isDocComment(preComments[i])) { - docComments.push(preComments[i]); - continue; - } - - break; - } - - return docComments.reverse(); - } - } - - return TypeScript.sentinelEmptyArray; - } - ASTHelpers.docComments = docComments; - - function isDocComment(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - var fullText = comment.fullText(); - return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/"; - } - - return false; - } - - function getParameterList(ast) { - if (ast) { - switch (ast.kind()) { - case 137 /* ConstructorDeclaration */: - return getParameterList(ast.callSignature); - case 129 /* FunctionDeclaration */: - return getParameterList(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getParameterList(ast.callSignature); - case 143 /* ConstructSignature */: - return getParameterList(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getParameterList(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getParameterList(ast.callSignature); - case 222 /* FunctionExpression */: - return getParameterList(ast.callSignature); - case 145 /* MethodSignature */: - return getParameterList(ast.callSignature); - case 125 /* ConstructorType */: - return ast.parameterList; - case 123 /* FunctionType */: - return ast.parameterList; - case 142 /* CallSignature */: - return ast.parameterList; - case 139 /* GetAccessor */: - return ast.parameterList; - case 140 /* SetAccessor */: - return ast.parameterList; - } - } - - return null; - } - ASTHelpers.getParameterList = getParameterList; - - function getType(ast) { - if (ast) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - return getType(ast.callSignature); - case 218 /* ParenthesizedArrowFunctionExpression */: - return getType(ast.callSignature); - case 143 /* ConstructSignature */: - return getType(ast.callSignature); - case 135 /* MemberFunctionDeclaration */: - return getType(ast.callSignature); - case 241 /* FunctionPropertyAssignment */: - return getType(ast.callSignature); - case 222 /* FunctionExpression */: - return getType(ast.callSignature); - case 145 /* MethodSignature */: - return getType(ast.callSignature); - case 142 /* CallSignature */: - return getType(ast.typeAnnotation); - case 144 /* IndexSignature */: - return getType(ast.typeAnnotation); - case 141 /* PropertySignature */: - return getType(ast.typeAnnotation); - case 139 /* GetAccessor */: - return getType(ast.typeAnnotation); - case 242 /* Parameter */: - return getType(ast.typeAnnotation); - case 136 /* MemberVariableDeclaration */: - return getType(ast.variableDeclarator); - case 225 /* VariableDeclarator */: - return getType(ast.typeAnnotation); - case 236 /* CatchClause */: - return getType(ast.typeAnnotation); - case 125 /* ConstructorType */: - return ast.type; - case 123 /* FunctionType */: - return ast.type; - case 244 /* TypeAnnotation */: - return ast.type; - } - } - - return null; - } - ASTHelpers.getType = getType; - - function getVariableStatement(variableDeclarator) { - if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) { - return variableDeclarator.parent.parent.parent; - } - - return null; - } - - function getVariableDeclaratorModifiers(variableDeclarator) { - var variableStatement = getVariableStatement(variableDeclarator); - return variableStatement ? variableStatement.modifiers : TypeScript.sentinelEmptyArray; - } - ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers; - - function isIntegerLiteralAST(expression) { - if (expression) { - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - expression = expression.operand; - return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text()); - - case 13 /* NumericLiteral */: - var text = expression.text(); - return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); - } - } - - return false; - } - ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST; - - function getEnclosingModuleDeclaration(ast) { - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - } - ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration; - - function isEntireNameOfModuleDeclaration(nameAST) { - return parentIsModuleDeclaration(nameAST) && nameAST.parent.name === nameAST; - } - - function getModuleDeclarationFromNameAST(ast) { - if (ast) { - switch (ast.kind()) { - case 14 /* StringLiteral */: - if (parentIsModuleDeclaration(ast) && ast.parent.stringLiteral === ast) { - return ast.parent; - } - return null; - - case 11 /* IdentifierName */: - case 121 /* QualifiedName */: - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - break; - - default: - return null; - } - - for (ast = ast.parent; ast && ast.kind() === 121 /* QualifiedName */; ast = ast.parent) { - if (isEntireNameOfModuleDeclaration(ast)) { - return ast.parent; - } - } - } - - return null; - } - ASTHelpers.getModuleDeclarationFromNameAST = getModuleDeclarationFromNameAST; - - function isLastNameOfModule(ast, astName) { - if (ast) { - if (ast.stringLiteral) { - return astName === ast.stringLiteral; - } else if (ast.name.kind() === 121 /* QualifiedName */) { - return astName === ast.name.right; - } else { - return astName === ast.name; - } - } - - return false; - } - ASTHelpers.isLastNameOfModule = isLastNameOfModule; - - function getNameOfIdenfierOrQualifiedName(name) { - if (name.kind() === 11 /* IdentifierName */) { - return name.text(); - } else { - TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); - var dotExpr = name; - return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); - } - } - ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName; - - function getModuleNames(name, result) { - result = result || []; - - if (name.kind() === 121 /* QualifiedName */) { - getModuleNames(name.left, result); - result.push(name.right); - } else { - result.push(name); - } - - return result; - } - ASTHelpers.getModuleNames = getModuleNames; - })(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); - var ASTHelpers = TypeScript.ASTHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function walkListChildren(preAst, walker) { - for (var i = 0, n = preAst.childCount(); i < n; i++) { - walker.walk(preAst.childAt(i)); - } - } - - function walkThrowStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkPrefixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkPostfixUnaryExpressionChildren(preAst, walker) { - walker.walk(preAst.operand); - } - - function walkDeleteExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkTypeArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArguments); - } - - function walkTypeOfExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkVoidExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkArgumentListChildren(preAst, walker) { - walker.walk(preAst.typeArgumentList); - walker.walk(preAst.arguments); - } - - function walkArrayLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.expressions); - } - - function walkSimplePropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.expression); - } - - function walkFunctionPropertyAssignmentChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkGetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkSeparatedListChildren(preAst, walker) { - for (var i = 0, n = preAst.nonSeparatorCount(); i < n; i++) { - walker.walk(preAst.nonSeparatorAt(i)); - } - } - - function walkSetAccessorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.parameterList); - walker.walk(preAst.block); - } - - function walkObjectLiteralExpressionChildren(preAst, walker) { - walker.walk(preAst.propertyAssignments); - } - - function walkCastExpressionChildren(preAst, walker) { - walker.walk(preAst.type); - walker.walk(preAst.expression); - } - - function walkParenthesizedExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkElementAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentExpression); - } - - function walkMemberAccessExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.name); - } - - function walkQualifiedNameChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkBinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.left); - walker.walk(preAst.right); - } - - function walkEqualsValueClauseChildren(preAst, walker) { - walker.walk(preAst.value); - } - - function walkTypeParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.constraint); - } - - function walkTypeParameterListChildren(preAst, walker) { - walker.walk(preAst.typeParameters); - } - - function walkGenericTypeChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.typeArgumentList); - } - - function walkTypeAnnotationChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkTypeQueryChildren(preAst, walker) { - walker.walk(preAst.name); - } - - function walkInvocationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkObjectCreationExpressionChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.argumentList); - } - - function walkTrinaryExpressionChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.whenTrue); - walker.walk(preAst.whenFalse); - } - - function walkFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFunctionTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkSimpleArrowFunctionExpressionChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.block); - walker.walk(preAst.expression); - } - - function walkMemberFunctionDeclarationChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkFuncDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkIndexMemberDeclarationChildren(preAst, walker) { - walker.walk(preAst.indexSignature); - } - - function walkIndexSignatureChildren(preAst, walker) { - walker.walk(preAst.parameter); - walker.walk(preAst.typeAnnotation); - } - - function walkCallSignatureChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.typeAnnotation); - } - - function walkConstraintChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkConstructorDeclarationChildren(preAst, walker) { - walker.walk(preAst.callSignature); - walker.walk(preAst.block); - } - - function walkConstructorTypeChildren(preAst, walker) { - walker.walk(preAst.typeParameterList); - walker.walk(preAst.parameterList); - walker.walk(preAst.type); - } - - function walkConstructSignatureChildren(preAst, walker) { - walker.walk(preAst.callSignature); - } - - function walkParameterChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkParameterListChildren(preAst, walker) { - walker.walk(preAst.parameters); - } - - function walkPropertySignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - } - - function walkVariableDeclaratorChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.equalsValueClause); - } - - function walkMemberVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.variableDeclarator); - } - - function walkMethodSignatureChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.callSignature); - } - - function walkReturnStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkForStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.initializer); - walker.walk(preAst.condition); - walker.walk(preAst.incrementor); - walker.walk(preAst.statement); - } - - function walkForInStatementChildren(preAst, walker) { - walker.walk(preAst.variableDeclaration); - walker.walk(preAst.left); - walker.walk(preAst.expression); - walker.walk(preAst.statement); - } - - function walkIfStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - walker.walk(preAst.elseClause); - } - - function walkElseClauseChildren(preAst, walker) { - walker.walk(preAst.statement); - } - - function walkWhileStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkDoStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkBlockChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkVariableDeclarationChildren(preAst, walker) { - walker.walk(preAst.declarators); - } - - function walkCaseSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.statements); - } - - function walkDefaultSwitchClauseChildren(preAst, walker) { - walker.walk(preAst.statements); - } - - function walkSwitchStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - walker.walk(preAst.switchClauses); - } - - function walkTryStatementChildren(preAst, walker) { - walker.walk(preAst.block); - walker.walk(preAst.catchClause); - walker.walk(preAst.finallyClause); - } - - function walkCatchClauseChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeAnnotation); - walker.walk(preAst.block); - } - - function walkExternalModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.stringLiteral); - } - - function walkFinallyClauseChildren(preAst, walker) { - walker.walk(preAst.block); - } - - function walkClassDeclChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.classElements); - } - - function walkScriptChildren(preAst, walker) { - walker.walk(preAst.moduleElements); - } - - function walkHeritageClauseChildren(preAst, walker) { - walker.walk(preAst.typeNames); - } - - function walkInterfaceDeclerationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.typeParameterList); - walker.walk(preAst.heritageClauses); - walker.walk(preAst.body); - } - - function walkObjectTypeChildren(preAst, walker) { - walker.walk(preAst.typeMembers); - } - - function walkArrayTypeChildren(preAst, walker) { - walker.walk(preAst.type); - } - - function walkModuleDeclarationChildren(preAst, walker) { - walker.walk(preAst.name); - walker.walk(preAst.stringLiteral); - walker.walk(preAst.moduleElements); - } - - function walkModuleNameModuleReferenceChildren(preAst, walker) { - walker.walk(preAst.moduleName); - } - - function walkEnumDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.enumElements); - } - - function walkEnumElementChildren(preAst, walker) { - walker.walk(preAst.propertyName); - walker.walk(preAst.equalsValueClause); - } - - function walkImportDeclarationChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.moduleReference); - } - - function walkExportAssignmentChildren(preAst, walker) { - walker.walk(preAst.identifier); - } - - function walkWithStatementChildren(preAst, walker) { - walker.walk(preAst.condition); - walker.walk(preAst.statement); - } - - function walkExpressionStatementChildren(preAst, walker) { - walker.walk(preAst.expression); - } - - function walkLabeledStatementChildren(preAst, walker) { - walker.walk(preAst.identifier); - walker.walk(preAst.statement); - } - - function walkVariableStatementChildren(preAst, walker) { - walker.walk(preAst.declaration); - } - - var childrenWalkers = new Array(246 /* Last */ + 1); - - for (var i = 9 /* FirstToken */, n = 119 /* LastToken */; i <= n; i++) { - childrenWalkers[i] = null; - } - for (var i = 4 /* FirstTrivia */, n = 8 /* LastTrivia */; i <= n; i++) { - childrenWalkers[i] = null; - } - - childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren; - childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[60 /* AnyKeyword */] = null; - childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren; - childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren; - childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren; - childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren; - childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren; - childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[146 /* Block */] = walkBlockChildren; - childrenWalkers[61 /* BooleanKeyword */] = null; - childrenWalkers[152 /* BreakStatement */] = null; - childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren; - childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren; - childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren; - childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren; - childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren; - childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren; - childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren; - childrenWalkers[239 /* Constraint */] = walkConstraintChildren; - childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren; - childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren; - childrenWalkers[153 /* ContinueStatement */] = null; - childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren; - childrenWalkers[162 /* DebuggerStatement */] = null; - childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren; - childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren; - childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren; - childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren; - childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren; - childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren; - childrenWalkers[156 /* EmptyStatement */] = null; - childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren; - childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren; - childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren; - childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren; - childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren; - childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren; - childrenWalkers[24 /* FalseKeyword */] = null; - childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren; - childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren; - childrenWalkers[154 /* ForStatement */] = walkForStatementChildren; - childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren; - childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren; - childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren; - childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren; - childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren; - childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren; - childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren; - childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren; - childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren; - childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren; - childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren; - childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren; - childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren; - childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren; - childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren; - childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren; - childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren; - childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren; - childrenWalkers[1 /* List */] = walkListChildren; - childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren; - childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren; - childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren; - childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren; - childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren; - childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren; - childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren; - childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren; - childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren; - childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren; - childrenWalkers[11 /* IdentifierName */] = null; - childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[0 /* None */] = null; - childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren; - childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; - childrenWalkers[32 /* NullKeyword */] = null; - childrenWalkers[67 /* NumberKeyword */] = null; - childrenWalkers[13 /* NumericLiteral */] = null; - childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren; - childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren; - childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren; - childrenWalkers[223 /* OmittedExpression */] = null; - childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[242 /* Parameter */] = walkParameterChildren; - childrenWalkers[227 /* ParameterList */] = walkParameterListChildren; - childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren; - childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren; - childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren; - childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren; - childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren; - childrenWalkers[12 /* RegularExpressionLiteral */] = null; - childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren; - childrenWalkers[120 /* SourceUnit */] = walkScriptChildren; - childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren; - childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren; - childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren; - childrenWalkers[14 /* StringLiteral */] = null; - childrenWalkers[69 /* StringKeyword */] = null; - childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren; - childrenWalkers[50 /* SuperKeyword */] = null; - childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren; - childrenWalkers[35 /* ThisKeyword */] = null; - childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren; - childrenWalkers[3 /* TriviaList */] = null; - childrenWalkers[37 /* TrueKeyword */] = null; - childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren; - childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren; - childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren; - childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren; - childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren; - childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren; - childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren; - childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; - childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren; - childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren; - childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren; - childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren; - childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren; - childrenWalkers[41 /* VoidKeyword */] = null; - childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren; - childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren; - - for (var e in TypeScript.SyntaxKind) { - if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) { - TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]); - } - } - - var AstWalkOptions = (function () { - function AstWalkOptions() { - this.goChildren = true; - this.stopWalking = false; - } - return AstWalkOptions; - })(); - TypeScript.AstWalkOptions = AstWalkOptions; - - var SimplePreAstWalker = (function () { - function SimplePreAstWalker(pre, state) { - this.pre = pre; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePreAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - }; - return SimplePreAstWalker; - })(); - - var SimplePrePostAstWalker = (function () { - function SimplePrePostAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - SimplePrePostAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - this.pre(ast, this.state); - - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - - this.post(ast, this.state); - }; - return SimplePrePostAstWalker; - })(); - - var NormalAstWalker = (function () { - function NormalAstWalker(pre, post, state) { - this.pre = pre; - this.post = post; - this.state = state; - this.options = new AstWalkOptions(); - } - NormalAstWalker.prototype.walk = function (ast) { - if (!ast) { - return; - } - - if (this.options.stopWalking) { - return; - } - - this.pre(ast, this); - - if (this.options.stopWalking) { - return; - } - - if (this.options.goChildren) { - var walker = childrenWalkers[ast.kind()]; - if (walker) { - walker(ast, this); - } - } else { - this.options.goChildren = true; - } - - if (this.post) { - this.post(ast, this); - } - }; - return NormalAstWalker; - })(); - - var AstWalkerFactory = (function () { - function AstWalkerFactory() { - } - AstWalkerFactory.prototype.walk = function (ast, pre, post, state) { - new NormalAstWalker(pre, post, state).walk(ast); - }; - - AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) { - if (post) { - new SimplePrePostAstWalker(pre, post, state).walk(ast); - } else { - new SimplePreAstWalker(pre, state).walk(ast); - } - }; - return AstWalkerFactory; - })(); - TypeScript.AstWalkerFactory = AstWalkerFactory; - - var globalAstWalkerFactory = new AstWalkerFactory(); - - function getAstWalkerFactory() { - return globalAstWalkerFactory; - } - TypeScript.getAstWalkerFactory = getAstWalkerFactory; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Base64Format = (function () { - function Base64Format() { - } - Base64Format.encode = function (inValue) { - if (inValue < 64) { - return Base64Format.encodedValues.charAt(inValue); - } - throw TypeError(inValue + ": not a 64 based value"); - }; - - Base64Format.decodeChar = function (inChar) { - if (inChar.length === 1) { - return Base64Format.encodedValues.indexOf(inChar); - } else { - throw TypeError('"' + inChar + '" must have length 1'); - } - }; - Base64Format.encodedValues = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - return Base64Format; - })(); - - var Base64VLQFormat = (function () { - function Base64VLQFormat() { - } - Base64VLQFormat.encode = function (inValue) { - if (inValue < 0) { - inValue = ((-inValue) << 1) + 1; - } else { - inValue = inValue << 1; - } - - var encodedStr = ""; - do { - var currentDigit = inValue & 31; - inValue = inValue >> 5; - if (inValue > 0) { - currentDigit = currentDigit | 32; - } - encodedStr = encodedStr + Base64Format.encode(currentDigit); - } while(inValue > 0); - - return encodedStr; - }; - - Base64VLQFormat.decode = function (inString) { - var result = 0; - var negative = false; - - var shift = 0; - for (var i = 0; i < inString.length; i++) { - var byte = Base64Format.decodeChar(inString[i]); - if (i === 0) { - if ((byte & 1) === 1) { - negative = true; - } - result = (byte >> 1) & 15; - } else { - result = result | ((byte & 31) << shift); - } - - shift += (i === 0) ? 4 : 5; - - if ((byte & 32) === 32) { - } else { - return { value: negative ? -(result) : result, rest: inString.substr(i + 1) }; - } - } - - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Base64_value_0_finished_with_a_continuation_bit, [inString])); - }; - return Base64VLQFormat; - })(); - TypeScript.Base64VLQFormat = Base64VLQFormat; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var SourceMapPosition = (function () { - function SourceMapPosition() { - } - return SourceMapPosition; - })(); - TypeScript.SourceMapPosition = SourceMapPosition; - - var SourceMapping = (function () { - function SourceMapping() { - this.start = new SourceMapPosition(); - this.end = new SourceMapPosition(); - this.nameIndex = -1; - this.childMappings = []; - } - return SourceMapping; - })(); - TypeScript.SourceMapping = SourceMapping; - - var SourceMapEntry = (function () { - function SourceMapEntry(emittedFile, emittedLine, emittedColumn, sourceFile, sourceLine, sourceColumn, sourceName) { - this.emittedFile = emittedFile; - this.emittedLine = emittedLine; - this.emittedColumn = emittedColumn; - this.sourceFile = sourceFile; - this.sourceLine = sourceLine; - this.sourceColumn = sourceColumn; - this.sourceName = sourceName; - TypeScript.Debug.assert(isFinite(emittedLine)); - TypeScript.Debug.assert(isFinite(emittedColumn)); - TypeScript.Debug.assert(isFinite(sourceColumn)); - TypeScript.Debug.assert(isFinite(sourceLine)); - } - return SourceMapEntry; - })(); - TypeScript.SourceMapEntry = SourceMapEntry; - - var SourceMapper = (function () { - function SourceMapper(jsFile, sourceMapOut, document, jsFilePath, emitOptions, resolvePath) { - this.jsFile = jsFile; - this.sourceMapOut = sourceMapOut; - this.names = []; - this.mappingLevel = []; - this.tsFilePaths = []; - this.allSourceMappings = []; - this.sourceMapEntries = []; - this.setSourceMapOptions(document, jsFilePath, emitOptions, resolvePath); - this.setNewSourceFile(document, emitOptions); - } - SourceMapper.prototype.getOutputFile = function () { - var result = this.sourceMapOut.getOutputFile(); - result.sourceMapEntries = this.sourceMapEntries; - - return result; - }; - - SourceMapper.prototype.increaseMappingLevel = function (ast) { - this.mappingLevel.push(ast); - }; - - SourceMapper.prototype.decreaseMappingLevel = function (ast) { - TypeScript.Debug.assert(this.mappingLevel.length > 0, "Mapping level should never be less than 0. This suggests a missing start call."); - var expectedAst = this.mappingLevel.pop(); - var expectedAstInfo = expectedAst.kind ? TypeScript.SyntaxKind[expectedAst.kind()] : [expectedAst.start(), expectedAst.end()]; - var astInfo = ast.kind ? TypeScript.SyntaxKind[ast.kind()] : [ast.start(), ast.end()]; - TypeScript.Debug.assert(ast === expectedAst, "Provided ast is not the expected AST, Expected: " + expectedAstInfo + " Given: " + astInfo); - }; - - SourceMapper.prototype.setNewSourceFile = function (document, emitOptions) { - var sourceMappings = []; - this.allSourceMappings.push(sourceMappings); - this.currentMappings = [sourceMappings]; - this.currentNameIndex = []; - - this.setNewSourceFilePath(document, emitOptions); - }; - - SourceMapper.prototype.setSourceMapOptions = function (document, jsFilePath, emitOptions, resolvePath) { - var prettyJsFileName = TypeScript.getPrettyName(jsFilePath, false, true); - var prettyMapFileName = prettyJsFileName + SourceMapper.MapFileExtension; - this.jsFileName = prettyJsFileName; - - if (emitOptions.sourceMapRootDirectory()) { - this.sourceMapDirectory = emitOptions.sourceMapRootDirectory(); - if (document.emitToOwnOutputFile()) { - this.sourceMapDirectory = this.sourceMapDirectory + TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath((document.fileName)).replace(emitOptions.commonDirectoryPath(), "")); - } - - if (TypeScript.isRelative(this.sourceMapDirectory)) { - this.sourceMapDirectory = emitOptions.commonDirectoryPath() + this.sourceMapDirectory; - this.sourceMapDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(this.sourceMapDirectory))); - this.sourceMapPath = TypeScript.getRelativePathToFixedPath(TypeScript.getRootFilePath(jsFilePath), this.sourceMapDirectory + prettyMapFileName); - } else { - this.sourceMapPath = this.sourceMapDirectory + prettyMapFileName; - } - } else { - this.sourceMapPath = prettyMapFileName; - this.sourceMapDirectory = TypeScript.getRootFilePath(jsFilePath); - } - this.sourceRoot = emitOptions.sourceRootDirectory(); - }; - - SourceMapper.prototype.setNewSourceFilePath = function (document, emitOptions) { - var tsFilePath = TypeScript.switchToForwardSlashes(document.fileName); - if (emitOptions.sourceRootDirectory()) { - tsFilePath = TypeScript.getRelativePathToFixedPath(emitOptions.commonDirectoryPath(), tsFilePath); - } else { - tsFilePath = TypeScript.getRelativePathToFixedPath(this.sourceMapDirectory, tsFilePath); - } - this.tsFilePaths.push(tsFilePath); - }; - - SourceMapper.prototype.emitSourceMapping = function () { - var _this = this; - TypeScript.Debug.assert(this.mappingLevel.length === 0, "Mapping level is not 0. This suggest a missing end call. Value: " + this.mappingLevel.map(function (item) { - return ['Node of type', TypeScript.SyntaxKind[item.kind()], 'at', item.start(), 'to', item.end()].join(' '); - }).join(', ')); - - this.jsFile.WriteLine("//# sourceMappingURL=" + this.sourceMapPath); - - var mappingsString = ""; - - var prevEmittedColumn = 0; - var prevEmittedLine = 0; - var prevSourceColumn = 0; - var prevSourceLine = 0; - var prevSourceIndex = 0; - var prevNameIndex = 0; - var emitComma = false; - - var recordedPosition = null; - for (var sourceIndex = 0; sourceIndex < this.tsFilePaths.length; sourceIndex++) { - var recordSourceMapping = function (mappedPosition, nameIndex) { - if (recordedPosition !== null && recordedPosition.emittedColumn === mappedPosition.emittedColumn && recordedPosition.emittedLine === mappedPosition.emittedLine) { - return; - } - - if (prevEmittedLine !== mappedPosition.emittedLine) { - while (prevEmittedLine < mappedPosition.emittedLine) { - prevEmittedColumn = 0; - mappingsString = mappingsString + ";"; - prevEmittedLine++; - } - emitComma = false; - } else if (emitComma) { - mappingsString = mappingsString + ","; - } - - _this.sourceMapEntries.push(new SourceMapEntry(_this.jsFileName, mappedPosition.emittedLine + 1, mappedPosition.emittedColumn + 1, _this.tsFilePaths[sourceIndex], mappedPosition.sourceLine, mappedPosition.sourceColumn + 1, nameIndex >= 0 ? _this.names[nameIndex] : undefined)); - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.emittedColumn - prevEmittedColumn); - prevEmittedColumn = mappedPosition.emittedColumn; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(sourceIndex - prevSourceIndex); - prevSourceIndex = sourceIndex; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceLine - 1 - prevSourceLine); - prevSourceLine = mappedPosition.sourceLine - 1; - - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceColumn - prevSourceColumn); - prevSourceColumn = mappedPosition.sourceColumn; - - if (nameIndex >= 0) { - mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(nameIndex - prevNameIndex); - prevNameIndex = nameIndex; - } - - emitComma = true; - recordedPosition = mappedPosition; - }; - - var recordSourceMappingSiblings = function (sourceMappings) { - for (var i = 0; i < sourceMappings.length; i++) { - var sourceMapping = sourceMappings[i]; - recordSourceMapping(sourceMapping.start, sourceMapping.nameIndex); - recordSourceMappingSiblings(sourceMapping.childMappings); - recordSourceMapping(sourceMapping.end, sourceMapping.nameIndex); - } - }; - - recordSourceMappingSiblings(this.allSourceMappings[sourceIndex]); - } - - this.sourceMapOut.Write(JSON.stringify({ - version: 3, - file: this.jsFileName, - sourceRoot: this.sourceRoot, - sources: this.tsFilePaths, - names: this.names, - mappings: mappingsString - })); - - this.sourceMapOut.Close(); - }; - SourceMapper.MapFileExtension = ".map"; - return SourceMapper; - })(); - TypeScript.SourceMapper = SourceMapper; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (EmitContainer) { - EmitContainer[EmitContainer["Prog"] = 0] = "Prog"; - EmitContainer[EmitContainer["Module"] = 1] = "Module"; - EmitContainer[EmitContainer["DynamicModule"] = 2] = "DynamicModule"; - EmitContainer[EmitContainer["Class"] = 3] = "Class"; - EmitContainer[EmitContainer["Constructor"] = 4] = "Constructor"; - EmitContainer[EmitContainer["Function"] = 5] = "Function"; - EmitContainer[EmitContainer["Args"] = 6] = "Args"; - EmitContainer[EmitContainer["Interface"] = 7] = "Interface"; - })(TypeScript.EmitContainer || (TypeScript.EmitContainer = {})); - var EmitContainer = TypeScript.EmitContainer; - - var EmitState = (function () { - function EmitState() { - this.column = 0; - this.line = 0; - this.container = 0 /* Prog */; - } - return EmitState; - })(); - TypeScript.EmitState = EmitState; - - var EmitOptions = (function () { - function EmitOptions(compiler, resolvePath) { - this.resolvePath = resolvePath; - this._diagnostic = null; - this._settings = null; - this._commonDirectoryPath = ""; - this._sharedOutputFile = ""; - this._sourceRootDirectory = ""; - this._sourceMapRootDirectory = ""; - this._outputDirectory = ""; - var settings = compiler.compilationSettings(); - this._settings = settings; - - if (settings.moduleGenTarget() === 0 /* Unspecified */) { - var fileNames = compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = compiler.getDocument(fileNames[i]); - if (!document.isDeclareFile() && document.isExternalModule()) { - var errorSpan = document.externalModuleIndicatorSpan(); - this._diagnostic = new TypeScript.Diagnostic(document.fileName, document.lineMap(), errorSpan.start(), errorSpan.length(), TypeScript.DiagnosticCode.Cannot_compile_external_modules_unless_the_module_flag_is_provided); - - return; - } - } - } - - if (!settings.mapSourceFiles()) { - if (settings.mapRoot()) { - if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } else { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } else if (settings.sourceRoot()) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option, null); - return; - } - } - - this._sourceMapRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.mapRoot())); - this._sourceRootDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(settings.sourceRoot())); - - if (settings.outFileOption() || settings.outDirOption() || settings.mapRoot() || settings.sourceRoot()) { - if (settings.outFileOption()) { - this._sharedOutputFile = TypeScript.switchToForwardSlashes(resolvePath(settings.outFileOption())); - } - - if (settings.outDirOption()) { - this._outputDirectory = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(resolvePath(settings.outDirOption()))); - } - - if (this._outputDirectory || this._sourceMapRootDirectory || this.sourceRootDirectory) { - this.determineCommonDirectoryPath(compiler); - } - } - } - EmitOptions.prototype.diagnostic = function () { - return this._diagnostic; - }; - - EmitOptions.prototype.commonDirectoryPath = function () { - return this._commonDirectoryPath; - }; - EmitOptions.prototype.sharedOutputFile = function () { - return this._sharedOutputFile; - }; - EmitOptions.prototype.sourceRootDirectory = function () { - return this._sourceRootDirectory; - }; - EmitOptions.prototype.sourceMapRootDirectory = function () { - return this._sourceMapRootDirectory; - }; - EmitOptions.prototype.outputDirectory = function () { - return this._outputDirectory; - }; - - EmitOptions.prototype.compilationSettings = function () { - return this._settings; - }; - - EmitOptions.prototype.determineCommonDirectoryPath = function (compiler) { - var commonComponents = []; - var commonComponentsLength = -1; - - var fileNames = compiler.fileNames(); - for (var i = 0, len = fileNames.length; i < len; i++) { - var fileName = fileNames[i]; - var document = compiler.getDocument(fileNames[i]); - var sourceUnit = document.sourceUnit(); - - if (!document.isDeclareFile()) { - var fileComponents = TypeScript.filePathComponents(fileName); - if (commonComponentsLength === -1) { - commonComponents = fileComponents; - commonComponentsLength = commonComponents.length; - } else { - var updatedPath = false; - for (var j = 0; j < commonComponentsLength && j < fileComponents.length; j++) { - if (commonComponents[j] !== fileComponents[j]) { - commonComponentsLength = j; - updatedPath = true; - - if (j === 0) { - var isDynamicModuleCompilation = TypeScript.ArrayUtilities.any(fileNames, function (fileName) { - document = compiler.getDocument(fileName); - return !document.isDeclareFile() && document.isExternalModule(); - }); - - if (this._outputDirectory || this._sourceRootDirectory || (this._sourceMapRootDirectory && (!this._sharedOutputFile || isDynamicModuleCompilation))) { - this._diagnostic = new TypeScript.Diagnostic(null, null, 0, 0, TypeScript.DiagnosticCode.Cannot_find_the_common_subdirectory_path_for_the_input_files, null); - return; - } - - return; - } - - break; - } - } - - if (!updatedPath && fileComponents.length < commonComponentsLength) { - commonComponentsLength = fileComponents.length; - } - } - } - } - - this._commonDirectoryPath = commonComponents.slice(0, commonComponentsLength).join("/") + "/"; - }; - return EmitOptions; - })(); - TypeScript.EmitOptions = EmitOptions; - - var Indenter = (function () { - function Indenter() { - this.indentAmt = 0; - } - Indenter.prototype.increaseIndent = function () { - this.indentAmt += Indenter.indentStep; - }; - - Indenter.prototype.decreaseIndent = function () { - this.indentAmt -= Indenter.indentStep; - }; - - Indenter.prototype.getIndent = function () { - var indentString = Indenter.indentStrings[this.indentAmt]; - if (indentString === undefined) { - indentString = ""; - for (var i = 0; i < this.indentAmt; i = i + Indenter.indentStep) { - indentString += Indenter.indentStepString; - } - Indenter.indentStrings[this.indentAmt] = indentString; - } - return indentString; - }; - Indenter.indentStep = 4; - Indenter.indentStepString = " "; - Indenter.indentStrings = []; - return Indenter; - })(); - TypeScript.Indenter = Indenter; - - function lastParameterIsRest(parameterList) { - var parameters = parameterList.parameters; - return parameters.nonSeparatorCount() > 0 && parameters.nonSeparatorAt(parameters.nonSeparatorCount() - 1).dotDotDotToken !== null; - } - TypeScript.lastParameterIsRest = lastParameterIsRest; - - var Emitter = (function () { - function Emitter(emittingFileName, outfile, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.outfile = outfile; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.globalThisCapturePrologueEmitted = false; - this.extendsPrologueEmitted = false; - this.thisClassNode = null; - this.inArrowFunction = false; - this.moduleName = ""; - this.emitState = new EmitState(); - this.indenter = new Indenter(); - this.sourceMapper = null; - this.captureThisStmtString = "var _this = this;"; - this.declStack = []; - this.exportAssignment = null; - this.inWithBlock = false; - this.document = null; - this.detachedCommentsElement = null; - } - Emitter.prototype.pushDecl = function (decl) { - if (decl) { - this.declStack[this.declStack.length] = decl; - } - }; - - Emitter.prototype.popDecl = function (decl) { - if (decl) { - this.declStack.length--; - } - }; - - Emitter.prototype.getEnclosingDecl = function () { - var declStackLen = this.declStack.length; - var enclosingDecl = declStackLen > 0 ? this.declStack[declStackLen - 1] : null; - return enclosingDecl; - }; - - Emitter.prototype.setExportAssignment = function (exportAssignment) { - this.exportAssignment = exportAssignment; - }; - - Emitter.prototype.getExportAssignment = function () { - return this.exportAssignment; - }; - - Emitter.prototype.setDocument = function (document) { - this.document = document; - }; - - Emitter.prototype.shouldEmitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - if (isExternalModuleReference && !isExported && isAmdCodeGen) { - return false; - } - - var importSymbol = importDecl.getSymbol(); - if (importSymbol.isUsedAsValue()) { - return true; - } - - if (importDeclAST.moduleReference.kind() !== 245 /* ExternalModuleReference */) { - var canBeUsedExternally = isExported || importSymbol.typeUsedExternally() || importSymbol.isUsedInExportedAlias(); - if (!canBeUsedExternally && !this.document.isExternalModule()) { - canBeUsedExternally = TypeScript.hasFlag(importDecl.getParentDecl().kind, 1 /* Script */ | 32 /* DynamicModule */); - } - - if (canBeUsedExternally) { - if (importSymbol.getExportAssignedValueSymbol()) { - return true; - } - - var containerSymbol = importSymbol.getExportAssignedContainerSymbol(); - if (containerSymbol && containerSymbol.getInstanceSymbol()) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitImportDeclaration = function (importDeclAST) { - var isExternalModuleReference = importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */; - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var isExported = TypeScript.hasFlag(importDecl.flags, 1 /* Exported */); - var isAmdCodeGen = this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */; - - this.emitComments(importDeclAST, true); - - var importSymbol = importDecl.getSymbol(); - - var parentSymbol = importSymbol.getContainer(); - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - var associatedParentSymbol = parentSymbol ? parentSymbol.getAssociatedContainerType() : null; - var associatedParentSymbolKind = associatedParentSymbol ? associatedParentSymbol.kind : 0 /* None */; - - var needsPropertyAssignment = false; - var usePropertyAssignmentInsteadOfVarDecl = false; - var moduleNamePrefix; - - if (isExported && (parentKind === 4 /* Container */ || parentKind === 32 /* DynamicModule */ || associatedParentSymbolKind === 4 /* Container */ || associatedParentSymbolKind === 32 /* DynamicModule */)) { - if (importSymbol.getExportAssignedTypeSymbol() || importSymbol.getExportAssignedContainerSymbol()) { - needsPropertyAssignment = true; - } else { - var valueSymbol = importSymbol.getExportAssignedValueSymbol(); - if (valueSymbol && (valueSymbol.kind === 65536 /* Method */ || valueSymbol.kind === 16384 /* Function */)) { - needsPropertyAssignment = true; - } else { - usePropertyAssignmentInsteadOfVarDecl = true; - } - } - - if (this.emitState.container === 2 /* DynamicModule */) { - moduleNamePrefix = "exports."; - } else { - moduleNamePrefix = this.moduleName + "."; - } - } - - if (isAmdCodeGen && isExternalModuleReference) { - needsPropertyAssignment = true; - } else { - this.recordSourceMappingStart(importDeclAST); - if (usePropertyAssignmentInsteadOfVarDecl) { - this.writeToOutput(moduleNamePrefix); - } else { - this.writeToOutput("var "); - } - this.writeToOutput(importDeclAST.identifier.text() + " = "); - var aliasAST = importDeclAST.moduleReference; - - if (isExternalModuleReference) { - this.writeToOutput("require(" + aliasAST.stringLiteral.text() + ")"); - } else { - this.emitJavascript(aliasAST.moduleName, false); - } - - this.recordSourceMappingEnd(importDeclAST); - this.writeToOutput(";"); - - if (needsPropertyAssignment) { - this.writeLineToOutput(""); - this.emitIndent(); - } - } - - if (needsPropertyAssignment) { - this.writeToOutputWithSourceMapRecord(moduleNamePrefix + importDeclAST.identifier.text() + " = " + importDeclAST.identifier.text(), importDeclAST); - this.writeToOutput(";"); - } - this.emitComments(importDeclAST, false); - }; - - Emitter.prototype.createSourceMapper = function (document, jsFileName, jsFile, sourceMapOut, resolvePath) { - this.sourceMapper = new TypeScript.SourceMapper(jsFile, sourceMapOut, document, jsFileName, this.emitOptions, resolvePath); - }; - - Emitter.prototype.setSourceMapperNewSourceFile = function (document) { - this.sourceMapper.setNewSourceFile(document, this.emitOptions); - }; - - Emitter.prototype.updateLineAndColumn = function (s) { - var lineNumbers = TypeScript.TextUtilities.parseLineStarts(s); - if (lineNumbers.length > 1) { - this.emitState.line += lineNumbers.length - 1; - this.emitState.column = s.length - lineNumbers[lineNumbers.length - 1]; - } else { - this.emitState.column += s.length; - } - }; - - Emitter.prototype.writeToOutputWithSourceMapRecord = function (s, astSpan) { - this.recordSourceMappingStart(astSpan); - this.writeToOutput(s); - this.recordSourceMappingEnd(astSpan); - }; - - Emitter.prototype.writeToOutput = function (s) { - this.outfile.Write(s); - this.updateLineAndColumn(s); - }; - - Emitter.prototype.writeLineToOutput = function (s, force) { - if (typeof force === "undefined") { force = false; } - if (!force && s === "" && this.emitState.column === 0) { - return; - } - - this.outfile.WriteLine(s); - this.updateLineAndColumn(s); - this.emitState.column = 0; - this.emitState.line++; - }; - - Emitter.prototype.writeCaptureThisStatement = function (ast) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord(this.captureThisStmtString, ast); - this.writeLineToOutput(""); - }; - - Emitter.prototype.setContainer = function (c) { - var temp = this.emitState.container; - this.emitState.container = c; - return temp; - }; - - Emitter.prototype.getIndentString = function () { - return this.indenter.getIndent(); - }; - - Emitter.prototype.emitIndent = function () { - this.writeToOutput(this.getIndentString()); - }; - - Emitter.prototype.emitComment = function (comment, trailing, first) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var text = getTrimmedTextLines(comment); - var emitColumn = this.emitState.column; - - if (emitColumn === 0) { - this.emitIndent(); - } else if (trailing && first) { - this.writeToOutput(" "); - } - - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - - if (text.length > 1 || comment.endsLine) { - for (var i = 1; i < text.length; i++) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput(text[i]); - } - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingEnd(comment); - this.writeToOutput(" "); - return; - } - } else { - this.recordSourceMappingStart(comment); - this.writeToOutput(text[0]); - this.recordSourceMappingEnd(comment); - this.writeLineToOutput(""); - } - - if (!trailing && emitColumn !== 0) { - this.emitIndent(); - } - }; - - Emitter.prototype.emitComments = function (ast, pre, onlyPinnedOrTripleSlashComments) { - var _this = this; - if (typeof onlyPinnedOrTripleSlashComments === "undefined") { onlyPinnedOrTripleSlashComments = false; } - if (ast && ast.kind() !== 146 /* Block */) { - if (ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ || ast.parent.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - return; - } - } - - if (pre) { - var preComments = ast.preComments(); - - if (preComments && ast === this.detachedCommentsElement) { - var detachedComments = this.getDetachedComments(ast); - preComments = preComments.slice(detachedComments.length); - this.detachedCommentsElement = null; - } - - if (preComments && onlyPinnedOrTripleSlashComments) { - preComments = TypeScript.ArrayUtilities.where(preComments, function (c) { - return _this.isPinnedOrTripleSlash(c); - }); - } - - this.emitCommentsArray(preComments, false); - } else { - this.emitCommentsArray(ast.postComments(), true); - } - }; - - Emitter.prototype.isPinnedOrTripleSlash = function (comment) { - var fullText = comment.fullText(); - if (fullText.match(TypeScript.tripleSlashReferenceRegExp)) { - return true; - } else { - return fullText.indexOf("/*!") === 0; - } - }; - - Emitter.prototype.emitCommentsArray = function (comments, trailing) { - if (!this.emitOptions.compilationSettings().removeComments() && comments) { - for (var i = 0, n = comments.length; i < n; i++) { - this.emitComment(comments[i], trailing, i === 0); - } - } - }; - - Emitter.prototype.emitObjectLiteralExpression = function (objectLiteral) { - this.recordSourceMappingStart(objectLiteral); - - this.writeToOutput("{"); - this.emitCommaSeparatedList(objectLiteral, objectLiteral.propertyAssignments, " ", true); - this.writeToOutput("}"); - - this.recordSourceMappingEnd(objectLiteral); - }; - - Emitter.prototype.emitArrayLiteralExpression = function (arrayLiteral) { - this.recordSourceMappingStart(arrayLiteral); - - this.writeToOutput("["); - this.emitCommaSeparatedList(arrayLiteral, arrayLiteral.expressions, "", true); - this.writeToOutput("]"); - - this.recordSourceMappingEnd(arrayLiteral); - }; - - Emitter.prototype.emitObjectCreationExpression = function (objectCreationExpression) { - this.recordSourceMappingStart(objectCreationExpression); - this.writeToOutput("new "); - var target = objectCreationExpression.expression; - - this.emit(target); - if (objectCreationExpression.argumentList) { - this.recordSourceMappingStart(objectCreationExpression.argumentList); - this.writeToOutput("("); - this.emitCommaSeparatedList(objectCreationExpression.argumentList, objectCreationExpression.argumentList.arguments, "", false); - this.writeToOutputWithSourceMapRecord(")", objectCreationExpression.argumentList.closeParenToken); - this.recordSourceMappingEnd(objectCreationExpression.argumentList); - } - - this.recordSourceMappingEnd(objectCreationExpression); - }; - - Emitter.prototype.getConstantDecl = function (dotExpr) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(dotExpr); - if (pullSymbol && pullSymbol.kind === 67108864 /* EnumMember */) { - var pullDecls = pullSymbol.getDeclarations(); - if (pullDecls.length === 1) { - var pullDecl = pullDecls[0]; - if (pullDecl.kind === 67108864 /* EnumMember */) { - return pullDecl; - } - } - } - - return null; - }; - - Emitter.prototype.tryEmitConstant = function (dotExpr) { - var propertyName = dotExpr.name; - var boundDecl = this.getConstantDecl(dotExpr); - if (boundDecl) { - var value = boundDecl.constantValue; - if (value !== null) { - this.recordSourceMappingStart(dotExpr); - this.writeToOutput(value.toString()); - var comment = " /* "; - comment += propertyName.text(); - comment += " */"; - this.writeToOutput(comment); - this.recordSourceMappingEnd(dotExpr); - return true; - } - } - - return false; - }; - - Emitter.prototype.emitInvocationExpression = function (callNode) { - this.recordSourceMappingStart(callNode); - var target = callNode.expression; - var args = callNode.argumentList.arguments; - - if (target.kind() === 212 /* MemberAccessExpression */ && target.expression.kind() === 50 /* SuperKeyword */) { - this.emit(target); - this.writeToOutput(".call"); - this.recordSourceMappingStart(args); - this.writeToOutput("("); - this.emitThis(); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - } else { - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("_super.call"); - } else { - this.emitJavascript(target, false); - } - this.recordSourceMappingStart(args); - this.writeToOutput("("); - if (callNode.expression.kind() === 50 /* SuperKeyword */ && this.emitState.container === 4 /* Constructor */) { - this.writeToOutput("this"); - if (args && args.nonSeparatorCount() > 0) { - this.writeToOutput(", "); - } - } - this.emitCommaSeparatedList(callNode.argumentList, args, "", false); - } - - this.writeToOutputWithSourceMapRecord(")", callNode.argumentList.closeParenToken); - this.recordSourceMappingEnd(args); - this.recordSourceMappingEnd(callNode); - }; - - Emitter.prototype.emitParameterList = function (list) { - this.writeToOutput("("); - this.emitCommentsArray(list.openParenTrailingComments, true); - this.emitFunctionParameters(TypeScript.ASTHelpers.parametersFromParameterList(list)); - this.writeToOutput(")"); - }; - - Emitter.prototype.emitFunctionParameters = function (parameters) { - var argsLen = 0; - - if (parameters) { - this.emitComments(parameters.ast, true); - - var tempContainer = this.setContainer(6 /* Args */); - argsLen = parameters.length; - var printLen = argsLen; - if (parameters.lastParameterIsRest()) { - printLen--; - } - for (var i = 0; i < printLen; i++) { - var arg = parameters.astAt(i); - this.emit(arg); - - if (i < (printLen - 1)) { - this.writeToOutput(", "); - } - } - this.setContainer(tempContainer); - - this.emitComments(parameters.ast, false); - } - }; - - Emitter.prototype.emitFunctionBodyStatements = function (name, funcDecl, parameterList, block, bodyExpression) { - this.writeLineToOutput(" {"); - if (name) { - this.recordSourceMappingNameStart(name); - } - - this.indenter.increaseIndent(); - - if (block) { - this.emitDetachedComments(block.statements); - } - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - if (parameterList) { - this.emitDefaultValueAssignments(parameterList); - this.emitRestParameterInitializer(parameterList); - } - - if (block) { - this.emitList(block.statements); - this.emitCommentsArray(block.closeBraceLeadingComments, false); - } else { - this.emitIndent(); - this.emitCommentsArray(bodyExpression.preComments(), false); - this.writeToOutput("return "); - this.emit(bodyExpression); - this.writeLineToOutput(";"); - this.emitCommentsArray(bodyExpression.postComments(), true); - } - - this.indenter.decreaseIndent(); - this.emitIndent(); - - if (block) { - this.writeToOutputWithSourceMapRecord("}", block.closeBraceToken); - } else { - this.writeToOutputWithSourceMapRecord("}", bodyExpression); - } - - if (name) { - this.recordSourceMappingNameEnd(); - } - }; - - Emitter.prototype.emitDefaultValueAssignments = function (parameters) { - var n = parameters.length; - if (parameters.lastParameterIsRest()) { - n--; - } - - for (var i = 0; i < n; i++) { - var arg = parameters.astAt(i); - var id = parameters.identifierAt(i); - var equalsValueClause = parameters.initializerAt(i); - if (equalsValueClause) { - this.emitIndent(); - this.recordSourceMappingStart(arg); - this.writeToOutput("if (typeof " + id.text() + " === \"undefined\") { "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.emitJavascript(equalsValueClause, false); - this.writeLineToOutput("; }"); - this.recordSourceMappingEnd(arg); - } - } - }; - - Emitter.prototype.emitRestParameterInitializer = function (parameters) { - if (parameters.lastParameterIsRest()) { - var n = parameters.length; - var lastArg = parameters.astAt(n - 1); - var id = parameters.identifierAt(n - 1); - this.emitIndent(); - this.recordSourceMappingStart(lastArg); - this.writeToOutput("var "); - this.writeToOutputWithSourceMapRecord(id.text(), id); - this.writeLineToOutput(" = [];"); - this.recordSourceMappingEnd(lastArg); - this.emitIndent(); - this.writeToOutput("for ("); - this.writeToOutputWithSourceMapRecord("var _i = 0;", lastArg); - this.writeToOutput(" "); - this.writeToOutputWithSourceMapRecord("_i < (arguments.length - " + (n - 1) + ")", lastArg); - this.writeToOutput("; "); - this.writeToOutputWithSourceMapRecord("_i++", lastArg); - this.writeLineToOutput(") {"); - this.indenter.increaseIndent(); - this.emitIndent(); - - this.writeToOutputWithSourceMapRecord(id.text() + "[_i] = arguments[_i + " + (n - 1) + "];", lastArg); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("}"); - } - }; - - Emitter.prototype.getImportDecls = function (fileName) { - var topLevelDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - var result = []; - - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - var queue = dynamicModuleDecl.getChildDecls(); - - for (var i = 0, n = queue.length; i < n; i++) { - var decl = queue[i]; - - if (decl.kind & 128 /* TypeAlias */) { - var importStatementAST = this.semanticInfoChain.getASTForDecl(decl); - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var symbol = decl.getSymbol(); - var typeSymbol = symbol && symbol.type; - if (typeSymbol && typeSymbol !== this.semanticInfoChain.anyTypeSymbol && !typeSymbol.isError()) { - result.push(decl); - } - } - } - } - - return result; - }; - - Emitter.prototype.getModuleImportAndDependencyList = function (sourceUnit) { - var importList = ""; - var dependencyList = ""; - - var importDecls = this.getImportDecls(this.document.fileName); - - if (importDecls.length) { - for (var i = 0; i < importDecls.length; i++) { - var importStatementDecl = importDecls[i]; - var importStatementSymbol = importStatementDecl.getSymbol(); - var importStatementAST = this.semanticInfoChain.getASTForDecl(importStatementDecl); - - if (importStatementSymbol.isUsedAsValue()) { - if (i <= importDecls.length - 1) { - dependencyList += ", "; - importList += ", "; - } - - importList += importStatementDecl.name; - dependencyList += importStatementAST.moduleReference.stringLiteral.text(); - } - } - } - - var amdDependencies = this.document.amdDependencies(); - for (var i = 0; i < amdDependencies.length; i++) { - dependencyList += ", \"" + amdDependencies[i] + "\""; - } - - return { - importList: importList, - dependencyList: dependencyList - }; - }; - - Emitter.prototype.shouldCaptureThis = function (ast) { - if (ast.kind() === 120 /* SourceUnit */) { - var scriptDecl = this.semanticInfoChain.topLevelDecl(this.document.fileName); - return TypeScript.hasFlag(scriptDecl.flags, 262144 /* MustCaptureThis */); - } - - var decl = this.semanticInfoChain.getDeclForAST(ast); - if (decl) { - return TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */); - } - - return false; - }; - - Emitter.prototype.emitEnum = function (moduleDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - this.moduleName = moduleDecl.identifier.text(); - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleDecl.identifier); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleDecl.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleDecl.identifier); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(this.moduleName); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - this.emitSeparatedList(moduleDecl.enumElements); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.getModuleDeclToVerifyChildNameCollision = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - if (TypeScript.ArrayUtilities.contains(this.declStack, moduleDecl)) { - return moduleDecl; - } else if (changeNameIfAnyDeclarationInContext) { - var symbol = moduleDecl.getSymbol(); - if (symbol) { - var otherDecls = symbol.getDeclarations(); - for (var i = 0; i < otherDecls.length; i++) { - if (TypeScript.ArrayUtilities.contains(this.declStack, otherDecls[i])) { - return otherDecls[i]; - } - } - } - } - - return null; - }; - - Emitter.prototype.hasChildNameCollision = function (moduleName, parentDecl) { - var _this = this; - var childDecls = parentDecl.getChildDecls(); - return TypeScript.ArrayUtilities.any(childDecls, function (childDecl) { - var childAST = _this.semanticInfoChain.getASTForDecl(childDecl); - - if (childDecl.kind != 67108864 /* EnumMember */ && _this.shouldEmit(childAST)) { - if (childDecl.name === moduleName) { - if (parentDecl.kind != 8 /* Class */) { - return true; - } - - if (!(childDecl.kind == 65536 /* Method */ || childDecl.kind == 4096 /* Property */ || childDecl.kind == 524288 /* SetAccessor */ || childDecl.kind == 262144 /* GetAccessor */)) { - return true; - } - } - - if (_this.hasChildNameCollision(moduleName, childDecl)) { - return true; - } - } - return false; - }); - }; - - Emitter.prototype.getModuleName = function (moduleDecl, changeNameIfAnyDeclarationInContext) { - var moduleName = moduleDecl.name; - var moduleDisplayName = moduleDecl.getDisplayName(); - - moduleDecl = this.getModuleDeclToVerifyChildNameCollision(moduleDecl, changeNameIfAnyDeclarationInContext); - if (moduleDecl && moduleDecl.kind != 64 /* Enum */) { - while (this.hasChildNameCollision(moduleName, moduleDecl)) { - moduleName = "_" + moduleName; - moduleDisplayName = "_" + moduleDisplayName; - } - } - - return moduleDisplayName; - }; - - Emitter.prototype.emitModuleDeclarationWorker = function (moduleDecl) { - if (moduleDecl.stringLiteral) { - this.emitSingleModuleDeclaration(moduleDecl, moduleDecl.stringLiteral); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[0]); - } - }; - - Emitter.prototype.emitSingleModuleDeclaration = function (moduleDecl, moduleName) { - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDecl, moduleName); - - if (isLastName) { - this.emitComments(moduleDecl, true); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(moduleName); - this.pushDecl(pullDecl); - - var svModuleName = this.moduleName; - - if (moduleDecl.stringLiteral) { - this.moduleName = moduleDecl.stringLiteral.valueText(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - } else { - this.moduleName = moduleName.text(); - } - - var temp = this.setContainer(1 /* Module */); - var isExported = TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */); - - if (!isExported) { - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("var "); - this.recordSourceMappingStart(moduleName); - this.writeToOutput(this.moduleName); - this.recordSourceMappingEnd(moduleName); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(moduleDecl); - this.emitIndent(); - } - - this.writeToOutput("("); - this.recordSourceMappingStart(moduleDecl); - this.writeToOutput("function ("); - - this.moduleName = this.getModuleName(pullDecl); - this.writeToOutputWithSourceMapRecord(this.moduleName, moduleName); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart(moduleName.text()); - - this.indenter.increaseIndent(); - - if (this.shouldCaptureThis(moduleDecl)) { - this.writeCaptureThisStatement(moduleDecl); - } - - if (moduleName === moduleDecl.stringLiteral) { - this.emitList(moduleDecl.moduleElements); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - var nameIndex = moduleNames.indexOf(moduleName); - TypeScript.Debug.assert(nameIndex >= 0); - - if (isLastName) { - this.emitList(moduleDecl.moduleElements); - } else { - this.emitIndent(); - this.emitSingleModuleDeclaration(moduleDecl, moduleNames[nameIndex + 1]); - this.writeLineToOutput(""); - } - } - - this.moduleName = moduleName.text(); - this.indenter.decreaseIndent(); - this.emitIndent(); - - var parentIsDynamic = temp === 2 /* DynamicModule */; - this.recordSourceMappingStart(moduleDecl.endingToken); - if (temp === 0 /* Prog */ && isExported) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));"); - } else if (isExported || temp === 0 /* Prog */) { - var dotMod = svModuleName !== "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName; - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));"); - } else if (!isExported && temp !== 0 /* Prog */) { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));"); - } else { - this.writeToOutput("}"); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(moduleDecl.endingToken); - this.writeToOutput(")();"); - } - - this.recordSourceMappingEnd(moduleDecl); - if (temp !== 0 /* Prog */ && isExported) { - this.recordSourceMappingStart(moduleDecl); - if (parentIsDynamic) { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";"); - } else { - this.writeLineToOutput(""); - this.emitIndent(); - this.writeToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";"); - } - this.recordSourceMappingEnd(moduleDecl); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - - this.popDecl(pullDecl); - - if (isLastName) { - this.emitComments(moduleDecl, false); - } - }; - - Emitter.prototype.emitEnumElement = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - TypeScript.Debug.assert(pullDecl && pullDecl.kind === 67108864 /* EnumMember */); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - var name = varDecl.propertyName.text(); - var quoted = TypeScript.isQuoted(name); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(this.moduleName); - this.writeToOutput('['); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.writeToOutput(']'); - - if (varDecl.equalsValueClause) { - this.emit(varDecl.equalsValueClause); - } else if (pullDecl.constantValue !== null) { - this.writeToOutput(' = '); - this.writeToOutput(pullDecl.constantValue.toString()); - } else { - this.writeToOutput(' = null'); - } - - this.writeToOutput('] = '); - this.writeToOutput(quoted ? name : '"' + name + '"'); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - this.writeToOutput(';'); - }; - - Emitter.prototype.emitElementAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("["); - this.emit(expression.argumentExpression); - this.writeToOutput("]"); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimpleArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitParenthesizedArrowFunctionExpression = function (arrowFunction) { - this.emitAnyArrowFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), arrowFunction.block, arrowFunction.expression); - }; - - Emitter.prototype.emitAnyArrowFunctionExpression = function (arrowFunction, funcName, parameters, block, expression) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = true; - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(arrowFunction); - - var pullDecl = this.semanticInfoChain.getDeclForAST(arrowFunction); - this.pushDecl(pullDecl); - - this.emitComments(arrowFunction, true); - - this.recordSourceMappingStart(arrowFunction); - this.writeToOutput("function "); - this.writeToOutput("("); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, arrowFunction, parameters, block, expression); - - this.recordSourceMappingEnd(arrowFunction); - - this.recordSourceMappingEnd(arrowFunction); - - this.emitComments(arrowFunction, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConstructor = function (funcDecl) { - if (!funcDecl.block) { - return; - } - var temp = this.setContainer(4 /* Constructor */); - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - this.writeToOutput(this.thisClassNode.identifier.text()); - this.writeToOutput("("); - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeLineToOutput(") {"); - - this.recordSourceMappingNameStart("constructor"); - this.indenter.increaseIndent(); - - this.emitDefaultValueAssignments(parameters); - this.emitRestParameterInitializer(parameters); - - if (this.shouldCaptureThis(funcDecl)) { - this.writeCaptureThisStatement(funcDecl); - } - - this.emitConstructorStatements(funcDecl); - this.emitCommentsArray(funcDecl.block.closeBraceLeadingComments, false); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", funcDecl.block.closeBraceToken); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - this.setContainer(temp); - }; - - Emitter.prototype.emitGetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("get "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList), accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitSetAccessor = function (accessor) { - this.recordSourceMappingStart(accessor); - this.writeToOutput("set "); - - var temp = this.setContainer(5 /* Function */); - - this.recordSourceMappingStart(accessor); - - var pullDecl = this.semanticInfoChain.getDeclForAST(accessor); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(accessor); - - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(accessor, this.semanticInfoChain); - var container = accessorSymbol.getContainer(); - var containerKind = container.kind; - - this.recordSourceMappingNameStart(accessor.propertyName.text()); - this.writeToOutput(accessor.propertyName.text()); - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(accessor.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, accessor, parameters, accessor.block, null); - - this.recordSourceMappingEnd(accessor); - - this.recordSourceMappingEnd(accessor); - - this.popDecl(pullDecl); - this.setContainer(temp); - this.recordSourceMappingEnd(accessor); - }; - - Emitter.prototype.emitFunctionExpression = function (funcDecl) { - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier ? funcDecl.identifier.text() : null; - - this.recordSourceMappingStart(funcDecl); - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - this.writeToOutput(funcDecl.identifier.text()); - this.recordSourceMappingEnd(funcDecl.identifier); - } - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcName, funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitFunction = function (funcDecl) { - if (funcDecl.block === null) { - return; - } - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - - var funcName = funcDecl.identifier.text(); - - this.recordSourceMappingStart(funcDecl); - - var printName = funcDecl.identifier !== null; - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.emitComments(funcDecl, true); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - if (printName) { - var id = funcDecl.identifier.text(); - if (id) { - if (funcDecl.identifier) { - this.recordSourceMappingStart(funcDecl.identifier); - } - this.writeToOutput(id); - if (funcDecl.identifier) { - this.recordSourceMappingEnd(funcDecl.identifier); - } - } - } - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.identifier.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - - if (funcDecl.block) { - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - if ((this.emitState.container === 1 /* Module */ || this.emitState.container === 2 /* DynamicModule */) && pullFunctionDecl && TypeScript.hasFlag(pullFunctionDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = this.emitState.container === 1 /* Module */ ? this.moduleName : "exports"; - this.recordSourceMappingStart(funcDecl); - this.writeToOutput(modName + "." + funcName + " = " + funcName + ";"); - this.recordSourceMappingEnd(funcDecl); - } - } - }; - - Emitter.prototype.emitAmbientVarDecl = function (varDecl) { - this.recordSourceMappingStart(this.currentVariableDeclaration); - if (varDecl.equalsValueClause) { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - this.emitJavascript(varDecl.equalsValueClause, false); - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - }; - - Emitter.prototype.emitVarDeclVar = function () { - if (this.currentVariableDeclaration) { - this.writeToOutput("var "); - } - }; - - Emitter.prototype.emitVariableDeclaration = function (declaration) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentKind = parentSymbol ? parentSymbol.kind : 0 /* None */; - - this.emitComments(declaration, true); - - var pullVarDecl = this.semanticInfoChain.getDeclForAST(varDecl); - var isAmbientWithoutInit = pullVarDecl && TypeScript.hasFlag(pullVarDecl.flags, 8 /* Ambient */) && varDecl.equalsValueClause === null; - if (!isAmbientWithoutInit) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.currentVariableDeclaration = declaration; - - for (var i = 0, n = declaration.declarators.nonSeparatorCount(); i < n; i++) { - var declarator = declaration.declarators.nonSeparatorAt(i); - - if (i > 0) { - this.writeToOutput(", "); - } - - this.emit(declarator); - } - this.currentVariableDeclaration = prevVariableDeclaration; - - this.recordSourceMappingEnd(declaration); - } - - this.emitComments(declaration, false); - }; - - Emitter.prototype.emitMemberVariableDeclaration = function (varDecl) { - TypeScript.Debug.assert(!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause); - - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - - this.emitComments(varDecl, true); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - var quotedOrNumber = TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */; - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - - if (quotedOrNumber) { - this.writeToOutput("this["); - } else { - this.writeToOutput("this."); - } - - this.writeToOutputWithSourceMapRecord(varDecl.variableDeclarator.propertyName.text(), varDecl.variableDeclarator.propertyName); - - if (quotedOrNumber) { - this.writeToOutput("]"); - } - - if (varDecl.variableDeclarator.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.variableDeclarator.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - if (this.emitState.container !== 6 /* Args */) { - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitVariableDeclarator = function (varDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(varDecl); - this.pushDecl(pullDecl); - if (pullDecl && (pullDecl.flags & 8 /* Ambient */) === 8 /* Ambient */) { - this.emitAmbientVarDecl(varDecl); - } else { - this.emitComments(varDecl, true); - this.recordSourceMappingStart(this.currentVariableDeclaration); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.propertyName.text(); - - var symbol = this.semanticInfoChain.getSymbolForAST(varDecl); - var parentSymbol = symbol ? symbol.getContainer() : null; - var parentDecl = pullDecl && pullDecl.getParentDecl(); - var parentIsModule = parentDecl && (parentDecl.flags & 102400 /* SomeInitializedModule */); - - if (parentIsModule) { - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.emitVarDeclVar(); - } else { - if (this.emitState.container === 2 /* DynamicModule */) { - this.writeToOutput("exports."); - } else { - this.writeToOutput(this.moduleName + "."); - } - } - } else { - this.emitVarDeclVar(); - } - - this.writeToOutputWithSourceMapRecord(varDecl.propertyName.text(), varDecl.propertyName); - - if (varDecl.equalsValueClause) { - var prevVariableDeclaration = this.currentVariableDeclaration; - this.emit(varDecl.equalsValueClause); - this.currentVariableDeclaration = prevVariableDeclaration; - } - - this.recordSourceMappingEnd(varDecl); - this.emitComments(varDecl, false); - } - this.currentVariableDeclaration = undefined; - this.popDecl(pullDecl); - }; - - Emitter.prototype.symbolIsUsedInItsEnclosingContainer = function (symbol, dynamic) { - if (typeof dynamic === "undefined") { dynamic = false; } - var symDecls = symbol.getDeclarations(); - - if (symDecls.length) { - var enclosingDecl = this.getEnclosingDecl(); - if (enclosingDecl) { - var parentDecl = symDecls[0].getParentDecl(); - if (parentDecl) { - var symbolDeclarationEnclosingContainer = parentDecl; - var enclosingContainer = enclosingDecl; - - while (symbolDeclarationEnclosingContainer) { - if (symbolDeclarationEnclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - symbolDeclarationEnclosingContainer = symbolDeclarationEnclosingContainer.getParentDecl(); - } - - if (symbolDeclarationEnclosingContainer) { - while (enclosingContainer) { - if (enclosingContainer.kind === (dynamic ? 32 /* DynamicModule */ : 4 /* Container */)) { - break; - } - - enclosingContainer = enclosingContainer.getParentDecl(); - } - } - - if (symbolDeclarationEnclosingContainer && enclosingContainer) { - var same = symbolDeclarationEnclosingContainer === enclosingContainer; - - if (!same && symbol.anyDeclHasFlag(32768 /* InitializedModule */)) { - same = symbolDeclarationEnclosingContainer === enclosingContainer.getParentDecl(); - } - - return same; - } - } - } - } - - return false; - }; - - Emitter.prototype.shouldQualifySymbolNameWithParentName = function (symbol) { - var enclosingContextDeclPath = this.declStack; - var symbolDeclarations = symbol.getDeclarations(); - for (var i = 0; i < symbolDeclarations.length; i++) { - var currentDecl = symbolDeclarations[i]; - var declParent = currentDecl.getParentDecl(); - - if (currentDecl.kind === 67108864 /* EnumMember */) { - return true; - } - - if (!TypeScript.hasFlag(currentDecl.flags, 1 /* Exported */)) { - return false; - } - - if (currentDecl.kind === 512 /* Variable */ && !TypeScript.hasFlag(currentDecl.flags, 118784 /* ImplicitVariable */)) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(this.declStack, declParent)) { - return false; - } - } - - return true; - }; - - Emitter.prototype.getSymbolForEmit = function (ast) { - var pullSymbol = this.semanticInfoChain.getSymbolForAST(ast); - var pullSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(ast); - if (pullSymbol && pullSymbolAlias) { - var symbolToCompare = TypeScript.isTypesOnlyLocation(ast) ? pullSymbolAlias.getExportAssignedTypeSymbol() : pullSymbolAlias.getExportAssignedValueSymbol(); - - if (pullSymbol === symbolToCompare) { - pullSymbol = pullSymbolAlias; - pullSymbolAlias = null; - } - } - return { symbol: pullSymbol, aliasSymbol: pullSymbolAlias }; - }; - - Emitter.prototype.emitName = function (name, addThis) { - this.emitComments(name, true); - this.recordSourceMappingStart(name); - if (name.text().length > 0) { - var symbolForEmit = this.getSymbolForEmit(name); - var pullSymbol = symbolForEmit.symbol; - if (!pullSymbol) { - pullSymbol = this.semanticInfoChain.anyTypeSymbol; - } - var pullSymbolAlias = symbolForEmit.aliasSymbol; - var pullSymbolKind = pullSymbol.kind; - var isLocalAlias = pullSymbolAlias && (pullSymbolAlias.getDeclarations()[0].getParentDecl() === this.getEnclosingDecl()); - if (addThis && (this.emitState.container !== 6 /* Args */) && pullSymbol) { - var pullSymbolContainer = pullSymbol.getContainer(); - - if (pullSymbolContainer) { - var pullSymbolContainerKind = pullSymbolContainer.kind; - - if (TypeScript.PullHelpers.symbolIsModule(pullSymbolContainer) || pullSymbolContainerKind === 64 /* Enum */ || pullSymbolContainer.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) { - var needToEmitParentName = this.shouldQualifySymbolNameWithParentName(pullSymbol); - if (needToEmitParentName) { - var parentDecl = pullSymbol.getDeclarations()[0].getParentDecl(); - TypeScript.Debug.assert(parentDecl && !parentDecl.isRootDecl()); - this.writeToOutput(this.getModuleName(parentDecl, true) + "."); - } - } else if (pullSymbolContainerKind === 32 /* DynamicModule */ || pullSymbolContainer.anyDeclHasFlag(65536 /* InitializedDynamicModule */)) { - if (pullSymbolKind === 4096 /* Property */) { - this.writeToOutput("exports."); - } else if (pullSymbol.anyDeclHasFlag(1 /* Exported */) && !isLocalAlias && !pullSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */) && pullSymbol.kind !== 32768 /* ConstructorMethod */ && pullSymbol.kind !== 8 /* Class */ && pullSymbol.kind !== 64 /* Enum */) { - this.writeToOutput("exports."); - } - } - } - } - - this.writeToOutput(name.text()); - } - - this.recordSourceMappingEnd(name); - this.emitComments(name, false); - }; - - Emitter.prototype.recordSourceMappingNameStart = function (name) { - if (this.sourceMapper) { - var nameIndex = -1; - if (name) { - if (this.sourceMapper.currentNameIndex.length > 0) { - var parentNameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - if (parentNameIndex !== -1) { - name = this.sourceMapper.names[parentNameIndex] + "." + name; - } - } - - var nameIndex = this.sourceMapper.names.length - 1; - for (nameIndex; nameIndex >= 0; nameIndex--) { - if (this.sourceMapper.names[nameIndex] === name) { - break; - } - } - - if (nameIndex === -1) { - nameIndex = this.sourceMapper.names.length; - this.sourceMapper.names.push(name); - } - } - this.sourceMapper.currentNameIndex.push(nameIndex); - } - }; - - Emitter.prototype.recordSourceMappingNameEnd = function () { - if (this.sourceMapper) { - this.sourceMapper.currentNameIndex.pop(); - } - }; - - Emitter.prototype.recordSourceMappingStart = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - var lineCol = { line: -1, character: -1 }; - var sourceMapping = new TypeScript.SourceMapping(); - sourceMapping.start.emittedColumn = this.emitState.column; - sourceMapping.start.emittedLine = this.emitState.line; - - var lineMap = this.document.lineMap(); - lineMap.fillLineAndCharacterFromPosition(ast.start(), lineCol); - sourceMapping.start.sourceColumn = lineCol.character; - sourceMapping.start.sourceLine = lineCol.line + 1; - lineMap.fillLineAndCharacterFromPosition(ast.end(), lineCol); - sourceMapping.end.sourceColumn = lineCol.character; - sourceMapping.end.sourceLine = lineCol.line + 1; - - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.emittedLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.start.sourceLine)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.sourceLine)); - - if (this.sourceMapper.currentNameIndex.length > 0) { - sourceMapping.nameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1]; - } - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - siblings.push(sourceMapping); - this.sourceMapper.currentMappings.push(sourceMapping.childMappings); - this.sourceMapper.increaseMappingLevel(ast); - } - }; - - Emitter.prototype.recordSourceMappingEnd = function (ast) { - if (this.sourceMapper && TypeScript.ASTHelpers.isValidAstNode(ast)) { - this.sourceMapper.currentMappings.pop(); - - var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1]; - var sourceMapping = siblings[siblings.length - 1]; - - sourceMapping.end.emittedColumn = this.emitState.column; - sourceMapping.end.emittedLine = this.emitState.line; - - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedColumn)); - TypeScript.Debug.assert(!isNaN(sourceMapping.end.emittedLine)); - - this.sourceMapper.decreaseMappingLevel(ast); - } - }; - - Emitter.prototype.getOutputFiles = function () { - var result = []; - if (this.sourceMapper !== null) { - this.sourceMapper.emitSourceMapping(); - result.push(this.sourceMapper.getOutputFile()); - } - - result.push(this.outfile.getOutputFile()); - return result; - }; - - Emitter.prototype.emitParameterPropertyAndMemberVariableAssignments = function () { - var constructorDecl = getLastConstructor(this.thisClassNode); - - if (constructorDecl) { - for (var i = 0, n = constructorDecl.callSignature.parameterList.parameters.nonSeparatorCount(); i < n; i++) { - var parameter = constructorDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - this.emitIndent(); - this.recordSourceMappingStart(parameter); - this.writeToOutputWithSourceMapRecord("this." + parameter.identifier.text(), parameter.identifier); - this.writeToOutput(" = "); - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter.identifier); - this.writeLineToOutput(";"); - this.recordSourceMappingEnd(parameter); - } - } - } - - for (var i = 0, n = this.thisClassNode.classElements.childCount(); i < n; i++) { - if (this.thisClassNode.classElements.childAt(i).kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = this.thisClassNode.classElements.childAt(i); - if (!TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitIndent(); - this.emitMemberVariableDeclaration(varDecl); - this.writeLineToOutput(""); - } - } - } - }; - - Emitter.prototype.isOnSameLine = function (pos1, pos2) { - var lineMap = this.document.lineMap(); - return lineMap.getLineNumberFromPosition(pos1) === lineMap.getLineNumberFromPosition(pos2); - }; - - Emitter.prototype.emitCommaSeparatedList = function (parent, list, buffer, preserveNewLines) { - if (list === null || list.nonSeparatorCount() === 0) { - return; - } - - var startLine = preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(0).end()); - - if (preserveNewLines) { - this.indenter.increaseIndent(); - } - - if (startLine) { - this.writeLineToOutput(""); - } else { - this.writeToOutput(buffer); - } - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - var emitNode = list.nonSeparatorAt(i); - - this.emitJavascript(emitNode, startLine); - - if (i < (n - 1)) { - startLine = preserveNewLines && !this.isOnSameLine(emitNode.end(), list.nonSeparatorAt(i + 1).start()); - if (startLine) { - this.writeLineToOutput(","); - } else { - this.writeToOutput(", "); - } - } - } - - if (preserveNewLines) { - this.indenter.decreaseIndent(); - } - - if (preserveNewLines && !this.isOnSameLine(parent.end(), list.nonSeparatorAt(list.nonSeparatorCount() - 1).end())) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(buffer); - } - }; - - Emitter.prototype.emitList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.childCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitSeparatedList = function (list, useNewLineSeparator, startInclusive, endExclusive) { - if (typeof useNewLineSeparator === "undefined") { useNewLineSeparator = true; } - if (typeof startInclusive === "undefined") { startInclusive = 0; } - if (typeof endExclusive === "undefined") { endExclusive = list.nonSeparatorCount(); } - if (list === null) { - return; - } - - this.emitComments(list, true); - var lastEmittedNode = null; - - for (var i = startInclusive; i < endExclusive; i++) { - var node = list.nonSeparatorAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - if (useNewLineSeparator) { - this.writeLineToOutput(""); - } - - lastEmittedNode = node; - } - } - - this.emitComments(list, false); - }; - - Emitter.prototype.isDirectivePrologueElement = function (node) { - if (node.kind() === 149 /* ExpressionStatement */) { - var exprStatement = node; - return exprStatement.expression.kind() === 14 /* StringLiteral */; - } - - return false; - }; - - Emitter.prototype.emitSpaceBetweenConstructs = function (node1, node2) { - if (node1 === null || node2 === null) { - return; - } - - if (node1.start() === -1 || node1.end() === -1 || node2.start() === -1 || node2.end() === -1) { - return; - } - - var lineMap = this.document.lineMap(); - var node1EndLine = lineMap.getLineNumberFromPosition(node1.end()); - var node2StartLine = lineMap.getLineNumberFromPosition(node2.start()); - - if ((node2StartLine - node1EndLine) > 1) { - this.writeLineToOutput("", true); - } - }; - - Emitter.prototype.getDetachedComments = function (element) { - var preComments = element.preComments(); - if (preComments) { - var lineMap = this.document.lineMap(); - - var detachedComments = []; - var lastComment = null; - - for (var i = 0, n = preComments.length; i < n; i++) { - var comment = preComments[i]; - - if (lastComment) { - var lastCommentLine = lineMap.getLineNumberFromPosition(lastComment.end()); - var commentLine = lineMap.getLineNumberFromPosition(comment.start()); - - if (commentLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - detachedComments.push(comment); - lastComment = comment; - } - - var lastCommentLine = lineMap.getLineNumberFromPosition(TypeScript.ArrayUtilities.last(detachedComments).end()); - var astLine = lineMap.getLineNumberFromPosition(element.start()); - if (astLine >= lastCommentLine + 2) { - return detachedComments; - } - } - - return []; - }; - - Emitter.prototype.emitPossibleCopyrightHeaders = function (script) { - this.emitDetachedComments(script.moduleElements); - }; - - Emitter.prototype.emitDetachedComments = function (list) { - if (list.childCount() > 0) { - var firstElement = list.childAt(0); - - this.detachedCommentsElement = firstElement; - this.emitCommentsArray(this.getDetachedComments(this.detachedCommentsElement), false); - } - }; - - Emitter.prototype.emitScriptElements = function (sourceUnit) { - var list = sourceUnit.moduleElements; - - this.emitPossibleCopyrightHeaders(sourceUnit); - - for (var i = 0, n = list.childCount(); i < n; i++) { - var node = list.childAt(i); - - if (!this.isDirectivePrologueElement(node)) { - break; - } - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - } - - this.emitPrologue(sourceUnit); - - var isExternalModule = this.document.isExternalModule(); - var isNonElidedExternalModule = isExternalModule && !TypeScript.ASTHelpers.scriptIsElided(sourceUnit); - if (isNonElidedExternalModule) { - this.recordSourceMappingStart(sourceUnit); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - var dependencyList = "[\"require\", \"exports\""; - var importList = "require, exports"; - - var importAndDependencyList = this.getModuleImportAndDependencyList(sourceUnit); - importList += importAndDependencyList.importList; - dependencyList += importAndDependencyList.dependencyList + "]"; - - this.writeLineToOutput("define(" + dependencyList + "," + " function(" + importList + ") {"); - } - } - - if (isExternalModule) { - var temp = this.setContainer(2 /* DynamicModule */); - - var svModuleName = this.moduleName; - this.moduleName = sourceUnit.fileName(); - if (TypeScript.isTSFile(this.moduleName)) { - this.moduleName = this.moduleName.substring(0, this.moduleName.length - ".ts".length); - } - - this.setExportAssignment(null); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.increaseIndent(); - } - - var externalModule = this.semanticInfoChain.getDeclForAST(this.document.sourceUnit()); - - if (TypeScript.hasFlag(externalModule.flags, 262144 /* MustCaptureThis */)) { - this.writeCaptureThisStatement(sourceUnit); - } - - this.pushDecl(externalModule); - } - - this.emitList(list, true, i, n); - - if (isExternalModule) { - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - this.indenter.decreaseIndent(); - } - - if (isNonElidedExternalModule) { - var exportAssignment = this.getExportAssignment(); - var exportAssignmentIdentifierText = exportAssignment ? exportAssignment.identifier.text() : null; - var exportAssignmentValueSymbol = externalModule.getSymbol().getExportAssignedValueSymbol(); - - if (this.emitOptions.compilationSettings().moduleGenTarget() === 2 /* Asynchronous */) { - if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.indenter.increaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + exportAssignmentIdentifierText, exportAssignment); - this.writeLineToOutput(";"); - this.indenter.decreaseIndent(); - } - this.writeToOutput("});"); - } else if (exportAssignmentIdentifierText && exportAssignmentValueSymbol && !(exportAssignmentValueSymbol.kind & 58720272 /* SomeTypeReference */)) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("module.exports = " + exportAssignmentIdentifierText, exportAssignment); - this.writeToOutput(";"); - } - - this.recordSourceMappingEnd(sourceUnit); - this.writeLineToOutput(""); - } - - this.setContainer(temp); - this.moduleName = svModuleName; - this.popDecl(externalModule); - } - }; - - Emitter.prototype.emitConstructorStatements = function (funcDecl) { - var list = funcDecl.block.statements; - - if (list === null) { - return; - } - - this.emitComments(list, true); - - var emitPropertyAssignmentsAfterSuperCall = TypeScript.ASTHelpers.getExtendsHeritageClause(this.thisClassNode.heritageClauses) !== null; - var propertyAssignmentIndex = emitPropertyAssignmentsAfterSuperCall ? 1 : 0; - var lastEmittedNode = null; - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - var node = list.childAt(i); - - if (this.shouldEmit(node)) { - this.emitSpaceBetweenConstructs(lastEmittedNode, node); - - this.emitJavascript(node, true); - this.writeLineToOutput(""); - - lastEmittedNode = node; - } - } - - if (i === propertyAssignmentIndex) { - this.emitParameterPropertyAndMemberVariableAssignments(); - } - - this.emitComments(list, false); - }; - - Emitter.prototype.emitJavascript = function (ast, startLine) { - if (ast === null) { - return; - } - - if (startLine && this.indenter.indentAmt > 0) { - this.emitIndent(); - } - - this.emit(ast); - }; - - Emitter.prototype.emitAccessorMemberDeclaration = function (funcDecl, name, className, isProto) { - if (funcDecl.kind() !== 139 /* GetAccessor */) { - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - if (accessorSymbol.getGetter()) { - return; - } - } - - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - - this.writeToOutput("Object.defineProperty(" + className); - if (isProto) { - this.writeToOutput(".prototype, "); - } else { - this.writeToOutput(", "); - } - - var functionName = name.text(); - if (TypeScript.isQuoted(functionName)) { - this.writeToOutput(functionName); - } else { - this.writeToOutput('"' + functionName + '"'); - } - - this.writeLineToOutput(", {"); - - this.indenter.increaseIndent(); - - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - if (accessors.getter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.getter); - this.emitComments(accessors.getter, true); - this.writeToOutput("get: "); - this.emitAccessorBody(accessors.getter, accessors.getter.parameterList, accessors.getter.block); - this.writeLineToOutput(","); - } - - if (accessors.setter) { - this.emitIndent(); - this.recordSourceMappingStart(accessors.setter); - this.emitComments(accessors.setter, true); - this.writeToOutput("set: "); - this.emitAccessorBody(accessors.setter, accessors.setter.parameterList, accessors.setter.block); - this.writeLineToOutput(","); - } - - this.emitIndent(); - this.writeLineToOutput("enumerable: true,"); - this.emitIndent(); - this.writeLineToOutput("configurable: true"); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeLineToOutput("});"); - this.recordSourceMappingEnd(funcDecl); - }; - - Emitter.prototype.emitAccessorBody = function (funcDecl, parameterList, block) { - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(null, funcDecl, parameters, block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClass = function (classDecl) { - var pullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.pushDecl(pullDecl); - - var svClassNode = this.thisClassNode; - this.thisClassNode = classDecl; - var className = classDecl.identifier.text(); - this.emitComments(classDecl, true); - var temp = this.setContainer(3 /* Class */); - - this.recordSourceMappingStart(classDecl); - this.writeToOutput("var " + className); - - var hasBaseClass = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses) !== null; - var baseTypeReference = null; - var varDecl = null; - - if (hasBaseClass) { - this.writeLineToOutput(" = (function (_super) {"); - } else { - this.writeLineToOutput(" = (function () {"); - } - - this.recordSourceMappingNameStart(className); - this.indenter.increaseIndent(); - - if (hasBaseClass) { - baseTypeReference = TypeScript.ASTHelpers.getExtendsHeritageClause(classDecl.heritageClauses).typeNames.nonSeparatorAt(0); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("__extends(" + className + ", _super)", baseTypeReference); - this.writeLineToOutput(";"); - } - - this.emitIndent(); - - var constrDecl = getLastConstructor(classDecl); - - if (constrDecl) { - this.emit(constrDecl); - this.writeLineToOutput(""); - } else { - this.recordSourceMappingStart(classDecl); - - this.indenter.increaseIndent(); - this.writeLineToOutput("function " + classDecl.identifier.text() + "() {"); - this.recordSourceMappingNameStart("constructor"); - if (hasBaseClass) { - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("_super.apply(this, arguments)", baseTypeReference); - this.writeLineToOutput(";"); - } - - if (this.shouldCaptureThis(classDecl)) { - this.writeCaptureThisStatement(classDecl); - } - - this.emitParameterPropertyAndMemberVariableAssignments(); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.writeLineToOutput(""); - - this.recordSourceMappingNameEnd(); - this.recordSourceMappingEnd(classDecl); - } - - this.emitClassMembers(classDecl); - - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("return " + className + ";", classDecl.closeBraceToken); - this.writeLineToOutput(""); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutputWithSourceMapRecord("}", classDecl.closeBraceToken); - this.recordSourceMappingNameEnd(); - this.recordSourceMappingStart(classDecl); - this.writeToOutput(")("); - if (hasBaseClass) { - this.emitJavascript(baseTypeReference, false); - } - this.writeToOutput(");"); - this.recordSourceMappingEnd(classDecl); - - if ((temp === 1 /* Module */ || temp === 2 /* DynamicModule */) && TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - this.writeLineToOutput(""); - this.emitIndent(); - var modName = temp === 1 /* Module */ ? this.moduleName : "exports"; - this.writeToOutputWithSourceMapRecord(modName + "." + className + " = " + className + ";", classDecl); - } - - this.recordSourceMappingEnd(classDecl); - this.emitComments(classDecl, false); - this.setContainer(temp); - this.thisClassNode = svClassNode; - - this.popDecl(pullDecl); - }; - - Emitter.prototype.emitClassMembers = function (classDecl) { - var lastEmittedMember = null; - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 139 /* GetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var getter = memberDecl; - this.emitAccessorMemberDeclaration(getter, getter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(getter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 140 /* SetAccessor */) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - var setter = memberDecl; - this.emitAccessorMemberDeclaration(setter, setter.propertyName, classDecl.identifier.text(), !TypeScript.hasModifier(setter.modifiers, 16 /* Static */)); - lastEmittedMember = memberDecl; - } else if (memberDecl.kind() === 135 /* MemberFunctionDeclaration */) { - var memberFunction = memberDecl; - - if (memberFunction.block) { - this.emitSpaceBetweenConstructs(lastEmittedMember, memberDecl); - - this.emitClassMemberFunctionDeclaration(classDecl, memberFunction); - lastEmittedMember = memberDecl; - } - } - } - - for (var i = 0, n = classDecl.classElements.childCount(); i < n; i++) { - var memberDecl = classDecl.classElements.childAt(i); - - if (memberDecl.kind() === 136 /* MemberVariableDeclaration */) { - var varDecl = memberDecl; - - if (TypeScript.hasModifier(varDecl.modifiers, 16 /* Static */) && varDecl.variableDeclarator.equalsValueClause) { - this.emitSpaceBetweenConstructs(lastEmittedMember, varDecl); - - this.emitIndent(); - this.recordSourceMappingStart(varDecl); - - var varDeclName = varDecl.variableDeclarator.propertyName.text(); - if (TypeScript.isQuoted(varDeclName) || varDecl.variableDeclarator.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput(classDecl.identifier.text() + "[" + varDeclName + "]"); - } else { - this.writeToOutput(classDecl.identifier.text() + "." + varDeclName); - } - - this.emit(varDecl.variableDeclarator.equalsValueClause); - - this.recordSourceMappingEnd(varDecl); - this.writeLineToOutput(";"); - - lastEmittedMember = varDecl; - } - } - } - }; - - Emitter.prototype.emitClassMemberFunctionDeclaration = function (classDecl, funcDecl) { - this.emitIndent(); - this.recordSourceMappingStart(funcDecl); - this.emitComments(funcDecl, true); - var functionName = funcDecl.propertyName.text(); - - this.writeToOutput(classDecl.identifier.text()); - - if (!TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - this.writeToOutput(".prototype"); - } - - if (TypeScript.isQuoted(functionName) || funcDecl.propertyName.kind() !== 11 /* IdentifierName */) { - this.writeToOutput("[" + functionName + "] = "); - } else { - this.writeToOutput("." + functionName + " = "); - } - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcDecl); - this.writeToOutput("function "); - - this.emitParameterList(funcDecl.callSignature.parameterList); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList); - this.emitFunctionBodyStatements(funcDecl.propertyName.text(), funcDecl, parameters, funcDecl.block, null); - - this.recordSourceMappingEnd(funcDecl); - - this.emitComments(funcDecl, false); - - this.recordSourceMappingEnd(funcDecl); - this.popDecl(pullDecl); - - this.writeLineToOutput(";"); - }; - - Emitter.prototype.requiresExtendsBlock = function (moduleElements) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - - if (moduleElement.kind() === 130 /* ModuleDeclaration */) { - var moduleAST = moduleElement; - - if (!TypeScript.hasModifier(moduleAST.modifiers, 8 /* Ambient */) && this.requiresExtendsBlock(moduleAST.moduleElements)) { - return true; - } - } else if (moduleElement.kind() === 131 /* ClassDeclaration */) { - var classDeclaration = moduleElement; - - if (!TypeScript.hasModifier(classDeclaration.modifiers, 8 /* Ambient */) && TypeScript.ASTHelpers.getExtendsHeritageClause(classDeclaration.heritageClauses) !== null) { - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitPrologue = function (sourceUnit) { - if (!this.extendsPrologueEmitted) { - if (this.requiresExtendsBlock(sourceUnit.moduleElements)) { - this.extendsPrologueEmitted = true; - this.writeLineToOutput("var __extends = this.__extends || function (d, b) {"); - this.writeLineToOutput(" for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); - this.writeLineToOutput(" function __() { this.constructor = d; }"); - this.writeLineToOutput(" __.prototype = b.prototype;"); - this.writeLineToOutput(" d.prototype = new __();"); - this.writeLineToOutput("};"); - } - } - - if (!this.globalThisCapturePrologueEmitted) { - if (this.shouldCaptureThis(sourceUnit)) { - this.globalThisCapturePrologueEmitted = true; - this.writeLineToOutput(this.captureThisStmtString); - } - } - }; - - Emitter.prototype.emitThis = function () { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutput("_this"); - } else { - this.writeToOutput("this"); - } - }; - - Emitter.prototype.emitBlockOrStatement = function (node) { - if (node.kind() === 146 /* Block */) { - this.emit(node); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emitJavascript(node, true); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitLiteralExpression = function (expression) { - switch (expression.kind()) { - case 32 /* NullKeyword */: - this.writeToOutputWithSourceMapRecord("null", expression); - break; - case 24 /* FalseKeyword */: - this.writeToOutputWithSourceMapRecord("false", expression); - break; - case 37 /* TrueKeyword */: - this.writeToOutputWithSourceMapRecord("true", expression); - break; - default: - throw TypeScript.Errors.abstract(); - } - }; - - Emitter.prototype.emitThisExpression = function (expression) { - if (!this.inWithBlock && this.inArrowFunction) { - this.writeToOutputWithSourceMapRecord("_this", expression); - } else { - this.writeToOutputWithSourceMapRecord("this", expression); - } - }; - - Emitter.prototype.emitSuperExpression = function (expression) { - this.writeToOutputWithSourceMapRecord("_super.prototype", expression); - }; - - Emitter.prototype.emitParenthesizedExpression = function (parenthesizedExpression) { - var omitParentheses = false; - - if (parenthesizedExpression.expression.kind() === 220 /* CastExpression */ && parenthesizedExpression.openParenTrailingComments === null) { - var castedExpression = parenthesizedExpression.expression.expression; - - while (castedExpression.kind() == 220 /* CastExpression */) { - castedExpression = castedExpression.expression; - } - - switch (castedExpression.kind()) { - case 217 /* ParenthesizedExpression */: - case 11 /* IdentifierName */: - case 32 /* NullKeyword */: - case 35 /* ThisKeyword */: - case 14 /* StringLiteral */: - case 13 /* NumericLiteral */: - case 12 /* RegularExpressionLiteral */: - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - case 214 /* ArrayLiteralExpression */: - case 215 /* ObjectLiteralExpression */: - case 212 /* MemberAccessExpression */: - case 221 /* ElementAccessExpression */: - omitParentheses = true; - break; - - case 213 /* InvocationExpression */: - if (parenthesizedExpression.parent.kind() !== 216 /* ObjectCreationExpression */) { - omitParentheses = true; - } - - break; - } - } - - if (omitParentheses) { - this.emit(parenthesizedExpression.expression); - } else { - this.recordSourceMappingStart(parenthesizedExpression); - this.writeToOutput("("); - this.emitCommentsArray(parenthesizedExpression.openParenTrailingComments, false); - this.emit(parenthesizedExpression.expression); - this.writeToOutput(")"); - this.recordSourceMappingEnd(parenthesizedExpression); - } - }; - - Emitter.prototype.emitCastExpression = function (expression) { - this.emit(expression.expression); - }; - - Emitter.prototype.emitPrefixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 167 /* LogicalNotExpression */: - this.writeToOutput("!"); - this.emit(expression.operand); - break; - case 166 /* BitwiseNotExpression */: - this.writeToOutput("~"); - this.emit(expression.operand); - break; - case 165 /* NegateExpression */: - this.writeToOutput("-"); - if (expression.operand.kind() === 165 /* NegateExpression */ || expression.operand.kind() === 169 /* PreDecrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 164 /* PlusExpression */: - this.writeToOutput("+"); - if (expression.operand.kind() === 164 /* PlusExpression */ || expression.operand.kind() === 168 /* PreIncrementExpression */) { - this.writeToOutput(" "); - } - this.emit(expression.operand); - break; - case 168 /* PreIncrementExpression */: - this.writeToOutput("++"); - this.emit(expression.operand); - break; - case 169 /* PreDecrementExpression */: - this.writeToOutput("--"); - this.emit(expression.operand); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitPostfixUnaryExpression = function (expression) { - var nodeType = expression.kind(); - - this.recordSourceMappingStart(expression); - switch (nodeType) { - case 210 /* PostIncrementExpression */: - this.emit(expression.operand); - this.writeToOutput("++"); - break; - case 211 /* PostDecrementExpression */: - this.emit(expression.operand); - this.writeToOutput("--"); - break; - default: - throw TypeScript.Errors.abstract(); - } - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitTypeOfExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("typeof "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDeleteExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("delete "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitVoidExpression = function (expression) { - this.recordSourceMappingStart(expression); - this.writeToOutput("void "); - this.emit(expression.expression); - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.canEmitDottedNameMemberAccessExpression = function (expression) { - var memberExpressionNodeType = expression.expression.kind(); - - if (memberExpressionNodeType === 11 /* IdentifierName */ || memberExpressionNodeType == 212 /* MemberAccessExpression */) { - var memberAccessSymbol = this.getSymbolForEmit(expression).symbol; - var memberAccessExpressionSymbol = this.getSymbolForEmit(expression.expression).symbol; - if (memberAccessSymbol && memberAccessExpressionSymbol && !this.semanticInfoChain.getAliasSymbolForAST(expression.expression) && (TypeScript.PullHelpers.symbolIsModule(memberAccessExpressionSymbol) || memberAccessExpressionSymbol.kind === 64 /* Enum */ || memberAccessExpressionSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */))) { - var memberAccessSymbolKind = memberAccessSymbol.kind; - if (memberAccessSymbolKind === 4096 /* Property */ || memberAccessSymbolKind === 67108864 /* EnumMember */ || (memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && memberAccessSymbolKind === 512 /* Variable */ && !memberAccessSymbol.anyDeclHasFlag(32768 /* InitializedModule */ | 4096 /* Enum */)) || ((memberAccessSymbol.anyDeclHasFlag(1 /* Exported */) && !this.symbolIsUsedInItsEnclosingContainer(memberAccessSymbol)))) { - if (memberExpressionNodeType === 212 /* MemberAccessExpression */) { - return this.canEmitDottedNameMemberAccessExpression(expression.expression); - } - - return true; - } - } - } - - return false; - }; - - Emitter.prototype.emitDottedNameMemberAccessExpression = function (expression) { - this.recordSourceMappingStart(expression); - if (expression.expression.kind() === 212 /* MemberAccessExpression */) { - this.emitDottedNameMemberAccessExpressionRecurse(expression.expression); - } else { - this.emitName(expression.expression, true); - } - - this.writeToOutput("."); - this.emitName(expression.name, false); - - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitDottedNameMemberAccessExpressionRecurse = function (expression) { - this.emitComments(expression, true); - this.emitDottedNameMemberAccessExpression(expression); - this.emitComments(expression, false); - }; - - Emitter.prototype.emitMemberAccessExpression = function (expression) { - if (!this.tryEmitConstant(expression)) { - if (this.canEmitDottedNameMemberAccessExpression(expression)) { - this.emitDottedNameMemberAccessExpression(expression); - } else { - this.recordSourceMappingStart(expression); - this.emit(expression.expression); - this.writeToOutput("."); - this.emitName(expression.name, false); - this.recordSourceMappingEnd(expression); - } - } - }; - - Emitter.prototype.emitQualifiedName = function (name) { - this.recordSourceMappingStart(name); - - this.emit(name.left); - this.writeToOutput("."); - this.emitName(name.right, false); - - this.recordSourceMappingEnd(name); - }; - - Emitter.prototype.emitBinaryExpression = function (expression) { - this.recordSourceMappingStart(expression); - switch (expression.kind()) { - case 173 /* CommaExpression */: - this.emit(expression.left); - this.writeToOutput(", "); - this.emit(expression.right); - break; - default: { - this.emit(expression.left); - var binOp = TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(expression.kind())); - if (binOp === "instanceof") { - this.writeToOutput(" instanceof "); - } else if (binOp === "in") { - this.writeToOutput(" in "); - } else { - this.writeToOutput(" " + binOp + " "); - } - this.emit(expression.right); - } - } - this.recordSourceMappingEnd(expression); - }; - - Emitter.prototype.emitSimplePropertyAssignment = function (property) { - this.recordSourceMappingStart(property); - this.emit(property.propertyName); - this.writeToOutput(": "); - this.emit(property.expression); - this.recordSourceMappingEnd(property); - }; - - Emitter.prototype.emitFunctionPropertyAssignment = function (funcProp) { - this.recordSourceMappingStart(funcProp); - - this.emit(funcProp.propertyName); - this.writeToOutput(": "); - - var pullFunctionDecl = this.semanticInfoChain.getDeclForAST(funcProp); - - var savedInArrowFunction = this.inArrowFunction; - this.inArrowFunction = false; - - var temp = this.setContainer(5 /* Function */); - var funcName = funcProp.propertyName; - - var pullDecl = this.semanticInfoChain.getDeclForAST(funcProp); - this.pushDecl(pullDecl); - - this.recordSourceMappingStart(funcProp); - this.writeToOutput("function "); - - this.writeToOutput("("); - - var parameters = TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList); - this.emitFunctionParameters(parameters); - this.writeToOutput(")"); - - this.emitFunctionBodyStatements(funcProp.propertyName.text(), funcProp, parameters, funcProp.block, null); - - this.recordSourceMappingEnd(funcProp); - - this.recordSourceMappingEnd(funcProp); - - this.emitComments(funcProp, false); - - this.popDecl(pullDecl); - - this.setContainer(temp); - this.inArrowFunction = savedInArrowFunction; - }; - - Emitter.prototype.emitConditionalExpression = function (expression) { - this.emit(expression.condition); - this.writeToOutput(" ? "); - this.emit(expression.whenTrue); - this.writeToOutput(" : "); - this.emit(expression.whenFalse); - }; - - Emitter.prototype.emitThrowStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("throw "); - this.emit(statement.expression); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitExpressionStatement = function (statement) { - var isArrowExpression = statement.expression.kind() === 219 /* SimpleArrowFunctionExpression */ || statement.expression.kind() === 218 /* ParenthesizedArrowFunctionExpression */; - - this.recordSourceMappingStart(statement); - if (isArrowExpression) { - this.writeToOutput("("); - } - - this.emit(statement.expression); - - if (isArrowExpression) { - this.writeToOutput(")"); - } - - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitLabeledStatement = function (statement) { - this.writeToOutputWithSourceMapRecord(statement.identifier.text(), statement.identifier); - this.writeLineToOutput(":"); - this.emitJavascript(statement.statement, true); - }; - - Emitter.prototype.emitBlock = function (block) { - this.recordSourceMappingStart(block); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - if (block.statements) { - this.emitList(block.statements); - } - this.emitCommentsArray(block.closeBraceLeadingComments, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(block); - }; - - Emitter.prototype.emitBreakStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("break"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitContinueStatement = function (jump) { - this.recordSourceMappingStart(jump); - this.writeToOutput("continue"); - - if (jump.identifier) { - this.writeToOutput(" " + jump.identifier.text()); - } - - this.recordSourceMappingEnd(jump); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitWhileStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("while ("); - this.emit(statement.condition); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitDoStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("do"); - this.emitBlockOrStatement(statement.statement); - this.writeToOutputWithSourceMapRecord(" while", statement.whileKeyword); - this.writeToOutput('('); - this.emit(statement.condition); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitIfStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("if ("); - this.emit(statement.condition); - this.writeToOutput(")"); - - this.emitBlockOrStatement(statement.statement); - - if (statement.elseClause) { - if (statement.statement.kind() !== 146 /* Block */) { - this.writeLineToOutput(""); - this.emitIndent(); - } else { - this.writeToOutput(" "); - } - - this.emit(statement.elseClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitElseClause = function (elseClause) { - if (elseClause.statement.kind() === 147 /* IfStatement */) { - this.writeToOutput("else "); - this.emit(elseClause.statement); - } else { - this.writeToOutput("else"); - this.emitBlockOrStatement(elseClause.statement); - } - }; - - Emitter.prototype.emitReturnStatement = function (statement) { - this.recordSourceMappingStart(statement); - if (statement.expression) { - this.writeToOutput("return "); - this.emit(statement.expression); - } else { - this.writeToOutput("return"); - } - this.recordSourceMappingEnd(statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitForInStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.left) { - this.emit(statement.left); - } else { - this.emit(statement.variableDeclaration); - } - this.writeToOutput(" in "); - this.emit(statement.expression); - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitForStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("for ("); - if (statement.variableDeclaration) { - this.emit(statement.variableDeclaration); - } else if (statement.initializer) { - this.emit(statement.initializer); - } - - this.writeToOutput("; "); - this.emitJavascript(statement.condition, false); - this.writeToOutput(";"); - if (statement.incrementor) { - this.writeToOutput(" "); - this.emitJavascript(statement.incrementor, false); - } - this.writeToOutput(")"); - this.emitBlockOrStatement(statement.statement); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitWithStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("with ("); - if (statement.condition) { - this.emit(statement.condition); - } - - this.writeToOutput(")"); - var prevInWithBlock = this.inWithBlock; - this.inWithBlock = true; - this.emitBlockOrStatement(statement.statement); - this.inWithBlock = prevInWithBlock; - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitSwitchStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("switch ("); - this.emit(statement.expression); - this.recordSourceMappingStart(statement.closeParenToken); - this.writeToOutput(")"); - this.recordSourceMappingEnd(statement.closeParenToken); - this.writeLineToOutput(" {"); - this.indenter.increaseIndent(); - this.emitList(statement.switchClauses, false); - this.indenter.decreaseIndent(); - this.emitIndent(); - this.writeToOutput("}"); - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCaseSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("case "); - this.emit(clause.expression); - this.writeToOutput(":"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitSwitchClauseBody = function (body) { - if (body.childCount() === 1 && body.childAt(0).kind() === 146 /* Block */) { - this.emit(body.childAt(0)); - this.writeLineToOutput(""); - } else { - this.writeLineToOutput(""); - this.indenter.increaseIndent(); - this.emit(body); - this.indenter.decreaseIndent(); - } - }; - - Emitter.prototype.emitDefaultSwitchClause = function (clause) { - this.recordSourceMappingStart(clause); - this.writeToOutput("default:"); - - this.emitSwitchClauseBody(clause.statements); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitTryStatement = function (statement) { - this.recordSourceMappingStart(statement); - this.writeToOutput("try "); - this.emit(statement.block); - this.emitJavascript(statement.catchClause, false); - - if (statement.finallyClause) { - this.emit(statement.finallyClause); - } - this.recordSourceMappingEnd(statement); - }; - - Emitter.prototype.emitCatchClause = function (clause) { - this.writeToOutput(" "); - this.recordSourceMappingStart(clause); - this.writeToOutput("catch ("); - this.emit(clause.identifier); - this.writeToOutput(")"); - this.emit(clause.block); - this.recordSourceMappingEnd(clause); - }; - - Emitter.prototype.emitFinallyClause = function (clause) { - this.writeToOutput(" finally"); - this.emit(clause.block); - }; - - Emitter.prototype.emitDebuggerStatement = function (statement) { - this.writeToOutputWithSourceMapRecord("debugger", statement); - this.writeToOutput(";"); - }; - - Emitter.prototype.emitNumericLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitRegularExpressionLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitStringLiteral = function (literal) { - this.writeToOutputWithSourceMapRecord(literal.text(), literal); - }; - - Emitter.prototype.emitEqualsValueClause = function (clause) { - this.writeToOutput(" = "); - this.emit(clause.value); - }; - - Emitter.prototype.emitParameter = function (parameter) { - this.writeToOutputWithSourceMapRecord(parameter.identifier.text(), parameter); - }; - - Emitter.prototype.emitConstructorDeclaration = function (declaration) { - if (declaration.block) { - this.emitConstructor(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitFunctionDeclaration = function (declaration) { - return declaration.preComments() !== null || (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null); - }; - - Emitter.prototype.emitFunctionDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */) && declaration.block !== null) { - this.emitFunction(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.emitSourceUnit = function (sourceUnit) { - if (!this.document.isDeclareFile()) { - var pullDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - this.pushDecl(pullDecl); - this.emitScriptElements(sourceUnit); - this.popDecl(pullDecl); - - this.emitCommentsArray(sourceUnit.endOfFileTokenLeadingComments, false); - } - }; - - Emitter.prototype.shouldEmitEnumDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.enumIsElided(declaration); - }; - - Emitter.prototype.emitEnumDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.enumIsElided(declaration)) { - this.emitComments(declaration, true); - this.emitEnum(declaration); - this.emitComments(declaration, false); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitModuleDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.ASTHelpers.moduleIsElided(declaration); - }; - - Emitter.prototype.emitModuleDeclaration = function (declaration) { - if (!TypeScript.ASTHelpers.moduleIsElided(declaration)) { - this.emitModuleDeclarationWorker(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitClassDeclaration = function (declaration) { - return declaration.preComments() !== null || !TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */); - }; - - Emitter.prototype.emitClassDeclaration = function (declaration) { - if (!TypeScript.hasModifier(declaration.modifiers, 8 /* Ambient */)) { - this.emitClass(declaration); - } else { - this.emitComments(declaration, true, true); - } - }; - - Emitter.prototype.shouldEmitInterfaceDeclaration = function (declaration) { - return declaration.preComments() !== null; - }; - - Emitter.prototype.emitInterfaceDeclaration = function (declaration) { - this.emitComments(declaration, true, true); - }; - - Emitter.prototype.firstVariableDeclarator = function (statement) { - return statement.declaration.declarators.nonSeparatorAt(0); - }; - - Emitter.prototype.isNotAmbientOrHasInitializer = function (variableStatement) { - return !TypeScript.hasModifier(variableStatement.modifiers, 8 /* Ambient */) || this.firstVariableDeclarator(variableStatement).equalsValueClause !== null; - }; - - Emitter.prototype.shouldEmitVariableStatement = function (statement) { - return statement.preComments() !== null || this.isNotAmbientOrHasInitializer(statement); - }; - - Emitter.prototype.emitVariableStatement = function (statement) { - if (this.isNotAmbientOrHasInitializer(statement)) { - this.emitComments(statement, true); - this.emit(statement.declaration); - this.writeToOutput(";"); - this.emitComments(statement, false); - } else { - this.emitComments(statement, true, true); - } - }; - - Emitter.prototype.emitGenericType = function (type) { - this.emit(type.name); - }; - - Emitter.prototype.shouldEmit = function (ast) { - if (!ast) { - return false; - } - - switch (ast.kind()) { - case 133 /* ImportDeclaration */: - return this.shouldEmitImportDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.shouldEmitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.shouldEmitInterfaceDeclaration(ast); - case 129 /* FunctionDeclaration */: - return this.shouldEmitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.shouldEmitModuleDeclaration(ast); - case 148 /* VariableStatement */: - return this.shouldEmitVariableStatement(ast); - case 223 /* OmittedExpression */: - return false; - case 132 /* EnumDeclaration */: - return this.shouldEmitEnumDeclaration(ast); - } - - return true; - }; - - Emitter.prototype.emit = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 2 /* SeparatedList */: - return this.emitSeparatedList(ast); - case 1 /* List */: - return this.emitList(ast); - case 120 /* SourceUnit */: - return this.emitSourceUnit(ast); - case 133 /* ImportDeclaration */: - return this.emitImportDeclaration(ast); - case 134 /* ExportAssignment */: - return this.setExportAssignment(ast); - case 131 /* ClassDeclaration */: - return this.emitClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitInterfaceDeclaration(ast); - case 11 /* IdentifierName */: - return this.emitName(ast, true); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast); - case 219 /* SimpleArrowFunctionExpression */: - return this.emitSimpleArrowFunctionExpression(ast); - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.emitParenthesizedArrowFunctionExpression(ast); - case 129 /* FunctionDeclaration */: - return this.emitFunctionDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitModuleDeclaration(ast); - case 224 /* VariableDeclaration */: - return this.emitVariableDeclaration(ast); - case 126 /* GenericType */: - return this.emitGenericType(ast); - case 137 /* ConstructorDeclaration */: - return this.emitConstructorDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitEnumDeclaration(ast); - case 243 /* EnumElement */: - return this.emitEnumElement(ast); - case 222 /* FunctionExpression */: - return this.emitFunctionExpression(ast); - case 148 /* VariableStatement */: - return this.emitVariableStatement(ast); - } - - this.emitComments(ast, true); - this.emitWorker(ast); - this.emitComments(ast, false); - }; - - Emitter.prototype.emitWorker = function (ast) { - if (!ast) { - return; - } - - switch (ast.kind()) { - case 13 /* NumericLiteral */: - return this.emitNumericLiteral(ast); - case 12 /* RegularExpressionLiteral */: - return this.emitRegularExpressionLiteral(ast); - case 14 /* StringLiteral */: - return this.emitStringLiteral(ast); - case 24 /* FalseKeyword */: - case 32 /* NullKeyword */: - case 37 /* TrueKeyword */: - return this.emitLiteralExpression(ast); - case 35 /* ThisKeyword */: - return this.emitThisExpression(ast); - case 50 /* SuperKeyword */: - return this.emitSuperExpression(ast); - case 217 /* ParenthesizedExpression */: - return this.emitParenthesizedExpression(ast); - case 214 /* ArrayLiteralExpression */: - return this.emitArrayLiteralExpression(ast); - case 211 /* PostDecrementExpression */: - case 210 /* PostIncrementExpression */: - return this.emitPostfixUnaryExpression(ast); - case 167 /* LogicalNotExpression */: - case 166 /* BitwiseNotExpression */: - case 165 /* NegateExpression */: - case 164 /* PlusExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.emitPrefixUnaryExpression(ast); - case 213 /* InvocationExpression */: - return this.emitInvocationExpression(ast); - case 221 /* ElementAccessExpression */: - return this.emitElementAccessExpression(ast); - case 212 /* MemberAccessExpression */: - return this.emitMemberAccessExpression(ast); - case 121 /* QualifiedName */: - return this.emitQualifiedName(ast); - case 173 /* CommaExpression */: - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return this.emitBinaryExpression(ast); - case 186 /* ConditionalExpression */: - return this.emitConditionalExpression(ast); - case 232 /* EqualsValueClause */: - return this.emitEqualsValueClause(ast); - case 242 /* Parameter */: - return this.emitParameter(ast); - case 146 /* Block */: - return this.emitBlock(ast); - case 235 /* ElseClause */: - return this.emitElseClause(ast); - case 147 /* IfStatement */: - return this.emitIfStatement(ast); - case 149 /* ExpressionStatement */: - return this.emitExpressionStatement(ast); - case 139 /* GetAccessor */: - return this.emitGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitSetAccessor(ast); - case 157 /* ThrowStatement */: - return this.emitThrowStatement(ast); - case 150 /* ReturnStatement */: - return this.emitReturnStatement(ast); - case 216 /* ObjectCreationExpression */: - return this.emitObjectCreationExpression(ast); - case 151 /* SwitchStatement */: - return this.emitSwitchStatement(ast); - case 233 /* CaseSwitchClause */: - return this.emitCaseSwitchClause(ast); - case 234 /* DefaultSwitchClause */: - return this.emitDefaultSwitchClause(ast); - case 152 /* BreakStatement */: - return this.emitBreakStatement(ast); - case 153 /* ContinueStatement */: - return this.emitContinueStatement(ast); - case 154 /* ForStatement */: - return this.emitForStatement(ast); - case 155 /* ForInStatement */: - return this.emitForInStatement(ast); - case 158 /* WhileStatement */: - return this.emitWhileStatement(ast); - case 163 /* WithStatement */: - return this.emitWithStatement(ast); - case 220 /* CastExpression */: - return this.emitCastExpression(ast); - case 215 /* ObjectLiteralExpression */: - return this.emitObjectLiteralExpression(ast); - case 240 /* SimplePropertyAssignment */: - return this.emitSimplePropertyAssignment(ast); - case 241 /* FunctionPropertyAssignment */: - return this.emitFunctionPropertyAssignment(ast); - case 156 /* EmptyStatement */: - return this.writeToOutputWithSourceMapRecord(";", ast); - case 159 /* TryStatement */: - return this.emitTryStatement(ast); - case 236 /* CatchClause */: - return this.emitCatchClause(ast); - case 237 /* FinallyClause */: - return this.emitFinallyClause(ast); - case 160 /* LabeledStatement */: - return this.emitLabeledStatement(ast); - case 161 /* DoStatement */: - return this.emitDoStatement(ast); - case 171 /* TypeOfExpression */: - return this.emitTypeOfExpression(ast); - case 170 /* DeleteExpression */: - return this.emitDeleteExpression(ast); - case 172 /* VoidExpression */: - return this.emitVoidExpression(ast); - case 162 /* DebuggerStatement */: - return this.emitDebuggerStatement(ast); - } - }; - return Emitter; - })(); - TypeScript.Emitter = Emitter; - - function getLastConstructor(classDecl) { - return classDecl.classElements.lastOrDefault(function (e) { - return e.kind() === 137 /* ConstructorDeclaration */; - }); - } - TypeScript.getLastConstructor = getLastConstructor; - - function getTrimmedTextLines(comment) { - if (comment.kind() === 6 /* MultiLineCommentTrivia */) { - return comment.fullText().split("\n").map(function (s) { - return s.trim(); - }); - } else { - return [comment.fullText().trim()]; - } - } - TypeScript.getTrimmedTextLines = getTrimmedTextLines; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var MemberName = (function () { - function MemberName() { - this.prefix = ""; - this.suffix = ""; - } - MemberName.prototype.isString = function () { - return false; - }; - MemberName.prototype.isArray = function () { - return false; - }; - MemberName.prototype.isMarker = function () { - return !this.isString() && !this.isArray(); - }; - - MemberName.prototype.toString = function () { - return MemberName.memberNameToString(this); - }; - - MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { - if (typeof markerBaseLength === "undefined") { markerBaseLength = 0; } - var result = memberName.prefix; - - if (memberName.isString()) { - result += memberName.text; - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - if (ar.entries[index].isMarker()) { - if (markerInfo) { - markerInfo.push(markerBaseLength + result.length); - } - continue; - } - - result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); - result += ar.delim; - } - } - - result += memberName.suffix; - return result; - }; - - MemberName.create = function (arg1, arg2, arg3) { - if (typeof arg1 === "string") { - return new MemberNameString(arg1); - } else { - var result = new MemberNameArray(); - if (arg2) - result.prefix = arg2; - if (arg3) - result.suffix = arg3; - result.entries.push(arg1); - return result; - } - }; - return MemberName; - })(); - TypeScript.MemberName = MemberName; - - var MemberNameString = (function (_super) { - __extends(MemberNameString, _super); - function MemberNameString(text) { - _super.call(this); - this.text = text; - } - MemberNameString.prototype.isString = function () { - return true; - }; - return MemberNameString; - })(MemberName); - TypeScript.MemberNameString = MemberNameString; - - var MemberNameArray = (function (_super) { - __extends(MemberNameArray, _super); - function MemberNameArray() { - _super.call(this); - this.delim = ""; - this.entries = []; - } - MemberNameArray.prototype.isArray = function () { - return true; - }; - - MemberNameArray.prototype.add = function (entry) { - this.entries.push(entry); - }; - - MemberNameArray.prototype.addAll = function (entries) { - for (var i = 0; i < entries.length; i++) { - this.entries.push(entries[i]); - } - }; - return MemberNameArray; - })(MemberName); - TypeScript.MemberNameArray = MemberNameArray; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - function stripStartAndEndQuotes(str) { - var firstCharCode = str && str.charCodeAt(0); - if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { - return str.substring(1, str.length - 1); - } - - return str; - } - TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes; - - function isSingleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */; - } - TypeScript.isSingleQuoted = isSingleQuoted; - - function isDoubleQuoted(str) { - return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */; - } - TypeScript.isDoubleQuoted = isDoubleQuoted; - - function isQuoted(str) { - return isDoubleQuoted(str) || isSingleQuoted(str); - } - TypeScript.isQuoted = isQuoted; - - function quoteStr(str) { - return "\"" + str + "\""; - } - TypeScript.quoteStr = quoteStr; - - var switchToForwardSlashesRegEx = /\\/g; - function switchToForwardSlashes(path) { - return path.replace(switchToForwardSlashesRegEx, "/"); - } - TypeScript.switchToForwardSlashes = switchToForwardSlashes; - - function trimModName(modName) { - if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") { - return modName.substring(0, modName.length - 5); - } - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") { - return modName.substring(0, modName.length - 3); - } - - if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") { - return modName.substring(0, modName.length - 3); - } - - return modName; - } - TypeScript.trimModName = trimModName; - - function getDeclareFilePath(fname) { - return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname); - } - TypeScript.getDeclareFilePath = getDeclareFilePath; - - function isFileOfExtension(fname, ext) { - var invariantFname = fname.toLocaleUpperCase(); - var invariantExt = ext.toLocaleUpperCase(); - var extLength = invariantExt.length; - return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt; - } - - function isTSFile(fname) { - return isFileOfExtension(fname, ".ts"); - } - TypeScript.isTSFile = isTSFile; - - function isDTSFile(fname) { - return isFileOfExtension(fname, ".d.ts"); - } - TypeScript.isDTSFile = isDTSFile; - - function getPrettyName(modPath, quote, treatAsFileName) { - if (typeof quote === "undefined") { quote = true; } - if (typeof treatAsFileName === "undefined") { treatAsFileName = false; } - var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath)); - var components = this.getPathComponents(modName); - return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath; - } - TypeScript.getPrettyName = getPrettyName; - - function getPathComponents(path) { - return path.split("/"); - } - TypeScript.getPathComponents = getPathComponents; - - function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) { - if (typeof isAbsoultePathURL === "undefined") { isAbsoultePathURL = true; } - absoluteModPath = switchToForwardSlashes(absoluteModPath); - - var modComponents = this.getPathComponents(absoluteModPath); - var fixedModComponents = this.getPathComponents(fixedModFilePath); - - var joinStartIndex = 0; - for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) { - break; - } - } - - if (joinStartIndex !== 0) { - var relativePath = ""; - var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length); - for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) { - if (fixedModComponents[joinStartIndex] !== "") { - relativePath = relativePath + "../"; - } - } - - return relativePath + relativePathComponents.join("/"); - } - - if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) { - absoluteModPath = "file:///" + absoluteModPath; - } - - return absoluteModPath; - } - TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath; - - function changePathToDTS(modPath) { - return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts"; - } - TypeScript.changePathToDTS = changePathToDTS; - - function isRelative(path) { - return path.length > 0 && path.charAt(0) === "."; - } - TypeScript.isRelative = isRelative; - function isRooted(path) { - return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1)); - } - TypeScript.isRooted = isRooted; - - function getRootFilePath(outFname) { - if (outFname === "") { - return outFname; - } else { - var isPath = outFname.indexOf("/") !== -1; - return isPath ? filePath(outFname) : ""; - } - } - TypeScript.getRootFilePath = getRootFilePath; - - function filePathComponents(fullPath) { - fullPath = switchToForwardSlashes(fullPath); - var components = getPathComponents(fullPath); - return components.slice(0, components.length - 1); - } - TypeScript.filePathComponents = filePathComponents; - - function filePath(fullPath) { - var path = filePathComponents(fullPath); - return path.join("/") + "/"; - } - TypeScript.filePath = filePath; - - function convertToDirectoryPath(dirPath) { - if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") { - dirPath += "/"; - } - - return dirPath; - } - TypeScript.convertToDirectoryPath = convertToDirectoryPath; - - var normalizePathRegEx = /^\\\\[^\\]/; - function normalizePath(path) { - if (normalizePathRegEx.test(path)) { - path = "file:" + path; - } - var parts = this.getPathComponents(switchToForwardSlashes(path)); - var normalizedParts = []; - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (part === ".") { - continue; - } - - if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") { - normalizedParts.pop(); - continue; - } - - normalizedParts.push(part); - } - - return normalizedParts.join("/"); - } - TypeScript.normalizePath = normalizePath; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - - - function isNoDefaultLibMatch(comment) { - var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; - return isNoDefaultLibRegex.exec(comment); - } - - TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; - - function getFileReferenceFromReferencePath(fileName, lineMap, position, comment, diagnostics) { - var simpleReferenceRegEx = /^\/\/\/\s*= 7 && fullReference[6] === "true"; - if (isResident) { - TypeScript.CompilerDiagnostics.debugPrint(path + " is resident"); - } - return { - line: 0, - character: 0, - position: 0, - length: 0, - path: TypeScript.switchToForwardSlashes(adjustedPath), - isResident: isResident - }; - } - } - } - - return null; - } - - var scannerWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - var scannerDiagnostics = []; - - function processImports(lineMap, scanner, token, importedFiles) { - var position = 0; - var lineChar = { line: -1, character: -1 }; - - var start = new Date().getTime(); - - while (token.tokenKind !== 10 /* EndOfFileToken */) { - if (token.tokenKind === 49 /* ImportKeyword */) { - var importStart = position + token.leadingTriviaWidth(); - token = scanner.scan(scannerDiagnostics, false); - - if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 107 /* EqualsToken */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 65 /* ModuleKeyword */ || token.tokenKind === 66 /* RequireKeyword */) { - token = scanner.scan(scannerDiagnostics, false); - - if (token.tokenKind === 72 /* OpenParenToken */) { - var afterOpenParenPosition = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - - lineMap.fillLineAndCharacterFromPosition(importStart, lineChar); - - if (token.tokenKind === 14 /* StringLiteral */) { - var ref = { - line: lineChar.line, - character: lineChar.character, - position: afterOpenParenPosition + token.leadingTriviaWidth(), - length: token.width(), - path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())), - isResident: false - }; - importedFiles.push(ref); - } - } - } - } - } - } - - position = scanner.absoluteIndex(); - token = scanner.scan(scannerDiagnostics, false); - } - - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionScanImportsTime += totalTime; - } - - function processTripleSlashDirectives(fileName, lineMap, firstToken) { - var leadingTrivia = firstToken.leadingTrivia(); - - var position = 0; - var lineChar = { line: -1, character: -1 }; - var noDefaultLib = false; - var diagnostics = []; - var referencedFiles = []; - - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - - if (trivia.kind() === 7 /* SingleLineCommentTrivia */) { - var triviaText = trivia.fullText(); - var referencedCode = getFileReferenceFromReferencePath(fileName, lineMap, position, triviaText, diagnostics); - - if (referencedCode) { - lineMap.fillLineAndCharacterFromPosition(position, lineChar); - referencedCode.position = position; - referencedCode.length = trivia.fullWidth(); - referencedCode.line = lineChar.line; - referencedCode.character = lineChar.character; - - referencedFiles.push(referencedCode); - } - - var isNoDefaultLib = isNoDefaultLibMatch(triviaText); - if (isNoDefaultLib) { - noDefaultLib = isNoDefaultLib[3] === "true"; - } - } - - position += trivia.fullWidth(); - } - - return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles }; - } - - function preProcessFile(fileName, sourceText, readImportFiles) { - if (typeof readImportFiles === "undefined") { readImportFiles = true; } - var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText); - var scanner = new TypeScript.Scanner(fileName, text, 1 /* EcmaScript5 */, scannerWindow); - - var firstToken = scanner.scan(scannerDiagnostics, false); - - var importedFiles = []; - if (readImportFiles) { - processImports(text.lineMap(), scanner, firstToken, importedFiles); - } - - var properties = processTripleSlashDirectives(fileName, text.lineMap(), firstToken); - - scannerDiagnostics.length = 0; - return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics }; - } - TypeScript.preProcessFile = preProcessFile; - - function getParseOptions(settings) { - return new TypeScript.ParseOptions(settings.codeGenTarget(), settings.allowAutomaticSemicolonInsertion()); - } - TypeScript.getParseOptions = getParseOptions; - - function getReferencedFiles(fileName, sourceText) { - return preProcessFile(fileName, sourceText, false).referencedFiles; - } - TypeScript.getReferencedFiles = getReferencedFiles; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ReferenceResolutionResult = (function () { - function ReferenceResolutionResult() { - this.resolvedFiles = []; - this.diagnostics = []; - this.seenNoDefaultLibTag = false; - } - return ReferenceResolutionResult; - })(); - TypeScript.ReferenceResolutionResult = ReferenceResolutionResult; - - var ReferenceLocation = (function () { - function ReferenceLocation(filePath, lineMap, position, length, isImported) { - this.filePath = filePath; - this.lineMap = lineMap; - this.position = position; - this.length = length; - this.isImported = isImported; - } - return ReferenceLocation; - })(); - - var ReferenceResolver = (function () { - function ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution) { - this.useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this.inputFileNames = inputFileNames; - this.host = host; - this.visited = {}; - } - ReferenceResolver.resolve = function (inputFileNames, host, useCaseSensitiveFileResolution) { - var resolver = new ReferenceResolver(inputFileNames, host, useCaseSensitiveFileResolution); - return resolver.resolveInputFiles(); - }; - - ReferenceResolver.prototype.resolveInputFiles = function () { - var _this = this; - var result = new ReferenceResolutionResult(); - - if (!this.inputFileNames || this.inputFileNames.length <= 0) { - return result; - } - - var referenceLocation = new ReferenceLocation(null, null, 0, 0, false); - this.inputFileNames.forEach(function (fileName) { - return _this.resolveIncludedFile(fileName, referenceLocation, result); - }); - - return result; - }; - - ReferenceResolver.prototype.resolveIncludedFile = function (path, referenceLocation, resolutionResult) { - var normalizedPath = this.getNormalizedFilePath(path, referenceLocation.filePath); - - if (this.isSameFile(normalizedPath, referenceLocation.filePath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.A_file_cannot_have_a_reference_to_itself, null)); - } - - return normalizedPath; - } - - if (!TypeScript.isTSFile(normalizedPath) && !TypeScript.isDTSFile(normalizedPath)) { - var dtsFile = normalizedPath + ".d.ts"; - var tsFile = normalizedPath + ".ts"; - - if (this.host.fileExists(tsFile)) { - normalizedPath = tsFile; - } else { - normalizedPath = dtsFile; - } - } - - if (!this.host.fileExists(normalizedPath)) { - if (!referenceLocation.isImported) { - resolutionResult.diagnostics.push(new TypeScript.Diagnostic(referenceLocation.filePath, referenceLocation.lineMap, referenceLocation.position, referenceLocation.length, TypeScript.DiagnosticCode.Cannot_resolve_referenced_file_0, [path])); - } - - return normalizedPath; - } - - return this.resolveFile(normalizedPath, resolutionResult); - }; - - ReferenceResolver.prototype.resolveImportedFile = function (path, referenceLocation, resolutionResult) { - var isRelativePath = TypeScript.isRelative(path); - var isRootedPath = isRelativePath ? false : TypeScript.isRooted(path); - - if (isRelativePath || isRootedPath) { - return this.resolveIncludedFile(path, referenceLocation, resolutionResult); - } else { - var parentDirectory = this.host.getParentDirectory(referenceLocation.filePath); - var searchFilePath = null; - var dtsFileName = path + ".d.ts"; - var tsFilePath = path + ".ts"; - - var start = new Date().getTime(); - - do { - currentFilePath = this.host.resolveRelativePath(tsFilePath, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - var currentFilePath = this.host.resolveRelativePath(dtsFileName, parentDirectory); - if (this.host.fileExists(currentFilePath)) { - searchFilePath = currentFilePath; - break; - } - - parentDirectory = this.host.getParentDirectory(parentDirectory); - } while(parentDirectory); - - TypeScript.fileResolutionImportFileSearchTime += new Date().getTime() - start; - - if (!searchFilePath) { - return path; - } - - return this.resolveFile(searchFilePath, resolutionResult); - } - }; - - ReferenceResolver.prototype.resolveFile = function (normalizedPath, resolutionResult) { - var _this = this; - var visitedPath = this.isVisited(normalizedPath); - if (!visitedPath) { - this.recordVisitedFile(normalizedPath); - - var start = new Date().getTime(); - var scriptSnapshot = this.host.getScriptSnapshot(normalizedPath); - var totalTime = new Date().getTime() - start; - TypeScript.fileResolutionIOTime += totalTime; - - var lineMap = TypeScript.LineMap1.fromScriptSnapshot(scriptSnapshot); - var preprocessedFileInformation = TypeScript.preProcessFile(normalizedPath, scriptSnapshot); - resolutionResult.diagnostics.push.apply(resolutionResult.diagnostics, preprocessedFileInformation.diagnostics); - - if (preprocessedFileInformation.isLibFile) { - resolutionResult.seenNoDefaultLibTag = true; - } - - var normalizedReferencePaths = []; - preprocessedFileInformation.referencedFiles.forEach(function (fileReference) { - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileReference.position, fileReference.length, false); - var normalizedReferencePath = _this.resolveIncludedFile(fileReference.path, currentReferenceLocation, resolutionResult); - normalizedReferencePaths.push(normalizedReferencePath); - }); - - var normalizedImportPaths = []; - for (var i = 0; i < preprocessedFileInformation.importedFiles.length; i++) { - var fileImport = preprocessedFileInformation.importedFiles[i]; - var currentReferenceLocation = new ReferenceLocation(normalizedPath, lineMap, fileImport.position, fileImport.length, true); - var normalizedImportPath = this.resolveImportedFile(fileImport.path, currentReferenceLocation, resolutionResult); - normalizedImportPaths.push(normalizedImportPath); - } - - resolutionResult.resolvedFiles.push({ - path: normalizedPath, - referencedFiles: normalizedReferencePaths, - importedFiles: normalizedImportPaths - }); - } else { - normalizedPath = visitedPath; - } - - return normalizedPath; - }; - - ReferenceResolver.prototype.getNormalizedFilePath = function (path, parentFilePath) { - var parentFileDirectory = parentFilePath ? this.host.getParentDirectory(parentFilePath) : ""; - var normalizedPath = this.host.resolveRelativePath(path, parentFileDirectory); - return normalizedPath; - }; - - ReferenceResolver.prototype.getUniqueFileId = function (filePath) { - return this.useCaseSensitiveFileResolution ? filePath : filePath.toLocaleUpperCase(); - }; - - ReferenceResolver.prototype.recordVisitedFile = function (filePath) { - this.visited[this.getUniqueFileId(filePath)] = filePath; - }; - - ReferenceResolver.prototype.isVisited = function (filePath) { - return this.visited[this.getUniqueFileId(filePath)]; - }; - - ReferenceResolver.prototype.isSameFile = function (filePath1, filePath2) { - if (!filePath1 || !filePath2) { - return false; - } - - if (this.useCaseSensitiveFileResolution) { - return filePath1 === filePath2; - } else { - return filePath1.toLocaleUpperCase() === filePath2.toLocaleUpperCase(); - } - }; - return ReferenceResolver; - })(); - TypeScript.ReferenceResolver = ReferenceResolver; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var TextWriter = (function () { - function TextWriter(name, writeByteOrderMark, outputFileType) { - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.outputFileType = outputFileType; - this.contents = ""; - this.onNewLine = true; - } - TextWriter.prototype.Write = function (s) { - this.contents += s; - this.onNewLine = false; - }; - - TextWriter.prototype.WriteLine = function (s) { - this.contents += s; - this.contents += TypeScript.newLine(); - this.onNewLine = true; - }; - - TextWriter.prototype.Close = function () { - }; - - TextWriter.prototype.getOutputFile = function () { - return new TypeScript.OutputFile(this.name, this.writeByteOrderMark, this.contents, this.outputFileType); - }; - return TextWriter; - })(); - TypeScript.TextWriter = TextWriter; - - var DeclarationEmitter = (function () { - function DeclarationEmitter(emittingFileName, document, compiler, emitOptions, semanticInfoChain) { - this.emittingFileName = emittingFileName; - this.document = document; - this.compiler = compiler; - this.emitOptions = emitOptions; - this.semanticInfoChain = semanticInfoChain; - this.declFile = null; - this.indenter = new TypeScript.Indenter(); - this.emittedReferencePaths = false; - this.declFile = new TextWriter(emittingFileName, this.document.byteOrderMark !== 0 /* None */, 2 /* Declaration */); - } - DeclarationEmitter.prototype.getOutputFile = function () { - return this.declFile.getOutputFile(); - }; - - DeclarationEmitter.prototype.emitDeclarations = function (sourceUnit) { - this.emitDeclarationsForSourceUnit(sourceUnit); - }; - - DeclarationEmitter.prototype.emitDeclarationsForList = function (list) { - for (var i = 0, n = list.childCount(); i < n; i++) { - this.emitDeclarationsForAST(list.childAt(i)); - } - }; - - DeclarationEmitter.prototype.emitSeparatedList = function (list) { - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.emitDeclarationsForAST(list.nonSeparatorAt(i)); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForAST = function (ast) { - switch (ast.kind()) { - case 148 /* VariableStatement */: - return this.emitDeclarationsForVariableStatement(ast); - case 141 /* PropertySignature */: - return this.emitPropertySignature(ast); - case 225 /* VariableDeclarator */: - return this.emitVariableDeclarator(ast, true, true); - case 136 /* MemberVariableDeclaration */: - return this.emitDeclarationsForMemberVariableDeclaration(ast); - case 137 /* ConstructorDeclaration */: - return this.emitDeclarationsForConstructorDeclaration(ast); - case 139 /* GetAccessor */: - return this.emitDeclarationsForGetAccessor(ast); - case 140 /* SetAccessor */: - return this.emitDeclarationsForSetAccessor(ast); - case 138 /* IndexMemberDeclaration */: - return this.emitIndexMemberDeclaration(ast); - case 144 /* IndexSignature */: - return this.emitIndexSignature(ast); - case 142 /* CallSignature */: - return this.emitCallSignature(ast); - case 143 /* ConstructSignature */: - return this.emitConstructSignature(ast); - case 145 /* MethodSignature */: - return this.emitMethodSignature(ast); - case 129 /* FunctionDeclaration */: - return this.emitDeclarationsForFunctionDeclaration(ast); - case 135 /* MemberFunctionDeclaration */: - return this.emitMemberFunctionDeclaration(ast); - case 131 /* ClassDeclaration */: - return this.emitDeclarationsForClassDeclaration(ast); - case 128 /* InterfaceDeclaration */: - return this.emitDeclarationsForInterfaceDeclaration(ast); - case 133 /* ImportDeclaration */: - return this.emitDeclarationsForImportDeclaration(ast); - case 130 /* ModuleDeclaration */: - return this.emitDeclarationsForModuleDeclaration(ast); - case 132 /* EnumDeclaration */: - return this.emitDeclarationsForEnumDeclaration(ast); - case 134 /* ExportAssignment */: - return this.emitDeclarationsForExportAssignment(ast); - } - }; - - DeclarationEmitter.prototype.getIndentString = function (declIndent) { - if (typeof declIndent === "undefined") { declIndent = false; } - return this.indenter.getIndent(); - }; - - DeclarationEmitter.prototype.emitIndent = function () { - this.declFile.Write(this.getIndentString()); - }; - - DeclarationEmitter.prototype.canEmitDeclarations = function (declAST) { - var container = DeclarationEmitter.getEnclosingContainer(declAST); - if (container.kind() === 130 /* ModuleDeclaration */ || container.kind() === 120 /* SourceUnit */) { - var pullDecl = this.semanticInfoChain.getDeclForAST(declAST); - if (!TypeScript.hasFlag(pullDecl.flags, 1 /* Exported */)) { - var start = new Date().getTime(); - var declSymbol = this.semanticInfoChain.getSymbolForAST(declAST); - var result = declSymbol && declSymbol.isExternallyVisible(); - TypeScript.declarationEmitIsExternallyVisibleTime += new Date().getTime() - start; - - return result; - } - } - - return true; - }; - - DeclarationEmitter.prototype.getDeclFlagsString = function (pullDecl, typeString) { - var result = this.getIndentString(); - var pullFlags = pullDecl.flags; - - if (TypeScript.hasFlag(pullFlags, 16 /* Static */)) { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } - result += "static "; - } else { - if (TypeScript.hasFlag(pullFlags, 2 /* Private */)) { - result += "private "; - } else if (TypeScript.hasFlag(pullFlags, 4 /* Public */)) { - result += "public "; - } else { - var emitDeclare = !TypeScript.hasFlag(pullFlags, 1 /* Exported */); - - var declAST = this.semanticInfoChain.getASTForDecl(pullDecl); - var container = DeclarationEmitter.getEnclosingContainer(declAST); - - var isExternalModule = container.kind() === 120 /* SourceUnit */ && this.document.isExternalModule(); - - if (isExternalModule && TypeScript.hasFlag(pullFlags, 1 /* Exported */)) { - result += "export "; - emitDeclare = true; - } - - if (isExternalModule || container.kind() === 120 /* SourceUnit */) { - if (emitDeclare && typeString !== "interface" && typeString !== "import") { - result += "declare "; - } - } - - result += typeString + " "; - } - } - - return result; - }; - - DeclarationEmitter.prototype.emitDeclFlags = function (declarationAST, typeString) { - this.declFile.Write(this.getDeclFlagsString(this.semanticInfoChain.getDeclForAST(declarationAST), typeString)); - }; - - DeclarationEmitter.prototype.emitTypeNamesMember = function (memberName, emitIndent) { - if (typeof emitIndent === "undefined") { emitIndent = false; } - if (memberName.prefix === "{ ") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.WriteLine("{"); - this.indenter.increaseIndent(); - emitIndent = true; - } else if (memberName.prefix !== "") { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.prefix); - emitIndent = false; - } - - if (memberName.isString()) { - if (emitIndent) { - this.emitIndent(); - } - - this.declFile.Write(memberName.text); - } else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - this.emitTypeNamesMember(ar.entries[index], emitIndent); - if (ar.delim === "; ") { - this.declFile.WriteLine(";"); - } - } - } - - if (memberName.suffix === "}") { - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.Write(memberName.suffix); - } else { - this.declFile.Write(memberName.suffix); - } - }; - - DeclarationEmitter.prototype.emitTypeSignature = function (ast, type) { - var declarationContainerAst = DeclarationEmitter.getEnclosingContainer(ast); - - var start = new Date().getTime(); - var declarationContainerDecl = this.semanticInfoChain.getDeclForAST(declarationContainerAst); - - var declarationPullSymbol = declarationContainerDecl.getSymbol(); - TypeScript.declarationEmitTypeSignatureTime += new Date().getTime() - start; - - var isNotAGenericType = ast.kind() !== 126 /* GenericType */; - - var typeNameMembers = type.getScopedNameEx(declarationPullSymbol, false, false, false, false, false, isNotAGenericType); - this.emitTypeNamesMember(typeNameMembers); - }; - - DeclarationEmitter.prototype.emitComment = function (comment) { - var text = TypeScript.getTrimmedTextLines(comment); - if (this.declFile.onNewLine) { - this.emitIndent(); - } else if (comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - this.emitIndent(); - } - - this.declFile.Write(text[0]); - - for (var i = 1; i < text.length; i++) { - this.declFile.WriteLine(""); - this.emitIndent(); - this.declFile.Write(text[i]); - } - - if (comment.endsLine || comment.kind() !== 6 /* MultiLineCommentTrivia */) { - this.declFile.WriteLine(""); - } else { - this.declFile.Write(" "); - } - }; - - DeclarationEmitter.prototype.emitDeclarationComments = function (astOrSymbol, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var declComments = astOrSymbol.docComments ? astOrSymbol.docComments() : TypeScript.ASTHelpers.docComments(astOrSymbol); - this.writeDeclarationComments(declComments, endLine); - }; - - DeclarationEmitter.prototype.writeDeclarationComments = function (declComments, endLine) { - if (typeof endLine === "undefined") { endLine = true; } - if (declComments.length > 0) { - for (var i = 0; i < declComments.length; i++) { - this.emitComment(declComments[i]); - } - - if (endLine) { - if (!this.declFile.onNewLine) { - this.declFile.WriteLine(""); - } - } else { - if (this.declFile.onNewLine) { - this.emitIndent(); - } - } - } - }; - - DeclarationEmitter.prototype.emitTypeOfVariableDeclaratorOrParameter = function (boundDecl) { - var start = new Date().getTime(); - var decl = this.semanticInfoChain.getDeclForAST(boundDecl); - var pullSymbol = decl.getSymbol(); - TypeScript.declarationEmitGetBoundDeclTypeTime += new Date().getTime() - start; - - var type = pullSymbol.type; - TypeScript.Debug.assert(type); - - this.declFile.Write(": "); - this.emitTypeSignature(boundDecl, type); - }; - - DeclarationEmitter.prototype.emitPropertySignature = function (varDecl) { - this.emitDeclarationComments(varDecl); - this.emitIndent(); - this.declFile.Write(varDecl.propertyName.text()); - if (varDecl.questionToken) { - this.declFile.Write("?"); - } - - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitVariableDeclarator = function (varDecl, isFirstVarInList, isLastVarInList) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - if (isFirstVarInList) { - this.emitDeclFlags(varDecl, "var"); - } - - this.declFile.Write(varDecl.propertyName.text()); - - if (!TypeScript.hasModifier(TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - if (isLastVarInList) { - this.declFile.WriteLine(";"); - } else { - this.declFile.Write(", "); - } - } - }; - - DeclarationEmitter.prototype.emitClassElementModifiers = function (modifiers) { - if (TypeScript.hasModifier(modifiers, 16 /* Static */)) { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } - this.declFile.Write("static "); - } else { - if (TypeScript.hasModifier(modifiers, 2 /* Private */)) { - this.declFile.Write("private "); - } else { - this.declFile.Write("public "); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForMemberVariableDeclaration = function (varDecl) { - if (this.canEmitDeclarations(varDecl)) { - this.emitDeclarationComments(varDecl); - - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(varDecl.modifiers); - ; - - this.declFile.Write(varDecl.variableDeclarator.propertyName.text()); - - if (!TypeScript.hasModifier(varDecl.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(varDecl); - } - - this.declFile.WriteLine(";"); - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableStatement = function (variableStatement) { - this.emitDeclarationsForVariableDeclaration(variableStatement.declaration); - }; - - DeclarationEmitter.prototype.emitDeclarationsForVariableDeclaration = function (variableDeclaration) { - var varListCount = variableDeclaration.declarators.nonSeparatorCount(); - for (var i = 0; i < varListCount; i++) { - this.emitVariableDeclarator(variableDeclaration.declarators.nonSeparatorAt(i), i === 0, i === varListCount - 1); - } - }; - - DeclarationEmitter.prototype.emitArgDecl = function (argDecl, id, isOptional, isPrivate) { - this.indenter.increaseIndent(); - - this.emitDeclarationComments(argDecl, false); - this.declFile.Write(id.text()); - if (isOptional) { - this.declFile.Write("?"); - } - - this.indenter.decreaseIndent(); - - if (!isPrivate) { - this.emitTypeOfVariableDeclaratorOrParameter(argDecl); - } - }; - - DeclarationEmitter.prototype.isOverloadedCallSignature = function (funcDecl) { - var start = new Date().getTime(); - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDecl.getSymbol(); - TypeScript.declarationEmitIsOverloadedCallSignatureTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - var signatures = funcTypeSymbol.getCallSignatures(); - var result = signatures && signatures.length > 1; - - return result; - }; - - DeclarationEmitter.prototype.emitDeclarationsForConstructorDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("constructor"); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitParameterList = function (isPrivate, parameterList) { - this.declFile.Write("("); - this.emitParameters(isPrivate, TypeScript.ASTHelpers.parametersFromParameterList(parameterList)); - this.declFile.Write(")"); - }; - - DeclarationEmitter.prototype.emitParameters = function (isPrivate, parameterList) { - var hasLastParameterRestParameter = parameterList.lastParameterIsRest(); - var argsLen = parameterList.length; - if (hasLastParameterRestParameter) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - this.emitArgDecl(parameterList.astAt(i), parameterList.identifierAt(i), parameterList.isOptionalAt(i), isPrivate); - if (i < (argsLen - 1)) { - this.declFile.Write(", "); - } - } - - if (hasLastParameterRestParameter) { - if (parameterList.length > 1) { - this.declFile.Write(", ..."); - } else { - this.declFile.Write("..."); - } - - var index = parameterList.length - 1; - this.emitArgDecl(parameterList.astAt(index), parameterList.identifierAt(index), parameterList.isOptionalAt(index), isPrivate); - } - }; - - DeclarationEmitter.prototype.emitMemberFunctionDeclaration = function (funcDecl) { - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - var funcTypeSymbol = funcSymbol.type; - if (funcDecl.block) { - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } else if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */) && this.isOverloadedCallSignature(funcDecl)) { - var callSignatures = funcTypeSymbol.getCallSignatures(); - TypeScript.Debug.assert(callSignatures && callSignatures.length > 1); - var firstSignature = callSignatures[0].isDefinition() ? callSignatures[1] : callSignatures[0]; - var firstSignatureDecl = firstSignature.getDeclarations()[0]; - var firstFuncDecl = this.semanticInfoChain.getASTForDecl(firstSignatureDecl); - if (firstFuncDecl !== funcDecl) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitDeclarationComments(funcDecl); - - this.emitDeclFlags(funcDecl, "function"); - var id = funcDecl.propertyName.text(); - this.declFile.Write(id); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - var isPrivate = TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */); - - this.emitParameterList(isPrivate, funcDecl.callSignature.parameterList); - - if (!isPrivate) { - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitCallSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - this.emitDeclarationComments(funcDecl); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.typeParameterList, funcSignature); - - this.emitIndent(); - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitConstructSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("new"); - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitMethodSignature = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write(funcDecl.propertyName.text()); - if (funcDecl.questionToken) { - this.declFile.Write("? "); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForFunctionDeclaration = function (funcDecl) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - - var start = new Date().getTime(); - var funcSymbol = this.semanticInfoChain.getSymbolForAST(funcDecl); - - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime += new Date().getTime() - start; - - if (funcDecl.block) { - var funcTypeSymbol = funcSymbol.type; - var constructSignatures = funcTypeSymbol.getConstructSignatures(); - if (constructSignatures && constructSignatures.length > 1) { - return; - } else if (this.isOverloadedCallSignature(funcDecl)) { - return; - } - } - - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - var id = funcDecl.identifier.text(); - this.emitDeclFlags(funcDecl, "function"); - if (id !== "" || !funcDecl.identifier || funcDecl.identifier.text().length > 0) { - this.declFile.Write(id); - } else if (funcPullDecl.kind === 2097152 /* ConstructSignature */) { - this.declFile.Write("new"); - } - - var funcSignature = funcPullDecl.getSignatureSymbol(); - this.emitTypeParameters(funcDecl.callSignature.typeParameterList, funcSignature); - - this.declFile.Write("("); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList)); - this.declFile.Write(")"); - - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - if (returnType) { - this.emitTypeSignature(funcDecl, returnType); - } else { - this.declFile.Write("any"); - } - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitIndexMemberDeclaration = function (funcDecl) { - this.emitDeclarationsForAST(funcDecl.indexSignature); - }; - - DeclarationEmitter.prototype.emitIndexSignature = function (funcDecl) { - if (!this.canEmitDeclarations(funcDecl)) { - return; - } - - this.emitDeclarationComments(funcDecl); - - this.emitIndent(); - this.declFile.Write("["); - this.emitParameters(false, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter)); - this.declFile.Write("]"); - - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSignature = funcPullDecl.getSignatureSymbol(); - var returnType = funcSignature.returnType; - this.declFile.Write(": "); - this.emitTypeSignature(funcDecl, returnType); - - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitBaseList = function (bases, useExtendsList) { - if (bases && (bases.nonSeparatorCount() > 0)) { - var qual = useExtendsList ? "extends" : "implements"; - this.declFile.Write(" " + qual + " "); - var basesLen = bases.nonSeparatorCount(); - for (var i = 0; i < basesLen; i++) { - if (i > 0) { - this.declFile.Write(", "); - } - var base = bases.nonSeparatorAt(i); - var baseType = this.semanticInfoChain.getSymbolForAST(base); - this.emitTypeSignature(base, baseType); - } - } - }; - - DeclarationEmitter.prototype.emitAccessorDeclarationComments = function (funcDecl) { - if (this.emitOptions.compilationSettings().removeComments()) { - return; - } - - var start = new Date().getTime(); - var accessors = TypeScript.PullHelpers.getGetterAndSetterFunction(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - var comments = []; - if (accessors.getter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.getter)); - } - if (accessors.setter) { - comments = comments.concat(TypeScript.ASTHelpers.docComments(accessors.setter)); - } - - this.writeDeclarationComments(comments); - }; - - DeclarationEmitter.prototype.emitDeclarationsForGetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitDeclarationsForSetAccessor = function (funcDecl) { - this.emitMemberAccessorDeclaration(funcDecl, funcDecl.modifiers, funcDecl.propertyName); - }; - - DeclarationEmitter.prototype.emitMemberAccessorDeclaration = function (funcDecl, modifiers, name) { - var start = new Date().getTime(); - var accessorSymbol = TypeScript.PullHelpers.getAccessorSymbol(funcDecl, this.semanticInfoChain); - TypeScript.declarationEmitGetAccessorFunctionTime += new Date().getTime(); - - if (funcDecl.kind() === 140 /* SetAccessor */ && accessorSymbol.getGetter()) { - return; - } - - var isPrivate = TypeScript.hasModifier(modifiers, 2 /* Private */); - this.emitAccessorDeclarationComments(funcDecl); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(modifiers); - this.declFile.Write(name.text()); - if (!isPrivate) { - this.declFile.Write(" : "); - var type = accessorSymbol.type; - this.emitTypeSignature(funcDecl, type); - } - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.emitClassMembersFromConstructorDefinition = function (funcDecl) { - var argsLen = funcDecl.callSignature.parameterList.parameters.nonSeparatorCount(); - if (TypeScript.lastParameterIsRest(funcDecl.callSignature.parameterList)) { - argsLen--; - } - - for (var i = 0; i < argsLen; i++) { - var parameter = funcDecl.callSignature.parameterList.parameters.nonSeparatorAt(i); - var parameterDecl = this.semanticInfoChain.getDeclForAST(parameter); - if (TypeScript.hasFlag(parameterDecl.flags, 8388608 /* PropertyParameter */)) { - var funcPullDecl = this.semanticInfoChain.getDeclForAST(funcDecl); - this.emitDeclarationComments(parameter); - this.declFile.Write(this.getIndentString()); - this.emitClassElementModifiers(parameter.modifiers); - this.declFile.Write(parameter.identifier.text()); - - if (!TypeScript.hasModifier(parameter.modifiers, 2 /* Private */)) { - this.emitTypeOfVariableDeclaratorOrParameter(parameter); - } - this.declFile.WriteLine(";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForClassDeclaration = function (classDecl) { - if (!this.canEmitDeclarations(classDecl)) { - return; - } - - var className = classDecl.identifier.text(); - this.emitDeclarationComments(classDecl); - var classPullDecl = this.semanticInfoChain.getDeclForAST(classDecl); - this.emitDeclFlags(classDecl, "class"); - this.declFile.Write(className); - - this.emitTypeParameters(classDecl.typeParameterList); - this.emitHeritageClauses(classDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - var constructorDecl = TypeScript.getLastConstructor(classDecl); - if (constructorDecl) { - this.emitClassMembersFromConstructorDefinition(constructorDecl); - } - - this.emitDeclarationsForList(classDecl.classElements); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitHeritageClauses = function (clauses) { - if (clauses) { - for (var i = 0, n = clauses.childCount(); i < n; i++) { - this.emitHeritageClause(clauses.childAt(i)); - } - } - }; - - DeclarationEmitter.prototype.emitHeritageClause = function (clause) { - this.emitBaseList(clause.typeNames, clause.kind() === 230 /* ExtendsHeritageClause */); - }; - - DeclarationEmitter.getEnclosingContainer = function (ast) { - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - ast = enclosingModule || ast; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */ || ast.kind() === 128 /* InterfaceDeclaration */ || ast.kind() === 130 /* ModuleDeclaration */ || ast.kind() === 120 /* SourceUnit */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - DeclarationEmitter.prototype.emitTypeParameters = function (typeParams, funcSignature) { - if (!typeParams || !typeParams.typeParameters.nonSeparatorCount()) { - return; - } - - this.declFile.Write("<"); - var containerAst = DeclarationEmitter.getEnclosingContainer(typeParams); - - var start = new Date().getTime(); - var containerDecl = this.semanticInfoChain.getDeclForAST(containerAst); - var containerSymbol = containerDecl.getSymbol(); - TypeScript.declarationEmitGetTypeParameterSymbolTime += new Date().getTime() - start; - - var typars; - if (funcSignature) { - typars = funcSignature.getTypeParameters(); - } else { - typars = containerSymbol.getTypeArgumentsOrTypeParameters(); - } - - for (var i = 0; i < typars.length; i++) { - if (i) { - this.declFile.Write(", "); - } - - var memberName = typars[i].getScopedNameEx(containerSymbol, false, true); - this.emitTypeNamesMember(memberName); - } - - this.declFile.Write(">"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForInterfaceDeclaration = function (interfaceDecl) { - if (!this.canEmitDeclarations(interfaceDecl)) { - return; - } - - var interfaceName = interfaceDecl.identifier.text(); - this.emitDeclarationComments(interfaceDecl); - var interfacePullDecl = this.semanticInfoChain.getDeclForAST(interfaceDecl); - this.emitDeclFlags(interfaceDecl, "interface"); - this.declFile.Write(interfaceName); - - this.emitTypeParameters(interfaceDecl.typeParameterList); - this.emitHeritageClauses(interfaceDecl.heritageClauses); - this.declFile.WriteLine(" {"); - - this.indenter.increaseIndent(); - - this.emitSeparatedList(interfaceDecl.body.typeMembers); - - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForImportDeclaration = function (importDeclAST) { - var importDecl = this.semanticInfoChain.getDeclForAST(importDeclAST); - var importSymbol = importDecl.getSymbol(); - var isExportedImportDecl = TypeScript.hasModifier(importDeclAST.modifiers, 1 /* Exported */); - - if (isExportedImportDecl || importSymbol.typeUsedExternally() || TypeScript.PullContainerSymbol.usedAsSymbol(importSymbol.getContainer(), importSymbol)) { - this.emitDeclarationComments(importDeclAST); - this.emitIndent(); - if (isExportedImportDecl) { - this.declFile.Write("export "); - } - this.declFile.Write("import "); - this.declFile.Write(importDeclAST.identifier.text() + " = "); - if (importDeclAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - this.declFile.WriteLine("require(" + importDeclAST.moduleReference.stringLiteral.text() + ");"); - } else { - this.declFile.WriteLine(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(importDeclAST.moduleReference.moduleName) + ";"); - } - } - }; - - DeclarationEmitter.prototype.emitDeclarationsForEnumDeclaration = function (moduleDecl) { - if (!this.canEmitDeclarations(moduleDecl)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - var modulePullDecl = this.semanticInfoChain.getDeclForAST(moduleDecl); - this.emitDeclFlags(moduleDecl, "enum"); - this.declFile.WriteLine(moduleDecl.identifier.text() + " {"); - - this.indenter.increaseIndent(); - var membersLen = moduleDecl.enumElements.nonSeparatorCount(); - for (var j = 0; j < membersLen; j++) { - var memberDecl = moduleDecl.enumElements.nonSeparatorAt(j); - var enumElement = memberDecl; - var enumElementDecl = this.semanticInfoChain.getDeclForAST(enumElement); - this.emitDeclarationComments(enumElement); - this.emitIndent(); - this.declFile.Write(enumElement.propertyName.text()); - if (enumElementDecl.constantValue !== null) { - this.declFile.Write(" = " + enumElementDecl.constantValue); - } - this.declFile.WriteLine(","); - } - this.indenter.decreaseIndent(); - - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForModuleDeclaration = function (moduleDecl) { - var name = moduleDecl.stringLiteral || TypeScript.ArrayUtilities.first(TypeScript.ASTHelpers.getModuleNames(moduleDecl.name)); - if (!this.canEmitDeclarations(name)) { - return; - } - - this.emitDeclarationComments(moduleDecl); - this.emitDeclFlags(name, "module"); - - if (moduleDecl.stringLiteral) { - this.declFile.Write(moduleDecl.stringLiteral.text()); - } else { - this.declFile.Write(TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(moduleDecl.name)); - } - - this.declFile.WriteLine(" {"); - this.indenter.increaseIndent(); - - this.emitDeclarationsForList(moduleDecl.moduleElements); - - this.indenter.decreaseIndent(); - this.emitIndent(); - this.declFile.WriteLine("}"); - }; - - DeclarationEmitter.prototype.emitDeclarationsForExportAssignment = function (ast) { - this.emitIndent(); - this.declFile.Write("export = "); - this.declFile.Write(ast.identifier.text()); - this.declFile.WriteLine(";"); - }; - - DeclarationEmitter.prototype.resolveScriptReference = function (document, reference) { - if (!this.emitOptions.compilationSettings().noResolve() || TypeScript.isRooted(reference)) { - return reference; - } - - var documentDir = TypeScript.convertToDirectoryPath(TypeScript.switchToForwardSlashes(TypeScript.getRootFilePath(document.fileName))); - var resolvedReferencePath = this.emitOptions.resolvePath(documentDir + reference); - return resolvedReferencePath; - }; - - DeclarationEmitter.prototype.emitReferencePaths = function (sourceUnit) { - if (this.emittedReferencePaths) { - return; - } - - var documents = []; - if (this.document.emitToOwnOutputFile()) { - var scriptReferences = this.document.referencedFiles; - var addedGlobalDocument = false; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(this.document, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.emitToOwnOutputFile() || document.isDeclareFile() || !addedGlobalDocument)) { - documents = documents.concat(document); - - if (!document.isDeclareFile() && document.isExternalModule()) { - addedGlobalDocument = true; - } - } - } - } else { - var fileNames = this.compiler.fileNames(); - for (var i = 0; i < fileNames.length; i++) { - var doc = this.compiler.getDocument(fileNames[i]); - if (!doc.isDeclareFile() && !doc.isExternalModule()) { - var scriptReferences = doc.referencedFiles; - for (var j = 0; j < scriptReferences.length; j++) { - var currentReference = this.resolveScriptReference(doc, scriptReferences[j]); - var document = this.compiler.getDocument(currentReference); - - if (document && (document.isDeclareFile() || document.isExternalModule())) { - for (var k = 0; k < documents.length; k++) { - if (documents[k] === document) { - break; - } - } - - if (k === documents.length) { - documents = documents.concat(document); - } - } - } - } - } - } - - var emittingFilePath = documents.length ? TypeScript.getRootFilePath(this.emittingFileName) : null; - for (var i = 0; i < documents.length; i++) { - var document = documents[i]; - var declFileName; - if (document.isDeclareFile()) { - declFileName = document.fileName; - } else { - declFileName = this.compiler.mapOutputFileName(document, this.emitOptions, TypeScript.TypeScriptCompiler.mapToDTSFileName); - } - - declFileName = TypeScript.getRelativePathToFixedPath(emittingFilePath, declFileName, false); - this.declFile.WriteLine('/// '); - } - - this.emittedReferencePaths = true; - }; - - DeclarationEmitter.prototype.emitDeclarationsForSourceUnit = function (sourceUnit) { - this.emitReferencePaths(sourceUnit); - this.emitDeclarationsForList(sourceUnit.moduleElements); - }; - return DeclarationEmitter; - })(); - TypeScript.DeclarationEmitter = DeclarationEmitter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var BloomFilter = (function () { - function BloomFilter(expectedCount) { - var m = Math.max(1, BloomFilter.computeM(expectedCount)); - var k = Math.max(1, BloomFilter.computeK(expectedCount)); - ; - - var sizeInEvenBytes = (m + 7) & ~7; - - this.bitArray = []; - for (var i = 0, len = sizeInEvenBytes; i < len; i++) { - this.bitArray[i] = false; - } - this.hashFunctionCount = k; - } - BloomFilter.computeM = function (expectedCount) { - var p = BloomFilter.falsePositiveProbability; - var n = expectedCount; - - var numerator = n * Math.log(p); - var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); - return Math.ceil(numerator / denominator); - }; - - BloomFilter.computeK = function (expectedCount) { - var n = expectedCount; - var m = BloomFilter.computeM(expectedCount); - - var temp = Math.log(2.0) * m / n; - return Math.round(temp); - }; - - BloomFilter.prototype.computeHash = function (key, seed) { - return TypeScript.Hash.computeMurmur2StringHashCode(key, seed); - }; - - BloomFilter.prototype.addKeys = function (keys) { - for (var name in keys) { - if (keys[name]) { - this.add(name); - } - } - }; - - BloomFilter.prototype.add = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - this.bitArray[Math.abs(hash)] = true; - } - }; - - BloomFilter.prototype.probablyContains = function (value) { - for (var i = 0; i < this.hashFunctionCount; i++) { - var hash = this.computeHash(value, i); - hash = hash % this.bitArray.length; - if (!this.bitArray[Math.abs(hash)]) { - return false; - } - } - - return true; - }; - - BloomFilter.prototype.isEquivalent = function (filter) { - return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount; - }; - - BloomFilter.isEquivalent = function (array1, array2) { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - }; - BloomFilter.falsePositiveProbability = 0.0001; - return BloomFilter; - })(); - TypeScript.BloomFilter = BloomFilter; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var IdentifierWalker = (function (_super) { - __extends(IdentifierWalker, _super); - function IdentifierWalker(list) { - _super.call(this); - this.list = list; - } - IdentifierWalker.prototype.visitToken = function (token) { - this.list[token.text()] = true; - }; - return IdentifierWalker; - })(TypeScript.SyntaxWalker); - TypeScript.IdentifierWalker = IdentifierWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CompilationSettings = (function () { - function CompilationSettings() { - this.propagateEnumConstants = false; - this.removeComments = false; - this.watch = false; - this.noResolve = false; - this.allowAutomaticSemicolonInsertion = true; - this.noImplicitAny = false; - this.noLib = false; - this.codeGenTarget = 0 /* EcmaScript3 */; - this.moduleGenTarget = 0 /* Unspecified */; - this.outFileOption = ""; - this.outDirOption = ""; - this.mapSourceFiles = false; - this.mapRoot = ""; - this.sourceRoot = ""; - this.generateDeclarationFiles = false; - this.useCaseSensitiveFileResolution = false; - this.gatherDiagnostics = false; - this.codepage = null; - this.createFileLog = false; - } - return CompilationSettings; - })(); - TypeScript.CompilationSettings = CompilationSettings; - - var ImmutableCompilationSettings = (function () { - function ImmutableCompilationSettings(propagateEnumConstants, removeComments, watch, noResolve, allowAutomaticSemicolonInsertion, noImplicitAny, noLib, codeGenTarget, moduleGenTarget, outFileOption, outDirOption, mapSourceFiles, mapRoot, sourceRoot, generateDeclarationFiles, useCaseSensitiveFileResolution, gatherDiagnostics, codepage, createFileLog) { - this._propagateEnumConstants = propagateEnumConstants; - this._removeComments = removeComments; - this._watch = watch; - this._noResolve = noResolve; - this._allowAutomaticSemicolonInsertion = allowAutomaticSemicolonInsertion; - this._noImplicitAny = noImplicitAny; - this._noLib = noLib; - this._codeGenTarget = codeGenTarget; - this._moduleGenTarget = moduleGenTarget; - this._outFileOption = outFileOption; - this._outDirOption = outDirOption; - this._mapSourceFiles = mapSourceFiles; - this._mapRoot = mapRoot; - this._sourceRoot = sourceRoot; - this._generateDeclarationFiles = generateDeclarationFiles; - this._useCaseSensitiveFileResolution = useCaseSensitiveFileResolution; - this._gatherDiagnostics = gatherDiagnostics; - this._codepage = codepage; - this._createFileLog = createFileLog; - } - ImmutableCompilationSettings.prototype.propagateEnumConstants = function () { - return this._propagateEnumConstants; - }; - ImmutableCompilationSettings.prototype.removeComments = function () { - return this._removeComments; - }; - ImmutableCompilationSettings.prototype.watch = function () { - return this._watch; - }; - ImmutableCompilationSettings.prototype.noResolve = function () { - return this._noResolve; - }; - ImmutableCompilationSettings.prototype.allowAutomaticSemicolonInsertion = function () { - return this._allowAutomaticSemicolonInsertion; - }; - ImmutableCompilationSettings.prototype.noImplicitAny = function () { - return this._noImplicitAny; - }; - ImmutableCompilationSettings.prototype.noLib = function () { - return this._noLib; - }; - ImmutableCompilationSettings.prototype.codeGenTarget = function () { - return this._codeGenTarget; - }; - ImmutableCompilationSettings.prototype.moduleGenTarget = function () { - return this._moduleGenTarget; - }; - ImmutableCompilationSettings.prototype.outFileOption = function () { - return this._outFileOption; - }; - ImmutableCompilationSettings.prototype.outDirOption = function () { - return this._outDirOption; - }; - ImmutableCompilationSettings.prototype.mapSourceFiles = function () { - return this._mapSourceFiles; - }; - ImmutableCompilationSettings.prototype.mapRoot = function () { - return this._mapRoot; - }; - ImmutableCompilationSettings.prototype.sourceRoot = function () { - return this._sourceRoot; - }; - ImmutableCompilationSettings.prototype.generateDeclarationFiles = function () { - return this._generateDeclarationFiles; - }; - ImmutableCompilationSettings.prototype.useCaseSensitiveFileResolution = function () { - return this._useCaseSensitiveFileResolution; - }; - ImmutableCompilationSettings.prototype.gatherDiagnostics = function () { - return this._gatherDiagnostics; - }; - ImmutableCompilationSettings.prototype.codepage = function () { - return this._codepage; - }; - ImmutableCompilationSettings.prototype.createFileLog = function () { - return this._createFileLog; - }; - - ImmutableCompilationSettings.defaultSettings = function () { - if (!ImmutableCompilationSettings._defaultSettings) { - ImmutableCompilationSettings._defaultSettings = ImmutableCompilationSettings.fromCompilationSettings(new CompilationSettings()); - } - - return ImmutableCompilationSettings._defaultSettings; - }; - - ImmutableCompilationSettings.fromCompilationSettings = function (settings) { - return new ImmutableCompilationSettings(settings.propagateEnumConstants, settings.removeComments, settings.watch, settings.noResolve, settings.allowAutomaticSemicolonInsertion, settings.noImplicitAny, settings.noLib, settings.codeGenTarget, settings.moduleGenTarget, settings.outFileOption, settings.outDirOption, settings.mapSourceFiles, settings.mapRoot, settings.sourceRoot, settings.generateDeclarationFiles, settings.useCaseSensitiveFileResolution, settings.gatherDiagnostics, settings.codepage, settings.createFileLog); - }; - - ImmutableCompilationSettings.prototype.toCompilationSettings = function () { - var result = new CompilationSettings(); - - var thisAsIndexable = this; - var resultAsIndexable = result; - for (var name in this) { - if (this.hasOwnProperty(name) && TypeScript.StringUtilities.startsWith(name, "_")) { - resultAsIndexable[name.substr(1)] = thisAsIndexable[name]; - } - } - - return result; - }; - return ImmutableCompilationSettings; - })(); - TypeScript.ImmutableCompilationSettings = ImmutableCompilationSettings; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullElementFlags) { - PullElementFlags[PullElementFlags["None"] = 0] = "None"; - PullElementFlags[PullElementFlags["Exported"] = 1] = "Exported"; - PullElementFlags[PullElementFlags["Private"] = 1 << 1] = "Private"; - PullElementFlags[PullElementFlags["Public"] = 1 << 2] = "Public"; - PullElementFlags[PullElementFlags["Ambient"] = 1 << 3] = "Ambient"; - PullElementFlags[PullElementFlags["Static"] = 1 << 4] = "Static"; - PullElementFlags[PullElementFlags["Optional"] = 1 << 7] = "Optional"; - PullElementFlags[PullElementFlags["Signature"] = 1 << 11] = "Signature"; - PullElementFlags[PullElementFlags["Enum"] = 1 << 12] = "Enum"; - PullElementFlags[PullElementFlags["ArrowFunction"] = 1 << 13] = "ArrowFunction"; - - PullElementFlags[PullElementFlags["ClassConstructorVariable"] = 1 << 14] = "ClassConstructorVariable"; - PullElementFlags[PullElementFlags["InitializedModule"] = 1 << 15] = "InitializedModule"; - PullElementFlags[PullElementFlags["InitializedDynamicModule"] = 1 << 16] = "InitializedDynamicModule"; - - PullElementFlags[PullElementFlags["MustCaptureThis"] = 1 << 18] = "MustCaptureThis"; - - PullElementFlags[PullElementFlags["DeclaredInAWithBlock"] = 1 << 21] = "DeclaredInAWithBlock"; - - PullElementFlags[PullElementFlags["HasReturnStatement"] = 1 << 22] = "HasReturnStatement"; - - PullElementFlags[PullElementFlags["PropertyParameter"] = 1 << 23] = "PropertyParameter"; - - PullElementFlags[PullElementFlags["IsAnnotatedWithAny"] = 1 << 24] = "IsAnnotatedWithAny"; - - PullElementFlags[PullElementFlags["HasDefaultArgs"] = 1 << 25] = "HasDefaultArgs"; - - PullElementFlags[PullElementFlags["ConstructorParameter"] = 1 << 26] = "ConstructorParameter"; - - PullElementFlags[PullElementFlags["ImplicitVariable"] = PullElementFlags.ClassConstructorVariable | PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "ImplicitVariable"; - PullElementFlags[PullElementFlags["SomeInitializedModule"] = PullElementFlags.InitializedModule | PullElementFlags.InitializedDynamicModule | PullElementFlags.Enum] = "SomeInitializedModule"; - })(TypeScript.PullElementFlags || (TypeScript.PullElementFlags = {})); - var PullElementFlags = TypeScript.PullElementFlags; - - function hasModifier(modifiers, flag) { - for (var i = 0, n = modifiers.length; i < n; i++) { - if (TypeScript.hasFlag(modifiers[i], flag)) { - return true; - } - } - - return false; - } - TypeScript.hasModifier = hasModifier; - - (function (PullElementKind) { - PullElementKind[PullElementKind["None"] = 0] = "None"; - PullElementKind[PullElementKind["Global"] = 0] = "Global"; - - PullElementKind[PullElementKind["Script"] = 1 << 0] = "Script"; - PullElementKind[PullElementKind["Primitive"] = 1 << 1] = "Primitive"; - - PullElementKind[PullElementKind["Container"] = 1 << 2] = "Container"; - PullElementKind[PullElementKind["Class"] = 1 << 3] = "Class"; - PullElementKind[PullElementKind["Interface"] = 1 << 4] = "Interface"; - PullElementKind[PullElementKind["DynamicModule"] = 1 << 5] = "DynamicModule"; - PullElementKind[PullElementKind["Enum"] = 1 << 6] = "Enum"; - PullElementKind[PullElementKind["TypeAlias"] = 1 << 7] = "TypeAlias"; - PullElementKind[PullElementKind["ObjectLiteral"] = 1 << 8] = "ObjectLiteral"; - - PullElementKind[PullElementKind["Variable"] = 1 << 9] = "Variable"; - PullElementKind[PullElementKind["CatchVariable"] = 1 << 10] = "CatchVariable"; - PullElementKind[PullElementKind["Parameter"] = 1 << 11] = "Parameter"; - PullElementKind[PullElementKind["Property"] = 1 << 12] = "Property"; - PullElementKind[PullElementKind["TypeParameter"] = 1 << 13] = "TypeParameter"; - - PullElementKind[PullElementKind["Function"] = 1 << 14] = "Function"; - PullElementKind[PullElementKind["ConstructorMethod"] = 1 << 15] = "ConstructorMethod"; - PullElementKind[PullElementKind["Method"] = 1 << 16] = "Method"; - PullElementKind[PullElementKind["FunctionExpression"] = 1 << 17] = "FunctionExpression"; - - PullElementKind[PullElementKind["GetAccessor"] = 1 << 18] = "GetAccessor"; - PullElementKind[PullElementKind["SetAccessor"] = 1 << 19] = "SetAccessor"; - - PullElementKind[PullElementKind["CallSignature"] = 1 << 20] = "CallSignature"; - PullElementKind[PullElementKind["ConstructSignature"] = 1 << 21] = "ConstructSignature"; - PullElementKind[PullElementKind["IndexSignature"] = 1 << 22] = "IndexSignature"; - - PullElementKind[PullElementKind["ObjectType"] = 1 << 23] = "ObjectType"; - PullElementKind[PullElementKind["FunctionType"] = 1 << 24] = "FunctionType"; - PullElementKind[PullElementKind["ConstructorType"] = 1 << 25] = "ConstructorType"; - - PullElementKind[PullElementKind["EnumMember"] = 1 << 26] = "EnumMember"; - - PullElementKind[PullElementKind["WithBlock"] = 1 << 27] = "WithBlock"; - PullElementKind[PullElementKind["CatchBlock"] = 1 << 28] = "CatchBlock"; - - PullElementKind[PullElementKind["All"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Container | PullElementKind.Class | PullElementKind.Interface | PullElementKind.DynamicModule | PullElementKind.Enum | PullElementKind.TypeAlias | PullElementKind.ObjectLiteral | PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.TypeParameter | PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor | PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.EnumMember | PullElementKind.WithBlock | PullElementKind.CatchBlock] = "All"; - - PullElementKind[PullElementKind["SomeFunction"] = PullElementKind.Function | PullElementKind.ConstructorMethod | PullElementKind.Method | PullElementKind.FunctionExpression | PullElementKind.GetAccessor | PullElementKind.SetAccessor] = "SomeFunction"; - - PullElementKind[PullElementKind["SomeValue"] = PullElementKind.Variable | PullElementKind.Parameter | PullElementKind.Property | PullElementKind.EnumMember | PullElementKind.SomeFunction] = "SomeValue"; - - PullElementKind[PullElementKind["SomeType"] = PullElementKind.Script | PullElementKind.Global | PullElementKind.Primitive | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.ObjectLiteral | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType | PullElementKind.TypeParameter] = "SomeType"; - - PullElementKind[PullElementKind["AcceptableAlias"] = PullElementKind.Variable | PullElementKind.SomeFunction | PullElementKind.Class | PullElementKind.Interface | PullElementKind.Enum | PullElementKind.Container | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "AcceptableAlias"; - - PullElementKind[PullElementKind["SomeContainer"] = PullElementKind.Container | PullElementKind.DynamicModule | PullElementKind.TypeAlias] = "SomeContainer"; - - PullElementKind[PullElementKind["SomeSignature"] = PullElementKind.CallSignature | PullElementKind.ConstructSignature | PullElementKind.IndexSignature] = "SomeSignature"; - - PullElementKind[PullElementKind["SomeTypeReference"] = PullElementKind.Interface | PullElementKind.ObjectType | PullElementKind.FunctionType | PullElementKind.ConstructorType] = "SomeTypeReference"; - - PullElementKind[PullElementKind["SomeInstantiatableType"] = PullElementKind.Class | PullElementKind.Interface | PullElementKind.TypeParameter] = "SomeInstantiatableType"; - })(TypeScript.PullElementKind || (TypeScript.PullElementKind = {})); - var PullElementKind = TypeScript.PullElementKind; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var pullDeclID = 0; - var sentinelEmptyPullDeclArray = []; - - var PullDecl = (function () { - function PullDecl(declName, displayName, kind, declFlags, semanticInfoChain) { - this.declID = pullDeclID++; - this.flags = 0 /* None */; - this.declGroups = null; - this.childDecls = null; - this.typeParameters = null; - this.synthesizedValDecl = null; - this.containerDecl = null; - this.childDeclTypeCache = null; - this.childDeclValueCache = null; - this.childDeclNamespaceCache = null; - this.childDeclTypeParameterCache = null; - this.name = declName; - this.kind = kind; - this.flags = declFlags; - this.semanticInfoChain = semanticInfoChain; - - if (displayName !== this.name) { - this.declDisplayName = displayName; - } - } - PullDecl.prototype.fileName = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentPath = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getParentDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.isExternalModule = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype.getEnclosingDecl = function () { - throw TypeScript.Errors.abstract(); - }; - - PullDecl.prototype._getEnclosingDeclFromParentDecl = function () { - var decl = this; - while (decl) { - switch (decl.kind) { - default: - return decl; - case 512 /* Variable */: - case 8192 /* TypeParameter */: - case 2048 /* Parameter */: - case 128 /* TypeAlias */: - case 67108864 /* EnumMember */: - } - - decl = decl.getParentDecl(); - } - - TypeScript.Debug.fail(); - }; - - PullDecl.prototype.getDisplayName = function () { - return this.declDisplayName === undefined ? this.name : this.declDisplayName; - }; - - PullDecl.prototype.setSymbol = function (symbol) { - this.semanticInfoChain.setSymbolForDecl(this, symbol); - }; - - PullDecl.prototype.ensureSymbolIsBound = function () { - if (!this.hasBeenBound() && this.kind !== 1 /* Script */) { - var binder = this.semanticInfoChain.getBinder(); - binder.bindDeclToPullSymbol(this); - } - }; - - PullDecl.prototype.getSymbol = function () { - if (this.kind === 1 /* Script */) { - return null; - } - - this.ensureSymbolIsBound(); - - return this.semanticInfoChain.getSymbolForDecl(this); - }; - - PullDecl.prototype.hasSymbol = function () { - var symbol = this.semanticInfoChain.getSymbolForDecl(this); - return !!symbol; - }; - - PullDecl.prototype.setSignatureSymbol = function (signatureSymbol) { - this.semanticInfoChain.setSignatureSymbolForDecl(this, signatureSymbol); - }; - - PullDecl.prototype.getSignatureSymbol = function () { - this.ensureSymbolIsBound(); - return this.semanticInfoChain.getSignatureSymbolForDecl(this); - }; - - PullDecl.prototype.hasSignatureSymbol = function () { - var signatureSymbol = this.semanticInfoChain.getSignatureSymbolForDecl(this); - return !!signatureSymbol; - }; - - PullDecl.prototype.setFlags = function (flags) { - this.flags = flags; - }; - - PullDecl.prototype.setFlag = function (flags) { - this.flags |= flags; - }; - - PullDecl.prototype.setValueDecl = function (valDecl) { - this.synthesizedValDecl = valDecl; - valDecl.containerDecl = this; - }; - - PullDecl.prototype.getValueDecl = function () { - return this.synthesizedValDecl; - }; - - PullDecl.prototype.getContainerDecl = function () { - return this.containerDecl; - }; - - PullDecl.prototype.getChildDeclCache = function (declKind) { - if (declKind === 8192 /* TypeParameter */) { - if (!this.childDeclTypeParameterCache) { - this.childDeclTypeParameterCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeParameterCache; - } else if (TypeScript.hasFlag(declKind, 164 /* SomeContainer */)) { - if (!this.childDeclNamespaceCache) { - this.childDeclNamespaceCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclNamespaceCache; - } else if (TypeScript.hasFlag(declKind, 58728795 /* SomeType */)) { - if (!this.childDeclTypeCache) { - this.childDeclTypeCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclTypeCache; - } else { - if (!this.childDeclValueCache) { - this.childDeclValueCache = TypeScript.createIntrinsicsObject(); - } - - return this.childDeclValueCache; - } - }; - - PullDecl.prototype.addChildDecl = function (childDecl) { - if (childDecl.kind === 8192 /* TypeParameter */) { - if (!this.typeParameters) { - this.typeParameters = []; - } - this.typeParameters[this.typeParameters.length] = childDecl; - } else { - if (!this.childDecls) { - this.childDecls = []; - } - this.childDecls[this.childDecls.length] = childDecl; - } - - var declName = childDecl.name; - - if (!(childDecl.kind & 7340032 /* SomeSignature */)) { - var cache = this.getChildDeclCache(childDecl.kind); - var childrenOfName = cache[declName]; - if (!childrenOfName) { - childrenOfName = []; - } - - childrenOfName.push(childDecl); - cache[declName] = childrenOfName; - } - }; - - PullDecl.prototype.searchChildDecls = function (declName, searchKind) { - var cacheVal = null; - - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeCache ? this.childDeclTypeCache[declName] : null; - } else if (searchKind & 164 /* SomeContainer */) { - cacheVal = this.childDeclNamespaceCache ? this.childDeclNamespaceCache[declName] : null; - } else { - cacheVal = this.childDeclValueCache ? this.childDeclValueCache[declName] : null; - } - - if (cacheVal) { - return cacheVal; - } else { - if (searchKind & 58728795 /* SomeType */) { - cacheVal = this.childDeclTypeParameterCache ? this.childDeclTypeParameterCache[declName] : null; - - if (cacheVal) { - return cacheVal; - } - } - - return sentinelEmptyPullDeclArray; - } - }; - - PullDecl.prototype.getChildDecls = function () { - return this.childDecls || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.getTypeParameters = function () { - return this.typeParameters || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.addVariableDeclToGroup = function (decl) { - if (!this.declGroups) { - this.declGroups = TypeScript.createIntrinsicsObject(); - } - - var declGroup = this.declGroups[decl.name]; - if (declGroup) { - declGroup.addDecl(decl); - } else { - declGroup = new PullDeclGroup(decl.name); - declGroup.addDecl(decl); - this.declGroups[decl.name] = declGroup; - } - }; - - PullDecl.prototype.getVariableDeclGroups = function () { - var declGroups = null; - - if (this.declGroups) { - for (var declName in this.declGroups) { - if (this.declGroups[declName]) { - if (declGroups === null) { - declGroups = []; - } - - declGroups.push(this.declGroups[declName].getDecls()); - } - } - } - - return declGroups || sentinelEmptyPullDeclArray; - }; - - PullDecl.prototype.hasBeenBound = function () { - return this.hasSymbol() || this.hasSignatureSymbol(); - }; - - PullDecl.prototype.isSynthesized = function () { - return false; - }; - - PullDecl.prototype.ast = function () { - return this.semanticInfoChain.getASTForDecl(this); - }; - - PullDecl.prototype.isRootDecl = function () { - throw TypeScript.Errors.abstract(); - }; - return PullDecl; - })(); - TypeScript.PullDecl = PullDecl; - - var RootPullDecl = (function (_super) { - __extends(RootPullDecl, _super); - function RootPullDecl(name, fileName, kind, declFlags, semanticInfoChain, isExternalModule) { - _super.call(this, name, name, kind, declFlags, semanticInfoChain); - this.semanticInfoChain = semanticInfoChain; - this._isExternalModule = isExternalModule; - this._fileName = fileName; - } - RootPullDecl.prototype.fileName = function () { - return this._fileName; - }; - - RootPullDecl.prototype.getParentPath = function () { - return [this]; - }; - - RootPullDecl.prototype.getParentDecl = function () { - return null; - }; - - RootPullDecl.prototype.isExternalModule = function () { - return this._isExternalModule; - }; - - RootPullDecl.prototype.getEnclosingDecl = function () { - return this; - }; - - RootPullDecl.prototype.isRootDecl = function () { - return true; - }; - return RootPullDecl; - })(PullDecl); - TypeScript.RootPullDecl = RootPullDecl; - - var NormalPullDecl = (function (_super) { - __extends(NormalPullDecl, _super); - function NormalPullDecl(declName, displayName, kind, declFlags, parentDecl, addToParent) { - if (typeof addToParent === "undefined") { addToParent = true; } - _super.call(this, declName, displayName, kind, declFlags, parentDecl ? parentDecl.semanticInfoChain : null); - this.parentDecl = null; - this.parentPath = null; - - this.parentDecl = parentDecl; - if (addToParent) { - parentDecl.addChildDecl(this); - } - - if (this.parentDecl) { - if (this.parentDecl.isRootDecl()) { - this._rootDecl = this.parentDecl; - } else { - this._rootDecl = this.parentDecl._rootDecl; - } - } else { - TypeScript.Debug.assert(this.isSynthesized()); - this._rootDecl = null; - } - } - NormalPullDecl.prototype.fileName = function () { - return this._rootDecl.fileName(); - }; - - NormalPullDecl.prototype.getParentDecl = function () { - return this.parentDecl; - }; - - NormalPullDecl.prototype.getParentPath = function () { - if (!this.parentPath) { - var path = [this]; - var parentDecl = this.parentDecl; - - while (parentDecl) { - if (parentDecl && path[path.length - 1] !== parentDecl && !(parentDecl.kind & (256 /* ObjectLiteral */ | 8388608 /* ObjectType */))) { - path.unshift(parentDecl); - } - - parentDecl = parentDecl.getParentDecl(); - } - - this.parentPath = path; - } - - return this.parentPath; - }; - - NormalPullDecl.prototype.isExternalModule = function () { - return false; - }; - - NormalPullDecl.prototype.getEnclosingDecl = function () { - return this.parentDecl && this.parentDecl._getEnclosingDeclFromParentDecl(); - }; - - NormalPullDecl.prototype.isRootDecl = function () { - return false; - }; - return NormalPullDecl; - })(PullDecl); - TypeScript.NormalPullDecl = NormalPullDecl; - - var PullEnumElementDecl = (function (_super) { - __extends(PullEnumElementDecl, _super); - function PullEnumElementDecl(declName, displayName, parentDecl) { - _super.call(this, declName, displayName, 67108864 /* EnumMember */, 4 /* Public */, parentDecl); - this.constantValue = null; - } - return PullEnumElementDecl; - })(NormalPullDecl); - TypeScript.PullEnumElementDecl = PullEnumElementDecl; - - var PullFunctionExpressionDecl = (function (_super) { - __extends(PullFunctionExpressionDecl, _super); - function PullFunctionExpressionDecl(expressionName, declFlags, parentDecl, displayName) { - if (typeof displayName === "undefined") { displayName = ""; } - _super.call(this, "", displayName, 131072 /* FunctionExpression */, declFlags, parentDecl); - this.functionExpressionName = expressionName; - } - PullFunctionExpressionDecl.prototype.getFunctionExpressionName = function () { - return this.functionExpressionName; - }; - return PullFunctionExpressionDecl; - })(NormalPullDecl); - TypeScript.PullFunctionExpressionDecl = PullFunctionExpressionDecl; - - var PullSynthesizedDecl = (function (_super) { - __extends(PullSynthesizedDecl, _super); - function PullSynthesizedDecl(declName, displayName, kind, declFlags, parentDecl, semanticInfoChain) { - _super.call(this, declName, displayName, kind, declFlags, parentDecl, false); - this.semanticInfoChain = semanticInfoChain; - } - PullSynthesizedDecl.prototype.isSynthesized = function () { - return true; - }; - - PullSynthesizedDecl.prototype.fileName = function () { - return this._rootDecl ? this._rootDecl.fileName() : ""; - }; - return PullSynthesizedDecl; - })(NormalPullDecl); - TypeScript.PullSynthesizedDecl = PullSynthesizedDecl; - - var PullDeclGroup = (function () { - function PullDeclGroup(name) { - this.name = name; - this._decls = []; - } - PullDeclGroup.prototype.addDecl = function (decl) { - if (decl.name === this.name) { - this._decls[this._decls.length] = decl; - } - }; - - PullDeclGroup.prototype.getDecls = function () { - return this._decls; - }; - return PullDeclGroup; - })(); - TypeScript.PullDeclGroup = PullDeclGroup; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.pullSymbolID = 0; - TypeScript.sentinelEmptyArray = []; - - var PullSymbol = (function () { - function PullSymbol(name, declKind) { - this.pullSymbolID = ++TypeScript.pullSymbolID; - this._container = null; - this.type = null; - this._declarations = null; - this.isResolved = false; - this.isOptional = false; - this.inResolution = false; - this.isSynthesized = false; - this.isVarArg = false; - this.rootSymbol = null; - this._enclosingSignature = null; - this._docComments = null; - this.isPrinting = false; - this.name = name; - this.kind = declKind; - } - PullSymbol.prototype.isAny = function () { - return false; - }; - - PullSymbol.prototype.isType = function () { - return (this.kind & 58728795 /* SomeType */) !== 0; - }; - - PullSymbol.prototype.isTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isSignature = function () { - return (this.kind & 7340032 /* SomeSignature */) !== 0; - }; - - PullSymbol.prototype.isArrayNamedTypeReference = function () { - return false; - }; - - PullSymbol.prototype.isPrimitive = function () { - return this.kind === 2 /* Primitive */; - }; - - PullSymbol.prototype.isAccessor = function () { - return false; - }; - - PullSymbol.prototype.isError = function () { - return false; - }; - - PullSymbol.prototype.isInterface = function () { - return this.kind === 16 /* Interface */; - }; - - PullSymbol.prototype.isMethod = function () { - return this.kind === 65536 /* Method */; - }; - - PullSymbol.prototype.isProperty = function () { - return this.kind === 4096 /* Property */; - }; - - PullSymbol.prototype.isAlias = function () { - return false; - }; - - PullSymbol.prototype.isContainer = function () { - return false; - }; - - PullSymbol.prototype.findAliasedTypeSymbols = function (scopeSymbol, skipScopeSymbolAliasesLookIn, lookIntoOnlyExportedAlias, aliasSymbols, visitedScopeDeclarations) { - if (typeof aliasSymbols === "undefined") { aliasSymbols = []; } - if (typeof visitedScopeDeclarations === "undefined") { visitedScopeDeclarations = []; } - var scopeDeclarations = scopeSymbol.getDeclarations(); - var scopeSymbolAliasesToLookIn = []; - - for (var i = 0; i < scopeDeclarations.length; i++) { - var scopeDecl = scopeDeclarations[i]; - if (!TypeScript.ArrayUtilities.contains(visitedScopeDeclarations, scopeDecl)) { - visitedScopeDeclarations.push(scopeDecl); - - var childDecls = scopeDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; j++) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */ && (!lookIntoOnlyExportedAlias || (childDecl.flags & 1 /* Exported */))) { - var symbol = childDecl.getSymbol(); - - if (PullContainerSymbol.usedAsSymbol(symbol, this) || (this.rootSymbol && PullContainerSymbol.usedAsSymbol(symbol, this.rootSymbol))) { - aliasSymbols.push(symbol); - return aliasSymbols; - } - - if (!skipScopeSymbolAliasesLookIn && PullSymbol._isExternalModuleReferenceAlias(symbol) && (!symbol.assignedContainer().hasExportAssignment() || (symbol.assignedContainer().getExportAssignedContainerSymbol() && symbol.assignedContainer().getExportAssignedContainerSymbol().kind === 32 /* DynamicModule */))) { - scopeSymbolAliasesToLookIn.push(symbol); - } - } - } - } - } - - for (var i = 0; i < scopeSymbolAliasesToLookIn.length; i++) { - var scopeSymbolAlias = scopeSymbolAliasesToLookIn[i]; - - aliasSymbols.push(scopeSymbolAlias); - var result = this.findAliasedTypeSymbols(scopeSymbolAlias.assignedContainer().hasExportAssignment() ? scopeSymbolAlias.assignedContainer().getExportAssignedContainerSymbol() : scopeSymbolAlias.assignedContainer(), false, true, aliasSymbols, visitedScopeDeclarations); - if (result) { - return result; - } - - aliasSymbols.pop(); - } - - return null; - }; - - PullSymbol.prototype.getExternalAliasedSymbols = function (scopeSymbol) { - if (!scopeSymbol) { - return null; - } - - var scopePath = scopeSymbol.pathToRoot(); - if (scopePath.length && scopePath[scopePath.length - 1].kind === 32 /* DynamicModule */) { - var symbols = this.findAliasedTypeSymbols(scopePath[scopePath.length - 1]); - return symbols; - } - - return null; - }; - - PullSymbol._isExternalModuleReferenceAlias = function (aliasSymbol) { - if (aliasSymbol) { - if (aliasSymbol.assignedValue()) { - return false; - } - - if (aliasSymbol.assignedType() && aliasSymbol.assignedType() !== aliasSymbol.assignedContainer()) { - return false; - } - - if (aliasSymbol.assignedContainer() && aliasSymbol.assignedContainer().kind !== 32 /* DynamicModule */) { - return false; - } - - return true; - } - - return false; - }; - - PullSymbol.prototype.getExportedInternalAliasSymbol = function (scopeSymbol) { - if (scopeSymbol) { - if (this.kind !== 128 /* TypeAlias */) { - var scopePath = scopeSymbol.pathToRoot(); - for (var i = 0; i < scopePath.length; i++) { - var internalAliases = this.findAliasedTypeSymbols(scopeSymbol, true, true); - if (internalAliases) { - TypeScript.Debug.assert(internalAliases.length === 1); - return internalAliases[0]; - } - } - } - } - - return null; - }; - - PullSymbol.prototype.getAliasSymbolName = function (scopeSymbol, aliasNameGetter, aliasPartsNameGetter, skipInternalAlias) { - if (!skipInternalAlias) { - var internalAlias = this.getExportedInternalAliasSymbol(scopeSymbol); - if (internalAlias) { - return aliasNameGetter(internalAlias); - } - } - - var externalAliases = this.getExternalAliasedSymbols(scopeSymbol); - - if (externalAliases && externalAliases[0] != this && PullSymbol._isExternalModuleReferenceAlias(externalAliases[externalAliases.length - 1])) { - var aliasFullName = aliasNameGetter(externalAliases[0]); - if (!aliasFullName) { - return null; - } - for (var i = 1, symbolsLen = externalAliases.length; i < symbolsLen; i++) { - aliasFullName = aliasFullName + "." + aliasPartsNameGetter(externalAliases[i]); - } - return aliasFullName; - } - - return null; - }; - - PullSymbol.prototype._getResolver = function () { - TypeScript.Debug.assert(this._declarations && this._declarations.length > 0); - return this._declarations[0].semanticInfoChain.getResolver(); - }; - - PullSymbol.prototype._resolveDeclaredSymbol = function () { - return this._getResolver().resolveDeclaredSymbol(this); - }; - - PullSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var aliasName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getName(); - }); - return aliasName || this.name; - }; - - PullSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var aliasDisplayName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getDisplayName(scopeSymbol, useConstraintInName); - }, function (symbol) { - return symbol.getDisplayName(); - }, skipInternalAliasName); - if (aliasDisplayName) { - return aliasDisplayName; - } - - var decls = this.getDeclarations(); - var name = decls.length && decls[0].getDisplayName(); - - return (name && name.length) ? name : this.name; - }; - - PullSymbol.prototype.getIsSpecialized = function () { - return false; - }; - - PullSymbol.prototype.getRootSymbol = function () { - if (!this.rootSymbol) { - return this; - } - return this.rootSymbol; - }; - PullSymbol.prototype.setRootSymbol = function (symbol) { - this.rootSymbol = symbol; - }; - - PullSymbol.prototype.setIsSynthesized = function (value) { - if (typeof value === "undefined") { value = true; } - TypeScript.Debug.assert(this.rootSymbol == null); - this.isSynthesized = value; - }; - - PullSymbol.prototype.getIsSynthesized = function () { - if (this.rootSymbol) { - return this.rootSymbol.getIsSynthesized(); - } - return this.isSynthesized; - }; - - PullSymbol.prototype.setEnclosingSignature = function (signature) { - this._enclosingSignature = signature; - }; - - PullSymbol.prototype.getEnclosingSignature = function () { - return this._enclosingSignature; - }; - - PullSymbol.prototype.addDeclaration = function (decl) { - TypeScript.Debug.assert(!!decl); - - if (this.rootSymbol) { - return; - } - - if (!this._declarations) { - this._declarations = [decl]; - } else { - this._declarations[this._declarations.length] = decl; - } - }; - - PullSymbol.prototype.getDeclarations = function () { - if (this.rootSymbol) { - return this.rootSymbol.getDeclarations(); - } - - if (!this._declarations) { - this._declarations = []; - } - - return this._declarations; - }; - - PullSymbol.prototype.hasDeclaration = function (decl) { - if (!this._declarations) { - return false; - } - - return TypeScript.ArrayUtilities.any(this._declarations, function (eachDecl) { - return eachDecl === decl; - }); - }; - - PullSymbol.prototype.setContainer = function (containerSymbol) { - if (this.rootSymbol) { - return; - } - - this._container = containerSymbol; - }; - - PullSymbol.prototype.getContainer = function () { - if (this.rootSymbol) { - return this.rootSymbol.getContainer(); - } - - return this._container; - }; - - PullSymbol.prototype.setResolved = function () { - this.isResolved = true; - this.inResolution = false; - }; - - PullSymbol.prototype.startResolving = function () { - this.inResolution = true; - }; - - PullSymbol.prototype.setUnresolved = function () { - this.isResolved = false; - this.inResolution = false; - }; - - PullSymbol.prototype.anyDeclHasFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (TypeScript.hasFlag(declarations[i].flags, flag)) { - return true; - } - } - return false; - }; - - PullSymbol.prototype.allDeclsHaveFlag = function (flag) { - var declarations = this.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - if (!TypeScript.hasFlag(declarations[i].flags, flag)) { - return false; - } - } - return true; - }; - - PullSymbol.prototype.pathToRoot = function () { - var path = []; - var node = this; - while (node) { - if (node.isType()) { - var associatedContainerSymbol = node.getAssociatedContainerType(); - if (associatedContainerSymbol) { - node = associatedContainerSymbol; - } - } - path[path.length] = node; - var nodeKind = node.kind; - if (nodeKind === 2048 /* Parameter */) { - break; - } else { - node = node.getContainer(); - } - } - return path; - }; - - PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope = function (symbol, scopePath, endScopePathIndex) { - var declPath = scopePath[0].getDeclarations()[0].getParentPath(); - for (var i = 0, declIndex = declPath.length - 1; i <= endScopePathIndex; i++, declIndex--) { - if (scopePath[i].isContainer()) { - var scopeContainer = scopePath[i]; - if (symbol.isContainer()) { - var memberSymbol = scopeContainer.findContainedNonMemberContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedContainer(symbol.name, 164 /* SomeContainer */); - if (memberSymbol && memberSymbol != symbol) { - return true; - } - } else if (symbol.isType()) { - var memberSymbol = scopeContainer.findContainedNonMemberType(symbol.name, 58728795 /* SomeType */); - var symbolRootType = TypeScript.PullHelpers.getRootType(symbol); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType && memberSymbol.getDeclarations()[0].getParentDecl() == declPath[declIndex]) { - return true; - } - - var memberSymbol = scopeContainer.findNestedType(symbol.name, 58728795 /* SomeType */); - if (memberSymbol && TypeScript.PullHelpers.getRootType(memberSymbol) != symbolRootType) { - return true; - } - } - } - } - - return false; - }; - - PullSymbol.prototype.findQualifyingSymbolPathInScopeSymbol = function (scopeSymbol) { - var thisPath = this.pathToRoot(); - if (thisPath.length === 1) { - return thisPath; - } - - var scopeSymbolPath; - if (scopeSymbol) { - scopeSymbolPath = scopeSymbol.pathToRoot(); - } else { - return thisPath; - } - - var thisCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(thisPath, function (thisNode) { - return TypeScript.ArrayUtilities.contains(scopeSymbolPath, thisNode); - }); - if (thisCommonAncestorIndex > 0) { - var thisCommonAncestor = thisPath[thisCommonAncestorIndex]; - var scopeCommonAncestorIndex = TypeScript.ArrayUtilities.indexOf(scopeSymbolPath, function (scopeNode) { - return scopeNode === thisCommonAncestor; - }); - TypeScript.Debug.assert(thisPath.length - thisCommonAncestorIndex === scopeSymbolPath.length - scopeCommonAncestorIndex); - - for (; thisCommonAncestorIndex < thisPath.length; thisCommonAncestorIndex++, scopeCommonAncestorIndex++) { - if (!PullSymbol.unqualifiedNameReferencesDifferentSymbolInScope(thisPath[thisCommonAncestorIndex - 1], scopeSymbolPath, scopeCommonAncestorIndex)) { - break; - } - } - } - - if (thisCommonAncestorIndex >= 0 && thisCommonAncestorIndex < thisPath.length) { - return thisPath.slice(0, thisCommonAncestorIndex); - } else { - return thisPath; - } - }; - - PullSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var str = this.getNameAndTypeName(scopeSymbol); - return str; - }; - - PullSymbol.prototype.getNamePartForFullName = function () { - return this.getDisplayName(null, true); - }; - - PullSymbol.prototype.fullName = function (scopeSymbol) { - var _this = this; - var path = this.pathToRoot(); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol === _this ? null : symbol.fullName(scopeSymbol); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - var scopedName = path[i].getNamePartForFullName(); - if (path[i].kind === 32 /* DynamicModule */ && !TypeScript.isQuoted(scopedName)) { - break; - } - - if (scopedName === "") { - break; - } - - fullName = scopedName + "." + fullName; - } - - fullName = fullName + this.getNamePartForFullName(); - return fullName; - }; - - PullSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - var path = this.findQualifyingSymbolPathInScopeSymbol(scopeSymbol); - var fullName = ""; - - var aliasFullName = this.getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - return aliasFullName; - } - - for (var i = 1; i < path.length; i++) { - var kind = path[i].kind; - if (kind === 4 /* Container */ || kind === 32 /* DynamicModule */) { - var aliasFullName = path[i].getAliasSymbolName(scopeSymbol, function (symbol) { - return symbol.getScopedName(scopeSymbol, skipTypeParametersInName, false, skipInternalAliasName); - }, function (symbol) { - return symbol.getNamePartForFullName(); - }, skipInternalAliasName); - if (aliasFullName) { - fullName = aliasFullName + "." + fullName; - break; - } - - if (kind === 4 /* Container */) { - fullName = path[i].getDisplayName() + "." + fullName; - } else { - var displayName = path[i].getDisplayName(); - if (TypeScript.isQuoted(displayName)) { - fullName = displayName + "." + fullName; - } - break; - } - } else { - break; - } - } - fullName = fullName + this.getDisplayName(scopeSymbol, useConstraintInName, skipInternalAliasName); - return fullName; - }; - - PullSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) { - var name = this.getScopedName(scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - return TypeScript.MemberName.create(name); - }; - - PullSymbol.prototype.getTypeName = function (scopeSymbol, getPrettyTypeName) { - var memberName = this.getTypeNameEx(scopeSymbol, getPrettyTypeName); - return memberName.toString(); - }; - - PullSymbol.prototype.getTypeNameEx = function (scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type) { - var memberName = getPrettyTypeName ? this.getTypeNameForFunctionSignature("", scopeSymbol, getPrettyTypeName) : null; - if (!memberName) { - memberName = type.getScopedNameEx(scopeSymbol, false, true, getPrettyTypeName); - } - - return memberName; - } - return TypeScript.MemberName.create(""); - }; - - PullSymbol.prototype.getTypeNameForFunctionSignature = function (prefix, scopeSymbol, getPrettyTypeName) { - var type = this.type; - if (type && !type.isNamedTypeSymbol() && this.kind !== 4096 /* Property */ && this.kind !== 512 /* Variable */ && this.kind !== 2048 /* Parameter */) { - var signatures = type.getCallSignatures(); - if (signatures.length === 1 || (getPrettyTypeName && signatures.length)) { - var typeName = new TypeScript.MemberNameArray(); - var signatureName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, prefix, false, false, scopeSymbol, getPrettyTypeName); - typeName.addAll(signatureName); - return typeName; - } - } - - return null; - }; - - PullSymbol.prototype.getNameAndTypeName = function (scopeSymbol) { - var nameAndTypeName = this.getNameAndTypeNameEx(scopeSymbol); - return nameAndTypeName.toString(); - }; - - PullSymbol.prototype.getNameAndTypeNameEx = function (scopeSymbol) { - var type = this.type; - var nameStr = this.getDisplayName(scopeSymbol); - if (type) { - nameStr = nameStr + (this.isOptional ? "?" : ""); - var memberName = this.getTypeNameForFunctionSignature(nameStr, scopeSymbol); - if (!memberName) { - var typeNameEx = type.getScopedNameEx(scopeSymbol); - memberName = TypeScript.MemberName.create(typeNameEx, nameStr + ": ", ""); - } - return memberName; - } - return TypeScript.MemberName.create(nameStr); - }; - - PullSymbol.getTypeParameterString = function (typars, scopeSymbol, useContraintInName) { - return PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, undefined, useContraintInName).toString(); - }; - - PullSymbol.getTypeParameterStringEx = function (typeParameters, scopeSymbol, getTypeParamMarkerInfo, useContraintInName) { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = ""; - - if (typeParameters && typeParameters.length) { - builder.add(TypeScript.MemberName.create("<")); - - for (var i = 0; i < typeParameters.length; i++) { - if (i) { - builder.add(TypeScript.MemberName.create(", ")); - } - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - - builder.add(typeParameters[i].getScopedNameEx(scopeSymbol, false, useContraintInName)); - - if (getTypeParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - } - - builder.add(TypeScript.MemberName.create(">")); - } - - return builder; - }; - - PullSymbol.getIsExternallyVisible = function (symbol, fromIsExternallyVisibleSymbol, inIsExternallyVisibleSymbols) { - if (inIsExternallyVisibleSymbols) { - for (var i = 0; i < inIsExternallyVisibleSymbols.length; i++) { - if (inIsExternallyVisibleSymbols[i] === symbol) { - return true; - } - } - } else { - inIsExternallyVisibleSymbols = []; - } - - if (fromIsExternallyVisibleSymbol === symbol) { - return true; - } - - inIsExternallyVisibleSymbols.push(fromIsExternallyVisibleSymbol); - - var result = symbol.isExternallyVisible(inIsExternallyVisibleSymbols); - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(inIsExternallyVisibleSymbols) === fromIsExternallyVisibleSymbol); - inIsExternallyVisibleSymbols.pop(); - - return result; - }; - - PullSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - var kind = this.kind; - if (kind === 2 /* Primitive */) { - return true; - } - - if (this.rootSymbol) { - return PullSymbol.getIsExternallyVisible(this.rootSymbol, this, inIsExternallyVisibleSymbols); - } - - if (this.isType()) { - var associatedContainerSymbol = this.getAssociatedContainerType(); - if (associatedContainerSymbol) { - return PullSymbol.getIsExternallyVisible(associatedContainerSymbol, this, inIsExternallyVisibleSymbols); - } - } - - if (this.anyDeclHasFlag(2 /* Private */)) { - return false; - } - - var container = this.getContainer(); - if (container === null) { - var decls = this.getDeclarations(); - if (decls.length) { - var parentDecl = decls[0].getParentDecl(); - if (parentDecl) { - var parentSymbol = parentDecl.getSymbol(); - if (!parentSymbol || parentDecl.kind === 1 /* Script */) { - return true; - } - - return PullSymbol.getIsExternallyVisible(parentSymbol, this, inIsExternallyVisibleSymbols); - } - } - - return true; - } - - if (container.kind === 32 /* DynamicModule */ || (container.getAssociatedContainerType() && container.getAssociatedContainerType().kind === 32 /* DynamicModule */)) { - var containerSymbol = container.kind === 32 /* DynamicModule */ ? container : container.getAssociatedContainerType(); - if (PullContainerSymbol.usedAsSymbol(containerSymbol, this)) { - return true; - } - } - - if (!this.anyDeclHasFlag(1 /* Exported */) && kind !== 4096 /* Property */ && kind !== 65536 /* Method */) { - return false; - } - - return PullSymbol.getIsExternallyVisible(container, this, inIsExternallyVisibleSymbols); - }; - - PullSymbol.prototype.getDocCommentsOfDecl = function (decl) { - var ast = decl.ast(); - - if (ast) { - var enclosingModuleDeclaration = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - if (TypeScript.ASTHelpers.isLastNameOfModule(enclosingModuleDeclaration, ast)) { - return TypeScript.ASTHelpers.docComments(enclosingModuleDeclaration); - } - - if (ast.kind() !== 130 /* ModuleDeclaration */ || decl.kind !== 512 /* Variable */) { - return TypeScript.ASTHelpers.docComments(ast); - } - } - - return []; - }; - - PullSymbol.prototype.getDocCommentArray = function (symbol) { - var docComments = []; - if (!symbol) { - return docComments; - } - - var isParameter = symbol.kind === 2048 /* Parameter */; - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (isParameter && decls[i].kind === 4096 /* Property */) { - continue; - } - docComments = docComments.concat(this.getDocCommentsOfDecl(decls[i])); - } - return docComments; - }; - - PullSymbol.getDefaultConstructorSymbolForDocComments = function (classSymbol) { - if (classSymbol.getHasDefaultConstructor()) { - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - return PullSymbol.getDefaultConstructorSymbolForDocComments(extendedTypes[0]); - } - } - - return classSymbol.type.getConstructSignatures()[0]; - }; - - PullSymbol.prototype.getDocCommentText = function (comments) { - var docCommentText = new Array(); - for (var c = 0; c < comments.length; c++) { - var commentText = this.getDocCommentTextValue(comments[c]); - if (commentText !== "") { - docCommentText.push(commentText); - } - } - return docCommentText.join("\n"); - }; - - PullSymbol.prototype.getDocCommentTextValue = function (comment) { - return this.cleanJSDocComment(comment.fullText()); - }; - - PullSymbol.prototype.docComments = function (useConstructorAsClass) { - var decls = this.getDeclarations(); - if (useConstructorAsClass && decls.length && decls[0].kind === 32768 /* ConstructorMethod */) { - var classDecl = decls[0].getParentDecl(); - return this.getDocCommentText(this.getDocCommentsOfDecl(classDecl)); - } - - if (this._docComments === null) { - var docComments = ""; - if (!useConstructorAsClass && this.kind === 2097152 /* ConstructSignature */ && decls.length && decls[0].kind === 8 /* Class */) { - var classSymbol = this.returnType; - var extendedTypes = classSymbol.getExtendedTypes(); - if (extendedTypes.length) { - docComments = extendedTypes[0].getConstructorMethod().docComments(); - } else { - docComments = ""; - } - } else if (this.kind === 2048 /* Parameter */) { - var parameterComments = []; - - var funcContainer = this.getEnclosingSignature(); - var funcDocComments = this.getDocCommentArray(funcContainer); - var paramComment = this.getParameterDocCommentText(this.getDisplayName(), funcDocComments); - if (paramComment != "") { - parameterComments.push(paramComment); - } - - var paramSelfComment = this.getDocCommentText(this.getDocCommentArray(this)); - if (paramSelfComment != "") { - parameterComments.push(paramSelfComment); - } - docComments = parameterComments.join("\n"); - } else { - var getSymbolComments = true; - if (this.kind === 16777216 /* FunctionType */) { - var functionSymbol = this.getFunctionSymbol(); - - if (functionSymbol) { - docComments = functionSymbol._docComments || ""; - getSymbolComments = false; - } else { - var declarationList = this.getDeclarations(); - if (declarationList.length > 0) { - docComments = declarationList[0].getSymbol()._docComments || ""; - getSymbolComments = false; - } - } - } - if (getSymbolComments) { - docComments = this.getDocCommentText(this.getDocCommentArray(this)); - if (docComments === "") { - if (this.kind === 1048576 /* CallSignature */) { - var callTypeSymbol = this.functionType; - if (callTypeSymbol && callTypeSymbol.getCallSignatures().length === 1) { - docComments = callTypeSymbol.docComments(); - } - } - } - } - } - - this._docComments = docComments; - } - - return this._docComments; - }; - - PullSymbol.prototype.getParameterDocCommentText = function (param, fncDocComments) { - if (fncDocComments.length === 0 || fncDocComments[0].kind() !== 6 /* MultiLineCommentTrivia */) { - return ""; - } - - for (var i = 0; i < fncDocComments.length; i++) { - var commentContents = fncDocComments[i].fullText(); - for (var j = commentContents.indexOf("@param", 0); 0 <= j; j = commentContents.indexOf("@param", j)) { - j += 6; - if (!this.isSpaceChar(commentContents, j)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j); - if (j === -1) { - break; - } - - if (commentContents.charCodeAt(j) === 123 /* openBrace */) { - j++; - - var charCode = 0; - for (var curlies = 1; j < commentContents.length; j++) { - charCode = commentContents.charCodeAt(j); - - if (charCode === 123 /* openBrace */) { - curlies++; - continue; - } - - if (charCode === 125 /* closeBrace */) { - curlies--; - if (curlies === 0) { - break; - } else { - continue; - } - } - - if (charCode === 64 /* at */) { - break; - } - } - - if (j === commentContents.length) { - break; - } - - if (charCode === 64 /* at */) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + 1); - if (j === -1) { - break; - } - } - - if (param !== commentContents.substr(j, param.length) || !this.isSpaceChar(commentContents, j + param.length)) { - continue; - } - - j = this.consumeLeadingSpace(commentContents, j + param.length); - if (j === -1) { - return ""; - } - - var endOfParam = commentContents.indexOf("@", j); - var paramHelpString = commentContents.substring(j, endOfParam < 0 ? commentContents.length : endOfParam); - - var paramSpacesToRemove = undefined; - var paramLineIndex = commentContents.substring(0, j).lastIndexOf("\n") + 1; - if (paramLineIndex !== 0) { - if (paramLineIndex < j && commentContents.charAt(paramLineIndex + 1) === "\r") { - paramLineIndex++; - } - } - var startSpaceRemovalIndex = this.consumeLeadingSpace(commentContents, paramLineIndex); - if (startSpaceRemovalIndex !== j && commentContents.charAt(startSpaceRemovalIndex) === "*") { - paramSpacesToRemove = j - startSpaceRemovalIndex - 1; - } - - return this.cleanJSDocComment(paramHelpString, paramSpacesToRemove); - } - } - - return ""; - }; - - PullSymbol.prototype.cleanJSDocComment = function (content, spacesToRemove) { - var docCommentLines = new Array(); - content = content.replace("/**", ""); - if (content.length >= 2 && content.charAt(content.length - 1) === "/" && content.charAt(content.length - 2) === "*") { - content = content.substring(0, content.length - 2); - } - var lines = content.split("\n"); - var inParamTag = false; - for (var l = 0; l < lines.length; l++) { - var line = lines[l]; - var cleanLinePos = this.cleanDocCommentLine(line, true, spacesToRemove); - if (!cleanLinePos) { - continue; - } - - var docCommentText = ""; - var prevPos = cleanLinePos.start; - for (var i = line.indexOf("@", cleanLinePos.start); 0 <= i && i < cleanLinePos.end; i = line.indexOf("@", i + 1)) { - var wasInParamtag = inParamTag; - - if (line.indexOf("param", i + 1) === i + 1 && this.isSpaceChar(line, i + 6)) { - if (!wasInParamtag) { - docCommentText += line.substring(prevPos, i); - } - - prevPos = i; - inParamTag = true; - } else if (wasInParamtag) { - prevPos = i; - inParamTag = false; - } - } - - if (!inParamTag) { - docCommentText += line.substring(prevPos, cleanLinePos.end); - } - - var newCleanPos = this.cleanDocCommentLine(docCommentText, false); - if (newCleanPos) { - if (spacesToRemove === undefined) { - spacesToRemove = cleanLinePos.jsDocSpacesRemoved; - } - docCommentLines.push(docCommentText); - } - } - - return docCommentLines.join("\n"); - }; - - PullSymbol.prototype.consumeLeadingSpace = function (line, startIndex, maxSpacesToRemove) { - var endIndex = line.length; - if (maxSpacesToRemove !== undefined) { - endIndex = TypeScript.MathPrototype.min(startIndex + maxSpacesToRemove, endIndex); - } - - for (; startIndex < endIndex; startIndex++) { - var charCode = line.charCodeAt(startIndex); - if (charCode !== 32 /* space */ && charCode !== 9 /* tab */) { - return startIndex; - } - } - - if (endIndex !== line.length) { - return endIndex; - } - - return -1; - }; - - PullSymbol.prototype.isSpaceChar = function (line, index) { - var length = line.length; - if (index < length) { - var charCode = line.charCodeAt(index); - - return charCode === 32 /* space */ || charCode === 9 /* tab */; - } - - return index === length; - }; - - PullSymbol.prototype.cleanDocCommentLine = function (line, jsDocStyleComment, jsDocLineSpaceToRemove) { - var nonSpaceIndex = this.consumeLeadingSpace(line, 0); - if (nonSpaceIndex !== -1) { - var jsDocSpacesRemoved = nonSpaceIndex; - if (jsDocStyleComment && line.charAt(nonSpaceIndex) === '*') { - var startIndex = nonSpaceIndex + 1; - nonSpaceIndex = this.consumeLeadingSpace(line, startIndex, jsDocLineSpaceToRemove); - - if (nonSpaceIndex !== -1) { - jsDocSpacesRemoved = nonSpaceIndex - startIndex; - } else { - return null; - } - } - - return { - start: nonSpaceIndex, - end: line.charAt(line.length - 1) === "\r" ? line.length - 1 : line.length, - jsDocSpacesRemoved: jsDocSpacesRemoved - }; - } - - return null; - }; - return PullSymbol; - })(); - TypeScript.PullSymbol = PullSymbol; - - - - var PullSignatureSymbol = (function (_super) { - __extends(PullSignatureSymbol, _super); - function PullSignatureSymbol(kind, _isDefinition) { - if (typeof _isDefinition === "undefined") { _isDefinition = false; } - _super.call(this, "", kind); - this._isDefinition = _isDefinition; - this._memberTypeParameterNameCache = null; - this._stringConstantOverload = undefined; - this.parameters = TypeScript.sentinelEmptyArray; - this._typeParameters = null; - this.returnType = null; - this.functionType = null; - this.hasOptionalParam = false; - this.nonOptionalParamCount = 0; - this.hasVarArgs = false; - this._allowedToReferenceTypeParameters = null; - this._instantiationCache = null; - this.hasBeenChecked = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - } - PullSignatureSymbol.prototype.isDefinition = function () { - return this._isDefinition; - }; - - PullSignatureSymbol.prototype.isGeneric = function () { - var typeParameters = this.getTypeParameters(); - return !!typeParameters && typeParameters.length !== 0; - }; - - PullSignatureSymbol.prototype.addParameter = function (parameter, isOptional) { - if (typeof isOptional === "undefined") { isOptional = false; } - if (this.parameters === TypeScript.sentinelEmptyArray) { - this.parameters = []; - } - - this.parameters[this.parameters.length] = parameter; - this.hasOptionalParam = isOptional; - - if (!parameter.getEnclosingSignature()) { - parameter.setEnclosingSignature(this); - } - - if (!isOptional) { - this.nonOptionalParamCount++; - } - }; - - PullSignatureSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!this._typeParameters) { - this._typeParameters = []; - } - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - - this._memberTypeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullSignatureSymbol.prototype.addTypeParametersFromReturnType = function () { - var typeParameters = this.returnType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addTypeParameter(typeParameters[i]); - } - }; - - PullSignatureSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - this._typeParameters = []; - } - - return this._typeParameters; - }; - - PullSignatureSymbol.prototype.findTypeParameter = function (name) { - var memberSymbol; - - if (!this._memberTypeParameterNameCache) { - this._memberTypeParameterNameCache = TypeScript.createIntrinsicsObject(); - - for (var i = 0; i < this.getTypeParameters().length; i++) { - this._memberTypeParameterNameCache[this._typeParameters[i].getName()] = this._typeParameters[i]; - } - } - - memberSymbol = this._memberTypeParameterNameCache[name]; - - return memberSymbol; - }; - - PullSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullSignatureSymbol.prototype.addSpecialization = function (specializedVersionOfThisSignature, typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - this._instantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisSignature; - }; - - PullSignatureSymbol.prototype.getSpecialization = function (typeArgumentMap) { - TypeScript.Debug.assert(this.getRootSymbol() == this); - if (!this._instantiationCache) { - return null; - } - - var result = this._instantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - }; - - PullSignatureSymbol.prototype.isStringConstantOverloadSignature = function () { - if (this._stringConstantOverload === undefined) { - var params = this.parameters; - this._stringConstantOverload = false; - for (var i = 0; i < params.length; i++) { - var paramType = params[i].type; - if (paramType && paramType.isPrimitive() && paramType.isStringConstant()) { - this._stringConstantOverload = true; - } - } - } - - return this._stringConstantOverload; - }; - - PullSignatureSymbol.prototype.getParameterTypeAtIndex = function (iParam) { - if (iParam < this.parameters.length - 1 || (iParam < this.parameters.length && !this.hasVarArgs)) { - return this.parameters[iParam].type; - } else if (this.hasVarArgs) { - var paramType = this.parameters[this.parameters.length - 1].type; - if (paramType.isArrayNamedTypeReference()) { - paramType = paramType.getElementType(); - } - return paramType; - } - - return null; - }; - - PullSignatureSymbol.getSignatureTypeMemberName = function (candidateSignature, signatures, scopeSymbol) { - var allMemberNames = new TypeScript.MemberNameArray(); - var signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(signatures, "", false, false, scopeSymbol, true, candidateSignature); - allMemberNames.addAll(signatureMemberName); - return allMemberNames; - }; - - PullSignatureSymbol.getSignaturesTypeNameEx = function (signatures, prefix, shortform, brackets, scopeSymbol, getPrettyTypeName, candidateSignature) { - var result = []; - if (!signatures) { - return result; - } - - var len = signatures.length; - if (!getPrettyTypeName && len > 1) { - shortform = false; - } - - var foundDefinition = false; - if (candidateSignature && candidateSignature.isDefinition() && len > 1) { - candidateSignature = null; - } - - for (var i = 0; i < len; i++) { - if (len > 1 && signatures[i].isDefinition()) { - foundDefinition = true; - continue; - } - - var signature = signatures[i]; - if (getPrettyTypeName && candidateSignature) { - signature = candidateSignature; - } - - result.push(signature.getSignatureTypeNameEx(prefix, shortform, brackets, scopeSymbol)); - if (getPrettyTypeName) { - break; - } - } - - if (getPrettyTypeName && result.length && len > 1) { - var lastMemberName = result[result.length - 1]; - for (var i = i + 1; i < len; i++) { - if (signatures[i].isDefinition()) { - foundDefinition = true; - break; - } - } - var overloadString = TypeScript.getLocalizedText(TypeScript.DiagnosticCode._0_overload_s, [foundDefinition ? len - 2 : len - 1]); - lastMemberName.add(TypeScript.MemberName.create(overloadString)); - } - - return result; - }; - - PullSignatureSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getSignatureTypeNameEx(this.getScopedNameEx().toString(), false, false, scopeSymbol, undefined, useConstraintInName).toString(); - return s; - }; - - PullSignatureSymbol.prototype.getSignatureTypeNameEx = function (prefix, shortform, brackets, scopeSymbol, getParamMarkerInfo, getTypeParamMarkerInfo) { - var typeParamterBuilder = new TypeScript.MemberNameArray(); - - typeParamterBuilder.add(PullSymbol.getTypeParameterStringEx(this.getTypeParameters(), scopeSymbol, getTypeParamMarkerInfo, true)); - - if (brackets) { - typeParamterBuilder.add(TypeScript.MemberName.create("[")); - } else { - typeParamterBuilder.add(TypeScript.MemberName.create("(")); - } - - var builder = new TypeScript.MemberNameArray(); - builder.prefix = prefix; - - if (getTypeParamMarkerInfo) { - builder.prefix = prefix; - builder.addAll(typeParamterBuilder.entries); - } else { - builder.prefix = prefix + typeParamterBuilder.toString(); - } - - var params = this.parameters; - var paramLen = params.length; - for (var i = 0; i < paramLen; i++) { - var paramType = params[i].type; - var typeString = paramType ? ": " : ""; - var paramIsVarArg = params[i].isVarArg; - var varArgPrefix = paramIsVarArg ? "..." : ""; - var optionalString = (!paramIsVarArg && params[i].isOptional) ? "?" : ""; - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - builder.add(TypeScript.MemberName.create(varArgPrefix + params[i].getScopedNameEx(scopeSymbol).toString() + optionalString + typeString)); - if (paramType) { - builder.add(paramType.getScopedNameEx(scopeSymbol)); - } - if (getParamMarkerInfo) { - builder.add(new TypeScript.MemberName()); - } - if (i < paramLen - 1) { - builder.add(TypeScript.MemberName.create(", ")); - } - } - - if (shortform) { - if (brackets) { - builder.add(TypeScript.MemberName.create("] => ")); - } else { - builder.add(TypeScript.MemberName.create(") => ")); - } - } else { - if (brackets) { - builder.add(TypeScript.MemberName.create("]: ")); - } else { - builder.add(TypeScript.MemberName.create("): ")); - } - } - - if (this.returnType) { - builder.add(this.returnType.getScopedNameEx(scopeSymbol)); - } else { - builder.add(TypeScript.MemberName.create("any")); - } - - return builder; - }; - - PullSignatureSymbol.prototype.forAllParameterTypes = function (length, predicate) { - if (this.parameters.length < length && !this.hasVarArgs) { - length = this.parameters.length; - } - - for (var i = 0; i < length; i++) { - var paramType = this.getParameterTypeAtIndex(i); - if (!predicate(paramType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.forAllCorrespondingParameterTypesInThisAndOtherSignature = function (otherSignature, predicate) { - var length; - if (this.hasVarArgs) { - length = otherSignature.hasVarArgs ? Math.max(this.parameters.length, otherSignature.parameters.length) : otherSignature.parameters.length; - } else { - length = otherSignature.hasVarArgs ? this.parameters.length : Math.min(this.parameters.length, otherSignature.parameters.length); - } - - for (var i = 0; i < length; i++) { - var thisParamType = this.getParameterTypeAtIndex(i); - var otherParamType = otherSignature.getParameterTypeAtIndex(i); - if (!predicate(thisParamType, otherParamType, i)) { - return false; - } - } - - return true; - }; - - PullSignatureSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap) !== 0; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap) { - var signature = this; - if (signature.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap); - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap) { - var signature = this; - signature.inWrapCheck = true; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(signature); - var wrappingTypeParameterID = signature.returnType ? signature.returnType.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - - var parameters = signature.parameters; - for (var i = 0; !wrappingTypeParameterID && i < parameters.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(parameters[i]); - wrappingTypeParameterID = parameters[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - signature.inWrapCheck = false; - - return wrappingTypeParameterID; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullSignatureSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - if (this.returnType && this.returnType._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - - var parameters = this.parameters; - - for (var i = 0; i < parameters.length; i++) { - if (parameters[i].type && parameters[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - return PullSignatureSymbol; - })(PullSymbol); - TypeScript.PullSignatureSymbol = PullSignatureSymbol; - - var PullTypeSymbol = (function (_super) { - __extends(PullTypeSymbol, _super); - function PullTypeSymbol(name, kind) { - _super.call(this, name, kind); - this._members = TypeScript.sentinelEmptyArray; - this._enclosedMemberTypes = null; - this._enclosedMemberContainers = null; - this._typeParameters = null; - this._allowedToReferenceTypeParameters = null; - this._specializedVersionsOfThisType = null; - this._arrayVersionOfThisType = null; - this._implementedTypes = null; - this._extendedTypes = null; - this._typesThatExplicitlyImplementThisType = null; - this._typesThatExtendThisType = null; - this._callSignatures = null; - this._allCallSignatures = null; - this._constructSignatures = null; - this._allConstructSignatures = null; - this._indexSignatures = null; - this._allIndexSignatures = null; - this._allIndexSignaturesOfAugmentedType = null; - this._memberNameCache = null; - this._enclosedTypeNameCache = null; - this._enclosedContainerCache = null; - this._typeParameterNameCache = null; - this._containedNonMemberNameCache = null; - this._containedNonMemberTypeNameCache = null; - this._containedNonMemberContainerCache = null; - this._simpleInstantiationCache = null; - this._complexInstantiationCache = null; - this._hasGenericSignature = false; - this._hasGenericMember = false; - this._hasBaseTypeConflict = false; - this._knownBaseTypeCount = 0; - this._associatedContainerTypeSymbol = null; - this._constructorMethod = null; - this._hasDefaultConstructor = false; - this._functionSymbol = null; - this._inMemberTypeNameEx = false; - this.inSymbolPrivacyCheck = false; - this.inWrapCheck = false; - this.inWrapInfiniteExpandingReferenceCheck = false; - this.typeReference = null; - this._widenedType = null; - this._isArrayNamedTypeReference = undefined; - this.type = this; - } - PullTypeSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArrayNamedTypeReference === undefined) { - this._isArrayNamedTypeReference = this.computeIsArrayNamedTypeReference(); - } - - return this._isArrayNamedTypeReference; - }; - - PullTypeSymbol.prototype.computeIsArrayNamedTypeReference = function () { - var typeArgs = this.getTypeArguments(); - if (typeArgs && this.getTypeArguments().length === 1 && this.name === "Array") { - var declaration = this.getDeclarations()[0]; - - if (declaration && declaration.getParentDecl() && declaration.getParentDecl().getParentDecl() === null) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.isType = function () { - return true; - }; - PullTypeSymbol.prototype.isClass = function () { - return this.kind === 8 /* Class */ || (this._constructorMethod !== null); - }; - PullTypeSymbol.prototype.isFunction = function () { - return (this.kind & (33554432 /* ConstructorType */ | 16777216 /* FunctionType */)) !== 0; - }; - PullTypeSymbol.prototype.isConstructor = function () { - return this.kind === 33554432 /* ConstructorType */ || (this._associatedContainerTypeSymbol && this._associatedContainerTypeSymbol.isClass()); - }; - PullTypeSymbol.prototype.isTypeParameter = function () { - return false; - }; - PullTypeSymbol.prototype.isTypeVariable = function () { - return false; - }; - PullTypeSymbol.prototype.isError = function () { - return false; - }; - PullTypeSymbol.prototype.isEnum = function () { - return this.kind === 64 /* Enum */; - }; - - PullTypeSymbol.prototype.getTypeParameterArgumentMap = function () { - return null; - }; - - PullTypeSymbol.prototype.isObject = function () { - return TypeScript.hasFlag(this.kind, 8 /* Class */ | 33554432 /* ConstructorType */ | 64 /* Enum */ | 16777216 /* FunctionType */ | 16 /* Interface */ | 8388608 /* ObjectType */ | 256 /* ObjectLiteral */); - }; - - PullTypeSymbol.prototype.isFunctionType = function () { - return this.getCallSignatures().length > 0 || this.getConstructSignatures().length > 0; - }; - - PullTypeSymbol.prototype.getKnownBaseTypeCount = function () { - return this._knownBaseTypeCount; - }; - PullTypeSymbol.prototype.resetKnownBaseTypeCount = function () { - this._knownBaseTypeCount = 0; - }; - PullTypeSymbol.prototype.incrementKnownBaseCount = function () { - this._knownBaseTypeCount++; - }; - - PullTypeSymbol.prototype.setHasBaseTypeConflict = function () { - this._hasBaseTypeConflict = true; - }; - PullTypeSymbol.prototype.hasBaseTypeConflict = function () { - return this._hasBaseTypeConflict; - }; - - PullTypeSymbol.prototype.hasMembers = function () { - if (this._members !== TypeScript.sentinelEmptyArray) { - return true; - } - - var parents = this.getExtendedTypes(); - - for (var i = 0; i < parents.length; i++) { - if (parents[i].hasMembers()) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.setHasGenericSignature = function () { - this._hasGenericSignature = true; - }; - PullTypeSymbol.prototype.getHasGenericSignature = function () { - return this._hasGenericSignature; - }; - - PullTypeSymbol.prototype.setHasGenericMember = function () { - this._hasGenericMember = true; - }; - PullTypeSymbol.prototype.getHasGenericMember = function () { - return this._hasGenericMember; - }; - - PullTypeSymbol.prototype.setAssociatedContainerType = function (type) { - this._associatedContainerTypeSymbol = type; - }; - - PullTypeSymbol.prototype.getAssociatedContainerType = function () { - return this._associatedContainerTypeSymbol; - }; - - PullTypeSymbol.prototype.getArrayType = function () { - return this._arrayVersionOfThisType; - }; - - PullTypeSymbol.prototype.getElementType = function () { - return null; - }; - - PullTypeSymbol.prototype.setArrayType = function (arrayType) { - this._arrayVersionOfThisType = arrayType; - }; - - PullTypeSymbol.prototype.getFunctionSymbol = function () { - return this._functionSymbol; - }; - - PullTypeSymbol.prototype.setFunctionSymbol = function (symbol) { - if (symbol) { - this._functionSymbol = symbol; - } - }; - - PullTypeSymbol.prototype.findContainedNonMember = function (name) { - if (!this._containedNonMemberNameCache) { - return null; - } - - return this._containedNonMemberNameCache[name]; - }; - - PullTypeSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberTypeNameCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberTypeNameCache[typeName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - if (!this._containedNonMemberContainerCache) { - return null; - } - - var nonMemberSymbol = this._containedNonMemberContainerCache[containerName]; - - if (nonMemberSymbol && kind !== 0 /* None */) { - nonMemberSymbol = TypeScript.hasFlag(nonMemberSymbol.kind, kind) ? nonMemberSymbol : null; - } - - return nonMemberSymbol; - }; - - PullTypeSymbol.prototype.addMember = function (memberSymbol) { - if (!memberSymbol) { - return; - } - - memberSymbol.setContainer(this); - - if (!this._memberNameCache) { - this._memberNameCache = TypeScript.createIntrinsicsObject(); - } - - if (this._members === TypeScript.sentinelEmptyArray) { - this._members = []; - } - - this._members.push(memberSymbol); - this._memberNameCache[memberSymbol.name] = memberSymbol; - }; - - PullTypeSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - if (!enclosedType) { - return; - } - - enclosedType.setContainer(this); - - if (!this._enclosedTypeNameCache) { - this._enclosedTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberTypes) { - this._enclosedMemberTypes = []; - } - - this._enclosedMemberTypes[this._enclosedMemberTypes.length] = enclosedType; - this._enclosedTypeNameCache[enclosedType.name] = enclosedType; - }; - - PullTypeSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - if (!enclosedContainer) { - return; - } - - enclosedContainer.setContainer(this); - - if (!this._enclosedContainerCache) { - this._enclosedContainerCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._enclosedMemberContainers) { - this._enclosedMemberContainers = []; - } - - this._enclosedMemberContainers[this._enclosedMemberContainers.length] = enclosedContainer; - this._enclosedContainerCache[enclosedContainer.name] = enclosedContainer; - }; - - PullTypeSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - if (!enclosedNonMember) { - return; - } - - enclosedNonMember.setContainer(this); - - if (!this._containedNonMemberNameCache) { - this._containedNonMemberNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberNameCache[enclosedNonMember.name] = enclosedNonMember; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - if (!enclosedNonMemberType) { - return; - } - - enclosedNonMemberType.setContainer(this); - - if (!this._containedNonMemberTypeNameCache) { - this._containedNonMemberTypeNameCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberTypeNameCache[enclosedNonMemberType.name] = enclosedNonMemberType; - }; - - PullTypeSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - if (!enclosedNonMemberContainer) { - return; - } - - enclosedNonMemberContainer.setContainer(this); - - if (!this._containedNonMemberContainerCache) { - this._containedNonMemberContainerCache = TypeScript.createIntrinsicsObject(); - } - - this._containedNonMemberContainerCache[enclosedNonMemberContainer.name] = enclosedNonMemberContainer; - }; - - PullTypeSymbol.prototype.addTypeParameter = function (typeParameter) { - if (!typeParameter) { - return; - } - - if (!typeParameter.getContainer()) { - typeParameter.setContainer(this); - } - - if (!this._typeParameterNameCache) { - this._typeParameterNameCache = TypeScript.createIntrinsicsObject(); - } - - if (!this._typeParameters) { - this._typeParameters = []; - } - - this._typeParameters[this._typeParameters.length] = typeParameter; - this._typeParameterNameCache[typeParameter.getName()] = typeParameter; - }; - - PullTypeSymbol.prototype.getMembers = function () { - return this._members; - }; - - PullTypeSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - this._hasDefaultConstructor = hasOne; - }; - - PullTypeSymbol.prototype.getHasDefaultConstructor = function () { - return this._hasDefaultConstructor; - }; - - PullTypeSymbol.prototype.getConstructorMethod = function () { - return this._constructorMethod; - }; - - PullTypeSymbol.prototype.setConstructorMethod = function (constructorMethod) { - this._constructorMethod = constructorMethod; - }; - - PullTypeSymbol.prototype.getTypeParameters = function () { - if (!this._typeParameters) { - return TypeScript.sentinelEmptyArray; - } - - return this._typeParameters; - }; - - PullTypeSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - if (!!(this.kind && 8216 /* SomeInstantiatableType */) && this.isNamedTypeSymbol() && !this.isTypeParameter()) { - return this.getTypeParameters(); - } - - if (!this._allowedToReferenceTypeParameters) { - this._allowedToReferenceTypeParameters = TypeScript.PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl(this.getDeclarations()[0]); - } - - return this._allowedToReferenceTypeParameters; - }; - - PullTypeSymbol.prototype.isGeneric = function () { - return (this._typeParameters && this._typeParameters.length > 0) || this._hasGenericSignature || this._hasGenericMember || this.isArrayNamedTypeReference(); - }; - - PullTypeSymbol.prototype.canUseSimpleInstantiationCache = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return true; - } - - var typeParameters = this.getTypeParameters(); - return typeArgumentMap && this.isNamedTypeSymbol() && typeParameters.length === 1 && typeArgumentMap[typeParameters[0].pullSymbolID].kind !== 8388608 /* ObjectType */; - }; - - PullTypeSymbol.prototype.getSimpleInstantiationCacheId = function (typeArgumentMap) { - if (this.isTypeParameter()) { - return typeArgumentMap[0].pullSymbolID; - } - - return typeArgumentMap[this.getTypeParameters()[0].pullSymbolID].pullSymbolID; - }; - - PullTypeSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - this._simpleInstantiationCache = []; - } - - this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)] = specializedVersionOfThisType; - } else { - if (!this._complexInstantiationCache) { - this._complexInstantiationCache = TypeScript.createIntrinsicsObject(); - } - - this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)] = specializedVersionOfThisType; - } - - if (!this._specializedVersionsOfThisType) { - this._specializedVersionsOfThisType = []; - } - - this._specializedVersionsOfThisType.push(specializedVersionOfThisType); - }; - - PullTypeSymbol.prototype.getSpecialization = function (typeArgumentMap) { - if (this.canUseSimpleInstantiationCache(typeArgumentMap)) { - if (!this._simpleInstantiationCache) { - return null; - } - - var result = this._simpleInstantiationCache[this.getSimpleInstantiationCacheId(typeArgumentMap)]; - return result || null; - } else { - if (!this._complexInstantiationCache) { - return null; - } - - if (this.getAllowedToReferenceTypeParameters().length == 0) { - return this; - } - - var result = this._complexInstantiationCache[getIDForTypeSubstitutions(this, typeArgumentMap)]; - return result || null; - } - }; - - PullTypeSymbol.prototype.getKnownSpecializations = function () { - if (!this._specializedVersionsOfThisType) { - return TypeScript.sentinelEmptyArray; - } - - return this._specializedVersionsOfThisType; - }; - - PullTypeSymbol.prototype.getTypeArguments = function () { - return null; - }; - - PullTypeSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeParameters(); - }; - - PullTypeSymbol.prototype.addCallOrConstructSignaturePrerequisiteBase = function (signature) { - if (signature.isGeneric()) { - this._hasGenericSignature = true; - } - - signature.functionType = this; - }; - - PullTypeSymbol.prototype.addCallSignaturePrerequisite = function (callSignature) { - if (!this._callSignatures) { - this._callSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(callSignature); - }; - - PullTypeSymbol.prototype.appendCallSignature = function (callSignature) { - this.addCallSignaturePrerequisite(callSignature); - this._callSignatures.push(callSignature); - }; - - PullTypeSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - this.addCallSignaturePrerequisite(callSignature); - TypeScript.Debug.assert(index <= this._callSignatures.length); - if (index === this._callSignatures.length) { - this._callSignatures.push(callSignature); - } else { - this._callSignatures.splice(index, 0, callSignature); - } - }; - - PullTypeSymbol.prototype.addConstructSignaturePrerequisite = function (constructSignature) { - if (!this._constructSignatures) { - this._constructSignatures = []; - } - - this.addCallOrConstructSignaturePrerequisiteBase(constructSignature); - }; - - PullTypeSymbol.prototype.appendConstructSignature = function (constructSignature) { - this.addConstructSignaturePrerequisite(constructSignature); - this._constructSignatures.push(constructSignature); - }; - - PullTypeSymbol.prototype.insertConstructSignatureAtIndex = function (constructSignature, index) { - this.addConstructSignaturePrerequisite(constructSignature); - TypeScript.Debug.assert(index <= this._constructSignatures.length); - if (index === this._constructSignatures.length) { - this._constructSignatures.push(constructSignature); - } else { - this._constructSignatures.splice(index, 0, constructSignature); - } - }; - - PullTypeSymbol.prototype.addIndexSignature = function (indexSignature) { - if (!this._indexSignatures) { - this._indexSignatures = []; - } - - this._indexSignatures[this._indexSignatures.length] = indexSignature; - - if (indexSignature.isGeneric()) { - this._hasGenericSignature = true; - } - - indexSignature.functionType = this; - }; - - PullTypeSymbol.prototype.hasOwnCallSignatures = function () { - return this._callSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnCallSignatures = function () { - return this._callSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getCallSignatures = function () { - if (this._allCallSignatures) { - return this._allCallSignatures; - } - - var signatures = []; - - if (this._callSignatures) { - signatures = signatures.concat(this._callSignatures); - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._callSignatures, this._extendedTypes[i].getCallSignatures(), signatures); - } - } - - this._allCallSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnConstructSignatures = function () { - return this._constructSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnDeclaredConstructSignatures = function () { - return this._constructSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getConstructSignatures = function () { - if (this._allConstructSignatures) { - return this._allConstructSignatures; - } - - var signatures = []; - - if (this._constructSignatures) { - signatures = signatures.concat(this._constructSignatures); - } else if (this.isConstructor()) { - if (this._extendedTypes && this._extendedTypes.length > 0) { - signatures = this.getBaseClassConstructSignatures(this._extendedTypes[0]); - } else { - signatures = [this.getDefaultClassConstructSignature()]; - } - } - - if (this._extendedTypes && this.kind === 16 /* Interface */) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._constructSignatures, this._extendedTypes[i].getConstructSignatures(), signatures); - } - } - - this._allConstructSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.hasOwnIndexSignatures = function () { - return this._indexSignatures !== null; - }; - - PullTypeSymbol.prototype.getOwnIndexSignatures = function () { - return this._indexSignatures || TypeScript.sentinelEmptyArray; - }; - - PullTypeSymbol.prototype.getIndexSignatures = function () { - if (this._allIndexSignatures) { - return this._allIndexSignatures; - } - - var signatures = []; - - if (this._indexSignatures) { - signatures = signatures.concat(this._indexSignatures); - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - if (this._extendedTypes[i].hasBase(this)) { - continue; - } - - this._getResolver()._addUnhiddenSignaturesFromBaseType(this._indexSignatures, this._extendedTypes[i].getIndexSignatures(), signatures); - } - } - - this._allIndexSignatures = signatures; - - return signatures; - }; - - PullTypeSymbol.prototype.getIndexSignaturesOfAugmentedType = function (resolver, globalFunctionInterface, globalObjectInterface) { - if (!this._allIndexSignaturesOfAugmentedType) { - var initialIndexSignatures = this.getIndexSignatures(); - var shouldAddFunctionSignatures = false; - var shouldAddObjectSignatures = false; - - if (globalFunctionInterface && this.isFunctionType() && this !== globalFunctionInterface) { - var functionIndexSignatures = globalFunctionInterface.getIndexSignatures(); - if (functionIndexSignatures.length) { - shouldAddFunctionSignatures = true; - } - } - - if (globalObjectInterface && this !== globalObjectInterface) { - var objectIndexSignatures = globalObjectInterface.getIndexSignatures(); - if (objectIndexSignatures.length) { - shouldAddObjectSignatures = true; - } - } - - if (shouldAddFunctionSignatures || shouldAddObjectSignatures) { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures.slice(0); - if (shouldAddFunctionSignatures) { - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, functionIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - if (shouldAddObjectSignatures) { - if (shouldAddFunctionSignatures) { - initialIndexSignatures = initialIndexSignatures.concat(functionIndexSignatures); - } - resolver._addUnhiddenSignaturesFromBaseType(initialIndexSignatures, objectIndexSignatures, this._allIndexSignaturesOfAugmentedType); - } - } else { - this._allIndexSignaturesOfAugmentedType = initialIndexSignatures; - } - } - - return this._allIndexSignaturesOfAugmentedType; - }; - - PullTypeSymbol.prototype.getBaseClassConstructSignatures = function (baseType) { - TypeScript.Debug.assert(this.isConstructor() && baseType.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length === 1); - if (baseType.hasBase(this)) { - return null; - } - - var baseConstructSignatures = baseType.getConstructSignatures(); - var signatures = []; - for (var i = 0; i < baseConstructSignatures.length; i++) { - var baseSignature = baseConstructSignatures[i]; - - baseSignature._resolveDeclaredSymbol(); - var currentSignature = new PullSignatureSymbol(2097152 /* ConstructSignature */, baseSignature.isDefinition()); - currentSignature.returnType = instanceTypeSymbol; - currentSignature.addTypeParametersFromReturnType(); - for (var j = 0; j < baseSignature.parameters.length; j++) { - currentSignature.addParameter(baseSignature.parameters[j], baseSignature.parameters[j].isOptional); - } - if (baseSignature.parameters.length > 0) { - currentSignature.hasVarArgs = baseSignature.parameters[baseSignature.parameters.length - 1].isVarArg; - } - - currentSignature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(currentSignature); - signatures.push(currentSignature); - } - - return signatures; - }; - - PullTypeSymbol.prototype.getDefaultClassConstructSignature = function () { - TypeScript.Debug.assert(this.isConstructor()); - var instanceTypeSymbol = this.getAssociatedContainerType(); - TypeScript.Debug.assert(instanceTypeSymbol.getDeclarations().length == 1); - var signature = new PullSignatureSymbol(2097152 /* ConstructSignature */, true); - signature.returnType = instanceTypeSymbol; - signature.addTypeParametersFromReturnType(); - signature.addDeclaration(instanceTypeSymbol.getDeclarations()[0]); - this.addCallOrConstructSignaturePrerequisiteBase(signature); - - return signature; - }; - - PullTypeSymbol.prototype.addImplementedType = function (implementedType) { - if (!implementedType) { - return; - } - - if (!this._implementedTypes) { - this._implementedTypes = []; - } - - this._implementedTypes[this._implementedTypes.length] = implementedType; - - implementedType.addTypeThatExplicitlyImplementsThisType(this); - }; - - PullTypeSymbol.prototype.getImplementedTypes = function () { - if (!this._implementedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._implementedTypes; - }; - - PullTypeSymbol.prototype.addExtendedType = function (extendedType) { - if (!extendedType) { - return; - } - - if (!this._extendedTypes) { - this._extendedTypes = []; - } - - this._extendedTypes[this._extendedTypes.length] = extendedType; - - extendedType.addTypeThatExtendsThisType(this); - }; - - PullTypeSymbol.prototype.getExtendedTypes = function () { - if (!this._extendedTypes) { - return TypeScript.sentinelEmptyArray; - } - - return this._extendedTypes; - }; - - PullTypeSymbol.prototype.addTypeThatExtendsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - this._typesThatExtendThisType[this._typesThatExtendThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExtendThisType = function () { - if (!this._typesThatExtendThisType) { - this._typesThatExtendThisType = []; - } - - return this._typesThatExtendThisType; - }; - - PullTypeSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - if (!type) { - return; - } - - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - this._typesThatExplicitlyImplementThisType[this._typesThatExplicitlyImplementThisType.length] = type; - }; - - PullTypeSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - if (!this._typesThatExplicitlyImplementThisType) { - this._typesThatExplicitlyImplementThisType = []; - } - - return this._typesThatExplicitlyImplementThisType; - }; - - PullTypeSymbol.prototype.hasBase = function (potentialBase, visited) { - if (typeof visited === "undefined") { visited = []; } - if (this === potentialBase || this.getRootSymbol() === potentialBase || this === potentialBase.getRootSymbol()) { - return true; - } - - if (TypeScript.ArrayUtilities.contains(visited, this)) { - return true; - } - - visited.push(this); - - var extendedTypes = this.getExtendedTypes(); - - for (var i = 0; i < extendedTypes.length; i++) { - if (extendedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - var implementedTypes = this.getImplementedTypes(); - - for (var i = 0; i < implementedTypes.length; i++) { - if (implementedTypes[i].hasBase(potentialBase, visited)) { - return true; - } - } - - visited.pop(); - - return false; - }; - - PullTypeSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - if (baseType.isError()) { - return false; - } - - var thisIsClass = this.isClass(); - if (isExtendedType) { - if (thisIsClass) { - return baseType.kind === 8 /* Class */; - } - } else { - if (!thisIsClass) { - return false; - } - } - - return !!(baseType.kind & (16 /* Interface */ | 8 /* Class */)); - }; - - PullTypeSymbol.prototype.findMember = function (name, lookInParent) { - var memberSymbol = null; - - if (this._memberNameCache) { - memberSymbol = this._memberNameCache[name]; - } - - if (memberSymbol || !lookInParent) { - return memberSymbol; - } - - if (this._extendedTypes) { - for (var i = 0; i < this._extendedTypes.length; i++) { - memberSymbol = this._extendedTypes[i].findMember(name, lookInParent); - - if (memberSymbol) { - return memberSymbol; - } - } - } - - return null; - }; - - PullTypeSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedTypeNameCache) { - return null; - } - - memberSymbol = this._enclosedTypeNameCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - var memberSymbol; - - if (!this._enclosedContainerCache) { - return null; - } - - memberSymbol = this._enclosedContainerCache[name]; - - if (memberSymbol && kind !== 0 /* None */) { - memberSymbol = TypeScript.hasFlag(memberSymbol.kind, kind) ? memberSymbol : null; - } - - return memberSymbol; - }; - - PullTypeSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - var allMembers = []; - - if (this._members !== TypeScript.sentinelEmptyArray) { - for (var i = 0, n = this._members.length; i < n; i++) { - var member = this._members[i]; - if ((member.kind & searchDeclKind) && (memberVisiblity !== 2 /* externallyVisible */ || !member.anyDeclHasFlag(2 /* Private */))) { - allMembers[allMembers.length] = member; - } - } - } - - if (this._extendedTypes) { - var extenedMembersVisibility = memberVisiblity !== 0 /* all */ ? 2 /* externallyVisible */ : 0 /* all */; - - for (var i = 0, n = this._extendedTypes.length; i < n; i++) { - var extendedMembers = this._extendedTypes[i].getAllMembers(searchDeclKind, extenedMembersVisibility); - - for (var j = 0, m = extendedMembers.length; j < m; j++) { - var extendedMember = extendedMembers[j]; - if (!(this._memberNameCache && this._memberNameCache[extendedMember.name])) { - allMembers[allMembers.length] = extendedMember; - } - } - } - } - - if (this.isContainer()) { - if (this._enclosedMemberTypes) { - for (var i = 0; i < this._enclosedMemberTypes.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberTypes[i]; - } - } - if (this._enclosedMemberContainers) { - for (var i = 0; i < this._enclosedMemberContainers.length; i++) { - allMembers[allMembers.length] = this._enclosedMemberContainers[i]; - } - } - } - - return allMembers; - }; - - PullTypeSymbol.prototype.findTypeParameter = function (name) { - if (!this._typeParameterNameCache) { - return null; - } - - return this._typeParameterNameCache[name]; - }; - - PullTypeSymbol.prototype.setResolved = function () { - _super.prototype.setResolved.call(this); - }; - - PullTypeSymbol.prototype.getNamePartForFullName = function () { - var name = _super.prototype.getNamePartForFullName.call(this); - - var typars = this.getTypeArgumentsOrTypeParameters(); - var typarString = PullSymbol.getTypeParameterString(typars, this, true); - return name + typarString; - }; - - PullTypeSymbol.prototype.getScopedName = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName) { - return this.getScopedNameEx(scopeSymbol, skipTypeParametersInName, useConstraintInName, false, false, skipInternalAliasName).toString(); - }; - - PullTypeSymbol.prototype.isNamedTypeSymbol = function () { - var kind = this.kind; - if (kind === 2 /* Primitive */ || kind === 8 /* Class */ || kind === 4 /* Container */ || kind === 32 /* DynamicModule */ || kind === 128 /* TypeAlias */ || kind === 64 /* Enum */ || kind === 8192 /* TypeParameter */ || ((kind === 16 /* Interface */ || kind === 8388608 /* ObjectType */) && this.name !== "")) { - return true; - } - - return false; - }; - - PullTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - var s = this.getScopedNameEx(scopeSymbol, false, useConstraintInName).toString(); - return s; - }; - - PullTypeSymbol.prototype.getScopedNameEx = function (scopeSymbol, skipTypeParametersInName, useConstraintInName, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName, shouldAllowArrayType) { - if (typeof shouldAllowArrayType === "undefined") { shouldAllowArrayType = true; } - if (this.isArrayNamedTypeReference() && shouldAllowArrayType) { - var elementType = this.getElementType(); - var elementMemberName = elementType ? (elementType.isArrayNamedTypeReference() || elementType.isNamedTypeSymbol() ? elementType.getScopedNameEx(scopeSymbol, false, false, getPrettyTypeName, getTypeParamMarkerInfo, skipInternalAliasName) : elementType.getMemberTypeNameEx(false, scopeSymbol, getPrettyTypeName)) : TypeScript.MemberName.create("any"); - return TypeScript.MemberName.create(elementMemberName, "", "[]"); - } - - if (!this.isNamedTypeSymbol()) { - return this.getMemberTypeNameEx(true, scopeSymbol, getPrettyTypeName); - } - - if (skipTypeParametersInName) { - return TypeScript.MemberName.create(_super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName)); - } else { - var builder = new TypeScript.MemberNameArray(); - builder.prefix = _super.prototype.getScopedName.call(this, scopeSymbol, skipTypeParametersInName, useConstraintInName, skipInternalAliasName); - - var typars = this.getTypeArgumentsOrTypeParameters(); - builder.add(PullSymbol.getTypeParameterStringEx(typars, scopeSymbol, getTypeParamMarkerInfo, useConstraintInName)); - - return builder; - } - }; - - PullTypeSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - return members.length === 0 && constructSignatures.length === 0 && callSignatures.length > 1; - }; - - PullTypeSymbol.prototype.getTypeOfSymbol = function () { - var associatedContainerType = this.getAssociatedContainerType(); - if (associatedContainerType && associatedContainerType.isNamedTypeSymbol()) { - return associatedContainerType; - } - - var functionSymbol = this.getFunctionSymbol(); - if (functionSymbol && functionSymbol.kind === 16384 /* Function */ && !TypeScript.PullHelpers.isSymbolLocal(functionSymbol)) { - return TypeScript.PullHelpers.isExportedSymbolInClodule(functionSymbol) ? null : functionSymbol; - } - - return null; - }; - - PullTypeSymbol.prototype.getMemberTypeNameEx = function (topLevel, scopeSymbol, getPrettyTypeName) { - var members = this.getMembers(); - var callSignatures = this.getCallSignatures(); - var constructSignatures = this.getConstructSignatures(); - var indexSignatures = this.getIndexSignatures(); - - var typeOfSymbol = this.getTypeOfSymbol(); - if (typeOfSymbol) { - var nameForTypeOf = typeOfSymbol.getScopedNameEx(scopeSymbol, true); - return TypeScript.MemberName.create(nameForTypeOf, "typeof ", ""); - } - - if (members.length > 0 || callSignatures.length > 0 || constructSignatures.length > 0 || indexSignatures.length > 0) { - if (this._inMemberTypeNameEx) { - return TypeScript.MemberName.create("any"); - } - - this._inMemberTypeNameEx = true; - - var allMemberNames = new TypeScript.MemberNameArray(); - var curlies = !topLevel || indexSignatures.length !== 0; - var delim = "; "; - for (var i = 0; i < members.length; i++) { - if (members[i].kind === 65536 /* Method */ && members[i].type.hasOnlyOverloadCallSignatures()) { - var methodCallSignatures = members[i].type.getCallSignatures(); - var nameStr = members[i].getDisplayName(scopeSymbol) + (members[i].isOptional ? "?" : ""); - ; - var methodMemberNames = PullSignatureSymbol.getSignaturesTypeNameEx(methodCallSignatures, nameStr, false, false, scopeSymbol); - allMemberNames.addAll(methodMemberNames); - } else { - var memberTypeName = members[i].getNameAndTypeNameEx(scopeSymbol); - if (memberTypeName.isArray() && memberTypeName.delim === delim) { - allMemberNames.addAll(memberTypeName.entries); - } else { - allMemberNames.add(memberTypeName); - } - } - curlies = true; - } - - var getPrettyFunctionOverload = getPrettyTypeName && !curlies && this.hasOnlyOverloadCallSignatures(); - - var signatureCount = callSignatures.length + constructSignatures.length + indexSignatures.length; - var useShortFormSignature = !curlies && (signatureCount === 1); - var signatureMemberName; - - if (callSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(callSignatures, "", useShortFormSignature, false, scopeSymbol, getPrettyFunctionOverload); - allMemberNames.addAll(signatureMemberName); - } - - if (constructSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(constructSignatures, "new", useShortFormSignature, false, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if (indexSignatures.length > 0) { - signatureMemberName = PullSignatureSymbol.getSignaturesTypeNameEx(indexSignatures, "", useShortFormSignature, true, scopeSymbol); - allMemberNames.addAll(signatureMemberName); - } - - if ((curlies) || (!getPrettyFunctionOverload && (signatureCount > 1) && topLevel)) { - allMemberNames.prefix = "{ "; - allMemberNames.suffix = "}"; - allMemberNames.delim = delim; - } else if (allMemberNames.entries.length > 1) { - allMemberNames.delim = delim; - } - - this._inMemberTypeNameEx = false; - - return allMemberNames; - } - - return TypeScript.MemberName.create("{}"); - }; - - PullTypeSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - return 2 /* Closed */; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameter = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - return this.getWrappingTypeParameterID(typeParameterArgumentMap, skipTypeArgumentCheck) != 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterID = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - - if (type.isTypeParameter()) { - if (typeParameterArgumentMap[type.pullSymbolID] || typeParameterArgumentMap[type.getRootSymbol().pullSymbolID]) { - return type.pullSymbolID; - } - - var constraint = type.getConstraint(); - var wrappingTypeParameterID = constraint ? constraint.getWrappingTypeParameterID(typeParameterArgumentMap) : 0; - return wrappingTypeParameterID; - } - - if (type.inWrapCheck) { - return 0; - } - - this._wrapsTypeParameterCache = this._wrapsTypeParameterCache || new TypeScript.WrapsTypeParameterCache(); - var wrappingTypeParameterID = this._wrapsTypeParameterCache.getWrapsTypeParameter(typeParameterArgumentMap); - if (wrappingTypeParameterID === undefined) { - wrappingTypeParameterID = this.getWrappingTypeParameterIDWorker(typeParameterArgumentMap, skipTypeArgumentCheck); - - this._wrapsTypeParameterCache.setWrapsTypeParameter(typeParameterArgumentMap, wrappingTypeParameterID); - } - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDFromSignatures = function (signatures, typeParameterArgumentMap) { - for (var i = 0; i < signatures.length; i++) { - var wrappingTypeParameterID = signatures[i].getWrappingTypeParameterID(typeParameterArgumentMap); - if (wrappingTypeParameterID !== 0) { - return wrappingTypeParameterID; - } - } - - return 0; - }; - - PullTypeSymbol.prototype.getWrappingTypeParameterIDWorker = function (typeParameterArgumentMap, skipTypeArgumentCheck) { - var type = this; - var wrappingTypeParameterID = 0; - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = true; - - var typeArguments = type.getTypeArguments(); - - if (type.isGeneric() && !typeArguments) { - typeArguments = type.getTypeParameters(); - } - - if (typeArguments) { - for (var i = 0; !wrappingTypeParameterID && i < typeArguments.length; i++) { - wrappingTypeParameterID = typeArguments[i].getWrappingTypeParameterID(typeParameterArgumentMap); - } - } - } - - if (skipTypeArgumentCheck || !(type.kind & 8216 /* SomeInstantiatableType */) || !type.name) { - var members = type.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; !wrappingTypeParameterID && i < members.length; i++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(members[i]); - wrappingTypeParameterID = members[i].type.getWrappingTypeParameterID(typeParameterArgumentMap); - } - - wrappingTypeParameterID = wrappingTypeParameterID || this.getWrappingTypeParameterIDFromSignatures(type.getCallSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getConstructSignatures(), typeParameterArgumentMap) || this.getWrappingTypeParameterIDFromSignatures(type.getIndexSignatures(), typeParameterArgumentMap); - } - - if (!skipTypeArgumentCheck) { - type.inWrapCheck = false; - } - - return wrappingTypeParameterID; - }; - - PullTypeSymbol.prototype.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference = function (enclosingType) { - TypeScript.Debug.assert(this.isNamedTypeSymbol()); - TypeScript.Debug.assert(TypeScript.PullHelpers.getRootType(enclosingType) == enclosingType); - var knownWrapMap = TypeScript.BitMatrix.getBitMatrix(true); - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap); - knownWrapMap.release(); - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse = function (enclosingType, knownWrapMap) { - var wrapsIntoInfinitelyExpandingTypeReference = knownWrapMap.valueAt(this.pullSymbolID, enclosingType.pullSymbolID); - if (wrapsIntoInfinitelyExpandingTypeReference != undefined) { - return wrapsIntoInfinitelyExpandingTypeReference; - } - - if (this.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - this.inWrapInfiniteExpandingReferenceCheck = true; - wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker(enclosingType, knownWrapMap); - knownWrapMap.setValueAt(this.pullSymbolID, enclosingType.pullSymbolID, wrapsIntoInfinitelyExpandingTypeReference); - this.inWrapInfiniteExpandingReferenceCheck = false; - - return wrapsIntoInfinitelyExpandingTypeReference; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceWorker = function (enclosingType, knownWrapMap) { - var thisRootType = TypeScript.PullHelpers.getRootType(this); - - if (thisRootType != enclosingType) { - var thisIsNamedType = this.isNamedTypeSymbol(); - - if (thisIsNamedType) { - if (thisRootType.inWrapInfiniteExpandingReferenceCheck) { - return false; - } - - thisRootType.inWrapInfiniteExpandingReferenceCheck = true; - } - - var wrapsIntoInfinitelyExpandingTypeReference = this._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure(enclosingType, knownWrapMap); - - if (thisIsNamedType) { - thisRootType.inWrapInfiniteExpandingReferenceCheck = false; - } - - return wrapsIntoInfinitelyExpandingTypeReference; - } - - var enclosingTypeParameters = enclosingType.getTypeParameters(); - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (TypeScript.ArrayUtilities.contains(enclosingTypeParameters, typeArguments[i])) { - continue; - } - - if (typeArguments[i].wrapsSomeTypeParameter(this.getTypeParameterArgumentMap())) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceStructure = function (enclosingType, knownWrapMap) { - var members = this.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - for (var i = 0; i < members.length; i++) { - if (members[i].type && members[i].type._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReferenceRecurse(enclosingType, knownWrapMap)) { - return true; - } - } - - var sigs = this.getCallSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getConstructSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - sigs = this.getIndexSignatures(); - for (var i = 0; i < sigs.length; i++) { - if (sigs[i]._wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType, knownWrapMap)) { - return true; - } - } - - return false; - }; - - PullTypeSymbol.prototype.widenedType = function (resolver, ast, context) { - if (!this._widenedType) { - this._widenedType = resolver.widenType(this, ast, context); - } - return this._widenedType; - }; - return PullTypeSymbol; - })(PullSymbol); - TypeScript.PullTypeSymbol = PullTypeSymbol; - - var PullPrimitiveTypeSymbol = (function (_super) { - __extends(PullPrimitiveTypeSymbol, _super); - function PullPrimitiveTypeSymbol(name) { - _super.call(this, name, 2 /* Primitive */); - - this.isResolved = true; - } - PullPrimitiveTypeSymbol.prototype.isAny = function () { - return !this.isStringConstant() && this.name === "any"; - }; - - PullPrimitiveTypeSymbol.prototype.isNull = function () { - return !this.isStringConstant() && this.name === "null"; - }; - - PullPrimitiveTypeSymbol.prototype.isUndefined = function () { - return !this.isStringConstant() && this.name === "undefined"; - }; - - PullPrimitiveTypeSymbol.prototype.isStringConstant = function () { - return false; - }; - - PullPrimitiveTypeSymbol.prototype.setUnresolved = function () { - }; - - PullPrimitiveTypeSymbol.prototype.getDisplayName = function () { - if (this.isNull() || this.isUndefined()) { - return "any"; - } else { - return _super.prototype.getDisplayName.call(this); - } - }; - return PullPrimitiveTypeSymbol; - })(PullTypeSymbol); - TypeScript.PullPrimitiveTypeSymbol = PullPrimitiveTypeSymbol; - - var PullStringConstantTypeSymbol = (function (_super) { - __extends(PullStringConstantTypeSymbol, _super); - function PullStringConstantTypeSymbol(name) { - _super.call(this, name); - } - PullStringConstantTypeSymbol.prototype.isStringConstant = function () { - return true; - }; - return PullStringConstantTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullStringConstantTypeSymbol = PullStringConstantTypeSymbol; - - var PullErrorTypeSymbol = (function (_super) { - __extends(PullErrorTypeSymbol, _super); - function PullErrorTypeSymbol(_anyType, name) { - _super.call(this, name); - this._anyType = _anyType; - - TypeScript.Debug.assert(this._anyType); - this.isResolved = true; - } - PullErrorTypeSymbol.prototype.isError = function () { - return true; - }; - - PullErrorTypeSymbol.prototype._getResolver = function () { - return this._anyType._getResolver(); - }; - - PullErrorTypeSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - - PullErrorTypeSymbol.prototype.toString = function (scopeSymbol, useConstraintInName) { - return this._anyType.getName(scopeSymbol, useConstraintInName); - }; - return PullErrorTypeSymbol; - })(PullPrimitiveTypeSymbol); - TypeScript.PullErrorTypeSymbol = PullErrorTypeSymbol; - - var PullContainerSymbol = (function (_super) { - __extends(PullContainerSymbol, _super); - function PullContainerSymbol(name, kind) { - _super.call(this, name, kind); - this.instanceSymbol = null; - this.assignedValue = null; - this.assignedType = null; - this.assignedContainer = null; - } - PullContainerSymbol.prototype.isContainer = function () { - return true; - }; - - PullContainerSymbol.prototype.setInstanceSymbol = function (symbol) { - this.instanceSymbol = symbol; - }; - - PullContainerSymbol.prototype.getInstanceSymbol = function () { - return this.instanceSymbol; - }; - - PullContainerSymbol.prototype.setExportAssignedValueSymbol = function (symbol) { - this.assignedValue = symbol; - }; - - PullContainerSymbol.prototype.getExportAssignedValueSymbol = function () { - return this.assignedValue; - }; - - PullContainerSymbol.prototype.setExportAssignedTypeSymbol = function (type) { - this.assignedType = type; - }; - - PullContainerSymbol.prototype.getExportAssignedTypeSymbol = function () { - return this.assignedType; - }; - - PullContainerSymbol.prototype.setExportAssignedContainerSymbol = function (container) { - this.assignedContainer = container; - }; - - PullContainerSymbol.prototype.getExportAssignedContainerSymbol = function () { - return this.assignedContainer; - }; - - PullContainerSymbol.prototype.hasExportAssignment = function () { - return !!this.assignedValue || !!this.assignedType || !!this.assignedContainer; - }; - - PullContainerSymbol.usedAsSymbol = function (containerSymbol, symbol) { - if (!containerSymbol || !containerSymbol.isContainer()) { - return false; - } - - if (!containerSymbol.isAlias() && containerSymbol.type === symbol) { - return true; - } - - var moduleSymbol = containerSymbol; - var valueExportSymbol = moduleSymbol.getExportAssignedValueSymbol(); - var typeExportSymbol = moduleSymbol.getExportAssignedTypeSymbol(); - var containerExportSymbol = moduleSymbol.getExportAssignedContainerSymbol(); - if (valueExportSymbol || typeExportSymbol || containerExportSymbol) { - if (valueExportSymbol === symbol || typeExportSymbol == symbol || containerExportSymbol == symbol) { - return true; - } - - if (containerExportSymbol != containerSymbol) { - return PullContainerSymbol.usedAsSymbol(containerExportSymbol, symbol); - } - } - - return false; - }; - - PullContainerSymbol.prototype.getInstanceType = function () { - return this.instanceSymbol ? this.instanceSymbol.type : null; - }; - return PullContainerSymbol; - })(PullTypeSymbol); - TypeScript.PullContainerSymbol = PullContainerSymbol; - - var PullTypeAliasSymbol = (function (_super) { - __extends(PullTypeAliasSymbol, _super); - function PullTypeAliasSymbol(name) { - _super.call(this, name, 128 /* TypeAlias */); - this._assignedValue = null; - this._assignedType = null; - this._assignedContainer = null; - this._isUsedAsValue = false; - this._typeUsedExternally = false; - this._isUsedInExportAlias = false; - this.retrievingExportAssignment = false; - this.linkedAliasSymbols = null; - } - PullTypeAliasSymbol.prototype.isUsedInExportedAlias = function () { - this._resolveDeclaredSymbol(); - return this._isUsedInExportAlias; - }; - - PullTypeAliasSymbol.prototype.typeUsedExternally = function () { - this._resolveDeclaredSymbol(); - return this._typeUsedExternally; - }; - - PullTypeAliasSymbol.prototype.isUsedAsValue = function () { - this._resolveDeclaredSymbol(); - return this._isUsedAsValue; - }; - - PullTypeAliasSymbol.prototype.setTypeUsedExternally = function () { - this._typeUsedExternally = true; - }; - - PullTypeAliasSymbol.prototype.setIsUsedInExportedAlias = function () { - this._isUsedInExportAlias = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedInExportedAlias(); - }); - } - }; - - PullTypeAliasSymbol.prototype.addLinkedAliasSymbol = function (contingentValueSymbol) { - if (!this.linkedAliasSymbols) { - this.linkedAliasSymbols = [contingentValueSymbol]; - } else { - this.linkedAliasSymbols.push(contingentValueSymbol); - } - }; - - PullTypeAliasSymbol.prototype.setIsUsedAsValue = function () { - this._isUsedAsValue = true; - if (this.linkedAliasSymbols) { - this.linkedAliasSymbols.forEach(function (s) { - return s.setIsUsedAsValue(); - }); - } - }; - - PullTypeAliasSymbol.prototype.assignedValue = function () { - this._resolveDeclaredSymbol(); - return this._assignedValue; - }; - - PullTypeAliasSymbol.prototype.assignedType = function () { - this._resolveDeclaredSymbol(); - return this._assignedType; - }; - - PullTypeAliasSymbol.prototype.assignedContainer = function () { - this._resolveDeclaredSymbol(); - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.isAlias = function () { - return true; - }; - PullTypeAliasSymbol.prototype.isContainer = function () { - return true; - }; - - PullTypeAliasSymbol.prototype.setAssignedValueSymbol = function (symbol) { - this._assignedValue = symbol; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedValueSymbol = function () { - if (this._assignedValue) { - return this._assignedValue; - } - - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - if (this._assignedContainer.hasExportAssignment()) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedValueSymbol(); - this.retrievingExportAssignment = false; - return sym; - } - - return this._assignedContainer.getInstanceSymbol(); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.setAssignedTypeSymbol = function (type) { - this._assignedType = type; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedTypeSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedType) { - if (this._assignedType.isAlias()) { - this.retrievingExportAssignment = true; - var sym = this._assignedType.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - } else if (this._assignedType !== this._assignedContainer) { - return this._assignedType; - } - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedTypeSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.setAssignedContainerSymbol = function (container) { - this._assignedContainer = container; - }; - - PullTypeAliasSymbol.prototype.getExportAssignedContainerSymbol = function () { - if (this.retrievingExportAssignment) { - return null; - } - - if (this._assignedContainer) { - this.retrievingExportAssignment = true; - var sym = this._assignedContainer.getExportAssignedContainerSymbol(); - this.retrievingExportAssignment = false; - if (sym) { - return sym; - } - } - - return this._assignedContainer; - }; - - PullTypeAliasSymbol.prototype.getMembers = function () { - if (this._assignedType) { - return this._assignedType.getMembers(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getCallSignatures = function () { - if (this._assignedType) { - return this._assignedType.getCallSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getConstructSignatures = function () { - if (this._assignedType) { - return this._assignedType.getConstructSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.getIndexSignatures = function () { - if (this._assignedType) { - return this._assignedType.getIndexSignatures(); - } - - return TypeScript.sentinelEmptyArray; - }; - - PullTypeAliasSymbol.prototype.findMember = function (name) { - if (this._assignedType) { - return this._assignedType.findMember(name, true); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedType = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedType(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.findNestedContainer = function (name) { - if (this._assignedType) { - return this._assignedType.findNestedContainer(name); - } - - return null; - }; - - PullTypeAliasSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisibility) { - if (this._assignedType) { - return this._assignedType.getAllMembers(searchDeclKind, memberVisibility); - } - - return TypeScript.sentinelEmptyArray; - }; - return PullTypeAliasSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeAliasSymbol = PullTypeAliasSymbol; - - var PullTypeParameterSymbol = (function (_super) { - __extends(PullTypeParameterSymbol, _super); - function PullTypeParameterSymbol(name) { - _super.call(this, name, 8192 /* TypeParameter */); - this._constraint = null; - } - PullTypeParameterSymbol.prototype.isTypeParameter = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.setConstraint = function (constraintType) { - this._constraint = constraintType; - }; - - PullTypeParameterSymbol.prototype.getConstraint = function () { - return this._constraint; - }; - - PullTypeParameterSymbol.prototype.getBaseConstraint = function (semanticInfoChain) { - var preBaseConstraint = this.getConstraintRecursively({}); - TypeScript.Debug.assert(preBaseConstraint === null || !preBaseConstraint.isTypeParameter()); - return preBaseConstraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getConstraintRecursively = function (visitedTypeParameters) { - var constraint = this.getConstraint(); - - if (constraint) { - if (constraint.isTypeParameter()) { - var constraintAsTypeParameter = constraint; - if (!visitedTypeParameters[constraintAsTypeParameter.pullSymbolID]) { - visitedTypeParameters[constraintAsTypeParameter.pullSymbolID] = constraintAsTypeParameter; - return constraintAsTypeParameter.getConstraintRecursively(visitedTypeParameters); - } - } else { - return constraint; - } - } - - return null; - }; - - PullTypeParameterSymbol.prototype.getDefaultConstraint = function (semanticInfoChain) { - return this._constraint || semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeParameterSymbol.prototype.getCallSignatures = function () { - if (this._constraint) { - return this._constraint.getCallSignatures(); - } - - return _super.prototype.getCallSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getConstructSignatures = function () { - if (this._constraint) { - return this._constraint.getConstructSignatures(); - } - - return _super.prototype.getConstructSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.getIndexSignatures = function () { - if (this._constraint) { - return this._constraint.getIndexSignatures(); - } - - return _super.prototype.getIndexSignatures.call(this); - }; - - PullTypeParameterSymbol.prototype.isGeneric = function () { - return true; - }; - - PullTypeParameterSymbol.prototype.fullName = function (scopeSymbol) { - var name = this.getDisplayName(scopeSymbol); - var container = this.getContainer(); - if (container) { - var containerName = container.fullName(scopeSymbol); - name = name + " in " + containerName; - } - - return name; - }; - - PullTypeParameterSymbol.prototype.getName = function (scopeSymbol, useConstraintInName) { - var name = _super.prototype.getName.call(this, scopeSymbol); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.getDisplayName = function (scopeSymbol, useConstraintInName, skipInternalAliasName) { - var name = _super.prototype.getDisplayName.call(this, scopeSymbol, useConstraintInName, skipInternalAliasName); - - if (this.isPrinting) { - return name; - } - - this.isPrinting = true; - - if (useConstraintInName && this._constraint) { - name += " extends " + this._constraint.toString(scopeSymbol); - } - - this.isPrinting = false; - - return name; - }; - - PullTypeParameterSymbol.prototype.isExternallyVisible = function (inIsExternallyVisibleSymbols) { - return true; - }; - return PullTypeParameterSymbol; - })(PullTypeSymbol); - TypeScript.PullTypeParameterSymbol = PullTypeParameterSymbol; - - var PullAccessorSymbol = (function (_super) { - __extends(PullAccessorSymbol, _super); - function PullAccessorSymbol(name) { - _super.call(this, name, 4096 /* Property */); - this._getterSymbol = null; - this._setterSymbol = null; - } - PullAccessorSymbol.prototype.isAccessor = function () { - return true; - }; - - PullAccessorSymbol.prototype.setSetter = function (setter) { - if (!setter) { - return; - } - - this._setterSymbol = setter; - }; - - PullAccessorSymbol.prototype.getSetter = function () { - return this._setterSymbol; - }; - - PullAccessorSymbol.prototype.setGetter = function (getter) { - if (!getter) { - return; - } - - this._getterSymbol = getter; - }; - - PullAccessorSymbol.prototype.getGetter = function () { - return this._getterSymbol; - }; - return PullAccessorSymbol; - })(PullSymbol); - TypeScript.PullAccessorSymbol = PullAccessorSymbol; - - function getIDForTypeSubstitutions(instantiatingTypeOrSignature, typeArgumentMap) { - var substitution = ""; - var members = null; - - var allowedToReferenceTypeParameters = instantiatingTypeOrSignature.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedToReferenceTypeParameters.length; i++) { - var typeParameter = allowedToReferenceTypeParameters[i]; - var typeParameterID = typeParameter.pullSymbolID; - var typeArg = typeArgumentMap[typeParameterID]; - if (!typeArg) { - typeArg = typeParameter; - } - substitution += typeParameterID + ":" + getIDForTypeSubstitutionsOfType(typeArg); - } - - return substitution; - } - TypeScript.getIDForTypeSubstitutions = getIDForTypeSubstitutions; - - function getIDForTypeSubstitutionsOfType(type) { - var structure; - if (type.isError()) { - structure = "E" + getIDForTypeSubstitutionsOfType(type._anyType); - } else if (!type.isNamedTypeSymbol()) { - structure = getIDForTypeSubstitutionsFromObjectType(type); - } - - if (!structure) { - structure = type.pullSymbolID + "#"; - } - - return structure; - } - - function getIDForTypeSubstitutionsFromObjectType(type) { - if (type.isResolved) { - var getIDForTypeSubStitutionWalker = new GetIDForTypeSubStitutionWalker(); - TypeScript.PullHelpers.walkPullTypeSymbolStructure(type, getIDForTypeSubStitutionWalker); - } - - return null; - } - - var GetIDForTypeSubStitutionWalker = (function () { - function GetIDForTypeSubStitutionWalker() { - this.structure = ""; - } - GetIDForTypeSubStitutionWalker.prototype.memberSymbolWalk = function (memberSymbol) { - this.structure += memberSymbol.name + "@" + getIDForTypeSubstitutionsOfType(memberSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.callSignatureWalk = function (signatureSymbol) { - this.structure += "("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.constructSignatureWalk = function (signatureSymbol) { - this.structure += "new("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.indexSignatureWalk = function (signatureSymbol) { - this.structure += "[]("; - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureParameterWalk = function (parameterSymbol) { - this.structure += parameterSymbol.name + "@" + getIDForTypeSubstitutionsOfType(parameterSymbol.type); - return true; - }; - GetIDForTypeSubStitutionWalker.prototype.signatureReturnTypeWalk = function (returnType) { - this.structure += ")" + getIDForTypeSubstitutionsOfType(returnType); - return true; - }; - return GetIDForTypeSubStitutionWalker; - })(); - - (function (GetAllMembersVisiblity) { - GetAllMembersVisiblity[GetAllMembersVisiblity["all"] = 0] = "all"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["internallyVisible"] = 1] = "internallyVisible"; - - GetAllMembersVisiblity[GetAllMembersVisiblity["externallyVisible"] = 2] = "externallyVisible"; - })(TypeScript.GetAllMembersVisiblity || (TypeScript.GetAllMembersVisiblity = {})); - var GetAllMembersVisiblity = TypeScript.GetAllMembersVisiblity; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var EnclosingTypeWalkerState = (function () { - function EnclosingTypeWalkerState() { - } - EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = false; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState = function () { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - return defaultEnclosingTypeWalkerState; - }; - - EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState = function (genericEnclosingType) { - var defaultEnclosingTypeWalkerState = new EnclosingTypeWalkerState(); - defaultEnclosingTypeWalkerState._hasSetEnclosingType = true; - defaultEnclosingTypeWalkerState._currentSymbols = [TypeScript.PullHelpers.getRootType(genericEnclosingType)]; - return defaultEnclosingTypeWalkerState; - }; - return EnclosingTypeWalkerState; - })(); - TypeScript.EnclosingTypeWalkerState = EnclosingTypeWalkerState; - - var PullTypeEnclosingTypeWalker = (function () { - function PullTypeEnclosingTypeWalker() { - this.setDefaultTypeWalkerState(); - } - PullTypeEnclosingTypeWalker.prototype.setDefaultTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.setNonGenericEnclosingTypeWalkerState = function () { - this.enclosingTypeWalkerState = PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolOrDeclBeUsedAsEnclosingTypeHelper = function (name, kind) { - return name && (kind === 8 /* Class */ || kind === 16 /* Interface */); - }; - - PullTypeEnclosingTypeWalker.prototype.canDeclBeUsedAsEnclosingType = function (decl) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(decl.name, decl.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.canSymbolBeUsedAsEnclosingType = function (symbol) { - return this.canSymbolOrDeclBeUsedAsEnclosingTypeHelper(symbol.name, symbol.kind); - }; - - PullTypeEnclosingTypeWalker.prototype.getEnclosingType = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols) { - TypeScript.Debug.assert(currentSymbols.length > 0); - return currentSymbols[0]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype._canWalkStructure = function () { - var enclosingType = this.getEnclosingType(); - TypeScript.Debug.assert(!enclosingType || enclosingType.isGeneric()); - return !!enclosingType; - }; - - PullTypeEnclosingTypeWalker.prototype._getCurrentSymbol = function () { - var currentSymbols = this.enclosingTypeWalkerState._currentSymbols; - if (currentSymbols && currentSymbols.length) { - return currentSymbols[currentSymbols.length - 1]; - } - - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.getGenerativeClassification = function () { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (!currentType) { - return 0 /* Unknown */; - } - - var variableNeededToFixNodeJitterBug = this.getEnclosingType(); - - return currentType.getGenerativeTypeClassification(variableNeededToFixNodeJitterBug); - } - - return 2 /* Closed */; - }; - - PullTypeEnclosingTypeWalker.prototype._pushSymbol = function (symbol) { - return this.enclosingTypeWalkerState._currentSymbols.push(symbol); - }; - - PullTypeEnclosingTypeWalker.prototype._popSymbol = function () { - return this.enclosingTypeWalkerState._currentSymbols.pop(); - }; - - PullTypeEnclosingTypeWalker.prototype.setSymbolAsEnclosingType = function (type) { - if (type.isGeneric()) { - this.enclosingTypeWalkerState = EnclosingTypeWalkerState.getGenericEnclosingTypeWalkerState(type); - } else { - this.setNonGenericEnclosingTypeWalkerState(); - } - }; - - PullTypeEnclosingTypeWalker.prototype._setEnclosingTypeOfParentDecl = function (decl, setSignature) { - var parentDecl = decl.getParentDecl(); - - if (parentDecl && !(parentDecl.kind & (164 /* SomeContainer */ | 1 /* Script */))) { - if (this.canDeclBeUsedAsEnclosingType(parentDecl)) { - this.setSymbolAsEnclosingType(parentDecl.getSymbol()); - } else { - this._setEnclosingTypeOfParentDecl(parentDecl, true); - } - - if (this._canWalkStructure()) { - var symbol = decl.getSymbol(); - if (symbol) { - if (!symbol.isType() && !symbol.isSignature()) { - symbol = symbol.type; - } - - this._pushSymbol(symbol); - } - - if (setSignature) { - var signature = decl.getSignatureSymbol(); - if (signature) { - this._pushSymbol(signature); - } - } - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeForSymbol = function (symbol) { - var currentEnclosingTypeWalkerState = this.enclosingTypeWalkerState; - if (this.canSymbolBeUsedAsEnclosingType(symbol)) { - this.setSymbolAsEnclosingType(symbol); - } else { - this.setDefaultTypeWalkerState(); - - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - this._setEnclosingTypeOfParentDecl(decl, symbol.isSignature()); - - if (this.enclosingTypeWalkerState._hasSetEnclosingType) { - break; - } - } - - if (!this.enclosingTypeWalkerState._hasSetEnclosingType) { - this.setNonGenericEnclosingTypeWalkerState(); - } - } - return currentEnclosingTypeWalkerState; - }; - - PullTypeEnclosingTypeWalker.prototype.startWalkingType = function (symbol) { - var currentState = this.enclosingTypeWalkerState; - - var setEnclosingTypeForSymbol = !this.enclosingTypeWalkerState._hasSetEnclosingType || this.canSymbolBeUsedAsEnclosingType(symbol); - if (setEnclosingTypeForSymbol) { - this.setEnclosingTypeForSymbol(symbol); - } - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.endWalkingType = function (stateWhenStartedWalkingTypes) { - this.enclosingTypeWalkerState = stateWhenStartedWalkingTypes; - }; - - PullTypeEnclosingTypeWalker.prototype.walkMemberType = function (memberName, resolver) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var memberSymbol = currentType ? resolver._getNamedPropertySymbolOfAugmentedType(memberName, currentType) : null; - this._pushSymbol(memberSymbol ? memberSymbol.type : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkMemberType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkSignature = function (kind, index) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - var signatures; - if (currentType) { - if (kind == 1048576 /* CallSignature */) { - signatures = currentType.getCallSignatures(); - } else if (kind == 2097152 /* ConstructSignature */) { - signatures = currentType.getConstructSignatures(); - } else { - signatures = currentType.getIndexSignatures(); - } - } - - this._pushSymbol(signatures ? signatures[index] : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkSignature = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeArgument = function (index) { - if (this._canWalkStructure()) { - var typeArgument = null; - var currentType = this._getCurrentSymbol(); - if (currentType) { - var typeArguments = currentType.getTypeArguments(); - typeArgument = typeArguments ? typeArguments[index] : null; - } - this._pushSymbol(typeArgument); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeArgument = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkTypeParameterConstraint = function (index) { - if (this._canWalkStructure()) { - var typeParameters; - var currentSymbol = this._getCurrentSymbol(); - if (currentSymbol) { - if (currentSymbol.isSignature()) { - typeParameters = currentSymbol.getTypeParameters(); - } else { - TypeScript.Debug.assert(currentSymbol.isType()); - typeParameters = currentSymbol.getTypeParameters(); - } - } - this._pushSymbol(typeParameters ? typeParameters[index].getConstraint() : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkTypeParameterConstraint = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkReturnType = function () { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.returnType : null); - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkReturnType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.walkParameterType = function (iParam) { - if (this._canWalkStructure()) { - var currentSignature = this._getCurrentSymbol(); - this._pushSymbol(currentSignature ? currentSignature.getParameterTypeAtIndex(iParam) : null); - } - }; - PullTypeEnclosingTypeWalker.prototype.postWalkParameterType = function () { - if (this._canWalkStructure()) { - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.getBothKindOfIndexSignatures = function (resolver, context, includeAugmentedType) { - if (this._canWalkStructure()) { - var currentType = this._getCurrentSymbol(); - if (currentType) { - return resolver._getBothKindsOfIndexSignatures(currentType, context, includeAugmentedType); - } - } - return null; - }; - - PullTypeEnclosingTypeWalker.prototype.walkIndexSignatureReturnType = function (indexSigInfo, useStringIndexSignature, onlySignature) { - if (this._canWalkStructure()) { - var indexSig = indexSigInfo ? (useStringIndexSignature ? indexSigInfo.stringSignature : indexSigInfo.numericSignature) : null; - this._pushSymbol(indexSig); - if (!onlySignature) { - this._pushSymbol(indexSig ? indexSig.returnType : null); - } - } - }; - - PullTypeEnclosingTypeWalker.prototype.postWalkIndexSignatureReturnType = function (onlySignature) { - if (this._canWalkStructure()) { - if (!onlySignature) { - this._popSymbol(); - } - this._popSymbol(); - } - }; - - PullTypeEnclosingTypeWalker.prototype.resetEnclosingTypeWalkerState = function () { - var currentState = this.enclosingTypeWalkerState; - this.setDefaultTypeWalkerState(); - return currentState; - }; - - PullTypeEnclosingTypeWalker.prototype.setEnclosingTypeWalkerState = function (enclosingTypeWalkerState) { - if (enclosingTypeWalkerState) { - this.enclosingTypeWalkerState = enclosingTypeWalkerState; - } else { - this.setDefaultTypeWalkerState(); - } - }; - PullTypeEnclosingTypeWalker._defaultEnclosingTypeWalkerState = EnclosingTypeWalkerState.getDefaultEnclosingTypeWalkerState(); - - PullTypeEnclosingTypeWalker._nonGenericEnclosingTypeWalkerState = EnclosingTypeWalkerState.getNonGenericEnclosingTypeWalkerState(); - return PullTypeEnclosingTypeWalker; - })(); - TypeScript.PullTypeEnclosingTypeWalker = PullTypeEnclosingTypeWalker; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var CandidateInferenceInfo = (function () { - function CandidateInferenceInfo() { - this.typeParameter = null; - this._inferredTypeAfterFixing = null; - this.inferenceCandidates = []; - } - CandidateInferenceInfo.prototype.addCandidate = function (candidate) { - if (!this._inferredTypeAfterFixing) { - this.inferenceCandidates[this.inferenceCandidates.length] = candidate; - } - }; - - CandidateInferenceInfo.prototype.isFixed = function () { - return !!this._inferredTypeAfterFixing; - }; - - CandidateInferenceInfo.prototype.fixTypeParameter = function (resolver, context) { - var _this = this; - if (!this._inferredTypeAfterFixing) { - var collection = { - getLength: function () { - return _this.inferenceCandidates.length; - }, - getTypeAtIndex: function (index) { - return _this.inferenceCandidates[index].type; - } - }; - - var bestCommonType = resolver.findBestCommonType(collection, context, new TypeScript.TypeComparisonInfo()); - this._inferredTypeAfterFixing = bestCommonType.widenedType(resolver, null, context); - } - }; - return CandidateInferenceInfo; - })(); - TypeScript.CandidateInferenceInfo = CandidateInferenceInfo; - - var TypeArgumentInferenceContext = (function () { - function TypeArgumentInferenceContext(resolver, context, signatureBeingInferred) { - this.resolver = resolver; - this.context = context; - this.signatureBeingInferred = signatureBeingInferred; - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - this.candidateCache = []; - var typeParameters = signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - this.addInferenceRoot(typeParameters[i]); - } - } - TypeArgumentInferenceContext.prototype.alreadyRelatingTypes = function (objectType, parameterType) { - if (this.inferenceCache.valueAt(objectType.pullSymbolID, parameterType.pullSymbolID)) { - return true; - } else { - this.inferenceCache.setValueAt(objectType.pullSymbolID, parameterType.pullSymbolID, true); - return false; - } - }; - - TypeArgumentInferenceContext.prototype.resetRelationshipCache = function () { - this.inferenceCache.release(); - this.inferenceCache = TypeScript.BitMatrix.getBitMatrix(false); - }; - - TypeArgumentInferenceContext.prototype.addInferenceRoot = function (param) { - var info = this.candidateCache[param.pullSymbolID]; - - if (!info) { - info = new CandidateInferenceInfo(); - info.typeParameter = param; - this.candidateCache[param.pullSymbolID] = info; - } - }; - - TypeArgumentInferenceContext.prototype.getInferenceInfo = function (param) { - return this.candidateCache[param.pullSymbolID]; - }; - - TypeArgumentInferenceContext.prototype.addCandidateForInference = function (param, candidate) { - var info = this.getInferenceInfo(param); - - if (info && candidate && info.inferenceCandidates.indexOf(candidate) < 0) { - info.addCandidate(candidate); - } - }; - - TypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - throw TypeScript.Errors.abstract(); - }; - - TypeArgumentInferenceContext.prototype.fixTypeParameter = function (typeParameter) { - var candidateInfo = this.candidateCache[typeParameter.pullSymbolID]; - if (candidateInfo) { - candidateInfo.fixTypeParameter(this.resolver, this.context); - } - }; - - TypeArgumentInferenceContext.prototype._finalizeInferredTypeArguments = function () { - var results = []; - var typeParameters = this.signatureBeingInferred.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - var info = this.candidateCache[typeParameters[i].pullSymbolID]; - - info.fixTypeParameter(this.resolver, this.context); - - for (var i = 0; i < results.length; i++) { - if (results[i].type === info.typeParameter) { - results[i].type = info._inferredTypeAfterFixing; - } - } - - results.push(info._inferredTypeAfterFixing); - } - - return results; - }; - - TypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - throw TypeScript.Errors.abstract(); - }; - return TypeArgumentInferenceContext; - })(); - TypeScript.TypeArgumentInferenceContext = TypeArgumentInferenceContext; - - var InvocationTypeArgumentInferenceContext = (function (_super) { - __extends(InvocationTypeArgumentInferenceContext, _super); - function InvocationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, argumentASTs) { - _super.call(this, resolver, context, signatureBeingInferred); - this.argumentASTs = argumentASTs; - } - InvocationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return true; - }; - - InvocationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - this.signatureBeingInferred.forAllParameterTypes(this.argumentASTs.nonSeparatorCount(), function (parameterType, argumentIndex) { - var argumentAST = _this.argumentASTs.nonSeparatorAt(argumentIndex); - - _this.context.pushInferentialType(parameterType, _this); - var argumentType = _this.resolver.resolveAST(argumentAST, true, _this.context).type; - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(argumentType, parameterType, _this, _this.context); - _this.context.popAnyContextualType(); - - return true; - }); - - return this._finalizeInferredTypeArguments(); - }; - return InvocationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.InvocationTypeArgumentInferenceContext = InvocationTypeArgumentInferenceContext; - - var ContextualSignatureInstantiationTypeArgumentInferenceContext = (function (_super) { - __extends(ContextualSignatureInstantiationTypeArgumentInferenceContext, _super); - function ContextualSignatureInstantiationTypeArgumentInferenceContext(resolver, context, signatureBeingInferred, contextualSignature, shouldFixContextualSignatureParameterTypes) { - _super.call(this, resolver, context, signatureBeingInferred); - this.contextualSignature = contextualSignature; - this.shouldFixContextualSignatureParameterTypes = shouldFixContextualSignatureParameterTypes; - } - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.isInvocationInferenceContext = function () { - return false; - }; - - ContextualSignatureInstantiationTypeArgumentInferenceContext.prototype.inferTypeArguments = function () { - var _this = this; - var relateTypesCallback = function (parameterTypeBeingInferred, contextualParameterType) { - if (_this.shouldFixContextualSignatureParameterTypes) { - contextualParameterType = _this.context.fixAllTypeParametersReferencedByType(contextualParameterType, _this.resolver, _this); - } - _this.resolver.relateTypeToTypeParametersWithNewEnclosingTypes(contextualParameterType, parameterTypeBeingInferred, _this, _this.context); - - return true; - }; - - this.signatureBeingInferred.forAllCorrespondingParameterTypesInThisAndOtherSignature(this.contextualSignature, relateTypesCallback); - - return this._finalizeInferredTypeArguments(); - }; - return ContextualSignatureInstantiationTypeArgumentInferenceContext; - })(TypeArgumentInferenceContext); - TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext = ContextualSignatureInstantiationTypeArgumentInferenceContext; - - var PullContextualTypeContext = (function () { - function PullContextualTypeContext(contextualType, provisional, isInferentiallyTyping, typeArgumentInferenceContext) { - this.contextualType = contextualType; - this.provisional = provisional; - this.isInferentiallyTyping = isInferentiallyTyping; - this.typeArgumentInferenceContext = typeArgumentInferenceContext; - this.provisionallyTypedSymbols = []; - this.hasProvisionalErrors = false; - this.astSymbolMap = []; - } - PullContextualTypeContext.prototype.recordProvisionallyTypedSymbol = function (symbol) { - this.provisionallyTypedSymbols[this.provisionallyTypedSymbols.length] = symbol; - }; - - PullContextualTypeContext.prototype.invalidateProvisionallyTypedSymbols = function () { - for (var i = 0; i < this.provisionallyTypedSymbols.length; i++) { - this.provisionallyTypedSymbols[i].setUnresolved(); - } - }; - - PullContextualTypeContext.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - PullContextualTypeContext.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()]; - }; - return PullContextualTypeContext; - })(); - TypeScript.PullContextualTypeContext = PullContextualTypeContext; - - var PullTypeResolutionContext = (function () { - function PullTypeResolutionContext(resolver, inTypeCheck, fileName) { - if (typeof inTypeCheck === "undefined") { inTypeCheck = false; } - if (typeof fileName === "undefined") { fileName = null; } - this.resolver = resolver; - this.inTypeCheck = inTypeCheck; - this.fileName = fileName; - this.contextStack = []; - this.typeCheckedNodes = null; - this.enclosingTypeWalker1 = null; - this.enclosingTypeWalker2 = null; - this.inBaseTypeResolution = false; - if (inTypeCheck) { - TypeScript.Debug.assert(fileName, "A file name must be provided if you are typechecking"); - this.typeCheckedNodes = TypeScript.BitVector.getBitVector(false); - } - } - PullTypeResolutionContext.prototype.setTypeChecked = function (ast) { - if (!this.inProvisionalResolution()) { - this.typeCheckedNodes.setValueAt(ast.syntaxID(), true); - } - }; - - PullTypeResolutionContext.prototype.canTypeCheckAST = function (ast) { - return this.typeCheck() && !this.typeCheckedNodes.valueAt(ast.syntaxID()) && this.fileName === ast.fileName(); - }; - - PullTypeResolutionContext.prototype._pushAnyContextualType = function (type, provisional, isInferentiallyTyping, argContext) { - this.contextStack.push(new PullContextualTypeContext(type, provisional, isInferentiallyTyping, argContext)); - }; - - PullTypeResolutionContext.prototype.pushNewContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), false, null); - }; - - PullTypeResolutionContext.prototype.propagateContextualType = function (type) { - this._pushAnyContextualType(type, this.inProvisionalResolution(), this.isInferentiallyTyping(), this.getCurrentTypeArgumentInferenceContext()); - }; - - PullTypeResolutionContext.prototype.pushInferentialType = function (type, typeArgumentInferenceContext) { - this._pushAnyContextualType(type, true, true, typeArgumentInferenceContext); - }; - - PullTypeResolutionContext.prototype.pushProvisionalType = function (type) { - this._pushAnyContextualType(type, true, false, null); - }; - - PullTypeResolutionContext.prototype.popAnyContextualType = function () { - var tc = this.contextStack.pop(); - - tc.invalidateProvisionallyTypedSymbols(); - - if (tc.hasProvisionalErrors && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].hasProvisionalErrors = true; - } - - return tc; - }; - - PullTypeResolutionContext.prototype.hasProvisionalErrors = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].hasProvisionalErrors : false; - }; - - PullTypeResolutionContext.prototype.getContextualType = function () { - var context = !this.contextStack.length ? null : this.contextStack[this.contextStack.length - 1]; - - if (context) { - var type = context.contextualType; - - if (!type) { - return null; - } - - return type; - } - - return null; - }; - - PullTypeResolutionContext.prototype.fixAllTypeParametersReferencedByType = function (type, resolver, argContext) { - var argContext = this.getCurrentTypeArgumentInferenceContext(); - if (type.wrapsSomeTypeParameter(argContext.candidateCache)) { - var typeParameterArgumentMap = []; - - for (var n in argContext.candidateCache) { - var typeParameter = argContext.candidateCache[n] && argContext.candidateCache[n].typeParameter; - if (typeParameter) { - var dummyMap = []; - dummyMap[typeParameter.pullSymbolID] = typeParameter; - if (type.wrapsSomeTypeParameter(dummyMap)) { - argContext.fixTypeParameter(typeParameter); - TypeScript.Debug.assert(argContext.candidateCache[n]._inferredTypeAfterFixing); - typeParameterArgumentMap[typeParameter.pullSymbolID] = argContext.candidateCache[n]._inferredTypeAfterFixing; - } - } - } - - return resolver.instantiateType(type, typeParameterArgumentMap); - } - - return type; - }; - - PullTypeResolutionContext.prototype.getCurrentTypeArgumentInferenceContext = function () { - return this.contextStack.length ? this.contextStack[this.contextStack.length - 1].typeArgumentInferenceContext : null; - }; - - PullTypeResolutionContext.prototype.isInferentiallyTyping = function () { - return this.contextStack.length > 0 && this.contextStack[this.contextStack.length - 1].isInferentiallyTyping; - }; - - PullTypeResolutionContext.prototype.inProvisionalResolution = function () { - return (!this.contextStack.length ? false : this.contextStack[this.contextStack.length - 1].provisional); - }; - - PullTypeResolutionContext.prototype.isInBaseTypeResolution = function () { - return this.inBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.startBaseTypeResolution = function () { - var wasInBaseTypeResoltion = this.inBaseTypeResolution; - this.inBaseTypeResolution = true; - return wasInBaseTypeResoltion; - }; - - PullTypeResolutionContext.prototype.doneBaseTypeResolution = function (wasInBaseTypeResolution) { - this.inBaseTypeResolution = wasInBaseTypeResolution; - }; - - PullTypeResolutionContext.prototype.setTypeInContext = function (symbol, type) { - if (symbol.type && symbol.type.isError() && !type.isError()) { - return; - } - symbol.type = type; - - if (this.contextStack.length && this.inProvisionalResolution()) { - this.contextStack[this.contextStack.length - 1].recordProvisionallyTypedSymbol(symbol); - } - }; - - PullTypeResolutionContext.prototype.postDiagnostic = function (diagnostic) { - if (diagnostic) { - if (this.inProvisionalResolution()) { - (this.contextStack[this.contextStack.length - 1]).hasProvisionalErrors = true; - } else if (this.inTypeCheck && this.resolver) { - this.resolver.semanticInfoChain.addDiagnostic(diagnostic); - } - } - }; - - PullTypeResolutionContext.prototype.typeCheck = function () { - return this.inTypeCheck && !this.inProvisionalResolution(); - }; - - PullTypeResolutionContext.prototype.setSymbolForAST = function (ast, symbol) { - this.contextStack[this.contextStack.length - 1].setSymbolForAST(ast, symbol); - }; - - PullTypeResolutionContext.prototype.getSymbolForAST = function (ast) { - for (var i = this.contextStack.length - 1; i >= 0; i--) { - var typeContext = this.contextStack[i]; - if (!typeContext.provisional) { - break; - } - - var symbol = typeContext.getSymbolForAST(ast); - if (symbol) { - return symbol; - } - } - - return null; - }; - - PullTypeResolutionContext.prototype.startWalkingTypes = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes1 = this.enclosingTypeWalker1.startWalkingType(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var stateWhenStartedWalkingTypes2 = this.enclosingTypeWalker2.startWalkingType(symbol2); - return { - stateWhenStartedWalkingTypes1: stateWhenStartedWalkingTypes1, - stateWhenStartedWalkingTypes2: stateWhenStartedWalkingTypes2 - }; - }; - - PullTypeResolutionContext.prototype.endWalkingTypes = function (statesWhenStartedWalkingTypes) { - this.enclosingTypeWalker1.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes1); - this.enclosingTypeWalker2.endWalkingType(statesWhenStartedWalkingTypes.stateWhenStartedWalkingTypes2); - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeForSymbols = function (symbol1, symbol2) { - if (!this.enclosingTypeWalker1) { - this.enclosingTypeWalker1 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1.setEnclosingTypeForSymbol(symbol1); - if (!this.enclosingTypeWalker2) { - this.enclosingTypeWalker2 = new TypeScript.PullTypeEnclosingTypeWalker(); - } - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2.setEnclosingTypeForSymbol(symbol2); - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.walkMemberTypes = function (memberName) { - this.enclosingTypeWalker1.walkMemberType(memberName, this.resolver); - this.enclosingTypeWalker2.walkMemberType(memberName, this.resolver); - }; - - PullTypeResolutionContext.prototype.postWalkMemberTypes = function () { - this.enclosingTypeWalker1.postWalkMemberType(); - this.enclosingTypeWalker2.postWalkMemberType(); - }; - - PullTypeResolutionContext.prototype.walkSignatures = function (kind, index, index2) { - this.enclosingTypeWalker1.walkSignature(kind, index); - this.enclosingTypeWalker2.walkSignature(kind, index2 == undefined ? index : index2); - }; - - PullTypeResolutionContext.prototype.postWalkSignatures = function () { - this.enclosingTypeWalker1.postWalkSignature(); - this.enclosingTypeWalker2.postWalkSignature(); - }; - - PullTypeResolutionContext.prototype.walkTypeParameterConstraints = function (index) { - this.enclosingTypeWalker1.walkTypeParameterConstraint(index); - this.enclosingTypeWalker2.walkTypeParameterConstraint(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeParameterConstraints = function () { - this.enclosingTypeWalker1.postWalkTypeParameterConstraint(); - this.enclosingTypeWalker2.postWalkTypeParameterConstraint(); - }; - - PullTypeResolutionContext.prototype.walkTypeArgument = function (index) { - this.enclosingTypeWalker1.walkTypeArgument(index); - this.enclosingTypeWalker2.walkTypeArgument(index); - }; - - PullTypeResolutionContext.prototype.postWalkTypeArgument = function () { - this.enclosingTypeWalker1.postWalkTypeArgument(); - this.enclosingTypeWalker2.postWalkTypeArgument(); - }; - - PullTypeResolutionContext.prototype.walkReturnTypes = function () { - this.enclosingTypeWalker1.walkReturnType(); - this.enclosingTypeWalker2.walkReturnType(); - }; - - PullTypeResolutionContext.prototype.postWalkReturnTypes = function () { - this.enclosingTypeWalker1.postWalkReturnType(); - this.enclosingTypeWalker2.postWalkReturnType(); - }; - - PullTypeResolutionContext.prototype.walkParameterTypes = function (iParam) { - this.enclosingTypeWalker1.walkParameterType(iParam); - this.enclosingTypeWalker2.walkParameterType(iParam); - }; - - PullTypeResolutionContext.prototype.postWalkParameterTypes = function () { - this.enclosingTypeWalker1.postWalkParameterType(); - this.enclosingTypeWalker2.postWalkParameterType(); - }; - - PullTypeResolutionContext.prototype.getBothKindOfIndexSignatures = function (includeAugmentedType1, includeAugmentedType2) { - var indexSigs1 = this.enclosingTypeWalker1.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType1); - var indexSigs2 = this.enclosingTypeWalker2.getBothKindOfIndexSignatures(this.resolver, this, includeAugmentedType2); - return { indexSigs1: indexSigs1, indexSigs2: indexSigs2 }; - }; - - PullTypeResolutionContext.prototype.walkIndexSignatureReturnTypes = function (indexSigs, useStringIndexSignature1, useStringIndexSignature2, onlySignature) { - this.enclosingTypeWalker1.walkIndexSignatureReturnType(indexSigs.indexSigs1, useStringIndexSignature1, onlySignature); - this.enclosingTypeWalker2.walkIndexSignatureReturnType(indexSigs.indexSigs2, useStringIndexSignature2, onlySignature); - }; - - PullTypeResolutionContext.prototype.postWalkIndexSignatureReturnTypes = function (onlySignature) { - this.enclosingTypeWalker1.postWalkIndexSignatureReturnType(onlySignature); - this.enclosingTypeWalker2.postWalkIndexSignatureReturnType(onlySignature); - }; - - PullTypeResolutionContext.prototype.swapEnclosingTypeWalkers = function () { - var tempEnclosingWalker1 = this.enclosingTypeWalker1; - this.enclosingTypeWalker1 = this.enclosingTypeWalker2; - this.enclosingTypeWalker2 = tempEnclosingWalker1; - }; - - PullTypeResolutionContext.prototype.oneOfClassificationsIsInfinitelyExpanding = function () { - var generativeClassification1 = this.enclosingTypeWalker1.getGenerativeClassification(); - if (generativeClassification1 === 3 /* InfinitelyExpanding */) { - return true; - } - var generativeClassification2 = this.enclosingTypeWalker2.getGenerativeClassification(); - if (generativeClassification2 === 3 /* InfinitelyExpanding */) { - return true; - } - - return false; - }; - - PullTypeResolutionContext.prototype.resetEnclosingTypeWalkerStates = function () { - var enclosingTypeWalkerState1 = this.enclosingTypeWalker1 ? this.enclosingTypeWalker1.resetEnclosingTypeWalkerState() : null; - var enclosingTypeWalkerState2 = this.enclosingTypeWalker2 ? this.enclosingTypeWalker2.resetEnclosingTypeWalkerState() : null; - return { - enclosingTypeWalkerState1: enclosingTypeWalkerState1, - enclosingTypeWalkerState2: enclosingTypeWalkerState2 - }; - }; - - PullTypeResolutionContext.prototype.setEnclosingTypeWalkerStates = function (enclosingTypeWalkerStates) { - TypeScript.Debug.assert(this.enclosingTypeWalker1 || !enclosingTypeWalkerStates.enclosingTypeWalkerState1); - if (this.enclosingTypeWalker1) { - this.enclosingTypeWalker1.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState1); - } - TypeScript.Debug.assert(this.enclosingTypeWalker2 || !enclosingTypeWalkerStates.enclosingTypeWalkerState2); - if (this.enclosingTypeWalker2) { - this.enclosingTypeWalker2.setEnclosingTypeWalkerState(enclosingTypeWalkerStates.enclosingTypeWalkerState2); - } - }; - return PullTypeResolutionContext; - })(); - TypeScript.PullTypeResolutionContext = PullTypeResolutionContext; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var OverloadApplicabilityStatus; - (function (OverloadApplicabilityStatus) { - OverloadApplicabilityStatus[OverloadApplicabilityStatus["NotAssignable"] = 0] = "NotAssignable"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableButWithProvisionalErrors"] = 1] = "AssignableButWithProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["AssignableWithNoProvisionalErrors"] = 2] = "AssignableWithNoProvisionalErrors"; - OverloadApplicabilityStatus[OverloadApplicabilityStatus["Subtype"] = 3] = "Subtype"; - })(OverloadApplicabilityStatus || (OverloadApplicabilityStatus = {})); - - var PullAdditionalCallResolutionData = (function () { - function PullAdditionalCallResolutionData() { - this.targetSymbol = null; - this.resolvedSignatures = null; - this.candidateSignature = null; - this.actualParametersContextTypeSymbols = null; - this.diagnosticsFromOverloadResolution = []; - } - return PullAdditionalCallResolutionData; - })(); - TypeScript.PullAdditionalCallResolutionData = PullAdditionalCallResolutionData; - - var PullAdditionalObjectLiteralResolutionData = (function () { - function PullAdditionalObjectLiteralResolutionData() { - this.membersContextTypeSymbols = null; - } - return PullAdditionalObjectLiteralResolutionData; - })(); - TypeScript.PullAdditionalObjectLiteralResolutionData = PullAdditionalObjectLiteralResolutionData; - - var MemberWithBaseOrigin = (function () { - function MemberWithBaseOrigin(memberSymbol, baseOrigin) { - this.memberSymbol = memberSymbol; - this.baseOrigin = baseOrigin; - } - return MemberWithBaseOrigin; - })(); - - var SignatureWithBaseOrigin = (function () { - function SignatureWithBaseOrigin(signature, baseOrigin) { - this.signature = signature; - this.baseOrigin = baseOrigin; - } - return SignatureWithBaseOrigin; - })(); - - var InheritedIndexSignatureInfo = (function () { - function InheritedIndexSignatureInfo() { - } - return InheritedIndexSignatureInfo; - })(); - - var CompilerReservedName; - (function (CompilerReservedName) { - CompilerReservedName[CompilerReservedName["_this"] = 1] = "_this"; - CompilerReservedName[CompilerReservedName["_super"] = 2] = "_super"; - CompilerReservedName[CompilerReservedName["arguments"] = 3] = "arguments"; - CompilerReservedName[CompilerReservedName["_i"] = 4] = "_i"; - CompilerReservedName[CompilerReservedName["require"] = 5] = "require"; - CompilerReservedName[CompilerReservedName["exports"] = 6] = "exports"; - })(CompilerReservedName || (CompilerReservedName = {})); - - function getCompilerReservedName(name) { - var nameText = name.valueText(); - return CompilerReservedName[nameText]; - } - - var PullTypeResolver = (function () { - function PullTypeResolver(compilationSettings, semanticInfoChain) { - this.compilationSettings = compilationSettings; - this.semanticInfoChain = semanticInfoChain; - this._cachedArrayInterfaceType = null; - this._cachedNumberInterfaceType = null; - this._cachedStringInterfaceType = null; - this._cachedBooleanInterfaceType = null; - this._cachedObjectInterfaceType = null; - this._cachedFunctionInterfaceType = null; - this._cachedIArgumentsInterfaceType = null; - this._cachedRegExpInterfaceType = null; - this._cachedAnyTypeArgs = null; - this.typeCheckCallBacks = []; - this.postTypeCheckWorkitems = []; - this._cachedFunctionArgumentsSymbol = null; - this.assignableCache = TypeScript.BitMatrix.getBitMatrix(true); - this.subtypeCache = TypeScript.BitMatrix.getBitMatrix(true); - this.identicalCache = TypeScript.BitMatrix.getBitMatrix(true); - this.inResolvingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullTypeResolver.prototype.cachedArrayInterfaceType = function () { - if (!this._cachedArrayInterfaceType) { - this._cachedArrayInterfaceType = this.getSymbolFromDeclPath("Array", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedArrayInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedArrayInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedArrayInterfaceType; - }; - - PullTypeResolver.prototype.getArrayNamedType = function () { - return this.cachedArrayInterfaceType(); - }; - - PullTypeResolver.prototype.cachedNumberInterfaceType = function () { - if (!this._cachedNumberInterfaceType) { - this._cachedNumberInterfaceType = this.getSymbolFromDeclPath("Number", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedNumberInterfaceType && !this._cachedNumberInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedNumberInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedNumberInterfaceType; - }; - - PullTypeResolver.prototype.cachedStringInterfaceType = function () { - if (!this._cachedStringInterfaceType) { - this._cachedStringInterfaceType = this.getSymbolFromDeclPath("String", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedStringInterfaceType && !this._cachedStringInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedStringInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedStringInterfaceType; - }; - - PullTypeResolver.prototype.cachedBooleanInterfaceType = function () { - if (!this._cachedBooleanInterfaceType) { - this._cachedBooleanInterfaceType = this.getSymbolFromDeclPath("Boolean", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedBooleanInterfaceType && !this._cachedBooleanInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedBooleanInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedBooleanInterfaceType; - }; - - PullTypeResolver.prototype.cachedObjectInterfaceType = function () { - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.getSymbolFromDeclPath("Object", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType) { - this._cachedObjectInterfaceType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!this._cachedObjectInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedObjectInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedObjectInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionInterfaceType = function () { - if (!this._cachedFunctionInterfaceType) { - this._cachedFunctionInterfaceType = this.getSymbolFromDeclPath("Function", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedFunctionInterfaceType && !this._cachedFunctionInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedFunctionInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedFunctionInterfaceType; - }; - - PullTypeResolver.prototype.cachedIArgumentsInterfaceType = function () { - if (!this._cachedIArgumentsInterfaceType) { - this._cachedIArgumentsInterfaceType = this.getSymbolFromDeclPath("IArguments", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedIArgumentsInterfaceType && !this._cachedIArgumentsInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedIArgumentsInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedIArgumentsInterfaceType; - }; - - PullTypeResolver.prototype.cachedRegExpInterfaceType = function () { - if (!this._cachedRegExpInterfaceType) { - this._cachedRegExpInterfaceType = this.getSymbolFromDeclPath("RegExp", [], 16 /* Interface */) || this.semanticInfoChain.emptyTypeSymbol; - } - - if (this._cachedRegExpInterfaceType && !this._cachedRegExpInterfaceType.isResolved) { - this.resolveDeclaredSymbol(this._cachedRegExpInterfaceType, new TypeScript.PullTypeResolutionContext(this)); - } - - return this._cachedRegExpInterfaceType; - }; - - PullTypeResolver.prototype.cachedFunctionArgumentsSymbol = function () { - if (!this._cachedFunctionArgumentsSymbol) { - this._cachedFunctionArgumentsSymbol = new TypeScript.PullSymbol("arguments", 512 /* Variable */); - this._cachedFunctionArgumentsSymbol.type = this.cachedIArgumentsInterfaceType() || this.semanticInfoChain.anyTypeSymbol; - this._cachedFunctionArgumentsSymbol.setResolved(); - - var functionArgumentsDecl = new TypeScript.PullSynthesizedDecl("arguments", "arguments", 2048 /* Parameter */, 0 /* None */, null, this.semanticInfoChain); - functionArgumentsDecl.setSymbol(this._cachedFunctionArgumentsSymbol); - this._cachedFunctionArgumentsSymbol.addDeclaration(functionArgumentsDecl); - } - - return this._cachedFunctionArgumentsSymbol; - }; - - PullTypeResolver.prototype.getApparentType = function (type) { - if (type.isTypeParameter()) { - var baseConstraint = type.getBaseConstraint(this.semanticInfoChain); - if (baseConstraint === this.semanticInfoChain.anyTypeSymbol) { - return this.semanticInfoChain.emptyTypeSymbol; - } else { - type = baseConstraint; - } - } - if (type.isPrimitive()) { - if (type === this.semanticInfoChain.numberTypeSymbol) { - return this.cachedNumberInterfaceType(); - } - if (type === this.semanticInfoChain.booleanTypeSymbol) { - return this.cachedBooleanInterfaceType(); - } - if (type === this.semanticInfoChain.stringTypeSymbol) { - return this.cachedStringInterfaceType(); - } - return type; - } - if (type.isEnum()) { - return this.cachedNumberInterfaceType(); - } - return type; - }; - - PullTypeResolver.prototype.setTypeChecked = function (ast, context) { - context.setTypeChecked(ast); - }; - - PullTypeResolver.prototype.canTypeCheckAST = function (ast, context) { - return context.canTypeCheckAST(ast); - }; - - PullTypeResolver.prototype.setSymbolForAST = function (ast, symbol, context) { - if (context && context.inProvisionalResolution()) { - context.setSymbolForAST(ast, symbol); - } else { - this.semanticInfoChain.setSymbolForAST(ast, symbol); - } - }; - - PullTypeResolver.prototype.getSymbolForAST = function (ast, context) { - var symbol = this.semanticInfoChain.getSymbolForAST(ast); - - if (!symbol) { - if (context && context.inProvisionalResolution()) { - symbol = context.getSymbolForAST(ast); - } - } - - return symbol; - }; - - PullTypeResolver.prototype.getASTForDecl = function (decl) { - return this.semanticInfoChain.getASTForDecl(decl); - }; - - PullTypeResolver.prototype.getNewErrorTypeSymbol = function (name) { - if (typeof name === "undefined") { name = null; } - return new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, name); - }; - - PullTypeResolver.prototype.getEnclosingDecl = function (decl) { - var declPath = decl.getParentPath(); - - if (declPath.length > 1 && declPath[declPath.length - 1] === decl) { - return declPath[declPath.length - 2]; - } else { - return declPath[declPath.length - 1]; - } - }; - - PullTypeResolver.prototype.getExportedMemberSymbol = function (symbol, parent) { - if (!(symbol.kind & (65536 /* Method */ | 4096 /* Property */))) { - var isContainer = (parent.kind & (4 /* Container */ | 32 /* DynamicModule */)) !== 0; - var containerType = !isContainer ? parent.getAssociatedContainerType() : parent; - - if (isContainer && containerType) { - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol; - } - - return null; - } - } - - return symbol; - }; - - PullTypeResolver.prototype._getNamedPropertySymbolOfAugmentedType = function (symbolName, parent) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, 68147712 /* SomeValue */, parent); - if (memberSymbol) { - return memberSymbol; - } - - if (this.cachedFunctionInterfaceType() && parent.isFunctionType()) { - memberSymbol = this.cachedFunctionInterfaceType().findMember(symbolName, true); - if (memberSymbol) { - return memberSymbol; - } - } - - if (this.cachedObjectInterfaceType()) { - return this.cachedObjectInterfaceType().findMember(symbolName, true); - } - - return null; - }; - - PullTypeResolver.prototype.getNamedPropertySymbol = function (symbolName, declSearchKind, parent) { - var member = null; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - - var containerType = parent.getAssociatedContainerType(); - - if (containerType) { - if (containerType.isClass()) { - return null; - } - - parent = containerType; - - if (declSearchKind & 68147712 /* SomeValue */) { - member = parent.findMember(symbolName, true); - } else if (declSearchKind & 58728795 /* SomeType */) { - member = parent.findNestedType(symbolName); - } else if (declSearchKind & 164 /* SomeContainer */) { - member = parent.findNestedContainer(symbolName); - } - - if (member) { - return this.getExportedMemberSymbol(member, parent); - } - } - - if (parent.kind & 164 /* SomeContainer */) { - var typeDeclarations = parent.getDeclarations(); - var childDecls = null; - - for (var j = 0; j < typeDeclarations.length; j++) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - member = childDecls[0].getSymbol(); - - if (!member) { - member = childDecls[0].getSignatureSymbol(); - } - return this.getExportedMemberSymbol(member, parent); - } - - if ((declSearchKind & 58728795 /* SomeType */) !== 0 || (declSearchKind & 68147712 /* SomeValue */) !== 0) { - childDecls = typeDeclarations[j].searchChildDecls(symbolName, 128 /* TypeAlias */); - if (childDecls.length && childDecls[0].kind === 128 /* TypeAlias */) { - var aliasSymbol = this.getExportedMemberSymbol(childDecls[0].getSymbol(), parent); - if (aliasSymbol) { - if ((declSearchKind & 58728795 /* SomeType */) !== 0) { - var typeSymbol = aliasSymbol.getExportAssignedTypeSymbol(); - if (typeSymbol) { - return typeSymbol; - } - } else { - var valueSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - return valueSymbol; - } - } - - return aliasSymbol; - } - } - } - } - } - }; - - PullTypeResolver.prototype.getSymbolFromDeclPath = function (symbolName, declPath, declSearchKind) { - var _this = this; - var symbol = null; - - var decl = null; - var childDecls; - var declSymbol = null; - var declMembers; - var pathDeclKind; - var valDecl = null; - var kind; - var instanceSymbol = null; - var instanceType = null; - var childSymbol = null; - - var allowedContainerDeclKind = 4 /* Container */ | 32 /* DynamicModule */; - if (TypeScript.hasFlag(declSearchKind, 67108864 /* EnumMember */)) { - allowedContainerDeclKind |= 64 /* Enum */; - } - - var isAcceptableAlias = function (symbol) { - if (symbol.isAlias()) { - _this.resolveDeclaredSymbol(symbol); - if (TypeScript.hasFlag(declSearchKind, 164 /* SomeContainer */)) { - if (symbol.assignedContainer() || symbol.getExportAssignedContainerSymbol()) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 58728795 /* SomeType */)) { - var type = symbol.getExportAssignedTypeSymbol(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - - var type = symbol.assignedType(); - if (type && type.kind !== 32 /* DynamicModule */) { - return true; - } - } else if (TypeScript.hasFlag(declSearchKind, 68147712 /* SomeValue */ & ~67108864 /* EnumMember */)) { - if (symbol.assignedType() && symbol.assignedType().isError()) { - return true; - } else if (symbol.assignedValue() || symbol.getExportAssignedValueSymbol()) { - return true; - } else { - var assignedType = symbol.assignedType(); - if (assignedType && assignedType.isContainer() && assignedType.getInstanceType()) { - return true; - } - - var decls = symbol.getDeclarations(); - var ast = decls[0].ast(); - return ast.moduleReference.kind() === 245 /* ExternalModuleReference */; - } - } - } - - return false; - }; - - var tryFindAlias = function (decl) { - var childDecls = decl.searchChildDecls(symbolName, 128 /* TypeAlias */); - - if (childDecls.length) { - var sym = childDecls[0].getSymbol(); - if (isAcceptableAlias(sym)) { - return sym; - } - } - return null; - }; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - if (decl.flags & 2097152 /* DeclaredInAWithBlock */) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (pathDeclKind & allowedContainerDeclKind) { - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - return childDecls[0].getSymbol(); - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - - if (declSearchKind & 68147712 /* SomeValue */) { - instanceSymbol = decl.getSymbol().getInstanceSymbol(); - - if (instanceSymbol) { - instanceType = instanceSymbol.type; - - childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, instanceType); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } - - valDecl = decl.getValueDecl(); - - if (valDecl) { - decl = valDecl; - } - } - - declSymbol = decl.getSymbol().type; - - var childSymbol = this.getNamedPropertySymbol(symbolName, declSearchKind, declSymbol); - - if (childSymbol && (childSymbol.kind & declSearchKind) && !childSymbol.anyDeclHasFlag(16 /* Static */)) { - return childSymbol; - } - } else if ((declSearchKind & (58728795 /* SomeType */ | 164 /* SomeContainer */)) || !(pathDeclKind & 8 /* Class */)) { - var candidateSymbol = null; - - if (pathDeclKind === 131072 /* FunctionExpression */ && symbolName === decl.getFunctionExpressionName()) { - candidateSymbol = decl.getSymbol(); - } - - childDecls = decl.searchChildDecls(symbolName, declSearchKind); - - if (childDecls.length) { - if (decl.kind & 1032192 /* SomeFunction */) { - decl.ensureSymbolIsBound(); - } - return childDecls[0].getSymbol(); - } - - if (candidateSymbol) { - return candidateSymbol; - } - - var alias = tryFindAlias(decl); - if (alias) { - return alias; - } - } - } - - symbol = this.semanticInfoChain.findSymbol([symbolName], declSearchKind); - if (symbol) { - return symbol; - } - - if (!TypeScript.hasFlag(declSearchKind, 128 /* TypeAlias */)) { - symbol = this.semanticInfoChain.findSymbol([symbolName], 128 /* TypeAlias */); - if (symbol && isAcceptableAlias(symbol)) { - return symbol; - } - } - - return null; - }; - - PullTypeResolver.prototype.getVisibleDeclsFromDeclPath = function (declPath, declSearchKind) { - var result = []; - var decl = null; - var childDecls; - var pathDeclKind; - - for (var i = declPath.length - 1; i >= 0; i--) { - decl = declPath[i]; - pathDeclKind = decl.kind; - - var declKind = decl.kind; - - if (declKind !== 8 /* Class */ && declKind !== 16 /* Interface */) { - this.addFilteredDecls(decl.getChildDecls(), declSearchKind, result); - } - - switch (declKind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - var otherDecls = this.semanticInfoChain.findDeclsFromPath(declPath.slice(0, i + 1), 164 /* SomeContainer */); - for (var j = 0, m = otherDecls.length; j < m; j++) { - var otherDecl = otherDecls[j]; - if (otherDecl === decl) { - continue; - } - - var otherDeclChildren = otherDecl.getChildDecls(); - for (var k = 0, s = otherDeclChildren.length; k < s; k++) { - var otherDeclChild = otherDeclChildren[k]; - if ((otherDeclChild.flags & 1 /* Exported */) && (otherDeclChild.kind & declSearchKind)) { - result.push(otherDeclChild); - } - } - } - - break; - - case 8 /* Class */: - case 16 /* Interface */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - - case 131072 /* FunctionExpression */: - var functionExpressionName = decl.getFunctionExpressionName(); - if (functionExpressionName) { - result.push(decl); - } - - case 16384 /* Function */: - case 32768 /* ConstructorMethod */: - case 65536 /* Method */: - var parameters = decl.getTypeParameters(); - if (parameters && parameters.length) { - this.addFilteredDecls(parameters, declSearchKind, result); - } - - break; - } - } - - var topLevelDecls = this.semanticInfoChain.topLevelDecls(); - for (var i = 0, n = topLevelDecls.length; i < n; i++) { - var topLevelDecl = topLevelDecls[i]; - if (declPath.length > 0 && topLevelDecl.fileName() === declPath[0].fileName()) { - continue; - } - - if (!topLevelDecl.isExternalModule()) { - this.addFilteredDecls(topLevelDecl.getChildDecls(), declSearchKind, result); - } - } - - return result; - }; - - PullTypeResolver.prototype.addFilteredDecls = function (decls, declSearchKind, result) { - if (decls.length) { - for (var i = 0, n = decls.length; i < n; i++) { - var decl = decls[i]; - if (decl.kind & declSearchKind) { - result.push(decl); - } - } - } - }; - - PullTypeResolver.prototype.getVisibleDecls = function (enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - return this.getVisibleDeclsFromDeclPath(declPath, declSearchKind); - }; - - PullTypeResolver.prototype.getVisibleContextSymbols = function (enclosingDecl, context) { - var contextualTypeSymbol = context.getContextualType(); - if (!contextualTypeSymbol || this.isAnyOrEquivalent(contextualTypeSymbol)) { - return null; - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - var members = contextualTypeSymbol.getAllMembers(declSearchKind, 2 /* externallyVisible */); - - for (var i = 0; i < members.length; i++) { - members[i].setUnresolved(); - } - - return members; - }; - - PullTypeResolver.prototype.getVisibleMembersFromExpression = function (expression, enclosingDecl, context) { - var lhs = this.resolveAST(expression, false, context); - - if (isTypesOnlyLocation(expression) && (lhs.kind === 8 /* Class */ || lhs.kind === 16 /* Interface */ || lhs.kind === 64 /* Enum */)) { - return null; - } - - var lhsType = lhs.type; - if (!lhsType) { - return null; - } - - this.resolveDeclaredSymbol(lhsType, context); - - if (lhsType.isContainer() && lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return null; - } - - var memberVisibilty = 2 /* externallyVisible */; - var containerSymbol = lhsType; - if (containerSymbol.kind === 33554432 /* ConstructorType */) { - containerSymbol = containerSymbol.getConstructSignatures()[0].returnType; - } - - if (containerSymbol && containerSymbol.isClass()) { - var declPath = enclosingDecl.getParentPath(); - if (declPath && declPath.length) { - var declarations = containerSymbol.getDeclarations(); - for (var i = 0, n = declarations.length; i < n; i++) { - var declaration = declarations[i]; - if (TypeScript.ArrayUtilities.contains(declPath, declaration)) { - memberVisibilty = 1 /* internallyVisible */; - break; - } - } - } - } - - var declSearchKind = 58728795 /* SomeType */ | 164 /* SomeContainer */ | 68147712 /* SomeValue */; - - var members = []; - - if (lhsType.isContainer()) { - var exportedAssignedContainerSymbol = lhsType.getExportAssignedContainerSymbol(); - if (exportedAssignedContainerSymbol) { - lhsType = exportedAssignedContainerSymbol; - } - } - - lhsType = this.getApparentType(lhsType); - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - members = lhsType.getAllMembers(declSearchKind, memberVisibilty); - - if (lhsType.isContainer()) { - var associatedInstance = lhsType.getInstanceSymbol(); - if (associatedInstance) { - var instanceType = associatedInstance.type; - this.resolveDeclaredSymbol(instanceType, context); - var instanceMembers = instanceType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(instanceMembers); - } - - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - if (exportedContainer) { - var exportedContainerMembers = exportedContainer.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(exportedContainerMembers); - } - } else if (!lhsType.isConstructor() && !lhsType.isEnum()) { - var associatedContainerSymbol = lhsType.getAssociatedContainerType(); - if (associatedContainerSymbol) { - var containerType = associatedContainerSymbol.type; - this.resolveDeclaredSymbol(containerType, context); - var containerMembers = containerType.getAllMembers(declSearchKind, memberVisibilty); - members = members.concat(containerMembers); - } - } - - if (lhsType.isFunctionType() && this.cachedFunctionInterfaceType()) { - members = members.concat(this.cachedFunctionInterfaceType().getAllMembers(declSearchKind, 2 /* externallyVisible */)); - } - - return members; - }; - - PullTypeResolver.prototype.isAnyOrEquivalent = function (type) { - return (type === this.semanticInfoChain.anyTypeSymbol) || type.isError(); - }; - - PullTypeResolver.prototype.resolveExternalModuleReference = function (idText, currentFileName) { - var originalIdText = idText; - var symbol = null; - - if (TypeScript.isRelative(originalIdText)) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - symbol = this.semanticInfoChain.findExternalModule(path + idText); - } else { - idText = originalIdText; - - symbol = this.semanticInfoChain.findAmbientExternalModuleInGlobalContext(TypeScript.quoteStr(originalIdText)); - - if (!symbol) { - var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName)); - - while (symbol === null && path != "") { - symbol = this.semanticInfoChain.findExternalModule(path + idText); - if (symbol === null) { - if (path === '/') { - path = ''; - } else { - path = TypeScript.normalizePath(path + ".."); - path = path && path != '/' ? path + '/' : path; - } - } - } - } - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveDeclaredSymbol = function (symbol, context) { - if (!symbol || symbol.isResolved || symbol.isTypeReference()) { - return symbol; - } - - if (!context) { - context = new TypeScript.PullTypeResolutionContext(this); - } - - return this.resolveDeclaredSymbolWorker(symbol, context); - }; - - PullTypeResolver.prototype.resolveDeclaredSymbolWorker = function (symbol, context) { - if (!symbol || symbol.isResolved) { - return symbol; - } - - if (symbol.inResolution) { - if (!symbol.type && !symbol.isType()) { - symbol.type = this.semanticInfoChain.anyTypeSymbol; - } - - return symbol; - } - - var decls = symbol.getDeclarations(); - - for (var i = 0; i < decls.length; i++) { - var decl = decls[i]; - - var ast = this.semanticInfoChain.getASTForDecl(decl); - - if (!ast || (ast.kind() === 139 /* GetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (ast.kind() === 140 /* SetAccessor */ && ast.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 236 /* CatchClause */ && ast.parent.identifier === ast) { - return symbol; - } - - if (ast.parent && ast.parent.kind() === 219 /* SimpleArrowFunctionExpression */ && ast.parent.identifier === ast) { - return symbol; - } - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(ast); - var resolvedSymbol; - if (enclosingModule) { - resolvedSymbol = this.resolveSingleModuleDeclaration(enclosingModule, ast, context); - } else if (ast.kind() === 120 /* SourceUnit */ && decl.kind === 32 /* DynamicModule */) { - resolvedSymbol = this.resolveModuleSymbol(decl.getSymbol(), context, null, null, ast); - } else { - TypeScript.Debug.assert(ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */); - resolvedSymbol = this.resolveAST(ast, false, context); - } - - if (decl.kind === 2048 /* Parameter */ && !symbol.isResolved && !symbol.type && resolvedSymbol && symbol.anyDeclHasFlag(8388608 /* PropertyParameter */ | 67108864 /* ConstructorParameter */)) { - symbol.type = resolvedSymbol.type; - symbol.setResolved(); - } - } - - if (!symbol.isResolved) { - TypeScript.Debug.assert(!symbol.inResolution); - - symbol.setResolved(); - } - - return symbol; - }; - - PullTypeResolver.prototype.resolveOtherDecl = function (otherDecl, context) { - var astForOtherDecl = this.getASTForDecl(otherDecl); - var moduleDecl = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(astForOtherDecl); - if (moduleDecl) { - this.resolveSingleModuleDeclaration(moduleDecl, astForOtherDecl, context); - } else { - this.resolveAST(astForOtherDecl, false, context); - } - }; - - PullTypeResolver.prototype.resolveOtherDeclarations = function (astName, context) { - var _this = this; - var resolvedDecl = this.semanticInfoChain.getDeclForAST(astName); - var symbol = resolvedDecl.getSymbol(); - - var allDecls = symbol.getDeclarations(); - this.inResolvingOtherDeclsWalker.walkOtherPullDecls(resolvedDecl, symbol.getDeclarations(), function (otherDecl) { - return _this.resolveOtherDecl(otherDecl, context); - }); - }; - - PullTypeResolver.prototype.resolveSourceUnit = function (sourceUnit, context) { - var enclosingDecl = this.getEnclosingDeclForAST(sourceUnit); - var moduleSymbol = enclosingDecl.getSymbol(); - this.ensureAllSymbolsAreBound(moduleSymbol); - - this.resolveFirstExportAssignmentStatement(sourceUnit.moduleElements, context); - this.resolveAST(sourceUnit.moduleElements, false, context); - - if (this.canTypeCheckAST(sourceUnit, context)) { - this.typeCheckSourceUnit(sourceUnit, context); - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.typeCheckSourceUnit = function (sourceUnit, context) { - var _this = this; - this.setTypeChecked(sourceUnit, context); - - this.resolveAST(sourceUnit.moduleElements, false, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInSourceUnit(sourceUnit); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInSourceUnit = function (sourceUnit) { - var _this = this; - var enclosingDecl = this.semanticInfoChain.getDeclForAST(sourceUnit); - - var doesImportNameExistInOtherFiles = function (name) { - var importSymbol = _this.semanticInfoChain.findTopLevelSymbol(name, 128 /* TypeAlias */, null); - return importSymbol && importSymbol.isAlias(); - }; - - this.checkUniquenessOfImportNames([enclosingDecl], doesImportNameExistInOtherFiles); - }; - - PullTypeResolver.prototype.resolveEnumDeclaration = function (ast, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - var containerSymbol = containerDecl.getSymbol(); - - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - containerSymbol.setResolved(); - - this.resolveOtherDeclarations(ast, context); - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckEnumDeclaration(ast, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.typeCheckEnumDeclaration = function (ast, context) { - var _this = this; - this.setTypeChecked(ast, context); - - this.resolveAST(ast.enumElements, false, context); - var containerDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(containerDecl, context); - - this.typeCheckCallBacks.push(function (context) { - return _this.checkInitializersInEnumDeclarations(containerDecl, context); - }); - - if (!TypeScript.ASTHelpers.enumIsElided(ast)) { - this.checkNameForCompilerGeneratedDeclarationCollision(ast, true, ast.identifier, context); - } - }; - - PullTypeResolver.prototype.postTypeCheckEnumDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.checkInitializersInEnumDeclarations = function (decl, context) { - var symbol = decl.getSymbol(); - - var declarations = symbol.getDeclarations(); - if (decl !== declarations[0]) { - return; - } - - var seenEnumDeclWithNoFirstMember = false; - for (var i = 0; i < declarations.length; ++i) { - var currentDecl = declarations[i]; - - var ast = currentDecl.ast(); - if (ast.enumElements.nonSeparatorCount() === 0) { - continue; - } - - var firstVariable = ast.enumElements.nonSeparatorAt(0); - if (!firstVariable.equalsValueClause) { - if (!seenEnumDeclWithNoFirstMember) { - seenEnumDeclWithNoFirstMember = true; - } else { - this.semanticInfoChain.addDiagnosticFromAST(firstVariable, TypeScript.DiagnosticCode.In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleDeclaration = function (ast, context) { - var result; - - if (ast.stringLiteral) { - result = this.resolveSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - result = this.resolveSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckModuleDeclaration(ast, context); - } - - return result; - }; - - PullTypeResolver.prototype.ensureAllSymbolsAreBound = function (containerSymbol) { - if (containerSymbol) { - var containerDecls = containerSymbol.getDeclarations(); - - for (var i = 0; i < containerDecls.length; i++) { - var childDecls = containerDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - }; - - PullTypeResolver.prototype.resolveModuleSymbol = function (containerSymbol, context, moduleDeclAST, moduleDeclNameAST, sourceUnitAST) { - if (containerSymbol.isResolved || containerSymbol.inResolution) { - return containerSymbol; - } - - containerSymbol.inResolution = true; - this.ensureAllSymbolsAreBound(containerSymbol); - - var instanceSymbol = containerSymbol.getInstanceSymbol(); - - if (instanceSymbol) { - this.resolveDeclaredSymbol(instanceSymbol, context); - } - - var isLastName = TypeScript.ASTHelpers.isLastNameOfModule(moduleDeclAST, moduleDeclNameAST); - if (isLastName) { - this.resolveFirstExportAssignmentStatement(moduleDeclAST.moduleElements, context); - } else if (sourceUnitAST) { - this.resolveFirstExportAssignmentStatement(sourceUnitAST.moduleElements, context); - } - - containerSymbol.setResolved(); - - if (moduleDeclNameAST) { - this.resolveOtherDeclarations(moduleDeclNameAST, context); - } - - return containerSymbol; - }; - - PullTypeResolver.prototype.resolveFirstExportAssignmentStatement = function (moduleElements, context) { - for (var i = 0, n = moduleElements.childCount(); i < n; i++) { - var moduleElement = moduleElements.childAt(i); - if (moduleElement.kind() === 134 /* ExportAssignment */) { - this.resolveExportAssignmentStatement(moduleElement, context); - return; - } - } - }; - - PullTypeResolver.prototype.resolveSingleModuleDeclaration = function (ast, astName, context) { - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - var containerSymbol = containerDecl.getSymbol(); - - return this.resolveModuleSymbol(containerSymbol, context, ast, astName, null); - }; - - PullTypeResolver.prototype.typeCheckModuleDeclaration = function (ast, context) { - if (ast.stringLiteral) { - this.typeCheckSingleModuleDeclaration(ast, ast.stringLiteral, context); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(ast.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - this.typeCheckSingleModuleDeclaration(ast, moduleNames[i], context); - } - } - }; - - PullTypeResolver.prototype.typeCheckSingleModuleDeclaration = function (ast, astName, context) { - var _this = this; - this.setTypeChecked(ast, context); - - if (TypeScript.ASTHelpers.isLastNameOfModule(ast, astName)) { - this.resolveAST(ast.moduleElements, false, context); - } - - var containerDecl = this.semanticInfoChain.getDeclForAST(astName); - this.validateVariableDeclarationGroups(containerDecl, context); - - if (ast.stringLiteral) { - if (TypeScript.isRelative(ast.stringLiteral.valueText())) { - this.semanticInfoChain.addDiagnosticFromAST(ast.stringLiteral, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_specify_relative_module_name); - } - } - - if (!TypeScript.ASTHelpers.moduleIsElided(ast) && !ast.stringLiteral) { - this.checkNameForCompilerGeneratedDeclarationCollision(astName, true, astName, context); - } - - this.typeCheckCallBacks.push(function (context) { - return _this.verifyUniquenessOfImportNamesInModule(containerDecl); - }); - }; - - PullTypeResolver.prototype.verifyUniquenessOfImportNamesInModule = function (decl) { - var symbol = decl.getSymbol(); - if (!symbol) { - return; - } - - var decls = symbol.getDeclarations(); - - if (decls[0] !== decl) { - return; - } - - this.checkUniquenessOfImportNames(decls); - }; - - PullTypeResolver.prototype.checkUniquenessOfImportNames = function (decls, doesNameExistOutside) { - var _this = this; - var importDeclarationNames; - - for (var i = 0; i < decls.length; ++i) { - var childDecls = decls[i].getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl.kind === 128 /* TypeAlias */) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[childDecl.name] = true; - } - } - } - - if (!importDeclarationNames && !doesNameExistOutside) { - return; - } - - for (var i = 0; i < decls.length; ++i) { - this.scanVariableDeclarationGroups(decls[i], function (firstDeclInGroup) { - var nameConflict = importDeclarationNames && importDeclarationNames[firstDeclInGroup.name]; - if (!nameConflict) { - nameConflict = doesNameExistOutside && doesNameExistOutside(firstDeclInGroup.name); - if (nameConflict) { - importDeclarationNames = importDeclarationNames || TypeScript.createIntrinsicsObject(); - importDeclarationNames[firstDeclInGroup.name] = true; - } - } - - if (nameConflict) { - _this.semanticInfoChain.addDiagnosticFromAST(firstDeclInGroup.ast(), TypeScript.DiagnosticCode.Variable_declaration_cannot_have_the_same_name_as_an_import_declaration); - } - }); - } - }; - - PullTypeResolver.prototype.scanVariableDeclarationGroups = function (enclosingDecl, firstDeclHandler, subsequentDeclHandler) { - var declGroups = enclosingDecl.getVariableDeclGroups(); - - for (var i = 0; i < declGroups.length; i++) { - var firstSymbol = null; - var enclosingDeclForFirstSymbol = null; - - if (enclosingDecl.kind === 1 /* Script */ && declGroups[i].length) { - var name = declGroups[i][0].name; - var candidateSymbol = this.semanticInfoChain.findTopLevelSymbol(name, 512 /* Variable */, enclosingDecl); - if (candidateSymbol) { - if (!candidateSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */)) { - if (!candidateSymbol.isResolved) { - this.resolveDeclaredSymbol(candidateSymbol); - } - firstSymbol = candidateSymbol; - } - } - } - - for (var j = 0; j < declGroups[i].length; j++) { - var decl = declGroups[i][j]; - - var name = decl.name; - - var symbol = decl.getSymbol(); - - if (j === 0) { - firstDeclHandler(decl); - if (!subsequentDeclHandler) { - break; - } - - if (!firstSymbol || !firstSymbol.type) { - firstSymbol = symbol; - continue; - } - } - - subsequentDeclHandler(decl, firstSymbol); - } - } - }; - - PullTypeResolver.prototype.postTypeCheckModuleDeclaration = function (ast, context) { - this.checkThisCaptureVariableCollides(ast, true, context); - }; - - PullTypeResolver.prototype.isTypeRefWithoutTypeArgs = function (term) { - if (term.kind() === 11 /* IdentifierName */) { - return true; - } else if (term.kind() === 121 /* QualifiedName */) { - var binex = term; - - if (binex.right.kind() === 11 /* IdentifierName */) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.createInstantiatedType = function (type, typeArguments) { - if (!type.isGeneric()) { - return type; - } - - var typeParameters = type.getTypeArgumentsOrTypeParameters(); - - var typeParameterArgumentMap = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].pullSymbolID] = typeArguments[i] || new TypeScript.PullErrorTypeSymbol(this.semanticInfoChain.anyTypeSymbol, typeParameters[i].name); - } - - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); - }; - - PullTypeResolver.prototype.resolveReferenceTypeDeclaration = function (classOrInterface, name, heritageClauses, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(typeDecl); - var typeDeclSymbol = typeDecl.getSymbol(); - var typeDeclIsClass = classOrInterface.kind() === 131 /* ClassDeclaration */; - var hasVisited = this.getSymbolForAST(classOrInterface, context) !== null; - - if ((typeDeclSymbol.isResolved && hasVisited) || (typeDeclSymbol.inResolution && !context.isInBaseTypeResolution())) { - return typeDeclSymbol; - } - - var wasResolving = typeDeclSymbol.inResolution; - typeDeclSymbol.startResolving(); - - var typeRefDecls = typeDeclSymbol.getDeclarations(); - - for (var i = 0; i < typeRefDecls.length; i++) { - var childDecls = typeRefDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - - if (!typeDeclSymbol.isResolved) { - var typeDeclTypeParameters = typeDeclSymbol.getTypeParameters(); - for (var i = 0; i < typeDeclTypeParameters.length; i++) { - this.resolveDeclaredSymbol(typeDeclTypeParameters[i], context); - } - } - - var wasInBaseTypeResolution = context.startBaseTypeResolution(); - - if (!typeDeclIsClass && !hasVisited) { - typeDeclSymbol.resetKnownBaseTypeCount(); - } - - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - if (extendsClause) { - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); i < extendsClause.typeNames.nonSeparatorCount(); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var parentType = this.resolveTypeReference(extendsClause.typeNames.nonSeparatorAt(i), context); - - if (typeDeclSymbol.isValidBaseKind(parentType, true)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - - if (!typeDeclSymbol.hasBase(parentType) && !parentType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addExtendedType(parentType); - - var specializations = typeDeclSymbol.getKnownSpecializations(); - - for (var j = 0; j < specializations.length; j++) { - specializations[j].addExtendedType(parentType); - } - } - } else if (parentType && !this.getSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), context)) { - this.setSymbolForAST(extendsClause.typeNames.nonSeparatorAt(i), parentType, null); - } - } - } - - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (implementsClause && typeDeclIsClass) { - var extendsCount = extendsClause ? extendsClause.typeNames.nonSeparatorCount() : 0; - for (var i = typeDeclSymbol.getKnownBaseTypeCount(); ((i - extendsCount) >= 0) && ((i - extendsCount) < implementsClause.typeNames.nonSeparatorCount()); i = typeDeclSymbol.getKnownBaseTypeCount()) { - typeDeclSymbol.incrementKnownBaseCount(); - var implementedTypeAST = implementsClause.typeNames.nonSeparatorAt(i - extendsCount); - var implementedType = this.resolveTypeReference(implementedTypeAST, context); - - if (typeDeclSymbol.isValidBaseKind(implementedType, false)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - - if (!typeDeclSymbol.hasBase(implementedType) && !implementedType.hasBase(typeDeclSymbol)) { - typeDeclSymbol.addImplementedType(implementedType); - } - } else if (implementedType && !this.getSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), context)) { - this.setSymbolForAST(implementsClause.typeNames.nonSeparatorAt(i - extendsCount), implementedType, null); - } - } - } - - context.doneBaseTypeResolution(wasInBaseTypeResolution); - - if (wasInBaseTypeResolution) { - typeDeclSymbol.inResolution = false; - - this.typeCheckCallBacks.push(function (context) { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - _this.resolveClassDeclaration(classOrInterface, context); - } else { - _this.resolveInterfaceDeclaration(classOrInterface, context); - } - }); - - return typeDeclSymbol; - } - - this.setSymbolForAST(name, typeDeclSymbol, context); - this.setSymbolForAST(classOrInterface, typeDeclSymbol, context); - - typeDeclSymbol.setResolved(); - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.resolveClassDeclaration = function (classDeclAST, context) { - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - if (!classDeclSymbol.isResolved) { - this.resolveReferenceTypeDeclaration(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, context); - - var constructorMethod = classDeclSymbol.getConstructorMethod(); - var extendedTypes = classDeclSymbol.getExtendedTypes(); - var parentType = extendedTypes.length ? extendedTypes[0] : null; - - if (constructorMethod) { - if (parentType) { - var parentConstructorSymbol = parentType.getConstructorMethod(); - - if (parentConstructorSymbol) { - var parentConstructorTypeSymbol = parentConstructorSymbol.type; - var constructorTypeSymbol = constructorMethod.type; - if (!constructorTypeSymbol.hasBase(parentConstructorTypeSymbol)) { - constructorTypeSymbol.addExtendedType(parentConstructorTypeSymbol); - } - } - } - - if (!classDeclSymbol.isResolved) { - return classDeclSymbol; - } - } - - this.resolveOtherDeclarations(classDeclAST, context); - } - - if (this.canTypeCheckAST(classDeclAST, context)) { - this.typeCheckClassDeclaration(classDeclAST, context); - } - - return classDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckTypeParametersOfTypeDeclaration = function (classOrInterface, context) { - var _this = this; - var typeParametersList = classOrInterface.kind() == 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - if (typeParametersList) { - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var typeDeclSymbol = typeDecl.getSymbol(); - - for (var i = 0; i < typeParametersList.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParametersList.typeParameters.nonSeparatorAt(i); - this.resolveTypeParameterDeclaration(typeParameterAST, context); - - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.checkSymbolPrivacy(typeDeclSymbol, typeParameterSymbol, function (symbol) { - return _this.typeParameterOfTypeDeclarationPrivacyErrorReporter(classOrInterface, typeParameterAST, typeParameterSymbol, symbol, context); - }); - } - } - }; - - PullTypeResolver.prototype.typeCheckClassDeclaration = function (classDeclAST, context) { - this.setTypeChecked(classDeclAST, context); - - var classDecl = this.semanticInfoChain.getDeclForAST(classDeclAST); - var classDeclSymbol = classDecl.getSymbol(); - - this.checkNameForCompilerGeneratedDeclarationCollision(classDeclAST, true, classDeclAST.identifier, context); - this.resolveAST(classDeclAST.classElements, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(classDeclAST, context); - this.typeCheckBases(classDeclAST, classDeclAST.identifier, classDeclAST.heritageClauses, classDeclSymbol, this.getEnclosingDecl(classDecl), context); - - if (!classDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(classDeclSymbol, classDecl, context); - } - - this.checkTypeForDuplicateIndexSignatures(classDeclSymbol); - }; - - PullTypeResolver.prototype.postTypeCheckClassDeclaration = function (classDeclAST, context) { - this.checkThisCaptureVariableCollides(classDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveTypeSymbolSignatures = function (typeSymbol, context) { - var callSignatures = typeSymbol.getCallSignatures(); - for (var i = 0; i < callSignatures.length; i++) { - this.resolveDeclaredSymbol(callSignatures[i], context); - } - - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; i < constructSignatures.length; i++) { - this.resolveDeclaredSymbol(constructSignatures[i], context); - } - - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignatures.length; i++) { - this.resolveDeclaredSymbol(indexSignatures[i], context); - } - }; - - PullTypeResolver.prototype.resolveInterfaceDeclaration = function (interfaceDeclAST, context) { - this.resolveReferenceTypeDeclaration(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveTypeSymbolSignatures(interfaceDeclSymbol, context); - - if (interfaceDeclSymbol.isResolved) { - this.resolveOtherDeclarations(interfaceDeclAST, context); - - if (this.canTypeCheckAST(interfaceDeclAST, context)) { - this.typeCheckInterfaceDeclaration(interfaceDeclAST, context); - } - } - - return interfaceDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckInterfaceDeclaration = function (interfaceDeclAST, context) { - this.setTypeChecked(interfaceDeclAST, context); - - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - this.resolveAST(interfaceDeclAST.body.typeMembers, false, context); - - this.typeCheckTypeParametersOfTypeDeclaration(interfaceDeclAST, context); - this.typeCheckBases(interfaceDeclAST, interfaceDeclAST.identifier, interfaceDeclAST.heritageClauses, interfaceDeclSymbol, this.getEnclosingDecl(interfaceDecl), context); - - if (!interfaceDeclSymbol.hasBaseTypeConflict()) { - this.typeCheckMembersAgainstIndexer(interfaceDeclSymbol, interfaceDecl, context); - } - - var allInterfaceDecls = interfaceDeclSymbol.getDeclarations(); - if (interfaceDecl === allInterfaceDecls[allInterfaceDecls.length - 1]) { - this.checkTypeForDuplicateIndexSignatures(interfaceDeclSymbol); - } - - if (!this.checkInterfaceDeclForIdenticalTypeParameters(interfaceDeclAST, context)) { - this.semanticInfoChain.addDiagnosticFromAST(interfaceDeclAST.identifier, TypeScript.DiagnosticCode.All_declarations_of_an_interface_must_have_identical_type_parameters); - } - }; - - PullTypeResolver.prototype.checkInterfaceDeclForIdenticalTypeParameters = function (interfaceDeclAST, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(interfaceDeclAST); - var interfaceDeclSymbol = interfaceDecl.getSymbol(); - - if (!interfaceDeclSymbol.isGeneric()) { - return true; - } - - var firstInterfaceDecl = interfaceDeclSymbol.getDeclarations()[0]; - if (firstInterfaceDecl == interfaceDecl) { - return true; - } - - var typeParameters = interfaceDecl.getTypeParameters(); - var firstInterfaceDeclTypeParameters = firstInterfaceDecl.getTypeParameters(); - - if (typeParameters.length != firstInterfaceDeclTypeParameters.length) { - return false; - } - - for (var i = 0; i < typeParameters.length; i++) { - var typeParameter = typeParameters[i]; - var firstInterfaceDeclTypeParameter = firstInterfaceDeclTypeParameters[i]; - - if (typeParameter.name != firstInterfaceDeclTypeParameter.name) { - return false; - } - - var typeParameterSymbol = typeParameter.getSymbol(); - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter); - var firstInterfaceDeclTypeParameterAST = this.semanticInfoChain.getASTForDecl(firstInterfaceDeclTypeParameter); - - if (!!typeParameterAST.constraint != !!firstInterfaceDeclTypeParameterAST.constraint) { - return false; - } - - if (typeParameterAST.constraint) { - var typeParameterConstraint = this.resolveAST(typeParameterAST.constraint, false, context); - if (!this.typesAreIdenticalWithNewEnclosingTypes(typeParameterConstraint, typeParameterSymbol.getConstraint(), context)) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.checkTypeForDuplicateIndexSignatures = function (enclosingTypeSymbol) { - var indexSignatures = enclosingTypeSymbol.getOwnIndexSignatures(); - var firstStringIndexer = null; - var firstNumberIndexer = null; - for (var i = 0; i < indexSignatures.length; i++) { - var currentIndexer = indexSignatures[i]; - var currentParameterType = currentIndexer.parameters[0].type; - TypeScript.Debug.assert(currentParameterType); - if (currentParameterType === this.semanticInfoChain.stringTypeSymbol) { - if (firstStringIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_string_index_signature, null, [this.semanticInfoChain.locationFromAST(firstStringIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstStringIndexer = currentIndexer; - } - } else if (currentParameterType === this.semanticInfoChain.numberTypeSymbol) { - if (firstNumberIndexer) { - this.semanticInfoChain.addDiagnosticFromAST(currentIndexer.getDeclarations()[0].ast(), TypeScript.DiagnosticCode.Duplicate_number_index_signature, null, [this.semanticInfoChain.locationFromAST(firstNumberIndexer.getDeclarations()[0].ast())]); - return; - } else { - firstNumberIndexer = currentIndexer; - } - } - } - }; - - PullTypeResolver.prototype.filterSymbol = function (symbol, kind, enclosingDecl, context) { - if (symbol) { - if (symbol.kind & kind) { - return symbol; - } - - if (symbol.isAlias()) { - this.resolveDeclaredSymbol(symbol, context); - - var alias = symbol; - if (kind & 164 /* SomeContainer */) { - return alias.getExportAssignedContainerSymbol(); - } else if (kind & 58728795 /* SomeType */) { - return alias.getExportAssignedTypeSymbol(); - } else if (kind & 68147712 /* SomeValue */) { - return alias.getExportAssignedValueSymbol(); - } - } - } - return null; - }; - - PullTypeResolver.prototype.getMemberSymbolOfKind = function (symbolName, kind, pullTypeSymbol, enclosingDecl, context) { - var memberSymbol = this.getNamedPropertySymbol(symbolName, kind, pullTypeSymbol); - - return { - symbol: this.filterSymbol(memberSymbol, kind, enclosingDecl, context), - aliasSymbol: memberSymbol && memberSymbol.isAlias() ? memberSymbol : null - }; - }; - - PullTypeResolver.prototype.resolveIdentifierOfInternalModuleReference = function (importDecl, identifier, moduleSymbol, enclosingDecl, context) { - var rhsName = identifier.valueText(); - if (rhsName.length === 0) { - return null; - } - - var moduleTypeSymbol = moduleSymbol.type; - var memberSymbol = this.getMemberSymbolOfKind(rhsName, 164 /* SomeContainer */, moduleTypeSymbol, enclosingDecl, context); - var containerSymbol = memberSymbol.symbol; - var valueSymbol = null; - var typeSymbol = null; - var aliasSymbol = null; - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - aliasSymbol = memberSymbol.aliasSymbol; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - var aliasedAssignedValue = containerSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = containerSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = containerSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - aliasSymbol = containerSymbol; - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return null; - } - - if (!valueSymbol) { - if (moduleTypeSymbol.getInstanceSymbol()) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 68147712 /* SomeValue */, moduleTypeSymbol.getInstanceSymbol().type, enclosingDecl, context); - valueSymbol = memberSymbol.symbol; - if (valueSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - } - - if (!typeSymbol) { - memberSymbol = this.getMemberSymbolOfKind(rhsName, 58728795 /* SomeType */, moduleTypeSymbol, enclosingDecl, context); - typeSymbol = memberSymbol.symbol; - if (typeSymbol && memberSymbol.aliasSymbol) { - aliasSymbol = memberSymbol.aliasSymbol; - } - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(identifier, TypeScript.DiagnosticCode.Could_not_find_symbol_0_in_module_1, [rhsName, moduleSymbol.toString()]); - return null; - } - - if (!typeSymbol && containerSymbol) { - typeSymbol = containerSymbol; - } - - return { - valueSymbol: valueSymbol, - typeSymbol: typeSymbol, - containerSymbol: containerSymbol, - aliasSymbol: aliasSymbol - }; - }; - - PullTypeResolver.prototype.resolveModuleReference = function (importDecl, moduleNameExpr, enclosingDecl, context, declPath) { - TypeScript.Debug.assert(moduleNameExpr.kind() === 121 /* QualifiedName */ || moduleNameExpr.kind() === 11 /* IdentifierName */ || moduleNameExpr.kind() === 14 /* StringLiteral */, "resolving module reference should always be either name or member reference"); - - var moduleSymbol = null; - var moduleName; - - if (moduleNameExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = moduleNameExpr; - var moduleContainer = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleContainer) { - moduleName = dottedNameAST.right.valueText(); - - moduleSymbol = this.getMemberSymbolOfKind(moduleName, 4 /* Container */, moduleContainer.type, enclosingDecl, context).symbol; - if (!moduleSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.Could_not_find_module_0_in_module_1, [moduleName, moduleContainer.toString()]); - } - } - } else { - var valueText = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.valueText() : moduleNameExpr.valueText(); - var text = moduleNameExpr.kind() === 11 /* IdentifierName */ ? moduleNameExpr.text() : moduleNameExpr.text(); - - if (text.length > 0) { - var resolvedModuleNameSymbol = this.getSymbolFromDeclPath(valueText, declPath, 4 /* Container */); - moduleSymbol = this.filterSymbol(resolvedModuleNameSymbol, 4 /* Container */, enclosingDecl, context); - if (moduleSymbol) { - this.semanticInfoChain.setSymbolForAST(moduleNameExpr, moduleSymbol); - if (resolvedModuleNameSymbol.isAlias()) { - this.semanticInfoChain.setAliasSymbolForAST(moduleNameExpr, resolvedModuleNameSymbol); - var importDeclSymbol = importDecl.getSymbol(); - importDeclSymbol.addLinkedAliasSymbol(resolvedModuleNameSymbol); - } - } else { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameExpr, TypeScript.DiagnosticCode.Unable_to_resolve_module_reference_0, [valueText]); - } - } - } - - return moduleSymbol; - }; - - PullTypeResolver.prototype.resolveInternalModuleReference = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - - var moduleReference = importStatementAST.moduleReference; - - var aliasExpr = moduleReference.kind() === 245 /* ExternalModuleReference */ ? moduleReference.stringLiteral : moduleReference.moduleName; - - var declPath = enclosingDecl.getParentPath(); - var aliasedType = null; - var importDeclSymbol = importDecl.getSymbol(); - - if (aliasExpr.kind() === 11 /* IdentifierName */ || aliasExpr.kind() === 14 /* StringLiteral */) { - var moduleSymbol = this.resolveModuleReference(importDecl, aliasExpr, enclosingDecl, context, declPath); - if (moduleSymbol) { - aliasedType = moduleSymbol.type; - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, this.semanticInfoChain.getAliasSymbolForAST(aliasExpr)); - if (aliasedType.anyDeclHasFlag(32768 /* InitializedModule */)) { - var moduleName = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.valueText() : aliasExpr.valueText(); - var valueSymbol = this.getSymbolFromDeclPath(moduleName, declPath, 68147712 /* SomeValue */); - var instanceSymbol = aliasedType.getInstanceSymbol(); - - if (valueSymbol && (instanceSymbol != valueSymbol || valueSymbol.type === aliasedType)) { - var text = aliasExpr.kind() === 11 /* IdentifierName */ ? aliasExpr.text() : aliasExpr.text(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(aliasExpr, TypeScript.DiagnosticCode.Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1, [text, moduleSymbol.type.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - } else { - importDeclSymbol.setAssignedValueSymbol(valueSymbol); - } - } - } else { - aliasedType = this.getNewErrorTypeSymbol(); - } - } else if (aliasExpr.kind() === 121 /* QualifiedName */) { - var dottedNameAST = aliasExpr; - var moduleSymbol = this.resolveModuleReference(importDecl, dottedNameAST.left, enclosingDecl, context, declPath); - if (moduleSymbol) { - var identifierResolution = this.resolveIdentifierOfInternalModuleReference(importDecl, dottedNameAST.right, moduleSymbol, enclosingDecl, context); - if (identifierResolution) { - importDeclSymbol.setAssignedValueSymbol(identifierResolution.valueSymbol); - importDeclSymbol.setAssignedTypeSymbol(identifierResolution.typeSymbol); - importDeclSymbol.setAssignedContainerSymbol(identifierResolution.containerSymbol); - this.semanticInfoChain.setAliasSymbolForAST(moduleReference, identifierResolution.aliasSymbol); - return null; - } - } - } - - if (!aliasedType) { - importDeclSymbol.setAssignedTypeSymbol(this.getNewErrorTypeSymbol()); - } - - return aliasedType; - }; - - PullTypeResolver.prototype.resolveImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - var aliasedType = null; - - if (importDeclSymbol.isResolved) { - return importDeclSymbol; - } - - importDeclSymbol.startResolving(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - var declPath = enclosingDecl.getParentPath(); - - aliasedType = this.resolveExternalModuleReference(modPath, importDecl.fileName()); - - if (!aliasedType) { - var path = importStatementAST.moduleReference.stringLiteral.text(); - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Unable_to_resolve_external_module_0, [path]); - aliasedType = this.getNewErrorTypeSymbol(); - } - } else { - aliasedType = this.resolveInternalModuleReference(importStatementAST, context); - } - - if (aliasedType) { - if (!aliasedType.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Module_cannot_be_aliased_to_a_non_module_type); - if (!aliasedType.isError()) { - aliasedType = this.getNewErrorTypeSymbol(); - } - } - - if (aliasedType.isContainer()) { - importDeclSymbol.setAssignedContainerSymbol(aliasedType); - } - importDeclSymbol.setAssignedTypeSymbol(aliasedType); - - this.setSymbolForAST(importStatementAST.moduleReference, aliasedType, null); - } - - importDeclSymbol.setResolved(); - - this.resolveDeclaredSymbol(importDeclSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedType(), context); - this.resolveDeclaredSymbol(importDeclSymbol.assignedContainer(), context); - - if (aliasedType && importDeclSymbol.anyDeclHasFlag(1 /* Exported */)) { - importDeclSymbol.setIsUsedInExportedAlias(); - - if (aliasedType.isContainer() && aliasedType.getExportAssignedValueSymbol()) { - importDeclSymbol.setIsUsedAsValue(); - } - } - - if (this.canTypeCheckAST(importStatementAST, context)) { - this.typeCheckImportDeclaration(importStatementAST, context); - } - - return importDeclSymbol; - }; - - PullTypeResolver.prototype.typeCheckImportDeclaration = function (importStatementAST, context) { - var _this = this; - this.setTypeChecked(importStatementAST, context); - - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var enclosingDecl = this.getEnclosingDecl(importDecl); - var importDeclSymbol = importDecl.getSymbol(); - - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - if (this.compilationSettings.noResolve()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set, null)); - } - - var modPath = importStatementAST.moduleReference.stringLiteral.valueText(); - if (enclosingDecl.kind === 32 /* DynamicModule */) { - var ast = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(this.getASTForDecl(enclosingDecl)); - if (ast && ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.isRelative(modPath)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(importStatementAST, TypeScript.DiagnosticCode.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name)); - } - } - } - } - - var checkPrivacy; - if (importStatementAST.moduleReference.kind() === 245 /* ExternalModuleReference */) { - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var container = containerSymbol ? containerSymbol.getContainer() : null; - if (container && container.kind === 32 /* DynamicModule */) { - checkPrivacy = true; - } - } else { - checkPrivacy = true; - } - - if (checkPrivacy) { - var typeSymbol = importDeclSymbol.getExportAssignedTypeSymbol(); - var containerSymbol = importDeclSymbol.getExportAssignedContainerSymbol(); - var valueSymbol = importDeclSymbol.getExportAssignedValueSymbol(); - - this.checkSymbolPrivacy(importDeclSymbol, containerSymbol, function (symbol) { - var messageCode = TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - - if (typeSymbol !== containerSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, typeSymbol, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1; - - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - - if (valueSymbol) { - this.checkSymbolPrivacy(importDeclSymbol, valueSymbol.type, function (symbol) { - var messageCode = symbol.isContainer() && !symbol.isEnum() ? TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1 : TypeScript.DiagnosticCode.Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1; - var messageArguments = [importDeclSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null), symbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null, false, false, true)]; - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(importStatementAST, messageCode, messageArguments)); - }); - } - } - - this.checkNameForCompilerGeneratedDeclarationCollision(importStatementAST, true, importStatementAST.identifier, context); - }; - - PullTypeResolver.prototype.postTypeCheckImportDeclaration = function (importStatementAST, context) { - var importDecl = this.semanticInfoChain.getDeclForAST(importStatementAST); - var importSymbol = importDecl.getSymbol(); - - var isUsedAsValue = importSymbol.isUsedAsValue(); - var hasAssignedValue = importStatementAST.moduleReference.kind() !== 245 /* ExternalModuleReference */ && importSymbol.getExportAssignedValueSymbol() !== null; - - if (isUsedAsValue || hasAssignedValue) { - this.checkThisCaptureVariableCollides(importStatementAST, true, context); - } - }; - - PullTypeResolver.prototype.resolveExportAssignmentStatement = function (exportAssignmentAST, context) { - var id = exportAssignmentAST.identifier.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var valueSymbol = null; - var typeSymbol = null; - var containerSymbol = null; - - var enclosingDecl = this.getEnclosingDeclForAST(exportAssignmentAST); - var parentSymbol = enclosingDecl.getSymbol(); - - if (!parentSymbol.isType() && parentSymbol.isContainer()) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_used_at_the_top_level_of_external_modules); - return this.semanticInfoChain.anyTypeSymbol; - } - - var declPath = enclosingDecl !== null ? [enclosingDecl] : []; - - containerSymbol = this.getSymbolFromDeclPath(id, declPath, 164 /* SomeContainer */); - - var acceptableAlias = true; - - if (containerSymbol) { - acceptableAlias = (containerSymbol.kind & 59753052 /* AcceptableAlias */) !== 0; - } - - if (!acceptableAlias && containerSymbol && containerSymbol.kind === 128 /* TypeAlias */) { - this.resolveDeclaredSymbol(containerSymbol, context); - - var aliasSymbol = containerSymbol; - var aliasedAssignedValue = aliasSymbol.getExportAssignedValueSymbol(); - var aliasedAssignedType = aliasSymbol.getExportAssignedTypeSymbol(); - var aliasedAssignedContainer = aliasSymbol.getExportAssignedContainerSymbol(); - - if (aliasedAssignedValue || aliasedAssignedType || aliasedAssignedContainer) { - valueSymbol = aliasedAssignedValue; - typeSymbol = aliasedAssignedType; - containerSymbol = aliasedAssignedContainer; - aliasSymbol.setTypeUsedExternally(); - if (valueSymbol) { - aliasSymbol.setIsUsedAsValue(); - } - acceptableAlias = true; - } - } - - if (!acceptableAlias) { - this.semanticInfoChain.addDiagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (!valueSymbol) { - valueSymbol = this.getSymbolFromDeclPath(id, declPath, 68147712 /* SomeValue */); - } - if (!typeSymbol) { - typeSymbol = this.getSymbolFromDeclPath(id, declPath, 58728795 /* SomeType */); - } - - if (!valueSymbol && !typeSymbol && !containerSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(exportAssignmentAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [id])); - return this.semanticInfoChain.voidTypeSymbol; - } - - if (valueSymbol) { - parentSymbol.setExportAssignedValueSymbol(valueSymbol); - } - if (typeSymbol) { - parentSymbol.setExportAssignedTypeSymbol(typeSymbol); - } - if (containerSymbol) { - parentSymbol.setExportAssignedContainerSymbol(containerSymbol); - } - - this.resolveDeclaredSymbol(valueSymbol, context); - this.resolveDeclaredSymbol(typeSymbol, context); - this.resolveDeclaredSymbol(containerSymbol, context); - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionTypeSignature = function (funcDeclAST, typeParameters, parameterList, returnTypeAnnotation, context) { - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - var funcDeclSymbol = functionDecl.getSymbol(); - - var signature = funcDeclSymbol.kind === 33554432 /* ConstructorType */ ? funcDeclSymbol.getConstructSignatures()[0] : funcDeclSymbol.getCallSignatures()[0]; - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveFunctionTypeSignatureParameter(parameterList.parameters.nonSeparatorAt(i), signature, functionDecl, context); - } - } - - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.setTypeChecked(funcDeclAST, context); - this.typeCheckFunctionOverloads(funcDeclAST, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionTypeSignatureParameter = function (argDeclAST, signature, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - - if (argDeclAST.typeAnnotation) { - var typeRef = this.resolveTypeReference(TypeScript.ASTHelpers.getType(argDeclAST), context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(paramSymbol, typeRef); - } else { - if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_function_type_implicitly_has_an_any_type, [argDeclAST.identifier.text()])); - } - } - - if (TypeScript.hasFlag(paramDecl.flags, 128 /* Optional */) && argDeclAST.equalsValueClause && isTypesOnlyLocation(argDeclAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.resolveFunctionExpressionParameter = function (argDeclAST, id, typeExpr, equalsValueClause, contextParam, enclosingDecl, context) { - var paramDecl = this.semanticInfoChain.getDeclForAST(argDeclAST); - var paramSymbol = paramDecl.getSymbol(); - var contextualType = contextParam && contextParam.type; - var isImplicitAny = false; - - if (typeExpr) { - var typeRef = this.resolveTypeReference(typeExpr, context); - - if (paramSymbol.isVarArg && !typeRef.isArrayNamedTypeReference()) { - var diagnostic = context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeRef = this.getNewErrorTypeSymbol(); - } - - contextualType = typeRef || contextualType; - } - if (contextualType) { - if (context.isInferentiallyTyping()) { - contextualType = context.fixAllTypeParametersReferencedByType(contextualType, this); - } - context.setTypeInContext(paramSymbol, contextualType); - } else if (paramSymbol.isVarArg) { - if (this.cachedArrayInterfaceType()) { - context.setTypeInContext(paramSymbol, this.createInstantiatedType(this.cachedArrayInterfaceType(), [this.semanticInfoChain.anyTypeSymbol])); - } else { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - } - isImplicitAny = true; - } - - var canTypeCheckAST = this.canTypeCheckAST(argDeclAST, context); - if (equalsValueClause && (canTypeCheckAST || !contextualType)) { - if (contextualType) { - context.propagateContextualType(contextualType); - } - - var initExprSymbol = this.resolveAST(equalsValueClause, contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - } - - if (!initExprSymbol || !initExprSymbol.type) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [id.text()])); - - if (!contextualType) { - context.setTypeInContext(paramSymbol, this.getNewErrorTypeSymbol(paramSymbol.name)); - } - } else { - var initTypeSymbol = this.getInstanceTypeForAssignment(argDeclAST, initExprSymbol.type, context); - if (!contextualType) { - context.setTypeInContext(paramSymbol, initTypeSymbol.widenedType(this, equalsValueClause, context)); - isImplicitAny = initTypeSymbol !== paramSymbol.type; - } else { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, contextualType, argDeclAST, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(argDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), contextualType.toString(enclosingSymbol)])); - } - } - } - } - } - - if (!contextualType && !paramSymbol.isVarArg && !initTypeSymbol) { - context.setTypeInContext(paramSymbol, this.semanticInfoChain.anyTypeSymbol); - isImplicitAny = true; - } - - if (isImplicitAny && this.compilationSettings.noImplicitAny()) { - var functionExpressionName = paramDecl.getParentDecl().getFunctionExpressionName(); - if (functionExpressionName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [id.text(), functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(argDeclAST, TypeScript.DiagnosticCode.Parameter_0_of_lambda_function_implicitly_has_an_any_type, [id.text()])); - } - } - - if (canTypeCheckAST) { - this.checkNameForCompilerGeneratedDeclarationCollision(argDeclAST, true, id, context); - } - - paramSymbol.setResolved(); - }; - - PullTypeResolver.prototype.checkNameForCompilerGeneratedDeclarationCollision = function (astWithName, isDeclaration, name, context) { - var compilerReservedName = getCompilerReservedName(name); - switch (compilerReservedName) { - case 1 /* _this */: - this.postTypeCheckWorkitems.push(astWithName); - return; - - case 2 /* _super */: - this.checkSuperCaptureVariableCollides(astWithName, isDeclaration, context); - return; - - case 3 /* arguments */: - this.checkArgumentsCollides(astWithName, context); - return; - - case 4 /* _i */: - this.checkIndexOfRestArgumentInitializationCollides(astWithName, isDeclaration, context); - return; - - case 5 /* require */: - case 6 /* exports */: - if (isDeclaration) { - this.checkExternalModuleRequireExportsCollides(astWithName, name, context); - } - return; - } - }; - - PullTypeResolver.prototype.hasRestParameterCodeGen = function (someFunctionDecl) { - var enclosingAST = this.getASTForDecl(someFunctionDecl); - var nodeType = enclosingAST.kind(); - - if (nodeType === 129 /* FunctionDeclaration */) { - var functionDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && functionDeclaration.block && TypeScript.lastParameterIsRest(functionDeclaration.callSignature.parameterList); - } else if (nodeType === 135 /* MemberFunctionDeclaration */) { - var memberFunction = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.kind === 65536 /* Method */ ? someFunctionDecl.getParentDecl().flags : someFunctionDecl.flags, 8 /* Ambient */) && memberFunction.block && TypeScript.lastParameterIsRest(memberFunction.callSignature.parameterList); - } else if (nodeType === 137 /* ConstructorDeclaration */) { - var constructorDeclaration = enclosingAST; - return !TypeScript.hasFlag(someFunctionDecl.getParentDecl().flags, 8 /* Ambient */) && constructorDeclaration.block && TypeScript.lastParameterIsRest(constructorDeclaration.callSignature.parameterList); - } else if (nodeType === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunctionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(arrowFunctionExpression.callSignature.parameterList); - } else if (nodeType === 222 /* FunctionExpression */) { - var functionExpression = enclosingAST; - return TypeScript.lastParameterIsRest(functionExpression.callSignature.parameterList); - } - - return false; - }; - - PullTypeResolver.prototype.checkArgumentsCollides = function (ast, context) { - if (ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - if (TypeScript.hasFlag(enclosingDecl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(enclosingDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters)); - } - } - } - }; - - PullTypeResolver.prototype.checkIndexOfRestArgumentInitializationCollides = function (ast, isDeclaration, context) { - if (!isDeclaration || ast.kind() === 242 /* Parameter */) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var declPath = isDeclaration ? [enclosingDecl] : (enclosingDecl ? enclosingDecl.getParentPath() : []); - var resolvedSymbol = null; - var resolvedSymbolContainer; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (!isDeclaration) { - if (!resolvedSymbol) { - resolvedSymbol = this.resolveNameExpression(ast, context); - if (resolvedSymbol.isError()) { - return; - } - - resolvedSymbolContainer = resolvedSymbol.getContainer(); - } - - if (resolvedSymbolContainer && TypeScript.ArrayUtilities.contains(resolvedSymbolContainer.getDeclarations(), decl)) { - break; - } - } - - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */)) { - if (this.hasRestParameterCodeGen(decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter)); - } - } - } - } - }; - - PullTypeResolver.prototype.checkExternalModuleRequireExportsCollides = function (ast, name, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(name); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - if (enclosingDecl && enclosingDecl.kind === 32 /* DynamicModule */) { - var decl = this.semanticInfoChain.getDeclForAST(ast); - - if (!TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - var nameText = name.valueText(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, [nameText, nameText])); - } - } - }; - - PullTypeResolver.prototype.resolveObjectTypeTypeReference = function (objectType, context) { - var interfaceDecl = this.semanticInfoChain.getDeclForAST(objectType); - TypeScript.Debug.assert(interfaceDecl); - - var interfaceSymbol = interfaceDecl.getSymbol(); - TypeScript.Debug.assert(interfaceSymbol); - - if (objectType.typeMembers) { - var memberDecl = null; - var memberSymbol = null; - var memberType = null; - var typeMembers = objectType.typeMembers; - - for (var i = 0; i < typeMembers.nonSeparatorCount(); i++) { - memberDecl = this.semanticInfoChain.getDeclForAST(typeMembers.nonSeparatorAt(i)); - memberSymbol = (memberDecl.kind & 7340032 /* SomeSignature */) ? memberDecl.getSignatureSymbol() : memberDecl.getSymbol(); - - this.resolveAST(typeMembers.nonSeparatorAt(i), false, context); - - memberType = memberSymbol.type; - - if ((memberType && memberType.isGeneric()) || (memberSymbol.isSignature() && memberSymbol.isGeneric())) { - interfaceSymbol.setHasGenericMember(); - } - } - } - - interfaceSymbol.setResolved(); - - if (this.canTypeCheckAST(objectType, context)) { - this.typeCheckObjectTypeTypeReference(objectType, context); - } - - return interfaceSymbol; - }; - - PullTypeResolver.prototype.typeCheckObjectTypeTypeReference = function (objectType, context) { - this.setTypeChecked(objectType, context); - var objectTypeDecl = this.semanticInfoChain.getDeclForAST(objectType); - var objectTypeSymbol = objectTypeDecl.getSymbol(); - - this.typeCheckMembersAgainstIndexer(objectTypeSymbol, objectTypeDecl, context); - this.checkTypeForDuplicateIndexSignatures(objectTypeSymbol); - }; - - PullTypeResolver.prototype.resolveTypeAnnotation = function (typeAnnotation, context) { - return this.resolveTypeReference(typeAnnotation.type, context); - }; - - PullTypeResolver.prototype.resolveTypeReference = function (typeRef, context) { - if (typeRef === null) { - return null; - } - - TypeScript.Debug.assert(typeRef.kind() !== 244 /* TypeAnnotation */); - - var aliasType = null; - var type = this.computeTypeReferenceSymbol(typeRef, context); - - if (type.kind === 4 /* Container */) { - var container = type; - var instanceSymbol = container.getInstanceSymbol(); - - if (instanceSymbol && (instanceSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */) || instanceSymbol.kind === 32768 /* ConstructorMethod */)) { - type = instanceSymbol.type.getAssociatedContainerType(); - } - } - - if (type && type.isAlias()) { - aliasType = type; - type = aliasType.getExportAssignedTypeSymbol(); - } - - if (type && !type.isGeneric()) { - if (aliasType) { - this.semanticInfoChain.setAliasSymbolForAST(typeRef, aliasType); - } - } - - if (type && !type.isError()) { - if ((type.kind & 58728795 /* SomeType */) === 0) { - if (type.kind & 164 /* SomeContainer */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_cannot_refer_to_container_0, [aliasType ? aliasType.toString() : type.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeRef, TypeScript.DiagnosticCode.Type_reference_must_refer_to_type)); - } - } - } - - if (this.canTypeCheckAST(typeRef, context)) { - this.setTypeChecked(typeRef, context); - } - - return type; - }; - - PullTypeResolver.prototype.getArrayType = function (elementType) { - var arraySymbol = elementType.getArrayType(); - - if (!arraySymbol) { - arraySymbol = this.createInstantiatedType(this.cachedArrayInterfaceType(), [elementType]); - - if (!arraySymbol) { - arraySymbol = this.semanticInfoChain.anyTypeSymbol; - } - - elementType.setArrayType(arraySymbol); - } - - return arraySymbol; - }; - - PullTypeResolver.prototype.computeTypeReferenceSymbol = function (term, context) { - switch (term.kind()) { - case 60 /* AnyKeyword */: - return this.semanticInfoChain.anyTypeSymbol; - case 61 /* BooleanKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - case 67 /* NumberKeyword */: - return this.semanticInfoChain.numberTypeSymbol; - case 69 /* StringKeyword */: - return this.semanticInfoChain.stringTypeSymbol; - case 41 /* VoidKeyword */: - return this.semanticInfoChain.voidTypeSymbol; - } - - var typeDeclSymbol = null; - - if (term.kind() === 11 /* IdentifierName */) { - typeDeclSymbol = this.resolveTypeNameExpression(term, context); - } else if (term.kind() === 123 /* FunctionType */) { - var functionType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(functionType, functionType.typeParameterList, functionType.parameterList, functionType.type, context); - } else if (term.kind() === 125 /* ConstructorType */) { - var constructorType = term; - typeDeclSymbol = this.resolveAnyFunctionTypeSignature(constructorType, constructorType.typeParameterList, constructorType.parameterList, constructorType.type, context); - } else if (term.kind() === 122 /* ObjectType */) { - typeDeclSymbol = this.resolveObjectTypeTypeReference(term, context); - } else if (term.kind() === 126 /* GenericType */) { - typeDeclSymbol = this.resolveGenericTypeReference(term, context); - } else if (term.kind() === 121 /* QualifiedName */) { - typeDeclSymbol = this.resolveQualifiedName(term, context); - } else if (term.kind() === 14 /* StringLiteral */) { - var stringConstantAST = term; - var enclosingDecl = this.getEnclosingDeclForAST(term); - typeDeclSymbol = new TypeScript.PullStringConstantTypeSymbol(stringConstantAST.text()); - var decl = new TypeScript.PullSynthesizedDecl(stringConstantAST.text(), stringConstantAST.text(), typeDeclSymbol.kind, null, enclosingDecl, enclosingDecl.semanticInfoChain); - typeDeclSymbol.addDeclaration(decl); - } else if (term.kind() === 127 /* TypeQuery */) { - var typeQuery = term; - - var typeQueryTerm = typeQuery.name; - - var valueSymbol = this.resolveAST(typeQueryTerm, false, context); - - if (valueSymbol && valueSymbol.isAlias()) { - if (valueSymbol.assignedValue()) { - valueSymbol = valueSymbol.assignedValue(); - } else { - var containerSymbol = valueSymbol.getExportAssignedContainerSymbol(); - valueSymbol = (containerSymbol && containerSymbol.isContainer() && !containerSymbol.isEnum()) ? containerSymbol.getInstanceSymbol() : null; - } - } - - if (valueSymbol) { - typeDeclSymbol = valueSymbol.type.widenedType(this, typeQueryTerm, context); - } else { - typeDeclSymbol = this.getNewErrorTypeSymbol(); - } - } else if (term.kind() === 124 /* ArrayType */) { - var arrayType = term; - var underlying = this.resolveTypeReference(arrayType.type, context); - typeDeclSymbol = this.getArrayType(underlying); - } else { - throw TypeScript.Errors.invalidOperation("unknown type"); - } - - if (!typeDeclSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Unable_to_resolve_type)); - return this.getNewErrorTypeSymbol(); - } - - if (typeDeclSymbol.isError()) { - return typeDeclSymbol; - } - - if (this.genericTypeIsUsedWithoutRequiredTypeArguments(typeDeclSymbol, term, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(term, TypeScript.DiagnosticCode.Generic_type_references_must_include_all_type_arguments)); - typeDeclSymbol = this.instantiateTypeToAny(typeDeclSymbol, context); - } - - return typeDeclSymbol; - }; - - PullTypeResolver.prototype.genericTypeIsUsedWithoutRequiredTypeArguments = function (typeSymbol, term, context) { - if (!typeSymbol) { - return false; - } - - if (typeSymbol.isAlias()) { - return this.genericTypeIsUsedWithoutRequiredTypeArguments(typeSymbol.getExportAssignedTypeSymbol(), term, context); - } - - return typeSymbol.isNamedTypeSymbol() && typeSymbol.isGeneric() && !typeSymbol.isTypeParameter() && (typeSymbol.isResolved || typeSymbol.inResolution) && !typeSymbol.getIsSpecialized() && typeSymbol.getTypeParameters().length && typeSymbol.getTypeArguments() === null && this.isTypeRefWithoutTypeArgs(term); - }; - - PullTypeResolver.prototype.resolveMemberVariableDeclaration = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl.variableDeclarator), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolvePropertySignature = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclarator = function (varDecl, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveParameterList = function (list, context) { - return this.resolveSeparatedList(list.parameters, context); - }; - - PullTypeResolver.prototype.resolveParameter = function (parameter, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.getEnumTypeSymbol = function (enumElement, context) { - var enumDeclaration = enumElement.parent.parent; - var decl = this.semanticInfoChain.getDeclForAST(enumDeclaration); - var symbol = decl.getSymbol(); - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.resolveEnumElement = function (enumElement, context) { - return this.resolveVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckEnumElement = function (enumElement, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(enumElement, TypeScript.sentinelEmptyArray, enumElement.propertyName, null, enumElement.equalsValueClause, context); - }; - - PullTypeResolver.prototype.resolveEqualsValueClause = function (clause, isContextuallyTyped, context) { - if (this.canTypeCheckAST(clause, context)) { - this.setTypeChecked(clause, context); - } - - return this.resolveAST(clause.value, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - - if (enclosingDecl && decl.kind === 2048 /* Parameter */) { - enclosingDecl.ensureSymbolIsBound(); - } - - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (declSymbol.isResolved) { - var declType = declSymbol.type; - var valDecl = decl.getValueDecl(); - - if (valDecl) { - var valSymbol = valDecl.getSymbol(); - - if (valSymbol && !valSymbol.isResolved) { - valSymbol.type = declType; - valSymbol.setResolved(); - } - } - } else { - if (declSymbol.inResolution) { - declSymbol.type = this.semanticInfoChain.anyTypeSymbol; - declSymbol.setResolved(); - return declSymbol; - } - - if (!declSymbol.type || !declSymbol.type.isError()) { - declSymbol.startResolving(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - if (!hasTypeExpr) { - this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - } - - if (!(hasTypeExpr || init)) { - var defaultType = this.semanticInfoChain.anyTypeSymbol; - - if (declSymbol.isVarArg && this.cachedArrayInterfaceType()) { - defaultType = this.createInstantiatedType(this.cachedArrayInterfaceType(), [defaultType]); - } - - context.setTypeInContext(declSymbol, defaultType); - - if (declParameterSymbol) { - declParameterSymbol.type = defaultType; - } - } - declSymbol.setResolved(); - - if (declParameterSymbol) { - declParameterSymbol.setResolved(); - } - } - } - - if (this.canTypeCheckAST(varDeclOrParameter, context)) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDeclOrParameter, modifiers, name, typeExpr, init, context); - } - - return declSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclarationTypeExpr = function (varDeclOrParameter, name, typeExpr, context) { - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - if (varDeclOrParameter.kind() === 243 /* EnumElement */) { - var result = this.getEnumTypeSymbol(varDeclOrParameter, context); - declSymbol.type = result; - return result; - } - - if (!typeExpr) { - return null; - } - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var typeExprSymbol = this.resolveTypeReference(typeExpr, context); - - if (!typeExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - declSymbol.type = this.getNewErrorTypeSymbol(); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } else if (typeExprSymbol.isError()) { - context.setTypeInContext(declSymbol, typeExprSymbol); - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, typeExprSymbol); - } - } else { - if (typeExprSymbol === this.semanticInfoChain.anyTypeSymbol) { - decl.setFlag(16777216 /* IsAnnotatedWithAny */); - } - - if (typeExprSymbol.isContainer()) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - typeExprSymbol = typeExprSymbol.type; - - if (typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.isContainer() && !typeExprSymbol.isEnum()) { - var instanceSymbol = typeExprSymbol.getInstanceSymbol(); - - if (!instanceSymbol || !TypeScript.PullHelpers.symbolIsEnum(instanceSymbol)) { - typeExprSymbol = this.getNewErrorTypeSymbol(); - } else { - typeExprSymbol = instanceSymbol.type; - } - } - } - } else if (declSymbol.isVarArg && !(typeExprSymbol.isArrayNamedTypeReference() || typeExprSymbol === this.cachedArrayInterfaceType())) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Rest_parameters_must_be_array_types)); - typeExprSymbol = this.getNewErrorTypeSymbol(); - } - - context.setTypeInContext(declSymbol, typeExprSymbol); - - if (declParameterSymbol) { - declParameterSymbol.type = typeExprSymbol; - } - - if (typeExprSymbol.kind === 16777216 /* FunctionType */ && !typeExprSymbol.getFunctionSymbol()) { - typeExprSymbol.setFunctionSymbol(declSymbol); - } - } - - return typeExprSymbol; - }; - - PullTypeResolver.prototype.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr = function (varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol) { - if (!init) { - return null; - } - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - if (typeExprSymbol) { - context.pushNewContextualType(typeExprSymbol); - } - - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - var declParameterSymbol = decl.getValueDecl() ? decl.getValueDecl().getSymbol() : null; - - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var initExprSymbol = this.resolveAST(init, typeExprSymbol !== null, context); - - if (typeExprSymbol) { - context.popAnyContextualType(); - } - - if (!initExprSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Unable_to_resolve_type_of_0, [name.text()])); - - if (!hasTypeExpr) { - context.setTypeInContext(declSymbol, this.getNewErrorTypeSymbol()); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, this.semanticInfoChain.anyTypeSymbol); - } - } - } else { - var initTypeSymbol = initExprSymbol.type; - - if (!hasTypeExpr) { - var widenedInitTypeSymbol = initTypeSymbol.widenedType(this, init.value, context); - context.setTypeInContext(declSymbol, widenedInitTypeSymbol); - - if (declParameterSymbol) { - context.setTypeInContext(declParameterSymbol, widenedInitTypeSymbol); - } - - if (this.compilationSettings.noImplicitAny()) { - if ((widenedInitTypeSymbol !== initTypeSymbol) && (widenedInitTypeSymbol === this.semanticInfoChain.anyTypeSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - - return widenedInitTypeSymbol; - } - } - - return initTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckPropertySignature = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.sentinelEmptyArray, varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberVariableDeclaration = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, varDecl.modifiers, varDecl.variableDeclarator.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.variableDeclarator.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclarator = function (varDecl, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(varDecl, TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl), varDecl.propertyName, TypeScript.ASTHelpers.getType(varDecl), varDecl.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckParameter = function (parameter, context) { - this.typeCheckVariableDeclaratorOrParameterOrEnumElement(parameter, parameter.modifiers, parameter.identifier, TypeScript.ASTHelpers.getType(parameter), parameter.equalsValueClause, context); - }; - - PullTypeResolver.prototype.typeCheckVariableDeclaratorOrParameterOrEnumElement = function (varDeclOrParameter, modifiers, name, typeExpr, init, context) { - var _this = this; - this.setTypeChecked(varDeclOrParameter, context); - - var hasTypeExpr = typeExpr !== null || varDeclOrParameter.kind() === 243 /* EnumElement */; - var enclosingDecl = this.getEnclosingDeclForAST(varDeclOrParameter); - var decl = this.semanticInfoChain.getDeclForAST(varDeclOrParameter); - var declSymbol = decl.getSymbol(); - - var typeExprSymbol = this.resolveAndTypeCheckVariableDeclarationTypeExpr(varDeclOrParameter, name, typeExpr, context); - - var initTypeSymbol = this.resolveAndTypeCheckVariableDeclaratorOrParameterInitExpr(varDeclOrParameter, name, typeExpr, init, context, typeExprSymbol); - - if (hasTypeExpr || init) { - if (typeExprSymbol && typeExprSymbol.isAlias()) { - typeExprSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - } - - if (typeExprSymbol && typeExprSymbol.kind === 32 /* DynamicModule */) { - var exportedTypeSymbol = typeExprSymbol.getExportAssignedTypeSymbol(); - - if (exportedTypeSymbol) { - typeExprSymbol = exportedTypeSymbol; - } else { - var instanceTypeSymbol = typeExprSymbol.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [typeExprSymbol.toString()])); - typeExprSymbol = null; - } else { - typeExprSymbol = instanceTypeSymbol; - } - } - } - - initTypeSymbol = this.getInstanceTypeForAssignment(varDeclOrParameter, initTypeSymbol, context); - - if (initTypeSymbol && typeExprSymbol) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(initTypeSymbol, typeExprSymbol, varDeclOrParameter, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(varDeclOrParameter); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [initTypeSymbol.toString(enclosingSymbol), typeExprSymbol.toString(enclosingSymbol)])); - } - } - } - } else if (varDeclOrParameter.kind() !== 243 /* EnumElement */ && this.compilationSettings.noImplicitAny() && !this.isForInVariableDeclarator(varDeclOrParameter)) { - var wrapperDecl = this.getEnclosingDecl(decl); - wrapperDecl = wrapperDecl || enclosingDecl; - - var needReportError = function (containerDecl, selfDecl) { - if (!TypeScript.hasFlag(containerDecl.flags, 8 /* Ambient */)) { - return true; - } - - return selfDecl && !TypeScript.hasFlag(selfDecl.flags, 2 /* Private */); - }; - - if ((wrapperDecl.kind === 16384 /* Function */ || wrapperDecl.kind === 32768 /* ConstructorMethod */ || wrapperDecl.kind === 2097152 /* ConstructSignature */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } else if (wrapperDecl.kind === 65536 /* Method */) { - var parentDecl = wrapperDecl.getParentDecl(); - - if (needReportError(parentDecl, wrapperDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Parameter_0_of_1_implicitly_has_an_any_type, [name.text(), enclosingDecl.name])); - } - } else if (decl.kind === 4096 /* Property */ && !declSymbol.getContainer().isNamedTypeSymbol()) { - if (needReportError(wrapperDecl, decl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Member_0_of_object_type_implicitly_has_an_any_type, [name.text()])); - } - } else if (wrapperDecl.kind !== 268435456 /* CatchBlock */) { - if (needReportError(wrapperDecl) || !TypeScript.hasModifier(modifiers, 2 /* Private */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Variable_0_implicitly_has_an_any_type, [name.text()])); - } - } - } - - if (init && varDeclOrParameter.kind() === 242 /* Parameter */) { - var containerSignature = enclosingDecl.getSignatureSymbol(); - if (containerSignature && !containerSignature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(varDeclOrParameter, TypeScript.DiagnosticCode.Default_arguments_are_only_allowed_in_implementation)); - } - } - if (declSymbol.kind !== 2048 /* Parameter */ && (declSymbol.kind !== 4096 /* Property */ || declSymbol.getContainer().isNamedTypeSymbol())) { - this.checkSymbolPrivacy(declSymbol, declSymbol.type, function (symbol) { - return _this.variablePrivacyErrorReporter(varDeclOrParameter, declSymbol, symbol, context); - }); - } - - if ((declSymbol.kind !== 4096 /* Property */ && declSymbol.kind !== 67108864 /* EnumMember */) || declSymbol.anyDeclHasFlag(8388608 /* PropertyParameter */)) { - this.checkNameForCompilerGeneratedDeclarationCollision(varDeclOrParameter, true, name, context); - } - }; - - PullTypeResolver.prototype.isForInVariableDeclarator = function (ast) { - return ast.kind() === 225 /* VariableDeclarator */ && ast.parent && ast.parent.parent && ast.parent.parent.parent && ast.parent.kind() === 2 /* SeparatedList */ && ast.parent.parent.kind() === 224 /* VariableDeclaration */ && ast.parent.parent.parent.kind() === 155 /* ForInStatement */ && ast.parent.parent.parent.variableDeclaration === ast.parent.parent; - }; - - PullTypeResolver.prototype.checkSuperCaptureVariableCollides = function (superAST, isDeclaration, context) { - var enclosingDecl = this.getEnclosingDeclForAST(superAST); - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(superAST, enclosingDecl); - - if (classSymbol && !classSymbol.anyDeclHasFlag(8 /* Ambient */)) { - if (superAST.kind() === 242 /* Parameter */) { - var enclosingAST = this.getASTForDecl(enclosingDecl); - if (enclosingAST.kind() !== 218 /* ParenthesizedArrowFunctionExpression */ && enclosingAST.kind() !== 219 /* SimpleArrowFunctionExpression */) { - var block = enclosingDecl.kind === 65536 /* Method */ ? enclosingAST.block : enclosingAST.block; - if (!block) { - return; - } - } - } - - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - if (parents.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(superAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference : TypeScript.DiagnosticCode.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference)); - } - } - }; - - PullTypeResolver.prototype.checkThisCaptureVariableCollides = function (_thisAST, isDeclaration, context) { - if (isDeclaration) { - var decl = this.semanticInfoChain.getDeclForAST(_thisAST); - if (TypeScript.hasFlag(decl.flags, 8 /* Ambient */)) { - return; - } - } - - var enclosingDecl = this.getEnclosingDeclForAST(_thisAST); - - var enclosingModule = TypeScript.ASTHelpers.getModuleDeclarationFromNameAST(_thisAST); - if (enclosingModule) { - enclosingDecl = this.getEnclosingDeclForAST(enclosingModule); - } - - var declPath = enclosingDecl.getParentPath(); - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - continue; - } - - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - if (TypeScript.hasFlag(decl.flags, 262144 /* MustCaptureThis */)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(_thisAST, isDeclaration ? TypeScript.DiagnosticCode.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference : TypeScript.DiagnosticCode.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference)); - } - break; - } - } - }; - - PullTypeResolver.prototype.postTypeCheckVariableDeclaratorOrParameter = function (varDeclOrParameter, context) { - this.checkThisCaptureVariableCollides(varDeclOrParameter, true, context); - }; - - PullTypeResolver.prototype.resolveTypeParameterDeclaration = function (typeParameterAST, context) { - var typeParameterDecl = this.semanticInfoChain.getDeclForAST(typeParameterAST); - var typeParameterSymbol = typeParameterDecl.getSymbol(); - - this.resolveFirstTypeParameterDeclaration(typeParameterSymbol, context); - - if (typeParameterSymbol.isResolved && this.canTypeCheckAST(typeParameterAST, context)) { - this.typeCheckTypeParameterDeclaration(typeParameterAST, context); - } - - return typeParameterSymbol; - }; - - PullTypeResolver.prototype.resolveFirstTypeParameterDeclaration = function (typeParameterSymbol, context) { - var typeParameterDecl = typeParameterSymbol.getDeclarations()[0]; - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecl); - - if (typeParameterSymbol.isResolved || typeParameterSymbol.inResolution) { - return; - } - - typeParameterSymbol.startResolving(); - - if (typeParameterAST.constraint) { - var constraintTypeSymbol = this.resolveTypeReference(typeParameterAST.constraint.type, context); - - if (constraintTypeSymbol) { - typeParameterSymbol.setConstraint(constraintTypeSymbol); - } - } - - typeParameterSymbol.setResolved(); - }; - - PullTypeResolver.prototype.typeCheckTypeParameterDeclaration = function (typeParameterAST, context) { - this.setTypeChecked(typeParameterAST, context); - - var constraint = this.resolveAST(typeParameterAST.constraint, false, context); - - if (constraint) { - var typeParametersAST = typeParameterAST.parent; - var typeParameters = []; - for (var i = 0; i < typeParametersAST.nonSeparatorCount(); i++) { - var currentTypeParameterAST = typeParametersAST.nonSeparatorAt(i); - var currentTypeParameterDecl = this.semanticInfoChain.getDeclForAST(currentTypeParameterAST); - var currentTypeParameter = this.semanticInfoChain.getSymbolForDecl(currentTypeParameterDecl); - typeParameters[currentTypeParameter.pullSymbolID] = currentTypeParameter; - } - - if (constraint.wrapsSomeTypeParameter(typeParameters)) { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); - } - } - }; - - PullTypeResolver.prototype.resolveConstraint = function (constraint, context) { - if (this.canTypeCheckAST(constraint, context)) { - this.setTypeChecked(constraint, context); - } - - return this.resolveTypeReference(constraint.type, context); - }; - - PullTypeResolver.prototype.resolveFunctionBodyReturnTypes = function (funcDeclAST, block, bodyExpression, signature, useContextualType, enclosingDecl, context) { - var _this = this; - var returnStatementsExpressions = []; - - var enclosingDeclStack = [enclosingDecl]; - - var preFindReturnExpressionTypes = function (ast, walker) { - var go = true; - - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - returnStatementsExpressions.push({ expression: returnStatement.expression, enclosingDecl: enclosingDeclStack[enclosingDeclStack.length - 1] }); - go = false; - break; - - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack[enclosingDeclStack.length] = _this.semanticInfoChain.getDeclForAST(ast); - break; - - default: - break; - } - - walker.options.goChildren = go; - - return ast; - }; - - var postFindReturnExpressionEnclosingDecls = function (ast, walker) { - switch (ast.kind()) { - case 236 /* CatchClause */: - case 163 /* WithStatement */: - enclosingDeclStack.length--; - break; - default: - break; - } - - walker.options.goChildren = true; - - return ast; - }; - - if (block) { - TypeScript.getAstWalkerFactory().walk(block, preFindReturnExpressionTypes, postFindReturnExpressionEnclosingDecls); - } else { - returnStatementsExpressions.push({ expression: bodyExpression, enclosingDecl: enclosingDecl }); - enclosingDecl.setFlag(4194304 /* HasReturnStatement */); - } - - if (!returnStatementsExpressions.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var returnExpressionSymbols = []; - var returnExpressions = []; - - for (var i = 0; i < returnStatementsExpressions.length; i++) { - var returnExpression = returnStatementsExpressions[i].expression; - if (returnExpression) { - var returnType = this.resolveAST(returnExpression, useContextualType, context).type; - - if (returnType.isError()) { - signature.returnType = returnType; - return; - } else { - if (returnExpression.parent.kind() === 150 /* ReturnStatement */) { - this.setSymbolForAST(returnExpression.parent, returnType, context); - } - } - - returnExpressionSymbols.push(returnType); - returnExpressions.push(returnExpression); - } - } - - if (!returnExpressionSymbols.length) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - } else { - var collection = { - getLength: function () { - return returnExpressionSymbols.length; - }, - getTypeAtIndex: function (index) { - return returnExpressionSymbols[index].type; - } - }; - - var bestCommonReturnType = this.findBestCommonType(collection, context, new TypeComparisonInfo()); - var returnType = bestCommonReturnType; - var returnExpression = returnExpressions[returnExpressionSymbols.indexOf(returnType)]; - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - - if (returnType) { - var previousReturnType = returnType; - var newReturnType = returnType.widenedType(this, returnExpression, context); - signature.returnType = newReturnType; - - if (!TypeScript.ArrayUtilities.contains(returnExpressionSymbols, bestCommonReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Could_not_find_the_best_common_type_of_types_of_all_return_statement_expressions)); - } - - if (this.compilationSettings.noImplicitAny()) { - if (previousReturnType !== newReturnType && newReturnType === this.semanticInfoChain.anyTypeSymbol) { - var functionName = enclosingDecl.name; - if (functionName === "") { - functionName = enclosingDecl.getFunctionExpressionName(); - } - - if (functionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } - - if (!functionSymbol.type && functionSymbol.isAccessor()) { - functionSymbol.type = signature.returnType; - } - } - } - }; - - PullTypeResolver.prototype.typeCheckConstructorDeclaration = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveAST(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), false, context); - } - - this.resolveAST(funcDeclAST.block, false, context); - - if (funcDecl.getSignatureSymbol() && funcDecl.getSignatureSymbol().isDefinition() && this.enclosingClassIsDerived(funcDecl.getParentDecl())) { - if (!this.constructorHasSuperCall(funcDeclAST)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call)); - } else if (this.superCallMustBeFirstStatementInConstructor(funcDecl)) { - var firstStatement = this.getFirstStatementOfBlockOrNull(funcDeclAST.block); - if (!firstStatement || !this.isSuperInvocationExpressionStatement(firstStatement)) { - context.postDiagnostic(new TypeScript.Diagnostic(funcDeclAST.fileName(), this.semanticInfoChain.lineMap(funcDeclAST.fileName()), funcDeclAST.start(), "constructor".length, TypeScript.DiagnosticCode.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties)); - } - } - } - - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.callSignature.parameterList), null, funcDeclAST.block, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.constructorHasSuperCall = function (constructorDecl) { - var _this = this; - if (constructorDecl.block) { - var foundSuperCall = false; - var pre = function (ast, walker) { - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 215 /* ObjectLiteralExpression */: - walker.options.goChildren = false; - default: - if (_this.isSuperInvocationExpression(ast)) { - foundSuperCall = true; - walker.options.stopWalking = true; - } - } - }; - - TypeScript.getAstWalkerFactory().walk(constructorDecl.block, pre); - return foundSuperCall; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), funcDecl.callSignature.typeAnnotation, funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckCallSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckConstructSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMethodSignature = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.typeCheckMemberFunctionDeclaration = function (funcDecl, context) { - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.containsSingleThrowStatement = function (block) { - return block !== null && block.statements.childCount() === 1 && block.statements.childAt(0).kind() === 157 /* ThrowStatement */; - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(parameters, false, context); - - this.resolveAST(block, false, context); - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, isStatic, typeParameters, TypeScript.ASTHelpers.parametersFromParameterList(parameters), returnTypeAnnotation, block, context); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(funcDecl, returnTypeAnnotation, funcDecl.getSignatureSymbol().returnType, block, context); - - if (funcDecl.kind === 16384 /* Function */) { - this.checkNameForCompilerGeneratedDeclarationCollision(funcDeclAST, true, name, context); - } - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement = function (functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context) { - var hasReturn = TypeScript.hasFlag(functionDecl.flags, 4194304 /* HasReturnStatement */); - - if (block !== null && returnTypeAnnotation !== null && !hasReturn) { - var isVoidOrAny = this.isAnyOrEquivalent(returnTypeSymbol) || returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol; - - if (!isVoidOrAny && !this.containsSingleThrowStatement(block)) { - var funcName = functionDecl.getDisplayName() || TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Function_declared_a_non_void_return_type_but_has_no_return_expression)); - } - } - }; - - PullTypeResolver.prototype.typeCheckIndexSignature = function (funcDeclAST, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - this.resolveAST(funcDeclAST.parameter, false, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - this.validateVariableDeclarationGroups(funcDecl, context); - - this.checkFunctionTypePrivacy(funcDeclAST, false, null, TypeScript.ASTHelpers.parametersFromParameter(funcDeclAST.parameter), TypeScript.ASTHelpers.getType(funcDeclAST), null, context); - - var signature = funcDecl.getSignatureSymbol(); - - this.typeCheckCallBacks.push(function (context) { - var parentSymbol = funcDecl.getSignatureSymbol().getContainer(); - var allIndexSignatures = _this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parentSymbol, context); - var stringIndexSignature = allIndexSignatures.stringSignature; - var numberIndexSignature = allIndexSignatures.numericSignature; - var isNumericIndexer = numberIndexSignature === signature; - - if (numberIndexSignature && stringIndexSignature && (isNumericIndexer || stringIndexSignature.getDeclarations()[0].getParentDecl() !== numberIndexSignature.getDeclarations()[0].getParentDecl())) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!_this.sourceIsAssignableToTarget(numberIndexSignature.returnType, stringIndexSignature.returnType, funcDeclAST, context, comparisonInfo)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(funcDeclAST); - if (comparisonInfo.message) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1, [numberIndexSignature.returnType.toString(enclosingSymbol), stringIndexSignature.returnType.toString(enclosingSymbol)])); - } - } - } - - var allMembers = parentSymbol.type.getAllMembers(536869887 /* All */, 0 /* all */); - for (var i = 0; i < allMembers.length; i++) { - var member = allMembers[i]; - var name = member.name; - if (name || (member.kind === 4096 /* Property */ && name === "")) { - if (!allMembers[i].isResolved) { - _this.resolveDeclaredSymbol(allMembers[i], context); - } - - if (parentSymbol !== allMembers[i].getContainer()) { - var isMemberNumeric = TypeScript.PullHelpers.isNameNumeric(name); - var indexerKindMatchesMemberNameKind = isNumericIndexer === isMemberNumeric; - var onlyStringIndexerIsPresent = !numberIndexSignature; - - if (indexerKindMatchesMemberNameKind || onlyStringIndexerIsPresent) { - var comparisonInfo = new TypeComparisonInfo(); - if (!_this.sourceIsAssignableToTarget(allMembers[i].type, signature.returnType, funcDeclAST, context, comparisonInfo, false)) { - _this.reportErrorThatMemberIsNotSubtypeOfIndexer(allMembers[i], signature, funcDeclAST, context, comparisonInfo); - } - } - } - } - } - }); - }; - - PullTypeResolver.prototype.postTypeCheckFunctionDeclaration = function (funcDeclAST, context) { - this.checkThisCaptureVariableCollides(funcDeclAST, true, context); - }; - - PullTypeResolver.prototype.resolveReturnTypeAnnotationOfFunctionDeclaration = function (funcDeclAST, returnTypeAnnotation, context) { - var returnTypeSymbol = null; - - if (returnTypeAnnotation) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - } else { - var isConstructor = funcDeclAST.kind() === 137 /* ConstructorDeclaration */ || funcDeclAST.kind() === 143 /* ConstructSignature */; - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } - - return returnTypeSymbol; - }; - - PullTypeResolver.prototype.resolveMemberFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveCallSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.typeParameterList, funcDecl.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveConstructSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, null, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveMethodSignature = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, false, funcDecl.propertyName, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), null, context); - }; - - PullTypeResolver.prototype.resolveAnyFunctionDeclaration = function (funcDecl, context) { - return this.resolveFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - }; - - PullTypeResolver.prototype.resolveFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveSimpleArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, null, TypeScript.ASTHelpers.parametersFromIdentifier(funcDecl.identifier), null, funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveParenthesizedArrowFunctionExpression = function (funcDecl, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcDecl, funcDecl.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, funcDecl.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.getEnclosingClassDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 131 /* ClassDeclaration */) { - return ast; - } - - ast = ast.parent; - } - - return null; - }; - - PullTypeResolver.prototype.resolveConstructorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - return funcSymbol; - } - - if (!signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < funcDeclAST.callSignature.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.callSignature.parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - - if (signature.isGeneric()) { - if (funcSymbol) { - funcSymbol.type.setHasGenericSignature(); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckConstructorDeclaration(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveIndexMemberDeclaration = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveIndexSignature(ast.indexSignature, context); - }; - - PullTypeResolver.prototype.resolveIndexSignature = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - return funcSymbol; - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (funcDeclAST.typeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(TypeScript.ASTHelpers.getType(funcDeclAST), context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(TypeScript.ASTHelpers.getType(funcDeclAST), TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (funcDeclAST.parameter) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - this.resolveParameter(funcDeclAST.parameter, context); - context.inTypeCheck = prevInTypeCheck; - } - - if (funcDeclAST.typeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckIndexSignature(funcDeclAST, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveFunctionDeclaration = function (funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcSymbol = funcDecl.getSymbol(); - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - var isConstructor = funcDeclAST.kind() === 143 /* ConstructSignature */; - - if (signature) { - if (signature.isResolved) { - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - return funcSymbol; - } - - if (isConstructor && !signature.inResolution) { - var classAST = this.getEnclosingClassDeclaration(funcDeclAST); - - if (classAST) { - var classDecl = this.semanticInfoChain.getDeclForAST(classAST); - var classSymbol = classDecl.getSymbol(); - - if (!classSymbol.isResolved && !classSymbol.inResolution) { - this.resolveDeclaredSymbol(classSymbol, context); - } - } - } - - var functionTypeSymbol = funcSymbol && funcSymbol.type; - - if (signature.inResolution) { - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - if (!returnTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, TypeScript.DiagnosticCode.Cannot_resolve_return_type_reference)); - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - - if (isConstructor && returnTypeSymbol === this.semanticInfoChain.voidTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructors_cannot_have_a_return_type_of_void)); - } - } - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - } - - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - return funcSymbol; - } - - if (funcSymbol) { - funcSymbol.startResolving(); - } - signature.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - if (parameterList) { - var prevInTypeCheck = context.inTypeCheck; - - context.inTypeCheck = false; - - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - - context.inTypeCheck = prevInTypeCheck; - } - - if (returnTypeAnnotation) { - returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else if (funcDecl.kind !== 2097152 /* ConstructSignature */) { - if (TypeScript.hasFlag(funcDecl.flags, 2048 /* Signature */)) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - var parentDeclFlags = 0 /* None */; - if (TypeScript.hasFlag(funcDecl.kind, 65536 /* Method */) || TypeScript.hasFlag(funcDecl.kind, 32768 /* ConstructorMethod */)) { - var parentDecl = funcDecl.getParentDecl(); - parentDeclFlags = parentDecl.flags; - } - - if (this.compilationSettings.noImplicitAny() && (!TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) || (TypeScript.hasFlag(parentDeclFlags, 8 /* Ambient */) && !TypeScript.hasFlag(funcDecl.flags, 2 /* Private */)))) { - var funcDeclASTName = name; - if (funcDeclASTName) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [funcDeclASTName.text()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } - } else if (funcDecl.kind === 2097152 /* ConstructSignature */) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - - if (!hadError) { - if (funcSymbol) { - funcSymbol.setUnresolved(); - if (funcSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - funcSymbol.type = functionTypeSymbol; - } - } - signature.setResolved(); - } - } - - if (funcSymbol) { - this.resolveOtherDeclarations(funcDeclAST, context); - } - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionDeclaration(funcDeclAST, isStatic, name, typeParameters, parameterList, returnTypeAnnotation, block, context); - } - - return funcSymbol; - }; - - PullTypeResolver.prototype.resolveGetterReturnTypeAnnotation = function (getterFunctionDeclarationAst, enclosingDecl, context) { - if (getterFunctionDeclarationAst && getterFunctionDeclarationAst.typeAnnotation) { - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveSetterArgumentTypeAnnotation = function (setterFunctionDeclarationAst, enclosingDecl, context) { - if (setterFunctionDeclarationAst && setterFunctionDeclarationAst.parameterList && setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorCount() > 0) { - var parameter = setterFunctionDeclarationAst.parameterList.parameters.nonSeparatorAt(0); - return this.resolveTypeReference(TypeScript.ASTHelpers.getType(parameter), context); - } - - return null; - }; - - PullTypeResolver.prototype.resolveAccessorDeclaration = function (funcDeclAst, context) { - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - - if (accessorSymbol.inResolution) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - accessorSymbol.setResolved(); - - return accessorSymbol; - } - - if (accessorSymbol.isResolved) { - if (!accessorSymbol.type) { - accessorSymbol.type = this.semanticInfoChain.anyTypeSymbol; - } - } else { - var getterSymbol = accessorSymbol.getGetter(); - var getterFunctionDeclarationAst = getterSymbol ? getterSymbol.getDeclarations()[0].ast() : null; - var hasGetter = getterSymbol !== null; - - var setterSymbol = accessorSymbol.getSetter(); - var setterFunctionDeclarationAst = setterSymbol ? setterSymbol.getDeclarations()[0].ast() : null; - var hasSetter = setterSymbol !== null; - - var getterAnnotatedType = this.resolveGetterReturnTypeAnnotation(getterFunctionDeclarationAst, functionDeclaration, context); - var getterHasTypeAnnotation = getterAnnotatedType !== null; - - var setterAnnotatedType = this.resolveSetterArgumentTypeAnnotation(setterFunctionDeclarationAst, functionDeclaration, context); - var setterHasTypeAnnotation = setterAnnotatedType !== null; - - accessorSymbol.startResolving(); - - if (hasGetter) { - getterSymbol = this.resolveGetAccessorDeclaration(getterFunctionDeclarationAst, getterFunctionDeclarationAst.parameterList, TypeScript.ASTHelpers.getType(getterFunctionDeclarationAst), getterFunctionDeclarationAst.block, setterAnnotatedType, context); - } - - if (hasSetter) { - setterSymbol = this.resolveSetAccessorDeclaration(setterFunctionDeclarationAst, setterFunctionDeclarationAst.parameterList, context); - } - - if (hasGetter && hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - var getterSig = getterSymbol.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterHasParameters ? setterParameters[0].type : null; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (setterHasTypeAnnotation && !getterHasTypeAnnotation) { - getterSuppliedTypeSymbol = setterSuppliedTypeSymbol; - getterSig.returnType = setterSuppliedTypeSymbol; - } else if ((getterHasTypeAnnotation && !setterHasTypeAnnotation) || (!getterHasTypeAnnotation && !setterHasTypeAnnotation)) { - setterSuppliedTypeSymbol = getterSuppliedTypeSymbol; - - if (setterHasParameters) { - setterParameters[0].type = getterSuppliedTypeSymbol; - } - } - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - accessorSymbol.type = this.getNewErrorTypeSymbol(); - } else { - accessorSymbol.type = getterSuppliedTypeSymbol; - } - } else if (hasSetter) { - var setterSig = setterSymbol.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - var setterHasParameters = setterParameters.length > 0; - - accessorSymbol.type = setterHasParameters ? setterParameters[0].type : this.semanticInfoChain.anyTypeSymbol; - } else { - var getterSig = getterSymbol.type.getCallSignatures()[0]; - accessorSymbol.type = getterSig.returnType; - } - - accessorSymbol.setResolved(); - } - - if (this.canTypeCheckAST(funcDeclAst, context)) { - this.typeCheckAccessorDeclaration(funcDeclAst, context); - } - - return accessorSymbol; - }; - - PullTypeResolver.prototype.typeCheckAccessorDeclaration = function (funcDeclAst, context) { - this.setTypeChecked(funcDeclAst, context); - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDeclAst); - var accessorSymbol = functionDeclaration.getSymbol(); - var getterSymbol = accessorSymbol.getGetter(); - var setterSymbol = accessorSymbol.getSetter(); - - var isGetter = funcDeclAst.kind() === 139 /* GetAccessor */; - if (isGetter) { - var getterFunctionDeclarationAst = funcDeclAst; - context.pushNewContextualType(getterSymbol.type); - this.typeCheckGetAccessorDeclaration(getterFunctionDeclarationAst, context); - context.popAnyContextualType(); - } else { - var setterFunctionDeclarationAst = funcDeclAst; - this.typeCheckSetAccessorDeclaration(setterFunctionDeclarationAst, context); - } - }; - - PullTypeResolver.prototype.resolveGetAccessorDeclaration = function (funcDeclAST, parameters, returnTypeAnnotation, block, setterAnnotatedType, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var getterSymbol = accessorSymbol.getGetter(); - var getterTypeSymbol = getterSymbol.type; - - var signature = getterTypeSymbol.getCallSignatures()[0]; - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return getterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - signature.setResolved(); - - return getterSymbol; - } - - signature.startResolving(); - - if (returnTypeAnnotation) { - var returnTypeSymbol = this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, returnTypeAnnotation, context); - - if (!returnTypeSymbol) { - signature.returnType = this.getNewErrorTypeSymbol(); - - hadError = true; - } else { - signature.returnType = returnTypeSymbol; - } - } else { - if (!setterAnnotatedType) { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, null, signature, false, funcDecl, context); - } else { - signature.returnType = setterAnnotatedType; - } - } - - if (!hadError) { - signature.setResolved(); - } - } - - return getterSymbol; - }; - - PullTypeResolver.prototype.checkIfGetterAndSetterTypeMatch = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - var getter = accessorSymbol.getGetter(); - var setter = accessorSymbol.getSetter(); - - if (getter && setter) { - var getterAST = getter.getDeclarations()[0].ast(); - var setterAST = setter.getDeclarations()[0].ast(); - - if (getterAST.typeAnnotation && PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterAST)) { - var setterSig = setter.type.getCallSignatures()[0]; - var setterParameters = setterSig.parameters; - - var getter = accessorSymbol.getGetter(); - var getterSig = getter.type.getCallSignatures()[0]; - - var setterSuppliedTypeSymbol = setterParameters[0].type; - var getterSuppliedTypeSymbol = getterSig.returnType; - - if (!this.typesAreIdentical(setterSuppliedTypeSymbol, getterSuppliedTypeSymbol, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.get_and_set_accessor_must_have_the_same_type)); - } - } - } - }; - - PullTypeResolver.prototype.typeCheckGetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - this.resolveReturnTypeAnnotationOfFunctionDeclaration(funcDeclAST, TypeScript.ASTHelpers.getType(funcDeclAST), context); - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var enclosingDecl = this.getEnclosingDecl(funcDecl); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - var funcNameAST = funcDeclAST.propertyName; - - if (!hasReturn && !this.containsSingleThrowStatement(funcDeclAST.block)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getters_must_return_a_value)); - } - - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - var setterIsPrivate = TypeScript.hasFlag(setterDecl.flags, 2 /* Private */); - var getterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), TypeScript.ASTHelpers.getType(funcDeclAST), funcDeclAST.block, context); - }; - - PullTypeResolver.hasSetAccessorParameterTypeAnnotation = function (setAccessor) { - return setAccessor.parameterList && setAccessor.parameterList.parameters.nonSeparatorCount() > 0 && setAccessor.parameterList.parameters.nonSeparatorAt(0).typeAnnotation !== null; - }; - - PullTypeResolver.prototype.resolveSetAccessorDeclaration = function (funcDeclAST, parameterList, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - var setterSymbol = accessorSymbol.getSetter(); - var setterTypeSymbol = setterSymbol.type; - - var signature = funcDecl.getSignatureSymbol(); - - var hadError = false; - - if (signature) { - if (signature.isResolved) { - return setterSymbol; - } - - if (signature.inResolution) { - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - signature.setResolved(); - return setterSymbol; - } - - signature.startResolving(); - - if (parameterList) { - for (var i = 0; i < parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(parameterList.parameters.nonSeparatorAt(i), context); - } - } - - signature.returnType = this.semanticInfoChain.voidTypeSymbol; - - if (!hadError) { - signature.setResolved(); - } - } - - return setterSymbol; - }; - - PullTypeResolver.prototype.typeCheckSetAccessorDeclaration = function (funcDeclAST, context) { - var funcDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var accessorSymbol = funcDecl.getSymbol(); - - if (funcDeclAST.parameterList) { - for (var i = 0; i < funcDeclAST.parameterList.parameters.nonSeparatorCount(); i++) { - this.resolveParameter(funcDeclAST.parameterList.parameters.nonSeparatorAt(i), context); - } - } - - this.resolveAST(funcDeclAST.block, false, context); - - this.validateVariableDeclarationGroups(funcDecl, context); - - var hasReturn = (funcDecl.flags & (2048 /* Signature */ | 4194304 /* HasReturnStatement */)) !== 0; - - var getter = accessorSymbol.getGetter(); - - var funcNameAST = funcDeclAST.propertyName; - - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - var getterIsPrivate = TypeScript.hasFlag(getterDecl.flags, 2 /* Private */); - var setterIsPrivate = TypeScript.hasModifier(funcDeclAST.modifiers, 2 /* Private */); - - if (getterIsPrivate !== setterIsPrivate) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcNameAST, TypeScript.DiagnosticCode.Getter_and_setter_accessors_do_not_agree_in_visibility)); - } - - this.checkIfGetterAndSetterTypeMatch(funcDeclAST, context); - } else { - if (this.compilationSettings.noImplicitAny()) { - var setterFunctionDeclarationAst = funcDeclAST; - if (!PullTypeResolver.hasSetAccessorParameterTypeAnnotation(setterFunctionDeclarationAst) && accessorSymbol.type === this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type, [setterFunctionDeclarationAst.propertyName.text()])); - } - } - } - - this.checkFunctionTypePrivacy(funcDeclAST, TypeScript.hasModifier(funcDeclAST.modifiers, 16 /* Static */), null, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), null, funcDeclAST.block, context); - }; - - PullTypeResolver.prototype.resolveList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.childCount(); i < n; i++) { - this.resolveAST(list.childAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveSeparatedList = function (list, context) { - if (this.canTypeCheckAST(list, context)) { - this.setTypeChecked(list, context); - - for (var i = 0, n = list.nonSeparatorCount(); i < n; i++) { - this.resolveAST(list.nonSeparatorAt(i), false, context); - } - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVoidExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.undefinedTypeSymbol; - }; - - PullTypeResolver.prototype.resolveLogicalOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLogicalOperation(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLogicalOperation = function (binex, context) { - this.setTypeChecked(binex, context); - - var leftType = this.resolveAST(binex.left, false, context).type; - var rightType = this.resolveAST(binex.right, false, context).type; - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(leftType, rightType, binex, context, comparisonInfo) && !this.sourceIsAssignableToTarget(rightType, leftType, binex, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(binex); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binex, TypeScript.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, [ - TypeScript.SyntaxFacts.getText(TypeScript.SyntaxFacts.getOperatorTokenFromBinaryExpression(binex.kind())), - leftType.toString(enclosingSymbol), rightType.toString(enclosingSymbol)])); - } - }; - - PullTypeResolver.prototype.resolveLogicalNotExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.operand, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveUnaryArithmeticOperation = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckUnaryArithmeticOperation(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.resolvePostfixUnaryExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckPostfixUnaryExpression(ast, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.isAnyOrNumberOrEnum = function (type) { - return this.isAnyOrEquivalent(type) || type === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(type); - }; - - PullTypeResolver.prototype.typeCheckUnaryArithmeticOperation = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - if (nodeType === 164 /* PlusExpression */ || nodeType == 165 /* NegateExpression */ || nodeType == 166 /* BitwiseNotExpression */) { - return; - } - - TypeScript.Debug.assert(nodeType === 168 /* PreIncrementExpression */ || nodeType === 169 /* PreDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.typeCheckPostfixUnaryExpression = function (unaryExpression, context) { - this.setTypeChecked(unaryExpression, context); - - var nodeType = unaryExpression.kind(); - var expression = this.resolveAST(unaryExpression.operand, false, context); - - TypeScript.Debug.assert(nodeType === 210 /* PostIncrementExpression */ || nodeType === 211 /* PostDecrementExpression */); - - var operandType = expression.type; - if (!this.isAnyOrNumberOrEnum(operandType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_type_of_a_unary_arithmetic_operation_operand_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!this.isReference(unaryExpression.operand, expression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(unaryExpression.operand, TypeScript.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer)); - } - }; - - PullTypeResolver.prototype.resolveBinaryArithmeticExpression = function (binaryExpression, context) { - if (this.canTypeCheckAST(binaryExpression, context)) { - this.typeCheckBinaryArithmeticExpression(binaryExpression, context); - } - - return this.semanticInfoChain.numberTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBinaryArithmeticExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsSymbol = this.resolveAST(binaryExpression.left, false, context); - - var lhsType = lhsSymbol.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol) { - lhsType = rhsType; - } - - if (rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol) { - rhsType = lhsType; - } - - var lhsIsFit = this.isAnyOrNumberOrEnum(lhsType); - var rhsIsFit = this.isAnyOrNumberOrEnum(rhsType); - - if (!rhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (!lhsIsFit) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type)); - } - - if (lhsIsFit && rhsIsFit) { - switch (binaryExpression.kind()) { - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - if (!this.isReference(binaryExpression.left, lhsSymbol)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, rhsType, lhsType, context); - } - } - }; - - PullTypeResolver.prototype.resolveTypeOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.stringTypeSymbol; - }; - - PullTypeResolver.prototype.resolveThrowStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveDeleteExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInstanceOfExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInstanceOfExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInstanceOfExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var enclosingSymbol = this.getEnclosingSymbolForAST(binaryExpression); - var isValidLHS = this.isAnyOrEquivalent(lhsType) || lhsType.isObject() || lhsType.isTypeParameter(); - var isValidRHS = this.isAnyOrEquivalent(rhsType) || this.typeIsAssignableToFunction(rhsType, binaryExpression, context); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type)); - } - }; - - PullTypeResolver.prototype.resolveCommaExpression = function (commaExpression, context) { - if (this.canTypeCheckAST(commaExpression, context)) { - this.setTypeChecked(commaExpression, context); - - this.resolveAST(commaExpression.left, false, context); - } - - return this.resolveAST(commaExpression.right, false, context).type; - }; - - PullTypeResolver.prototype.resolveInExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckInExpression(ast, context); - } - - return this.semanticInfoChain.booleanTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckInExpression = function (binaryExpression, context) { - this.setTypeChecked(binaryExpression, context); - - var lhsType = this.resolveAST(binaryExpression.left, false, context).type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - var isValidLHS = this.isAnyOrEquivalent(lhsType.type) || lhsType.type === this.semanticInfoChain.stringTypeSymbol || lhsType.type === this.semanticInfoChain.numberTypeSymbol; - - var isValidRHS = this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter(); - - if (!isValidLHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number)); - } - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.right, TypeScript.DiagnosticCode.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - }; - - PullTypeResolver.prototype.resolveForStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.variableDeclaration, false, context); - this.resolveAST(ast.initializer, false, context); - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.incrementor, false, context); - this.resolveAST(ast.statement, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveForInStatement = function (forInStatement, context) { - if (this.canTypeCheckAST(forInStatement, context)) { - this.typeCheckForInStatement(forInStatement, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckForInStatement = function (forInStatement, context) { - this.setTypeChecked(forInStatement, context); - - if (forInStatement.variableDeclaration) { - var declaration = forInStatement.variableDeclaration; - - if (declaration.declarators.nonSeparatorCount() === 1) { - var varDecl = declaration.declarators.nonSeparatorAt(0); - - if (varDecl.typeAnnotation) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declaration, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation)); - } - } - } else { - var varSym = this.resolveAST(forInStatement.left, false, context); - var isStringOrNumber = varSym.type === this.semanticInfoChain.stringTypeSymbol || this.isAnyOrEquivalent(varSym.type); - - if (!isStringOrNumber) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.left, TypeScript.DiagnosticCode.Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any)); - } - } - - var rhsType = this.resolveAST(forInStatement.expression, false, context).type; - var isValidRHS = rhsType && (this.isAnyOrEquivalent(rhsType) || rhsType.isObject() || rhsType.isTypeParameter()); - - if (!isValidRHS) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(forInStatement.expression, TypeScript.DiagnosticCode.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter)); - } - - this.resolveAST(forInStatement.statement, false, context); - }; - - PullTypeResolver.prototype.resolveWhileStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWhileStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWhileStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveDoStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckDoStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckDoStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveIfStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckIfStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckIfStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.condition, false, context); - this.resolveAST(ast.statement, false, context); - this.resolveAST(ast.elseClause, false, context); - }; - - PullTypeResolver.prototype.resolveElseClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckElseClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckElseClause = function (ast, context) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.resolveBlock = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.statements, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declaration, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveVariableDeclarationList = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.declarators, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveWithStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckWithStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckWithStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var withStatement = ast; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(withStatement.condition, TypeScript.DiagnosticCode.All_symbols_within_a_with_block_will_be_resolved_to_any)); - }; - - PullTypeResolver.prototype.resolveTryStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckTryStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckTryStatement = function (ast, context) { - this.setTypeChecked(ast, context); - var tryStatement = ast; - - this.resolveAST(tryStatement.block, false, context); - this.resolveAST(tryStatement.catchClause, false, context); - this.resolveAST(tryStatement.finallyClause, false, context); - }; - - PullTypeResolver.prototype.resolveCatchClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckCatchClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckCatchClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - - var catchDecl = this.semanticInfoChain.getDeclForAST(ast); - this.validateVariableDeclarationGroups(catchDecl, context); - }; - - PullTypeResolver.prototype.resolveFinallyClause = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckFinallyClause(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckFinallyClause = function (ast, context) { - this.setTypeChecked(ast, context); - this.resolveAST(ast.block, false, context); - }; - - PullTypeResolver.prototype.getEnclosingFunctionDeclaration = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - - while (enclosingDecl) { - if (enclosingDecl.kind & 1032192 /* SomeFunction */) { - return enclosingDecl; - } - - enclosingDecl = enclosingDecl.getParentDecl(); - } - - return null; - }; - - PullTypeResolver.prototype.resolveReturnExpression = function (expression, enclosingFunction, context) { - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var isContextuallyTyped = false; - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeAnnotationSymbol = this.resolveTypeReference(typeAnnotation, context); - if (returnTypeAnnotationSymbol) { - isContextuallyTyped = true; - context.pushNewContextualType(returnTypeAnnotationSymbol); - } - } else { - var currentContextualType = context.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - isContextuallyTyped = true; - context.propagateContextualType(currentContextualTypeReturnTypeSymbol); - } - } - } - } - - var result = this.resolveAST(expression, isContextuallyTyped, context).type; - if (isContextuallyTyped) { - context.popAnyContextualType(); - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckReturnExpression = function (expression, expressionType, enclosingFunction, context) { - if (enclosingFunction && enclosingFunction.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingFunction.getParentDecl(); - if (classDecl) { - var classSymbol = classDecl.getSymbol(); - this.resolveDeclaredSymbol(classSymbol, context); - - var comparisonInfo = new TypeComparisonInfo(); - var isAssignable = this.sourceIsAssignableToTarget(expressionType, classSymbol.type, expression, context, comparisonInfo); - if (!isAssignable) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class)); - } - } - } - - if (enclosingFunction && enclosingFunction.kind === 524288 /* SetAccessor */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Setters_cannot_return_a_value)); - } - - if (enclosingFunction) { - var enclosingDeclAST = this.getASTForDecl(enclosingFunction); - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation || enclosingFunction.kind === 262144 /* GetAccessor */) { - var signatureSymbol = enclosingFunction.getSignatureSymbol(); - var sigReturnType = signatureSymbol.returnType; - - if (expressionType && sigReturnType) { - var comparisonInfo = new TypeComparisonInfo(); - var upperBound = null; - - this.resolveDeclaredSymbol(expressionType, context); - this.resolveDeclaredSymbol(sigReturnType, context); - - var isAssignable = this.sourceIsAssignableToTarget(expressionType, sigReturnType, expression, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [expressionType.toString(enclosingSymbol), sigReturnType.toString(enclosingSymbol)])); - } - } - } - } - } - }; - - PullTypeResolver.prototype.resolveReturnStatement = function (returnAST, context) { - var enclosingFunction = this.getEnclosingFunctionDeclaration(returnAST); - if (enclosingFunction) { - enclosingFunction.setFlag(4194304 /* HasReturnStatement */); - } - - var returnType = this.getSymbolForAST(returnAST, context); - var canTypeCheckAST = this.canTypeCheckAST(returnAST, context); - if (!returnType || canTypeCheckAST) { - var returnExpr = returnAST.expression; - - var resolvedReturnType = returnExpr === null ? this.semanticInfoChain.voidTypeSymbol : this.resolveReturnExpression(returnExpr, enclosingFunction, context); - - if (!returnType) { - returnType = resolvedReturnType; - this.setSymbolForAST(returnAST, resolvedReturnType, context); - } - - if (returnExpr && canTypeCheckAST) { - this.setTypeChecked(returnExpr, context); - this.typeCheckReturnExpression(returnExpr, resolvedReturnType, enclosingFunction, context); - } - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveSwitchStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSwitchStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckSwitchStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var expressionType = this.resolveAST(ast.expression, false, context).type; - - for (var i = 0, n = ast.switchClauses.childCount(); i < n; i++) { - var switchClause = ast.switchClauses.childAt(i); - if (switchClause.kind() === 233 /* CaseSwitchClause */) { - var caseSwitchClause = switchClause; - - var caseClauseExpressionType = this.resolveAST(caseSwitchClause.expression, false, context).type; - this.resolveAST(caseSwitchClause.statements, false, context); - - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(expressionType, caseClauseExpressionType, caseSwitchClause.expression, context, comparisonInfo) && !this.sourceIsAssignableToTarget(caseClauseExpressionType, expressionType, caseSwitchClause.expression, context, comparisonInfo)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(caseSwitchClause.expression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(caseSwitchClause.expression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [caseClauseExpressionType.toString(enclosingSymbol), expressionType.toString(enclosingSymbol)])); - } - } - } else { - var defaultSwitchClause = switchClause; - this.resolveAST(defaultSwitchClause.statements, false, context); - } - } - }; - - PullTypeResolver.prototype.resolveLabeledStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckLabeledStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckLabeledStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - var labelIdentifier = ast.identifier.valueText(); - - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { - return s.identifier.valueText() === labelIdentifier; - }); - if (matchingLabel) { - context.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(ast.identifier, labelIdentifier, matchingLabel)); - } - - this.resolveAST(ast.statement, false, context); - }; - - PullTypeResolver.prototype.labelIsOnContinuableConstruct = function (statement) { - switch (statement.kind()) { - case 160 /* LabeledStatement */: - return this.labelIsOnContinuableConstruct(statement.statement); - - case 158 /* WhileStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 161 /* DoStatement */: - return true; - - default: - return false; - } - }; - - PullTypeResolver.prototype.resolveContinueStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckContinueStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.isIterationStatement = function (ast) { - switch (ast.kind()) { - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.isAnyFunctionExpressionOrDeclaration = function (ast) { - switch (ast.kind()) { - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 241 /* FunctionPropertyAssignment */: - case 137 /* ConstructorDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return true; - } - - return false; - }; - - PullTypeResolver.prototype.inSwitchStatement = function (ast) { - while (ast) { - if (ast.kind() === 151 /* SwitchStatement */) { - return true; - } - - if (this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inIterationStatement = function (ast, crossFunctions) { - while (ast) { - if (this.isIterationStatement(ast)) { - return true; - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingLabels = function (ast, breakable, crossFunctions) { - var result = []; - - ast = ast.parent; - while (ast) { - if (ast.kind() === 160 /* LabeledStatement */) { - var labeledStatement = ast; - if (breakable) { - result.push(labeledStatement); - } else { - if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) { - result.push(labeledStatement); - } - } - } - - if (!crossFunctions && this.isAnyFunctionExpressionOrDeclaration(ast)) { - break; - } - - ast = ast.parent; - } - - return result; - }; - - PullTypeResolver.prototype.typeCheckContinueStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (!this.inIterationStatement(ast, false)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement)); - } - } else if (ast.identifier) { - var continuableLabels = this.getEnclosingLabels(ast, false, false); - - if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var continuableLabels = this.getEnclosingLabels(ast, false, true); - - if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } - }; - - PullTypeResolver.prototype.resolveBreakStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckBreakStatement(ast, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.typeCheckBreakStatement = function (ast, context) { - this.setTypeChecked(ast, context); - - if (ast.identifier) { - var breakableLabels = this.getEnclosingLabels(ast, true, false); - - if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - var breakableLabels = this.getEnclosingLabels(ast, true, true); - if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { - return s.identifier.valueText() === ast.identifier.valueText(); - })) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_not_found)); - } - } - } else if (!this.inIterationStatement(ast, false) && !this.inSwitchStatement(ast)) { - if (this.inIterationStatement(ast, true)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement)); - } - } - }; - - PullTypeResolver.prototype.resolveAST = function (ast, isContextuallyTyped, context) { - if (!ast) { - return; - } - - var symbol = this.getSymbolForAST(ast, context); - if (symbol && symbol.isResolved) { - this.typeCheckAST(ast, isContextuallyTyped, context); - return symbol; - } - - if (ast.isExpression() && !isTypesOnlyLocation(ast)) { - return this.resolveExpressionAST(ast, isContextuallyTyped, context); - } - - var nodeType = ast.kind(); - - switch (nodeType) { - case 124 /* ArrayType */: - case 126 /* GenericType */: - case 122 /* ObjectType */: - case 127 /* TypeQuery */: - case 125 /* ConstructorType */: - case 123 /* FunctionType */: - return this.resolveTypeReference(ast, context); - - case 1 /* List */: - return this.resolveList(ast, context); - - case 2 /* SeparatedList */: - return this.resolveSeparatedList(ast, context); - - case 120 /* SourceUnit */: - return this.resolveSourceUnit(ast, context); - - case 132 /* EnumDeclaration */: - return this.resolveEnumDeclaration(ast, context); - - case 130 /* ModuleDeclaration */: - return this.resolveModuleDeclaration(ast, context); - - case 128 /* InterfaceDeclaration */: - return this.resolveInterfaceDeclaration(ast, context); - - case 131 /* ClassDeclaration */: - return this.resolveClassDeclaration(ast, context); - - case 224 /* VariableDeclaration */: - return this.resolveVariableDeclarationList(ast, context); - - case 136 /* MemberVariableDeclaration */: - return this.resolveMemberVariableDeclaration(ast, context); - - case 225 /* VariableDeclarator */: - return this.resolveVariableDeclarator(ast, context); - - case 141 /* PropertySignature */: - return this.resolvePropertySignature(ast, context); - - case 227 /* ParameterList */: - return this.resolveParameterList(ast, context); - - case 242 /* Parameter */: - return this.resolveParameter(ast, context); - - case 243 /* EnumElement */: - return this.resolveEnumElement(ast, context); - - case 232 /* EqualsValueClause */: - return this.resolveEqualsValueClause(ast, isContextuallyTyped, context); - - case 238 /* TypeParameter */: - return this.resolveTypeParameterDeclaration(ast, context); - - case 239 /* Constraint */: - return this.resolveConstraint(ast, context); - - case 133 /* ImportDeclaration */: - return this.resolveImportDeclaration(ast, context); - - case 240 /* SimplePropertyAssignment */: - return this.resolveSimplePropertyAssignment(ast, isContextuallyTyped, context); - - case 241 /* FunctionPropertyAssignment */: - return this.resolveFunctionPropertyAssignment(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - TypeScript.Debug.assert(isTypesOnlyLocation(ast)); - return this.resolveTypeNameExpression(ast, context); - - case 121 /* QualifiedName */: - return this.resolveQualifiedName(ast, context); - - case 137 /* ConstructorDeclaration */: - return this.resolveConstructorDeclaration(ast, context); - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - return this.resolveAccessorDeclaration(ast, context); - - case 138 /* IndexMemberDeclaration */: - return this.resolveIndexMemberDeclaration(ast, context); - - case 144 /* IndexSignature */: - return this.resolveIndexSignature(ast, context); - - case 135 /* MemberFunctionDeclaration */: - return this.resolveMemberFunctionDeclaration(ast, context); - - case 142 /* CallSignature */: - return this.resolveCallSignature(ast, context); - - case 143 /* ConstructSignature */: - return this.resolveConstructSignature(ast, context); - - case 145 /* MethodSignature */: - return this.resolveMethodSignature(ast, context); - - case 129 /* FunctionDeclaration */: - return this.resolveAnyFunctionDeclaration(ast, context); - - case 244 /* TypeAnnotation */: - return this.resolveTypeAnnotation(ast, context); - - case 134 /* ExportAssignment */: - return this.resolveExportAssignmentStatement(ast, context); - - case 157 /* ThrowStatement */: - return this.resolveThrowStatement(ast, context); - - case 149 /* ExpressionStatement */: - return this.resolveExpressionStatement(ast, context); - - case 154 /* ForStatement */: - return this.resolveForStatement(ast, context); - - case 155 /* ForInStatement */: - return this.resolveForInStatement(ast, context); - - case 158 /* WhileStatement */: - return this.resolveWhileStatement(ast, context); - - case 161 /* DoStatement */: - return this.resolveDoStatement(ast, context); - - case 147 /* IfStatement */: - return this.resolveIfStatement(ast, context); - - case 235 /* ElseClause */: - return this.resolveElseClause(ast, context); - - case 146 /* Block */: - return this.resolveBlock(ast, context); - - case 148 /* VariableStatement */: - return this.resolveVariableStatement(ast, context); - - case 163 /* WithStatement */: - return this.resolveWithStatement(ast, context); - - case 159 /* TryStatement */: - return this.resolveTryStatement(ast, context); - - case 236 /* CatchClause */: - return this.resolveCatchClause(ast, context); - - case 237 /* FinallyClause */: - return this.resolveFinallyClause(ast, context); - - case 150 /* ReturnStatement */: - return this.resolveReturnStatement(ast, context); - - case 151 /* SwitchStatement */: - return this.resolveSwitchStatement(ast, context); - - case 153 /* ContinueStatement */: - return this.resolveContinueStatement(ast, context); - - case 152 /* BreakStatement */: - return this.resolveBreakStatement(ast, context); - - case 160 /* LabeledStatement */: - return this.resolveLabeledStatement(ast, context); - } - - return this.semanticInfoChain.anyTypeSymbol; - }; - - PullTypeResolver.prototype.resolveExpressionAST = function (ast, isContextuallyOrInferentiallyTyped, context) { - var expressionSymbol = this.resolveExpressionWorker(ast, isContextuallyOrInferentiallyTyped, context); - - if (isContextuallyOrInferentiallyTyped && context.isInferentiallyTyping()) { - return this.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference(expressionSymbol, context); - } else { - return expressionSymbol; - } - }; - - PullTypeResolver.prototype.resolveExpressionWorker = function (ast, isContextuallyTyped, context) { - switch (ast.kind()) { - case 215 /* ObjectLiteralExpression */: - return this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - - case 11 /* IdentifierName */: - return this.resolveNameExpression(ast, context); - - case 212 /* MemberAccessExpression */: - return this.resolveMemberAccessExpression(ast, context); - - case 222 /* FunctionExpression */: - return this.resolveFunctionExpression(ast, isContextuallyTyped, context); - - case 219 /* SimpleArrowFunctionExpression */: - return this.resolveSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.resolveParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - - case 214 /* ArrayLiteralExpression */: - return this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - - case 35 /* ThisKeyword */: - return this.resolveThisExpression(ast, context); - - case 50 /* SuperKeyword */: - return this.resolveSuperExpression(ast, context); - - case 213 /* InvocationExpression */: - return this.resolveInvocationExpression(ast, context); - - case 216 /* ObjectCreationExpression */: - return this.resolveObjectCreationExpression(ast, context); - - case 220 /* CastExpression */: - return this.resolveCastExpression(ast, context); - - case 13 /* NumericLiteral */: - return this.semanticInfoChain.numberTypeSymbol; - - case 14 /* StringLiteral */: - return this.semanticInfoChain.stringTypeSymbol; - - case 32 /* NullKeyword */: - return this.semanticInfoChain.nullTypeSymbol; - - case 37 /* TrueKeyword */: - case 24 /* FalseKeyword */: - return this.semanticInfoChain.booleanTypeSymbol; - - case 172 /* VoidExpression */: - return this.resolveVoidExpression(ast, context); - - case 174 /* AssignmentExpression */: - return this.resolveAssignmentExpression(ast, context); - - case 167 /* LogicalNotExpression */: - return this.resolveLogicalNotExpression(ast, context); - - case 193 /* NotEqualsWithTypeConversionExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 197 /* GreaterThanExpression */: - return this.resolveLogicalOperation(ast, context); - - case 208 /* AddExpression */: - case 175 /* AddAssignmentExpression */: - return this.resolveBinaryAdditionOperation(ast, context); - - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - case 166 /* BitwiseNotExpression */: - case 168 /* PreIncrementExpression */: - case 169 /* PreDecrementExpression */: - return this.resolveUnaryArithmeticOperation(ast, context); - - case 210 /* PostIncrementExpression */: - case 211 /* PostDecrementExpression */: - return this.resolvePostfixUnaryExpression(ast, context); - - case 209 /* SubtractExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 189 /* BitwiseOrExpression */: - case 191 /* BitwiseAndExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - return this.resolveBinaryArithmeticExpression(ast, context); - - case 221 /* ElementAccessExpression */: - return this.resolveElementAccessExpression(ast, context); - - case 187 /* LogicalOrExpression */: - return this.resolveLogicalOrExpression(ast, isContextuallyTyped, context); - - case 188 /* LogicalAndExpression */: - return this.resolveLogicalAndExpression(ast, context); - - case 171 /* TypeOfExpression */: - return this.resolveTypeOfExpression(ast, context); - - case 170 /* DeleteExpression */: - return this.resolveDeleteExpression(ast, context); - - case 186 /* ConditionalExpression */: - return this.resolveConditionalExpression(ast, isContextuallyTyped, context); - - case 12 /* RegularExpressionLiteral */: - return this.resolveRegularExpressionLiteral(); - - case 217 /* ParenthesizedExpression */: - return this.resolveParenthesizedExpression(ast, context); - - case 200 /* InstanceOfExpression */: - return this.resolveInstanceOfExpression(ast, context); - - case 173 /* CommaExpression */: - return this.resolveCommaExpression(ast, context); - - case 201 /* InExpression */: - return this.resolveInExpression(ast, context); - - case 223 /* OmittedExpression */: - return this.semanticInfoChain.undefinedTypeSymbol; - } - - TypeScript.Debug.fail("resolveExpressionASTWorker: Missing expression kind: " + TypeScript.SyntaxKind[ast.kind()]); - }; - - PullTypeResolver.prototype.typeCheckAST = function (ast, isContextuallyTyped, context) { - if (!this.canTypeCheckAST(ast, context)) { - return; - } - - var nodeType = ast.kind(); - switch (nodeType) { - case 120 /* SourceUnit */: - this.typeCheckSourceUnit(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.typeCheckEnumDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.typeCheckModuleDeclaration(ast, context); - return; - - case 128 /* InterfaceDeclaration */: - this.typeCheckInterfaceDeclaration(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.typeCheckClassDeclaration(ast, context); - return; - - case 243 /* EnumElement */: - this.typeCheckEnumElement(ast, context); - return; - - case 136 /* MemberVariableDeclaration */: - this.typeCheckMemberVariableDeclaration(ast, context); - return; - - case 225 /* VariableDeclarator */: - this.typeCheckVariableDeclarator(ast, context); - return; - - case 141 /* PropertySignature */: - this.typeCheckPropertySignature(ast, context); - return; - - case 242 /* Parameter */: - this.typeCheckParameter(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.typeCheckImportDeclaration(ast, context); - return; - - case 215 /* ObjectLiteralExpression */: - this.resolveObjectLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 241 /* FunctionPropertyAssignment */: - this.typeCheckFunctionPropertyAssignment(ast, isContextuallyTyped, context); - return; - - case 11 /* IdentifierName */: - if (isTypesOnlyLocation(ast)) { - this.resolveTypeNameExpression(ast, context); - } else { - this.resolveNameExpression(ast, context); - } - return; - - case 212 /* MemberAccessExpression */: - this.resolveMemberAccessExpression(ast, context); - return; - - case 121 /* QualifiedName */: - this.resolveQualifiedName(ast, context); - return; - - case 222 /* FunctionExpression */: - this.typeCheckFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 137 /* ConstructorDeclaration */: - this.typeCheckConstructorDeclaration(ast, context); - return; - - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - this.typeCheckAccessorDeclaration(ast, context); - return; - - case 135 /* MemberFunctionDeclaration */: - this.typeCheckMemberFunctionDeclaration(ast, context); - return; - - case 145 /* MethodSignature */: - this.typeCheckMethodSignature(ast, context); - return; - - case 144 /* IndexSignature */: - this.typeCheckIndexSignature(ast, context); - break; - - case 142 /* CallSignature */: - this.typeCheckCallSignature(ast, context); - return; - - case 143 /* ConstructSignature */: - this.typeCheckConstructSignature(ast, context); - return; - - case 129 /* FunctionDeclaration */: { - var funcDecl = ast; - this.typeCheckAnyFunctionDeclaration(funcDecl, TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */), funcDecl.identifier, funcDecl.callSignature.typeParameterList, funcDecl.callSignature.parameterList, TypeScript.ASTHelpers.getType(funcDecl), funcDecl.block, context); - return; - } - - case 219 /* SimpleArrowFunctionExpression */: - this.typeCheckSimpleArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 218 /* ParenthesizedArrowFunctionExpression */: - this.typeCheckParenthesizedArrowFunctionExpression(ast, isContextuallyTyped, context); - return; - - case 214 /* ArrayLiteralExpression */: - this.resolveArrayLiteralExpression(ast, isContextuallyTyped, context); - return; - - case 213 /* InvocationExpression */: - this.typeCheckInvocationExpression(ast, context); - return; - - case 216 /* ObjectCreationExpression */: - this.typeCheckObjectCreationExpression(ast, context); - return; - - case 150 /* ReturnStatement */: - this.resolveReturnStatement(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Failure nodeType: " + TypeScript.SyntaxKind[ast.kind()] + ". Implement typeCheck when symbol is set for the ast as part of resolution."); - } - }; - - PullTypeResolver.prototype.processPostTypeCheckWorkItems = function (context) { - while (this.postTypeCheckWorkitems.length) { - var ast = this.postTypeCheckWorkitems.pop(); - this.postTypeCheck(ast, context); - } - }; - - PullTypeResolver.prototype.postTypeCheck = function (ast, context) { - var nodeType = ast.kind(); - - switch (nodeType) { - case 242 /* Parameter */: - case 225 /* VariableDeclarator */: - this.postTypeCheckVariableDeclaratorOrParameter(ast, context); - return; - - case 131 /* ClassDeclaration */: - this.postTypeCheckClassDeclaration(ast, context); - return; - - case 129 /* FunctionDeclaration */: - this.postTypeCheckFunctionDeclaration(ast, context); - return; - - case 130 /* ModuleDeclaration */: - this.postTypeCheckModuleDeclaration(ast, context); - return; - - case 132 /* EnumDeclaration */: - this.postTypeCheckEnumDeclaration(ast, context); - return; - - case 133 /* ImportDeclaration */: - this.postTypeCheckImportDeclaration(ast, context); - return; - - case 11 /* IdentifierName */: - this.postTypeCheckNameExpression(ast, context); - return; - - default: - TypeScript.Debug.assert(false, "Implement postTypeCheck clause to handle the postTypeCheck work, nodeType: " + TypeScript.SyntaxKind[ast.kind()]); - } - }; - - PullTypeResolver.prototype.resolveRegularExpressionLiteral = function () { - if (this.cachedRegExpInterfaceType()) { - return this.cachedRegExpInterfaceType(); - } else { - return this.semanticInfoChain.anyTypeSymbol; - } - }; - - PullTypeResolver.prototype.postTypeCheckNameExpression = function (nameAST, context) { - this.checkThisCaptureVariableCollides(nameAST, false, context); - }; - - PullTypeResolver.prototype.typeCheckNameExpression = function (nameAST, context) { - this.setTypeChecked(nameAST, context); - this.checkNameForCompilerGeneratedDeclarationCollision(nameAST, false, nameAST, context); - }; - - PullTypeResolver.prototype.resolveNameExpression = function (nameAST, context) { - var nameSymbol = this.getSymbolForAST(nameAST, context); - var foundCached = nameSymbol !== null; - - if (!foundCached || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.typeCheckNameExpression(nameAST, context); - } - nameSymbol = this.computeNameExpression(nameAST, context); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - if (nameSymbol && (nameSymbol.type !== this.semanticInfoChain.anyTypeSymbol || nameSymbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(nameAST, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.isInEnumDecl = function (decl) { - if (decl.kind & 64 /* Enum */) { - return true; - } - - var declPath = decl.getParentPath(); - - var disallowedKinds = 164 /* SomeContainer */ | 58728795 /* SomeType */; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - - if (decl.kind & 64 /* Enum */) { - return true; - } - - if (decl.kind & disallowedKinds) { - return false; - } - } - return false; - }; - - PullTypeResolver.prototype.getSomeInnermostFunctionScopeDecl = function (declPath) { - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - if (decl.kind & 1032192 /* SomeFunction */) { - return decl; - } - } - - return null; - }; - - PullTypeResolver.prototype.isFromFunctionScope = function (nameSymbol, functionScopeDecl) { - var _this = this; - return TypeScript.ArrayUtilities.any(nameSymbol.getDeclarations(), function (nameSymbolDecl) { - return _this.getSomeInnermostFunctionScopeDecl(nameSymbolDecl.getParentPath()) === functionScopeDecl; - }); - }; - - PullTypeResolver.prototype.findConstructorDeclOfEnclosingType = function (decl) { - var current = decl; - while (current) { - if (TypeScript.hasFlag(current.kind, 4096 /* Property */)) { - var parentDecl = current.getParentDecl(); - if (TypeScript.hasFlag(parentDecl.kind, 8 /* Class */)) { - return TypeScript.ArrayUtilities.lastOrDefault(parentDecl.getChildDecls(), function (decl) { - return TypeScript.hasFlag(decl.kind, 32768 /* ConstructorMethod */); - }); - } - } - - if (TypeScript.hasFlag(current.kind, 164 /* SomeContainer */)) { - return null; - } - - current = current.getParentDecl(); - } - return null; - }; - - PullTypeResolver.prototype.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable = function (nameAST, nameSymbol, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return false; - } - - var memberVariableDeclarationAST = TypeScript.ASTHelpers.getEnclosingMemberVariableDeclaration(nameAST); - if (memberVariableDeclarationAST) { - var memberVariableDecl = this.semanticInfoChain.getDeclForAST(memberVariableDeclarationAST); - if (!TypeScript.hasFlag(memberVariableDecl.flags, 16 /* Static */)) { - var constructorDecl = this.findConstructorDeclOfEnclosingType(memberVariableDecl); - - if (constructorDecl) { - var childDecls = constructorDecl.searchChildDecls(id, 68147712 /* SomeValue */); - if (childDecls.length) { - if (TypeScript.PullHelpers.isSymbolDeclaredInScopeChain(nameSymbol, constructorDecl.getSymbol().getContainer())) { - var memberVariableSymbol = memberVariableDecl.getSymbol(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, [memberVariableSymbol.getScopedName(constructorDecl.getSymbol()), nameAST.text()])); - return true; - } - } - } - } - } - return false; - }; - - PullTypeResolver.prototype.computeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var nameSymbol = null; - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - if (TypeScript.hasFlag(enclosingDecl.flags, 8388608 /* PropertyParameter */)) { - var valueDecl = enclosingDecl.getValueDecl(); - if (valueDecl && TypeScript.hasFlag(valueDecl.kind, 2048 /* Parameter */)) { - enclosingDecl = valueDecl; - } - } - - var isDeclarationASTOrDeclarationNameAST = TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(nameAST); - if (isDeclarationASTOrDeclarationNameAST) { - nameSymbol = this.semanticInfoChain.getDeclForAST(nameAST.parent).getSymbol(); - } - - var declPath = enclosingDecl.getParentPath(); - - if (!nameSymbol) { - var searchKind = 68147712 /* SomeValue */; - - if (!this.isInEnumDecl(enclosingDecl)) { - searchKind = searchKind & ~(67108864 /* EnumMember */); - } - - var nameSymbol = this.getSymbolFromDeclPath(id, declPath, searchKind); - } - - if (id === "arguments") { - var functionScopeDecl = this.getSomeInnermostFunctionScopeDecl(declPath); - if (functionScopeDecl) { - if (!nameSymbol || !this.isFromFunctionScope(nameSymbol, functionScopeDecl)) { - nameSymbol = this.cachedFunctionArgumentsSymbol(); - this.resolveDeclaredSymbol(this.cachedIArgumentsInterfaceType(), context); - } - } - } - - var aliasSymbol = null; - if (nameSymbol && nameSymbol.isAlias() && !isDeclarationASTOrDeclarationNameAST) { - aliasSymbol = nameSymbol; - if (!this.inTypeQuery(nameAST)) { - aliasSymbol.setIsUsedAsValue(); - } - - this.resolveDeclaredSymbol(nameSymbol, context); - - this.resolveDeclaredSymbol(aliasSymbol.assignedValue(), context); - this.resolveDeclaredSymbol(aliasSymbol.assignedContainer(), context); - - nameSymbol = aliasSymbol.getExportAssignedValueSymbol(); - if (!nameSymbol) { - aliasSymbol = null; - } - } - - if (!nameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (this.checkNameAsPartOfInitializerExpressionForInstanceMemberVariable(nameAST, nameSymbol, context)) { - return this.getNewErrorTypeSymbol(id); - } - - var nameDeclaration = nameSymbol.getDeclarations()[0]; - var nameParentDecl = nameDeclaration.getParentDecl(); - if (nameParentDecl && (nameParentDecl.kind & 1032192 /* SomeFunction */) && (nameParentDecl.flags & 33554432 /* HasDefaultArgs */)) { - var enclosingFunctionAST = this.semanticInfoChain.getASTForDecl(nameParentDecl); - var currentParameterIndex = this.getCurrentParameterIndexForFunction(nameAST, enclosingFunctionAST); - - var parameterList = TypeScript.ASTHelpers.getParameterList(enclosingFunctionAST); - - if (currentParameterIndex >= 0) { - var matchingParameter; - if (parameterList) { - for (var i = 0; i <= currentParameterIndex; i++) { - var candidateParameter = parameterList.parameters.nonSeparatorAt(i); - if (candidateParameter && candidateParameter.identifier.valueText() === id) { - matchingParameter = candidateParameter; - break; - } - } - } - - if (!matchingParameter) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text(), nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } else if (matchingParameter === TypeScript.ASTHelpers.getEnclosingParameterForInitializer(nameAST)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Parameter_0_cannot_be_referenced_in_its_initializer, [parameterList.parameters.nonSeparatorAt(currentParameterIndex).identifier.text()])); - return this.getNewErrorTypeSymbol(id); - } - } - } - - if (aliasSymbol) { - this.semanticInfoChain.setAliasSymbolForAST(nameAST, aliasSymbol); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.getCurrentParameterIndexForFunction = function (parameter, funcDecl) { - var parameterList = TypeScript.ASTHelpers.getParameterList(funcDecl); - if (parameterList) { - while (parameter && parameter.parent) { - if (parameter.parent.parent === parameterList) { - return parameterList.parameters.nonSeparatorIndexOf(parameter); - } - - parameter = parameter.parent; - } - } - - return -1; - }; - - PullTypeResolver.prototype.resolveMemberAccessExpression = function (dottedNameAST, context) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.expression, dottedNameAST.name, context); - }; - - PullTypeResolver.prototype.resolveDottedNameExpression = function (dottedNameAST, expression, name, context) { - var symbol = this.getSymbolForAST(dottedNameAST, context); - var foundCached = symbol !== null; - - if (!foundCached || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheckDottedNameAST = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheckDottedNameAST) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeDottedNameExpression(expression, name, context, canTypeCheckDottedNameAST); - } - - this.resolveDeclaredSymbol(symbol, context); - - if (symbol && (symbol.type !== this.semanticInfoChain.anyTypeSymbol || symbol.anyDeclHasFlag(16777216 /* IsAnnotatedWithAny */ | 1 /* Exported */))) { - this.setSymbolForAST(dottedNameAST, symbol, context); - this.setSymbolForAST(name, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeDottedNameExpression = function (expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhs = this.resolveAST(expression, false, context); - return this.computeDottedNameExpressionFromLHS(lhs, expression, name, context, checkSuperPrivateAndStaticAccess); - }; - - PullTypeResolver.prototype.computeDottedNameExpressionFromLHS = function (lhs, expression, name, context, checkSuperPrivateAndStaticAccess) { - var rhsName = name.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var lhsType = lhs.type; - - if (lhs.isAlias()) { - var lhsAlias = lhs; - if (!this.inTypeQuery(expression)) { - lhsAlias.setIsUsedAsValue(); - } - lhsType = lhsAlias.getExportAssignedTypeSymbol(); - } - - if (lhsType.isAlias()) { - lhsType = lhsType.getExportAssignedTypeSymbol(); - } - - if (!lhsType) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Could_not_find_enclosing_symbol_for_dotted_name_0, [name.text()])); - return this.getNewErrorTypeSymbol(); - } - - if (!lhsType.isResolved) { - var potentiallySpecializedType = this.resolveDeclaredSymbol(lhsType, context); - - if (potentiallySpecializedType !== lhsType) { - if (!lhs.isType()) { - context.setTypeInContext(lhs, potentiallySpecializedType); - } - - lhsType = potentiallySpecializedType; - } - } - - if (lhsType.isContainer() && !lhsType.isAlias() && !lhsType.isEnum()) { - var instanceSymbol = lhsType.getInstanceSymbol(); - - if (instanceSymbol) { - lhsType = instanceSymbol.type; - } - } - - var originalLhsTypeForErrorReporting = lhsType; - - lhsType = this.getApparentType(lhsType).widenedType(this, expression, context); - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var nameSymbol = this._getNamedPropertySymbolOfAugmentedType(rhsName, lhsType); - - if (!nameSymbol) { - if (lhsType.kind === 32 /* DynamicModule */) { - var container = lhsType; - var associatedInstance = container.getInstanceSymbol(); - - if (associatedInstance) { - var instanceType = associatedInstance.type; - - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, instanceType); - } - } else { - var associatedType = lhsType.getAssociatedContainerType(); - - if (associatedType && !associatedType.isClass()) { - nameSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, associatedType); - } - } - - if (!nameSymbol) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [name.text(), originalLhsTypeForErrorReporting.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - } - - if (checkSuperPrivateAndStaticAccess) { - this.checkForSuperMemberAccess(expression, name, nameSymbol, context) || this.checkForPrivateMemberAccess(name, lhsType, nameSymbol, context); - } - - return nameSymbol; - }; - - PullTypeResolver.prototype.resolveTypeNameExpression = function (nameAST, context) { - var typeNameSymbol = this.getSymbolForAST(nameAST, context); - - if (!typeNameSymbol || !typeNameSymbol.isType() || this.canTypeCheckAST(nameAST, context)) { - if (this.canTypeCheckAST(nameAST, context)) { - this.setTypeChecked(nameAST, context); - } - typeNameSymbol = this.computeTypeNameExpression(nameAST, context); - this.setSymbolForAST(nameAST, typeNameSymbol, context); - } - - this.resolveDeclaredSymbol(typeNameSymbol, context); - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.computeTypeNameExpression = function (nameAST, context) { - var id = nameAST.valueText(); - if (id.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(nameAST); - - var declPath = enclosingDecl.getParentPath(); - - var onLeftOfDot = this.isLeftSideOfQualifiedName(nameAST); - - var kindToCheckFirst = onLeftOfDot ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - var kindToCheckSecond = onLeftOfDot ? 58728795 /* SomeType */ : 164 /* SomeContainer */; - - var typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckFirst); - - if (!typeNameSymbol) { - typeNameSymbol = this.getSymbolFromDeclPath(id, declPath, kindToCheckSecond); - } - - if (!typeNameSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Could_not_find_symbol_0, [nameAST.text()])); - return this.getNewErrorTypeSymbol(id); - } - - var typeNameSymbolAlias = null; - if (typeNameSymbol.isAlias()) { - typeNameSymbolAlias = typeNameSymbol; - this.resolveDeclaredSymbol(typeNameSymbol, context); - - var aliasedType = typeNameSymbolAlias.getExportAssignedTypeSymbol(); - - this.resolveDeclaredSymbol(aliasedType, context); - } - - if (typeNameSymbol.isTypeParameter()) { - if (this.isInStaticMemberContext(enclosingDecl)) { - var parentDecl = typeNameSymbol.getDeclarations()[0].getParentDecl(); - - if (parentDecl.kind === 8 /* Class */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(nameAST, TypeScript.DiagnosticCode.Static_members_cannot_reference_class_type_parameters)); - return this.getNewErrorTypeSymbol(); - } - } - } - - if (!typeNameSymbol.isGeneric() && (typeNameSymbol.isClass() || typeNameSymbol.isInterface())) { - typeNameSymbol = TypeScript.PullTypeReferenceSymbol.createTypeReference(typeNameSymbol); - } - - return typeNameSymbol; - }; - - PullTypeResolver.prototype.isInStaticMemberContext = function (decl) { - while (decl) { - if (TypeScript.hasFlag(decl.kind, 1032192 /* SomeFunction */ | 4096 /* Property */) && TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - return true; - } - - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - return false; - } - - decl = decl.getParentDecl(); - } - - return false; - }; - - PullTypeResolver.prototype.isLeftSideOfQualifiedName = function (ast) { - return ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.left === ast; - }; - - PullTypeResolver.prototype.resolveGenericTypeReference = function (genericTypeAST, context) { - var _this = this; - var genericTypeSymbol = this.resolveAST(genericTypeAST.name, false, context).type; - - if (genericTypeSymbol.isError()) { - return genericTypeSymbol; - } - - if (!genericTypeSymbol.inResolution && !genericTypeSymbol.isResolved) { - this.resolveDeclaredSymbol(genericTypeSymbol, context); - } - - if (genericTypeSymbol.isAlias()) { - if (this.inClassExtendsHeritageClause(genericTypeAST) && !this.inTypeArgumentList(genericTypeAST)) { - genericTypeSymbol.setIsUsedAsValue(); - } - genericTypeSymbol = genericTypeSymbol.getExportAssignedTypeSymbol(); - } - - var typeParameters = genericTypeSymbol.getTypeParameters(); - if (typeParameters.length === 0) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_have_type_parameters, [genericTypeSymbol.toString()])); - return this.getNewErrorTypeSymbol(); - } - - var typeArgs = []; - - if (genericTypeAST.typeArgumentList && genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < genericTypeAST.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - typeArgs[i] = this.resolveTypeReference(genericTypeAST.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - - if (typeArgs[i].isError()) { - typeArgs[i] = this.semanticInfoChain.anyTypeSymbol; - } - } - } - - if (typeArgs.length && typeArgs.length !== typeParameters.length) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Generic_type_0_requires_1_type_argument_s, [genericTypeSymbol.toString(), genericTypeSymbol.getTypeParameters().length])); - return this.getNewErrorTypeSymbol(); - } - - if (!genericTypeSymbol.isResolved) { - var typeDecls = genericTypeSymbol.getDeclarations(); - var childDecls = null; - - for (var i = 0; i < typeDecls.length; i++) { - childDecls = typeDecls[i].getChildDecls(); - - for (var j = 0; j < childDecls.length; j++) { - childDecls[j].ensureSymbolIsBound(); - } - } - } - - var specializedSymbol = this.createInstantiatedType(genericTypeSymbol, typeArgs); - - var upperBound = null; - - typeParameters = specializedSymbol.getTypeParameters(); - - var typeConstraintSubstitutionMap = []; - - var instantiatedSubstitutionMap = specializedSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < typeParameters.length; i++) { - typeConstraintSubstitutionMap[typeParameters[i].pullSymbolID] = typeParameters[i]; - } - - for (var id in instantiatedSubstitutionMap) { - typeConstraintSubstitutionMap[id] = instantiatedSubstitutionMap[id]; - } - - for (var iArg = 0; (iArg < typeArgs.length) && (iArg < typeParameters.length); iArg++) { - var typeArg = typeArgs[iArg]; - var typeParameter = typeParameters[iArg]; - var typeConstraint = typeParameter.getConstraint(); - - typeConstraintSubstitutionMap[typeParameter.pullSymbolID] = typeArg; - - if (typeConstraint) { - if (typeConstraint.isTypeParameter()) { - for (var j = 0; j < typeParameters.length && j < typeArgs.length; j++) { - if (typeParameters[j] === typeConstraint) { - typeConstraint = typeArgs[j]; - } - } - } else if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeConstraintSubstitutionMap); - } - - if (typeArg.isTypeParameter()) { - upperBound = typeArg.getConstraint(); - - if (upperBound) { - typeArg = upperBound; - } - } - - if (typeArg.inResolution || (typeArg.isTypeReference() && typeArg.referencedTypeSymbol.inResolution)) { - return specializedSymbol; - } - - if (context.canTypeCheckAST(genericTypeAST)) { - this.typeCheckCallBacks.push(function (context) { - if (!_this.sourceIsAssignableToTarget(typeArg, typeConstraint, genericTypeAST, context)) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(genericTypeAST); - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(genericTypeAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [typeArg.toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameter.toString(enclosingSymbol, true)])); - } - }); - } - } - } - - return specializedSymbol; - }; - - PullTypeResolver.prototype.resolveQualifiedName = function (dottedNameAST, context) { - if (this.inTypeQuery(dottedNameAST)) { - return this.resolveDottedNameExpression(dottedNameAST, dottedNameAST.left, dottedNameAST.right, context).type; - } - - var symbol = this.getSymbolForAST(dottedNameAST, context); - if (!symbol || this.canTypeCheckAST(dottedNameAST, context)) { - var canTypeCheck = this.canTypeCheckAST(dottedNameAST, context); - if (canTypeCheck) { - this.setTypeChecked(dottedNameAST, context); - } - - symbol = this.computeQualifiedName(dottedNameAST, context); - this.setSymbolForAST(dottedNameAST, symbol, context); - } - - this.resolveDeclaredSymbol(symbol, context); - - return symbol; - }; - - PullTypeResolver.prototype.isLastNameOfModuleNameModuleReference = function (ast) { - return ast.kind() === 11 /* IdentifierName */ && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast && ast.parent.parent && ast.parent.parent.kind() === 246 /* ModuleNameModuleReference */; - }; - - PullTypeResolver.prototype.computeQualifiedName = function (dottedNameAST, context) { - var rhsName = dottedNameAST.right.valueText(); - if (rhsName.length === 0) { - return this.semanticInfoChain.anyTypeSymbol; - } - - var enclosingDecl = this.getEnclosingDeclForAST(dottedNameAST); - var lhs = this.resolveAST(dottedNameAST.left, false, context); - - var lhsType = lhs.isAlias() ? lhs.getExportAssignedContainerSymbol() : lhs.type; - - if (this.inClassExtendsHeritageClause(dottedNameAST) && !this.inTypeArgumentList(dottedNameAST)) { - if (lhs.isAlias()) { - lhs.setIsUsedAsValue(); - } - } - - if (!lhsType) { - return this.getNewErrorTypeSymbol(); - } - - if (this.isAnyOrEquivalent(lhsType)) { - return lhsType; - } - - var onLeftOfDot = this.isLeftSideOfQualifiedName(dottedNameAST); - var isNameOfModule = dottedNameAST.parent.kind() === 130 /* ModuleDeclaration */ && dottedNameAST.parent.name === dottedNameAST; - - var memberKind = (onLeftOfDot || isNameOfModule) ? 164 /* SomeContainer */ : 58728795 /* SomeType */; - - var childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - - if (!childTypeSymbol && !isNameOfModule && this.isLastNameOfModuleNameModuleReference(dottedNameAST.right)) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, 68147712 /* SomeValue */, lhsType); - } - - if (!childTypeSymbol && lhsType.isContainer()) { - var exportedContainer = lhsType.getExportAssignedContainerSymbol(); - - if (exportedContainer) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, exportedContainer); - } - } - - if (!childTypeSymbol && enclosingDecl) { - var parentDecl = enclosingDecl; - - while (parentDecl) { - if (parentDecl.kind & 164 /* SomeContainer */) { - break; - } - - parentDecl = parentDecl.getParentDecl(); - } - - if (parentDecl) { - var enclosingSymbolType = parentDecl.getSymbol().type; - - if (enclosingSymbolType === lhsType) { - childTypeSymbol = this.getNamedPropertySymbol(rhsName, memberKind, lhsType); - } - } - } - - if (!childTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(dottedNameAST.right, TypeScript.DiagnosticCode.The_property_0_does_not_exist_on_value_of_type_1, [dottedNameAST.right.text(), lhsType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); - return this.getNewErrorTypeSymbol(rhsName); - } - - return childTypeSymbol; - }; - - PullTypeResolver.prototype.shouldContextuallyTypeAnyFunctionExpression = function (functionExpressionAST, typeParameters, parameters, returnTypeAnnotation, context) { - if (typeParameters && typeParameters.typeParameters.nonSeparatorCount() > 0) { - return false; - } - - if (returnTypeAnnotation) { - return false; - } - - if (parameters) { - for (var i = 0, n = parameters.length; i < n; i++) { - if (parameters.typeAt(i)) { - return false; - } - } - } - - var contextualFunctionTypeSymbol = context.getContextualType(); - - if (contextualFunctionTypeSymbol) { - this.resolveDeclaredSymbol(contextualFunctionTypeSymbol, context); - var callSignatures = contextualFunctionTypeSymbol.getCallSignatures(); - var exactlyOneCallSignature = callSignatures && callSignatures.length === 1; - if (!exactlyOneCallSignature) { - return false; - } - - var callSignatureIsGeneric = callSignatures[0].getTypeParameters().length > 0; - return !callSignatureIsGeneric; - } - - return false; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var funcDeclSymbol = null; - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - TypeScript.Debug.assert(functionDecl); - - if (functionDecl && functionDecl.hasSymbol()) { - funcDeclSymbol = functionDecl.getSymbol(); - if (funcDeclSymbol.isResolved || funcDeclSymbol.inResolution) { - return funcDeclSymbol; - } - } - - funcDeclSymbol = functionDecl.getSymbol(); - TypeScript.Debug.assert(funcDeclSymbol); - - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - funcDeclSymbol.startResolving(); - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - if (returnTypeAnnotation) { - signature.returnType = this.resolveTypeReference(returnTypeAnnotation, context); - } else { - if (assigningFunctionSignature) { - var returnType = assigningFunctionSignature.returnType; - - if (returnType) { - context.propagateContextualType(returnType); - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, true, functionDecl, context); - context.popAnyContextualType(); - } else { - signature.returnType = this.semanticInfoChain.anyTypeSymbol; - - if (this.compilationSettings.noImplicitAny()) { - var functionExpressionName = functionDecl.getFunctionExpressionName(); - - if (functionExpressionName != "") { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode._0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type, [functionExpressionName])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)); - } - } - } - } else { - this.resolveFunctionBodyReturnTypes(funcDeclAST, block, bodyExpression, signature, false, functionDecl, context); - } - } - - context.setTypeInContext(funcDeclSymbol, funcDeclType); - funcDeclSymbol.setResolved(); - - if (this.canTypeCheckAST(funcDeclAST, context)) { - this.typeCheckAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context); - } - - return funcDeclSymbol; - }; - - PullTypeResolver.prototype.resolveAnyFunctionExpressionParameters = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context) { - if (!parameters) { - return; - } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var contextParams = []; - - var assigningFunctionSignature = null; - if (isContextuallyTyped && this.shouldContextuallyTypeAnyFunctionExpression(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, context)) { - assigningFunctionSignature = context.getContextualType().getCallSignatures()[0]; - } - - if (assigningFunctionSignature) { - contextParams = assigningFunctionSignature.parameters; - } - - var contextualParametersCount = contextParams.length; - for (var i = 0, n = parameters.length; i < n; i++) { - var actualParameterIsVarArgParameter = (i === (n - 1)) && parameters.lastParameterIsRest(); - var correspondingContextualParameter = null; - var contextualParameterType = null; - - if (i < contextualParametersCount) { - correspondingContextualParameter = contextParams[i]; - } else if (contextualParametersCount && contextParams[contextualParametersCount - 1].isVarArg) { - correspondingContextualParameter = contextParams[contextualParametersCount - 1]; - } - - if (correspondingContextualParameter) { - if (correspondingContextualParameter.isVarArg === actualParameterIsVarArgParameter) { - contextualParameterType = correspondingContextualParameter.type; - } else if (correspondingContextualParameter.isVarArg) { - contextualParameterType = correspondingContextualParameter.type.getElementType(); - } - } - - this.resolveFunctionExpressionParameter(parameters.astAt(i), parameters.identifierAt(i), parameters.typeAt(i), parameters.initializerAt(i), contextualParameterType, functionDecl, context); - } - }; - - PullTypeResolver.prototype.typeCheckSimpleArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, null, TypeScript.ASTHelpers.parametersFromIdentifier(arrowFunction.identifier), null, arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckParenthesizedArrowFunctionExpression = function (arrowFunction, isContextuallyTyped, context) { - return this.typeCheckAnyFunctionExpression(arrowFunction, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckAnyFunctionExpression = function (funcDeclAST, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, isContextuallyTyped, context) { - var _this = this; - this.setTypeChecked(funcDeclAST, context); - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - - var funcDeclSymbol = functionDecl.getSymbol(); - var funcDeclType = funcDeclSymbol.type; - var signature = funcDeclType.getCallSignatures()[0]; - var returnTypeSymbol = signature.returnType; - - if (typeParameters) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - this.resolveTypeParameterDeclaration(typeParameters.typeParameters.nonSeparatorAt(i), context); - } - } - - this.resolveAnyFunctionExpressionParameters(funcDeclAST, typeParameters, parameters, returnTypeAnnotation, isContextuallyTyped, context); - - context.pushNewContextualType(null); - if (block) { - this.resolveAST(block, false, context); - } else { - var bodyExpressionType = this.resolveReturnExpression(bodyExpression, functionDecl, context); - this.typeCheckReturnExpression(bodyExpression, bodyExpressionType, functionDecl, context); - } - - context.popAnyContextualType(); - - this.checkThatNonVoidFunctionHasReturnExpressionOrThrowStatement(functionDecl, returnTypeAnnotation, returnTypeSymbol, block, context); - - this.validateVariableDeclarationGroups(functionDecl, context); - - this.typeCheckCallBacks.push(function (context) { - _this.typeCheckFunctionOverloads(funcDeclAST, context); - }); - }; - - PullTypeResolver.prototype.resolveThisExpression = function (thisExpression, context) { - var enclosingDecl = this.getEnclosingDeclForAST(thisExpression); - var thisTypeSymbol = this.getContextualClassSymbolForEnclosingDecl(thisExpression, enclosingDecl) || this.semanticInfoChain.anyTypeSymbol; - - if (this.canTypeCheckAST(thisExpression, context)) { - this.typeCheckThisExpression(thisExpression, context, enclosingDecl); - } - - return thisTypeSymbol; - }; - - PullTypeResolver.prototype.inTypeArgumentList = function (ast) { - var previous = null; - var current = ast; - - while (current) { - switch (current.kind()) { - case 126 /* GenericType */: - var genericType = current; - if (genericType.typeArgumentList === previous) { - return true; - } - break; - - case 226 /* ArgumentList */: - var argumentList = current; - return argumentList.typeArgumentList === previous; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inClassExtendsHeritageClause = function (ast) { - while (ast) { - switch (ast.kind()) { - case 230 /* ExtendsHeritageClause */: - var heritageClause = ast; - - return heritageClause.parent.parent.kind() === 131 /* ClassDeclaration */; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inTypeQuery = function (ast) { - while (ast) { - switch (ast.kind()) { - case 127 /* TypeQuery */: - return true; - case 129 /* FunctionDeclaration */: - case 213 /* InvocationExpression */: - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inArgumentListOfSuperInvocation = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 213 /* InvocationExpression */: - var invocationExpression = current; - if (previous === invocationExpression.argumentList && invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } - break; - - case 137 /* ConstructorDeclaration */: - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - - PullTypeResolver.prototype.inConstructorParameterList = function (ast) { - var previous = null; - var current = ast; - while (current) { - switch (current.kind()) { - case 142 /* CallSignature */: - var callSignature = current; - if (previous === callSignature.parameterList && callSignature.parent.kind() === 137 /* ConstructorDeclaration */) { - return true; - } - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - return false; - } - - previous = current; - current = current.parent; - } - - return false; - }; - PullTypeResolver.prototype.isFunctionAccessorOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 262144 /* GetAccessor */ || decl.kind === 524288 /* SetAccessor */) { - return true; - } - - return this.isFunctionOrNonArrowFunctionExpression(decl); - }; - - PullTypeResolver.prototype.isFunctionOrNonArrowFunctionExpression = function (decl) { - if (decl.kind === 16384 /* Function */) { - return true; - } else if (decl.kind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(decl.flags, 8192 /* ArrowFunction */)) { - return true; - } - - return false; - }; - - PullTypeResolver.prototype.typeCheckThisExpression = function (thisExpression, context, enclosingDecl) { - this.checkForThisCaptureInArrowFunction(thisExpression); - - if (this.inConstructorParameterList(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_constructor_arguments)); - return; - } - - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionAccessorOrNonArrowFunctionExpression(currentDecl)) { - return; - } else if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - if (currentDecl.getParentDecl() === null) { - return; - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_within_module_bodies)); - return; - } - } else if (currentDecl.kind === 64 /* Enum */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - return; - } else if (currentDecl.kind === 32768 /* ConstructorMethod */) { - if (this.inArgumentListOfSuperInvocation(thisExpression) && this.superCallMustBeFirstStatementInConstructor(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_current_location)); - } - - return; - } else if (currentDecl.kind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(thisExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(thisExpression, TypeScript.DiagnosticCode.this_cannot_be_referenced_in_static_initializers_in_a_class_body)); - } - - return; - } - } - }; - - PullTypeResolver.prototype.getContextualClassSymbolForEnclosingDecl = function (ast, enclosingDecl) { - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var isStaticContext = false; - - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declFlags & 16 /* Static */) { - isStaticContext = true; - } else if (declKind === 131072 /* FunctionExpression */ && !TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - return null; - } else if (declKind === 16384 /* Function */) { - return null; - } else if (declKind === 8 /* Class */) { - if (this.inStaticMemberVariableDeclaration(ast)) { - return this.getNewErrorTypeSymbol(); - } else { - var classSymbol = decl.getSymbol(); - if (isStaticContext) { - var constructorSymbol = classSymbol.getConstructorMethod(); - return constructorSymbol.type; - } else { - return classSymbol; - } - } - } - } - } - - return null; - }; - - PullTypeResolver.prototype.inStaticMemberVariableDeclaration = function (ast) { - while (ast) { - if (ast.kind() === 136 /* MemberVariableDeclaration */ && TypeScript.hasModifier(ast.modifiers, 16 /* Static */)) { - return true; - } - - ast = ast.parent; - } - - return false; - }; - - PullTypeResolver.prototype.resolveSuperExpression = function (ast, context) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - var superType = this.semanticInfoChain.anyTypeSymbol; - - var classSymbol = this.getContextualClassSymbolForEnclosingDecl(ast, enclosingDecl); - - if (classSymbol) { - this.resolveDeclaredSymbol(classSymbol, context); - - var parents = classSymbol.getExtendedTypes(); - - if (parents.length) { - superType = parents[0]; - } - } - - if (this.canTypeCheckAST(ast, context)) { - this.typeCheckSuperExpression(ast, context, enclosingDecl); - } - - return superType; - }; - - PullTypeResolver.prototype.typeCheckSuperExpression = function (ast, context, enclosingDecl) { - this.setTypeChecked(ast, context); - - this.checkForThisCaptureInArrowFunction(ast); - - var isSuperCall = ast.parent.kind() === 213 /* InvocationExpression */; - var isSuperPropertyAccess = ast.parent.kind() === 212 /* MemberAccessExpression */; - TypeScript.Debug.assert(isSuperCall || isSuperPropertyAccess); - - if (isSuperPropertyAccess) { - for (var currentDecl = enclosingDecl; currentDecl !== null; currentDecl = currentDecl.getParentDecl()) { - if (this.isFunctionOrNonArrowFunctionExpression(currentDecl)) { - break; - } else if (currentDecl.kind === 8 /* Class */) { - if (!this.enclosingClassIsDerived(currentDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } else if (this.inStaticMemberVariableDeclaration(ast)) { - break; - } - - return; - } - } - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class)); - return; - } else { - if (enclosingDecl.kind === 32768 /* ConstructorMethod */) { - var classDecl = enclosingDecl.getParentDecl(); - - if (!this.enclosingClassIsDerived(classDecl)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_non_derived_classes)); - return; - } else if (this.inConstructorParameterList(ast)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.super_cannot_be_referenced_in_constructor_arguments)); - return; - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors)); - } - } - }; - - PullTypeResolver.prototype.resolveSimplePropertyAssignment = function (propertyAssignment, isContextuallyTyped, context) { - return this.resolveAST(propertyAssignment.expression, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - return this.resolveAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.typeCheckFunctionPropertyAssignment = function (funcProp, isContextuallyTyped, context) { - this.typeCheckAnyFunctionExpression(funcProp, funcProp.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(funcProp.callSignature.parameterList), TypeScript.ASTHelpers.getType(funcProp), funcProp.block, null, isContextuallyTyped, context); - }; - - PullTypeResolver.prototype.resolveObjectLiteralExpression = function (expressionAST, isContextuallyTyped, context, additionalResults) { - var symbol = this.getSymbolForAST(expressionAST, context); - var hasResolvedSymbol = symbol && symbol.isResolved; - - if (!hasResolvedSymbol || additionalResults || this.canTypeCheckAST(expressionAST, context)) { - if (this.canTypeCheckAST(expressionAST, context)) { - this.setTypeChecked(expressionAST, context); - } - symbol = this.computeObjectLiteralExpression(expressionAST, isContextuallyTyped, context, additionalResults); - this.setSymbolForAST(expressionAST, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.bindObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralMembers, isUsingExistingSymbol, pullTypeContext) { - var boundMemberSymbols = []; - var memberSymbol; - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var id = this.getPropertyAssignmentName(propertyAssignment); - var assignmentText = getPropertyAssignmentNameTextFromIdentifier(id); - - var isAccessor = propertyAssignment.kind() === 139 /* GetAccessor */ || propertyAssignment.kind() === 140 /* SetAccessor */; - var decl = this.semanticInfoChain.getDeclForAST(propertyAssignment); - TypeScript.Debug.assert(decl); - - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - if (!isUsingExistingSymbol) { - memberSymbol = new TypeScript.PullSymbol(assignmentText.memberName, 4096 /* Property */); - memberSymbol.addDeclaration(decl); - decl.setSymbol(memberSymbol); - } else { - memberSymbol = decl.getSymbol(); - } - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - memberSymbol = decl.getSymbol(); - } else { - TypeScript.Debug.assert(isAccessor); - memberSymbol = decl.getSymbol(); - } - - if (!isUsingExistingSymbol && !isAccessor) { - var existingMember = objectLiteralTypeSymbol.findMember(memberSymbol.name, true); - if (existingMember) { - pullTypeContext.postDiagnostic(this.semanticInfoChain.duplicateIdentifierDiagnosticFromAST(propertyAssignment, assignmentText.actualText, existingMember.getDeclarations()[0].ast())); - } - - objectLiteralTypeSymbol.addMember(memberSymbol); - } - - boundMemberSymbols.push(memberSymbol); - } - - return boundMemberSymbols; - }; - - PullTypeResolver.prototype.resolveObjectLiteralMembers = function (objectLiteralDeclaration, objectLiteralTypeSymbol, objectLiteralContextualType, objectLiteralMembers, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, pullTypeContext, additionalResults) { - for (var i = 0, len = objectLiteralMembers.nonSeparatorCount(); i < len; i++) { - var propertyAssignment = objectLiteralMembers.nonSeparatorAt(i); - - var acceptedContextualType = false; - var assigningSymbol = null; - - var id = this.getPropertyAssignmentName(propertyAssignment); - var memberSymbol = boundMemberSymbols[i]; - var contextualMemberType = null; - - if (objectLiteralContextualType) { - assigningSymbol = this.getNamedPropertySymbol(memberSymbol.name, 68147712 /* SomeValue */, objectLiteralContextualType); - - if (!assigningSymbol) { - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - assigningSymbol = numericIndexerSignature; - } else if (stringIndexerSignature) { - assigningSymbol = stringIndexerSignature; - } - } - - if (assigningSymbol) { - this.resolveDeclaredSymbol(assigningSymbol, pullTypeContext); - - contextualMemberType = assigningSymbol.kind === 4194304 /* IndexSignature */ ? assigningSymbol.returnType : assigningSymbol.type; - pullTypeContext.propagateContextualType(contextualMemberType); - - acceptedContextualType = true; - - if (additionalResults) { - additionalResults.membersContextTypeSymbols[i] = contextualMemberType; - } - } - } - - var memberSymbolType = this.resolveAST(propertyAssignment, contextualMemberType !== null, pullTypeContext).type; - - if (memberSymbolType) { - if (memberSymbolType.isGeneric()) { - objectLiteralTypeSymbol.setHasGenericMember(); - } - - if (stringIndexerSignature) { - allMemberTypes.push(memberSymbolType); - } - if (numericIndexerSignature && TypeScript.PullHelpers.isNameNumeric(memberSymbol.name)) { - allNumericMemberTypes.push(memberSymbolType); - } - } - - if (acceptedContextualType) { - pullTypeContext.popAnyContextualType(); - } - - var isAccessor = propertyAssignment.kind() === 140 /* SetAccessor */ || propertyAssignment.kind() === 139 /* GetAccessor */; - if (!memberSymbol.isResolved) { - if (isAccessor) { - this.setSymbolForAST(id, memberSymbolType, pullTypeContext); - } else { - pullTypeContext.setTypeInContext(memberSymbol, memberSymbolType); - memberSymbol.setResolved(); - - this.setSymbolForAST(id, memberSymbol, pullTypeContext); - } - } - } - }; - - PullTypeResolver.prototype.computeObjectLiteralExpression = function (objectLitAST, isContextuallyTyped, context, additionalResults) { - var objectLitDecl = this.semanticInfoChain.getDeclForAST(objectLitAST); - TypeScript.Debug.assert(objectLitDecl); - - var typeSymbol = this.getSymbolForAST(objectLitAST, context); - var isUsingExistingSymbol = !!typeSymbol; - - if (!typeSymbol) { - typeSymbol = new TypeScript.PullTypeSymbol("", 256 /* ObjectLiteral */); - typeSymbol.addDeclaration(objectLitDecl); - this.setSymbolForAST(objectLitAST, typeSymbol, context); - objectLitDecl.setSymbol(typeSymbol); - } - - var propertyAssignments = objectLitAST.propertyAssignments; - var contextualType = null; - - if (isContextuallyTyped) { - contextualType = context.getContextualType(); - this.resolveDeclaredSymbol(contextualType, context); - } - - var stringIndexerSignature = null; - var numericIndexerSignature = null; - var allMemberTypes = null; - var allNumericMemberTypes = null; - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - - stringIndexerSignature = indexSignatures.stringSignature; - numericIndexerSignature = indexSignatures.numericSignature; - - var inInferentialTyping = context.isInferentiallyTyping(); - if (stringIndexerSignature) { - allMemberTypes = inInferentialTyping ? [] : [stringIndexerSignature.returnType]; - } - - if (numericIndexerSignature) { - allNumericMemberTypes = inInferentialTyping ? [] : [numericIndexerSignature.returnType]; - } - } - - if (propertyAssignments) { - if (additionalResults) { - additionalResults.membersContextTypeSymbols = []; - } - - var boundMemberSymbols = this.bindObjectLiteralMembers(objectLitDecl, typeSymbol, propertyAssignments, isUsingExistingSymbol, context); - - this.resolveObjectLiteralMembers(objectLitDecl, typeSymbol, contextualType, propertyAssignments, stringIndexerSignature, numericIndexerSignature, allMemberTypes, allNumericMemberTypes, boundMemberSymbols, isUsingExistingSymbol, context, additionalResults); - - if (!isUsingExistingSymbol) { - this.stampObjectLiteralWithIndexSignature(typeSymbol, allMemberTypes, stringIndexerSignature, context); - this.stampObjectLiteralWithIndexSignature(typeSymbol, allNumericMemberTypes, numericIndexerSignature, context); - } - } - - typeSymbol.setResolved(); - return typeSymbol; - }; - - PullTypeResolver.prototype.getPropertyAssignmentName = function (propertyAssignment) { - if (propertyAssignment.kind() === 240 /* SimplePropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 241 /* FunctionPropertyAssignment */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 139 /* GetAccessor */) { - return propertyAssignment.propertyName; - } else if (propertyAssignment.kind() === 140 /* SetAccessor */) { - return propertyAssignment.propertyName; - } else { - TypeScript.Debug.assert(false); - } - }; - - PullTypeResolver.prototype.stampObjectLiteralWithIndexSignature = function (objectLiteralSymbol, indexerTypeCandidates, contextualIndexSignature, context) { - if (contextualIndexSignature) { - var typeCollection = { - getLength: function () { - return indexerTypeCandidates.length; - }, - getTypeAtIndex: function (index) { - return indexerTypeCandidates[index]; - } - }; - var decl = objectLiteralSymbol.getDeclarations()[0]; - var indexerReturnType = this.findBestCommonType(typeCollection, context).widenedType(this, null, context); - if (indexerReturnType === contextualIndexSignature.returnType) { - objectLiteralSymbol.addIndexSignature(contextualIndexSignature); - } else { - this.semanticInfoChain.addSyntheticIndexSignature(decl, objectLiteralSymbol, this.getASTForDecl(decl), contextualIndexSignature.parameters[0].name, contextualIndexSignature.parameters[0].type, indexerReturnType); - } - } - }; - - PullTypeResolver.prototype.resolveArrayLiteralExpression = function (arrayLit, isContextuallyTyped, context) { - var symbol = this.getSymbolForAST(arrayLit, context); - if (!symbol || this.canTypeCheckAST(arrayLit, context)) { - if (this.canTypeCheckAST(arrayLit, context)) { - this.setTypeChecked(arrayLit, context); - } - symbol = this.computeArrayLiteralExpressionSymbol(arrayLit, isContextuallyTyped, context); - this.setSymbolForAST(arrayLit, symbol, context); - } - - return symbol; - }; - - PullTypeResolver.prototype.computeArrayLiteralExpressionSymbol = function (arrayLit, isContextuallyTyped, context) { - var elements = arrayLit.expressions; - var elementType = null; - var elementTypes = []; - var comparisonInfo = new TypeComparisonInfo(); - var contextualElementType = null; - comparisonInfo.onlyCaptureFirstError = true; - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - - this.resolveDeclaredSymbol(contextualType, context); - - if (contextualType) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(contextualType, context); - if (indexSignatures.numericSignature) { - contextualElementType = indexSignatures.numericSignature.returnType; - } - } - } - - if (elements) { - if (contextualElementType) { - context.propagateContextualType(contextualElementType); - } - - for (var i = 0, n = elements.nonSeparatorCount(); i < n; i++) { - elementTypes.push(this.resolveAST(elements.nonSeparatorAt(i), contextualElementType !== null, context).type); - } - - if (contextualElementType) { - context.popAnyContextualType(); - } - } - - if (elementTypes.length) { - elementType = elementTypes[0]; - } - var collection; - - if (contextualElementType && !context.isInferentiallyTyping()) { - if (!elementType) { - elementType = contextualElementType; - } - - collection = { - getLength: function () { - return elements.nonSeparatorCount() + 1; - }, - getTypeAtIndex: function (index) { - return index === 0 ? contextualElementType : elementTypes[index - 1]; - } - }; - } else { - collection = { - getLength: function () { - return elements.nonSeparatorCount(); - }, - getTypeAtIndex: function (index) { - return elementTypes[index]; - } - }; - } - - elementType = elementType ? this.findBestCommonType(collection, context, comparisonInfo) : elementType; - - if (!elementType) { - elementType = this.semanticInfoChain.undefinedTypeSymbol; - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.resolveElementAccessExpression = function (callEx, context) { - var symbolAndDiagnostic = this.computeElementAccessExpressionSymbolAndDiagnostic(callEx, context); - - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckElementAccessExpression(callEx, context, symbolAndDiagnostic); - } - - return symbolAndDiagnostic.symbol; - }; - - PullTypeResolver.prototype.typeCheckElementAccessExpression = function (callEx, context, symbolAndDiagnostic) { - this.setTypeChecked(callEx, context); - context.postDiagnostic(symbolAndDiagnostic.diagnostic); - }; - - PullTypeResolver.prototype.computeElementAccessExpressionSymbolAndDiagnostic = function (callEx, context) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var indexType = this.resolveAST(callEx.argumentExpression, false, context).type; - - var targetTypeSymbol = targetSymbol.type; - - targetTypeSymbol = this.getApparentType(targetTypeSymbol); - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - return { symbol: targetTypeSymbol }; - } - - var elementType = targetTypeSymbol.getElementType(); - - var isNumberIndex = indexType === this.semanticInfoChain.numberTypeSymbol || TypeScript.PullHelpers.symbolIsEnum(indexType); - - if (elementType && isNumberIndex) { - return { symbol: elementType }; - } - - if (callEx.argumentExpression.kind() === 14 /* StringLiteral */ || callEx.argumentExpression.kind() === 13 /* NumericLiteral */) { - var memberName = callEx.argumentExpression.kind() === 14 /* StringLiteral */ ? TypeScript.stripStartAndEndQuotes(callEx.argumentExpression.text()) : callEx.argumentExpression.valueText(); - - var member = this._getNamedPropertySymbolOfAugmentedType(memberName, targetTypeSymbol); - - if (member) { - this.resolveDeclaredSymbol(member, context); - - return { symbol: member.type }; - } - } - - var signatures = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(targetTypeSymbol, context); - - var stringSignature = signatures.stringSignature; - var numberSignature = signatures.numericSignature; - - if (numberSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol)) { - return { symbol: numberSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (stringSignature && (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol)) { - return { symbol: stringSignature.returnType || this.semanticInfoChain.anyTypeSymbol }; - } else if (isNumberIndex || indexType === this.semanticInfoChain.anyTypeSymbol || indexType === this.semanticInfoChain.stringTypeSymbol) { - if (this.compilationSettings.noImplicitAny()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(callEx.argumentExpression, TypeScript.DiagnosticCode.Index_signature_of_object_type_implicitly_has_an_any_type)); - } - return { symbol: this.semanticInfoChain.anyTypeSymbol }; - } else { - return { - symbol: this.getNewErrorTypeSymbol(), - diagnostic: this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Value_of_type_0_is_not_indexable_by_type_1, [targetTypeSymbol.toString(), indexType.toString()]) - }; - } - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesIncludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, true); - }; - - PullTypeResolver.prototype.getBothKindsOfIndexSignaturesExcludingAugmentedType = function (enclosingType, context) { - return this._getBothKindsOfIndexSignatures(enclosingType, context, false); - }; - - PullTypeResolver.prototype._getBothKindsOfIndexSignatures = function (enclosingType, context, includeAugmentedType) { - var signatures = includeAugmentedType ? enclosingType.getIndexSignaturesOfAugmentedType(this, this.cachedFunctionInterfaceType(), this.cachedObjectInterfaceType()) : enclosingType.getIndexSignatures(); - - var stringSignature = null; - var numberSignature = null; - var signature = null; - var paramSymbols; - var paramType; - - for (var i = 0; i < signatures.length; i++) { - if (stringSignature && numberSignature) { - break; - } - - signature = signatures[i]; - if (!signature.isResolved) { - this.resolveDeclaredSymbol(signature, context); - } - - paramSymbols = signature.parameters; - - if (paramSymbols.length) { - paramType = paramSymbols[0].type; - - if (!stringSignature && paramType === this.semanticInfoChain.stringTypeSymbol) { - stringSignature = signature; - continue; - } else if (!numberSignature && paramType === this.semanticInfoChain.numberTypeSymbol) { - numberSignature = signature; - continue; - } - } - } - - return { - numericSignature: numberSignature, - stringSignature: stringSignature - }; - }; - - PullTypeResolver.prototype._addUnhiddenSignaturesFromBaseType = function (derivedTypeSignatures, baseTypeSignatures, signaturesBeingAggregated) { - var _this = this; - if (!derivedTypeSignatures) { - signaturesBeingAggregated.push.apply(signaturesBeingAggregated, baseTypeSignatures); - return; - } - - var context = new TypeScript.PullTypeResolutionContext(this); - for (var i = 0; i < baseTypeSignatures.length; i++) { - var baseSignature = baseTypeSignatures[i]; - - var signatureIsHidden = TypeScript.ArrayUtilities.any(derivedTypeSignatures, function (sig) { - return _this.signaturesAreIdenticalWithNewEnclosingTypes(baseSignature, sig, context, false); - }); - - if (!signatureIsHidden) { - signaturesBeingAggregated.push(baseSignature); - } - } - }; - - PullTypeResolver.prototype.resolveBinaryAdditionOperation = function (binaryExpression, context) { - var lhsExpression = this.resolveAST(binaryExpression.left, false, context); - var lhsType = lhsExpression.type; - var rhsType = this.resolveAST(binaryExpression.right, false, context).type; - - if (TypeScript.PullHelpers.symbolIsEnum(lhsType)) { - lhsType = this.semanticInfoChain.numberTypeSymbol; - } - - if (TypeScript.PullHelpers.symbolIsEnum(rhsType)) { - rhsType = this.semanticInfoChain.numberTypeSymbol; - } - - var isLhsTypeNullOrUndefined = lhsType === this.semanticInfoChain.nullTypeSymbol || lhsType === this.semanticInfoChain.undefinedTypeSymbol; - var isRhsTypeNullOrUndefined = rhsType === this.semanticInfoChain.nullTypeSymbol || rhsType === this.semanticInfoChain.undefinedTypeSymbol; - - if (isLhsTypeNullOrUndefined) { - if (isRhsTypeNullOrUndefined) { - lhsType = rhsType = this.semanticInfoChain.anyTypeSymbol; - } else { - lhsType = rhsType; - } - } else if (isRhsTypeNullOrUndefined) { - rhsType = lhsType; - } - - var exprType = null; - - if (lhsType === this.semanticInfoChain.stringTypeSymbol || rhsType === this.semanticInfoChain.stringTypeSymbol) { - exprType = this.semanticInfoChain.stringTypeSymbol; - } else if (this.isAnyOrEquivalent(lhsType) || this.isAnyOrEquivalent(rhsType)) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } else if (rhsType === this.semanticInfoChain.numberTypeSymbol && lhsType === this.semanticInfoChain.numberTypeSymbol) { - exprType = this.semanticInfoChain.numberTypeSymbol; - } - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (exprType) { - if (binaryExpression.kind() === 175 /* AddAssignmentExpression */) { - if (!this.isReference(binaryExpression.left, lhsExpression)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } - - this.checkAssignability(binaryExpression.left, exprType, lhsType, context); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_expression_types_not_known_to_support_the_addition_operator)); - } - } - - if (!exprType) { - exprType = this.semanticInfoChain.anyTypeSymbol; - } - - return exprType; - }; - - PullTypeResolver.prototype.bestCommonTypeOfTwoTypes = function (type1, type2, context) { - return this.findBestCommonType({ - getLength: function () { - return 2; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - } - } - }, context); - }; - - PullTypeResolver.prototype.bestCommonTypeOfThreeTypes = function (type1, type2, type3, context) { - return this.findBestCommonType({ - getLength: function () { - return 3; - }, - getTypeAtIndex: function (index) { - switch (index) { - case 0: - return type1; - case 1: - return type2; - case 2: - return type3; - } - } - }, context); - }; - - PullTypeResolver.prototype.resolveLogicalOrExpression = function (binex, isContextuallyTyped, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - } - - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - var leftType = this.resolveAST(binex.left, isContextuallyTyped, context).type; - var rightType = this.resolveAST(binex.right, isContextuallyTyped, context).type; - - return context.isInferentiallyTyping() ? this.bestCommonTypeOfTwoTypes(leftType, rightType, context) : this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - var leftType = this.resolveAST(binex.left, false, context).type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binex.right, true, context).type; - context.popAnyContextualType(); - - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveLogicalAndExpression = function (binex, context) { - if (this.canTypeCheckAST(binex, context)) { - this.setTypeChecked(binex, context); - - this.resolveAST(binex.left, false, context); - } - - return this.resolveAST(binex.right, false, context).type; - }; - - PullTypeResolver.prototype.computeTypeOfConditionalExpression = function (leftType, rightType, isContextuallyTyped, context) { - if (isContextuallyTyped && !context.isInferentiallyTyping()) { - var contextualType = context.getContextualType(); - return this.bestCommonTypeOfThreeTypes(contextualType, leftType, rightType, context); - } else { - return this.bestCommonTypeOfTwoTypes(leftType, rightType, context); - } - }; - - PullTypeResolver.prototype.resolveConditionalExpression = function (trinex, isContextuallyTyped, context) { - var leftType = this.resolveAST(trinex.whenTrue, isContextuallyTyped, context).type; - var rightType = this.resolveAST(trinex.whenFalse, isContextuallyTyped, context).type; - - var expressionType = this.computeTypeOfConditionalExpression(leftType, rightType, isContextuallyTyped, context); - - var conditionalTypesAreValid = this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context); - - if (this.canTypeCheckAST(trinex, context)) { - this.setTypeChecked(trinex, context); - this.resolveAST(trinex.condition, false, context); - - if (!this.conditionExpressionTypesAreValid(leftType, rightType, expressionType, isContextuallyTyped, context)) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_2_or_3, [expressionType.toString(), leftType.toString(), rightType.toString(), contextualType.toString()])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(trinex, TypeScript.DiagnosticCode.Type_of_conditional_0_must_be_identical_to_1_or_2, [expressionType.toString(), leftType.toString(), rightType.toString()])); - } - } - } - - if (!conditionalTypesAreValid) { - return this.getNewErrorTypeSymbol(); - } - - return expressionType; - }; - - PullTypeResolver.prototype.conditionExpressionTypesAreValid = function (leftType, rightType, expressionType, isContextuallyTyped, context) { - if (isContextuallyTyped) { - var contextualType = context.getContextualType(); - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context) || this.typesAreIdentical(expressionType, contextualType, context)) { - return true; - } - } else { - if (this.typesAreIdentical(expressionType, leftType, context) || this.typesAreIdentical(expressionType, rightType, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.resolveParenthesizedExpression = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - } - - return this.resolveAST(ast.expression, false, context); - }; - - PullTypeResolver.prototype.resolveExpressionStatement = function (ast, context) { - if (this.canTypeCheckAST(ast, context)) { - this.setTypeChecked(ast, context); - - this.resolveAST(ast.expression, false, context); - } - - return this.semanticInfoChain.voidTypeSymbol; - }; - - PullTypeResolver.prototype.resolveInvocationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeInvocationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - if (symbol !== this.semanticInfoChain.anyTypeSymbol) { - this.setSymbolForAST(callEx, symbol, context); - } - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckInvocationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckInvocationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - var targetSymbol = this.resolveAST(callEx.expression, false, context); - - if (callEx.argumentList.arguments) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - - var len = callEx.argumentList.arguments.nonSeparatorCount(); - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.computeInvocationExpressionSymbol = function (callEx, context, additionalResults) { - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var targetTypeSymbol = targetSymbol.type; - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - if (targetTypeSymbol === this.semanticInfoChain.anyTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Untyped_function_calls_may_not_accept_type_arguments), additionalResults, context); - return this.getNewErrorTypeSymbol(); - } - } - - return this.semanticInfoChain.anyTypeSymbol; - } - - var isSuperCall = false; - - if (callEx.expression.kind() === 50 /* SuperKeyword */) { - isSuperCall = true; - - if (targetTypeSymbol.isClass()) { - targetSymbol = targetTypeSymbol.getConstructorMethod(); - this.resolveDeclaredSymbol(targetSymbol, context); - targetTypeSymbol = targetSymbol.type; - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Calls_to_super_are_only_valid_inside_a_class), additionalResults, context); - this.resolveAST(callEx.argumentList.arguments, false, context); - - return this.getNewErrorTypeSymbol(); - } - } - - var signatures = isSuperCall ? targetTypeSymbol.getConstructSignatures() : targetTypeSymbol.getCallSignatures(); - - if (!signatures.length && (targetTypeSymbol.kind === 33554432 /* ConstructorType */)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, [targetTypeSymbol.toString()]), additionalResults, context); - } - - var explicitTypeArgs = null; - var couldNotFindGenericOverload = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - var triedToInferTypeArgs = false; - - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var beforeResolutionSignatures = signatures; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < signatures.length; i++) { - typeParameters = signatures[i].getTypeParameters(); - couldNotAssignToConstraint = false; - - if (signatures[i].isGeneric() && typeParameters.length) { - if (isSuperCall && targetTypeSymbol.isGeneric() && !callEx.argumentList.typeArgumentList) { - explicitTypeArgs = signatures[i].returnType.getTypeArguments(); - } - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else { - TypeScript.Debug.assert(callEx.argumentList); - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, signatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(signatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = signatures[i]; - } - } - } - - if (signatures.length && !resolvedSignatures.length) { - couldNotFindGenericOverload = true; - } - - signatures = resolvedSignatures; - - var errorCondition = null; - if (!signatures.length) { - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures && beforeResolutionSignatures.length ? beforeResolutionSignatures[0] : null; - - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - this.resolveAST(callEx.argumentList.arguments, false, context); - - if (!couldNotFindGenericOverload) { - if (this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(targetTypeSymbol, this.cachedFunctionInterfaceType(), targetAST, context)) { - if (callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } - return this.semanticInfoChain.anyTypeSymbol; - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature), additionalResults, context); - } else if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } else { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var signature = this.resolveOverloads(callEx, signatures, callEx.argumentList.typeArgumentList !== null, context, diagnostics); - var useBeforeResolutionSignatures = signature == null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_call_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!signatures.length) { - return errorCondition; - } - - signature = signatures[0]; - } - - var rootSignature = signature.getRootSymbol(); - if (!rootSignature.isGeneric() && callEx.argumentList.typeArgumentList) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Non_generic_functions_may_not_accept_type_arguments), additionalResults, context); - } else if (rootSignature.isGeneric() && callEx.argumentList.typeArgumentList && rootSignature.getTypeParameters() && (callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount() !== rootSignature.getTypeParameters().length)) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [rootSignature.getTypeParameters().length, callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()]), additionalResults, context); - } - - var returnType = isSuperCall ? this.semanticInfoChain.voidTypeSymbol : signature.returnType; - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - if (useBeforeResolutionSignatures && beforeResolutionSignatures) { - additionalResults.resolvedSignatures = beforeResolutionSignatures; - additionalResults.candidateSignature = beforeResolutionSignatures[0]; - } else { - additionalResults.resolvedSignatures = signatures; - additionalResults.candidateSignature = signature; - } - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - }; - - PullTypeResolver.prototype.resolveObjectCreationExpression = function (callEx, context, additionalResults) { - var symbol = this.getSymbolForAST(callEx, context); - - if (!symbol || !symbol.isResolved) { - if (!additionalResults) { - additionalResults = new PullAdditionalCallResolutionData(); - } - symbol = this.computeObjectCreationExpressionSymbol(callEx, context, additionalResults); - if (this.canTypeCheckAST(callEx, context)) { - this.setTypeChecked(callEx, context); - } - this.setSymbolForAST(callEx, symbol, context); - this.semanticInfoChain.setCallResolutionDataForAST(callEx, additionalResults); - } else { - if (this.canTypeCheckAST(callEx, context)) { - this.typeCheckObjectCreationExpression(callEx, context); - } - - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (additionalResults && (callResolutionData !== additionalResults)) { - additionalResults.actualParametersContextTypeSymbols = callResolutionData.actualParametersContextTypeSymbols; - additionalResults.candidateSignature = callResolutionData.candidateSignature; - additionalResults.resolvedSignatures = callResolutionData.resolvedSignatures; - additionalResults.targetSymbol = callResolutionData.targetSymbol; - } - } - - return symbol; - }; - - PullTypeResolver.prototype.typeCheckObjectCreationExpression = function (callEx, context) { - this.setTypeChecked(callEx, context); - this.resolveAST(callEx.expression, false, context); - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - if (callEx.argumentList) { - var callResolutionData = this.semanticInfoChain.getCallResolutionDataForAST(callEx); - var len = callEx.argumentList.arguments.nonSeparatorCount(); - - for (var i = 0; i < len; i++) { - var contextualType = callResolutionData.actualParametersContextTypeSymbols ? callResolutionData.actualParametersContextTypeSymbols[i] : null; - if (contextualType) { - context.pushNewContextualType(contextualType); - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - for (var i = 0; i < callResolutionData.diagnosticsFromOverloadResolution.length; i++) { - context.postDiagnostic(callResolutionData.diagnosticsFromOverloadResolution[i]); - } - }; - - PullTypeResolver.prototype.postOverloadResolutionDiagnostics = function (diagnostic, additionalResults, context) { - if (!context.inProvisionalResolution()) { - additionalResults.diagnosticsFromOverloadResolution.push(diagnostic); - } - context.postDiagnostic(diagnostic); - }; - - PullTypeResolver.prototype.computeObjectCreationExpressionSymbol = function (callEx, context, additionalResults) { - var _this = this; - var returnType = null; - - var targetSymbol = this.resolveAST(callEx.expression, false, context); - var targetTypeSymbol = targetSymbol.isType() ? targetSymbol : targetSymbol.type; - - var targetAST = this.getCallTargetErrorSpanAST(callEx); - - var constructSignatures = targetTypeSymbol.getConstructSignatures(); - - var explicitTypeArgs = null; - var usedCallSignaturesInstead = false; - var couldNotAssignToConstraint; - var constraintDiagnostic = null; - var typeArgumentCountDiagnostic = null; - var diagnostics = []; - - if (this.isAnyOrEquivalent(targetTypeSymbol)) { - if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - return targetTypeSymbol; - } - - if (!constructSignatures.length) { - constructSignatures = targetTypeSymbol.getCallSignatures(); - usedCallSignaturesInstead = true; - - if (this.compilationSettings.noImplicitAny()) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(callEx, TypeScript.DiagnosticCode.new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type), additionalResults, context); - } - } - - if (constructSignatures.length) { - if (callEx.argumentList && callEx.argumentList.typeArgumentList) { - explicitTypeArgs = []; - - if (callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount()) { - for (var i = 0; i < callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount(); i++) { - explicitTypeArgs[i] = this.resolveTypeReference(callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorAt(i), context); - } - } - } - - if (targetTypeSymbol.isGeneric()) { - var resolvedSignatures = []; - var inferredOrExplicitTypeArgs; - var specializedSignature; - var typeParameters; - var typeConstraint = null; - var triedToInferTypeArgs; - var targetTypeReplacementMap = targetTypeSymbol.getTypeParameterArgumentMap(); - - for (var i = 0; i < constructSignatures.length; i++) { - couldNotAssignToConstraint = false; - - if (constructSignatures[i].isGeneric()) { - typeParameters = constructSignatures[i].getTypeParameters(); - - if (explicitTypeArgs) { - if (explicitTypeArgs.length === typeParameters.length) { - inferredOrExplicitTypeArgs = explicitTypeArgs; - } else { - typeArgumentCountDiagnostic = typeArgumentCountDiagnostic || this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Signature_expected_0_type_arguments_got_1_instead, [typeParameters.length, explicitTypeArgs.length]); - continue; - } - } else if (callEx.argumentList) { - var typeArgumentInferenceContext = new TypeScript.InvocationTypeArgumentInferenceContext(this, context, constructSignatures[i], callEx.argumentList.arguments); - inferredOrExplicitTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - triedToInferTypeArgs = true; - } else { - inferredOrExplicitTypeArgs = TypeScript.ArrayUtilities.select(typeParameters, function (typeParameter) { - return typeParameter.getDefaultConstraint(_this.semanticInfoChain); - }); - } - - TypeScript.Debug.assert(inferredOrExplicitTypeArgs && inferredOrExplicitTypeArgs.length == typeParameters.length); - - var mutableTypeReplacementMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(targetTypeReplacementMap ? targetTypeReplacementMap : []); - TypeScript.PullInstantiationHelpers.updateMutableTypeParameterArgumentMap(typeParameters, inferredOrExplicitTypeArgs, mutableTypeReplacementMap); - var typeReplacementMap = mutableTypeReplacementMap.typeParameterArgumentMap; - - if (explicitTypeArgs) { - for (var j = 0; j < typeParameters.length; j++) { - typeConstraint = typeParameters[j].getConstraint(); - - if (typeConstraint) { - if (typeConstraint.isGeneric()) { - typeConstraint = this.instantiateType(typeConstraint, typeReplacementMap); - } - - if (!this.sourceIsAssignableToTarget(inferredOrExplicitTypeArgs[j], typeConstraint, targetAST, context, null, true)) { - var enclosingSymbol = this.getEnclosingSymbolForAST(targetAST); - constraintDiagnostic = this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Type_0_does_not_satisfy_the_constraint_1_for_type_parameter_2, [inferredOrExplicitTypeArgs[j].toString(enclosingSymbol, true), typeConstraint.toString(enclosingSymbol, true), typeParameters[j].toString(enclosingSymbol, true)]); - couldNotAssignToConstraint = true; - } - - if (couldNotAssignToConstraint) { - break; - } - } - } - } - - if (couldNotAssignToConstraint) { - continue; - } - - specializedSignature = this.instantiateSignature(constructSignatures[i], typeReplacementMap); - - if (specializedSignature) { - resolvedSignatures[resolvedSignatures.length] = specializedSignature; - } - } else { - if (!(callEx.argumentList && callEx.argumentList.typeArgumentList && callEx.argumentList.typeArgumentList.typeArguments.nonSeparatorCount())) { - resolvedSignatures[resolvedSignatures.length] = constructSignatures[i]; - } - } - } - - constructSignatures = resolvedSignatures; - } - - var signature = this.resolveOverloads(callEx, constructSignatures, callEx.argumentList && callEx.argumentList.typeArgumentList !== null, context, diagnostics); - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = []; - - if (!constructSignatures.length) { - if (constraintDiagnostic) { - this.postOverloadResolutionDiagnostics(constraintDiagnostic, additionalResults, context); - } else if (typeArgumentCountDiagnostic) { - this.postOverloadResolutionDiagnostics(typeArgumentCountDiagnostic, additionalResults, context); - } - - return this.getNewErrorTypeSymbol(); - } - - var errorCondition = null; - - if (!signature) { - for (var i = 0; i < diagnostics.length; i++) { - this.postOverloadResolutionDiagnostics(diagnostics[i], additionalResults, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Could_not_select_overload_for_new_expression), additionalResults, context); - - errorCondition = this.getNewErrorTypeSymbol(); - - if (!constructSignatures.length) { - return errorCondition; - } - - signature = constructSignatures[0]; - } - - returnType = signature.returnType; - - if (returnType && !signature.isGeneric() && returnType.isGeneric() && !returnType.getIsSpecialized()) { - if (explicitTypeArgs && explicitTypeArgs.length) { - returnType = this.createInstantiatedType(returnType, explicitTypeArgs); - } else { - returnType = this.instantiateTypeToAny(returnType, context); - } - } - - if (usedCallSignaturesInstead) { - if (returnType !== this.semanticInfoChain.voidTypeSymbol) { - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Call_signatures_used_in_a_new_expression_must_have_a_void_return_type), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - } else { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - } - - if (!returnType) { - returnType = signature.returnType; - - if (!returnType) { - returnType = targetTypeSymbol; - } - } - - var actualParametersContextTypeSymbols = []; - if (callEx.argumentList && callEx.argumentList.arguments) { - var len = callEx.argumentList.arguments.nonSeparatorCount(); - var params = signature.parameters; - var contextualType = null; - var signatureDecl = signature.getDeclarations()[0]; - - for (var i = 0; i < len; i++) { - if (params.length) { - if (i < params.length - 1 || (i < params.length && !signature.hasVarArgs)) { - this.resolveDeclaredSymbol(params[i], context); - contextualType = params[i].type; - } else if (signature.hasVarArgs) { - contextualType = params[params.length - 1].type; - if (contextualType.isArrayNamedTypeReference()) { - contextualType = contextualType.getElementType(); - } - } - } - - if (contextualType) { - context.pushNewContextualType(contextualType); - actualParametersContextTypeSymbols[i] = contextualType; - } - - this.resolveAST(callEx.argumentList.arguments.nonSeparatorAt(i), contextualType !== null, context); - - if (contextualType) { - context.popAnyContextualType(); - contextualType = null; - } - } - } - - additionalResults.targetSymbol = targetSymbol; - additionalResults.resolvedSignatures = constructSignatures; - additionalResults.candidateSignature = signature; - additionalResults.actualParametersContextTypeSymbols = actualParametersContextTypeSymbols; - - if (errorCondition) { - return errorCondition; - } - - if (!returnType) { - returnType = this.semanticInfoChain.anyTypeSymbol; - } - - return returnType; - } else if (callEx.argumentList) { - this.resolveAST(callEx.argumentList.arguments, false, context); - } - - this.postOverloadResolutionDiagnostics(this.semanticInfoChain.diagnosticFromAST(targetAST, TypeScript.DiagnosticCode.Invalid_new_expression), additionalResults, context); - - return this.getNewErrorTypeSymbol(); - }; - - PullTypeResolver.prototype.instantiateSignatureInContext = function (signatureAToInstantiate, contextualSignatureB, context, shouldFixContextualSignatureParameterTypes) { - var typeReplacementMap = []; - var inferredTypeArgs; - var specializedSignature; - var typeParameters = signatureAToInstantiate.getTypeParameters(); - var typeConstraint = null; - - var typeArgumentInferenceContext = new TypeScript.ContextualSignatureInstantiationTypeArgumentInferenceContext(this, context, signatureAToInstantiate, contextualSignatureB, shouldFixContextualSignatureParameterTypes); - inferredTypeArgs = this.inferArgumentTypesForSignature(typeArgumentInferenceContext, new TypeComparisonInfo(), context); - - var functionTypeA = signatureAToInstantiate.functionType; - var functionTypeB = contextualSignatureB.functionType; - var enclosingTypeParameterMap; - - if (functionTypeA) { - enclosingTypeParameterMap = functionTypeA.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - if (functionTypeB) { - enclosingTypeParameterMap = functionTypeB.getTypeParameterArgumentMap(); - - for (var id in enclosingTypeParameterMap) { - typeReplacementMap[id] = enclosingTypeParameterMap[id]; - } - } - - TypeScript.PullInstantiationHelpers.updateTypeParameterArgumentMap(typeParameters, inferredTypeArgs, typeReplacementMap); - - return this.instantiateSignature(signatureAToInstantiate, typeReplacementMap); - }; - - PullTypeResolver.prototype.resolveCastExpression = function (assertionExpression, context) { - var typeAssertionType = this.resolveTypeReference(assertionExpression.type, context).type; - - if (this.canTypeCheckAST(assertionExpression, context)) { - this.typeCheckCastExpression(assertionExpression, context, typeAssertionType); - } - - return typeAssertionType; - }; - - PullTypeResolver.prototype.typeCheckCastExpression = function (assertionExpression, context, typeAssertionType) { - this.setTypeChecked(assertionExpression, context); - - context.pushNewContextualType(typeAssertionType); - var exprType = this.resolveAST(assertionExpression.expression, true, context).type; - context.popAnyContextualType(); - - this.resolveDeclaredSymbol(typeAssertionType, context); - this.resolveDeclaredSymbol(exprType, context); - - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(exprType, typeAssertionType, assertionExpression, context, comparisonInfo); - - if (!isAssignable) { - var widenedExprType = exprType.widenedType(this, assertionExpression.expression, context); - isAssignable = this.sourceIsAssignableToTarget(typeAssertionType, widenedExprType, assertionExpression, context, comparisonInfo); - } - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(assertionExpression); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(assertionExpression, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [exprType.toString(enclosingSymbol), typeAssertionType.toString(enclosingSymbol)])); - } - } - }; - - PullTypeResolver.prototype.resolveAssignmentExpression = function (binaryExpression, context) { - var leftExpr = this.resolveAST(binaryExpression.left, false, context); - var leftType = leftExpr.type; - - context.pushNewContextualType(leftType); - var rightType = this.resolveAST(binaryExpression.right, true, context).type; - context.popAnyContextualType(); - - rightType = this.getInstanceTypeForAssignment(binaryExpression.left, rightType, context); - - if (this.canTypeCheckAST(binaryExpression, context)) { - this.setTypeChecked(binaryExpression, context); - - if (!this.isReference(binaryExpression.left, leftExpr)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(binaryExpression.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_of_assignment_expression)); - } else { - this.checkAssignability(binaryExpression.left, rightType, leftExpr.type, context); - } - } - - return rightType; - }; - - PullTypeResolver.prototype.getInstanceTypeForAssignment = function (lhs, type, context) { - var typeToReturn = type; - if (typeToReturn && typeToReturn.isAlias()) { - typeToReturn = typeToReturn.getExportAssignedTypeSymbol(); - } - - if (typeToReturn && typeToReturn.isContainer() && !typeToReturn.isEnum()) { - var instanceTypeSymbol = typeToReturn.getInstanceType(); - - if (!instanceTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(lhs, TypeScript.DiagnosticCode.Tried_to_set_variable_type_to_uninitialized_module_type_0, [type.toString()])); - typeToReturn = null; - } else { - typeToReturn = instanceTypeSymbol; - } - } - - return typeToReturn; - }; - - PullTypeResolver.prototype.widenType = function (type, ast, context) { - if (type === this.semanticInfoChain.undefinedTypeSymbol || type === this.semanticInfoChain.nullTypeSymbol || type.isError()) { - return this.semanticInfoChain.anyTypeSymbol; - } - - if (type.isArrayNamedTypeReference()) { - return this.widenArrayType(type, ast, context); - } else if (type.kind === 256 /* ObjectLiteral */) { - return this.widenObjectLiteralType(type, ast, context); - } - - return type; - }; - - PullTypeResolver.prototype.widenArrayType = function (type, ast, context) { - var elementType = type.getElementType().widenedType(this, ast, context); - - if (this.compilationSettings.noImplicitAny() && ast) { - if (elementType === this.semanticInfoChain.anyTypeSymbol && type.getElementType() !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Array_Literal_implicitly_has_an_any_type_from_widening)); - } - } - - return this.getArrayType(elementType); - }; - - PullTypeResolver.prototype.widenObjectLiteralType = function (type, ast, context) { - if (!this.needsToWidenObjectLiteralType(type, ast, context)) { - return type; - } - - TypeScript.Debug.assert(type.name === ""); - var newObjectTypeSymbol = new TypeScript.PullTypeSymbol(type.name, type.kind); - var declsOfObjectType = type.getDeclarations(); - TypeScript.Debug.assert(declsOfObjectType.length === 1); - newObjectTypeSymbol.addDeclaration(declsOfObjectType[0]); - var members = type.getMembers(); - - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - - var widenedMemberType = members[i].type.widenedType(this, ast, context); - var newMember = new TypeScript.PullSymbol(members[i].name, members[i].kind); - - var declsOfMember = members[i].getDeclarations(); - - newMember.addDeclaration(declsOfMember[0]); - newMember.type = widenedMemberType; - newObjectTypeSymbol.addMember(newMember); - newMember.setResolved(); - - if (this.compilationSettings.noImplicitAny() && ast && widenedMemberType === this.semanticInfoChain.anyTypeSymbol && memberType !== this.semanticInfoChain.anyTypeSymbol) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Object_literal_s_property_0_implicitly_has_an_any_type_from_widening, [members[i].name])); - } - } - - var indexers = type.getIndexSignatures(); - for (var i = 0; i < indexers.length; i++) { - var newIndexer = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var parameter = indexers[i].parameters[0]; - var newParameter = new TypeScript.PullSymbol(parameter.name, parameter.kind); - newParameter.type = parameter.type; - newIndexer.addParameter(newParameter); - newIndexer.returnType = indexers[i].returnType; - newObjectTypeSymbol.addIndexSignature(newIndexer); - } - - return newObjectTypeSymbol; - }; - - PullTypeResolver.prototype.needsToWidenObjectLiteralType = function (type, ast, context) { - var members = type.getMembers(); - for (var i = 0; i < members.length; i++) { - var memberType = members[i].type; - if (memberType !== memberType.widenedType(this, ast, context)) { - return true; - } - } - - return false; - }; - - PullTypeResolver.prototype.findBestCommonType = function (collection, context, comparisonInfo) { - var len = collection.getLength(); - - for (var i = 0; i < len; i++) { - var candidateType = collection.getTypeAtIndex(i); - if (this.typeIsBestCommonTypeCandidate(candidateType, collection, context)) { - return candidateType; - } - } - - return this.semanticInfoChain.emptyTypeSymbol; - }; - - PullTypeResolver.prototype.typeIsBestCommonTypeCandidate = function (candidateType, collection, context) { - for (var i = 0; i < collection.getLength(); i++) { - var otherType = collection.getTypeAtIndex(i); - if (candidateType === otherType) { - continue; - } - - if (!this.sourceIsSubtypeOfTarget(otherType, candidateType, null, context)) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typesAreIdenticalInEnclosingTypes = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (t1 && t2) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingTypesAreIdentical(t1, t2, context); - } - } - - return this.typesAreIdentical(t1, t2, context); - }; - - PullTypeResolver.prototype.typesAreIdenticalWithNewEnclosingTypes = function (t1, t2, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var areTypesIdentical = this.typesAreIdentical(t1, t2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areTypesIdentical; - }; - - PullTypeResolver.prototype.typesAreIdentical = function (t1, t2, context) { - t1 = this.getSymbolForRelationshipCheck(t1); - t2 = this.getSymbolForRelationshipCheck(t2); - - if (t1 === t2) { - return true; - } - - if (!t1 || !t2) { - return false; - } - - if (TypeScript.hasFlag(t1.kind, 64 /* Enum */) || TypeScript.hasFlag(t2.kind, 64 /* Enum */)) { - return false; - } - - if (t1.isPrimitive() && t1.isStringConstant() && t2.isPrimitive() && t2.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(t1.name) === TypeScript.stripStartAndEndQuotes(t2.name); - } - - if (t1.isPrimitive() || t2.isPrimitive()) { - return false; - } - - if (t1.isError() && t2.isError()) { - return true; - } - - var isIdentical = this.identicalCache.valueAt(t1.pullSymbolID, t2.pullSymbolID); - if (isIdentical != undefined) { - return isIdentical; - } - - if (t1.isTypeParameter() !== t2.isTypeParameter()) { - return false; - } else if (t1.isTypeParameter()) { - var t1ParentDeclaration = t1.getDeclarations()[0].getParentDecl(); - var t2ParentDeclaration = t2.getDeclarations()[0].getParentDecl(); - - if (t1ParentDeclaration === t2ParentDeclaration) { - return this.symbolsShareDeclaration(t1, t2); - } else { - return false; - } - } - - if (t1.isPrimitive() !== t2.isPrimitive()) { - return false; - } - - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, true); - var statesWhenStartedWalkingTypes = context.startWalkingTypes(t1, t2); - isIdentical = this.typesAreIdenticalWorker(t1, t2, context); - context.endWalkingTypes(statesWhenStartedWalkingTypes); - this.identicalCache.setValueAt(t1.pullSymbolID, t2.pullSymbolID, isIdentical); - - return isIdentical; - }; - - PullTypeResolver.prototype.typesAreIdenticalWorker = function (t1, t2, context) { - if (t1.getIsSpecialized() && t2.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(t1) === TypeScript.PullHelpers.getRootType(t2) && TypeScript.PullHelpers.getRootType(t1).isNamedTypeSymbol()) { - var t1TypeArguments = t1.getTypeArguments(); - var t2TypeArguments = t2.getTypeArguments(); - - if (t1TypeArguments && t2TypeArguments) { - for (var i = 0; i < t1TypeArguments.length; i++) { - if (!this.typesAreIdenticalWithNewEnclosingTypes(t1TypeArguments[i], t2TypeArguments[i], context)) { - return false; - } - } - } - - return true; - } - } - - if (t1.hasMembers() && t2.hasMembers()) { - var t1Members = t1.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - var t2Members = t2.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - if (t1Members.length !== t2Members.length) { - return false; - } - - var t1MemberSymbol = null; - var t2MemberSymbol = null; - - var t1MemberType = null; - var t2MemberType = null; - - for (var iMember = 0; iMember < t1Members.length; iMember++) { - t1MemberSymbol = t1Members[iMember]; - t2MemberSymbol = this.getNamedPropertySymbol(t1MemberSymbol.name, 68147712 /* SomeValue */, t2); - - if (!this.propertiesAreIdentical(t1MemberSymbol, t2MemberSymbol, context)) { - return false; - } - } - } else if (t1.hasMembers() || t2.hasMembers()) { - return false; - } - - var t1CallSigs = t1.getCallSignatures(); - var t2CallSigs = t2.getCallSignatures(); - - var t1ConstructSigs = t1.getConstructSignatures(); - var t2ConstructSigs = t2.getConstructSignatures(); - - var t1IndexSigs = t1.getIndexSignatures(); - var t2IndexSigs = t2.getIndexSignatures(); - - if (!this.signatureGroupsAreIdentical(t1CallSigs, t2CallSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1ConstructSigs, t2ConstructSigs, context)) { - return false; - } - - if (!this.signatureGroupsAreIdentical(t1IndexSigs, t2IndexSigs, context)) { - return false; - } - - return true; - }; - - PullTypeResolver.prototype.propertiesAreIdentical = function (propertySymbol1, propertySymbol2, context) { - if (!propertySymbol2 || (propertySymbol1.isOptional !== propertySymbol2.isOptional)) { - return false; - } - - var t1MemberSymbolIsPrivate = propertySymbol1.anyDeclHasFlag(2 /* Private */); - var t2MemberSymbolIsPrivate = propertySymbol2.anyDeclHasFlag(2 /* Private */); - - if (t1MemberSymbolIsPrivate !== t2MemberSymbolIsPrivate) { - return false; - } else if (t2MemberSymbolIsPrivate && t1MemberSymbolIsPrivate) { - var t1MemberSymbolDecl = propertySymbol1.getDeclarations()[0]; - var sourceDecl = propertySymbol2.getDeclarations()[0]; - if (t1MemberSymbolDecl !== sourceDecl) { - return false; - } - } - - var t1MemberType = propertySymbol1.type; - var t2MemberType = propertySymbol2.type; - - context.walkMemberTypes(propertySymbol1.name); - var areMemberTypesIdentical = this.typesAreIdenticalInEnclosingTypes(t1MemberType, t2MemberType, context); - context.postWalkMemberTypes(); - return areMemberTypesIdentical; - }; - - PullTypeResolver.prototype.propertiesAreIdenticalWithNewEnclosingTypes = function (type1, type2, property1, property2, context) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(type1, type2); - var arePropertiesIdentical = this.propertiesAreIdentical(property1, property2, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return arePropertiesIdentical; - }; - - PullTypeResolver.prototype.signatureGroupsAreIdentical = function (sg1, sg2, context) { - if (sg1 === sg2) { - return true; - } - - if (!sg1 || !sg2) { - return false; - } - - if (sg1.length !== sg2.length) { - return false; - } - - for (var i = 0; i < sg1.length; i++) { - context.walkSignatures(sg1[i].kind, i); - var areSignaturesIdentical = this.signaturesAreIdentical(sg1[i], sg2[i], context, true); - context.postWalkSignatures(); - if (!areSignaturesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.typeParametersAreIdentical = function (tp1, tp2, context) { - var typeParamsAreIdentical = this.typeParametersAreIdenticalWorker(tp1, tp2, context); - - this.setTypeParameterIdentity(tp1, tp2, undefined); - - return typeParamsAreIdentical; - }; - - PullTypeResolver.prototype.typeParametersAreIdenticalWorker = function (tp1, tp2, context) { - if (!!(tp1 && tp1.length) !== !!(tp2 && tp2.length)) { - return false; - } - - if (tp1 && tp2 && (tp1.length !== tp2.length)) { - return false; - } - - if (tp1 && tp2) { - for (var i = 0; i < tp1.length; i++) { - context.walkTypeParameterConstraints(i); - var areConstraintsIdentical = this.typesAreIdentical(tp1[i].getConstraint(), tp2[i].getConstraint(), context); - context.postWalkTypeParameterConstraints(); - if (!areConstraintsIdentical) { - return false; - } - } - } - - return true; - }; - - PullTypeResolver.prototype.setTypeParameterIdentity = function (tp1, tp2, val) { - if (tp1 && tp2 && tp1.length === tp2.length) { - for (var i = 0; i < tp1.length; i++) { - this.identicalCache.setValueAt(tp1[i].pullSymbolID, tp2[i].pullSymbolID, val); - } - } - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWithNewEnclosingTypes = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var areSignaturesIdentical = this.signaturesAreIdentical(s1, s2, context, includingReturnType); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSignaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdentical = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1 === s2) { - return true; - } - - var signaturesIdentical = this.identicalCache.valueAt(s1.pullSymbolID, s2.pullSymbolID); - if (signaturesIdentical || (signaturesIdentical != undefined && includingReturnType)) { - return signaturesIdentical; - } - - var oldValue = signaturesIdentical; - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, true); - - signaturesIdentical = this.signaturesAreIdenticalWorker(s1, s2, context, includingReturnType); - - if (includingReturnType) { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, signaturesIdentical); - } else { - this.identicalCache.setValueAt(s1.pullSymbolID, s2.pullSymbolID, oldValue); - } - - return signaturesIdentical; - }; - - PullTypeResolver.prototype.signaturesAreIdenticalWorker = function (s1, s2, context, includingReturnType) { - if (typeof includingReturnType === "undefined") { includingReturnType = true; } - if (s1.hasVarArgs !== s2.hasVarArgs) { - return false; - } - - if (s1.nonOptionalParamCount !== s2.nonOptionalParamCount) { - return false; - } - - if (s1.parameters.length !== s2.parameters.length) { - return false; - } - - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var typeParametersParametersAndReturnTypesAreIdentical = this.signatureTypeParametersParametersAndReturnTypesAreIdentical(s1, s2, context, includingReturnType); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - return typeParametersParametersAndReturnTypesAreIdentical; - }; - - PullTypeResolver.prototype.signatureTypeParametersParametersAndReturnTypesAreIdentical = function (s1, s2, context, includingReturnType) { - if (!this.typeParametersAreIdenticalWorker(s1.getTypeParameters(), s2.getTypeParameters(), context)) { - return false; - } - - if (includingReturnType) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2); - context.walkReturnTypes(); - var areReturnTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - context.postWalkReturnTypes(); - if (!areReturnTypesIdentical) { - return false; - } - } - - var s1Params = s1.parameters; - var s2Params = s2.parameters; - - for (var iParam = 0; iParam < s1Params.length; iParam++) { - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s1Params[iParam]); - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(s2Params[iParam]); - context.walkParameterTypes(iParam); - var areParameterTypesIdentical = this.typesAreIdenticalInEnclosingTypes(s1Params[iParam].type, s2Params[iParam].type, context); - context.postWalkParameterTypes(); - - if (!areParameterTypesIdentical) { - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.signatureReturnTypesAreIdentical = function (s1, s2, context) { - var s1TypeParameters = s1.getTypeParameters(); - var s2TypeParameters = s2.getTypeParameters(); - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, true); - - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - context.walkReturnTypes(); - var returnTypeIsIdentical = this.typesAreIdenticalInEnclosingTypes(s1.returnType, s2.returnType, context); - - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - - this.setTypeParameterIdentity(s1TypeParameters, s2TypeParameters, undefined); - - return returnTypeIsIdentical; - }; - - PullTypeResolver.prototype.symbolsShareDeclaration = function (symbol1, symbol2) { - var decls1 = symbol1.getDeclarations(); - var decls2 = symbol2.getDeclarations(); - - if (decls1.length && decls2.length) { - return decls1[0] === decls2[0]; - } - - return false; - }; - - PullTypeResolver.prototype.sourceIsSubtypeOfTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, false, this.subtypeCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceMembersAreAssignableToTargetMembers = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceMembersAreAssignableToTargetMembers = this.sourceMembersAreRelatableToTargetMembers(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceMembersAreAssignableToTargetMembers; - }; - - PullTypeResolver.prototype.sourcePropertyIsAssignableToTargetProperty = function (source, target, sourceProp, targetProp, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var isSourcePropertyIsAssignableToTargetProperty = this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourcePropertyIsAssignableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreAssignableToTargetCallSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceCallSignaturesAssignableToTargetCallSignatures = this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceCallSignaturesAssignableToTargetCallSignatures; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreAssignableToTargetConstructSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceConstructSignaturesAssignableToTargetConstructSignatures = this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceConstructSignaturesAssignableToTargetConstructSignatures; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreAssignableToTargetIndexSignatures = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(source, target); - var areSourceIndexSignaturesAssignableToTargetIndexSignatures = this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return areSourceIndexSignaturesAssignableToTargetIndexSignatures; - }; - - PullTypeResolver.prototype.typeIsAssignableToFunction = function (source, ast, context) { - if (source.isFunctionType()) { +var ts; +(function (ts) { + ts.Diagnostics = { + Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." }, + _0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." }, + Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, + Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, + Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, + Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, + A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer." }, + An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, + An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, + An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, + A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." }, + An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." }, + A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." }, + A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." }, + Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, + _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, + _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, + _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, + An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." }, + Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, + Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, + A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." }, + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element." }, + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration." }, + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter." }, + A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, + A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, + A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, + Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer." }, + An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, + Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, + A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, + Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty." }, + Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, + with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, + delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, + Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, + A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, + Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected." }, + Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected." }, + A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." }, + A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, + Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, + An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, + Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: 1 /* Error */, key: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: 1 /* Error */, key: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: 1 /* Error */, key: "Statement expected." }, + case_or_default_expected: { code: 1130, category: 1 /* Error */, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: 1 /* Error */, key: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." }, + Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." }, + Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." }, + String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here." }, + catch_or_finally_expected: { code: 1143, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, + Block_or_expected: { code: 1144, category: 1 /* Error */, key: "Block or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, + Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, + Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: 1 /* Error */, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_an_external_module: { code: 2306, category: 1 /* Error */, key: "File '{0}' is not an external module." }, + Cannot_find_external_module_0: { code: 2307, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: 1 /* Error */, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: 1 /* Error */, key: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1 /* Error */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2320, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1_Colon: { code: 2322, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, + Type_0_is_not_assignable_to_type_1: { code: 2323, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, + Private_property_0_cannot_be_reimplemented: { code: 2325, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, + Types_of_property_0_are_incompatible_Colon: { code: 2326, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2327, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, + Types_of_parameters_0_and_1_are_incompatible_Colon: { code: 2328, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, + Index_signature_is_missing_in_type_0: { code: 2329, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible_Colon: { code: 2330, category: 1 /* Error */, key: "Index signatures are incompatible:" }, + this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, + Property_0_is_inaccessible: { code: 2341, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 2343, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 2353, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1 /* Error */, key: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + No_best_common_type_exists_between_0_1_and_2: { code: 2366, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, + No_best_common_type_exists_between_0_and_1: { code: 2367, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: 1 /* Error */, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: 1 /* Error */, key: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_or_private: { code: 2385, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: 1 /* Error */, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: 1 /* Error */, key: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: 1 /* Error */, key: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: 1 /* Error */, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2397, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2398, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: 1 /* Error */, key: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_0_incorrectly_extends_base_class_1_Colon: { code: 2416, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: 2418, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, + Class_0_incorrectly_implements_interface_1_Colon: { code: 2421, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1 /* Error */, key: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1 /* Error */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1 /* Error */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1_Colon: { code: 2429, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1 /* Error */, key: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1 /* Error */, key: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1 /* Error */, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1 /* Error */, key: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1 /* Error */, key: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, + The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." }, + Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, + Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, + Unsupported_file_encoding: { code: 5013, category: 1 /* Error */, key: "Unsupported file encoding." }, + Unknown_compiler_option_0: { code: 5023, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, + Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, + Concatenate_and_emit_output_to_single_file: { code: 6001, category: 2 /* Message */, key: "Concatenate and emit output to single file." }, + Generates_corresponding_d_ts_file: { code: 6002, category: 2 /* Message */, key: "Generates corresponding '.d.ts' file." }, + Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: 2 /* Message */, key: "Specifies the location where debugger should locate map files instead of generated locations." }, + Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: 2 /* Message */, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." }, + Watch_input_files: { code: 6005, category: 2 /* Message */, key: "Watch input files." }, + Redirect_output_structure_to_the_directory: { code: 6006, category: 2 /* Message */, key: "Redirect output structure to the directory." }, + Do_not_emit_comments_to_output: { code: 6009, category: 2 /* Message */, key: "Do not emit comments to output." }, + Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: 2 /* Message */, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, + Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2 /* Message */, key: "Specify module code generation: 'commonjs' or 'amd'" }, + Print_this_message: { code: 6017, category: 2 /* Message */, key: "Print this message." }, + Print_the_compiler_s_version: { code: 6019, category: 2 /* Message */, key: "Print the compiler's version." }, + Syntax_Colon_0: { code: 6023, category: 2 /* Message */, key: "Syntax: {0}" }, + options: { code: 6024, category: 2 /* Message */, key: "options" }, + file: { code: 6025, category: 2 /* Message */, key: "file" }, + Examples_Colon_0: { code: 6026, category: 2 /* Message */, key: "Examples: {0}" }, + Options_Colon: { code: 6027, category: 2 /* Message */, key: "Options:" }, + Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, + Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2 /* Message */, key: "Insert command line options and files from a file." }, + File_change_detected_Compiling: { code: 6032, category: 2 /* Message */, key: "File change detected. Compiling..." }, + KIND: { code: 6034, category: 2 /* Message */, key: "KIND" }, + FILE: { code: 6035, category: 2 /* Message */, key: "FILE" }, + VERSION: { code: 6036, category: 2 /* Message */, key: "VERSION" }, + LOCATION: { code: 6037, category: 2 /* Message */, key: "LOCATION" }, + DIRECTORY: { code: 6038, category: 2 /* Message */, key: "DIRECTORY" }, + Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2 /* Message */, key: "Compilation complete. Watching for file changes." }, + Generates_corresponding_map_file: { code: 6043, category: 2 /* Message */, key: "Generates corresponding '.map' file." }, + Compiler_option_0_expects_an_argument: { code: 6044, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, + Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_or_es5: { code: 6047, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: 1 /* Error */, key: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: 1 /* Error */, key: "Corrupted locale file {0}." }, + Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, + Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, + Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, + Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1 /* Error */, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, + Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, + Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, + Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." } + }; +})(ts || (ts = {})); +var ts; +(function (ts) { + var textToToken = { + "any": 101 /* AnyKeyword */, + "boolean": 102 /* BooleanKeyword */, + "break": 56 /* BreakKeyword */, + "case": 57 /* CaseKeyword */, + "catch": 58 /* CatchKeyword */, + "class": 59 /* ClassKeyword */, + "continue": 61 /* ContinueKeyword */, + "const": 60 /* ConstKeyword */, + "constructor": 103 /* ConstructorKeyword */, + "debugger": 62 /* DebuggerKeyword */, + "declare": 104 /* DeclareKeyword */, + "default": 63 /* DefaultKeyword */, + "delete": 64 /* DeleteKeyword */, + "do": 65 /* DoKeyword */, + "else": 66 /* ElseKeyword */, + "enum": 67 /* EnumKeyword */, + "export": 68 /* ExportKeyword */, + "extends": 69 /* ExtendsKeyword */, + "false": 70 /* FalseKeyword */, + "finally": 71 /* FinallyKeyword */, + "for": 72 /* ForKeyword */, + "function": 73 /* FunctionKeyword */, + "get": 105 /* GetKeyword */, + "if": 74 /* IfKeyword */, + "implements": 92 /* ImplementsKeyword */, + "import": 75 /* ImportKeyword */, + "in": 76 /* InKeyword */, + "instanceof": 77 /* InstanceOfKeyword */, + "interface": 93 /* InterfaceKeyword */, + "let": 94 /* LetKeyword */, + "module": 106 /* ModuleKeyword */, + "new": 78 /* NewKeyword */, + "null": 79 /* NullKeyword */, + "number": 108 /* NumberKeyword */, + "package": 95 /* PackageKeyword */, + "private": 96 /* PrivateKeyword */, + "protected": 97 /* ProtectedKeyword */, + "public": 98 /* PublicKeyword */, + "require": 107 /* RequireKeyword */, + "return": 80 /* ReturnKeyword */, + "set": 109 /* SetKeyword */, + "static": 99 /* StaticKeyword */, + "string": 110 /* StringKeyword */, + "super": 81 /* SuperKeyword */, + "switch": 82 /* SwitchKeyword */, + "this": 83 /* ThisKeyword */, + "throw": 84 /* ThrowKeyword */, + "true": 85 /* TrueKeyword */, + "try": 86 /* TryKeyword */, + "typeof": 87 /* TypeOfKeyword */, + "var": 88 /* VarKeyword */, + "void": 89 /* VoidKeyword */, + "while": 90 /* WhileKeyword */, + "with": 91 /* WithKeyword */, + "yield": 100 /* YieldKeyword */, + "{": 5 /* OpenBraceToken */, + "}": 6 /* CloseBraceToken */, + "(": 7 /* OpenParenToken */, + ")": 8 /* CloseParenToken */, + "[": 9 /* OpenBracketToken */, + "]": 10 /* CloseBracketToken */, + ".": 11 /* DotToken */, + "...": 12 /* DotDotDotToken */, + ";": 13 /* SemicolonToken */, + ",": 14 /* CommaToken */, + "<": 15 /* LessThanToken */, + ">": 16 /* GreaterThanToken */, + "<=": 17 /* LessThanEqualsToken */, + ">=": 18 /* GreaterThanEqualsToken */, + "==": 19 /* EqualsEqualsToken */, + "!=": 20 /* ExclamationEqualsToken */, + "===": 21 /* EqualsEqualsEqualsToken */, + "!==": 22 /* ExclamationEqualsEqualsToken */, + "=>": 23 /* EqualsGreaterThanToken */, + "+": 24 /* PlusToken */, + "-": 25 /* MinusToken */, + "*": 26 /* AsteriskToken */, + "/": 27 /* SlashToken */, + "%": 28 /* PercentToken */, + "++": 29 /* PlusPlusToken */, + "--": 30 /* MinusMinusToken */, + "<<": 31 /* LessThanLessThanToken */, + ">>": 32 /* GreaterThanGreaterThanToken */, + ">>>": 33 /* GreaterThanGreaterThanGreaterThanToken */, + "&": 34 /* AmpersandToken */, + "|": 35 /* BarToken */, + "^": 36 /* CaretToken */, + "!": 37 /* ExclamationToken */, + "~": 38 /* TildeToken */, + "&&": 39 /* AmpersandAmpersandToken */, + "||": 40 /* BarBarToken */, + "?": 41 /* QuestionToken */, + ":": 42 /* ColonToken */, + "=": 43 /* EqualsToken */, + "+=": 44 /* PlusEqualsToken */, + "-=": 45 /* MinusEqualsToken */, + "*=": 46 /* AsteriskEqualsToken */, + "/=": 47 /* SlashEqualsToken */, + "%=": 48 /* PercentEqualsToken */, + "<<=": 49 /* LessThanLessThanEqualsToken */, + ">>=": 50 /* GreaterThanGreaterThanEqualsToken */, + ">>>=": 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */, + "&=": 52 /* AmpersandEqualsToken */, + "|=": 53 /* BarEqualsToken */, + "^=": 54 /* CaretEqualsToken */ + }; + var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + function lookupInUnicodeMap(code, map) { + if (code < map[0]) { + return false; + } + var lo = 0; + var hi = map.length; + var mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { return true; } - - return this.cachedFunctionInterfaceType() && this.sourceIsAssignableToTarget(source, this.cachedFunctionInterfaceType(), ast, context); - }; - - PullTypeResolver.prototype.signatureIsAssignableToTarget = function (s1, s2, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.setEnclosingTypeForSymbols(s1, s2); - var isSignatureIsAssignableToTarget = this.signatureIsRelatableToTarget(s1, s2, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSignatureIsAssignableToTarget; - }; - - PullTypeResolver.prototype.sourceIsAssignableToTarget = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTarget(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsAssignableToTargetWithNewEnclosingTypes = function (source, target, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - return this.sourceIsRelatableToTargetWithNewEnclosingTypes(source, target, true, this.assignableCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.getSymbolForRelationshipCheck = function (symbol) { - if (symbol && symbol.isTypeReference()) { - return symbol.getReferencedTypeSymbol(); - } - - return symbol; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; + if (code < map[mid]) { + hi = mid; } - - if (source && target) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - return this.infinitelyExpandingSourceTypeIsRelatableToTargetType(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - } + else { + lo = mid + 2; } - - return this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWithNewEnclosingTypes = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - var isSourceRelatable = this.sourceIsRelatableToTarget(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - return isSourceRelatable; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetInCache = function (source, target, comparisonCache, comparisonInfo) { - var isRelatable = comparisonCache.valueAt(source.pullSymbolID, target.pullSymbolID); - - if (isRelatable) { - return { isRelatable: isRelatable }; + } + return false; + } + function isUnicodeIdentifierStart(code, languageVersion) { + return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierStart) : lookupInUnicodeMap(code, unicodeES5IdentifierStart); + } + function isUnicodeIdentifierPart(code, languageVersion) { + return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierPart) : lookupInUnicodeMap(code, unicodeES5IdentifierPart); + } + function makeReverseMap(source) { + var result = []; + for (var name in source) { + if (source.hasOwnProperty(name)) { + result[source[name]] = name; } - - if (isRelatable != undefined && !comparisonInfo) { - return { isRelatable: isRelatable }; + } + return result; + } + var tokenStrings = makeReverseMap(textToToken); + function tokenToString(t) { + return tokenStrings[t]; + } + ts.tokenToString = tokenToString; + function getLineStarts(text) { + var result = new Array(); + var pos = 0; + var lineStart = 0; + while (pos < text.length) { + switch (text.charCodeAt(pos++)) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos) === 10 /* lineFeed */) { + pos++; + } + case 10 /* lineFeed */: + result.push(lineStart); + lineStart = pos; + break; } - - return null; + } + result.push(lineStart); + return result; + } + ts.getLineStarts = getLineStarts; + function getLineAndCharacterOfPosition(lineStarts, position) { + var lineNumber = ts.binarySearch(lineStarts, position); + if (lineNumber < 0) { + lineNumber = (~lineNumber) - 1; + } + return { + line: lineNumber + 1, + character: position - lineStarts[lineNumber] + 1 }; - - PullTypeResolver.prototype.sourceIsRelatableToTarget = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - source = this.getSymbolForRelationshipCheck(source); - target = this.getSymbolForRelationshipCheck(target); - - if (source === target) { - return true; - } - - if (!(source && target)) { - return true; - } - - var sourceApparentType = this.getApparentType(source); - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(source, target, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - if (source === this.semanticInfoChain.stringTypeSymbol && target.isPrimitive() && target.isStringConstant()) { - return comparisonInfo && comparisonInfo.stringConstantVal && (comparisonInfo.stringConstantVal.kind() === 14 /* StringLiteral */) && (TypeScript.stripStartAndEndQuotes(comparisonInfo.stringConstantVal.text()) === TypeScript.stripStartAndEndQuotes(target.name)); - } - - if (assignableTo) { - if (this.isAnyOrEquivalent(source) || this.isAnyOrEquivalent(target)) { - return true; - } - } else { - if (this.isAnyOrEquivalent(target)) { - return true; - } - } - - if (target === this.semanticInfoChain.stringTypeSymbol && source.isPrimitive() && source.isStringConstant()) { - return true; - } - - if (source.isPrimitive() && source.isStringConstant() && target.isPrimitive() && target.isStringConstant()) { - return TypeScript.stripStartAndEndQuotes(source.name) === TypeScript.stripStartAndEndQuotes(target.name); - } - - if (source === this.semanticInfoChain.undefinedTypeSymbol) { - return true; - } - - if ((source === this.semanticInfoChain.nullTypeSymbol) && (target !== this.semanticInfoChain.undefinedTypeSymbol && target != this.semanticInfoChain.voidTypeSymbol)) { - return true; - } - - if (target === this.semanticInfoChain.voidTypeSymbol) { - if (source === this.semanticInfoChain.undefinedTypeSymbol || source == this.semanticInfoChain.nullTypeSymbol) { - return true; - } - - return false; - } else if (source === this.semanticInfoChain.voidTypeSymbol) { - if (target === this.semanticInfoChain.anyTypeSymbol) { - return true; - } - - return false; - } - - if (target === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(source)) { - return true; - } - - if (source === this.semanticInfoChain.numberTypeSymbol && TypeScript.PullHelpers.symbolIsEnum(target)) { - return assignableTo; - } - - if (TypeScript.PullHelpers.symbolIsEnum(target) && TypeScript.PullHelpers.symbolIsEnum(source)) { - return this.symbolsShareDeclaration(target, source); - } - - if ((source.kind & 64 /* Enum */) || (target.kind & 64 /* Enum */)) { - return false; - } - - if (source.getIsSpecialized() && target.getIsSpecialized()) { - if (TypeScript.PullHelpers.getRootType(source) === TypeScript.PullHelpers.getRootType(target) && TypeScript.PullHelpers.getRootType(source).isNamedTypeSymbol()) { - var sourceTypeArguments = source.getTypeArguments(); - var targetTypeArguments = target.getTypeArguments(); - - if (sourceTypeArguments && targetTypeArguments) { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - for (var i = 0; i < sourceTypeArguments.length; i++) { - if (!this.sourceIsRelatableToTargetWithNewEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, null, isComparingInstantiatedSignatures)) { + } + ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; + function positionToLineAndCharacter(text, pos) { + var lineStarts = getLineStarts(text); + return getLineAndCharacterOfPosition(lineStarts, pos); + } + ts.positionToLineAndCharacter = positionToLineAndCharacter; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function isWhiteSpace(ch) { + return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; + } + function isLineBreak(ch) { + return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; + } + function isDigit(ch) { + return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; + } + function isOctalDigit(ch) { + return ch >= 48 /* _0 */ && ch <= 55 /* _7 */; + } + ts.isOctalDigit = isOctalDigit; + function skipTrivia(text, pos, stopAfterLineBreak) { + while (true) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) + pos++; + case 10 /* lineFeed */: + pos++; + if (stopAfterLineBreak) + return pos; + continue; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 47 /* slash */: + if (text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { break; } + pos++; } - - if (i === sourceTypeArguments.length) { - return true; - } else { - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, undefined); + continue; + } + if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + pos += 2; + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + break; + } + pos++; } + continue; } - } + break; + default: + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + pos++; + continue; + } + break; } - - if (target.isTypeParameter()) { - if (source.isTypeParameter()) { - if (!source.getConstraint()) { - return this.typesAreIdentical(target, source, context); - } else { - return this.isSourceTypeParameterConstrainedToTargetTypeParameter(source, target); + return pos; + } + } + ts.skipTrivia = skipTrivia; + function getCommentRanges(text, pos, trailing) { + var result; + var collecting = trailing; + while (true) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) + pos++; + case 10 /* lineFeed */: + pos++; + if (trailing) { + return result; + } + collecting = true; + continue; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 47 /* slash */: + var nextChar = text.charCodeAt(pos + 1); + if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { + var startPos = pos; + pos += 2; + if (nextChar === 47 /* slash */) { + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + } + else { + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + break; + } + pos++; + } + } + if (collecting) { + if (!result) + result = []; + result.push({ pos: startPos, end: pos }); + } + continue; } - } else { - if (isComparingInstantiatedSignatures) { - target = target.getBaseConstraint(this.semanticInfoChain); - } else { - return this.typesAreIdentical(target, sourceApparentType, context); + break; + default: + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + pos++; + continue; } - } - } - - if (sourceApparentType.isPrimitive() || target.isPrimitive()) { - return false; + break; } - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, true); - - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(sourceApparentType, target); - var isRelatable = this.sourceIsRelatableToTargetWorker(sourceApparentType, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - - comparisonCache.setValueAt(source.pullSymbolID, target.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.isSourceTypeParameterConstrainedToTargetTypeParameter = function (source, target) { - var current = source; - while (current && current.isTypeParameter()) { - if (current === target) { - return true; + return result; + } + } + function getLeadingComments(text, pos) { + return getCommentRanges(text, pos, false); + } + ts.getLeadingComments = getLeadingComments; + function getTrailingComments(text, pos) { + return getCommentRanges(text, pos, true); + } + ts.getTrailingComments = getTrailingComments; + function createScanner(languageVersion, text, onError, onComment) { + var pos; + var len; + var startPos; + var tokenPos; + var token; + var tokenValue; + var precedingLineBreak; + function error(message) { + if (onError) { + onError(message); + } + } + function isIdentifierStart(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); + } + function isIdentifierPart(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); + } + function scanNumber() { + var start = pos; + while (isDigit(text.charCodeAt(pos))) + pos++; + if (text.charCodeAt(pos) === 46 /* dot */) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + } + var end = pos; + if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) { + pos++; + if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) + pos++; + if (isDigit(text.charCodeAt(pos))) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + end = pos; + } + else { + error(ts.Diagnostics.Digit_expected); + } + } + return +(text.substring(start, end)); + } + function scanOctalDigits() { + var start = pos; + while (isOctalDigit(text.charCodeAt(pos))) { + pos++; + } + return +(text.substring(start, pos)); + } + function scanHexDigits(count, exact) { + var digits = 0; + var value = 0; + while (digits < count || !exact) { + var ch = text.charCodeAt(pos); + if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { + value = value * 16 + ch - 48 /* _0 */; + } + else if (ch >= 65 /* A */ && ch <= 70 /* F */) { + value = value * 16 + ch - 65 /* A */ + 10; + } + else if (ch >= 97 /* a */ && ch <= 102 /* f */) { + value = value * 16 + ch - 97 /* a */ + 10; + } + else { + break; } - - current = current.getConstraint(); - } - return false; - }; - - PullTypeResolver.prototype.sourceIsRelatableToTargetWorker = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (target.hasMembers() && !this.sourceMembersAreRelatableToTargetMembers(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceCallSignaturesAreRelatableToTargetCallSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; - } - - if (!this.sourceConstructSignaturesAreRelatableToTargetConstructSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; + pos++; + digits++; } - - if (!this.sourceIndexSignaturesAreRelatableToTargetIndexSignatures(source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; + if (digits < count) { + value = -1; } - - return true; - }; - - PullTypeResolver.prototype.sourceMembersAreRelatableToTargetMembers = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetProps = target.getAllMembers(68147712 /* SomeValue */, 0 /* all */); - - for (var itargetProp = 0; itargetProp < targetProps.length; itargetProp++) { - var targetProp = targetProps[itargetProp]; - - var sourceProp = this._getNamedPropertySymbolOfAugmentedType(targetProp.name, source); - - this.resolveDeclaredSymbol(targetProp, context); - - var targetPropType = targetProp.type; - - if (!sourceProp) { - if (!(targetProp.isOptional)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_is_missing_property_1_from_type_2, [source.toString(enclosingSymbol), targetProp.getScopedNameEx().toString(), target.toString(enclosingSymbol)])); - } - return false; - } - continue; + return value; + } + function scanString() { + var quote = text.charCodeAt(pos++); + var result = ""; + var start = pos; + while (true) { + if (pos >= len) { + result += text.substring(start, pos); + error(ts.Diagnostics.Unexpected_end_of_text); + break; } - - if (!this.sourcePropertyIsRelatableToTargetProperty(source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures)) { - return false; + var ch = text.charCodeAt(pos); + if (ch === quote) { + result += text.substring(start, pos); + pos++; + break; } - } - - return true; - }; - - PullTypeResolver.prototype.infinitelyExpandingSourceTypeIsRelatableToTargetType = function (sourceType, targetType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var widenedTargetType = targetType.widenedType(this, null, context); - var widenedSourceType = sourceType.widenedType(this, null, context); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type, [sourceType.getScopedNameEx(enclosingSymbol).toString(), targetType.toString(enclosingSymbol)])); + if (ch === 92 /* backslash */) { + result += text.substring(start, pos); + pos++; + if (pos >= len) { + error(ts.Diagnostics.Unexpected_end_of_text); + break; } - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)])); + ch = text.charCodeAt(pos++); + switch (ch) { + case 48 /* _0 */: + result += "\0"; + break; + case 98 /* b */: + result += "\b"; + break; + case 116 /* t */: + result += "\t"; + break; + case 110 /* n */: + result += "\n"; + break; + case 118 /* v */: + result += "\v"; + break; + case 102 /* f */: + result += "\f"; + break; + case 114 /* r */: + result += "\r"; + break; + case 39 /* singleQuote */: + result += "\'"; + break; + case 34 /* doubleQuote */: + result += "\""; + break; + case 120 /* x */: + case 117 /* u */: + var ch = scanHexDigits(ch === 120 /* x */ ? 2 : 4, true); + if (ch >= 0) { + result += String.fromCharCode(ch); + } + else { + error(ts.Diagnostics.Hexadecimal_digit_expected); + } + break; + case 13 /* carriageReturn */: + if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) + pos++; + break; + case 10 /* lineFeed */: + case 8232 /* lineSeparator */: + case 8233 /* paragraphSeparator */: + break; + default: + result += String.fromCharCode(ch); } - return false; - } - - var comparisonInfoTypeArgumentsCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoTypeArgumentsCheck = new TypeComparisonInfo(comparisonInfo); + start = pos; + continue; } - var isRelatable = true; - for (var i = 0; i < sourceTypeArguments.length && isRelatable; i++) { - context.walkTypeArgument(i); - - if (!this.sourceIsRelatableToTargetInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], assignableTo, comparisonCache, ast, context, comparisonInfoTypeArgumentsCheck, isComparingInstantiatedSignatures)) { - isRelatable = false; - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - - if (comparisonInfoTypeArgumentsCheck && comparisonInfoTypeArgumentsCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol), comparisonInfoTypeArgumentsCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments, [sourceType.toString(enclosingSymbol), targetType.toString(enclosingSymbol)]); - } - comparisonInfo.addMessage(message); - } - } - - context.postWalkTypeArgument(); + if (isLineBreak(ch)) { + result += text.substring(start, pos); + error(ts.Diagnostics.Unterminated_string_literal); + break; } + pos++; } - - comparisonCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.infinitelyExpandingTypesAreIdentical = function (sourceType, targetType, context) { - var widenedTargetType = targetType.widenedType(this, null, null); - var widenedSourceType = sourceType.widenedType(this, null, null); - - if ((widenedSourceType !== this.semanticInfoChain.anyTypeSymbol) && (widenedTargetType !== this.semanticInfoChain.anyTypeSymbol)) { - var sourceTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(sourceType); - var targetTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(targetType); - if (sourceTypeNamedTypeReference !== targetTypeNamedTypeReference) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - var sourceTypeArguments = sourceType.getTypeArguments(); - var targetTypeArguments = targetType.getTypeArguments(); - - if (!sourceTypeArguments && !targetTypeArguments) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - } - - if (!(sourceTypeArguments && targetTypeArguments) || sourceTypeArguments.length !== targetTypeArguments.length) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - - for (var i = 0; i < sourceTypeArguments.length; i++) { - context.walkTypeArgument(i); - var areIdentical = this.typesAreIdenticalInEnclosingTypes(sourceTypeArguments[i], targetTypeArguments[i], context); - context.postWalkTypeArgument(); - - if (!areIdentical) { - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, false); - return false; - } - } + return result; + } + function peekUnicodeEscape() { + if (pos + 5 < len && text.charCodeAt(pos + 1) === 117 /* u */) { + var start = pos; + pos += 2; + var value = scanHexDigits(4, true); + pos = start; + return value; } - - this.identicalCache.setValueAt(sourceType.pullSymbolID, targetType.pullSymbolID, true); - return true; - }; - - PullTypeResolver.prototype.sourcePropertyIsRelatableToTargetProperty = function (source, target, sourceProp, targetProp, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceAndTargetAreConstructors = source.isConstructor() && target.isConstructor(); - - var getNames = function (takeTypesFromPropertyContainers) { - var enclosingSymbol = _this.getEnclosingSymbolForAST(ast); - var sourceType = takeTypesFromPropertyContainers ? sourceProp.getContainer() : source; - var targetType = takeTypesFromPropertyContainers ? targetProp.getContainer() : target; - if (sourceAndTargetAreConstructors) { - sourceType = sourceType.getAssociatedContainerType(); - targetType = targetType.getAssociatedContainerType(); - } - return { - propertyName: targetProp.getScopedNameEx().toString(), - sourceTypeName: sourceType.toString(enclosingSymbol), - targetTypeName: targetType.toString(enclosingSymbol) - }; - }; - - var targetPropIsPrivate = targetProp.anyDeclHasFlag(2 /* Private */); - var sourcePropIsPrivate = sourceProp.anyDeclHasFlag(2 /* Private */); - - if (targetPropIsPrivate !== sourcePropIsPrivate) { - if (comparisonInfo) { - var names = getNames(true); - var code; - if (targetPropIsPrivate) { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2; - } else { - code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2 : TypeScript.DiagnosticCode.Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2; - } - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName])); - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - } - return false; - } else if (sourcePropIsPrivate && targetPropIsPrivate) { - var targetDecl = targetProp.getDeclarations()[0]; - var sourceDecl = sourceProp.getDeclarations()[0]; - - if (targetDecl !== sourceDecl) { - if (comparisonInfo) { - var names = getNames(true); - - comparisonInfo.flags |= 128 /* InconsistantPropertyAccesibility */; - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_0_and_1_define_static_property_2_as_private : TypeScript.DiagnosticCode.Types_0_and_1_define_property_2_as_private; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(code, [names.sourceTypeName, names.targetTypeName, names.propertyName])); + return -1; + } + function scanIdentifierParts() { + var result = ""; + var start = pos; + while (pos < len) { + var ch = text.charCodeAt(pos); + if (isIdentifierPart(ch)) { + pos++; + } + else if (ch === 92 /* backslash */) { + ch = peekUnicodeEscape(); + if (!(ch >= 0 && isIdentifierPart(ch))) { + break; } - - return false; + result += text.substring(start, pos); + result += String.fromCharCode(ch); + pos += 6; + start = pos; } - } - - if (sourceProp.isOptional && !targetProp.isOptional) { - if (comparisonInfo) { - var names = getNames(true); - comparisonInfo.flags |= 2 /* RequiredPropertyIsMissing */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2, [names.propertyName, names.sourceTypeName, names.targetTypeName])); + else { + break; } - return false; - } - - this.resolveDeclaredSymbol(sourceProp, context); - - var sourcePropType = sourceProp.type; - var targetPropType = targetProp.type; - - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourcePropType, targetPropType, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - var comparisonInfoPropertyTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoPropertyTypeCheck = new TypeComparisonInfo(comparisonInfo); } - - context.walkMemberTypes(targetProp.name); - var isSourcePropertyRelatableToTargetProperty = this.sourceIsRelatableToTargetInEnclosingTypes(sourcePropType, targetPropType, assignableTo, comparisonCache, ast, context, comparisonInfoPropertyTypeCheck, isComparingInstantiatedSignatures); - context.postWalkMemberTypes(); - - if (!isSourcePropertyRelatableToTargetProperty && comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - comparisonInfo.flags |= 32 /* IncompatiblePropertyTypes */; - var message; - var names = getNames(false); - if (comparisonInfoPropertyTypeCheck && comparisonInfoPropertyTypeCheck.message) { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3 : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName, comparisonInfoPropertyTypeCheck.message]); - } else { - var code = sourceAndTargetAreConstructors ? TypeScript.DiagnosticCode.Types_of_static_property_0_of_class_1_and_class_2_are_incompatible : TypeScript.DiagnosticCode.Types_of_property_0_of_types_1_and_2_are_incompatible; - message = TypeScript.getDiagnosticMessage(code, [names.propertyName, names.sourceTypeName, names.targetTypeName]); - } - comparisonInfo.addMessage(message); + result += text.substring(start, pos); + return result; + } + function getIdentifierToken() { + var len = tokenValue.length; + if (len >= 2 && len <= 11) { + var ch = tokenValue.charCodeAt(0); + if (ch >= 97 /* a */ && ch <= 122 /* z */ && hasOwnProperty.call(textToToken, tokenValue)) { + return token = textToToken[tokenValue]; + } } - - return isSourcePropertyRelatableToTargetProperty; - }; - - PullTypeResolver.prototype.sourceCallSignaturesAreRelatableToTargetCallSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetCallSigs = target.getCallSignatures(); - - if (targetCallSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); + return token = 55 /* Identifier */; + } + function scan() { + startPos = pos; + precedingLineBreak = false; + while (true) { + tokenPos = pos; + if (pos >= len) { + return token = 1 /* EndOfFileToken */; } - - var sourceCallSigs = source.getCallSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceCallSigs, targetCallSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (sourceCallSigs.length && targetCallSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); + var ch = text.charCodeAt(pos); + switch (ch) { + case 10 /* lineFeed */: + case 13 /* carriageReturn */: + precedingLineBreak = true; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 33 /* exclamation */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 22 /* ExclamationEqualsEqualsToken */; + } + return pos += 2, token = 20 /* ExclamationEqualsToken */; + } + return pos++, token = 37 /* ExclamationToken */; + case 34 /* doubleQuote */: + case 39 /* singleQuote */: + tokenValue = scanString(); + return token = 3 /* StringLiteral */; + case 37 /* percent */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 48 /* PercentEqualsToken */; + } + return pos++, token = 28 /* PercentToken */; + case 38 /* ampersand */: + if (text.charCodeAt(pos + 1) === 38 /* ampersand */) { + return pos += 2, token = 39 /* AmpersandAmpersandToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 52 /* AmpersandEqualsToken */; + } + return pos++, token = 34 /* AmpersandToken */; + case 40 /* openParen */: + return pos++, token = 7 /* OpenParenToken */; + case 41 /* closeParen */: + return pos++, token = 8 /* CloseParenToken */; + case 42 /* asterisk */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 46 /* AsteriskEqualsToken */; + } + return pos++, token = 26 /* AsteriskToken */; + case 43 /* plus */: + if (text.charCodeAt(pos + 1) === 43 /* plus */) { + return pos += 2, token = 29 /* PlusPlusToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 44 /* PlusEqualsToken */; + } + return pos++, token = 24 /* PlusToken */; + case 44 /* comma */: + return pos++, token = 14 /* CommaToken */; + case 45 /* minus */: + if (text.charCodeAt(pos + 1) === 45 /* minus */) { + return pos += 2, token = 30 /* MinusMinusToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 45 /* MinusEqualsToken */; + } + return pos++, token = 25 /* MinusToken */; + case 46 /* dot */: + if (isDigit(text.charCodeAt(pos + 1))) { + tokenValue = "" + scanNumber(); + return token = 2 /* NumericLiteral */; + } + if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) { + return pos += 3, token = 12 /* DotDotDotToken */; + } + return pos++, token = 11 /* DotToken */; + case 47 /* slash */: + if (text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < len) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; } - } else { - var hasSig = targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetCallSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_call_signature_but_type_1_lacks_one, [hasSig, lacksSig]); + if (onComment) { + onComment(tokenPos, pos); + } + continue; } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; - } - } - - return true; - }; - - PullTypeResolver.prototype.sourceConstructSignaturesAreRelatableToTargetConstructSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetConstructSigs = target.getConstructSignatures(); - if (targetConstructSigs.length) { - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - var sourceConstructSigs = source.getConstructSignatures(); - if (!this.signatureGroupIsRelatableToTarget(source, target, sourceConstructSigs, targetConstructSigs, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures)) { - if (comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - var message; - if (sourceConstructSigs.length && targetConstructSigs.length) { - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Construct_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); + if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + pos += 2; + var commentClosed = false; + while (pos < len) { + var ch = text.charCodeAt(pos); + if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + commentClosed = true; + break; + } + if (isLineBreak(ch)) { + precedingLineBreak = true; + } + pos++; + } + if (!commentClosed) { + error(ts.Diagnostics.Asterisk_Slash_expected); } - } else { - var hasSig = targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - var lacksSig = !targetConstructSigs.length ? target.toString(enclosingSymbol) : source.toString(enclosingSymbol); - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_0_requires_a_construct_signature_but_type_1_lacks_one, [hasSig, lacksSig]); + if (onComment) { + onComment(tokenPos, pos); + } + continue; } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 47 /* SlashEqualsToken */; + } + return pos++, token = 27 /* SlashToken */; + case 48 /* _0 */: + if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) { + pos += 2; + var value = scanHexDigits(1, false); + if (value < 0) { + error(ts.Diagnostics.Hexadecimal_digit_expected); + value = 0; + } + tokenValue = "" + value; + return 2 /* NumericLiteral */; + } + if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) { + tokenValue = "" + scanOctalDigits(); + return 2 /* NumericLiteral */; + } + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + case 56 /* _8 */: + case 57 /* _9 */: + tokenValue = "" + scanNumber(); + return token = 2 /* NumericLiteral */; + case 58 /* colon */: + return pos++, token = 42 /* ColonToken */; + case 59 /* semicolon */: + return pos++, token = 13 /* SemicolonToken */; + case 60 /* lessThan */: + if (text.charCodeAt(pos + 1) === 60 /* lessThan */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 49 /* LessThanLessThanEqualsToken */; + } + return pos += 2, token = 31 /* LessThanLessThanToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 17 /* LessThanEqualsToken */; + } + return pos++, token = 15 /* LessThanToken */; + case 61 /* equals */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 21 /* EqualsEqualsEqualsToken */; + } + return pos += 2, token = 19 /* EqualsEqualsToken */; + } + if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { + return pos += 2, token = 23 /* EqualsGreaterThanToken */; + } + return pos++, token = 43 /* EqualsToken */; + case 62 /* greaterThan */: + return pos++, token = 16 /* GreaterThanToken */; + case 63 /* question */: + return pos++, token = 41 /* QuestionToken */; + case 91 /* openBracket */: + return pos++, token = 9 /* OpenBracketToken */; + case 93 /* closeBracket */: + return pos++, token = 10 /* CloseBracketToken */; + case 94 /* caret */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 54 /* CaretEqualsToken */; + } + return pos++, token = 36 /* CaretToken */; + case 123 /* openBrace */: + return pos++, token = 5 /* OpenBraceToken */; + case 124 /* bar */: + if (text.charCodeAt(pos + 1) === 124 /* bar */) { + return pos += 2, token = 40 /* BarBarToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 53 /* BarEqualsToken */; + } + return pos++, token = 35 /* BarToken */; + case 125 /* closeBrace */: + return pos++, token = 6 /* CloseBraceToken */; + case 126 /* tilde */: + return pos++, token = 38 /* TildeToken */; + case 92 /* backslash */: + var ch = peekUnicodeEscape(); + if (ch >= 0 && isIdentifierStart(ch)) { + pos += 6; + tokenValue = String.fromCharCode(ch) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + error(ts.Diagnostics.Invalid_character); + return pos++, token = 0 /* Unknown */; + default: + if (isIdentifierStart(ch)) { + pos++; + while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos))) + pos++; + tokenValue = text.substring(tokenPos, pos); + if (ch === 92 /* backslash */) { + tokenValue += scanIdentifierParts(); + } + return token = getIdentifierToken(); + } + else if (isWhiteSpace(ch)) { + pos++; + continue; + } + else if (isLineBreak(ch)) { + precedingLineBreak = true; + pos++; + continue; + } + error(ts.Diagnostics.Invalid_character); + return pos++, token = 0 /* Unknown */; } } - - return true; - }; - - PullTypeResolver.prototype.sourceIndexSignaturesAreRelatableToTargetIndexSignatures = function (source, target, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var targetIndexSigs = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(target, context); - var targetStringSig = targetIndexSigs.stringSignature; - var targetNumberSig = targetIndexSigs.numericSignature; - - if (targetStringSig || targetNumberSig) { - var sourceIndexSigs = this.getBothKindsOfIndexSignaturesIncludingAugmentedType(source, context); - var enclosingTypeIndexSigs = context.getBothKindOfIndexSignatures(true, false); - var sourceStringSig = sourceIndexSigs.stringSignature; - var sourceNumberSig = sourceIndexSigs.numericSignature; - - var comparable = true; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo && !comparisonInfo.onlyCaptureFirstError) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo); - } - - if (targetStringSig) { - if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, true); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetStringSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; + } + function reScanGreaterToken() { + if (token === 16 /* GreaterThanToken */) { + if (text.charCodeAt(pos) === 62 /* greaterThan */) { + if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + } + return pos += 2, token = 33 /* GreaterThanGreaterThanGreaterThanToken */; } - } - - if (comparable && targetNumberSig) { - if (sourceNumberSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, false, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceNumberSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else if (sourceStringSig) { - context.walkIndexSignatureReturnTypes(enclosingTypeIndexSigs, true, false); - comparable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceStringSig.returnType, targetNumberSig.returnType, assignableTo, comparisonCache, ast, context, comparisonInfoSignatuesTypeCheck, isComparingInstantiatedSignatures); - context.postWalkIndexSignatureReturnTypes(); - } else { - comparable = false; + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 50 /* GreaterThanGreaterThanEqualsToken */; } + return pos++, token = 32 /* GreaterThanGreaterThanToken */; } - - if (!comparable) { - if (comparisonInfo) { - var message; - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfoSignatuesTypeCheck && comparisonInfoSignatuesTypeCheck.message) { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfoSignatuesTypeCheck.message]); - } else { - message = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Index_signatures_of_types_0_and_1_are_incompatible, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)]); - } - comparisonInfo.flags |= 4 /* IncompatibleSignatures */; - comparisonInfo.addMessage(message); - } - return false; + if (text.charCodeAt(pos) === 61 /* equals */) { + return pos++, token = 18 /* GreaterThanEqualsToken */; } } - - return true; - }; - - PullTypeResolver.prototype.signatureGroupIsRelatableToTarget = function (source, target, sourceSG, targetSG, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - if (sourceSG === targetSG) { - return true; - } - - if (!(sourceSG.length && targetSG.length)) { - return false; - } - - var foundMatch = false; - - var targetExcludeDefinition = targetSG.length > 1; - var sourceExcludeDefinition = sourceSG.length > 1; - var sigsCompared = 0; - var comparisonInfoSignatuesTypeCheck = null; - if (comparisonInfo) { - comparisonInfoSignatuesTypeCheck = new TypeComparisonInfo(comparisonInfo, true); - comparisonInfoSignatuesTypeCheck.message = comparisonInfo.message; - } - for (var iMSig = 0; iMSig < targetSG.length; iMSig++) { - var mSig = targetSG[iMSig]; - - if (mSig.isStringConstantOverloadSignature() || (targetExcludeDefinition && mSig.isDefinition())) { - continue; - } - - for (var iNSig = 0; iNSig < sourceSG.length; iNSig++) { - var nSig = sourceSG[iNSig]; - - if (nSig.isStringConstantOverloadSignature() || (sourceExcludeDefinition && nSig.isDefinition())) { - continue; + return token; + } + function reScanSlashToken() { + if (token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) { + var p = tokenPos + 1; + var inEscape = false; + var inCharacterClass = false; + while (true) { + if (p >= len) { + return token; } - - context.walkSignatures(nSig.kind, iNSig, iMSig); - var isSignatureRelatableToTarget = this.signatureIsRelatableToTarget(nSig, mSig, assignableTo, comparisonCache, ast, context, sigsCompared == 0 ? comparisonInfoSignatuesTypeCheck : null, isComparingInstantiatedSignatures); - context.postWalkSignatures(); - - sigsCompared++; - - if (isSignatureRelatableToTarget) { - foundMatch = true; + var ch = text.charCodeAt(p); + if (isLineBreak(ch)) { + return token; + } + if (inEscape) { + inEscape = false; + } + else if (ch === 47 /* slash */ && !inCharacterClass) { break; } + else if (ch === 91 /* openBracket */) { + inCharacterClass = true; + } + else if (ch === 92 /* backslash */) { + inEscape = true; + } + else if (ch === 93 /* closeBracket */) { + inCharacterClass = false; + } + p++; } - - if (foundMatch) { - foundMatch = false; - continue; - } - - if (comparisonInfo && sigsCompared == 1) { - comparisonInfo.message = comparisonInfoSignatuesTypeCheck.message; - } - - return false; - } - - return true; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTarget = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var isRelatableInfo = this.sourceIsRelatableToTargetInCache(sourceSig, targetSig, comparisonCache, comparisonInfo); - if (isRelatableInfo) { - return isRelatableInfo.isRelatable; - } - - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, true); - var isRelatable = this.signatureIsRelatableToTargetWorker(sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - comparisonCache.setValueAt(sourceSig.pullSymbolID, targetSig.pullSymbolID, isRelatable); - return isRelatable; - }; - - PullTypeResolver.prototype.signatureIsRelatableToTargetWorker = function (sourceSig, targetSig, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures) { - var _this = this; - var sourceParameters = sourceSig.parameters; - var targetParameters = targetSig.parameters; - - if (!sourceParameters || !targetParameters) { - return false; - } - - var targetNonOptionalParamCount = targetSig.nonOptionalParamCount; - var sourceNonOptionalParamCount = sourceSig.nonOptionalParamCount; - - if (!targetSig.hasVarArgs && sourceNonOptionalParamCount > targetParameters.length) { - if (comparisonInfo) { - comparisonInfo.flags |= 3 /* SourceSignatureHasTooManyParameters */; - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Call_signature_expects_0_or_fewer_parameters, [targetParameters.length])); + p++; + while (isIdentifierPart(text.charCodeAt(p))) { + p++; } - return false; - } - - if (this.signaturesAreIdentical(sourceSig, targetSig, context)) { - return true; + pos = p; + tokenValue = text.substring(tokenPos, pos); + token = 4 /* RegularExpressionLiteral */; } - - if (targetSig.isGeneric()) { - targetSig = this.instantiateSignatureToAny(targetSig); - } - - if (sourceSig.isGeneric()) { - sourceSig = this.instantiateSignatureToAny(sourceSig); - } - - var sourceReturnType = sourceSig.returnType; - var targetReturnType = targetSig.returnType; - - if (targetReturnType !== this.semanticInfoChain.voidTypeSymbol) { - context.walkReturnTypes(); - var returnTypesAreRelatable = this.sourceIsRelatableToTargetInEnclosingTypes(sourceReturnType, targetReturnType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.postWalkReturnTypes(); - if (!returnTypesAreRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 16 /* IncompatibleReturnTypes */; - } - - return false; - } + return token; + } + function tryScan(callback) { + var savePos = pos; + var saveStartPos = startPos; + var saveTokenPos = tokenPos; + var saveToken = token; + var saveTokenValue = tokenValue; + var savePrecedingLineBreak = precedingLineBreak; + var result = callback(); + if (!result) { + pos = savePos; + startPos = saveStartPos; + tokenPos = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + precedingLineBreak = savePrecedingLineBreak; } - - return targetSig.forAllCorrespondingParameterTypesInThisAndOtherSignature(sourceSig, function (targetParamType, sourceParamType, iParam) { - context.walkParameterTypes(iParam); - var areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(sourceParamType, targetParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - if (!areParametersRelatable) { - context.swapEnclosingTypeWalkers(); - areParametersRelatable = _this.sourceIsRelatableToTargetInEnclosingTypes(targetParamType, sourceParamType, assignableTo, comparisonCache, ast, context, comparisonInfo, isComparingInstantiatedSignatures); - context.swapEnclosingTypeWalkers(); - } - context.postWalkParameterTypes(); - - if (!areParametersRelatable) { - if (comparisonInfo) { - comparisonInfo.flags |= 64 /* IncompatibleParameterTypes */; - } - } - - return areParametersRelatable; - }); + return result; + } + function setText(newText) { + text = newText || ""; + len = text.length; + setTextPos(0); + } + function setTextPos(textPos) { + pos = textPos; + startPos = textPos; + tokenPos = textPos; + token = 0 /* Unknown */; + precedingLineBreak = false; + } + setText(text); + return { + getStartPos: function () { return startPos; }, + getTextPos: function () { return pos; }, + getToken: function () { return token; }, + getTokenPos: function () { return tokenPos; }, + getTokenText: function () { return text.substring(tokenPos, pos); }, + getTokenValue: function () { return tokenValue; }, + hasPrecedingLineBreak: function () { return precedingLineBreak; }, + isIdentifier: function () { return token === 55 /* Identifier */ || token > ts.SyntaxKind.LastReservedWord; }, + isReservedWord: function () { return token >= ts.SyntaxKind.FirstReservedWord && token <= ts.SyntaxKind.LastReservedWord; }, + reScanGreaterToken: reScanGreaterToken, + reScanSlashToken: reScanSlashToken, + scan: scan, + setText: setText, + setTextPos: setTextPos, + tryScan: tryScan }; - - PullTypeResolver.prototype.resolveOverloads = function (application, group, haveTypeArgumentsAtCallSite, context, diagnostics) { - var _this = this; - var hasOverloads = group.length > 1; - var comparisonInfo = new TypeComparisonInfo(); - var args = application.argumentList ? application.argumentList.arguments : null; - - var initialCandidates = TypeScript.ArrayUtilities.where(group, function (signature) { - if (hasOverloads && signature.isDefinition()) { - return false; - } - - var rootSignature = signature.getRootSymbol(); - if (haveTypeArgumentsAtCallSite && !rootSignature.isGeneric()) { - return false; - } - - return _this.overloadHasCorrectArity(signature, args); - }); - - var firstAssignableButNotSupertypeSignature = null; - var firstAssignableWithProvisionalErrorsSignature = null; - - for (var i = 0; i < initialCandidates.length; i++) { - var applicability = this.overloadIsApplicable(initialCandidates[i], args, context, comparisonInfo); - if (applicability === 3 /* Subtype */) { - return initialCandidates[i]; - } else if (applicability === 2 /* AssignableWithNoProvisionalErrors */ && !firstAssignableButNotSupertypeSignature) { - firstAssignableButNotSupertypeSignature = initialCandidates[i]; - } else if (applicability === 1 /* AssignableButWithProvisionalErrors */ && !firstAssignableWithProvisionalErrorsSignature) { - firstAssignableWithProvisionalErrorsSignature = initialCandidates[i]; + } + ts.createScanner = createScanner; +})(ts || (ts = {})); +var ts; +(function (ts) { + (function (SyntaxKind) { + SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; + SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken"; + SyntaxKind[SyntaxKind["NumericLiteral"] = 2] = "NumericLiteral"; + SyntaxKind[SyntaxKind["StringLiteral"] = 3] = "StringLiteral"; + SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 4] = "RegularExpressionLiteral"; + SyntaxKind[SyntaxKind["OpenBraceToken"] = 5] = "OpenBraceToken"; + SyntaxKind[SyntaxKind["CloseBraceToken"] = 6] = "CloseBraceToken"; + SyntaxKind[SyntaxKind["OpenParenToken"] = 7] = "OpenParenToken"; + SyntaxKind[SyntaxKind["CloseParenToken"] = 8] = "CloseParenToken"; + SyntaxKind[SyntaxKind["OpenBracketToken"] = 9] = "OpenBracketToken"; + SyntaxKind[SyntaxKind["CloseBracketToken"] = 10] = "CloseBracketToken"; + SyntaxKind[SyntaxKind["DotToken"] = 11] = "DotToken"; + SyntaxKind[SyntaxKind["DotDotDotToken"] = 12] = "DotDotDotToken"; + SyntaxKind[SyntaxKind["SemicolonToken"] = 13] = "SemicolonToken"; + SyntaxKind[SyntaxKind["CommaToken"] = 14] = "CommaToken"; + SyntaxKind[SyntaxKind["LessThanToken"] = 15] = "LessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanToken"] = 16] = "GreaterThanToken"; + SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 17] = "LessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 18] = "GreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 19] = "EqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 20] = "ExclamationEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 21] = "EqualsEqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 22] = "ExclamationEqualsEqualsToken"; + SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 23] = "EqualsGreaterThanToken"; + SyntaxKind[SyntaxKind["PlusToken"] = 24] = "PlusToken"; + SyntaxKind[SyntaxKind["MinusToken"] = 25] = "MinusToken"; + SyntaxKind[SyntaxKind["AsteriskToken"] = 26] = "AsteriskToken"; + SyntaxKind[SyntaxKind["SlashToken"] = 27] = "SlashToken"; + SyntaxKind[SyntaxKind["PercentToken"] = 28] = "PercentToken"; + SyntaxKind[SyntaxKind["PlusPlusToken"] = 29] = "PlusPlusToken"; + SyntaxKind[SyntaxKind["MinusMinusToken"] = 30] = "MinusMinusToken"; + SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 31] = "LessThanLessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 32] = "GreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 33] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["AmpersandToken"] = 34] = "AmpersandToken"; + SyntaxKind[SyntaxKind["BarToken"] = 35] = "BarToken"; + SyntaxKind[SyntaxKind["CaretToken"] = 36] = "CaretToken"; + SyntaxKind[SyntaxKind["ExclamationToken"] = 37] = "ExclamationToken"; + SyntaxKind[SyntaxKind["TildeToken"] = 38] = "TildeToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 39] = "AmpersandAmpersandToken"; + SyntaxKind[SyntaxKind["BarBarToken"] = 40] = "BarBarToken"; + SyntaxKind[SyntaxKind["QuestionToken"] = 41] = "QuestionToken"; + SyntaxKind[SyntaxKind["ColonToken"] = 42] = "ColonToken"; + SyntaxKind[SyntaxKind["EqualsToken"] = 43] = "EqualsToken"; + SyntaxKind[SyntaxKind["PlusEqualsToken"] = 44] = "PlusEqualsToken"; + SyntaxKind[SyntaxKind["MinusEqualsToken"] = 45] = "MinusEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 46] = "AsteriskEqualsToken"; + SyntaxKind[SyntaxKind["SlashEqualsToken"] = 47] = "SlashEqualsToken"; + SyntaxKind[SyntaxKind["PercentEqualsToken"] = 48] = "PercentEqualsToken"; + SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 49] = "LessThanLessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 50] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 51] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 52] = "AmpersandEqualsToken"; + SyntaxKind[SyntaxKind["BarEqualsToken"] = 53] = "BarEqualsToken"; + SyntaxKind[SyntaxKind["CaretEqualsToken"] = 54] = "CaretEqualsToken"; + SyntaxKind[SyntaxKind["Identifier"] = 55] = "Identifier"; + SyntaxKind[SyntaxKind["BreakKeyword"] = 56] = "BreakKeyword"; + SyntaxKind[SyntaxKind["CaseKeyword"] = 57] = "CaseKeyword"; + SyntaxKind[SyntaxKind["CatchKeyword"] = 58] = "CatchKeyword"; + SyntaxKind[SyntaxKind["ClassKeyword"] = 59] = "ClassKeyword"; + SyntaxKind[SyntaxKind["ConstKeyword"] = 60] = "ConstKeyword"; + SyntaxKind[SyntaxKind["ContinueKeyword"] = 61] = "ContinueKeyword"; + SyntaxKind[SyntaxKind["DebuggerKeyword"] = 62] = "DebuggerKeyword"; + SyntaxKind[SyntaxKind["DefaultKeyword"] = 63] = "DefaultKeyword"; + SyntaxKind[SyntaxKind["DeleteKeyword"] = 64] = "DeleteKeyword"; + SyntaxKind[SyntaxKind["DoKeyword"] = 65] = "DoKeyword"; + SyntaxKind[SyntaxKind["ElseKeyword"] = 66] = "ElseKeyword"; + SyntaxKind[SyntaxKind["EnumKeyword"] = 67] = "EnumKeyword"; + SyntaxKind[SyntaxKind["ExportKeyword"] = 68] = "ExportKeyword"; + SyntaxKind[SyntaxKind["ExtendsKeyword"] = 69] = "ExtendsKeyword"; + SyntaxKind[SyntaxKind["FalseKeyword"] = 70] = "FalseKeyword"; + SyntaxKind[SyntaxKind["FinallyKeyword"] = 71] = "FinallyKeyword"; + SyntaxKind[SyntaxKind["ForKeyword"] = 72] = "ForKeyword"; + SyntaxKind[SyntaxKind["FunctionKeyword"] = 73] = "FunctionKeyword"; + SyntaxKind[SyntaxKind["IfKeyword"] = 74] = "IfKeyword"; + SyntaxKind[SyntaxKind["ImportKeyword"] = 75] = "ImportKeyword"; + SyntaxKind[SyntaxKind["InKeyword"] = 76] = "InKeyword"; + SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 77] = "InstanceOfKeyword"; + SyntaxKind[SyntaxKind["NewKeyword"] = 78] = "NewKeyword"; + SyntaxKind[SyntaxKind["NullKeyword"] = 79] = "NullKeyword"; + SyntaxKind[SyntaxKind["ReturnKeyword"] = 80] = "ReturnKeyword"; + SyntaxKind[SyntaxKind["SuperKeyword"] = 81] = "SuperKeyword"; + SyntaxKind[SyntaxKind["SwitchKeyword"] = 82] = "SwitchKeyword"; + SyntaxKind[SyntaxKind["ThisKeyword"] = 83] = "ThisKeyword"; + SyntaxKind[SyntaxKind["ThrowKeyword"] = 84] = "ThrowKeyword"; + SyntaxKind[SyntaxKind["TrueKeyword"] = 85] = "TrueKeyword"; + SyntaxKind[SyntaxKind["TryKeyword"] = 86] = "TryKeyword"; + SyntaxKind[SyntaxKind["TypeOfKeyword"] = 87] = "TypeOfKeyword"; + SyntaxKind[SyntaxKind["VarKeyword"] = 88] = "VarKeyword"; + SyntaxKind[SyntaxKind["VoidKeyword"] = 89] = "VoidKeyword"; + SyntaxKind[SyntaxKind["WhileKeyword"] = 90] = "WhileKeyword"; + SyntaxKind[SyntaxKind["WithKeyword"] = 91] = "WithKeyword"; + SyntaxKind[SyntaxKind["ImplementsKeyword"] = 92] = "ImplementsKeyword"; + SyntaxKind[SyntaxKind["InterfaceKeyword"] = 93] = "InterfaceKeyword"; + SyntaxKind[SyntaxKind["LetKeyword"] = 94] = "LetKeyword"; + SyntaxKind[SyntaxKind["PackageKeyword"] = 95] = "PackageKeyword"; + SyntaxKind[SyntaxKind["PrivateKeyword"] = 96] = "PrivateKeyword"; + SyntaxKind[SyntaxKind["ProtectedKeyword"] = 97] = "ProtectedKeyword"; + SyntaxKind[SyntaxKind["PublicKeyword"] = 98] = "PublicKeyword"; + SyntaxKind[SyntaxKind["StaticKeyword"] = 99] = "StaticKeyword"; + SyntaxKind[SyntaxKind["YieldKeyword"] = 100] = "YieldKeyword"; + SyntaxKind[SyntaxKind["AnyKeyword"] = 101] = "AnyKeyword"; + SyntaxKind[SyntaxKind["BooleanKeyword"] = 102] = "BooleanKeyword"; + SyntaxKind[SyntaxKind["ConstructorKeyword"] = 103] = "ConstructorKeyword"; + SyntaxKind[SyntaxKind["DeclareKeyword"] = 104] = "DeclareKeyword"; + SyntaxKind[SyntaxKind["GetKeyword"] = 105] = "GetKeyword"; + SyntaxKind[SyntaxKind["ModuleKeyword"] = 106] = "ModuleKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 107] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 108] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 109] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 110] = "StringKeyword"; + SyntaxKind[SyntaxKind["Missing"] = 111] = "Missing"; + SyntaxKind[SyntaxKind["QualifiedName"] = 112] = "QualifiedName"; + SyntaxKind[SyntaxKind["TypeParameter"] = 113] = "TypeParameter"; + SyntaxKind[SyntaxKind["Parameter"] = 114] = "Parameter"; + SyntaxKind[SyntaxKind["Property"] = 115] = "Property"; + SyntaxKind[SyntaxKind["Method"] = 116] = "Method"; + SyntaxKind[SyntaxKind["Constructor"] = 117] = "Constructor"; + SyntaxKind[SyntaxKind["GetAccessor"] = 118] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 119] = "SetAccessor"; + SyntaxKind[SyntaxKind["CallSignature"] = 120] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 121] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 122] = "IndexSignature"; + SyntaxKind[SyntaxKind["TypeReference"] = 123] = "TypeReference"; + SyntaxKind[SyntaxKind["TypeQuery"] = 124] = "TypeQuery"; + SyntaxKind[SyntaxKind["TypeLiteral"] = 125] = "TypeLiteral"; + SyntaxKind[SyntaxKind["ArrayType"] = 126] = "ArrayType"; + SyntaxKind[SyntaxKind["ArrayLiteral"] = 127] = "ArrayLiteral"; + SyntaxKind[SyntaxKind["ObjectLiteral"] = 128] = "ObjectLiteral"; + SyntaxKind[SyntaxKind["PropertyAssignment"] = 129] = "PropertyAssignment"; + SyntaxKind[SyntaxKind["PropertyAccess"] = 130] = "PropertyAccess"; + SyntaxKind[SyntaxKind["IndexedAccess"] = 131] = "IndexedAccess"; + SyntaxKind[SyntaxKind["CallExpression"] = 132] = "CallExpression"; + SyntaxKind[SyntaxKind["NewExpression"] = 133] = "NewExpression"; + SyntaxKind[SyntaxKind["TypeAssertion"] = 134] = "TypeAssertion"; + SyntaxKind[SyntaxKind["ParenExpression"] = 135] = "ParenExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 136] = "FunctionExpression"; + SyntaxKind[SyntaxKind["ArrowFunction"] = 137] = "ArrowFunction"; + SyntaxKind[SyntaxKind["PrefixOperator"] = 138] = "PrefixOperator"; + SyntaxKind[SyntaxKind["PostfixOperator"] = 139] = "PostfixOperator"; + SyntaxKind[SyntaxKind["BinaryExpression"] = 140] = "BinaryExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 141] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 142] = "OmittedExpression"; + SyntaxKind[SyntaxKind["Block"] = 143] = "Block"; + SyntaxKind[SyntaxKind["VariableStatement"] = 144] = "VariableStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 145] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 146] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 148] = "DoStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 149] = "WhileStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 150] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 151] = "ForInStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 152] = "ContinueStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 153] = "BreakStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 154] = "ReturnStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 155] = "WithStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 156] = "SwitchStatement"; + SyntaxKind[SyntaxKind["CaseClause"] = 157] = "CaseClause"; + SyntaxKind[SyntaxKind["DefaultClause"] = 158] = "DefaultClause"; + SyntaxKind[SyntaxKind["LabelledStatement"] = 159] = "LabelledStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 160] = "ThrowStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 161] = "TryStatement"; + SyntaxKind[SyntaxKind["TryBlock"] = 162] = "TryBlock"; + SyntaxKind[SyntaxKind["CatchBlock"] = 163] = "CatchBlock"; + SyntaxKind[SyntaxKind["FinallyBlock"] = 164] = "FinallyBlock"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 165] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 166] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 167] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["FunctionBlock"] = 168] = "FunctionBlock"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 169] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 170] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 171] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 172] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ModuleBlock"] = 173] = "ModuleBlock"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 174] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 175] = "ExportAssignment"; + SyntaxKind[SyntaxKind["EnumMember"] = 176] = "EnumMember"; + SyntaxKind[SyntaxKind["SourceFile"] = 177] = "SourceFile"; + SyntaxKind[SyntaxKind["Program"] = 178] = "Program"; + SyntaxKind[SyntaxKind["SyntaxList"] = 179] = "SyntaxList"; + SyntaxKind[SyntaxKind["Count"] = 180] = "Count"; + SyntaxKind[SyntaxKind["FirstAssignment"] = SyntaxKind.EqualsToken] = "FirstAssignment"; + SyntaxKind[SyntaxKind["LastAssignment"] = SyntaxKind.CaretEqualsToken] = "LastAssignment"; + SyntaxKind[SyntaxKind["FirstReservedWord"] = SyntaxKind.BreakKeyword] = "FirstReservedWord"; + SyntaxKind[SyntaxKind["LastReservedWord"] = SyntaxKind.WithKeyword] = "LastReservedWord"; + SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.BreakKeyword] = "FirstKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.StringKeyword] = "LastKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedWord"; + SyntaxKind[SyntaxKind["LastFutureReservedWord"] = SyntaxKind.YieldKeyword] = "LastFutureReservedWord"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = SyntaxKind.TypeReference] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = SyntaxKind.ArrayType] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.CaretEqualsToken] = "LastPunctuation"; + })(ts.SyntaxKind || (ts.SyntaxKind = {})); + var SyntaxKind = ts.SyntaxKind; + (function (NodeFlags) { + NodeFlags[NodeFlags["Export"] = 0x00000001] = "Export"; + NodeFlags[NodeFlags["Ambient"] = 0x00000002] = "Ambient"; + NodeFlags[NodeFlags["QuestionMark"] = 0x00000004] = "QuestionMark"; + NodeFlags[NodeFlags["Rest"] = 0x00000008] = "Rest"; + NodeFlags[NodeFlags["Public"] = 0x00000010] = "Public"; + NodeFlags[NodeFlags["Private"] = 0x00000020] = "Private"; + NodeFlags[NodeFlags["Static"] = 0x00000040] = "Static"; + NodeFlags[NodeFlags["MultiLine"] = 0x00000080] = "MultiLine"; + NodeFlags[NodeFlags["Synthetic"] = 0x00000100] = "Synthetic"; + NodeFlags[NodeFlags["DeclarationFile"] = 0x00000200] = "DeclarationFile"; + NodeFlags[NodeFlags["Modifier"] = NodeFlags.Export | NodeFlags.Ambient | NodeFlags.Public | NodeFlags.Private | NodeFlags.Static] = "Modifier"; + })(ts.NodeFlags || (ts.NodeFlags = {})); + var NodeFlags = ts.NodeFlags; + (function (TypeFormatFlags) { + TypeFormatFlags[TypeFormatFlags["None"] = 0x00000000] = "None"; + TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; + TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 0x00000002] = "UseTypeOfFunction"; + })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); + var TypeFormatFlags = ts.TypeFormatFlags; + (function (SymbolAccessibility) { + SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible"; + SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible"; + SymbolAccessibility[SymbolAccessibility["CannotBeNamed"] = 2] = "CannotBeNamed"; + })(ts.SymbolAccessibility || (ts.SymbolAccessibility = {})); + var SymbolAccessibility = ts.SymbolAccessibility; + (function (SymbolFlags) { + SymbolFlags[SymbolFlags["Variable"] = 0x00000001] = "Variable"; + SymbolFlags[SymbolFlags["Property"] = 0x00000002] = "Property"; + SymbolFlags[SymbolFlags["EnumMember"] = 0x00000004] = "EnumMember"; + SymbolFlags[SymbolFlags["Function"] = 0x00000008] = "Function"; + SymbolFlags[SymbolFlags["Class"] = 0x00000010] = "Class"; + SymbolFlags[SymbolFlags["Interface"] = 0x00000020] = "Interface"; + SymbolFlags[SymbolFlags["Enum"] = 0x00000040] = "Enum"; + SymbolFlags[SymbolFlags["ValueModule"] = 0x00000080] = "ValueModule"; + SymbolFlags[SymbolFlags["NamespaceModule"] = 0x00000100] = "NamespaceModule"; + SymbolFlags[SymbolFlags["TypeLiteral"] = 0x00000200] = "TypeLiteral"; + SymbolFlags[SymbolFlags["ObjectLiteral"] = 0x00000400] = "ObjectLiteral"; + SymbolFlags[SymbolFlags["Method"] = 0x00000800] = "Method"; + SymbolFlags[SymbolFlags["Constructor"] = 0x00001000] = "Constructor"; + SymbolFlags[SymbolFlags["GetAccessor"] = 0x00002000] = "GetAccessor"; + SymbolFlags[SymbolFlags["SetAccessor"] = 0x00004000] = "SetAccessor"; + SymbolFlags[SymbolFlags["CallSignature"] = 0x00008000] = "CallSignature"; + SymbolFlags[SymbolFlags["ConstructSignature"] = 0x00010000] = "ConstructSignature"; + SymbolFlags[SymbolFlags["IndexSignature"] = 0x00020000] = "IndexSignature"; + SymbolFlags[SymbolFlags["TypeParameter"] = 0x00040000] = "TypeParameter"; + SymbolFlags[SymbolFlags["ExportValue"] = 0x00080000] = "ExportValue"; + SymbolFlags[SymbolFlags["ExportType"] = 0x00100000] = "ExportType"; + SymbolFlags[SymbolFlags["ExportNamespace"] = 0x00200000] = "ExportNamespace"; + SymbolFlags[SymbolFlags["Import"] = 0x00400000] = "Import"; + SymbolFlags[SymbolFlags["Instantiated"] = 0x00800000] = "Instantiated"; + SymbolFlags[SymbolFlags["Merged"] = 0x01000000] = "Merged"; + SymbolFlags[SymbolFlags["Transient"] = 0x02000000] = "Transient"; + SymbolFlags[SymbolFlags["Prototype"] = 0x04000000] = "Prototype"; + SymbolFlags[SymbolFlags["Value"] = SymbolFlags.Variable | SymbolFlags.Property | SymbolFlags.EnumMember | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule | SymbolFlags.Method | SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Value"; + SymbolFlags[SymbolFlags["Type"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral | SymbolFlags.TypeParameter] = "Type"; + SymbolFlags[SymbolFlags["Namespace"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Namespace"; + SymbolFlags[SymbolFlags["Module"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Module"; + SymbolFlags[SymbolFlags["Accessor"] = SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Accessor"; + SymbolFlags[SymbolFlags["Signature"] = SymbolFlags.CallSignature | SymbolFlags.ConstructSignature | SymbolFlags.IndexSignature] = "Signature"; + SymbolFlags[SymbolFlags["ParameterExcludes"] = SymbolFlags.Value] = "ParameterExcludes"; + SymbolFlags[SymbolFlags["VariableExcludes"] = SymbolFlags.Value & ~SymbolFlags.Variable] = "VariableExcludes"; + SymbolFlags[SymbolFlags["PropertyExcludes"] = SymbolFlags.Value] = "PropertyExcludes"; + SymbolFlags[SymbolFlags["EnumMemberExcludes"] = SymbolFlags.Value] = "EnumMemberExcludes"; + SymbolFlags[SymbolFlags["FunctionExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.ValueModule)] = "FunctionExcludes"; + SymbolFlags[SymbolFlags["ClassExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~SymbolFlags.ValueModule] = "ClassExcludes"; + SymbolFlags[SymbolFlags["InterfaceExcludes"] = SymbolFlags.Type & ~SymbolFlags.Interface] = "InterfaceExcludes"; + SymbolFlags[SymbolFlags["EnumExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~(SymbolFlags.Enum | SymbolFlags.ValueModule)] = "EnumExcludes"; + SymbolFlags[SymbolFlags["ValueModuleExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule)] = "ValueModuleExcludes"; + SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; + SymbolFlags[SymbolFlags["MethodExcludes"] = SymbolFlags.Value & ~SymbolFlags.Method] = "MethodExcludes"; + SymbolFlags[SymbolFlags["GetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.SetAccessor] = "GetAccessorExcludes"; + SymbolFlags[SymbolFlags["SetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.GetAccessor] = "SetAccessorExcludes"; + SymbolFlags[SymbolFlags["TypeParameterExcludes"] = SymbolFlags.Type & ~SymbolFlags.TypeParameter] = "TypeParameterExcludes"; + SymbolFlags[SymbolFlags["ImportExcludes"] = SymbolFlags.Import] = "ImportExcludes"; + SymbolFlags[SymbolFlags["ModuleMember"] = SymbolFlags.Variable | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.Module | SymbolFlags.Import] = "ModuleMember"; + SymbolFlags[SymbolFlags["ExportHasLocal"] = SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule] = "ExportHasLocal"; + SymbolFlags[SymbolFlags["HasLocals"] = SymbolFlags.Function | SymbolFlags.Module | SymbolFlags.Method | SymbolFlags.Constructor | SymbolFlags.Accessor | SymbolFlags.Signature] = "HasLocals"; + SymbolFlags[SymbolFlags["HasExports"] = SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.Module] = "HasExports"; + SymbolFlags[SymbolFlags["HasMembers"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral] = "HasMembers"; + SymbolFlags[SymbolFlags["IsContainer"] = SymbolFlags.HasLocals | SymbolFlags.HasExports | SymbolFlags.HasMembers] = "IsContainer"; + SymbolFlags[SymbolFlags["PropertyOrAccessor"] = SymbolFlags.Property | SymbolFlags.Accessor] = "PropertyOrAccessor"; + SymbolFlags[SymbolFlags["Export"] = SymbolFlags.ExportNamespace | SymbolFlags.ExportType | SymbolFlags.ExportValue] = "Export"; + })(ts.SymbolFlags || (ts.SymbolFlags = {})); + var SymbolFlags = ts.SymbolFlags; + (function (NodeCheckFlags) { + NodeCheckFlags[NodeCheckFlags["TypeChecked"] = 0x00000001] = "TypeChecked"; + NodeCheckFlags[NodeCheckFlags["LexicalThis"] = 0x00000002] = "LexicalThis"; + NodeCheckFlags[NodeCheckFlags["CaptureThis"] = 0x00000004] = "CaptureThis"; + NodeCheckFlags[NodeCheckFlags["EmitExtends"] = 0x00000008] = "EmitExtends"; + NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 0x00000010] = "SuperInstance"; + NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 0x00000020] = "SuperStatic"; + NodeCheckFlags[NodeCheckFlags["ContextChecked"] = 0x00000040] = "ContextChecked"; + })(ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); + var NodeCheckFlags = ts.NodeCheckFlags; + (function (TypeFlags) { + TypeFlags[TypeFlags["Any"] = 0x00000001] = "Any"; + TypeFlags[TypeFlags["String"] = 0x00000002] = "String"; + TypeFlags[TypeFlags["Number"] = 0x00000004] = "Number"; + TypeFlags[TypeFlags["Boolean"] = 0x00000008] = "Boolean"; + TypeFlags[TypeFlags["Void"] = 0x00000010] = "Void"; + TypeFlags[TypeFlags["Undefined"] = 0x00000020] = "Undefined"; + TypeFlags[TypeFlags["Null"] = 0x00000040] = "Null"; + TypeFlags[TypeFlags["Enum"] = 0x00000080] = "Enum"; + TypeFlags[TypeFlags["StringLiteral"] = 0x00000100] = "StringLiteral"; + TypeFlags[TypeFlags["TypeParameter"] = 0x00000200] = "TypeParameter"; + TypeFlags[TypeFlags["Class"] = 0x00000400] = "Class"; + TypeFlags[TypeFlags["Interface"] = 0x00000800] = "Interface"; + TypeFlags[TypeFlags["Reference"] = 0x00001000] = "Reference"; + TypeFlags[TypeFlags["Anonymous"] = 0x00002000] = "Anonymous"; + TypeFlags[TypeFlags["FromSignature"] = 0x00004000] = "FromSignature"; + TypeFlags[TypeFlags["Intrinsic"] = TypeFlags.Any | TypeFlags.String | TypeFlags.Number | TypeFlags.Boolean | TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null] = "Intrinsic"; + TypeFlags[TypeFlags["StringLike"] = TypeFlags.String | TypeFlags.StringLiteral] = "StringLike"; + TypeFlags[TypeFlags["NumberLike"] = TypeFlags.Number | TypeFlags.Enum] = "NumberLike"; + TypeFlags[TypeFlags["ObjectType"] = TypeFlags.Class | TypeFlags.Interface | TypeFlags.Reference | TypeFlags.Anonymous] = "ObjectType"; + })(ts.TypeFlags || (ts.TypeFlags = {})); + var TypeFlags = ts.TypeFlags; + (function (SignatureKind) { + SignatureKind[SignatureKind["Call"] = 0] = "Call"; + SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; + })(ts.SignatureKind || (ts.SignatureKind = {})); + var SignatureKind = ts.SignatureKind; + (function (IndexKind) { + IndexKind[IndexKind["String"] = 0] = "String"; + IndexKind[IndexKind["Number"] = 1] = "Number"; + })(ts.IndexKind || (ts.IndexKind = {})); + var IndexKind = ts.IndexKind; + (function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; + })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); + var DiagnosticCategory = ts.DiagnosticCategory; + (function (ModuleKind) { + ModuleKind[ModuleKind["None"] = 0] = "None"; + ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; + ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; + })(ts.ModuleKind || (ts.ModuleKind = {})); + var ModuleKind = ts.ModuleKind; + (function (ScriptTarget) { + ScriptTarget[ScriptTarget["ES3"] = 0] = "ES3"; + ScriptTarget[ScriptTarget["ES5"] = 1] = "ES5"; + })(ts.ScriptTarget || (ts.ScriptTarget = {})); + var ScriptTarget = ts.ScriptTarget; + (function (CharacterCodes) { + CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 0x7F] = "maxAsciiCharacter"; + CharacterCodes[CharacterCodes["lineFeed"] = 0x0A] = "lineFeed"; + CharacterCodes[CharacterCodes["carriageReturn"] = 0x0D] = "carriageReturn"; + CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; + CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; + CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; + CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; + CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; + CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; + CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; + CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; + CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; + CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; + CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; + CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; + CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; + CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; + CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; + CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; + CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; + CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; + CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; + CharacterCodes[CharacterCodes["mathematicalSpace"] = 0x205F] = "mathematicalSpace"; + CharacterCodes[CharacterCodes["ogham"] = 0x1680] = "ogham"; + CharacterCodes[CharacterCodes["_"] = 0x5F] = "_"; + CharacterCodes[CharacterCodes["$"] = 0x24] = "$"; + CharacterCodes[CharacterCodes["_0"] = 0x30] = "_0"; + CharacterCodes[CharacterCodes["_1"] = 0x31] = "_1"; + CharacterCodes[CharacterCodes["_2"] = 0x32] = "_2"; + CharacterCodes[CharacterCodes["_3"] = 0x33] = "_3"; + CharacterCodes[CharacterCodes["_4"] = 0x34] = "_4"; + CharacterCodes[CharacterCodes["_5"] = 0x35] = "_5"; + CharacterCodes[CharacterCodes["_6"] = 0x36] = "_6"; + CharacterCodes[CharacterCodes["_7"] = 0x37] = "_7"; + CharacterCodes[CharacterCodes["_8"] = 0x38] = "_8"; + CharacterCodes[CharacterCodes["_9"] = 0x39] = "_9"; + CharacterCodes[CharacterCodes["a"] = 0x61] = "a"; + CharacterCodes[CharacterCodes["b"] = 0x62] = "b"; + CharacterCodes[CharacterCodes["c"] = 0x63] = "c"; + CharacterCodes[CharacterCodes["d"] = 0x64] = "d"; + CharacterCodes[CharacterCodes["e"] = 0x65] = "e"; + CharacterCodes[CharacterCodes["f"] = 0x66] = "f"; + CharacterCodes[CharacterCodes["g"] = 0x67] = "g"; + CharacterCodes[CharacterCodes["h"] = 0x68] = "h"; + CharacterCodes[CharacterCodes["i"] = 0x69] = "i"; + CharacterCodes[CharacterCodes["j"] = 0x6A] = "j"; + CharacterCodes[CharacterCodes["k"] = 0x6B] = "k"; + CharacterCodes[CharacterCodes["l"] = 0x6C] = "l"; + CharacterCodes[CharacterCodes["m"] = 0x6D] = "m"; + CharacterCodes[CharacterCodes["n"] = 0x6E] = "n"; + CharacterCodes[CharacterCodes["o"] = 0x6F] = "o"; + CharacterCodes[CharacterCodes["p"] = 0x70] = "p"; + CharacterCodes[CharacterCodes["q"] = 0x71] = "q"; + CharacterCodes[CharacterCodes["r"] = 0x72] = "r"; + CharacterCodes[CharacterCodes["s"] = 0x73] = "s"; + CharacterCodes[CharacterCodes["t"] = 0x74] = "t"; + CharacterCodes[CharacterCodes["u"] = 0x75] = "u"; + CharacterCodes[CharacterCodes["v"] = 0x76] = "v"; + CharacterCodes[CharacterCodes["w"] = 0x77] = "w"; + CharacterCodes[CharacterCodes["x"] = 0x78] = "x"; + CharacterCodes[CharacterCodes["y"] = 0x79] = "y"; + CharacterCodes[CharacterCodes["z"] = 0x7A] = "z"; + CharacterCodes[CharacterCodes["A"] = 0x41] = "A"; + CharacterCodes[CharacterCodes["B"] = 0x42] = "B"; + CharacterCodes[CharacterCodes["C"] = 0x43] = "C"; + CharacterCodes[CharacterCodes["D"] = 0x44] = "D"; + CharacterCodes[CharacterCodes["E"] = 0x45] = "E"; + CharacterCodes[CharacterCodes["F"] = 0x46] = "F"; + CharacterCodes[CharacterCodes["G"] = 0x47] = "G"; + CharacterCodes[CharacterCodes["H"] = 0x48] = "H"; + CharacterCodes[CharacterCodes["I"] = 0x49] = "I"; + CharacterCodes[CharacterCodes["J"] = 0x4A] = "J"; + CharacterCodes[CharacterCodes["K"] = 0x4B] = "K"; + CharacterCodes[CharacterCodes["L"] = 0x4C] = "L"; + CharacterCodes[CharacterCodes["M"] = 0x4D] = "M"; + CharacterCodes[CharacterCodes["N"] = 0x4E] = "N"; + CharacterCodes[CharacterCodes["O"] = 0x4F] = "O"; + CharacterCodes[CharacterCodes["P"] = 0x50] = "P"; + CharacterCodes[CharacterCodes["Q"] = 0x51] = "Q"; + CharacterCodes[CharacterCodes["R"] = 0x52] = "R"; + CharacterCodes[CharacterCodes["S"] = 0x53] = "S"; + CharacterCodes[CharacterCodes["T"] = 0x54] = "T"; + CharacterCodes[CharacterCodes["U"] = 0x55] = "U"; + CharacterCodes[CharacterCodes["V"] = 0x56] = "V"; + CharacterCodes[CharacterCodes["W"] = 0x57] = "W"; + CharacterCodes[CharacterCodes["X"] = 0x58] = "X"; + CharacterCodes[CharacterCodes["Y"] = 0x59] = "Y"; + CharacterCodes[CharacterCodes["Z"] = 0x5a] = "Z"; + CharacterCodes[CharacterCodes["ampersand"] = 0x26] = "ampersand"; + CharacterCodes[CharacterCodes["asterisk"] = 0x2A] = "asterisk"; + CharacterCodes[CharacterCodes["at"] = 0x40] = "at"; + CharacterCodes[CharacterCodes["backslash"] = 0x5C] = "backslash"; + CharacterCodes[CharacterCodes["bar"] = 0x7C] = "bar"; + CharacterCodes[CharacterCodes["caret"] = 0x5E] = "caret"; + CharacterCodes[CharacterCodes["closeBrace"] = 0x7D] = "closeBrace"; + CharacterCodes[CharacterCodes["closeBracket"] = 0x5D] = "closeBracket"; + CharacterCodes[CharacterCodes["closeParen"] = 0x29] = "closeParen"; + CharacterCodes[CharacterCodes["colon"] = 0x3A] = "colon"; + CharacterCodes[CharacterCodes["comma"] = 0x2C] = "comma"; + CharacterCodes[CharacterCodes["dot"] = 0x2E] = "dot"; + CharacterCodes[CharacterCodes["doubleQuote"] = 0x22] = "doubleQuote"; + CharacterCodes[CharacterCodes["equals"] = 0x3D] = "equals"; + CharacterCodes[CharacterCodes["exclamation"] = 0x21] = "exclamation"; + CharacterCodes[CharacterCodes["greaterThan"] = 0x3E] = "greaterThan"; + CharacterCodes[CharacterCodes["lessThan"] = 0x3C] = "lessThan"; + CharacterCodes[CharacterCodes["minus"] = 0x2D] = "minus"; + CharacterCodes[CharacterCodes["openBrace"] = 0x7B] = "openBrace"; + CharacterCodes[CharacterCodes["openBracket"] = 0x5B] = "openBracket"; + CharacterCodes[CharacterCodes["openParen"] = 0x28] = "openParen"; + CharacterCodes[CharacterCodes["percent"] = 0x25] = "percent"; + CharacterCodes[CharacterCodes["plus"] = 0x2B] = "plus"; + CharacterCodes[CharacterCodes["question"] = 0x3F] = "question"; + CharacterCodes[CharacterCodes["semicolon"] = 0x3B] = "semicolon"; + CharacterCodes[CharacterCodes["singleQuote"] = 0x27] = "singleQuote"; + CharacterCodes[CharacterCodes["slash"] = 0x2F] = "slash"; + CharacterCodes[CharacterCodes["tilde"] = 0x7E] = "tilde"; + CharacterCodes[CharacterCodes["backspace"] = 0x08] = "backspace"; + CharacterCodes[CharacterCodes["formFeed"] = 0x0C] = "formFeed"; + CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; + CharacterCodes[CharacterCodes["tab"] = 0x09] = "tab"; + CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; + })(ts.CharacterCodes || (ts.CharacterCodes = {})); + var CharacterCodes = ts.CharacterCodes; +})(ts || (ts = {})); +var ts; +(function (ts) { + function forEach(array, callback) { + var result; + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + if (result = callback(array[i])) + break; + } + } + return result; + } + ts.forEach = forEach; + function contains(array, value) { + if (array) { + var len = array.length; + for (var i = 0; i < len; i++) { + if (array[i] === value) { + return true; } } - - if (firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature) { - return firstAssignableButNotSupertypeSignature || firstAssignableWithProvisionalErrorsSignature; - } else { - var target = this.getCallTargetErrorSpanAST(application); - if (comparisonInfo.message) { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0, [comparisonInfo.message])); - } else { - diagnostics.push(this.semanticInfoChain.diagnosticFromAST(target, TypeScript.DiagnosticCode.Supplied_parameters_do_not_match_any_signature_of_call_target, null)); + } + return false; + } + ts.contains = contains; + function indexOf(array, value) { + if (array) { + var len = array.length; + for (var i = 0; i < len; i++) { + if (array[i] === value) { + return i; } } - - return null; - }; - - PullTypeResolver.prototype.getCallTargetErrorSpanAST = function (callEx) { - return (callEx.expression.kind() === 212 /* MemberAccessExpression */) ? callEx.expression.name : callEx.expression; - }; - - PullTypeResolver.prototype.overloadHasCorrectArity = function (signature, args) { - if (args == null) { - return signature.nonOptionalParamCount === 0; + } + return -1; + } + ts.indexOf = indexOf; + function filter(array, f) { + var result; + if (array) { + result = []; + for (var i = 0, len = array.length; i < len; i++) { + var item = array[i]; + if (f(item)) { + result.push(item); + } } - - var numberOfArgs = (args.nonSeparatorCount() && args.nonSeparatorCount() === args.separatorCount()) ? args.separatorCount() + 1 : args.nonSeparatorCount(); - if (numberOfArgs < signature.nonOptionalParamCount) { - return false; + } + return result; + } + ts.filter = filter; + function map(array, f) { + var result; + if (array) { + result = []; + var len = array.length; + for (var i = 0; i < len; i++) { + result.push(f(array[i])); } - if (!signature.hasVarArgs && numberOfArgs > signature.parameters.length) { - return false; + } + return result; + } + ts.map = map; + function concatenate(array1, array2) { + if (!array2.length) + return array1; + if (!array1.length) + return array2; + return array1.concat(array2); + } + ts.concatenate = concatenate; + function sum(array, prop) { + var result = 0; + for (var i = 0; i < array.length; i++) { + result += array[i][prop]; + } + return result; + } + ts.sum = sum; + function binarySearch(array, value) { + var low = 0; + var high = array.length - 1; + while (low <= high) { + var middle = low + ((high - low) >> 1); + var midValue = array[middle]; + if (midValue === value) { + return middle; } - - return true; - }; - - PullTypeResolver.prototype.overloadIsApplicable = function (signature, args, context, comparisonInfo) { - if (args === null) { - return 3 /* Subtype */; + else if (midValue > value) { + high = middle - 1; } - - var isInVarArg = false; - var parameters = signature.parameters; - var paramType = null; - - var overloadApplicability = 3 /* Subtype */; - - for (var i = 0; i < args.nonSeparatorCount(); i++) { - if (!isInVarArg) { - this.resolveDeclaredSymbol(parameters[i], context); - - if (parameters[i].isVarArg) { - paramType = parameters[i].type.getElementType() || this.getNewErrorTypeSymbol(parameters[i].type.getName()); - isInVarArg = true; - } else { - paramType = parameters[i].type; - } - } - - var statusOfCurrentArgument = this.overloadIsApplicableForArgument(paramType, args.nonSeparatorAt(i), i, context, comparisonInfo); - - if (statusOfCurrentArgument === 0 /* NotAssignable */) { - return 0 /* NotAssignable */; - } else if (statusOfCurrentArgument === 1 /* AssignableButWithProvisionalErrors */) { - overloadApplicability = 1 /* AssignableButWithProvisionalErrors */; - } else if (overloadApplicability !== 1 /* AssignableButWithProvisionalErrors */ && statusOfCurrentArgument === 2 /* AssignableWithNoProvisionalErrors */) { - overloadApplicability = 2 /* AssignableWithNoProvisionalErrors */; - } + else { + low = middle + 1; } - - return overloadApplicability; - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType.isAny()) { - return 3 /* Subtype */; - } else if (paramType.isError()) { - return 1 /* AssignableButWithProvisionalErrors */; - } else if (arg.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, null, TypeScript.ASTHelpers.parametersFromIdentifier(simpleArrowFunction.identifier), null, simpleArrowFunction.block, simpleArrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - var arrowFunction = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, arrowFunction.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(arrowFunction.callSignature.parameterList), TypeScript.ASTHelpers.getType(arrowFunction), arrowFunction.block, arrowFunction.expression, argIndex, context, comparisonInfo); - } else if (arg.kind() === 222 /* FunctionExpression */) { - var functionExpression = arg; - return this.overloadIsApplicableForAnyFunctionExpressionArgument(paramType, arg, functionExpression.callSignature.typeParameterList, TypeScript.ASTHelpers.parametersFromParameterList(functionExpression.callSignature.parameterList), TypeScript.ASTHelpers.getType(functionExpression), functionExpression.block, null, argIndex, context, comparisonInfo); - } else if (arg.kind() === 215 /* ObjectLiteralExpression */) { - return this.overloadIsApplicableForObjectLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else if (arg.kind() === 214 /* ArrayLiteralExpression */) { - return this.overloadIsApplicableForArrayLiteralArgument(paramType, arg, argIndex, context, comparisonInfo); - } else { - return this.overloadIsApplicableForOtherArgument(paramType, arg, argIndex, context, comparisonInfo); + } + return ~low; + } + ts.binarySearch = binarySearch; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasProperty(map, key) { + return hasOwnProperty.call(map, key); + } + ts.hasProperty = hasProperty; + function getProperty(map, key) { + return hasOwnProperty.call(map, key) ? map[key] : undefined; + } + ts.getProperty = getProperty; + function isEmpty(map) { + for (var id in map) { + if (hasProperty(map, id)) { + return false; } + } + return true; + } + ts.isEmpty = isEmpty; + function clone(object) { + var result = {}; + for (var id in object) { + result[id] = object[id]; + } + return result; + } + ts.clone = clone; + function forEachValue(map, callback) { + var result; + for (var id in map) { + if (result = callback(map[id])) + break; + } + return result; + } + ts.forEachValue = forEachValue; + function forEachKey(map, callback) { + var result; + for (var id in map) { + if (result = callback(id)) + break; + } + return result; + } + ts.forEachKey = forEachKey; + function lookUp(map, key) { + return hasProperty(map, key) ? map[key] : undefined; + } + ts.lookUp = lookUp; + function mapToArray(map) { + var result = []; + for (var id in map) { + result.push(map[id]); + } + return result; + } + ts.mapToArray = mapToArray; + function arrayToMap(array, makeKey) { + var result = {}; + forEach(array, function (value) { + result[makeKey(value)] = value; + }); + return result; + } + ts.arrayToMap = arrayToMap; + function formatStringFromArgs(text, args, baseIndex) { + baseIndex = baseIndex || 0; + return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; }); + } + ts.localizedDiagnosticMessages = undefined; + function getLocaleSpecificMessage(message) { + if (ts.localizedDiagnosticMessages) { + message = ts.localizedDiagnosticMessages[message]; + } + Debug.assert(message, "Diagnostic message does not exist in locale map."); + return message; + } + function createFileDiagnostic(file, start, length, message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 4) { + text = formatStringFromArgs(text, arguments, 4); + } + return { + file: file, + start: start, + length: length, + messageText: text, + category: message.category, + code: message.code }; - - PullTypeResolver.prototype.overloadIsApplicableForAnyFunctionExpressionArgument = function (paramType, arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, argIndex, context, comparisonInfo) { - if (this.cachedFunctionInterfaceType() && paramType === this.cachedFunctionInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - - var argSym = this.resolveAnyFunctionExpression(arg, typeParameters, parameters, returnTypeAnnotation, block, bodyExpression, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; + } + ts.createFileDiagnostic = createFileDiagnostic; + function createCompilerDiagnostic(message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 1) { + text = formatStringFromArgs(text, arguments, 1); + } + return { + file: undefined, + start: undefined, + length: undefined, + messageText: text, + category: message.category, + code: message.code }; - - PullTypeResolver.prototype.overloadIsApplicableForObjectLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (this.cachedObjectInterfaceType() && paramType === this.cachedObjectInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveObjectLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; + } + ts.createCompilerDiagnostic = createCompilerDiagnostic; + function chainDiagnosticMessages(details, message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 2) { + text = formatStringFromArgs(text, arguments, 2); + } + return { + messageText: text, + category: message.category, + code: message.code, + next: details }; - - PullTypeResolver.prototype.overloadIsApplicableForArrayLiteralArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - if (paramType === this.cachedArrayInterfaceType()) { - return 2 /* AssignableWithNoProvisionalErrors */; - } - - context.pushProvisionalType(paramType); - var argSym = this.resolveArrayLiteralExpression(arg, true, context); - - var applicabilityStatus = this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - - context.popAnyContextualType(); - - return applicabilityStatus; + } + ts.chainDiagnosticMessages = chainDiagnosticMessages; + function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) { + var code = diagnosticChain.code; + var category = diagnosticChain.category; + var messageText = ""; + var indent = 0; + while (diagnosticChain) { + if (indent) { + messageText += newLine; + for (var i = 0; i < indent; i++) { + messageText += " "; + } + } + messageText += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + return { + file: file, + start: start, + length: length, + code: code, + category: category, + messageText: messageText }; - - PullTypeResolver.prototype.overloadIsApplicableForOtherArgument = function (paramType, arg, argIndex, context, comparisonInfo) { - var argSym = this.resolveAST(arg, false, context); - - if (argSym.type.isAlias()) { - var aliasSym = argSym.type; - argSym = aliasSym.getExportAssignedTypeSymbol(); + } + ts.flattenDiagnosticChain = flattenDiagnosticChain; + function compareValues(a, b) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + return a < b ? -1 : 1; + } + ts.compareValues = compareValues; + function getDiagnosticFilename(diagnostic) { + return diagnostic.file ? diagnostic.file.filename : undefined; + } + function compareDiagnostics(d1, d2) { + return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0; + } + ts.compareDiagnostics = compareDiagnostics; + function deduplicateSortedDiagnostics(diagnostics) { + if (diagnostics.length < 2) { + return diagnostics; + } + var newDiagnostics = [diagnostics[0]]; + var previousDiagnostic = diagnostics[0]; + for (var i = 1; i < diagnostics.length; i++) { + var currentDiagnostic = diagnostics[i]; + var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; + if (!isDupe) { + newDiagnostics.push(currentDiagnostic); + previousDiagnostic = currentDiagnostic; } - - comparisonInfo.stringConstantVal = arg; - return this.overloadIsApplicableForArgumentHelper(paramType, argSym.type, argIndex, comparisonInfo, arg, context); - }; - - PullTypeResolver.prototype.overloadIsApplicableForArgumentHelper = function (paramType, argSym, argumentIndex, comparisonInfo, arg, context) { - var tempComparisonInfo = new TypeComparisonInfo(); - tempComparisonInfo.stringConstantVal = comparisonInfo.stringConstantVal; - if (!context.hasProvisionalErrors() && this.sourceIsSubtypeOfTarget(argSym.type, paramType, arg, context, tempComparisonInfo)) { - return 3 /* Subtype */; + } + return newDiagnostics; + } + ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics; + function normalizeSlashes(path) { + return path.replace(/\\/g, "/"); + } + ts.normalizeSlashes = normalizeSlashes; + function getRootLength(path) { + if (path.charCodeAt(0) === 47 /* slash */) { + if (path.charCodeAt(1) !== 47 /* slash */) + return 1; + var p1 = path.indexOf("/", 2); + if (p1 < 0) + return 2; + var p2 = path.indexOf("/", p1 + 1); + if (p2 < 0) + return p1 + 1; + return p2 + 1; + } + if (path.charCodeAt(1) === 58 /* colon */) { + if (path.charCodeAt(2) === 47 /* slash */) + return 3; + return 2; + } + return 0; + } + ts.getRootLength = getRootLength; + ts.directorySeparator = "/"; + function getNormalizedParts(normalizedSlashedPath, rootLength) { + var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator); + var normalized = []; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + if (part !== ".") { + if (part === ".." && normalized.length > 0 && normalized[normalized.length - 1] !== "..") { + normalized.pop(); + } + else { + normalized.push(part); + } } - - if (this.sourceIsAssignableToTarget(argSym.type, paramType, arg, context, comparisonInfo.message ? tempComparisonInfo : comparisonInfo)) { - return context.hasProvisionalErrors() ? 1 /* AssignableButWithProvisionalErrors */ : 2 /* AssignableWithNoProvisionalErrors */; + } + return normalized; + } + function normalizePath(path) { + var path = normalizeSlashes(path); + var rootLength = getRootLength(path); + var normalized = getNormalizedParts(path, rootLength); + return path.substr(0, rootLength) + normalized.join(ts.directorySeparator); + } + ts.normalizePath = normalizePath; + function getDirectoryPath(path) { + return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator))); + } + ts.getDirectoryPath = getDirectoryPath; + function isUrl(path) { + return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1; + } + ts.isUrl = isUrl; + function isRootedDiskPath(path) { + return getRootLength(path) !== 0; + } + ts.isRootedDiskPath = isRootedDiskPath; + function normalizedPathComponents(path, rootLength) { + var normalizedParts = getNormalizedParts(path, rootLength); + return [path.substr(0, rootLength)].concat(normalizedParts); + } + function getNormalizedPathComponents(path, currentDirectory) { + var path = normalizeSlashes(path); + var rootLength = getRootLength(path); + if (rootLength == 0) { + path = combinePaths(normalizeSlashes(currentDirectory), path); + rootLength = getRootLength(path); + } + return normalizedPathComponents(path, rootLength); + } + ts.getNormalizedPathComponents = getNormalizedPathComponents; + function getNormalizedPathFromPathCompoments(pathComponents) { + if (pathComponents && pathComponents.length) { + return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator); + } + } + ts.getNormalizedPathFromPathCompoments = getNormalizedPathFromPathCompoments; + function getNormalizedPathComponentsOfUrl(url) { + var urlLength = url.length; + var rootLength = url.indexOf("://") + "://".length; + while (rootLength < urlLength) { + if (url.charCodeAt(rootLength) === 47 /* slash */) { + rootLength++; + } + else { + break; } - - if (!comparisonInfo.message) { - var enclosingSymbol = this.getEnclosingSymbolForAST(arg); - comparisonInfo.addMessage(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Could_not_apply_type_0_to_argument_1_which_is_of_type_2, [paramType.toString(enclosingSymbol), (argumentIndex + 1), argSym.getTypeName(enclosingSymbol)])); + } + if (rootLength === urlLength) { + return [url]; + } + var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength); + if (indexOfNextSlash !== -1) { + rootLength = indexOfNextSlash + 1; + return normalizedPathComponents(url, rootLength); + } + else { + return [url + ts.directorySeparator]; + } + } + function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) { + if (isUrl(pathOrUrl)) { + return getNormalizedPathComponentsOfUrl(pathOrUrl); + } + else { + return getNormalizedPathComponents(pathOrUrl, currentDirectory); + } + } + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, isAbsolutePathAnUrl) { + var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); + var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); + if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { + directoryComponents.length--; + } + for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + break; } - - return 0 /* NotAssignable */; - }; - - PullTypeResolver.prototype.inferArgumentTypesForSignature = function (argContext, comparisonInfo, context) { - var inferenceResultTypes = argContext.inferTypeArguments(); - var typeParameters = argContext.signatureBeingInferred.getTypeParameters(); - TypeScript.Debug.assert(typeParameters.length == inferenceResultTypes.length); - - var typeReplacementMapForConstraints = null; - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (typeParameters[i].getConstraint()) { - typeReplacementMapForConstraints = typeReplacementMapForConstraints || TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, inferenceResultTypes); - var associatedConstraint = this.instantiateType(typeParameters[i].getConstraint(), typeReplacementMapForConstraints); - if (!this.sourceIsAssignableToTargetWithNewEnclosingTypes(inferenceResultTypes[i], associatedConstraint, null, context, null, false)) { - inferenceResultTypes[i] = associatedConstraint; - } + } + if (joinStartIndex) { + var relativePath = ""; + var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length); + for (; joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (directoryComponents[joinStartIndex] !== "") { + relativePath = relativePath + ".." + ts.directorySeparator; } } - - if (argContext.isInvocationInferenceContext()) { - var invocationContext = argContext; - if (!this.typeParametersAreInScopeAtArgumentList(typeParameters, invocationContext.argumentASTs)) { - for (var i = 0; i < inferenceResultTypes.length; i++) { - if (inferenceResultTypes[i].wrapsSomeTypeParameter(argContext.candidateCache)) { - inferenceResultTypes[i] = this.semanticInfoChain.anyTypeSymbol; - } - } + return relativePath + relativePathComponents.join(ts.directorySeparator); + } + var absolutePath = getNormalizedPathFromPathCompoments(pathComponents); + if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) { + absolutePath = "file:///" + absolutePath; + } + return absolutePath; + } + ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; + function getBaseFilename(path) { + var i = path.lastIndexOf(ts.directorySeparator); + return i < 0 ? path : path.substring(i + 1); + } + ts.getBaseFilename = getBaseFilename; + function combinePaths(path1, path2) { + if (!(path1 && path1.length)) + return path2; + if (!(path2 && path2.length)) + return path1; + if (path2.charAt(0) === ts.directorySeparator) + return path2; + if (path1.charAt(path1.length - 1) === ts.directorySeparator) + return path1 + path2; + return path1 + ts.directorySeparator + path2; + } + ts.combinePaths = combinePaths; + function fileExtensionIs(path, extension) { + var pathLen = path.length; + var extLen = extension.length; + return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; + } + ts.fileExtensionIs = fileExtensionIs; + function getCanonicalFileName(fileName) { + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + ts.getCanonicalFileName = getCanonicalFileName; + function Symbol(flags, name) { + this.flags = flags; + this.name = name; + this.declarations = undefined; + } + function Type(checker, flags) { + this.flags = flags; + } + function Signature(checker) { + } + ts.objectAllocator = { + getNodeConstructor: function (kind) { + function Node() { + } + Node.prototype = { + kind: kind, + pos: 0, + end: 0, + flags: 0, + parent: undefined + }; + return Node; + }, + getSymbolConstructor: function () { return Symbol; }, + getTypeConstructor: function () { return Type; }, + getSignatureConstructor: function () { return Signature; } + }; + (function (AssertionLevel) { + AssertionLevel[AssertionLevel["None"] = 0] = "None"; + AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; + AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; + AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; + })(ts.AssertionLevel || (ts.AssertionLevel = {})); + var AssertionLevel = ts.AssertionLevel; + (function (Debug) { + var currentAssertionLevel = 0 /* None */; + function shouldAssert(level) { + return this.currentAssertionLevel >= level; + } + Debug.shouldAssert = shouldAssert; + function assert(expression, message, verboseDebugInfo) { + if (!expression) { + var verboseDebugString = ""; + if (verboseDebugInfo) { + verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo(); } + throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString); } - - return inferenceResultTypes; - }; - - PullTypeResolver.prototype.typeParametersAreInScopeAtArgumentList = function (typeParameters, args) { - var enclosingDecl = this.getEnclosingDeclForAST(args); - var typeParameterParentDecl = typeParameters[0].getDeclarations()[0].getParentDecl(); - return enclosingDecl.getParentPath().indexOf(typeParameterParentDecl) > -1; - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersInEnclosingType = function (expressionType, parameterType, argContext, context) { - if (expressionType && parameterType) { - if (context.oneOfClassificationsIsInfinitelyExpanding()) { - this.relateInifinitelyExpandingTypeToTypeParameters(expressionType, parameterType, argContext, context); - return; + } + Debug.assert = assert; + function fail(message) { + Debug.assert(false, message); + } + Debug.fail = fail; + })(ts.Debug || (ts.Debug = {})); + var Debug = ts.Debug; +})(ts || (ts = {})); +var sys = (function () { + function getWScriptSystem() { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + var fileStream = new ActiveXObject("ADODB.Stream"); + fileStream.Type = 2; + var binaryStream = new ActiveXObject("ADODB.Stream"); + binaryStream.Type = 1; + var args = []; + for (var i = 0; i < WScript.Arguments.length; i++) { + args[i] = WScript.Arguments.Item(i); + } + function readFile(fileName, encoding) { + if (!fso.FileExists(fileName)) { + return undefined; + } + fileStream.Open(); + try { + if (encoding) { + fileStream.Charset = encoding; + fileStream.LoadFromFile(fileName); + } + else { + fileStream.Charset = "x-ansi"; + fileStream.LoadFromFile(fileName); + var bom = fileStream.ReadText(2) || ""; + fileStream.Position = 0; + fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; + } + return fileStream.ReadText(); + } + catch (e) { + throw e.number === -2147024809 ? new Error(ts.Diagnostics.Unsupported_file_encoding.key) : e; + } + finally { + fileStream.Close(); + } + } + function writeFile(fileName, data, writeByteOrderMark) { + fileStream.Open(); + binaryStream.Open(); + try { + fileStream.Charset = "utf-8"; + fileStream.WriteText(data); + if (writeByteOrderMark) { + fileStream.Position = 0; + } + else { + fileStream.Position = 3; + } + fileStream.CopyTo(binaryStream); + binaryStream.SaveToFile(fileName, 2); + } + finally { + binaryStream.Close(); + fileStream.Close(); + } + } + return { + args: args, + newLine: "\r\n", + useCaseSensitiveFileNames: false, + write: function (s) { + WScript.StdOut.Write(s); + }, + readFile: readFile, + writeFile: writeFile, + resolvePath: function (path) { + return fso.GetAbsolutePathName(path); + }, + fileExists: function (path) { + return fso.FileExists(path); + }, + directoryExists: function (path) { + return fso.FolderExists(path); + }, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + fso.CreateFolder(directoryName); + } + }, + getExecutingFilePath: function () { + return WScript.ScriptFullName; + }, + getCurrentDirectory: function () { + return new ActiveXObject("WScript.Shell").CurrentDirectory; + }, + exit: function (exitCode) { + try { + WScript.Quit(exitCode); + } + catch (e) { } - } - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - }; - - PullTypeResolver.prototype.relateTypeToTypeParametersWithNewEnclosingTypes = function (expressionType, parameterType, argContext, context) { - var enclosingTypeWalkerStates = context.resetEnclosingTypeWalkerStates(); - this.relateTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.setEnclosingTypeWalkerStates(enclosingTypeWalkerStates); - }; - - PullTypeResolver.prototype.relateTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - if (expressionType.isError()) { - expressionType = this.semanticInfoChain.anyTypeSymbol; - } - - if (parameterType.isTypeParameter()) { - var typeParameter = parameterType; - argContext.addCandidateForInference(typeParameter, expressionType); - return; - } - - if (parameterType.isNamedTypeSymbol() && !parameterType.isGeneric() && !parameterType.getTypeArguments()) { - return; - } - - if (TypeScript.PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType(expressionType, parameterType)) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); - } else { - var symbolsWhenStartedWalkingTypes = context.startWalkingTypes(expressionType, parameterType); - this.relateObjectTypeToTypeParameters(expressionType, parameterType, argContext, context); - context.endWalkingTypes(symbolsWhenStartedWalkingTypes); - } - }; - - PullTypeResolver.prototype.relateTypeArgumentsOfTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - var parameterSideTypeArguments = parameterType.getTypeArguments(); - var argumentSideTypeArguments = expressionType.getTypeArguments(); - - TypeScript.Debug.assert(parameterSideTypeArguments && argumentSideTypeArguments && parameterSideTypeArguments.length === argumentSideTypeArguments.length); - for (var i = 0; i < parameterSideTypeArguments.length; i++) { - this.relateTypeToTypeParametersWithNewEnclosingTypes(argumentSideTypeArguments[i], parameterSideTypeArguments[i], argContext, context); } }; - - PullTypeResolver.prototype.relateInifinitelyExpandingTypeToTypeParameters = function (expressionType, parameterType, argContext, context) { - if (!expressionType || !parameterType) { - return; - } - - var expressionTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(expressionType); - var parameterTypeNamedTypeReference = TypeScript.PullHelpers.getRootType(parameterType); - if (expressionTypeNamedTypeReference !== parameterTypeNamedTypeReference) { - return; - } - - var expressionTypeTypeArguments = expressionType.getTypeArguments(); - var parameterTypeArguments = parameterType.getTypeArguments(); - - if (expressionTypeTypeArguments && parameterTypeArguments && expressionTypeTypeArguments.length === parameterTypeArguments.length) { - for (var i = 0; i < expressionTypeTypeArguments.length; i++) { - this.relateTypeArgumentsOfTypeToTypeParameters(expressionType, parameterType, argContext, context); + } + function getNodeSystem() { + var _fs = require("fs"); + var _path = require("path"); + var _os = require('os'); + var platform = _os.platform(); + var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; + function readFile(fileName, encoding) { + if (!_fs.existsSync(fileName)) { + return undefined; + } + var buffer = _fs.readFileSync(fileName); + var len = buffer.length; + if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { + len &= ~1; + for (var i = 0; i < len; i += 2) { + var temp = buffer[i]; + buffer[i] = buffer[i + 1]; + buffer[i + 1] = temp; + } + return buffer.toString("utf16le", 2); + } + if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { + return buffer.toString("utf16le", 2); + } + if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { + return buffer.toString("utf8", 3); + } + return buffer.toString("utf8"); + } + function writeFile(fileName, data, writeByteOrderMark) { + if (writeByteOrderMark) { + data = '\uFEFF' + data; + } + _fs.writeFileSync(fileName, data, "utf8"); + } + return { + args: process.argv.slice(2), + newLine: _os.EOL, + useCaseSensitiveFileNames: useCaseSensitiveFileNames, + write: function (s) { + _fs.writeSync(1, s); + }, + readFile: readFile, + writeFile: writeFile, + watchFile: function (fileName, callback) { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { + _fs.unwatchFile(fileName, fileChanged); + } + }; + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } + ; + }, + resolvePath: function (path) { + return _path.resolve(path); + }, + fileExists: function (path) { + return _fs.existsSync(path); + }, + directoryExists: function (path) { + return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); + }, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + _fs.mkdirSync(directoryName); + } + }, + getExecutingFilePath: function () { + return process.mainModule.filename; + }, + getCurrentDirectory: function () { + return process.cwd(); + }, + getMemoryUsage: function () { + if (global.gc) { + global.gc(); } + return process.memoryUsage().heapUsed; + }, + exit: function (exitCode) { + process.exit(exitCode); } }; - - PullTypeResolver.prototype.relateFunctionSignatureToTypeParameters = function (expressionSignature, parameterSignature, argContext, context) { - var _this = this; - var expressionReturnType = expressionSignature.returnType; - var parameterReturnType = parameterSignature.returnType; - - parameterSignature.forAllCorrespondingParameterTypesInThisAndOtherSignature(expressionSignature, function (parameterSignatureParameterType, expressionSignatureParameterType, i) { - context.walkParameterTypes(i); - _this.relateTypeToTypeParametersInEnclosingType(expressionSignatureParameterType, parameterSignatureParameterType, argContext, context); - context.postWalkParameterTypes(); - return true; - }); - - context.walkReturnTypes(); - this.relateTypeToTypeParametersInEnclosingType(expressionReturnType, parameterReturnType, argContext, context); - context.postWalkReturnTypes(); - }; - - PullTypeResolver.prototype.relateObjectTypeToTypeParameters = function (objectType, parameterType, argContext, context) { - var parameterTypeMembers = parameterType.getMembers(); - var parameterSignatures; - - var objectMember; - var objectSignatures; - - if (argContext.alreadyRelatingTypes(objectType, parameterType)) { - return; - } - - for (var i = 0; i < parameterTypeMembers.length; i++) { - objectMember = this.getNamedPropertySymbol(parameterTypeMembers[i].name, 68147712 /* SomeValue */, objectType); - if (objectMember) { - this.resolveDeclaredSymbol(objectMember); - this.resolveDeclaredSymbol(parameterTypeMembers[i]); - context.walkMemberTypes(parameterTypeMembers[i].name); - this.relateTypeToTypeParametersInEnclosingType(objectMember.type, parameterTypeMembers[i].type, argContext, context); - context.postWalkMemberTypes(); + } + if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + return getWScriptSystem(); + } + else if (typeof module !== "undefined" && module.exports) { + return getNodeSystem(); + } + else { + return undefined; + } +})(); +var ts; +(function (ts) { + var nodeConstructors = new Array(180 /* Count */); + function getNodeConstructor(kind) { + return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)); + } + ts.getNodeConstructor = getNodeConstructor; + function createRootNode(kind, pos, end, flags) { + var node = new (getNodeConstructor(kind))(); + node.pos = pos; + node.end = end; + node.flags = flags; + return node; + } + var moduleExtensions = [".d.ts", ".ts", ".js"]; + function getModuleNameFromFilename(filename) { + for (var i = 0; i < moduleExtensions.length; i++) { + var ext = moduleExtensions[i]; + var len = filename.length - ext.length; + if (len > 0 && filename.substr(len) === ext) + return filename.substr(0, len); + } + return filename; + } + ts.getModuleNameFromFilename = getModuleNameFromFilename; + function getSourceFileOfNode(node) { + while (node && node.kind !== 177 /* SourceFile */) + node = node.parent; + return node; + } + ts.getSourceFileOfNode = getSourceFileOfNode; + function nodePosToString(node) { + var file = getSourceFileOfNode(node); + var loc = file.getLineAndCharacterFromPosition(node.pos); + return file.filename + "(" + loc.line + "," + loc.character + ")"; + } + ts.nodePosToString = nodePosToString; + function getStartPosOfNode(node) { + return node.pos; + } + ts.getStartPosOfNode = getStartPosOfNode; + function getTokenPosOfNode(node) { + return ts.skipTrivia(getSourceFileOfNode(node).text, node.pos); + } + ts.getTokenPosOfNode = getTokenPosOfNode; + function getSourceTextOfNodeFromSourceText(sourceText, node) { + return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + } + ts.getSourceTextOfNodeFromSourceText = getSourceTextOfNodeFromSourceText; + function getSourceTextOfNode(node) { + var text = getSourceFileOfNode(node).text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + ts.getSourceTextOfNode = getSourceTextOfNode; + function escapeIdentifier(identifier) { + return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; + } + ts.escapeIdentifier = escapeIdentifier; + function unescapeIdentifier(identifier) { + return identifier.length >= 3 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ && identifier.charCodeAt(2) === 95 /* _ */ ? identifier.substr(1) : identifier; + } + ts.unescapeIdentifier = unescapeIdentifier; + function identifierToString(identifier) { + return identifier.kind === 111 /* Missing */ ? "(Missing)" : getSourceTextOfNode(identifier); + } + ts.identifierToString = identifierToString; + function createDiagnosticForNode(node, message, arg0, arg1, arg2) { + node = getErrorSpanForNode(node); + var file = getSourceFileOfNode(node); + var start = ts.skipTrivia(file.text, node.pos); + var length = node.end - start; + return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); + } + ts.createDiagnosticForNode = createDiagnosticForNode; + function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) { + node = getErrorSpanForNode(node); + var file = getSourceFileOfNode(node); + var start = ts.skipTrivia(file.text, node.pos); + var length = node.end - start; + return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine); + } + ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; + function getErrorSpanForNode(node) { + var errorSpan; + switch (node.kind) { + case 166 /* VariableDeclaration */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 172 /* ModuleDeclaration */: + case 171 /* EnumDeclaration */: + case 176 /* EnumMember */: + errorSpan = node.name; + break; + } + return errorSpan && errorSpan.pos < errorSpan.end ? errorSpan : node; + } + ts.getErrorSpanForNode = getErrorSpanForNode; + function isExternalModule(file) { + return file.externalModuleIndicator !== undefined; + } + ts.isExternalModule = isExternalModule; + function isPrologueDirective(node) { + return node.kind === 146 /* ExpressionStatement */ && node.expression.kind === 3 /* StringLiteral */; + } + ts.isPrologueDirective = isPrologueDirective; + function isEvalOrArgumentsIdentifier(node) { + return node.kind === 55 /* Identifier */ && node.text && (node.text === "eval" || node.text === "arguments"); + } + function isUseStrictPrologueDirective(node) { + ts.Debug.assert(isPrologueDirective(node)); + return node.expression.text === "use strict"; + } + function forEachChild(node, cbNode, cbNodes) { + function child(node) { + if (node) + return cbNode(node); + } + function children(nodes) { + if (nodes) { + if (cbNodes) + return cbNodes(nodes); + var result; + for (var i = 0, len = nodes.length; i < len; i++) { + if (result = cbNode(nodes[i])) + break; } + return result; } - - this.relateSignatureGroupToTypeParameters(objectType.getCallSignatures(), parameterType.getCallSignatures(), 1048576 /* CallSignature */, argContext, context); - - this.relateSignatureGroupToTypeParameters(objectType.getConstructSignatures(), parameterType.getConstructSignatures(), 2097152 /* ConstructSignature */, argContext, context); - - var parameterIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(parameterType, context); - var objectIndexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(objectType, context); - var indexSigInfo = context.getBothKindOfIndexSignatures(false, false); - - if (parameterIndexSignatures.stringSignature && objectIndexSignatures.stringSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, true, true, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.stringSignature, parameterIndexSignatures.stringSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - if (parameterIndexSignatures.numericSignature && objectIndexSignatures.numericSignature) { - context.walkIndexSignatureReturnTypes(indexSigInfo, false, false, true); - this.relateFunctionSignatureToTypeParameters(objectIndexSignatures.numericSignature, parameterIndexSignatures.numericSignature, argContext, context); - context.postWalkIndexSignatureReturnTypes(true); - } - }; - - PullTypeResolver.prototype.relateSignatureGroupToTypeParameters = function (argumentSignatures, parameterSignatures, signatureKind, argContext, context) { - for (var i = 0; i < parameterSignatures.length; i++) { - var paramSignature = parameterSignatures[i]; - if (argumentSignatures.length > 0 && paramSignature.isGeneric()) { - paramSignature = this.instantiateSignatureToAny(paramSignature); - } - for (var j = 0; j < argumentSignatures.length; j++) { - var argumentSignature = argumentSignatures[j]; - if (argumentSignature.nonOptionalParamCount > paramSignature.nonOptionalParamCount) { + } + if (!node) + return; + switch (node.kind) { + case 112 /* QualifiedName */: + return child(node.left) || child(node.right); + case 113 /* TypeParameter */: + return child(node.name) || child(node.constraint); + case 114 /* Parameter */: + return child(node.name) || child(node.type) || child(node.initializer); + case 115 /* Property */: + case 129 /* PropertyAssignment */: + return child(node.name) || child(node.type) || child(node.initializer); + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return children(node.typeParameters) || children(node.parameters) || child(node.type); + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + return child(node.name) || children(node.typeParameters) || children(node.parameters) || child(node.type) || child(node.body); + case 123 /* TypeReference */: + return child(node.typeName) || children(node.typeArguments); + case 124 /* TypeQuery */: + return child(node.exprName); + case 125 /* TypeLiteral */: + return children(node.members); + case 126 /* ArrayType */: + return child(node.elementType); + case 127 /* ArrayLiteral */: + return children(node.elements); + case 128 /* ObjectLiteral */: + return children(node.properties); + case 130 /* PropertyAccess */: + return child(node.left) || child(node.right); + case 131 /* IndexedAccess */: + return child(node.object) || child(node.index); + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return child(node.func) || children(node.typeArguments) || children(node.arguments); + case 134 /* TypeAssertion */: + return child(node.type) || child(node.operand); + case 135 /* ParenExpression */: + return child(node.expression); + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + return child(node.operand); + case 140 /* BinaryExpression */: + return child(node.left) || child(node.right); + case 141 /* ConditionalExpression */: + return child(node.condition) || child(node.whenTrue) || child(node.whenFalse); + case 143 /* Block */: + case 162 /* TryBlock */: + case 164 /* FinallyBlock */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + case 177 /* SourceFile */: + return children(node.statements); + case 144 /* VariableStatement */: + return children(node.declarations); + case 146 /* ExpressionStatement */: + return child(node.expression); + case 147 /* IfStatement */: + return child(node.expression) || child(node.thenStatement) || child(node.elseStatement); + case 148 /* DoStatement */: + return child(node.statement) || child(node.expression); + case 149 /* WhileStatement */: + return child(node.expression) || child(node.statement); + case 150 /* ForStatement */: + return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement); + case 151 /* ForInStatement */: + return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return child(node.label); + case 154 /* ReturnStatement */: + return child(node.expression); + case 155 /* WithStatement */: + return child(node.expression) || child(node.statement); + case 156 /* SwitchStatement */: + return child(node.expression) || children(node.clauses); + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + return child(node.expression) || children(node.statements); + case 159 /* LabelledStatement */: + return child(node.label) || child(node.statement); + case 160 /* ThrowStatement */: + return child(node.expression); + case 161 /* TryStatement */: + return child(node.tryBlock) || child(node.catchBlock) || child(node.finallyBlock); + case 163 /* CatchBlock */: + return child(node.variable) || children(node.statements); + case 166 /* VariableDeclaration */: + return child(node.name) || child(node.type) || child(node.initializer); + case 169 /* ClassDeclaration */: + return child(node.name) || children(node.typeParameters) || child(node.baseType) || children(node.implementedTypes) || children(node.members); + case 170 /* InterfaceDeclaration */: + return child(node.name) || children(node.typeParameters) || children(node.baseTypes) || children(node.members); + case 171 /* EnumDeclaration */: + return child(node.name) || children(node.members); + case 176 /* EnumMember */: + return child(node.name) || child(node.initializer); + case 172 /* ModuleDeclaration */: + return child(node.name) || child(node.body); + case 174 /* ImportDeclaration */: + return child(node.name) || child(node.entityName) || child(node.externalModuleName); + case 175 /* ExportAssignment */: + return child(node.exportName); + } + } + ts.forEachChild = forEachChild; + function hasRestParameters(s) { + return s.parameters.length > 0 && (s.parameters[s.parameters.length - 1].flags & 8 /* Rest */) !== 0; + } + ts.hasRestParameters = hasRestParameters; + function isInAmbientContext(node) { + while (node) { + if (node.flags & (2 /* Ambient */ | 512 /* DeclarationFile */)) + return true; + node = node.parent; + } + return false; + } + ts.isInAmbientContext = isInAmbientContext; + var ParsingContext; + (function (ParsingContext) { + ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements"; + ParsingContext[ParsingContext["ModuleElements"] = 1] = "ModuleElements"; + ParsingContext[ParsingContext["BlockStatements"] = 2] = "BlockStatements"; + ParsingContext[ParsingContext["SwitchClauses"] = 3] = "SwitchClauses"; + ParsingContext[ParsingContext["SwitchClauseStatements"] = 4] = "SwitchClauseStatements"; + ParsingContext[ParsingContext["TypeMembers"] = 5] = "TypeMembers"; + ParsingContext[ParsingContext["ClassMembers"] = 6] = "ClassMembers"; + ParsingContext[ParsingContext["EnumMembers"] = 7] = "EnumMembers"; + ParsingContext[ParsingContext["BaseTypeReferences"] = 8] = "BaseTypeReferences"; + ParsingContext[ParsingContext["VariableDeclarations"] = 9] = "VariableDeclarations"; + ParsingContext[ParsingContext["ArgumentExpressions"] = 10] = "ArgumentExpressions"; + ParsingContext[ParsingContext["ObjectLiteralMembers"] = 11] = "ObjectLiteralMembers"; + ParsingContext[ParsingContext["ArrayLiteralMembers"] = 12] = "ArrayLiteralMembers"; + ParsingContext[ParsingContext["Parameters"] = 13] = "Parameters"; + ParsingContext[ParsingContext["TypeParameters"] = 14] = "TypeParameters"; + ParsingContext[ParsingContext["TypeArguments"] = 15] = "TypeArguments"; + ParsingContext[ParsingContext["Count"] = 16] = "Count"; + })(ParsingContext || (ParsingContext = {})); + var Tristate; + (function (Tristate) { + Tristate[Tristate["False"] = 0] = "False"; + Tristate[Tristate["True"] = 1] = "True"; + Tristate[Tristate["Unknown"] = 2] = "Unknown"; + })(Tristate || (Tristate = {})); + function parsingContextErrors(context) { + switch (context) { + case 0 /* SourceElements */: + return ts.Diagnostics.Declaration_or_statement_expected; + case 1 /* ModuleElements */: + return ts.Diagnostics.Declaration_or_statement_expected; + case 2 /* BlockStatements */: + return ts.Diagnostics.Statement_expected; + case 3 /* SwitchClauses */: + return ts.Diagnostics.case_or_default_expected; + case 4 /* SwitchClauseStatements */: + return ts.Diagnostics.Statement_expected; + case 5 /* TypeMembers */: + return ts.Diagnostics.Property_or_signature_expected; + case 6 /* ClassMembers */: + return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; + case 7 /* EnumMembers */: + return ts.Diagnostics.Enum_member_expected; + case 8 /* BaseTypeReferences */: + return ts.Diagnostics.Type_reference_expected; + case 9 /* VariableDeclarations */: + return ts.Diagnostics.Variable_declaration_expected; + case 10 /* ArgumentExpressions */: + return ts.Diagnostics.Argument_expression_expected; + case 11 /* ObjectLiteralMembers */: + return ts.Diagnostics.Property_assignment_expected; + case 12 /* ArrayLiteralMembers */: + return ts.Diagnostics.Expression_or_comma_expected; + case 13 /* Parameters */: + return ts.Diagnostics.Parameter_declaration_expected; + case 14 /* TypeParameters */: + return ts.Diagnostics.Type_parameter_declaration_expected; + case 15 /* TypeArguments */: + return ts.Diagnostics.Type_argument_expected; + } + } + ; + var LookAheadMode; + (function (LookAheadMode) { + LookAheadMode[LookAheadMode["NotLookingAhead"] = 0] = "NotLookingAhead"; + LookAheadMode[LookAheadMode["NoErrorYet"] = 1] = "NoErrorYet"; + LookAheadMode[LookAheadMode["Error"] = 2] = "Error"; + })(LookAheadMode || (LookAheadMode = {})); + var ModifierContext; + (function (ModifierContext) { + ModifierContext[ModifierContext["SourceElements"] = 0] = "SourceElements"; + ModifierContext[ModifierContext["ModuleElements"] = 1] = "ModuleElements"; + ModifierContext[ModifierContext["ClassMembers"] = 2] = "ClassMembers"; + ModifierContext[ModifierContext["Parameters"] = 3] = "Parameters"; + })(ModifierContext || (ModifierContext = {})); + var TrailingCommaBehavior; + (function (TrailingCommaBehavior) { + TrailingCommaBehavior[TrailingCommaBehavior["Disallow"] = 0] = "Disallow"; + TrailingCommaBehavior[TrailingCommaBehavior["Allow"] = 1] = "Allow"; + TrailingCommaBehavior[TrailingCommaBehavior["Preserve"] = 2] = "Preserve"; + })(TrailingCommaBehavior || (TrailingCommaBehavior = {})); + var ControlBlockContext; + (function (ControlBlockContext) { + ControlBlockContext[ControlBlockContext["NotNested"] = 0] = "NotNested"; + ControlBlockContext[ControlBlockContext["Nested"] = 1] = "Nested"; + ControlBlockContext[ControlBlockContext["CrossingFunctionBoundary"] = 2] = "CrossingFunctionBoundary"; + })(ControlBlockContext || (ControlBlockContext = {})); + function createSourceFile(filename, sourceText, languageVersion, version, isOpen) { + if (version === void 0) { version = 0; } + if (isOpen === void 0) { isOpen = false; } + var file; + var scanner; + var token; + var parsingContext; + var commentRanges; + var identifiers = {}; + var identifierCount = 0; + var nodeCount = 0; + var lineStarts; + var isInStrictMode = false; + var lookAheadMode = 0 /* NotLookingAhead */; + var inAmbientContext = false; + var inFunctionBody = false; + var inSwitchStatement = 0 /* NotNested */; + var inIterationStatement = 0 /* NotNested */; + var labelledStatementInfo = (function () { + var functionBoundarySentinel; + var currentLabelSet; + var labelSetStack; + var isIterationStack; + function addLabel(label) { + if (!currentLabelSet) { + currentLabelSet = {}; + } + currentLabelSet[label.text] = true; + } + function pushCurrentLabelSet(isIterationStatement) { + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + ts.Debug.assert(currentLabelSet !== undefined); + labelSetStack.push(currentLabelSet); + isIterationStack.push(isIterationStatement); + currentLabelSet = undefined; + } + function pushFunctionBoundary() { + if (!functionBoundarySentinel) { + functionBoundarySentinel = {}; + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + } + ts.Debug.assert(currentLabelSet === undefined); + labelSetStack.push(functionBoundarySentinel); + isIterationStack.push(false); + } + function pop() { + ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); + labelSetStack.pop(); + isIterationStack.pop(); + } + function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) { + if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) { + return 1 /* Nested */; + } + if (!labelSetStack) { + return 0 /* NotNested */; + } + var crossedFunctionBoundary = false; + for (var i = labelSetStack.length - 1; i >= 0; i--) { + var labelSet = labelSetStack[i]; + if (labelSet === functionBoundarySentinel) { + if (stopAtFunctionBoundary) { + break; + } + else { + crossedFunctionBoundary = true; + continue; + } + } + if (requireIterationStatement && isIterationStack[i] === false) { continue; } - - if (argumentSignature.isGeneric()) { - argumentSignature = this.instantiateSignatureToAny(argumentSignature); + if (ts.hasProperty(labelSet, label.text)) { + return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */; } - - context.walkSignatures(signatureKind, j, i); - this.relateFunctionSignatureToTypeParameters(argumentSignature, paramSignature, argContext, context); - context.postWalkSignatures(); } + return 0 /* NotNested */; } - }; - - PullTypeResolver.prototype.alterPotentialGenericFunctionTypeToInstantiatedFunctionTypeForTypeArgumentInference = function (expressionSymbol, context) { - var inferentialType = context.getContextualType(); - TypeScript.Debug.assert(inferentialType); - var expressionType = expressionSymbol.type; - if (this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(expressionType, true) && this.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers(inferentialType, false)) { - var genericExpressionSignature = expressionType.getCallSignatures()[0]; - var contextualSignature = inferentialType.getCallSignatures()[0]; - - var instantiatedSignature = this.instantiateSignatureInContext(genericExpressionSignature, contextualSignature, context, true); - if (instantiatedSignature === null) { - return expressionSymbol; - } - - var newType = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - newType.appendCallSignature(instantiatedSignature); - return newType; + return { + addLabel: addLabel, + pushCurrentLabelSet: pushCurrentLabelSet, + pushFunctionBoundary: pushFunctionBoundary, + pop: pop, + nodeIsNestedInLabel: nodeIsNestedInLabel + }; + })(); + function getLineAndCharacterlFromSourcePosition(position) { + if (!lineStarts) { + lineStarts = ts.getLineStarts(sourceText); } - - return expressionSymbol; - }; - - PullTypeResolver.prototype.isFunctionTypeWithExactlyOneCallSignatureAndNoOtherMembers = function (type, callSignatureShouldBeGeneric) { - TypeScript.Debug.assert(type); - if (type.getCallSignatures().length !== 1) { - return false; + return ts.getLineAndCharacterOfPosition(lineStarts, position); + } + function error(message, arg0, arg1, arg2) { + var start = scanner.getTokenPos(); + var length = scanner.getTextPos() - start; + errorAtPos(start, length, message, arg0, arg1, arg2); + } + function grammarErrorOnNode(node, message, arg0, arg1, arg2) { + var span = getErrorSpanForNode(node); + var start = ts.skipTrivia(file.text, span.pos); + var length = span.end - start; + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + function reportInvalidUseInStrictMode(node) { + var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); + } + function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + function errorAtPos(start, length, message, arg0, arg1, arg2) { + var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1; + if (start !== lastErrorPos) { + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } - - var callSignatureIsGeneric = type.getCallSignatures()[0].isGeneric(); - if (callSignatureIsGeneric !== callSignatureShouldBeGeneric) { - return false; + if (lookAheadMode === 1 /* NoErrorYet */) { + lookAheadMode = 2 /* Error */; } - - var typeHasOtherMembers = type.getConstructSignatures().length || type.getIndexSignatures().length || type.getAllMembers(68147712 /* SomeValue */, 0 /* all */).length; - if (typeHasOtherMembers) { - return false; + } + function scanError(message) { + var pos = scanner.getTextPos(); + errorAtPos(pos, 0, message); + } + function onComment(pos, end) { + if (commentRanges) + commentRanges.push({ pos: pos, end: end }); + } + function getNodePos() { + return scanner.getStartPos(); + } + function getNodeEnd() { + return scanner.getStartPos(); + } + function nextToken() { + return token = scanner.scan(); + } + function getTokenPos(pos) { + return ts.skipTrivia(sourceText, pos); + } + function reScanGreaterToken() { + return token = scanner.reScanGreaterToken(); + } + function reScanSlashToken() { + return token = scanner.reScanSlashToken(); + } + function lookAheadHelper(callback, alwaysResetState) { + var saveToken = token; + var saveSyntacticErrorsLength = file.syntacticErrors.length; + var saveLookAheadMode = lookAheadMode; + lookAheadMode = 1 /* NoErrorYet */; + var result = callback(); + ts.Debug.assert(lookAheadMode === 2 /* Error */ || lookAheadMode === 1 /* NoErrorYet */); + if (lookAheadMode === 2 /* Error */) { + result = undefined; } - - return true; - }; - - PullTypeResolver.prototype.instantiateTypeToAny = function (typeToSpecialize, context) { - var typeParameters = typeToSpecialize.getTypeParameters(); - - if (!typeParameters.length) { - return typeToSpecialize; + lookAheadMode = saveLookAheadMode; + if (!result || alwaysResetState) { + token = saveToken; + file.syntacticErrors.length = saveSyntacticErrorsLength; } - - var typeArguments = null; - - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; + return result; + } + function lookAhead(callback) { + var result; + scanner.tryScan(function () { + result = lookAheadHelper(callback, true); + return false; + }); + return result; + } + function tryParse(callback) { + return scanner.tryScan(function () { return lookAheadHelper(callback, false); }); + } + function isIdentifier() { + return token === 55 /* Identifier */ || (isInStrictMode ? token > ts.SyntaxKind.LastFutureReservedWord : token > ts.SyntaxKind.LastReservedWord); + } + function parseExpected(t) { + if (token === t) { + nextToken(); + return true; } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; - } + error(ts.Diagnostics._0_expected, ts.tokenToString(t)); + return false; + } + function parseOptional(t) { + if (token === t) { + nextToken(); + return true; } - - var type = this.createInstantiatedType(typeToSpecialize, typeArguments); - - return type; - }; - - PullTypeResolver.prototype.instantiateSignatureToAny = function (signature) { - var typeParameters = signature.getTypeParameters(); - if (!this._cachedAnyTypeArgs) { - this._cachedAnyTypeArgs = [ - [this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol], - [this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol, this.semanticInfoChain.anyTypeSymbol] - ]; + return false; + } + function canParseSemicolon() { + if (token === 13 /* SemicolonToken */) { + return true; } - - if (typeParameters.length < this._cachedAnyTypeArgs.length) { - var typeArguments = this._cachedAnyTypeArgs[typeParameters.length - 1]; - } else { - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArguments[typeArguments.length] = this.semanticInfoChain.anyTypeSymbol; + return token === 6 /* CloseBraceToken */ || token === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak(); + } + function parseSemicolon() { + if (canParseSemicolon()) { + if (token === 13 /* SemicolonToken */) { + nextToken(); } } - - var typeParameterArgumentMap = TypeScript.PullInstantiationHelpers.createTypeParameterArgumentMap(typeParameters, typeArguments); - return this.instantiateSignature(signature, typeParameterArgumentMap); - }; - - PullTypeResolver.typeCheck = function (compilationSettings, semanticInfoChain, document) { - var sourceUnit = document.sourceUnit(); - - var resolver = semanticInfoChain.getResolver(); - var context = new TypeScript.PullTypeResolutionContext(resolver, true, sourceUnit.fileName()); - - if (resolver.canTypeCheckAST(sourceUnit, context)) { - resolver.resolveAST(sourceUnit, false, context); - resolver.validateVariableDeclarationGroups(semanticInfoChain.getDeclForAST(sourceUnit), context); - - while (resolver.typeCheckCallBacks.length) { - var callBack = resolver.typeCheckCallBacks.pop(); - callBack(context); - } - - resolver.processPostTypeCheckWorkItems(context); + else { + error(ts.Diagnostics._0_expected, ";"); } - }; - - PullTypeResolver.prototype.validateVariableDeclarationGroups = function (enclosingDecl, context) { - var _this = this; - this.scanVariableDeclarationGroups(enclosingDecl, function (_) { - }, function (subsequentDecl, firstSymbol) { - if (TypeScript.hasFlag(subsequentDecl.kind, 2048 /* Parameter */) || TypeScript.hasFlag(subsequentDecl.flags, 8388608 /* PropertyParameter */)) { - return; - } - - var boundDeclAST = _this.semanticInfoChain.getASTForDecl(subsequentDecl); - - var symbol = subsequentDecl.getSymbol(); - var symbolType = symbol.type; - var firstSymbolType = firstSymbol.type; - - if (symbolType && firstSymbolType && symbolType !== firstSymbolType && !_this.typesAreIdentical(symbolType, firstSymbolType, context)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(boundDeclAST, TypeScript.DiagnosticCode.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, [symbol.getScopedName(), firstSymbolType.toString(firstSymbol), symbolType.toString(symbol)])); - } - }); - }; - - PullTypeResolver.prototype.typeCheckFunctionOverloads = function (funcDecl, context, signature, allSignatures) { - if (!signature) { - var functionSignatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.semanticInfoChain.getDeclForAST(funcDecl)); - signature = functionSignatureInfo.signature; - allSignatures = functionSignatureInfo.allSignatures; - } - var functionDeclaration = this.semanticInfoChain.getDeclForAST(funcDecl); - var funcSymbol = functionDeclaration.getSymbol(); - - var definitionSignature = null; - for (var i = allSignatures.length - 1; i >= 0; i--) { - if (allSignatures[i].isDefinition()) { - definitionSignature = allSignatures[i]; - break; - } + } + function createNode(kind, pos) { + nodeCount++; + var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))(); + if (!(pos >= 0)) + pos = scanner.getStartPos(); + node.pos = pos; + node.end = pos; + return node; + } + function finishNode(node) { + node.end = scanner.getStartPos(); + return node; + } + function createMissingNode() { + return createNode(111 /* Missing */); + } + function createIdentifier(isIdentifier) { + identifierCount++; + if (isIdentifier) { + var node = createNode(55 /* Identifier */); + var text = escapeIdentifier(scanner.getTokenValue()); + node.text = ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); + nextToken(); + return finishNode(node); } - - if (!signature.isDefinition()) { - var signatureParentDecl = signature.getDeclarations()[0].getParentDecl(); - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i] === signature) { - break; - } - - var allSignaturesParentDecl = allSignatures[i].getDeclarations()[0].getParentDecl(); - if (allSignaturesParentDecl !== signatureParentDecl) { - continue; - } - - if (this.signaturesAreIdenticalWithNewEnclosingTypes(allSignatures[i], signature, context, false)) { - if (!this.signatureReturnTypesAreIdentical(allSignatures[i], signature, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overloads_cannot_differ_only_by_return_type)); - } else if (funcDecl.kind() === 137 /* ConstructorDeclaration */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_constructor_overload_signature)); - } else if (functionDeclaration.kind === 2097152 /* ConstructSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_construct_signature)); - } else if (functionDeclaration.kind === 1048576 /* CallSignature */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_call_signature)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Duplicate_overload_signature_for_0, [funcSymbol.getScopedNameEx().toString()])); - } - - break; - } - } + error(ts.Diagnostics.Identifier_expected); + return createMissingNode(); + } + function parseIdentifier() { + return createIdentifier(isIdentifier()); + } + function parseIdentifierName() { + return createIdentifier(token >= 55 /* Identifier */); + } + function isPropertyName() { + return token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */; + } + function parsePropertyName() { + if (token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { + return parsePrimaryExpression(); } - - var isConstantOverloadSignature = signature.isStringConstantOverloadSignature(); - if (isConstantOverloadSignature) { - if (signature.isDefinition()) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_implementation_cannot_use_specialized_type)); - } else { - var foundSubtypeSignature = false; - for (var i = 0; i < allSignatures.length; i++) { - if (allSignatures[i].isDefinition() || allSignatures[i] === signature) { - continue; - } - - if (!allSignatures[i].isResolved) { - this.resolveDeclaredSymbol(allSignatures[i], context); - } - - if (allSignatures[i].isStringConstantOverloadSignature()) { - continue; - } - - if (this.signatureIsAssignableToTarget(signature, allSignatures[i], null, context)) { - foundSubtypeSignature = true; - break; - } - } - - if (!foundSubtypeSignature) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature)); - } - } - } else if (definitionSignature && definitionSignature !== signature) { - var comparisonInfo = new TypeComparisonInfo(); - - if (!definitionSignature.isResolved) { - this.resolveDeclaredSymbol(definitionSignature, context); - } - - if (!this.signatureIsAssignableToTarget(definitionSignature, signature, funcDecl, context, comparisonInfo)) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition_NL_0, [comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, TypeScript.DiagnosticCode.Overload_signature_is_not_compatible_with_function_definition)); - } - } + return parseIdentifierName(); + } + function isKeyword(token) { + return ts.SyntaxKind.FirstKeyword <= token && token <= ts.SyntaxKind.LastKeyword; + } + function isModifier(token) { + switch (token) { + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + case 68 /* ExportKeyword */: + case 104 /* DeclareKeyword */: + return true; } - - var signatureForVisibilityCheck = definitionSignature; - if (!definitionSignature) { - if (allSignatures[0] === signature) { - return; - } - signatureForVisibilityCheck = allSignatures[0]; + return false; + } + function parseContextualModifier(t) { + return token === t && tryParse(function () { + nextToken(); + return token === 9 /* OpenBracketToken */ || isPropertyName(); + }); + } + function parseAnyContextualModifier() { + return isModifier(token) && tryParse(function () { + nextToken(); + return token === 9 /* OpenBracketToken */ || isPropertyName(); + }); + } + function isListElement(kind, inErrorRecovery) { + switch (kind) { + case 0 /* SourceElements */: + case 1 /* ModuleElements */: + return isSourceElement(inErrorRecovery); + case 2 /* BlockStatements */: + case 4 /* SwitchClauseStatements */: + return isStatement(inErrorRecovery); + case 3 /* SwitchClauses */: + return token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; + case 5 /* TypeMembers */: + return isTypeMember(); + case 6 /* ClassMembers */: + return lookAhead(isClassMemberStart); + case 7 /* EnumMembers */: + case 11 /* ObjectLiteralMembers */: + return isPropertyName(); + case 8 /* BaseTypeReferences */: + return isIdentifier() && ((token !== 69 /* ExtendsKeyword */ && token !== 92 /* ImplementsKeyword */) || !lookAhead(function () { return (nextToken(), isIdentifier()); })); + case 9 /* VariableDeclarations */: + case 14 /* TypeParameters */: + return isIdentifier(); + case 10 /* ArgumentExpressions */: + return isExpression(); + case 12 /* ArrayLiteralMembers */: + return token === 14 /* CommaToken */ || isExpression(); + case 13 /* Parameters */: + return isParameter(); + case 15 /* TypeArguments */: + return isType(); + } + ts.Debug.fail("Non-exhaustive case in 'isListElement'."); + } + function isListTerminator(kind) { + if (token === 1 /* EndOfFileToken */) { + return true; } - - if (funcDecl.kind() !== 137 /* ConstructorDeclaration */ && functionDeclaration.kind !== 2097152 /* ConstructSignature */ && signatureForVisibilityCheck && signature !== signatureForVisibilityCheck) { - var errorCode; - - if (signatureForVisibilityCheck.anyDeclHasFlag(2 /* Private */) !== signature.anyDeclHasFlag(2 /* Private */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_public_or_private; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(1 /* Exported */) !== signature.anyDeclHasFlag(1 /* Exported */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_exported_or_not_exported; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(8 /* Ambient */) !== signature.anyDeclHasFlag(8 /* Ambient */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_ambient_or_non_ambient; - } else if (signatureForVisibilityCheck.anyDeclHasFlag(128 /* Optional */) !== signature.anyDeclHasFlag(128 /* Optional */)) { - errorCode = TypeScript.DiagnosticCode.Overload_signatures_must_all_be_optional_or_required; - } - - if (errorCode) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(funcDecl, errorCode)); - } + switch (kind) { + case 1 /* ModuleElements */: + case 2 /* BlockStatements */: + case 3 /* SwitchClauses */: + case 5 /* TypeMembers */: + case 6 /* ClassMembers */: + case 7 /* EnumMembers */: + case 11 /* ObjectLiteralMembers */: + return token === 6 /* CloseBraceToken */; + case 4 /* SwitchClauseStatements */: + return token === 6 /* CloseBraceToken */ || token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; + case 8 /* BaseTypeReferences */: + return token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; + case 9 /* VariableDeclarations */: + return isVariableDeclaratorListTerminator(); + case 14 /* TypeParameters */: + return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */ || token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; + case 10 /* ArgumentExpressions */: + return token === 8 /* CloseParenToken */ || token === 13 /* SemicolonToken */; + case 12 /* ArrayLiteralMembers */: + return token === 10 /* CloseBracketToken */; + case 13 /* Parameters */: + return token === 8 /* CloseParenToken */ || token === 10 /* CloseBracketToken */ || token === 5 /* OpenBraceToken */; + case 15 /* TypeArguments */: + return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */; + } + } + function isVariableDeclaratorListTerminator() { + if (canParseSemicolon()) { + return true; } - }; - - PullTypeResolver.prototype.checkSymbolPrivacy = function (declSymbol, symbol, privacyErrorReporter) { - if (!symbol || symbol.kind === 2 /* Primitive */) { - return; + if (token === 76 /* InKeyword */) { + return true; } - - if (symbol.isType()) { - var typeSymbol = symbol; - var isNamedType = typeSymbol.isNamedTypeSymbol(); - - if (typeSymbol.isArrayNamedTypeReference()) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getElementType(), privacyErrorReporter); - return; - } - - if (!isNamedType) { - var typeOfSymbol = typeSymbol.getTypeOfSymbol(); - if (typeOfSymbol) { - this.checkSymbolPrivacy(declSymbol, typeOfSymbol, privacyErrorReporter); - return; - } - } - - if (typeSymbol.inSymbolPrivacyCheck) { - return; - } - - typeSymbol.inSymbolPrivacyCheck = true; - - var typars = typeSymbol.getTypeArgumentsOrTypeParameters(); - if (typars) { - for (var i = 0; i < typars.length; i++) { - this.checkSymbolPrivacy(declSymbol, typars[i], privacyErrorReporter); - } - } - - if (!isNamedType) { - var members = typeSymbol.getMembers(); - for (var i = 0; i < members.length; i++) { - this.checkSymbolPrivacy(declSymbol, members[i].type, privacyErrorReporter); + if (token === 23 /* EqualsGreaterThanToken */) { + return true; + } + return false; + } + function isInSomeParsingContext() { + for (var kind = 0; kind < 16 /* Count */; kind++) { + if (parsingContext & (1 << kind)) { + if (isListElement(kind, true) || isListTerminator(kind)) { + return true; } - - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getCallSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getConstructSignatures(), privacyErrorReporter); - this.checkTypePrivacyOfSignatures(declSymbol, typeSymbol.getIndexSignatures(), privacyErrorReporter); - } else if (typeSymbol.kind === 8192 /* TypeParameter */) { - this.checkSymbolPrivacy(declSymbol, typeSymbol.getConstraint(), privacyErrorReporter); - } - - typeSymbol.inSymbolPrivacyCheck = false; - - if (!isNamedType) { - return; } } - - if (declSymbol.isExternallyVisible()) { - var symbolIsVisible = symbol.isExternallyVisible(); - - if (symbolIsVisible && symbol.kind !== 8192 /* TypeParameter */) { - var symbolPath = symbol.pathToRoot(); - var declSymbolPath = declSymbol.pathToRoot(); - - if (symbolPath[symbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1].kind === 32 /* DynamicModule */ && declSymbolPath[declSymbolPath.length - 1] !== symbolPath[symbolPath.length - 1]) { - symbolIsVisible = false; - var declSymbolScope = declSymbolPath[declSymbolPath.length - 1]; - for (var i = symbolPath.length - 1; i >= 0; i--) { - var aliasSymbols = symbolPath[i].getExternalAliasedSymbols(declSymbolScope); - if (aliasSymbols) { - symbolIsVisible = true; - aliasSymbols[0].setTypeUsedExternally(); - break; + return false; + } + function parseList(kind, checkForStrictMode, parseElement) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + var saveIsInStrictMode = isInStrictMode; + while (!isListTerminator(kind)) { + if (isListElement(kind, false)) { + var element = parseElement(); + result.push(element); + if (!isInStrictMode && checkForStrictMode) { + if (isPrologueDirective(element)) { + if (isUseStrictPrologueDirective(element)) { + isInStrictMode = true; + checkForStrictMode = false; } } - symbol = symbolPath[symbolPath.length - 1]; + else { + checkForStrictMode = false; + } } - } else if (symbol.kind === 128 /* TypeAlias */) { - var aliasSymbol = symbol; - symbolIsVisible = true; - aliasSymbol.setTypeUsedExternally(); } - - if (!symbolIsVisible) { - privacyErrorReporter(symbol); + else { + error(parsingContextErrors(kind)); + if (isInSomeParsingContext()) { + break; + } + nextToken(); } } - }; - - PullTypeResolver.prototype.checkTypePrivacyOfSignatures = function (declSymbol, signatures, privacyErrorReporter) { - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (signatures.length > 1 && signature.isDefinition()) { - continue; + isInStrictMode = saveIsInStrictMode; + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function parseDelimitedList(kind, parseElement, trailingCommaBehavior) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + var errorCountBeforeParsingList = file.syntacticErrors.length; + var commaStart = -1; + while (true) { + if (isListElement(kind, false)) { + result.push(parseElement()); + commaStart = scanner.getTokenPos(); + if (parseOptional(14 /* CommaToken */)) { + continue; + } + commaStart = -1; + if (isListTerminator(kind)) { + break; + } + error(ts.Diagnostics._0_expected, ","); } - - var typeParams = signature.getTypeParameters(); - for (var j = 0; j < typeParams.length; j++) { - this.checkSymbolPrivacy(declSymbol, typeParams[j], privacyErrorReporter); + else if (isListTerminator(kind)) { + if (commaStart >= 0) { + if (trailingCommaBehavior === 0 /* Disallow */) { + if (file.syntacticErrors.length === errorCountBeforeParsingList) { + grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + else if (trailingCommaBehavior === 2 /* Preserve */) { + result.push(createNode(142 /* OmittedExpression */)); + } + } + break; } - - var params = signature.parameters; - for (var j = 0; j < params.length; j++) { - var paramType = params[j].type; - this.checkSymbolPrivacy(declSymbol, paramType, privacyErrorReporter); + else { + error(parsingContextErrors(kind)); + if (isInSomeParsingContext()) { + break; + } + nextToken(); } - - var returnType = signature.returnType; - this.checkSymbolPrivacy(declSymbol, returnType, privacyErrorReporter); } - }; - - PullTypeResolver.prototype.typeParameterOfTypeDeclarationPrivacyErrorReporter = function (classOrInterface, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeParameters = classOrInterface.kind() === 131 /* ClassDeclaration */ ? classOrInterface.typeParameterList : classOrInterface.typeParameterList; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function createMissingList() { + var pos = getNodePos(); + var result = []; + result.pos = pos; + result.end = pos; + return result; + } + function createNodeArray(node) { + var result = [node]; + result.pos = node.pos; + result.end = node.end; + return result; + } + function parseBracketedList(kind, parseElement, startToken, endToken) { + if (parseExpected(startToken)) { + var result = parseDelimitedList(kind, parseElement, 0 /* Disallow */); + parseExpected(endToken); + return result; + } + return createMissingList(); + } + function parseEntityName(allowReservedWords) { + var entity = parseIdentifier(); + while (parseOptional(11 /* DotToken */)) { + var node = createNode(112 /* QualifiedName */, entity.pos); + node.left = entity; + node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier(); + entity = finishNode(node); + } + return entity; + } + function parseTokenNode() { + var node = createNode(token); + nextToken(); + return finishNode(node); + } + function parseLiteralNode() { + var node = createNode(token); + node.text = scanner.getTokenValue(); + var tokenPos = scanner.getTokenPos(); + nextToken(); + finishNode(node); + if (node.kind === 2 /* NumericLiteral */ && sourceText.charCodeAt(tokenPos) === 48 /* _0 */ && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { + if (isInStrictMode) { + grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1; + else if (languageVersion >= 1 /* ES5 */) { + grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1; + } + return node; + } + function parseStringLiteral() { + if (token === 3 /* StringLiteral */) + return parseLiteralNode(); + error(ts.Diagnostics.String_literal_expected); + return createMissingNode(); + } + function parseTypeReference() { + var node = createNode(123 /* TypeReference */); + node.typeName = parseEntityName(false); + if (!scanner.hasPrecedingLineBreak() && token === 15 /* LessThanToken */) { + node.typeArguments = parseTypeArguments(); + } + return finishNode(node); + } + function parseTypeQuery() { + var node = createNode(124 /* TypeQuery */); + parseExpected(87 /* TypeOfKeyword */); + node.exprName = parseEntityName(true); + return finishNode(node); + } + function parseTypeParameter() { + var node = createNode(113 /* TypeParameter */); + node.name = parseIdentifier(); + if (parseOptional(69 /* ExtendsKeyword */)) { + if (isType() || !isExpression()) { + node.constraint = parseType(); + } + else { + var expr = parseUnaryExpression(); + grammarErrorOnNode(expr, ts.Diagnostics.Type_expected); + } + } + return finishNode(node); + } + function parseTypeParameters() { + if (token === 15 /* LessThanToken */) { + var pos = getNodePos(); + var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 15 /* LessThanToken */, 16 /* GreaterThanToken */); + if (!result.length) { + var start = getTokenPos(pos); + var length = getNodePos() - start; + errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty); } + return result; } - - var messageArguments = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.baseListPrivacyErrorReporter = function (classOrInterface, declSymbol, baseAst, isExtendedType, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(classOrInterface); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - var messageCode; - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; + } + function parseParameterType() { + return parseOptional(42 /* ColonToken */) ? token === 3 /* StringLiteral */ ? parseStringLiteral() : parseType() : undefined; + } + function isParameter() { + return token === 12 /* DotDotDotToken */ || isIdentifier() || isModifier(token); + } + function parseParameter(flags) { + if (flags === void 0) { flags = 0; } + var node = createNode(114 /* Parameter */); + node.flags |= parseAndCheckModifiers(3 /* Parameters */); + if (parseOptional(12 /* DotDotDotToken */)) { + node.flags |= 8 /* Rest */; + } + node.name = parseIdentifier(); + if (node.name.kind === 111 /* Missing */ && node.flags === 0 && isModifier(token)) { + nextToken(); + } + if (parseOptional(41 /* QuestionToken */)) { + node.flags |= 4 /* QuestionMark */; + } + node.type = parseParameterType(); + node.initializer = parseInitializer(true); + return finishNode(node); + } + function parseSignature(kind, returnToken) { + if (kind === 121 /* ConstructSignature */) { + parseExpected(78 /* NewKeyword */); + } + var typeParameters = parseTypeParameters(); + var parameters = parseParameterList(7 /* OpenParenToken */, 8 /* CloseParenToken */); + checkParameterList(parameters); + var type = parseOptional(returnToken) ? parseType() : undefined; + return { + typeParameters: typeParameters, + parameters: parameters, + type: type + }; + } + function parseParameterList(startDelimiter, endDelimiter) { + return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter); + } + function checkParameterList(parameters) { + var seenOptionalParameter = false; + var parameterCount = parameters.length; + for (var i = 0; i < parameterCount; i++) { + var parameter = parameters[i]; + if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { + reportInvalidUseInStrictMode(parameter.name); + return; + } + else if (parameter.flags & 8 /* Rest */) { + if (i !== (parameterCount - 1)) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + return; + } + if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); + return; + } + if (parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); + return; + } } - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_class_from_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_interface_from_inaccessible_module_1; + else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { + seenOptionalParameter = true; + if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + return; } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_interface_from_inaccessible_module_1; } - } else { - if (classOrInterface.kind() === 131 /* ClassDeclaration */) { - if (isExtendedType) { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_extends_private_class_1; - } else { - messageCode = TypeScript.DiagnosticCode.Exported_class_0_implements_private_interface_1; + else { + if (seenOptionalParameter) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + return; } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_interface_0_extends_private_interface_1; } } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseAst, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.variablePrivacyErrorReporter = function (declAST, declSymbol, symbol, context) { - var typeSymbol = symbol; - var enclosingDecl = this.getEnclosingDecl(declSymbol.getDeclarations()[0]); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isProperty = declSymbol.kind === 4096 /* Property */; - var isPropertyOfClass = false; - var declParent = declSymbol.getContainer(); - if (declParent && (declParent.kind === 8 /* Class */ || declParent.kind === 32768 /* ConstructorMethod */)) { - isPropertyOfClass = true; + } + function parseSignatureMember(kind, returnToken) { + var node = createNode(kind); + var sig = parseSignature(kind, returnToken); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + parseSemicolon(); + return finishNode(node); + } + function parseIndexSignatureMember() { + var node = createNode(122 /* IndexSignature */); + var errorCountBeforeIndexSignature = file.syntacticErrors.length; + var indexerStart = scanner.getTokenPos(); + node.parameters = parseParameterList(9 /* OpenBracketToken */, 10 /* CloseBracketToken */); + var indexerLength = scanner.getStartPos() - indexerStart; + node.type = parseTypeAnnotation(); + parseSemicolon(); + if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { + checkIndexSignature(node, indexerStart, indexerLength); } - - var messageCode; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; + return finishNode(node); + } + function checkIndexSignature(node, indexerStart, indexerLength) { + var parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter; + if (parameter) { + grammarErrorOnNode(parameter.name, arityDiagnostic); } - - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_is_using_inaccessible_module_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_is_using_inaccessible_module_1; - } - } else { - if (declSymbol.anyDeclHasFlag(16 /* Static */)) { - messageCode = TypeScript.DiagnosticCode.Public_static_property_0_of_exported_class_has_or_is_using_private_type_1; - } else if (isProperty) { - if (isPropertyOfClass) { - messageCode = TypeScript.DiagnosticCode.Public_property_0_of_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Property_0_of_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.Exported_variable_0_has_or_is_using_private_type_1; + else { + grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); } + return; } - - var messageArguments = [declSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - }; - - PullTypeResolver.prototype.checkFunctionTypePrivacy = function (funcDeclAST, isStatic, typeParameters, parameters, returnTypeAnnotation, block, context) { - var _this = this; - if (funcDeclAST.kind() === 222 /* FunctionExpression */ || funcDeclAST.kind() === 241 /* FunctionPropertyAssignment */ || (funcDeclAST.kind() === 139 /* GetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */) || (funcDeclAST.kind() === 140 /* SetAccessor */ && funcDeclAST.parent.parent.kind() === 215 /* ObjectLiteralExpression */)) { + else if (parameter.flags & 8 /* Rest */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); return; } - - var functionDecl = this.semanticInfoChain.getDeclForAST(funcDeclAST); - var functionSymbol = functionDecl.getSymbol(); - ; - var functionSignature; - - var isGetter = funcDeclAST.kind() === 139 /* GetAccessor */; - var isSetter = funcDeclAST.kind() === 140 /* SetAccessor */; - var isIndexSignature = functionDecl.kind === 4194304 /* IndexSignature */; - - if (isGetter || isSetter) { - var accessorSymbol = functionSymbol; - functionSignature = (isGetter ? accessorSymbol.getGetter() : accessorSymbol.getSetter()).type.getCallSignatures()[0]; - } else { - if (!functionSymbol) { - var parentDecl = functionDecl.getParentDecl(); - functionSymbol = parentDecl.getSymbol(); - if (functionSymbol && functionSymbol.isType() && !functionSymbol.isNamedTypeSymbol()) { - return; - } - } else if (functionSymbol.kind === 65536 /* Method */ && !isStatic && !functionSymbol.getContainer().isNamedTypeSymbol()) { - return; - } - functionSignature = functionDecl.getSignatureSymbol(); + else if (parameter.flags & ts.NodeFlags.Modifier) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + return; } - - if (typeParameters && !isGetter && !isSetter && !isIndexSignature && funcDeclAST.kind() !== 137 /* ConstructorDeclaration */) { - for (var i = 0; i < typeParameters.typeParameters.nonSeparatorCount(); i++) { - var typeParameterAST = typeParameters.typeParameters.nonSeparatorAt(i); - var typeParameter = this.resolveTypeParameterDeclaration(typeParameterAST, context); - this.checkSymbolPrivacy(functionSymbol, typeParameter, function (symbol) { - return _this.functionTypeArgumentArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, typeParameterAST, typeParameter, symbol, context); - }); - } + else if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + return; } - - if (!isGetter && !isIndexSignature) { - var funcParams = functionSignature.parameters; - for (var i = 0; i < funcParams.length; i++) { - this.checkSymbolPrivacy(functionSymbol, funcParams[i].type, function (symbol) { - return _this.functionArgumentTypePrivacyErrorReporter(funcDeclAST, isStatic, parameters, i, funcParams[i], symbol, context); - }); - } + else if (parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + return; } - - if (!isSetter) { - this.checkSymbolPrivacy(functionSymbol, functionSignature.returnType, function (symbol) { - return _this.functionReturnTypePrivacyErrorReporter(funcDeclAST, isStatic, returnTypeAnnotation, block, functionSignature.returnType, symbol, context); - }); + else if (!parameter.type) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + return; } - }; - - PullTypeResolver.prototype.functionTypeArgumentArgumentTypePrivacyErrorReporter = function (declAST, isStatic, typeParameterAST, typeParameter, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; + else if (parameter.type.kind !== 110 /* StringKeyword */ && parameter.type.kind !== 108 /* NumberKeyword */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); + return; } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else { - messageCode = TypeScript.DiagnosticCode.TypeParameter_0_of_exported_function_has_or_is_using_private_type_1; - } + else if (!node.type) { + grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); + return; } - - if (messageCode) { - var messageArgs = [typeParameter.getScopedName(enclosingSymbol, false, true), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(typeParameterAST, messageCode, messageArgs)); + } + function parsePropertyOrMethod() { + var node = createNode(0 /* Unknown */); + node.name = parsePropertyName(); + if (parseOptional(41 /* QuestionToken */)) { + node.flags |= 4 /* QuestionMark */; } - }; - - PullTypeResolver.prototype.functionArgumentTypePrivacyErrorReporter = function (declAST, isStatic, parameters, argIndex, paramSymbol, symbol, context) { - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - var enclosingSymbol = enclosingDecl ? enclosingDecl.getSymbol() : null; - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + node.kind = 116 /* Method */; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; } - - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingSymbol); - var messageCode; - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1; - } - } else if (!isGetter) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_is_using_inaccessible_module_1; - } - } else { - if (declAST.kind() === 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1; - } else if (isSetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1; - } else { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1; - } - } else if (!isGetter && decl.kind !== 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Parameter_0_of_exported_function_has_or_is_using_private_type_1; - } + else { + node.kind = 115 /* Property */; + node.type = parseTypeAnnotation(); } - - if (messageCode) { - var parameter = parameters.astAt(argIndex); - - var messageArgs = [paramSymbol.getScopedName(enclosingSymbol), typeSymbolName]; - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(parameter, messageCode, messageArgs)); + parseSemicolon(); + return finishNode(node); + } + function isTypeMember() { + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + case 9 /* OpenBracketToken */: + return true; + default: + return isPropertyName() && lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */ || token === 41 /* QuestionToken */ || token === 42 /* ColonToken */ || canParseSemicolon(); }); + } + } + function parseTypeMember() { + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + return parseSignatureMember(120 /* CallSignature */, 42 /* ColonToken */); + case 9 /* OpenBracketToken */: + return parseIndexSignatureMember(); + case 78 /* NewKeyword */: + if (lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */; })) { + return parseSignatureMember(121 /* ConstructSignature */, 42 /* ColonToken */); + } + case 3 /* StringLiteral */: + case 2 /* NumericLiteral */: + return parsePropertyOrMethod(); + default: + if (token >= 55 /* Identifier */) { + return parsePropertyOrMethod(); + } + } + } + function parseTypeLiteral() { + var node = createNode(125 /* TypeLiteral */); + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseList(5 /* TypeMembers */, false, parseTypeMember); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.members = createMissingList(); + } + return finishNode(node); + } + function parseFunctionType(signatureKind) { + var node = createNode(125 /* TypeLiteral */); + var member = createNode(signatureKind); + var sig = parseSignature(signatureKind, 23 /* EqualsGreaterThanToken */); + member.typeParameters = sig.typeParameters; + member.parameters = sig.parameters; + member.type = sig.type; + finishNode(member); + node.members = createNodeArray(member); + return finishNode(node); + } + function parseKeywordAndNoDot() { + var node = parseTokenNode(); + return token === 11 /* DotToken */ ? undefined : node; + } + function parseNonArrayType() { + switch (token) { + case 101 /* AnyKeyword */: + case 110 /* StringKeyword */: + case 108 /* NumberKeyword */: + case 102 /* BooleanKeyword */: + case 89 /* VoidKeyword */: + var node = tryParse(parseKeywordAndNoDot); + return node || parseTypeReference(); + case 87 /* TypeOfKeyword */: + return parseTypeQuery(); + case 5 /* OpenBraceToken */: + return parseTypeLiteral(); + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + return parseFunctionType(120 /* CallSignature */); + case 78 /* NewKeyword */: + return parseFunctionType(121 /* ConstructSignature */); + default: + if (isIdentifier()) { + return parseTypeReference(); + } + } + error(ts.Diagnostics.Type_expected); + return createMissingNode(); + } + function isType() { + switch (token) { + case 101 /* AnyKeyword */: + case 110 /* StringKeyword */: + case 108 /* NumberKeyword */: + case 102 /* BooleanKeyword */: + case 89 /* VoidKeyword */: + case 87 /* TypeOfKeyword */: + case 5 /* OpenBraceToken */: + case 15 /* LessThanToken */: + case 78 /* NewKeyword */: + return true; + case 7 /* OpenParenToken */: + return lookAhead(function () { + nextToken(); + return token === 8 /* CloseParenToken */ || isParameter(); + }); + default: + return isIdentifier(); } - }; - - PullTypeResolver.prototype.functionReturnTypePrivacyErrorReporter = function (declAST, isStatic, returnTypeAnnotation, block, funcReturnType, symbol, context) { - var _this = this; - var decl = this.semanticInfoChain.getDeclForAST(declAST); - var enclosingDecl = this.getEnclosingDecl(decl); - - var isGetter = declAST.kind() === 139 /* GetAccessor */; - var isSetter = declAST.kind() === 140 /* SetAccessor */; - var isMethod = decl.kind === 65536 /* Method */; - var isMethodOfClass = false; - var declParent = decl.getParentDecl(); - if (declParent && (declParent.kind === 8 /* Class */ || isStatic)) { - isMethodOfClass = true; + } + function parseType() { + var type = parseNonArrayType(); + while (type && !scanner.hasPrecedingLineBreak() && parseOptional(9 /* OpenBracketToken */)) { + parseExpected(10 /* CloseBracketToken */); + var node = createNode(126 /* ArrayType */, type.pos); + node.elementType = type; + type = finishNode(node); } - - var messageCode = null; - var typeSymbol = symbol; - var typeSymbolName = typeSymbol.getScopedName(enclosingDecl ? enclosingDecl.getSymbol() : null); - if (typeSymbol.isContainer() && !typeSymbol.isEnum()) { - if (!TypeScript.isQuoted(typeSymbolName)) { - typeSymbolName = "'" + typeSymbolName + "'"; - } - - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_is_using_inaccessible_module_0; - } - } else { - if (isGetter) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0; - } - } else if (decl.kind === 2097152 /* ConstructSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 1048576 /* CallSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (decl.kind === 4194304 /* IndexSignature */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0; - } else if (isMethod) { - if (isStatic) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0; - } else if (isMethodOfClass) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0; - } else { - messageCode = TypeScript.DiagnosticCode.Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0; - } - } else if (!isSetter && declAST.kind() !== 137 /* ConstructorDeclaration */) { - messageCode = TypeScript.DiagnosticCode.Return_type_of_exported_function_has_or_is_using_private_type_0; + return type; + } + function parseTypeAnnotation() { + return parseOptional(42 /* ColonToken */) ? parseType() : undefined; + } + function isExpression() { + switch (token) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 7 /* OpenParenToken */: + case 9 /* OpenBracketToken */: + case 5 /* OpenBraceToken */: + case 73 /* FunctionKeyword */: + case 78 /* NewKeyword */: + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + case 87 /* TypeOfKeyword */: + case 89 /* VoidKeyword */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + case 15 /* LessThanToken */: + case 55 /* Identifier */: + return true; + default: + return isIdentifier(); + } + } + function isExpressionStatement() { + return token !== 5 /* OpenBraceToken */ && token !== 73 /* FunctionKeyword */ && isExpression(); + } + function parseExpression(noIn) { + var expr = parseAssignmentExpression(noIn); + while (parseOptional(14 /* CommaToken */)) { + expr = makeBinaryExpression(expr, 14 /* CommaToken */, parseAssignmentExpression(noIn)); + } + return expr; + } + function parseInitializer(inParameter, noIn) { + if (token !== 43 /* EqualsToken */) { + if (scanner.hasPrecedingLineBreak() || (inParameter && token === 5 /* OpenBraceToken */) || !isExpression()) { + return undefined; + } + } + parseExpected(43 /* EqualsToken */); + return parseAssignmentExpression(noIn); + } + function parseAssignmentExpression(noIn) { + var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); + if (arrowExpression) { + return arrowExpression; + } + var expr = parseConditionalExpression(noIn); + if (expr.kind === 55 /* Identifier */ && token === 23 /* EqualsGreaterThanToken */) { + return parseSimpleArrowFunctionExpression(expr); + } + if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { + if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { + reportInvalidUseInStrictMode(expr); + } + var operator = token; + nextToken(); + return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); + } + return expr; + } + function isLeftHandSideExpression(expr) { + if (expr) { + switch (expr.kind) { + case 130 /* PropertyAccess */: + case 131 /* IndexedAccess */: + case 133 /* NewExpression */: + case 132 /* CallExpression */: + case 127 /* ArrayLiteral */: + case 135 /* ParenExpression */: + case 128 /* ObjectLiteral */: + case 136 /* FunctionExpression */: + case 55 /* Identifier */: + case 111 /* Missing */: + case 4 /* RegularExpressionLiteral */: + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 70 /* FalseKeyword */: + case 79 /* NullKeyword */: + case 83 /* ThisKeyword */: + case 85 /* TrueKeyword */: + case 81 /* SuperKeyword */: + return true; } } - - if (messageCode) { - var messageArguments = [typeSymbolName]; - var reportOnFuncDecl = false; - - if (returnTypeAnnotation) { - var returnExpressionSymbol = this.resolveTypeReference(returnTypeAnnotation, context); - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(returnTypeAnnotation, messageCode, messageArguments)); + return false; + } + function parseSimpleArrowFunctionExpression(identifier) { + ts.Debug.assert(token === 23 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + parseExpected(23 /* EqualsGreaterThanToken */); + var parameter = createNode(114 /* Parameter */, identifier.pos); + parameter.name = identifier; + finishNode(parameter); + var parameters = []; + parameters.push(parameter); + parameters.pos = parameter.pos; + parameters.end = parameter.end; + var signature = { parameters: parameters }; + return parseArrowExpressionTail(identifier.pos, signature, false); + } + function tryParseParenthesizedArrowFunctionExpression() { + var triState = isParenthesizedArrowFunctionExpression(); + if (triState === 0 /* False */) { + return undefined; + } + var pos = getNodePos(); + if (triState === 1 /* True */) { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + if (parseExpected(23 /* EqualsGreaterThanToken */) || token === 5 /* OpenBraceToken */) { + return parseArrowExpressionTail(pos, sig, false); + } + else { + return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, createMissingNode()); + } + } + var sig = tryParseSignatureIfArrowOrBraceFollows(); + if (sig) { + parseExpected(23 /* EqualsGreaterThanToken */); + return parseArrowExpressionTail(pos, sig, false); + } + else { + return undefined; + } + } + function isParenthesizedArrowFunctionExpression() { + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + return lookAhead(function () { + var first = token; + var second = nextToken(); + if (first === 7 /* OpenParenToken */) { + if (second === 8 /* CloseParenToken */) { + var third = nextToken(); + switch (third) { + case 23 /* EqualsGreaterThanToken */: + case 42 /* ColonToken */: + case 5 /* OpenBraceToken */: + return 1 /* True */; + default: + return 0 /* False */; + } + } + if (second === 12 /* DotDotDotToken */) { + return 1 /* True */; + } + if (!isIdentifier()) { + return 0 /* False */; + } + if (nextToken() === 42 /* ColonToken */) { + return 1 /* True */; + } + return 2 /* Unknown */; } - } - - if (block) { - var reportErrorOnReturnExpressions = function (ast, walker) { - var go = true; - switch (ast.kind()) { - case 129 /* FunctionDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 222 /* FunctionExpression */: - go = false; - break; - - case 150 /* ReturnStatement */: - var returnStatement = ast; - var returnExpressionSymbol = _this.resolveAST(returnStatement.expression, false, context).type; - - if (TypeScript.PullHelpers.typeSymbolsAreIdentical(returnExpressionSymbol, funcReturnType)) { - context.postDiagnostic(_this.semanticInfoChain.diagnosticFromAST(returnStatement, messageCode, messageArguments)); - } else { - reportOnFuncDecl = true; - } - go = false; - break; - - default: - break; + else { + ts.Debug.assert(first === 15 /* LessThanToken */); + if (!isIdentifier()) { + return 0 /* False */; } - - walker.options.goChildren = go; - return ast; - }; - - TypeScript.getAstWalkerFactory().walk(block, reportErrorOnReturnExpressions); - } - - if (reportOnFuncDecl) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(declAST, messageCode, messageArguments)); - } + return 2 /* Unknown */; + } + }); } - }; - - PullTypeResolver.prototype.enclosingClassIsDerived = function (classDecl) { - TypeScript.Debug.assert(classDecl.kind === 8 /* Class */); - - var classSymbol = classDecl.getSymbol(); - return classSymbol.getExtendedTypes().length > 0; - }; - - PullTypeResolver.prototype.isSuperInvocationExpression = function (ast) { - if (ast.kind() === 213 /* InvocationExpression */) { - var invocationExpression = ast; - if (invocationExpression.expression.kind() === 50 /* SuperKeyword */) { - return true; - } + if (token === 23 /* EqualsGreaterThanToken */) { + return 1 /* True */; } - - return false; - }; - - PullTypeResolver.prototype.isSuperInvocationExpressionStatement = function (node) { - if (node && node.kind() === 149 /* ExpressionStatement */) { - var expressionStatement = node; - if (this.isSuperInvocationExpression(expressionStatement.expression)) { - return true; + return 0 /* False */; + } + function tryParseSignatureIfArrowOrBraceFollows() { + return tryParse(function () { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + if (token === 23 /* EqualsGreaterThanToken */ || token === 5 /* OpenBraceToken */) { + return sig; } + return undefined; + }); + } + function parseArrowExpressionTail(pos, sig, noIn) { + var body; + if (token === 5 /* OpenBraceToken */) { + body = parseBody(false); } - return false; - }; - - PullTypeResolver.prototype.getFirstStatementOfBlockOrNull = function (block) { - if (block && block.statements && block.statements.childCount() > 0) { - return block.statements.childAt(0); + else if (isStatement(true) && !isExpressionStatement() && token !== 73 /* FunctionKeyword */) { + body = parseBody(true); } - - return null; - }; - - PullTypeResolver.prototype.superCallMustBeFirstStatementInConstructor = function (constructorDecl) { - TypeScript.Debug.assert(constructorDecl.kind === 32768 /* ConstructorMethod */); - - if (constructorDecl) { - var enclosingClass = constructorDecl.getParentDecl(); - - var classSymbol = enclosingClass.getSymbol(); - if (classSymbol.getExtendedTypes().length === 0) { - return false; - } - - var classMembers = classSymbol.getMembers(); - for (var i = 0, n1 = classMembers.length; i < n1; i++) { - var member = classMembers[i]; - - if (member.kind === 4096 /* Property */) { - var declarations = member.getDeclarations(); - for (var j = 0, n2 = declarations.length; j < n2; j++) { - var declaration = declarations[j]; - var ast = this.semanticInfoChain.getASTForDecl(declaration); - if (ast.kind() === 242 /* Parameter */) { - return true; - } - - if (ast.kind() === 136 /* MemberVariableDeclaration */) { - var variableDeclarator = ast; - if (variableDeclarator.variableDeclarator.equalsValueClause) { - return true; - } - } - } - } + else { + body = parseAssignmentExpression(noIn); + } + return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, body); + } + function isAssignmentOperator() { + return token >= ts.SyntaxKind.FirstAssignment && token <= ts.SyntaxKind.LastAssignment; + } + function parseConditionalExpression(noIn) { + var expr = parseBinaryExpression(noIn); + while (parseOptional(41 /* QuestionToken */)) { + var node = createNode(141 /* ConditionalExpression */, expr.pos); + node.condition = expr; + node.whenTrue = parseAssignmentExpression(false); + parseExpected(42 /* ColonToken */); + node.whenFalse = parseAssignmentExpression(noIn); + expr = finishNode(node); + } + return expr; + } + function parseBinaryExpression(noIn) { + return parseBinaryOperators(parseUnaryExpression(), 0, noIn); + } + function parseBinaryOperators(expr, minPrecedence, noIn) { + while (true) { + reScanGreaterToken(); + var precedence = getOperatorPrecedence(); + if (precedence && precedence > minPrecedence && (!noIn || token !== 76 /* InKeyword */)) { + var operator = token; + nextToken(); + expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence, noIn)); + continue; } + return expr; } - - return false; - }; - - PullTypeResolver.prototype.checkForThisCaptureInArrowFunction = function (expression) { - var enclosingDecl = this.getEnclosingDeclForAST(expression); - - var declPath = enclosingDecl.getParentPath(); - - if (declPath.length) { - var inArrowFunction = false; - for (var i = declPath.length - 1; i >= 0; i--) { - var decl = declPath[i]; - var declKind = decl.kind; - var declFlags = decl.flags; - - if (declKind === 131072 /* FunctionExpression */ && TypeScript.hasFlag(declFlags, 8192 /* ArrowFunction */)) { - inArrowFunction = true; - continue; + } + function getOperatorPrecedence() { + switch (token) { + case 40 /* BarBarToken */: + return 1; + case 39 /* AmpersandAmpersandToken */: + return 2; + case 35 /* BarToken */: + return 3; + case 36 /* CaretToken */: + return 4; + case 34 /* AmpersandToken */: + return 5; + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + return 6; + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + case 77 /* InstanceOfKeyword */: + case 76 /* InKeyword */: + return 7; + case 31 /* LessThanLessThanToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + return 8; + case 24 /* PlusToken */: + case 25 /* MinusToken */: + return 9; + case 26 /* AsteriskToken */: + case 27 /* SlashToken */: + case 28 /* PercentToken */: + return 10; + } + return undefined; + } + function makeBinaryExpression(left, operator, right) { + var node = createNode(140 /* BinaryExpression */, left.pos); + node.left = left; + node.operator = operator; + node.right = right; + return finishNode(node); + } + function parseUnaryExpression() { + var pos = getNodePos(); + switch (token) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + case 87 /* TypeOfKeyword */: + case 89 /* VoidKeyword */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + var operator = token; + nextToken(); + var operand = parseUnaryExpression(); + if (isInStrictMode) { + if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { + reportInvalidUseInStrictMode(operand); + } + else if (token === 64 /* DeleteKeyword */ && operand.kind === 55 /* Identifier */) { + grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + } + } + return makeUnaryExpression(138 /* PrefixOperator */, pos, operator, operand); + case 15 /* LessThanToken */: + return parseTypeAssertion(); + } + var primaryExpression = parsePrimaryExpression(); + var illegalUsageOfSuperKeyword = primaryExpression.kind === 81 /* SuperKeyword */ && token !== 7 /* OpenParenToken */ && token !== 11 /* DotToken */; + if (illegalUsageOfSuperKeyword) { + error(ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + } + var expr = parseCallAndAccess(primaryExpression, false); + ts.Debug.assert(isLeftHandSideExpression(expr)); + if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { + if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { + reportInvalidUseInStrictMode(expr); + } + var operator = token; + nextToken(); + expr = makeUnaryExpression(139 /* PostfixOperator */, expr.pos, operator, expr); + } + return expr; + } + function parseTypeAssertion() { + var node = createNode(134 /* TypeAssertion */); + parseExpected(15 /* LessThanToken */); + node.type = parseType(); + parseExpected(16 /* GreaterThanToken */); + node.operand = parseUnaryExpression(); + return finishNode(node); + } + function makeUnaryExpression(kind, pos, operator, operand) { + var node = createNode(kind, pos); + node.operator = operator; + node.operand = operand; + return finishNode(node); + } + function parseCallAndAccess(expr, inNewExpression) { + while (true) { + if (parseOptional(11 /* DotToken */)) { + var propertyAccess = createNode(130 /* PropertyAccess */, expr.pos); + propertyAccess.left = expr; + propertyAccess.right = parseIdentifierName(); + expr = finishNode(propertyAccess); + continue; + } + var bracketStart = scanner.getTokenPos(); + if (parseOptional(9 /* OpenBracketToken */)) { + var indexedAccess = createNode(131 /* IndexedAccess */, expr.pos); + indexedAccess.object = expr; + if (inNewExpression && parseOptional(10 /* CloseBracketToken */)) { + indexedAccess.index = createMissingNode(); + grammarErrorAtPos(bracketStart, scanner.getStartPos() - bracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } - - if (inArrowFunction) { - if (declKind === 16384 /* Function */ || declKind === 65536 /* Method */ || declKind === 32768 /* ConstructorMethod */ || declKind === 262144 /* GetAccessor */ || declKind === 524288 /* SetAccessor */ || declKind === 131072 /* FunctionExpression */ || declKind === 8 /* Class */ || declKind === 4 /* Container */ || declKind === 32 /* DynamicModule */ || declKind === 1 /* Script */) { - decl.setFlags(decl.flags | 262144 /* MustCaptureThis */); - - if (declKind === 8 /* Class */) { - var constructorSymbol = decl.getSymbol().getConstructorMethod(); - var constructorDecls = constructorSymbol.getDeclarations(); - for (var i = 0; i < constructorDecls.length; i++) { - constructorDecls[i].flags = constructorDecls[i].flags | 262144 /* MustCaptureThis */; - } - } - break; - } - } else if (declKind === 16384 /* Function */ || declKind === 131072 /* FunctionExpression */) { - break; + else { + indexedAccess.index = parseExpression(); + parseExpected(10 /* CloseBracketToken */); } + expr = finishNode(indexedAccess); + continue; + } + if ((token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) && !inNewExpression) { + var callExpr = createNode(132 /* CallExpression */, expr.pos); + callExpr.func = expr; + if (token === 15 /* LessThanToken */) { + if (!(callExpr.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) + return expr; + } + else { + parseExpected(7 /* OpenParenToken */); + } + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + parseExpected(8 /* CloseParenToken */); + expr = finishNode(callExpr); + continue; } + return expr; } - }; - - PullTypeResolver.prototype.typeCheckMembersAgainstIndexer = function (containerType, containerTypeDecl, context) { - var indexSignatures = this.getBothKindsOfIndexSignaturesExcludingAugmentedType(containerType, context); - var stringSignature = indexSignatures.stringSignature; - var numberSignature = indexSignatures.numericSignature; - - if (stringSignature || numberSignature) { - var members = containerTypeDecl.getChildDecls(); - for (var i = 0; i < members.length; i++) { - var member = members[i]; - if ((member.name || (member.kind === 4096 /* Property */ && member.name === "")) && member.kind !== 32768 /* ConstructorMethod */ && !TypeScript.hasFlag(member.flags, 16 /* Static */)) { - var memberSymbol = member.getSymbol(); - var relevantSignature = this.determineRelevantIndexerForMember(memberSymbol, numberSignature, stringSignature); - if (relevantSignature) { - var comparisonInfo = new TypeComparisonInfo(); - if (!this.sourceIsAssignableToTarget(memberSymbol.type, relevantSignature.returnType, member.ast(), context, comparisonInfo)) { - this.reportErrorThatMemberIsNotSubtypeOfIndexer(memberSymbol, relevantSignature, member.ast(), context, comparisonInfo); - } + } + function parseTypeArgumentsAndOpenParen() { + var result = parseTypeArguments(); + parseExpected(7 /* OpenParenToken */); + return result; + } + function parseTypeArguments() { + var typeArgumentListStart = scanner.getTokenPos(); + var errorCountBeforeTypeParameterList = file.syntacticErrors.length; + var result = parseBracketedList(15 /* TypeArguments */, parseType, 15 /* LessThanToken */, 16 /* GreaterThanToken */); + if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { + grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty); + } + return result; + } + function parsePrimaryExpression() { + switch (token) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + return parseTokenNode(); + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + return parseLiteralNode(); + case 7 /* OpenParenToken */: + return parseParenExpression(); + case 9 /* OpenBracketToken */: + return parseArrayLiteral(); + case 5 /* OpenBraceToken */: + return parseObjectLiteral(); + case 73 /* FunctionKeyword */: + return parseFunctionExpression(); + case 78 /* NewKeyword */: + return parseNewExpression(); + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + if (reScanSlashToken() === 4 /* RegularExpressionLiteral */) { + return parseLiteralNode(); + } + break; + default: + if (isIdentifier()) { + return parseIdentifier(); + } + } + error(ts.Diagnostics.Expression_expected); + return createMissingNode(); + } + function parseParenExpression() { + var node = createNode(135 /* ParenExpression */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + return finishNode(node); + } + function parseArrayLiteralElement() { + return token === 14 /* CommaToken */ ? createNode(142 /* OmittedExpression */) : parseAssignmentExpression(); + } + function parseArrayLiteral() { + var node = createNode(127 /* ArrayLiteral */); + parseExpected(9 /* OpenBracketToken */); + if (scanner.hasPrecedingLineBreak()) + node.flags |= 128 /* MultiLine */; + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, 2 /* Preserve */); + parseExpected(10 /* CloseBracketToken */); + return finishNode(node); + } + function parsePropertyAssignment() { + var node = createNode(129 /* PropertyAssignment */); + node.name = parsePropertyName(); + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + var body = parseBody(false); + node.initializer = makeFunctionExpression(136 /* FunctionExpression */, node.pos, undefined, sig, body); + } + else { + parseExpected(42 /* ColonToken */); + node.initializer = parseAssignmentExpression(false); + } + return finishNode(node); + } + function parseObjectLiteralMember() { + var initialPos = getNodePos(); + var initialToken = token; + if (parseContextualModifier(105 /* GetKeyword */) || parseContextualModifier(109 /* SetKeyword */)) { + var kind = initialToken === 105 /* GetKeyword */ ? 118 /* GetAccessor */ : 119 /* SetAccessor */; + return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); + } + return parsePropertyAssignment(); + } + function parseObjectLiteral() { + var node = createNode(128 /* ObjectLiteral */); + parseExpected(5 /* OpenBraceToken */); + if (scanner.hasPrecedingLineBreak()) { + node.flags |= 128 /* MultiLine */; + } + var trailingCommaBehavior = languageVersion === 0 /* ES3 */ ? 1 /* Allow */ : 2 /* Preserve */; + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, trailingCommaBehavior); + parseExpected(6 /* CloseBraceToken */); + var seen = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccesor = 4; + var GetOrSetAccessor = GetAccessor | SetAccesor; + ts.forEach(node.properties, function (p) { + if (p.kind === 142 /* OmittedExpression */) { + return; + } + var currentKind; + if (p.kind === 129 /* PropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 118 /* GetAccessor */) { + currentKind = GetAccessor; + } + else if (p.kind === 119 /* SetAccessor */) { + currentKind = SetAccesor; + } + else { + ts.Debug.fail("Unexpected syntax kind:" + ts.SyntaxKind[p.kind]); + } + if (!ts.hasProperty(seen, p.name.text)) { + seen[p.name.text] = currentKind; + } + else { + var existingKind = seen[p.name.text]; + if (currentKind === Property && existingKind === Property) { + if (isInStrictMode) { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); + } + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[p.name.text] = currentKind | existingKind; + } + else { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); } } + else { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + }); + return finishNode(node); + } + function parseFunctionExpression() { + var pos = getNodePos(); + parseExpected(73 /* FunctionKeyword */); + var name = isIdentifier() ? parseIdentifier() : undefined; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + var body = parseBody(false); + if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { + reportInvalidUseInStrictMode(name); + } + return makeFunctionExpression(136 /* FunctionExpression */, pos, name, sig, body); + } + function makeFunctionExpression(kind, pos, name, sig, body) { + var node = createNode(kind, pos); + node.name = name; + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = body; + return finishNode(node); + } + function parseNewExpression() { + var node = createNode(133 /* NewExpression */); + parseExpected(78 /* NewKeyword */); + node.func = parseCallAndAccess(parsePrimaryExpression(), true); + if (parseOptional(7 /* OpenParenToken */) || token === 15 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + parseExpected(8 /* CloseParenToken */); + } + return finishNode(node); + } + function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) { + var node = createNode(143 /* Block */); + if (parseExpected(5 /* OpenBraceToken */) || ignoreMissingOpenBrace) { + node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseBody(ignoreMissingOpenBrace) { + var saveInFunctionBody = inFunctionBody; + var saveInSwitchStatement = inSwitchStatement; + var saveInIterationStatement = inIterationStatement; + inFunctionBody = true; + if (inSwitchStatement === 1 /* Nested */) { + inSwitchStatement = 2 /* CrossingFunctionBoundary */; + } + if (inIterationStatement === 1 /* Nested */) { + inIterationStatement = 2 /* CrossingFunctionBoundary */; + } + labelledStatementInfo.pushFunctionBoundary(); + var block = parseBlock(ignoreMissingOpenBrace, true); + block.kind = 168 /* FunctionBlock */; + labelledStatementInfo.pop(); + inFunctionBody = saveInFunctionBody; + inSwitchStatement = saveInSwitchStatement; + inIterationStatement = saveInIterationStatement; + return block; + } + function parseEmptyStatement() { + var node = createNode(145 /* EmptyStatement */); + parseExpected(13 /* SemicolonToken */); + return finishNode(node); + } + function parseIfStatement() { + var node = createNode(147 /* IfStatement */); + parseExpected(74 /* IfKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(66 /* ElseKeyword */) ? parseStatement() : undefined; + return finishNode(node); + } + function parseDoStatement() { + var node = createNode(148 /* DoStatement */); + parseExpected(65 /* DoKeyword */); + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + node.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + parseExpected(90 /* WhileKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + parseOptional(13 /* SemicolonToken */); + return finishNode(node); + } + function parseWhileStatement() { + var node = createNode(149 /* WhileStatement */); + parseExpected(90 /* WhileKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + node.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + return finishNode(node); + } + function parseForOrForInStatement() { + var pos = getNodePos(); + parseExpected(72 /* ForKeyword */); + parseExpected(7 /* OpenParenToken */); + if (token !== 13 /* SemicolonToken */) { + if (parseOptional(88 /* VarKeyword */)) { + var declarations = parseVariableDeclarationList(0, true); + if (!declarations.length) { + error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + } + else { + var varOrInit = parseExpression(true); + } + } + var forOrForInStatement; + if (parseOptional(76 /* InKeyword */)) { + var forInStatement = createNode(151 /* ForInStatement */, pos); + if (declarations) { + if (declarations.length > 1) { + error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + } + forInStatement.declaration = declarations[0]; + } + else { + forInStatement.variable = varOrInit; + } + forInStatement.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + forOrForInStatement = forInStatement; + } + else { + var forStatement = createNode(150 /* ForStatement */, pos); + if (declarations) + forStatement.declarations = declarations; + if (varOrInit) + forStatement.initializer = varOrInit; + parseExpected(13 /* SemicolonToken */); + if (token !== 13 /* SemicolonToken */ && token !== 8 /* CloseParenToken */) { + forStatement.condition = parseExpression(); + } + parseExpected(13 /* SemicolonToken */); + if (token !== 8 /* CloseParenToken */) { + forStatement.iterator = parseExpression(); + } + parseExpected(8 /* CloseParenToken */); + forOrForInStatement = forStatement; + } + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + forOrForInStatement.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + return finishNode(forOrForInStatement); + } + function parseBreakOrContinueStatement(kind) { + var node = createNode(kind); + var errorCountBeforeStatement = file.syntacticErrors.length; + var keywordStart = scanner.getTokenPos(); + var keywordLength = scanner.getTextPos() - keywordStart; + parseExpected(kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */); + if (!canParseSemicolon()) + node.label = parseIdentifier(); + parseSemicolon(); + finishNode(node); + if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { + if (node.label) { + checkBreakOrContinueStatementWithLabel(node); + } + else { + checkBareBreakOrContinueStatement(node); } } - }; - - PullTypeResolver.prototype.determineRelevantIndexerForMember = function (member, numberIndexSignature, stringIndexSignature) { - if (numberIndexSignature && TypeScript.PullHelpers.isNameNumeric(member.name)) { - return numberIndexSignature; - } else if (stringIndexSignature) { - return stringIndexSignature; + return node; + } + function checkBareBreakOrContinueStatement(node) { + if (node.kind === 153 /* BreakStatement */) { + if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) { + return; + } + else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) { + grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); + return; + } } - - return null; - }; - - PullTypeResolver.prototype.reportErrorThatMemberIsNotSubtypeOfIndexer = function (member, indexSignature, astForError, context, comparisonInfo) { - var enclosingSymbol = this.getEnclosingSymbolForAST(astForError); - if (indexSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); + else if (node.kind === 152 /* ContinueStatement */) { + if (inIterationStatement === 1 /* Nested */) { + return; } - } else { - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1, [indexSignature.returnType.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(astForError, TypeScript.DiagnosticCode.All_named_properties_must_be_assignable_to_string_indexer_type_0, [indexSignature.returnType.toString(enclosingSymbol)])); + else if (inIterationStatement === 0 /* NotNested */) { + grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); + return; } } - }; - - PullTypeResolver.prototype.typeCheckIfTypeMemberPropertyOkToOverride = function (typeSymbol, extendedType, typeMember, extendedTypeMember, enclosingDecl, comparisonInfo) { - if (!typeSymbol.isClass()) { - return true; + else { + ts.Debug.fail("checkAnonymousBreakOrContinueStatement"); } - - var typeMemberKind = typeMember.kind; - var extendedMemberKind = extendedTypeMember.kind; - - if (typeMemberKind === extendedMemberKind) { + ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */); + grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + } + function checkBreakOrContinueStatementWithLabel(node) { + var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 152 /* ContinueStatement */, false); + if (nodeIsNestedInLabel === 1 /* Nested */) { + return; + } + if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) { + grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + return; + } + if (node.kind === 152 /* ContinueStatement */) { + grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + else if (node.kind === 153 /* BreakStatement */) { + grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); + } + else { + ts.Debug.fail("checkBreakOrContinueStatementWithLabel"); + } + } + function parseReturnStatement() { + var node = createNode(154 /* ReturnStatement */); + var errorCountBeforeReturnStatement = file.syntacticErrors.length; + var returnTokenStart = scanner.getTokenPos(); + var returnTokenLength = scanner.getTextPos() - returnTokenStart; + parseExpected(80 /* ReturnKeyword */); + if (!canParseSemicolon()) + node.expression = parseExpression(); + parseSemicolon(); + if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { + grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + } + return finishNode(node); + } + function parseWithStatement() { + var node = createNode(155 /* WithStatement */); + var startPos = scanner.getTokenPos(); + parseExpected(91 /* WithKeyword */); + var endPos = scanner.getStartPos(); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + node.statement = parseStatement(); + node = finishNode(node); + if (isInStrictMode) { + grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + return node; + } + function parseCaseClause() { + var node = createNode(157 /* CaseClause */); + parseExpected(57 /* CaseKeyword */); + node.expression = parseExpression(); + parseExpected(42 /* ColonToken */); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + return finishNode(node); + } + function parseDefaultClause() { + var node = createNode(158 /* DefaultClause */); + parseExpected(63 /* DefaultKeyword */); + parseExpected(42 /* ColonToken */); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + return finishNode(node); + } + function parseCaseOrDefaultClause() { + return token === 57 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); + } + function parseSwitchStatement() { + var node = createNode(156 /* SwitchStatement */); + parseExpected(82 /* SwitchKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + parseExpected(5 /* OpenBraceToken */); + var saveInSwitchStatement = inSwitchStatement; + inSwitchStatement = 1 /* Nested */; + node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); + inSwitchStatement = saveInSwitchStatement; + parseExpected(6 /* CloseBraceToken */); + var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 158 /* DefaultClause */; }); + for (var i = 1, n = defaultClauses.length; i < n; i++) { + var clause = defaultClauses[i]; + var start = ts.skipTrivia(file.text, clause.pos); + var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; + grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + } + return finishNode(node); + } + function parseThrowStatement() { + var node = createNode(160 /* ThrowStatement */); + parseExpected(84 /* ThrowKeyword */); + if (scanner.hasPrecedingLineBreak()) { + error(ts.Diagnostics.Line_break_not_permitted_here); + } + node.expression = parseExpression(); + parseSemicolon(); + return finishNode(node); + } + function parseTryStatement() { + var node = createNode(161 /* TryStatement */); + node.tryBlock = parseTokenAndBlock(86 /* TryKeyword */, 162 /* TryBlock */); + if (token === 58 /* CatchKeyword */) { + node.catchBlock = parseCatchBlock(); + } + if (token === 71 /* FinallyKeyword */) { + node.finallyBlock = parseTokenAndBlock(71 /* FinallyKeyword */, 164 /* FinallyBlock */); + } + if (!(node.catchBlock || node.finallyBlock)) { + error(ts.Diagnostics.catch_or_finally_expected); + } + return finishNode(node); + } + function parseTokenAndBlock(token, kind) { + var pos = getNodePos(); + parseExpected(token); + var result = parseBlock(false, false); + result.kind = kind; + result.pos = pos; + return result; + } + function parseCatchBlock() { + var pos = getNodePos(); + parseExpected(58 /* CatchKeyword */); + parseExpected(7 /* OpenParenToken */); + var variable = parseIdentifier(); + var typeAnnotationColonStart = scanner.getTokenPos(); + var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; + var typeAnnotation = parseTypeAnnotation(); + parseExpected(8 /* CloseParenToken */); + var result = parseBlock(false, false); + result.kind = 163 /* CatchBlock */; + result.pos = pos; + result.variable = variable; + if (typeAnnotation) { + errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + } + if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { + reportInvalidUseInStrictMode(variable); + } + return result; + } + function parseDebuggerStatement() { + var node = createNode(165 /* DebuggerStatement */); + parseExpected(62 /* DebuggerKeyword */); + parseSemicolon(); + return finishNode(node); + } + function isIterationStatementStart() { + return token === 90 /* WhileKeyword */ || token === 65 /* DoKeyword */ || token === 72 /* ForKeyword */; + } + function parseStatementWithLabelSet() { + labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); + var statement = parseStatement(); + labelledStatementInfo.pop(); + return statement; + } + function isLabel() { + return isIdentifier() && lookAhead(function () { return nextToken() === 42 /* ColonToken */; }); + } + function parseLabelledStatement() { + var node = createNode(159 /* LabelledStatement */); + node.label = parseIdentifier(); + parseExpected(42 /* ColonToken */); + if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { + grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); + } + labelledStatementInfo.addLabel(node.label); + node.statement = isLabel() ? parseLabelledStatement() : parseStatementWithLabelSet(); + return finishNode(node); + } + function parseExpressionStatement() { + var node = createNode(146 /* ExpressionStatement */); + node.expression = parseExpression(); + parseSemicolon(); + return finishNode(node); + } + function isStatement(inErrorRecovery) { + switch (token) { + case 13 /* SemicolonToken */: + return !inErrorRecovery; + case 5 /* OpenBraceToken */: + case 88 /* VarKeyword */: + case 73 /* FunctionKeyword */: + case 74 /* IfKeyword */: + case 65 /* DoKeyword */: + case 90 /* WhileKeyword */: + case 72 /* ForKeyword */: + case 61 /* ContinueKeyword */: + case 56 /* BreakKeyword */: + case 80 /* ReturnKeyword */: + case 91 /* WithKeyword */: + case 82 /* SwitchKeyword */: + case 84 /* ThrowKeyword */: + case 86 /* TryKeyword */: + case 62 /* DebuggerKeyword */: + case 58 /* CatchKeyword */: + case 71 /* FinallyKeyword */: + return true; + case 93 /* InterfaceKeyword */: + case 59 /* ClassKeyword */: + case 106 /* ModuleKeyword */: + case 67 /* EnumKeyword */: + if (isDeclaration()) { + return false; + } + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + if (lookAhead(function () { return nextToken() >= 55 /* Identifier */; })) { + return false; + } + default: + return isExpression(); + } + } + function parseStatement() { + switch (token) { + case 5 /* OpenBraceToken */: + return parseBlock(false, false); + case 88 /* VarKeyword */: + return parseVariableStatement(); + case 73 /* FunctionKeyword */: + return parseFunctionDeclaration(); + case 13 /* SemicolonToken */: + return parseEmptyStatement(); + case 74 /* IfKeyword */: + return parseIfStatement(); + case 65 /* DoKeyword */: + return parseDoStatement(); + case 90 /* WhileKeyword */: + return parseWhileStatement(); + case 72 /* ForKeyword */: + return parseForOrForInStatement(); + case 61 /* ContinueKeyword */: + return parseBreakOrContinueStatement(152 /* ContinueStatement */); + case 56 /* BreakKeyword */: + return parseBreakOrContinueStatement(153 /* BreakStatement */); + case 80 /* ReturnKeyword */: + return parseReturnStatement(); + case 91 /* WithKeyword */: + return parseWithStatement(); + case 82 /* SwitchKeyword */: + return parseSwitchStatement(); + case 84 /* ThrowKeyword */: + return parseThrowStatement(); + case 86 /* TryKeyword */: + case 58 /* CatchKeyword */: + case 71 /* FinallyKeyword */: + return parseTryStatement(); + case 62 /* DebuggerKeyword */: + return parseDebuggerStatement(); + default: + if (isLabel()) { + return parseLabelledStatement(); + } + return parseExpressionStatement(); + } + } + function parseStatementOrFunction() { + return token === 73 /* FunctionKeyword */ ? parseFunctionDeclaration() : parseStatement(); + } + function parseAndCheckFunctionBody(isConstructor) { + var initialPosition = scanner.getTokenPos(); + var errorCountBeforeBody = file.syntacticErrors.length; + if (token === 5 /* OpenBraceToken */) { + var body = parseBody(false); + if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { + var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; + grammarErrorAtPos(initialPosition, 1, diagnostic); + } + return body; + } + if (canParseSemicolon()) { + parseSemicolon(); + return undefined; + } + error(ts.Diagnostics.Block_or_expected); + } + function parseVariableDeclaration(flags, noIn) { + var node = createNode(166 /* VariableDeclaration */); + node.flags = flags; + var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; + node.name = parseIdentifier(); + node.type = parseTypeAnnotation(); + var initializerStart = scanner.getTokenPos(); + var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; + node.initializer = parseInitializer(false, noIn); + if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { + grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + reportInvalidUseInStrictMode(node.name); + } + return finishNode(node); + } + function parseVariableDeclarationList(flags, noIn) { + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, 0 /* Disallow */); + } + function parseVariableStatement(pos, flags) { + var node = createNode(144 /* VariableStatement */, pos); + if (flags) + node.flags = flags; + var errorCountBeforeVarStatement = file.syntacticErrors.length; + parseExpected(88 /* VarKeyword */); + node.declarations = parseVariableDeclarationList(flags, false); + parseSemicolon(); + if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { + grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + return finishNode(node); + } + function parseFunctionDeclaration(pos, flags) { + var node = createNode(167 /* FunctionDeclaration */, pos); + if (flags) + node.flags = flags; + parseExpected(73 /* FunctionKeyword */); + node.name = parseIdentifier(); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = parseAndCheckFunctionBody(false); + if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + reportInvalidUseInStrictMode(node.name); + } + return finishNode(node); + } + function parseConstructorDeclaration(pos, flags) { + var node = createNode(117 /* Constructor */, pos); + node.flags = flags; + parseExpected(103 /* ConstructorKeyword */); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = parseAndCheckFunctionBody(true); + if (node.typeParameters) { + grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + if (node.type) { + grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } + return finishNode(node); + } + function parsePropertyMemberDeclaration(pos, flags) { + var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; + var name = parsePropertyName(); + var questionStart = scanner.getTokenPos(); + if (parseOptional(41 /* QuestionToken */)) { + errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional); + } + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + var method = createNode(116 /* Method */, pos); + method.flags = flags; + method.name = name; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + method.typeParameters = sig.typeParameters; + method.parameters = sig.parameters; + method.type = sig.type; + method.body = parseAndCheckFunctionBody(false); + return finishNode(method); + } + else { + var property = createNode(115 /* Property */, pos); + property.flags = flags; + property.name = name; + property.type = parseTypeAnnotation(); + var initializerStart = scanner.getTokenPos(); + var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; + property.initializer = parseInitializer(false); + parseSemicolon(); + if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { + grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + return finishNode(property); + } + } + function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) { + var errorCountBeforeAccessor = file.syntacticErrors.length; + var accessor = parseMemberAccessorDeclaration(kind, pos, flags); + if (errorCountBeforeAccessor === file.syntacticErrors.length) { + if (languageVersion < 1 /* ES5 */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); + } + else if (inAmbientContext) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); + } + else if (accessor.typeParameters) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); + } + else if (kind === 118 /* GetAccessor */ && accessor.parameters.length) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + } + else if (kind === 119 /* SetAccessor */) { + if (accessor.type) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + else if (accessor.parameters.length !== 1) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else { + var parameter = accessor.parameters[0]; + if (parameter.flags & 8 /* Rest */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + else if (parameter.flags & ts.NodeFlags.Modifier) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + else if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + else if (parameter.initializer) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } + } + } + return accessor; + } + function parseMemberAccessorDeclaration(kind, pos, flags) { + var node = createNode(kind, pos); + node.flags = flags; + node.name = parsePropertyName(); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + if (inAmbientContext && canParseSemicolon()) { + parseSemicolon(); + node.body = createMissingNode(); + } + else { + node.body = parseBody(false); + } + return finishNode(node); + } + function isClassMemberStart() { + var idToken; + while (isModifier(token)) { + idToken = token; + nextToken(); + } + if (isPropertyName()) { + idToken = token; + nextToken(); + } + if (token === 9 /* OpenBracketToken */) { return true; } - - var errorCode; - if (typeMemberKind === 4096 /* Property */) { - if (typeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; + if (idToken !== undefined) { + if (!isKeyword(idToken) || idToken === 109 /* SetKeyword */ || idToken === 105 /* GetKeyword */) { + return true; } - } else if (typeMemberKind === 65536 /* Method */) { - if (extendedTypeMember.isAccessor()) { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; - } else { - errorCode = TypeScript.DiagnosticCode.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + case 42 /* ColonToken */: + case 43 /* EqualsToken */: + case 41 /* QuestionToken */: + return true; + default: + return canParseSemicolon(); } } - - var message = TypeScript.getDiagnosticMessage(errorCode, [typeSymbol.toString(), typeMember.getScopedNameEx().toString(), extendedType.toString()]); - comparisonInfo.addMessage(message); return false; - }; - - PullTypeResolver.prototype.typeCheckIfTypeExtendsType = function (classOrInterface, name, typeSymbol, extendedType, enclosingDecl, context) { - var typeMembers = typeSymbol.getMembers(); - - var comparisonInfo = new TypeComparisonInfo(); - var foundError = false; - var foundError1 = false; - var foundError2 = false; - - for (var i = 0; i < typeMembers.length; i++) { - var propName = typeMembers[i].name; - var extendedTypeProp = extendedType.findMember(propName, true); - if (extendedTypeProp) { - this.resolveDeclaredSymbol(extendedTypeProp, context); - foundError1 = !this.typeCheckIfTypeMemberPropertyOkToOverride(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, enclosingDecl, comparisonInfo); - - if (!foundError1) { - foundError2 = !this.sourcePropertyIsAssignableToTargetProperty(typeSymbol, extendedType, typeMembers[i], extendedTypeProp, classOrInterface, context, comparisonInfo); - } - - if (foundError1 || foundError2) { - foundError = true; + } + function parseAndCheckModifiers(context) { + var flags = 0; + var lastStaticModifierStart; + var lastStaticModifierLength; + var lastDeclareModifierStart; + var lastDeclareModifierLength; + var lastPrivateModifierStart; + var lastPrivateModifierLength; + while (true) { + var modifierStart = scanner.getTokenPos(); + var modifierToken = token; + if (!parseAnyContextualModifier()) + break; + var modifierLength = scanner.getStartPos() - modifierStart; + switch (modifierToken) { + case 98 /* PublicKeyword */: + if (flags & 32 /* Private */ || flags & 16 /* Public */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); + } + flags |= 16 /* Public */; + break; + case 96 /* PrivateKeyword */: + if (flags & 32 /* Private */ || flags & 16 /* Public */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); + } + lastPrivateModifierStart = modifierStart; + lastPrivateModifierLength = modifierLength; + flags |= 32 /* Private */; + break; + case 99 /* StaticKeyword */: + if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } + lastStaticModifierStart = modifierStart; + lastStaticModifierLength = modifierLength; + flags |= 64 /* Static */; + break; + case 68 /* ExportKeyword */: + if (flags & 1 /* Export */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export"); + } + else if (flags & 2 /* Ambient */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } + else if (context === 2 /* ClassMembers */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= 1 /* Export */; + break; + case 104 /* DeclareKeyword */: + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare"); + } + else if (context === 2 /* ClassMembers */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (inAmbientContext && context === 1 /* ModuleElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + lastDeclareModifierStart = modifierStart; + lastDeclareModifierLength = modifierLength; + flags |= 2 /* Ambient */; break; - } } } - - if (!foundError && typeSymbol.hasOwnCallSignatures()) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); - } - - if (!foundError && typeSymbol.hasOwnConstructSignatures()) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); + if (token === 103 /* ConstructorKeyword */ && flags & 64 /* Static */) { + grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } - - if (!foundError && typeSymbol.hasOwnIndexSignatures()) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(typeSymbol, extendedType, classOrInterface, context, comparisonInfo); + else if (token === 103 /* ConstructorKeyword */ && flags & 32 /* Private */) { + grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); } - - if (!foundError && typeSymbol.isClass()) { - var typeConstructorType = typeSymbol.getConstructorMethod().type; - var typeConstructorTypeMembers = typeConstructorType.getMembers(); - if (typeConstructorTypeMembers.length) { - var extendedConstructorType = extendedType.getConstructorMethod().type; - var comparisonInfoForPropTypeCheck = new TypeComparisonInfo(comparisonInfo); - - for (var i = 0; i < typeConstructorTypeMembers.length; i++) { - var propName = typeConstructorTypeMembers[i].name; - var extendedConstructorTypeProp = extendedConstructorType.findMember(propName, true); - if (extendedConstructorTypeProp) { - if (!extendedConstructorTypeProp.isResolved) { - this.resolveDeclaredSymbol(extendedConstructorTypeProp, context); - } - - if (!this.sourcePropertyIsAssignableToTargetProperty(typeConstructorType, extendedConstructorType, typeConstructorTypeMembers[i], extendedConstructorTypeProp, classOrInterface, context, comparisonInfo)) { - foundError = true; - break; - } - } - } + else if (token === 75 /* ImportKeyword */) { + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); } } - - if (foundError) { - var errorCode; - if (typeSymbol.isClass()) { - errorCode = TypeScript.DiagnosticCode.Class_0_cannot_extend_class_1_NL_2; - } else { - if (extendedType.isClass()) { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_class_1_NL_2; - } else { - errorCode = TypeScript.DiagnosticCode.Interface_0_cannot_extend_interface_1_NL_2; - } + else if (token === 93 /* InterfaceKeyword */) { + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); } - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, errorCode, [typeSymbol.getScopedName(), extendedType.getScopedName(), comparisonInfo.message])); } - }; - - PullTypeResolver.prototype.typeCheckIfClassImplementsType = function (classDecl, classSymbol, implementedType, enclosingDecl, context) { - var comparisonInfo = new TypeComparisonInfo(); - var foundError = !this.sourceMembersAreAssignableToTargetMembers(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceCallSignaturesAreAssignableToTargetCallSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceConstructSignaturesAreAssignableToTargetConstructSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - if (!foundError) { - foundError = !this.sourceIndexSignaturesAreAssignableToTargetIndexSignatures(classSymbol, implementedType, classDecl, context, comparisonInfo); - } + else if (token !== 68 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) { + var declarationStart = scanner.getTokenPos(); + var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; + grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + return flags; + } + function parseClassMemberDeclaration() { + var pos = getNodePos(); + var flags = parseAndCheckModifiers(2 /* ClassMembers */); + if (parseContextualModifier(105 /* GetKeyword */)) { + return parseAndCheckMemberAccessorDeclaration(118 /* GetAccessor */, pos, flags); + } + if (parseContextualModifier(109 /* SetKeyword */)) { + return parseAndCheckMemberAccessorDeclaration(119 /* SetAccessor */, pos, flags); + } + if (token === 103 /* ConstructorKeyword */) { + return parseConstructorDeclaration(pos, flags); + } + if (token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { + return parsePropertyMemberDeclaration(pos, flags); + } + if (token === 9 /* OpenBracketToken */) { + if (flags) { + var start = getTokenPos(pos); + var length = getNodePos() - start; + errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); } + return parseIndexSignatureMember(); } - - if (foundError) { - var enclosingSymbol = this.getEnclosingSymbolForAST(classDecl); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(classDecl.identifier, TypeScript.DiagnosticCode.Class_0_declares_interface_1_but_does_not_implement_it_NL_2, [classSymbol.getScopedName(enclosingSymbol), implementedType.getScopedName(enclosingSymbol), comparisonInfo.message])); + ts.Debug.fail("Should not have attempted to parse class member declaration."); + } + function parseClassDeclaration(pos, flags) { + var node = createNode(169 /* ClassDeclaration */, pos); + node.flags = flags; + var errorCountBeforeClassDeclaration = file.syntacticErrors.length; + parseExpected(59 /* ClassKeyword */); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + node.baseType = parseOptional(69 /* ExtendsKeyword */) ? parseTypeReference() : undefined; + var implementsKeywordStart = scanner.getTokenPos(); + var implementsKeywordLength; + if (parseOptional(92 /* ImplementsKeyword */)) { + implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); } - }; - - PullTypeResolver.prototype.computeValueSymbolFromAST = function (valueDeclAST, context) { - var prevInTypeCheck = context.inTypeCheck; - context.inTypeCheck = false; - - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - if (valueDeclAST.kind() == 11 /* IdentifierName */) { - var valueSymbol = this.computeNameExpression(valueDeclAST, context); - } else { - TypeScript.Debug.assert(valueDeclAST.kind() == 121 /* QualifiedName */); - var qualifiedName = valueDeclAST; - - var lhs = this.computeValueSymbolFromAST(qualifiedName.left, context); - var valueSymbol = this.computeDottedNameExpressionFromLHS(lhs.symbol, qualifiedName.left, qualifiedName.right, context, false); + var errorCountBeforeClassBody = file.syntacticErrors.length; + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration); + parseExpected(6 /* CloseBraceToken */); } - var valueSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(valueDeclAST); - - this.semanticInfoChain.setAliasSymbolForAST(valueDeclAST, typeSymbolAlias); - context.inTypeCheck = prevInTypeCheck; - - return { symbol: valueSymbol, alias: valueSymbolAlias }; - }; - - PullTypeResolver.prototype.hasClassTypeSymbolConflictAsValue = function (baseDeclAST, typeSymbol, enclosingDecl, context) { - var typeSymbolAlias = this.semanticInfoChain.getAliasSymbolForAST(baseDeclAST); - - var valueDeclAST = baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST; - var valueSymbolInfo = this.computeValueSymbolFromAST(valueDeclAST, context); - var valueSymbol = valueSymbolInfo.symbol; - var valueSymbolAlias = valueSymbolInfo.alias; - - if (typeSymbolAlias && valueSymbolAlias) { - return typeSymbolAlias !== valueSymbolAlias; + else { + node.members = createMissingList(); } - - if (!valueSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */)) { - return true; + if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { + grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements"); } - - var associatedContainerType = valueSymbol.type ? valueSymbol.type.getAssociatedContainerType() : null; - - if (associatedContainerType) { - return associatedContainerType !== typeSymbol.getRootSymbol(); + return finishNode(node); + } + function parseInterfaceDeclaration(pos, flags) { + var node = createNode(170 /* InterfaceDeclaration */, pos); + node.flags = flags; + var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; + parseExpected(93 /* InterfaceKeyword */); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + var extendsKeywordStart = scanner.getTokenPos(); + var extendsKeywordLength; + if (parseOptional(69 /* ExtendsKeyword */)) { + extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); } - - return true; - }; - - PullTypeResolver.prototype.typeCheckBase = function (classOrInterface, name, typeSymbol, baseDeclAST, isExtendedType, enclosingDecl, context) { - var _this = this; - var typeDecl = this.semanticInfoChain.getDeclForAST(classOrInterface); - - var baseType = this.resolveTypeReference(baseDeclAST, context).type; - - if (!baseType) { - return; + var errorCountBeforeInterfaceBody = file.syntacticErrors.length; + node.members = parseTypeLiteral().members; + if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { + grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends"); } - - var typeDeclIsClass = typeSymbol.isClass(); - - if (!typeSymbol.isValidBaseKind(baseType, isExtendedType)) { - if (!baseType.isError()) { - if (isExtendedType) { - if (typeDeclIsClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_extend_another_class)); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.An_interface_may_only_extend_another_class_or_interface)); - } - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.A_class_may_only_implement_another_class_or_interface)); + return finishNode(node); + } + function parseAndCheckEnumDeclaration(pos, flags) { + function isIntegerLiteral(expression) { + function isInteger(literalExpression) { + return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); + } + if (expression.kind === 138 /* PrefixOperator */) { + var unaryExpression = expression; + if (unaryExpression.operator === 24 /* PlusToken */ || unaryExpression.operator === 25 /* MinusToken */) { + expression = unaryExpression.operand; } } - return; - } else if (typeDeclIsClass && isExtendedType) { - if (this.hasClassTypeSymbolConflictAsValue(baseDeclAST, baseType, enclosingDecl, context)) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(baseDeclAST, TypeScript.DiagnosticCode.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1, [TypeScript.ASTHelpers.getNameOfIdenfierOrQualifiedName(baseDeclAST.kind() == 126 /* GenericType */ ? baseDeclAST.name : baseDeclAST), baseType.toString(enclosingDecl ? enclosingDecl.getSymbol() : null)])); + if (expression.kind === 2 /* NumericLiteral */) { + return isInteger(expression); } + return false; } - - if (baseType.hasBase(typeSymbol)) { - typeSymbol.setHasBaseTypeConflict(); - baseType.setHasBaseTypeConflict(); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, typeDeclIsClass ? TypeScript.DiagnosticCode.Class_0_is_recursively_referenced_as_a_base_type_of_itself : TypeScript.DiagnosticCode.Interface_0_is_recursively_referenced_as_a_base_type_of_itself, [typeSymbol.getScopedName()])); - return; + var inConstantEnumMemberSection = true; + function parseAndCheckEnumMember() { + var node = createNode(176 /* EnumMember */); + var errorCountBeforeEnumMember = file.syntacticErrors.length; + node.name = parsePropertyName(); + node.initializer = parseInitializer(false); + if (inAmbientContext) { + if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { + grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); + } + } + else if (node.initializer) { + inConstantEnumMemberSection = isIntegerLiteral(node.initializer); + } + else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { + grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer); + } + return finishNode(node); } - - if (isExtendedType) { - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfTypeExtendsType(classOrInterface, name, typeSymbol, baseType, enclosingDecl, context); - }); - } else { - TypeScript.Debug.assert(classOrInterface.kind() === 131 /* ClassDeclaration */); - - this.typeCheckCallBacks.push(function (context) { - return _this.typeCheckIfClassImplementsType(classOrInterface, typeSymbol, baseType, enclosingDecl, context); - }); + var node = createNode(171 /* EnumDeclaration */, pos); + node.flags = flags; + parseExpected(67 /* EnumKeyword */); + node.name = parseIdentifier(); + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, 1 /* Allow */); + parseExpected(6 /* CloseBraceToken */); } - - this.checkSymbolPrivacy(typeSymbol, baseType, function (errorSymbol) { - return _this.baseListPrivacyErrorReporter(classOrInterface, typeSymbol, baseDeclAST, isExtendedType, errorSymbol, context); - }); - }; - - PullTypeResolver.prototype.typeCheckBases = function (classOrInterface, name, heritageClauses, typeSymbol, enclosingDecl, context) { - var _this = this; - var extendsClause = TypeScript.ASTHelpers.getExtendsHeritageClause(heritageClauses); - var implementsClause = TypeScript.ASTHelpers.getImplementsHeritageClause(heritageClauses); - if (!extendsClause && !implementsClause) { - return; + else { + node.members = createMissingList(); } - - if (extendsClause) { - for (var i = 0; i < extendsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, extendsClause.typeNames.nonSeparatorAt(i), true, enclosingDecl, context); - } + return finishNode(node); + } + function parseModuleBody() { + var node = createNode(173 /* ModuleBlock */); + if (parseExpected(5 /* OpenBraceToken */)) { + node.statements = parseList(1 /* ModuleElements */, false, parseModuleElement); + parseExpected(6 /* CloseBraceToken */); } - - if (typeSymbol.isClass()) { - if (implementsClause) { - for (var i = 0; i < implementsClause.typeNames.nonSeparatorCount(); i++) { - this.typeCheckBase(classOrInterface, name, typeSymbol, implementsClause.typeNames.nonSeparatorAt(i), false, enclosingDecl, context); - } - } - } else if (extendsClause && !typeSymbol.hasBaseTypeConflict() && typeSymbol.getExtendedTypes().length > 1) { - var firstInterfaceASTWithExtendsClause = TypeScript.ArrayUtilities.firstOrDefault(typeSymbol.getDeclarations(), function (decl) { - return decl.ast().heritageClauses !== null; - }).ast(); - if (classOrInterface === firstInterfaceASTWithExtendsClause) { - this.typeCheckCallBacks.push(function (context) { - _this.checkTypeCompatibilityBetweenBases(classOrInterface.identifier, typeSymbol, context); + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseInternalModuleTail(pos, flags) { + var node = createNode(172 /* ModuleDeclaration */, pos); + node.flags = flags; + node.name = parseIdentifier(); + if (parseOptional(11 /* DotToken */)) { + node.body = parseInternalModuleTail(getNodePos(), 1 /* Export */); + } + else { + node.body = parseModuleBody(); + ts.forEach(node.body.statements, function (s) { + if (s.kind === 175 /* ExportAssignment */) { + grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (s.kind === 174 /* ImportDeclaration */ && s.externalModuleName) { + grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + }); + } + return finishNode(node); + } + function parseAmbientExternalModuleDeclaration(pos, flags) { + var node = createNode(172 /* ModuleDeclaration */, pos); + node.flags = flags; + node.name = parseStringLiteral(); + if (!inAmbientContext) { + var errorCount = file.syntacticErrors.length; + if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { + grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + var saveInAmbientContext = inAmbientContext; + inAmbientContext = true; + node.body = parseModuleBody(); + inAmbientContext = saveInAmbientContext; + return finishNode(node); + } + function parseModuleDeclaration(pos, flags) { + parseExpected(106 /* ModuleKeyword */); + return token === 3 /* StringLiteral */ ? parseAmbientExternalModuleDeclaration(pos, flags) : parseInternalModuleTail(pos, flags); + } + function parseImportDeclaration(pos, flags) { + var node = createNode(174 /* ImportDeclaration */, pos); + node.flags = flags; + parseExpected(75 /* ImportKeyword */); + node.name = parseIdentifier(); + parseExpected(43 /* EqualsToken */); + var entityName = parseEntityName(false); + if (entityName.kind === 55 /* Identifier */ && entityName.text === "require" && parseOptional(7 /* OpenParenToken */)) { + node.externalModuleName = parseStringLiteral(); + parseExpected(8 /* CloseParenToken */); + } + else { + node.entityName = entityName; + } + parseSemicolon(); + return finishNode(node); + } + function parseExportAssignmentTail(pos) { + var node = createNode(175 /* ExportAssignment */, pos); + node.exportName = parseIdentifier(); + parseSemicolon(); + return finishNode(node); + } + function isDeclaration() { + switch (token) { + case 88 /* VarKeyword */: + case 73 /* FunctionKeyword */: + return true; + case 59 /* ClassKeyword */: + case 93 /* InterfaceKeyword */: + case 67 /* EnumKeyword */: + case 75 /* ImportKeyword */: + return lookAhead(function () { return nextToken() >= 55 /* Identifier */; }); + case 106 /* ModuleKeyword */: + return lookAhead(function () { return nextToken() >= 55 /* Identifier */ || token === 3 /* StringLiteral */; }); + case 68 /* ExportKeyword */: + return lookAhead(function () { return nextToken() === 43 /* EqualsToken */ || isDeclaration(); }); + case 104 /* DeclareKeyword */: + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + return lookAhead(function () { + nextToken(); + return isDeclaration(); }); - } } - }; - - PullTypeResolver.prototype.checkTypeCompatibilityBetweenBases = function (name, typeSymbol, context) { - var derivedIndexSignatures = typeSymbol.getOwnIndexSignatures(); - - var inheritedMembersMap = TypeScript.createIntrinsicsObject(); - var inheritedIndexSignatures = new InheritedIndexSignatureInfo(); - - var typeHasOwnNumberIndexer = false; - var typeHasOwnStringIndexer = false; - - if (typeSymbol.hasOwnIndexSignatures()) { - var ownIndexSignatures = typeSymbol.getOwnIndexSignatures(); - for (var i = 0; i < ownIndexSignatures.length; i++) { - if (ownIndexSignatures[i].parameters[0].type === this.semanticInfoChain.numberTypeSymbol) { - typeHasOwnNumberIndexer = true; - } else { - typeHasOwnStringIndexer = true; + } + function parseDeclaration(modifierContext) { + var pos = getNodePos(); + var errorCountBeforeModifiers = file.syntacticErrors.length; + var flags = parseAndCheckModifiers(modifierContext); + if (token === 68 /* ExportKeyword */) { + var modifiersEnd = scanner.getStartPos(); + nextToken(); + if (parseOptional(43 /* EqualsToken */)) { + var exportAssignmentTail = parseExportAssignmentTail(pos); + if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { + var modifiersStart = ts.skipTrivia(sourceText, pos); + grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } + return exportAssignmentTail; } } - var baseTypes = typeSymbol.getExtendedTypes(); - for (var i = 0; i < baseTypes.length; i++) { - if (this.checkNamedPropertyIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedMembersMap, context) || this.checkIndexSignatureIdentityBetweenBases(name, typeSymbol, baseTypes[i], inheritedIndexSignatures, typeHasOwnNumberIndexer, typeHasOwnStringIndexer, context)) { - return; - } + var saveInAmbientContext = inAmbientContext; + if (flags & 2 /* Ambient */) { + inAmbientContext = true; } - - if (this.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature(name, typeSymbol, inheritedIndexSignatures, context)) { - return; + var result; + switch (token) { + case 88 /* VarKeyword */: + result = parseVariableStatement(pos, flags); + break; + case 73 /* FunctionKeyword */: + result = parseFunctionDeclaration(pos, flags); + break; + case 59 /* ClassKeyword */: + result = parseClassDeclaration(pos, flags); + break; + case 93 /* InterfaceKeyword */: + result = parseInterfaceDeclaration(pos, flags); + break; + case 67 /* EnumKeyword */: + result = parseAndCheckEnumDeclaration(pos, flags); + break; + case 106 /* ModuleKeyword */: + result = parseModuleDeclaration(pos, flags); + break; + case 75 /* ImportKeyword */: + result = parseImportDeclaration(pos, flags); + break; + default: + error(ts.Diagnostics.Declaration_expected); } - - this.checkInheritedMembersAgainstInheritedIndexSignatures(name, typeSymbol, inheritedIndexSignatures, inheritedMembersMap, context); - }; - - PullTypeResolver.prototype.checkNamedPropertyIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, inheritedMembersMap, context) { - var baseMembers = baseTypeSymbol.getAllMembers(4096 /* Property */ | 65536 /* Method */, 0 /* all */); - for (var i = 0; i < baseMembers.length; i++) { - var member = baseMembers[i]; - var memberName = member.name; - - if (interfaceSymbol.findMember(memberName, false)) { - continue; - } - - this.resolveDeclaredSymbol(member, context); - - if (inheritedMembersMap[memberName]) { - var prevMember = inheritedMembersMap[memberName]; - if (prevMember.baseOrigin !== baseTypeSymbol && !this.propertiesAreIdenticalWithNewEnclosingTypes(baseTypeSymbol, prevMember.baseOrigin, member, prevMember.memberSymbol, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Named_properties_0_of_types_1_and_2_are_not_identical, [memberName, prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), prevMember.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - inheritedMembersMap[memberName] = new MemberWithBaseOrigin(member, baseTypeSymbol); - } + inAmbientContext = saveInAmbientContext; + return result; + } + function isSourceElement(inErrorRecovery) { + return isDeclaration() || isStatement(inErrorRecovery); + } + function parseSourceElement() { + return parseSourceElementOrModuleElement(0 /* SourceElements */); + } + function parseModuleElement() { + return parseSourceElementOrModuleElement(1 /* ModuleElements */); + } + function parseSourceElementOrModuleElement(modifierContext) { + if (isDeclaration()) { + return parseDeclaration(modifierContext); } - - return false; - }; - - PullTypeResolver.prototype.checkIndexSignatureIdentityBetweenBases = function (interfaceName, interfaceSymbol, baseTypeSymbol, allInheritedSignatures, derivedTypeHasOwnNumberSignature, derivedTypeHasOwnStringSignature, context) { - if (derivedTypeHasOwnNumberSignature && derivedTypeHasOwnStringSignature) { - return false; + var statementStart = scanner.getTokenPos(); + var statementFirstTokenLength = scanner.getTextPos() - statementStart; + var errorCountBeforeStatement = file.syntacticErrors.length; + var statement = parseStatement(); + if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { + grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); } - - var indexSignaturesFromThisBaseType = baseTypeSymbol.getIndexSignatures(); - for (var i = 0; i < indexSignaturesFromThisBaseType.length; i++) { - var currentInheritedSignature = indexSignaturesFromThisBaseType[i]; - - var parameterTypeIsString = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.stringTypeSymbol; - var parameterTypeIsNumber = currentInheritedSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - - if (parameterTypeIsString && derivedTypeHasOwnStringSignature || parameterTypeIsNumber && derivedTypeHasOwnNumberSignature) { - continue; + return statement; + } + function processReferenceComments() { + var referencedFiles = []; + var amdDependencies = []; + commentRanges = []; + token = scanner.scan(); + for (var i = 0; i < commentRanges.length; i++) { + var range = commentRanges[i]; + var comment = sourceText.substring(range.pos, range.end); + var simpleReferenceRegEx = /^\/\/\/\s*/gim; + if (isNoDefaultLibRegEx.exec(comment)) { + file.hasNoDefaultLib = true; + } + else { + var fullReferenceRegEx = /^(\/\/\/\s*/; + var matchResult = fullReferenceRegEx.exec(comment); + if (!matchResult) { + var start = range.pos; + var length = range.end - start; + errorAtPos(start, length, ts.Diagnostics.Invalid_reference_directive_syntax); + } + else { + referencedFiles.push({ + pos: range.pos, + end: range.end, + filename: matchResult[3] + }); + } + } + } + else { + var amdDependencyRegEx = /^\/\/\/\s*= 0; + } + function processRootFile(filename, isDefaultLib) { + processSourceFile(ts.normalizePath(filename), isDefaultLib); + } + function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) { + if (refEnd !== undefined && refPos !== undefined) { + var start = refPos; + var length = refEnd - refPos; + } + if (hasExtension(filename)) { + if (!ts.fileExtensionIs(filename, ".ts")) { + errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts, filename)); + } + else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_not_found, filename)); + } + } + else { + if (!(findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) || findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd))) { + errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_not_found, filename + ".ts")); + } + } + } + function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) { + var canonicalName = host.getCanonicalFileName(filename); + var file = getSourceFile(filename); + if (file) { + if (host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { + errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename)); + } + } + else { + file = host.getSourceFile(filename, options.target, function (hostErrorMessage) { + errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + }); + if (file) { + filesByName[host.getCanonicalFileName(filename)] = file; + seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; + if (!options.noResolve) { + var basePath = ts.getDirectoryPath(filename); + processReferencedFiles(file, basePath); + processImportedModules(file, basePath); + } + if (isDefaultLib) { + files.unshift(file); + } + else { + files.push(file); + } + ts.forEach(file.syntacticErrors, function (e) { + errors.push(e); + }); } - - if (parameterTypeIsString) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin) { - if (allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.stringSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_string_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; - } - } else { - allInheritedSignatures.stringSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); - } - } else if (parameterTypeIsNumber) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin) { - if (allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin !== baseTypeSymbol && !this.typesAreIdentical(allInheritedSignatures.numberSignatureWithBaseOrigin.signature.returnType, currentInheritedSignature.returnType, context)) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Types_of_number_indexer_of_types_0_and_1_are_not_identical, [allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName()]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(), allInheritedSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), baseTypeSymbol.getScopedName(), innerDiagnostic])); - return true; + } + return file; + } + function processReferencedFiles(file, basePath) { + ts.forEach(file.referencedFiles, function (ref) { + processSourceFile(ts.normalizePath(ts.combinePaths(basePath, ref.filename)), false, file, ref.pos, ref.end); + }); + } + function processImportedModules(file, basePath) { + ts.forEach(file.statements, function (node) { + if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { + var nameLiteral = node.externalModuleName; + var moduleName = nameLiteral.text; + if (moduleName) { + var searchPath = basePath; + while (true) { + var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + if (findModuleSourceFile(searchName + ".ts", nameLiteral) || findModuleSourceFile(searchName + ".d.ts", nameLiteral)) { + break; + } + var parentPath = ts.getDirectoryPath(searchPath); + if (parentPath === searchPath) { + break; + } + searchPath = parentPath; } - } else { - allInheritedSignatures.numberSignatureWithBaseOrigin = new SignatureWithBaseOrigin(currentInheritedSignature, baseTypeSymbol); } } - } - - return false; - }; - - PullTypeResolver.prototype.checkInheritedMembersAgainstInheritedIndexSignatures = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, inheritedMembers, context) { - if (!inheritedIndexSignatures.stringSignatureWithBaseOrigin && !inheritedIndexSignatures.numberSignatureWithBaseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var stringSignature = inheritedIndexSignatures.stringSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature; - var numberSignature = inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature; - for (var memberName in inheritedMembers) { - var memberWithBaseOrigin = inheritedMembers[memberName]; - if (!memberWithBaseOrigin) { - continue; + else if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || file.flags & 512 /* DeclarationFile */)) { + forEachChild(node.body, function (node) { + if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { + var nameLiteral = node.externalModuleName; + var moduleName = nameLiteral.text; + if (moduleName) { + var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName)); + var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral); + if (!tsFile) { + findModuleSourceFile(searchName + ".d.ts", nameLiteral); + } + } + } + }); } - - var relevantSignature = this.determineRelevantIndexerForMember(memberWithBaseOrigin.memberSymbol, numberSignature, stringSignature); - if (!relevantSignature) { - continue; + }); + function findModuleSourceFile(filename, nameLiteral) { + return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); + } + } + function verifyCompilerOptions() { + if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { + if (options.mapRoot) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); } - - var relevantSignatureIsNumberSignature = relevantSignature.parameters[0].type === this.semanticInfoChain.numberTypeSymbol; - var signatureBaseOrigin = relevantSignatureIsNumberSignature ? inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin : inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin; - - if (signatureBaseOrigin === memberWithBaseOrigin.baseOrigin) { - continue; + if (options.sourceRoot) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); } - - var memberIsSubtype = this.sourceIsAssignableToTarget(memberWithBaseOrigin.memberSymbol.type, relevantSignature.returnType, interfaceName, context, comparisonInfo); - - if (!memberIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - if (relevantSignatureIsNumberSignature) { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); - } else { - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3, [memberName, memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [interfaceSymbol.getDisplayName(enclosingSymbol), memberWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); + return; + } + var firstExternalModule = ts.forEach(files, function (f) { return isExternalModule(f) ? f : undefined; }); + if (firstExternalModule && options.module === 0 /* None */) { + var externalModuleErrorSpan = getErrorSpanForNode(firstExternalModule.externalModuleIndicator); + var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); + var errorLength = externalModuleErrorSpan.end - errorStart; + errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); + } + if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) { + var commonPathComponents; + ts.forEach(files, function (sourceFile) { + if (!(sourceFile.flags & 512 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + var sourcePathCompoments = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory()); + sourcePathCompoments.pop(); + if (commonPathComponents) { + for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathCompoments.length); i++) { + if (commonPathComponents[i] !== sourcePathCompoments[i]) { + if (i === 0) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + return; + } + commonPathComponents.length = i; + break; + } + } + if (sourcePathCompoments.length < commonPathComponents.length) { + commonPathComponents.length = sourcePathCompoments.length; + } + } + else { + commonPathComponents = sourcePathCompoments; + } } - return true; + }); + commonSourceDirectory = ts.getNormalizedPathFromPathCompoments(commonPathComponents); + if (commonSourceDirectory) { + commonSourceDirectory += ts.directorySeparator; } } - + } + } + ts.createProgram = createProgram; +})(ts || (ts = {})); +var ts; +(function (ts) { + function isInstantiated(node) { + if (node.kind === 170 /* InterfaceDeclaration */) { return false; - }; - - PullTypeResolver.prototype.checkThatInheritedNumberSignatureIsSubtypeOfInheritedStringSignature = function (interfaceName, interfaceSymbol, inheritedIndexSignatures, context) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin && inheritedIndexSignatures.stringSignatureWithBaseOrigin) { - if (inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin === inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin) { - return false; - } - - var comparisonInfo = new TypeComparisonInfo(); - var signatureIsSubtype = this.sourceIsAssignableToTarget(inheritedIndexSignatures.numberSignatureWithBaseOrigin.signature.returnType, inheritedIndexSignatures.stringSignatureWithBaseOrigin.signature.returnType, interfaceName, context, comparisonInfo); - - if (!signatureIsSubtype) { - var enclosingSymbol = this.getEnclosingSymbolForAST(interfaceName); - var innerDiagnostic = TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2, [ - inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), comparisonInfo.message]); - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(interfaceName, TypeScript.DiagnosticCode.Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3, [ - interfaceSymbol.getDisplayName(enclosingSymbol), inheritedIndexSignatures.numberSignatureWithBaseOrigin.baseOrigin.getScopedName(), - inheritedIndexSignatures.stringSignatureWithBaseOrigin.baseOrigin.getScopedName(enclosingSymbol), innerDiagnostic])); + } + else if (node.kind === 174 /* ImportDeclaration */ && !(node.flags & 1 /* Export */)) { + return false; + } + else if (node.kind === 173 /* ModuleBlock */ && !ts.forEachChild(node, isInstantiated)) { + return false; + } + else if (node.kind === 172 /* ModuleDeclaration */ && !isInstantiated(node.body)) { + return false; + } + else { + return true; + } + } + ts.isInstantiated = isInstantiated; + function bindSourceFile(file) { + var parent; + var container; + var lastContainer; + var symbolCount = 0; + var Symbol = ts.objectAllocator.getSymbolConstructor(); + if (!file.locals) { + file.locals = {}; + container = file; + bind(file); + file.symbolCount = symbolCount; + } + function createSymbol(flags, name) { + symbolCount++; + return new Symbol(flags, name); + } + function addDeclarationToSymbol(symbol, node, symbolKind) { + symbol.flags |= symbolKind; + if (!symbol.declarations) + symbol.declarations = []; + symbol.declarations.push(node); + if (symbolKind & ts.SymbolFlags.HasExports && !symbol.exports) + symbol.exports = {}; + if (symbolKind & ts.SymbolFlags.HasMembers && !symbol.members) + symbol.members = {}; + node.symbol = symbol; + if (symbolKind & ts.SymbolFlags.Value && !symbol.valueDeclaration) + symbol.valueDeclaration = node; + } + function getDeclarationName(node) { + if (node.name) { + if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */) { + return '"' + node.name.text + '"'; + } + return node.name.text; + } + switch (node.kind) { + case 117 /* Constructor */: + return "__constructor"; + case 120 /* CallSignature */: + return "__call"; + case 121 /* ConstructSignature */: + return "__new"; + case 122 /* IndexSignature */: + return "__index"; + } + } + function getDisplayName(node) { + return node.name ? ts.identifierToString(node.name) : getDeclarationName(node); + } + function declareSymbol(symbols, parent, node, includes, excludes) { + var name = getDeclarationName(node); + if (name !== undefined) { + var symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name)); + if (symbol.flags & excludes) { + if (node.name) { + node.name.parent = node; + } + file.semanticErrors.push(ts.createDiagnosticForNode(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + symbol = createSymbol(0, name); + } + } + else { + symbol = createSymbol(0, "__missing"); + } + addDeclarationToSymbol(symbol, node, includes); + symbol.parent = parent; + if (node.kind === 169 /* ClassDeclaration */ && symbol.exports) { + var prototypeSymbol = createSymbol(2 /* Property */ | 67108864 /* Prototype */, "prototype"); + if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { + if (node.name) { + node.name.parent = node; + } + file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + } + symbol.exports[prototypeSymbol.name] = prototypeSymbol; + prototypeSymbol.parent = symbol; + } + return symbol; + } + function isAmbientContext(node) { + while (node) { + if (node.flags & 2 /* Ambient */) return true; - } + node = node.parent; } - return false; - }; - - PullTypeResolver.prototype.checkAssignability = function (ast, source, target, context) { - var comparisonInfo = new TypeComparisonInfo(); - - var isAssignable = this.sourceIsAssignableToTarget(source, target, ast, context, comparisonInfo); - - if (!isAssignable) { - var enclosingSymbol = this.getEnclosingSymbolForAST(ast); - if (comparisonInfo.message) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1_NL_2, [source.toString(enclosingSymbol), target.toString(enclosingSymbol), comparisonInfo.message])); - } else { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Cannot_convert_0_to_1, [source.toString(enclosingSymbol), target.toString(enclosingSymbol)])); - } + } + function declareModuleMember(node, symbolKind, symbolExcludes) { + var exportKind = 0; + if (symbolKind & ts.SymbolFlags.Value) { + exportKind |= 524288 /* ExportValue */; } - }; - - PullTypeResolver.prototype.isReference = function (ast, astSymbol) { - if (ast.kind() === 217 /* ParenthesizedExpression */) { - return this.isReference(ast.expression, astSymbol); + if (symbolKind & ts.SymbolFlags.Type) { + exportKind |= 1048576 /* ExportType */; } - - if (ast.kind() !== 11 /* IdentifierName */ && ast.kind() !== 212 /* MemberAccessExpression */ && ast.kind() !== 221 /* ElementAccessExpression */) { - return false; + if (symbolKind & ts.SymbolFlags.Namespace) { + exportKind |= 2097152 /* ExportNamespace */; } - - if (ast.kind() === 11 /* IdentifierName */) { - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(4096 /* Enum */)) { - return false; - } - - if (astSymbol.kind === 512 /* Variable */ && astSymbol.anyDeclHasFlag(102400 /* SomeInitializedModule */)) { - return false; + if (node.flags & 1 /* Export */ || (node.kind !== 174 /* ImportDeclaration */ && isAmbientContext(container))) { + if (exportKind) { + var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); + local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + node.localSymbol = local; } - - if (astSymbol.kind === 32768 /* ConstructorMethod */ || astSymbol.kind === 16384 /* Function */) { - return false; + else { + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); } } - - if (ast.kind() === 212 /* MemberAccessExpression */ && astSymbol.kind === 67108864 /* EnumMember */) { - return false; + else { + declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); } - - return true; - }; - - PullTypeResolver.prototype.checkForSuperMemberAccess = function (expression, name, resolvedName, context) { - if (resolvedName) { - if (expression.kind() === 50 /* SuperKeyword */ && !resolvedName.isError() && resolvedName.kind !== 65536 /* Method */) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword)); - return true; - } + } + function bindChildren(node, symbolKind) { + if (symbolKind & ts.SymbolFlags.HasLocals) { + node.locals = {}; } - - return false; - }; - - PullTypeResolver.prototype.getEnclosingDeclForAST = function (ast) { - return this.semanticInfoChain.getEnclosingDecl(ast); - }; - - PullTypeResolver.prototype.getEnclosingSymbolForAST = function (ast) { - var enclosingDecl = this.getEnclosingDeclForAST(ast); - return enclosingDecl ? enclosingDecl.getSymbol() : null; - }; - - PullTypeResolver.prototype.checkForPrivateMemberAccess = function (name, expressionType, resolvedName, context) { - if (resolvedName) { - if (resolvedName.anyDeclHasFlag(2 /* Private */)) { - var memberContainer = resolvedName.getContainer(); - if (memberContainer && memberContainer.kind === 33554432 /* ConstructorType */) { - memberContainer = memberContainer.getAssociatedContainerType(); - } - - if (memberContainer && memberContainer.isClass()) { - var memberClass = memberContainer.getDeclarations()[0].ast(); - TypeScript.Debug.assert(memberClass); - - var containingClass = this.getEnclosingClassDeclaration(name); - - if (!containingClass || containingClass !== memberClass) { - context.postDiagnostic(this.semanticInfoChain.diagnosticFromAST(name, TypeScript.DiagnosticCode._0_1_is_inaccessible, [memberContainer.toString(null, false), name.text()])); - return true; - } + var saveParent = parent; + var saveContainer = container; + parent = node; + if (symbolKind & ts.SymbolFlags.IsContainer) { + container = node; + if (lastContainer !== container && !container.nextContainer) { + if (lastContainer) { + lastContainer.nextContainer = container; } + lastContainer = container; } } - - return false; - }; - - PullTypeResolver.prototype.instantiateType = function (type, typeParameterArgumentMap) { - if (type.isPrimitive()) { - return type; - } - - if (type.isError()) { - return type; - } - - if (typeParameterArgumentMap[type.pullSymbolID]) { - return typeParameterArgumentMap[type.pullSymbolID]; + ts.forEachChild(node, bind); + container = saveContainer; + parent = saveParent; + } + function bindDeclaration(node, symbolKind, symbolExcludes) { + switch (container.kind) { + case 172 /* ModuleDeclaration */: + declareModuleMember(node, symbolKind, symbolExcludes); + break; + case 177 /* SourceFile */: + if (ts.isExternalModule(container)) { + declareModuleMember(node, symbolKind, symbolExcludes); + break; + } + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); + break; + case 169 /* ClassDeclaration */: + if (node.flags & 64 /* Static */) { + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + break; + } + case 125 /* TypeLiteral */: + case 128 /* ObjectLiteral */: + case 170 /* InterfaceDeclaration */: + declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes); + break; + case 171 /* EnumDeclaration */: + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + break; } - - type._resolveDeclaredSymbol(); - if (type.isTypeParameter()) { - return this.instantiateTypeParameter(type, typeParameterArgumentMap); + bindChildren(node, symbolKind); + } + function bindConstructorDeclaration(node) { + bindDeclaration(node, 4096 /* Constructor */, 0); + ts.forEach(node.parameters, function (p) { + if (p.flags & (16 /* Public */ | 32 /* Private */)) { + bindDeclaration(p, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); + } + }); + } + function bindModuleDeclaration(node) { + if (node.name.kind === 3 /* StringLiteral */) { + bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); } - - if (type.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return TypeScript.PullInstantiatedTypeReferenceSymbol.create(this, type, typeParameterArgumentMap); + else if (isInstantiated(node)) { + bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); } - - return type; - }; - - PullTypeResolver.prototype.instantiateTypeParameter = function (typeParameter, typeParameterArgumentMap) { - var constraint = typeParameter.getConstraint(); - if (!constraint) { - return typeParameter; + else { + bindDeclaration(node, 256 /* NamespaceModule */, 0 /* NamespaceModuleExcludes */); } - - var instantiatedConstraint = this.instantiateType(constraint, typeParameterArgumentMap); - - if (instantiatedConstraint == constraint) { - return typeParameter; + } + function bindAnonymousDeclaration(node, symbolKind, name) { + var symbol = createSymbol(symbolKind, name); + addDeclarationToSymbol(symbol, node, symbolKind); + bindChildren(node, symbolKind); + } + function bindCatchVariableDeclaration(node) { + var symbol = createSymbol(1 /* Variable */, node.variable.text || "__missing"); + addDeclarationToSymbol(symbol, node, 1 /* Variable */); + var saveParent = parent; + parent = node; + ts.forEachChild(node, bind); + parent = saveParent; + } + function bind(node) { + node.parent = parent; + switch (node.kind) { + case 113 /* TypeParameter */: + bindDeclaration(node, 262144 /* TypeParameter */, ts.SymbolFlags.TypeParameterExcludes); + break; + case 114 /* Parameter */: + bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.ParameterExcludes); + break; + case 166 /* VariableDeclaration */: + bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.VariableExcludes); + break; + case 115 /* Property */: + case 129 /* PropertyAssignment */: + bindDeclaration(node, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); + break; + case 176 /* EnumMember */: + bindDeclaration(node, 4 /* EnumMember */, ts.SymbolFlags.EnumMemberExcludes); + break; + case 120 /* CallSignature */: + bindDeclaration(node, 32768 /* CallSignature */, 0); + break; + case 116 /* Method */: + bindDeclaration(node, 2048 /* Method */, ts.SymbolFlags.MethodExcludes); + break; + case 121 /* ConstructSignature */: + bindDeclaration(node, 65536 /* ConstructSignature */, 0); + break; + case 122 /* IndexSignature */: + bindDeclaration(node, 131072 /* IndexSignature */, 0); + break; + case 167 /* FunctionDeclaration */: + bindDeclaration(node, 8 /* Function */, ts.SymbolFlags.FunctionExcludes); + break; + case 117 /* Constructor */: + bindConstructorDeclaration(node); + break; + case 118 /* GetAccessor */: + bindDeclaration(node, 8192 /* GetAccessor */, ts.SymbolFlags.GetAccessorExcludes); + break; + case 119 /* SetAccessor */: + bindDeclaration(node, 16384 /* SetAccessor */, ts.SymbolFlags.SetAccessorExcludes); + break; + case 125 /* TypeLiteral */: + bindAnonymousDeclaration(node, 512 /* TypeLiteral */, "__type"); + break; + case 128 /* ObjectLiteral */: + bindAnonymousDeclaration(node, 1024 /* ObjectLiteral */, "__object"); + break; + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + bindAnonymousDeclaration(node, 8 /* Function */, "__function"); + break; + case 163 /* CatchBlock */: + bindCatchVariableDeclaration(node); + break; + case 169 /* ClassDeclaration */: + bindDeclaration(node, 16 /* Class */, ts.SymbolFlags.ClassExcludes); + break; + case 170 /* InterfaceDeclaration */: + bindDeclaration(node, 32 /* Interface */, ts.SymbolFlags.InterfaceExcludes); + break; + case 171 /* EnumDeclaration */: + bindDeclaration(node, 64 /* Enum */, ts.SymbolFlags.EnumExcludes); + break; + case 172 /* ModuleDeclaration */: + bindModuleDeclaration(node); + break; + case 174 /* ImportDeclaration */: + bindDeclaration(node, 4194304 /* Import */, ts.SymbolFlags.ImportExcludes); + break; + case 177 /* SourceFile */: + if (ts.isExternalModule(node)) { + bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.getModuleNameFromFilename(node.filename) + '"'); + break; + } + default: + var saveParent = parent; + parent = node; + ts.forEachChild(node, bind); + parent = saveParent; } - - var rootTypeParameter = typeParameter.getRootSymbol(); - var instantiation = rootTypeParameter.getSpecialization([instantiatedConstraint]); - if (instantiation) { - return instantiation; + } + } + ts.bindSourceFile = bindSourceFile; +})(ts || (ts = {})); +var ts; +(function (ts) { + var indentStrings = []; + function getIndentString(level) { + return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); + } + function emitFiles(resolver) { + var program = resolver.getProgram(); + var compilerHost = program.getCompilerHost(); + var compilerOptions = program.getCompilerOptions(); + var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; + var diagnostics = []; + var newLine = program.getCompilerHost().getNewLine(); + function getSourceFilePathInNewDir(newDirPath, sourceFile) { + var sourceFilePath = ts.getNormalizedPathFromPathCompoments(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); + return ts.combinePaths(newDirPath, sourceFilePath); + } + function shouldEmitToOwnFile(sourceFile) { + if (!(sourceFile.flags & 512 /* DeclarationFile */)) { + if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + return true; + } } - - instantiation = new TypeScript.PullInstantiatedTypeParameterSymbol(rootTypeParameter, instantiatedConstraint); - return instantiation; - }; - - PullTypeResolver.prototype.instantiateSignature = function (signature, typeParameterArgumentMap) { - if (!signature.wrapsSomeTypeParameter(typeParameterArgumentMap)) { - return signature; + } + function getOwnEmitOutputFilePath(sourceFile, extension) { + if (program.getCompilerOptions().outDir) { + var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(getSourceFilePathInNewDir(program.getCompilerOptions().outDir, sourceFile)); } - - var rootSignature = signature.getRootSymbol(); - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(this, signature, mutableTypeParameterMap); - - var instantiatedSignature = rootSignature.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiatedSignature) { - return instantiatedSignature; + else { + var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(sourceFile.filename); } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(signature, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - instantiatedSignature = new TypeScript.PullInstantiatedSignatureSymbol(rootSignature, typeParameterArgumentMap); - - instantiatedSignature.returnType = this.instantiateType((rootSignature.returnType || this.semanticInfoChain.anyTypeSymbol), typeParameterArgumentMap); - instantiatedSignature.functionType = this.instantiateType(rootSignature.functionType, typeParameterArgumentMap); - - var parameters = rootSignature.parameters; - var parameter = null; - - if (parameters) { - for (var j = 0; j < parameters.length; j++) { - parameter = new TypeScript.PullSymbol(parameters[j].name, 2048 /* Parameter */); - parameter.setRootSymbol(parameters[j]); - - if (parameters[j].isOptional) { - parameter.isOptional = true; + return emitOutputFilePathWithoutExtension + extension; + } + function isExternalModuleOrDeclarationFile(sourceFile) { + return ts.isExternalModule(sourceFile) || (sourceFile.flags & 512 /* DeclarationFile */) !== 0; + } + function getFirstConstructorWithBody(node) { + return ts.forEach(node.members, function (member) { + if (member.kind === 117 /* Constructor */ && member.body) { + return member; + } + }); + } + function getAllAccessorDeclarations(node, accessor) { + var firstAccessor; + var getAccessor; + var setAccessor; + ts.forEach(node.members, function (member) { + if ((member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 64 /* Static */) === (accessor.flags & 64 /* Static */)) { + if (!firstAccessor) { + firstAccessor = member; } - if (parameters[j].isVarArg) { - parameter.isVarArg = true; - instantiatedSignature.hasVarArgs = true; + if (member.kind === 118 /* GetAccessor */ && !getAccessor) { + getAccessor = member; } - instantiatedSignature.addParameter(parameter, parameter.isOptional); - - parameter.type = this.instantiateType(parameters[j].type, typeParameterArgumentMap); + if (member.kind === 119 /* SetAccessor */ && !setAccessor) { + setAccessor = member; + } + } + }); + return { + firstAccessor: firstAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + function createTextWriter(writeSymbol) { + var output = ""; + var indent = 0; + var lineStart = true; + var lineCount = 0; + var linePos = 0; + function write(s) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; } } - - return instantiatedSignature; - }; - PullTypeResolver.globalTypeCheckPhase = 0; - return PullTypeResolver; - })(); - TypeScript.PullTypeResolver = PullTypeResolver; - - var TypeComparisonInfo = (function () { - function TypeComparisonInfo(sourceComparisonInfo, useSameIndent) { - this.onlyCaptureFirstError = false; - this.flags = 0 /* SuccessfulComparison */; - this.message = ""; - this.stringConstantVal = null; - this.indent = 1; - if (sourceComparisonInfo) { - this.flags = sourceComparisonInfo.flags; - this.onlyCaptureFirstError = sourceComparisonInfo.onlyCaptureFirstError; - this.stringConstantVal = sourceComparisonInfo.stringConstantVal; - this.indent = sourceComparisonInfo.indent; - if (!useSameIndent) { - this.indent++; - } - } - } - TypeComparisonInfo.prototype.indentString = function () { - var result = ""; - - for (var i = 0; i < this.indent; i++) { - result += "\t"; + function writeLiteral(s) { + if (s && s.length) { + write(s); + var pos = 0; + while (pos < s.length) { + switch (s.charCodeAt(pos++)) { + case 13 /* carriageReturn */: + if (pos < s.length && s.charCodeAt(pos) === 10 /* lineFeed */) { + pos++; + } + case 10 /* lineFeed */: + lineCount++; + linePos = output.length - s.length + pos; + break; + } + } + } } - - return result; - }; - - TypeComparisonInfo.prototype.addMessage = function (message) { - if (!this.onlyCaptureFirstError && this.message) { - this.message = this.message + TypeScript.newLine() + this.indentString() + message; - } else { - this.message = this.indentString() + message; + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } } - }; - return TypeComparisonInfo; - })(); - TypeScript.TypeComparisonInfo = TypeComparisonInfo; - - function getPropertyAssignmentNameTextFromIdentifier(identifier) { - if (identifier.kind() === 11 /* IdentifierName */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 14 /* StringLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else if (identifier.kind() === 13 /* NumericLiteral */) { - return { actualText: identifier.text(), memberName: identifier.valueText() }; - } else { - throw TypeScript.Errors.invalidOperation(); + return { + write: write, + writeSymbol: writeSymbol, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: function () { return indent++; }, + decreaseIndent: function () { return indent--; }, + getIndent: function () { return indent; }, + getTextPos: function () { return output.length; }, + getLine: function () { return lineCount + 1; }, + getColumn: function () { return lineStart ? indent * 4 + 1 : output.length - linePos + 1; }, + getText: function () { return output; } + }; + } + var currentSourceFile; + function getSourceTextOfLocalNode(node) { + var text = currentSourceFile.text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + function writeFile(filename, data, writeByteOrderMark) { + compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + }); } - } - TypeScript.getPropertyAssignmentNameTextFromIdentifier = getPropertyAssignmentNameTextFromIdentifier; - - function isTypesOnlyLocation(ast) { - while (ast && ast.parent) { - switch (ast.parent.kind()) { - case 244 /* TypeAnnotation */: - return true; - case 127 /* TypeQuery */: - return false; - case 125 /* ConstructorType */: - var constructorType = ast.parent; - if (constructorType.type === ast) { - return true; + function emitJavaScript(jsFilePath, root) { + var writer = createTextWriter(writeSymbol); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var extendsEmitted = false; + var writeEmittedFiles = writeJavaScriptFile; + var emit = emitNode; + var emitStart = function (node) { + }; + var emitEnd = function (node) { + }; + var emitToken = emitTokenText; + var scopeEmitStart = function (scopeDeclaration, scopeName) { + }; + var scopeEmitEnd = function () { + }; + var sourceMapData; + function writeSymbol(symbol, enclosingDeclaration, meaning) { + } + function initializeEmitterWithSourceMaps() { + var sourceMapDir; + var sourceMapSourceIndex = -1; + var sourceMapNameIndexMap = {}; + var sourceMapNameIndices = []; + function getSourceMapNameIndex() { + return sourceMapNameIndices.length ? sourceMapNameIndices[sourceMapNameIndices.length - 1] : -1; + } + var lastRecordedSourceMapSpan; + var lastEncodedSourceMapSpan = { + emittedLine: 1, + emittedColumn: 1, + sourceLine: 1, + sourceColumn: 1, + sourceIndex: 0 + }; + var lastEncodedNameIndex = 0; + function encodeLastRecordedSourceMapSpan() { + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { + return; + } + var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn; + if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) { + if (sourceMapData.sourceMapMappings) { + sourceMapData.sourceMapMappings += ","; + } + } + else { + for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) { + sourceMapData.sourceMapMappings += ";"; + } + prevEncodedEmittedColumn = 1; + } + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn); + if (lastRecordedSourceMapSpan.nameIndex >= 0) { + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex); + lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex; + } + lastEncodedSourceMapSpan = lastRecordedSourceMapSpan; + sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan); + function base64VLQFormatEncode(inValue) { + function base64FormatEncode(inValue) { + if (inValue < 64) { + return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue); + } + throw TypeError(inValue + ": not a 64 based value"); + } + if (inValue < 0) { + inValue = ((-inValue) << 1) + 1; + } + else { + inValue = inValue << 1; + } + var encodedStr = ""; + do { + var currentDigit = inValue & 31; + inValue = inValue >> 5; + if (inValue > 0) { + currentDigit = currentDigit | 32; + } + encodedStr = encodedStr + base64FormatEncode(currentDigit); + } while (inValue > 0); + return encodedStr; + } + } + function recordSourceMapSpan(pos) { + var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); + var emittedLine = writer.getLine(); + var emittedColumn = writer.getColumn(); + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { + encodeLastRecordedSourceMapSpan(); + lastRecordedSourceMapSpan = { + emittedLine: emittedLine, + emittedColumn: emittedColumn, + sourceLine: sourceLinePos.line, + sourceColumn: sourceLinePos.character, + nameIndex: getSourceMapNameIndex(), + sourceIndex: sourceMapSourceIndex + }; + } + else { + lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; + lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; + } + } + function recordEmitNodeStartSpan(node) { + recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos)); + } + function recordEmitNodeEndSpan(node) { + recordSourceMapSpan(node.end); + } + function writeTextWithSpanRecord(tokenKind, startPos, emitFn) { + var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos); + recordSourceMapSpan(tokenStartPos); + var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn); + recordSourceMapSpan(tokenEndPos); + return tokenEndPos; + } + function recordNewSourceFileStart(node) { + var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir; + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), true)); + sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; + sourceMapData.inputSourceFileNames.push(node.filename); + } + function recordScopeNameOfNode(node, scopeName) { + function recordScopeNameIndex(scopeNameIndex) { + sourceMapNameIndices.push(scopeNameIndex); + } + function recordScopeNameStart(scopeName) { + var scopeNameIndex = -1; + if (scopeName) { + var parentIndex = getSourceMapNameIndex(); + if (parentIndex !== -1) { + scopeName = sourceMapData.sourceMapNames[parentIndex] + "." + scopeName; + } + scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName); + if (scopeNameIndex === undefined) { + scopeNameIndex = sourceMapData.sourceMapNames.length; + sourceMapData.sourceMapNames.push(scopeName); + sourceMapNameIndexMap[scopeName] = scopeNameIndex; + } + } + recordScopeNameIndex(scopeNameIndex); + } + if (scopeName) { + recordScopeNameStart(scopeName); + } + else if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */ || node.kind === 172 /* ModuleDeclaration */ || node.kind === 169 /* ClassDeclaration */ || node.kind === 171 /* EnumDeclaration */) { + if (node.name) { + scopeName = node.name.text; + } + recordScopeNameStart(scopeName); + } + else { + recordScopeNameIndex(getSourceMapNameIndex()); + } + } + function recordScopeNameEnd() { + sourceMapNameIndices.pop(); + } + ; + function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) { + encodeLastRecordedSourceMapSpan(); + writeFile(sourceMapData.sourceMapFilePath, JSON.stringify({ + version: 3, + file: sourceMapData.sourceMapFile, + sourceRoot: sourceMapData.sourceMapSourceRoot, + sources: sourceMapData.sourceMapSources, + names: sourceMapData.sourceMapNames, + mappings: sourceMapData.sourceMapMappings + }), false); + sourceMapDataList.push(sourceMapData); + writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark); + } + var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath)); + sourceMapData = { + sourceMapFilePath: jsFilePath + ".map", + jsSourceMappingURL: sourceMapJsFile + ".map", + sourceMapFile: sourceMapJsFile, + sourceMapSourceRoot: compilerOptions.sourceRoot || "", + sourceMapSources: [], + inputSourceFileNames: [], + sourceMapNames: [], + sourceMapMappings: "", + sourceMapDecodedMappings: [] + }; + sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); + if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) { + sourceMapData.sourceMapSourceRoot += ts.directorySeparator; + } + if (compilerOptions.mapRoot) { + sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); + if (root) { + sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); + } + if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { + sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir); + sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), true); + } + else { + sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); } - break; - case 123 /* FunctionType */: - var functionType = ast.parent; - if (functionType.type === ast) { - return true; + } + else { + sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath)); + } + function emitNodeWithMap(node) { + if (node) { + if (node.kind != 177 /* SourceFile */) { + recordEmitNodeStartSpan(node); + emitNode(node); + recordEmitNodeEndSpan(node); + } + else { + recordNewSourceFileStart(node); + emitNode(node); + } } - break; - case 239 /* Constraint */: - var constraint = ast.parent; - if (constraint.type === ast) { - return true; + } + writeEmittedFiles = writeJavaScriptAndSourceMapFile; + emit = emitNodeWithMap; + emitStart = recordEmitNodeStartSpan; + emitEnd = recordEmitNodeEndSpan; + emitToken = writeTextWithSpanRecord; + scopeEmitStart = recordScopeNameOfNode; + scopeEmitEnd = recordScopeNameEnd; + } + function writeJavaScriptFile(emitOutput, writeByteOrderMark) { + writeFile(jsFilePath, emitOutput, writeByteOrderMark); + } + function emitTokenText(tokenKind, startPos, emitFn) { + var tokenString = ts.tokenToString(tokenKind); + if (emitFn) { + emitFn(); + } + else { + write(tokenString); + } + return startPos + tokenString.length; + } + function emitOptional(prefix, node) { + if (node) { + write(prefix); + emit(node); + } + } + function emitCommaList(nodes, count) { + if (!(count >= 0)) + count = nodes.length; + if (nodes) { + for (var i = 0; i < count; i++) { + if (i) + write(", "); + emit(nodes[i]); } - break; - case 220 /* CastExpression */: - var castExpression = ast.parent; - return castExpression.type === ast; - case 230 /* ExtendsHeritageClause */: - case 231 /* ImplementsHeritageClause */: - return true; - case 228 /* TypeArgumentList */: - return true; - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 129 /* FunctionDeclaration */: - case 145 /* MethodSignature */: - case 212 /* MemberAccessExpression */: - case 242 /* Parameter */: - return false; + } } - - ast = ast.parent; - } - - return false; - } - TypeScript.isTypesOnlyLocation = isTypesOnlyLocation; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - TypeScript.declCacheHit = 0; - TypeScript.declCacheMiss = 0; - TypeScript.symbolCacheHit = 0; - TypeScript.symbolCacheMiss = 0; - - var sentinalEmptyArray = []; - - var SemanticInfoChain = (function () { - function SemanticInfoChain(compiler, logger) { - this.compiler = compiler; - this.logger = logger; - this.documents = []; - this.fileNameToDocument = TypeScript.createIntrinsicsObject(); - this.anyTypeDecl = null; - this.booleanTypeDecl = null; - this.numberTypeDecl = null; - this.stringTypeDecl = null; - this.nullTypeDecl = null; - this.undefinedTypeDecl = null; - this.voidTypeDecl = null; - this.undefinedValueDecl = null; - this.anyTypeSymbol = null; - this.booleanTypeSymbol = null; - this.numberTypeSymbol = null; - this.stringTypeSymbol = null; - this.nullTypeSymbol = null; - this.undefinedTypeSymbol = null; - this.voidTypeSymbol = null; - this.undefinedValueSymbol = null; - this.emptyTypeSymbol = null; - this.astSymbolMap = []; - this.astAliasSymbolMap = []; - this.astCallResolutionDataMap = []; - this.declSymbolMap = []; - this.declSignatureSymbolMap = []; - this.declCache = null; - this.symbolCache = null; - this.fileNameToDiagnostics = null; - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - var globalDecl = new TypeScript.RootPullDecl("", "", 0 /* Global */, 0 /* None */, this, false); - this.documents[0] = new TypeScript.Document(this.compiler, this, "", [], null, 0 /* None */, 0, false, null, globalDecl); - - this.anyTypeDecl = new TypeScript.NormalPullDecl("any", "any", 2 /* Primitive */, 0 /* None */, globalDecl); - this.booleanTypeDecl = new TypeScript.NormalPullDecl("boolean", "boolean", 2 /* Primitive */, 0 /* None */, globalDecl); - this.numberTypeDecl = new TypeScript.NormalPullDecl("number", "number", 2 /* Primitive */, 0 /* None */, globalDecl); - this.stringTypeDecl = new TypeScript.NormalPullDecl("string", "string", 2 /* Primitive */, 0 /* None */, globalDecl); - this.voidTypeDecl = new TypeScript.NormalPullDecl("void", "void", 2 /* Primitive */, 0 /* None */, globalDecl); - - this.nullTypeDecl = new TypeScript.RootPullDecl("null", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedTypeDecl = new TypeScript.RootPullDecl("undefined", "", 2 /* Primitive */, 0 /* None */, this, false); - this.undefinedValueDecl = new TypeScript.NormalPullDecl("undefined", "undefined", 512 /* Variable */, 8 /* Ambient */, globalDecl); - - this.invalidate(); - } - SemanticInfoChain.prototype.getDocument = function (fileName) { - var document = this.fileNameToDocument[fileName]; - return document || null; - }; - - SemanticInfoChain.prototype.lineMap = function (fileName) { - return this.getDocument(fileName).lineMap(); - }; - - SemanticInfoChain.prototype.fileNames = function () { - if (this._fileNames === null) { - this._fileNames = this.documents.slice(1).map(function (s) { - return s.fileName; - }); + function emitMultiLineList(nodes) { + if (nodes) { + for (var i = 0; i < nodes.length; i++) { + if (i) + write(","); + writeLine(); + emit(nodes[i]); + } + } } - - return this._fileNames; - }; - - SemanticInfoChain.prototype.bindPrimitiveSymbol = function (decl, newSymbol) { - newSymbol.addDeclaration(decl); - decl.setSymbol(newSymbol); - newSymbol.setResolved(); - - return newSymbol; - }; - - SemanticInfoChain.prototype.addPrimitiveTypeSymbol = function (decl) { - var newSymbol = new TypeScript.PullPrimitiveTypeSymbol(decl.name); - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.addPrimitiveValueSymbol = function (decl, type) { - var newSymbol = new TypeScript.PullSymbol(decl.name, 512 /* Variable */); - newSymbol.type = type; - return this.bindPrimitiveSymbol(decl, newSymbol); - }; - - SemanticInfoChain.prototype.resetGlobalSymbols = function () { - this.anyTypeSymbol = this.addPrimitiveTypeSymbol(this.anyTypeDecl); - this.booleanTypeSymbol = this.addPrimitiveTypeSymbol(this.booleanTypeDecl); - this.numberTypeSymbol = this.addPrimitiveTypeSymbol(this.numberTypeDecl); - this.stringTypeSymbol = this.addPrimitiveTypeSymbol(this.stringTypeDecl); - this.voidTypeSymbol = this.addPrimitiveTypeSymbol(this.voidTypeDecl); - this.nullTypeSymbol = this.addPrimitiveTypeSymbol(this.nullTypeDecl); - this.undefinedTypeSymbol = this.addPrimitiveTypeSymbol(this.undefinedTypeDecl); - this.undefinedValueSymbol = this.addPrimitiveValueSymbol(this.undefinedValueDecl, this.undefinedTypeSymbol); - - var emptyTypeDecl = new TypeScript.PullSynthesizedDecl("{}", "{}", 8388608 /* ObjectType */, 0 /* None */, null, this); - var emptyTypeSymbol = new TypeScript.PullTypeSymbol("{}", 8388608 /* ObjectType */); - emptyTypeDecl.setSymbol(emptyTypeSymbol); - emptyTypeSymbol.addDeclaration(emptyTypeDecl); - emptyTypeSymbol.setResolved(); - this.emptyTypeSymbol = emptyTypeSymbol; - }; - - SemanticInfoChain.prototype.addDocument = function (document) { - var fileName = document.fileName; - - var existingIndex = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (existingIndex < 0) { - this.documents.push(document); - } else { - this.documents[existingIndex] = document; + function emitLines(nodes) { + emitLinesStartingAt(nodes, 0); } - - this.fileNameToDocument[fileName] = document; - - this.invalidate(); - }; - - SemanticInfoChain.prototype.removeDocument = function (fileName) { - TypeScript.Debug.assert(fileName !== "", "Can't remove the semantic info for the global decl."); - var index = TypeScript.ArrayUtilities.indexOf(this.documents, function (u) { - return u.fileName === fileName; - }); - if (index > 0) { - this.fileNameToDocument[fileName] = undefined; - this.documents.splice(index, 1); - this.invalidate(); + function emitLinesStartingAt(nodes, startIndex) { + for (var i = startIndex; i < nodes.length; i++) { + writeLine(); + emit(nodes[i]); + } } - }; - - SemanticInfoChain.prototype.getDeclPathCacheID = function (declPath, declKind) { - var cacheID = ""; - - for (var i = 0; i < declPath.length; i++) { - cacheID += "#" + declPath[i]; + function emitLiteral(node) { + var text = getSourceTextOfLocalNode(node); + if (node.kind === 3 /* StringLiteral */ && compilerOptions.sourceMap) { + writer.writeLiteral(text); + } + else { + write(text); + } } - - return cacheID + "#" + declKind.toString(); - }; - - SemanticInfoChain.prototype.findTopLevelSymbol = function (name, kind, doNotGoPastThisDecl) { - var cacheID = this.getDeclPathCacheID([name], kind); - - var symbol = this.symbolCache[cacheID]; - - if (!symbol) { - for (var i = 0, n = this.documents.length; i < n; i++) { - var topLevelDecl = this.documents[i].topLevelDecl(); - - var symbol = this.findTopLevelSymbolInDecl(topLevelDecl, name, kind, doNotGoPastThisDecl); - if (symbol) { - break; + function emitQuotedIdentifier(node) { + if (node.kind === 3 /* StringLiteral */) { + emitLiteral(node); + } + else { + write("\""); + if (node.kind === 2 /* NumericLiteral */) { + write(node.text); } - - if (doNotGoPastThisDecl && topLevelDecl.name === doNotGoPastThisDecl.fileName()) { - return null; + else { + write(getSourceTextOfLocalNode(node)); } + write("\""); } - - if (symbol) { - this.symbolCache[cacheID] = symbol; + } + function isNonExpressionIdentifier(node) { + var parent = node.parent; + switch (parent.kind) { + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return parent.name === node; + case 153 /* BreakStatement */: + case 152 /* ContinueStatement */: + case 175 /* ExportAssignment */: + return false; + case 159 /* LabelledStatement */: + return node.parent.label === node; + case 163 /* CatchBlock */: + return node.parent.variable === node; } } - - return symbol; - }; - - SemanticInfoChain.prototype.findTopLevelSymbolInDecl = function (topLevelDecl, name, kind, doNotGoPastThisDecl) { - var doNotGoPastThisPosition = doNotGoPastThisDecl && doNotGoPastThisDecl.fileName() === topLevelDecl.fileName() ? doNotGoPastThisDecl.ast().start() : -1; - - var foundDecls = topLevelDecl.searchChildDecls(name, kind); - - for (var j = 0; j < foundDecls.length; j++) { - var foundDecl = foundDecls[j]; - - if (doNotGoPastThisPosition !== -1 && foundDecl.ast() && foundDecl.ast().start() > doNotGoPastThisPosition) { - break; + function emitIdentifier(node) { + if (!isNonExpressionIdentifier(node)) { + var prefix = resolver.getExpressionNamePrefix(node); + if (prefix) { + write(prefix); + write("."); + } } - - var symbol = foundDecls[j].getSymbol(); - if (symbol) { - return symbol; + write(getSourceTextOfLocalNode(node)); + } + function emitThis(node) { + if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { + write("_this"); + } + else { + write("this"); } } - - return null; - }; - - SemanticInfoChain.prototype.findExternalModule = function (id) { - id = TypeScript.normalizePath(id); - - var tsFile = id + ".ts"; - var tsCacheID = this.getDeclPathCacheID([tsFile], 32 /* DynamicModule */); - symbol = this.symbolCache[tsCacheID]; - if (symbol != undefined) { - return symbol; + function emitSuper(node) { + var flags = resolver.getNodeCheckFlags(node); + if (flags & 16 /* SuperInstance */) { + write("_super.prototype"); + } + else if (flags & 32 /* SuperStatic */) { + write("_super"); + } + else { + write("super"); + } } - - var dtsFile = id + ".d.ts"; - var dtsCacheID = this.getDeclPathCacheID([dtsFile], 32 /* DynamicModule */); - var symbol = this.symbolCache[dtsCacheID]; - if (symbol) { - return symbol; + function emitArrayLiteral(node) { + if (node.flags & 128 /* MultiLine */) { + write("["); + increaseIndent(); + emitMultiLineList(node.elements); + decreaseIndent(); + writeLine(); + write("]"); + } + else { + write("["); + emitCommaList(node.elements); + write("]"); + } } - - var dtsSymbol; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (topLevelDecl.isExternalModule()) { - var isTsFile = document.fileName === tsFile; - if (isTsFile || document.fileName === dtsFile) { - var dynamicModuleDecl = topLevelDecl.getChildDecls()[0]; - symbol = dynamicModuleDecl.getSymbol(); - - if (isTsFile) { - this.symbolCache[tsCacheID] = symbol; - - return symbol; - } else { - dtsSymbol = symbol; - } + function emitObjectLiteral(node) { + if (!node.properties.length) { + write("{}"); + } + else if (node.flags & 128 /* MultiLine */) { + write("{"); + increaseIndent(); + emitMultiLineList(node.properties); + decreaseIndent(); + writeLine(); + write("}"); + } + else { + write("{ "); + emitCommaList(node.properties); + write(" }"); + } + } + function emitPropertyAssignment(node) { + emit(node.name); + write(": "); + emit(node.initializer); + } + function emitPropertyAccess(node) { + var text = resolver.getPropertyAccessSubstitution(node); + if (text) { + write(text); + return; + } + emit(node.left); + write("."); + emit(node.right); + } + function emitIndexedAccess(node) { + emit(node.object); + write("["); + emit(node.index); + write("]"); + } + function emitCallExpression(node) { + var superCall = false; + if (node.func.kind === 81 /* SuperKeyword */) { + write("_super"); + superCall = true; + } + else { + emit(node.func); + superCall = node.func.kind === 130 /* PropertyAccess */ && node.func.left.kind === 81 /* SuperKeyword */; + } + if (superCall) { + write(".call("); + emitThis(node.func); + if (node.arguments.length) { + write(", "); + emitCommaList(node.arguments); + } + write(")"); + } + else { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + function emitNewExpression(node) { + write("new "); + emit(node.func); + if (node.arguments) { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + function emitParenExpression(node) { + if (node.expression.kind === 134 /* TypeAssertion */) { + var operand = node.expression.operand; + while (operand.kind == 134 /* TypeAssertion */) { + operand = operand.operand; + } + if (operand.kind !== 138 /* PrefixOperator */ && operand.kind !== 139 /* PostfixOperator */ && operand.kind !== 133 /* NewExpression */ && !(operand.kind === 132 /* CallExpression */ && node.parent.kind === 133 /* NewExpression */) && !(operand.kind === 136 /* FunctionExpression */ && node.parent.kind === 132 /* CallExpression */)) { + emit(operand); + return; } } + write("("); + emit(node.expression); + write(")"); + } + function emitUnaryExpression(node) { + if (node.kind === 138 /* PrefixOperator */) { + write(ts.tokenToString(node.operator)); + } + if (node.operator >= 55 /* Identifier */) { + write(" "); + } + else if (node.kind === 138 /* PrefixOperator */ && node.operand.kind === 138 /* PrefixOperator */) { + var operand = node.operand; + if (node.operator === 24 /* PlusToken */ && (operand.operator === 24 /* PlusToken */ || operand.operator === 29 /* PlusPlusToken */)) { + write(" "); + } + else if (node.operator === 25 /* MinusToken */ && (operand.operator === 25 /* MinusToken */ || operand.operator === 30 /* MinusMinusToken */)) { + write(" "); + } + } + emit(node.operand); + if (node.kind === 139 /* PostfixOperator */) { + write(ts.tokenToString(node.operator)); + } + } + function emitBinaryExpression(node) { + emit(node.left); + if (node.operator !== 14 /* CommaToken */) + write(" "); + write(ts.tokenToString(node.operator)); + write(" "); + emit(node.right); + } + function emitConditionalExpression(node) { + emit(node.condition); + write(" ? "); + emit(node.whenTrue); + write(" : "); + emit(node.whenFalse); + } + function emitBlock(node) { + emitToken(5 /* OpenBraceToken */, node.pos); + increaseIndent(); + scopeEmitStart(node.parent); + if (node.kind === 173 /* ModuleBlock */) { + ts.Debug.assert(node.parent.kind === 172 /* ModuleDeclaration */); + emitCaptureThisForNodeIfNecessary(node.parent); + } + emitLines(node.statements); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.statements.end); + scopeEmitEnd(); + } + function emitEmbeddedStatement(node) { + if (node.kind === 143 /* Block */) { + write(" "); + emit(node); + } + else { + increaseIndent(); + writeLine(); + emit(node); + decreaseIndent(); + } + } + function emitExpressionStatement(node) { + var isArrowExpression = node.expression.kind === 137 /* ArrowFunction */; + if (isArrowExpression) + write("("); + emit(node.expression); + if (isArrowExpression) + write(")"); + write(";"); + } + function emitIfStatement(node) { + var endPos = emitToken(74 /* IfKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + emit(node.expression); + emitToken(8 /* CloseParenToken */, node.expression.end); + emitEmbeddedStatement(node.thenStatement); + if (node.elseStatement) { + writeLine(); + emitToken(66 /* ElseKeyword */, node.thenStatement.end); + if (node.elseStatement.kind === 147 /* IfStatement */) { + write(" "); + emit(node.elseStatement); + } + else { + emitEmbeddedStatement(node.elseStatement); + } + } + } + function emitDoStatement(node) { + write("do"); + emitEmbeddedStatement(node.statement); + if (node.statement.kind === 143 /* Block */) { + write(" "); + } + else { + writeLine(); + } + write("while ("); + emit(node.expression); + write(");"); + } + function emitWhileStatement(node) { + write("while ("); + emit(node.expression); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitForStatement(node) { + var endPos = emitToken(72 /* ForKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + if (node.declarations) { + emitToken(88 /* VarKeyword */, endPos); + write(" "); + emitCommaList(node.declarations); + } + if (node.initializer) { + emit(node.initializer); + } + write(";"); + emitOptional(" ", node.condition); + write(";"); + emitOptional(" ", node.iterator); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitForInStatement(node) { + var endPos = emitToken(72 /* ForKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + if (node.declaration) { + emitToken(88 /* VarKeyword */, endPos); + write(" "); + emit(node.declaration); + } + else { + emit(node.variable); + } + write(" in "); + emit(node.expression); + emitToken(8 /* CloseParenToken */, node.expression.end); + emitEmbeddedStatement(node.statement); + } + function emitBreakOrContinueStatement(node) { + emitToken(node.kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */, node.pos); + emitOptional(" ", node.label); + write(";"); + } + function emitReturnStatement(node) { + emitToken(80 /* ReturnKeyword */, node.pos); + emitOptional(" ", node.expression); + write(";"); + } + function emitWithStatement(node) { + write("with ("); + emit(node.expression); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitSwitchStatement(node) { + var endPos = emitToken(82 /* SwitchKeyword */, node.pos); + write(" "); + emitToken(7 /* OpenParenToken */, endPos); + emit(node.expression); + endPos = emitToken(8 /* CloseParenToken */, node.expression.end); + write(" "); + emitToken(5 /* OpenBraceToken */, endPos); + increaseIndent(); + emitLines(node.clauses); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.clauses.end); + } + function emitCaseOrDefaultClause(node) { + if (node.kind === 157 /* CaseClause */) { + write("case "); + emit(node.expression); + write(":"); + } + else { + write("default:"); + } + increaseIndent(); + emitLines(node.statements); + decreaseIndent(); + } + function emitThrowStatement(node) { + write("throw "); + emit(node.expression); + write(";"); + } + function emitTryStatement(node) { + write("try "); + emit(node.tryBlock); + emit(node.catchBlock); + if (node.finallyBlock) { + writeLine(); + write("finally "); + emit(node.finallyBlock); + } + } + function emitCatchBlock(node) { + writeLine(); + var endPos = emitToken(58 /* CatchKeyword */, node.pos); + write(" "); + emitToken(7 /* OpenParenToken */, endPos); + emit(node.variable); + emitToken(8 /* CloseParenToken */, node.variable.end); + write(" "); + emitBlock(node); + } + function emitDebuggerStatement(node) { + emitToken(62 /* DebuggerKeyword */, node.pos); + write(";"); + } + function emitLabelledStatement(node) { + emit(node.label); + write(": "); + emit(node.statement); + } + function getContainingModule(node) { + do { + node = node.parent; + } while (node && node.kind !== 172 /* ModuleDeclaration */); + return node; } - - if (dtsSymbol) { - this.symbolCache[dtsCacheID] = symbol; - return dtsSymbol; + function emitModuleMemberName(node) { + emitStart(node.name); + if (node.flags & 1 /* Export */) { + var container = getContainingModule(node); + write(container ? resolver.getLocalNameOfContainer(container) : "exports"); + write("."); + } + emitNode(node.name); + emitEnd(node.name); + } + function emitVariableDeclaration(node) { + emitModuleMemberName(node); + emitOptional(" = ", node.initializer); + } + function emitVariableStatement(node) { + if (!(node.flags & 1 /* Export */)) + write("var "); + emitCommaList(node.declarations); + write(";"); + } + function emitParameter(node) { + emit(node.name); + } + function emitDefaultValueAssignments(node) { + ts.forEach(node.parameters, function (param) { + if (param.initializer) { + writeLine(); + emitStart(param); + write("if ("); + emitNode(param.name); + write(" === void 0)"); + emitEnd(param); + write(" { "); + emitStart(param); + emitNode(param.name); + write(" = "); + emitNode(param.initializer); + emitEnd(param); + write("; }"); + } + }); } - - this.symbolCache[dtsCacheID] = null; - this.symbolCache[tsCacheID] = null; - - return null; - }; - - SemanticInfoChain.prototype.findAmbientExternalModuleInGlobalContext = function (id) { - var cacheID = this.getDeclPathCacheID([id], 32 /* DynamicModule */); - - var symbol = this.symbolCache[cacheID]; - if (symbol == undefined) { - symbol = null; - for (var i = 0; i < this.documents.length; i++) { - var document = this.documents[i]; - var topLevelDecl = document.topLevelDecl(); - - if (!topLevelDecl.isExternalModule()) { - var dynamicModules = topLevelDecl.searchChildDecls(id, 32 /* DynamicModule */); - if (dynamicModules.length) { - symbol = dynamicModules[0].getSymbol(); - break; + function emitRestParameter(node) { + if (ts.hasRestParameters(node)) { + var restIndex = node.parameters.length - 1; + var restParam = node.parameters[restIndex]; + writeLine(); + emitStart(restParam); + write("var "); + emitNode(restParam.name); + write(" = [];"); + emitEnd(restParam); + writeLine(); + write("for ("); + emitStart(restParam); + write("var _i = " + restIndex + ";"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write("_i < arguments.length;"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write("_i++"); + emitEnd(restParam); + write(") {"); + increaseIndent(); + writeLine(); + emitStart(restParam); + emitNode(restParam.name); + write("[_i - " + restIndex + "] = arguments[_i];"); + emitEnd(restParam); + decreaseIndent(); + writeLine(); + write("}"); + } + } + function emitAccessor(node) { + write(node.kind === 118 /* GetAccessor */ ? "get " : "set "); + emit(node.name); + emitSignatureAndBody(node); + } + function emitFunctionDeclaration(node) { + if (!node.body) + return; + write("function "); + if (node.kind === 167 /* FunctionDeclaration */ || (node.kind === 136 /* FunctionExpression */ && node.name)) { + emit(node.name); + } + emitSignatureAndBody(node); + } + function emitCaptureThisForNodeIfNecessary(node) { + if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { + writeLine(); + emitStart(node); + write("var _this = this;"); + emitEnd(node); + } + } + function emitSignatureParameters(node) { + write("("); + if (node) { + emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); + } + write(")"); + } + function emitSignatureAndBody(node) { + emitSignatureParameters(node); + write(" {"); + scopeEmitStart(node); + increaseIndent(); + var startIndex = 0; + if (node.body.kind === 168 /* FunctionBlock */) { + startIndex = emitDirectivePrologues(node.body.statements, true); + } + var outPos = writer.getTextPos(); + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + if (node.body.kind !== 168 /* FunctionBlock */ && outPos === writer.getTextPos()) { + decreaseIndent(); + write(" "); + emitStart(node.body); + write("return "); + emitNode(node.body); + emitEnd(node.body); + write("; "); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + else { + if (node.body.kind === 168 /* FunctionBlock */) { + emitLinesStartingAt(node.body.statements, startIndex); + } + else { + writeLine(); + write("return "); + emit(node.body); + write(";"); + } + decreaseIndent(); + writeLine(); + if (node.body.kind === 168 /* FunctionBlock */) { + emitToken(6 /* CloseBraceToken */, node.body.statements.end); + } + else { + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + } + scopeEmitEnd(); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + emitEnd(node); + write(";"); + } + } + function findInitialSuperCall(ctor) { + if (ctor.body) { + var statement = ctor.body.statements[0]; + if (statement && statement.kind === 146 /* ExpressionStatement */) { + var expr = statement.expression; + if (expr && expr.kind === 132 /* CallExpression */) { + var func = expr.func; + if (func && func.kind === 81 /* SuperKeyword */) { + return statement; + } } } } - - this.symbolCache[cacheID] = symbol; } - - return symbol; - }; - - SemanticInfoChain.prototype.findDecls = function (declPath, declKind) { - var cacheID = this.getDeclPathCacheID(declPath, declKind); - - if (declPath.length) { - var cachedDecls = this.declCache[cacheID]; - - if (cachedDecls && cachedDecls.length) { - TypeScript.declCacheHit++; - return cachedDecls; + function emitParameterPropertyAssignments(node) { + ts.forEach(node.parameters, function (param) { + if (param.flags & (16 /* Public */ | 32 /* Private */)) { + writeLine(); + emitStart(param); + emitStart(param.name); + write("this."); + emitNode(param.name); + emitEnd(param.name); + write(" = "); + emit(param.name); + write(";"); + emitEnd(param); + } + }); + } + function emitMemberAccess(memberName) { + if (memberName.kind === 3 /* StringLiteral */ || memberName.kind === 2 /* NumericLiteral */) { + write("["); + emitNode(memberName); + write("]"); + } + else { + write("."); + emitNode(memberName); } } - - TypeScript.declCacheMiss++; - - var declsToSearch = this.topLevelDecls(); - - var decls = TypeScript.sentinelEmptyArray; - var path; - var foundDecls = TypeScript.sentinelEmptyArray; - - for (var i = 0; i < declPath.length; i++) { - path = declPath[i]; - decls = TypeScript.sentinelEmptyArray; - - var kind = (i === declPath.length - 1) ? declKind : 164 /* SomeContainer */; - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(path, kind); - - for (var k = 0; k < foundDecls.length; k++) { - if (decls === TypeScript.sentinelEmptyArray) { - decls = []; + function emitMemberAssignments(node, staticFlag) { + ts.forEach(node.members, function (member) { + if (member.kind === 115 /* Property */ && (member.flags & 64 /* Static */) === staticFlag && member.initializer) { + writeLine(); + emitStart(member); + emitStart(member.name); + if (staticFlag) { + emitNode(node.name); + } + else { + write("this"); + } + emitMemberAccess(member.name); + emitEnd(member.name); + write(" = "); + emit(member.initializer); + write(";"); + emitEnd(member); + } + }); + } + function emitMemberFunctions(node) { + ts.forEach(node.members, function (member) { + if (member.kind === 116 /* Method */) { + if (!member.body) + return; + writeLine(); + emitStart(member); + emitStart(member.name); + emitNode(node.name); + if (!(member.flags & 64 /* Static */)) { + write(".prototype"); + } + emitMemberAccess(member.name); + emitEnd(member.name); + write(" = "); + emitStart(member); + emitFunctionDeclaration(member); + emitEnd(member); + emitEnd(member); + write(";"); + } + else if (member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) { + var accessors = getAllAccessorDeclarations(node, member); + if (member === accessors.firstAccessor) { + writeLine(); + emitStart(member); + write("Object.defineProperty("); + emitStart(member.name); + emitNode(node.name); + if (!(member.flags & 64 /* Static */)) { + write(".prototype"); + } + write(", "); + emitQuotedIdentifier(member.name); + emitEnd(member.name); + write(", {"); + increaseIndent(); + if (accessors.getAccessor) { + writeLine(); + write("get: "); + emitStart(accessors.getAccessor); + write("function "); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + write(","); + } + if (accessors.setAccessor) { + writeLine(); + write("set: "); + emitStart(accessors.setAccessor); + write("function "); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + write(","); + } + writeLine(); + write("enumerable: true,"); + writeLine(); + write("configurable: true"); + decreaseIndent(); + writeLine(); + write("});"); + emitEnd(member); } - decls[decls.length] = foundDecls[k]; + } + }); + } + function emitClassDeclaration(node) { + var ctor = getFirstConstructorWithBody(node); + write("var "); + emit(node.name); + write(" = (function ("); + if (node.baseType) + write("_super"); + write(") {"); + increaseIndent(); + scopeEmitStart(node); + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("__extends("); + emit(node.name); + write(", _super);"); + emitEnd(node.baseType); + } + writeLine(); + emitStart(ctor || node); + write("function "); + emit(node.name); + emitSignatureParameters(ctor); + write(" {"); + scopeEmitStart(node, "constructor"); + increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (node.baseType) { + var superCall = findInitialSuperCall(ctor); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("_super.apply(this, arguments);"); + emitEnd(node.baseType); + } + } + emitMemberAssignments(node, 0); + if (ctor) { + var statements = ctor.body.statements; + if (superCall) + statements = statements.slice(1); + emitLines(statements); + } + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + emitMemberFunctions(node); + emitMemberAssignments(node, 64 /* Static */); + writeLine(); + function emitClassReturnStatement() { + write("return "); + emitNode(node.name); + } + emitToken(6 /* CloseBraceToken */, node.members.end, emitClassReturnStatement); + write(";"); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.members.end); + scopeEmitEnd(); + emitStart(node); + write(")("); + if (node.baseType) { + emit(node.baseType.typeName); + } + write(");"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + emitEnd(node); + write(";"); + } + } + function emitEnumDeclaration(node) { + if (!(node.flags & 1 /* Export */)) { + emitStart(node); + write("var "); + emit(node.name); + emitEnd(node); + write(";"); + } + writeLine(); + emitStart(node); + write("(function ("); + emitStart(node.name); + write(resolver.getLocalNameOfContainer(node)); + emitEnd(node.name); + write(") {"); + increaseIndent(); + scopeEmitStart(node); + ts.forEach(node.members, function (member) { + writeLine(); + emitStart(member); + write(resolver.getLocalNameOfContainer(node)); + write("["); + write(resolver.getLocalNameOfContainer(node)); + write("["); + emitQuotedIdentifier(member.name); + write("] = "); + if (member.initializer) { + emit(member.initializer); + } + else { + write(resolver.getEnumMemberValue(member).toString()); + } + write("] = "); + emitQuotedIdentifier(member.name); + emitEnd(member); + write(";"); + }); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.members.end); + scopeEmitEnd(); + write(")("); + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + write("var "); + emit(node.name); + write(" = "); + emitModuleMemberName(node); + emitEnd(node); + write(";"); + } + } + function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { + if (moduleDeclaration.body.kind === 172 /* ModuleDeclaration */) { + var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); + return recursiveInnerModule || moduleDeclaration.body; + } + } + function emitModuleDeclaration(node) { + if (!ts.isInstantiated(node)) + return; + if (!(node.flags & 1 /* Export */)) { + emitStart(node); + write("var "); + emit(node.name); + write(";"); + emitEnd(node); + writeLine(); + } + emitStart(node); + write("(function ("); + emitStart(node.name); + write(resolver.getLocalNameOfContainer(node)); + emitEnd(node.name); + write(") "); + if (node.body.kind === 173 /* ModuleBlock */) { + emit(node.body); + } + else { + write("{"); + increaseIndent(); + scopeEmitStart(node); + emitCaptureThisForNodeIfNecessary(node); + writeLine(); + emit(node.body); + decreaseIndent(); + writeLine(); + var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; + emitToken(6 /* CloseBraceToken */, moduleBlock.statements.end); + scopeEmitEnd(); + } + write(")("); + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + write("var "); + emit(node.name); + write(" = "); + emitModuleMemberName(node); + emitEnd(node); + write(";"); + } + } + function emitImportDeclaration(node) { + var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); + if (!emitImportDeclaration) { + emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportedViaEntityName(node); + } + if (emitImportDeclaration) { + if (node.externalModuleName && node.parent.kind === 177 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + write(";"); + emitEnd(node); + } + } + else { + writeLine(); + emitStart(node); + if (!(node.flags & 1 /* Export */)) + write("var "); + emitModuleMemberName(node); + write(" = "); + if (node.entityName) { + emit(node.entityName); + } + else { + write("require("); + emitStart(node.externalModuleName); + emitLiteral(node.externalModuleName); + emitEnd(node.externalModuleName); + emitToken(8 /* CloseParenToken */, node.externalModuleName.end); + } + write(";"); + emitEnd(node); + } + } + } + function getExternalImportDeclarations(node) { + var result = []; + ts.forEach(node.statements, function (stat) { + if (stat.kind === 174 /* ImportDeclaration */ && stat.externalModuleName && resolver.isReferencedImportDeclaration(stat)) { + result.push(stat); + } + }); + return result; + } + function getFirstExportAssignment(sourceFile) { + return ts.forEach(sourceFile.statements, function (node) { + if (node.kind === 175 /* ExportAssignment */) { + return node; + } + }); + } + function emitAMDModule(node, startIndex) { + var imports = getExternalImportDeclarations(node); + writeLine(); + write("define([\"require\", \"exports\""); + ts.forEach(imports, function (imp) { + write(", "); + emitLiteral(imp.externalModuleName); + }); + ts.forEach(node.amdDependencies, function (amdDependency) { + var text = "\"" + amdDependency + "\""; + write(", "); + write(text); + }); + write("], function (require, exports"); + ts.forEach(imports, function (imp) { + write(", "); + emit(imp.name); + }); + write(") {"); + increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + var exportName = resolver.getExportAssignmentName(node); + if (exportName) { + writeLine(); + var exportAssignement = getFirstExportAssignment(node); + emitStart(exportAssignement); + write("return "); + emitStart(exportAssignement.exportName); + write(exportName); + emitEnd(exportAssignement.exportName); + write(";"); + emitEnd(exportAssignement); + } + decreaseIndent(); + writeLine(); + write("});"); + } + function emitCommonJSModule(node, startIndex) { + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + var exportName = resolver.getExportAssignmentName(node); + if (exportName) { + writeLine(); + var exportAssignement = getFirstExportAssignment(node); + emitStart(exportAssignement); + write("module.exports = "); + emitStart(exportAssignement.exportName); + write(exportName); + emitEnd(exportAssignement.exportName); + write(";"); + emitEnd(exportAssignement); + } + } + function emitDirectivePrologues(statements, startWithNewLine) { + for (var i = 0; i < statements.length; ++i) { + if (ts.isPrologueDirective(statements[i])) { + if (startWithNewLine || i > 0) { + writeLine(); + } + emit(statements[i]); + } + else { + return i; + } + } + return statements.length; + } + function emitSourceFile(node) { + currentSourceFile = node; + var startIndex = emitDirectivePrologues(node.statements, false); + if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { + writeLine(); + write("var __extends = this.__extends || function (d, b) {"); + increaseIndent(); + writeLine(); + write("for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); + writeLine(); + write("function __() { this.constructor = d; }"); + writeLine(); + write("__.prototype = b.prototype;"); + writeLine(); + write("d.prototype = new __();"); + decreaseIndent(); + writeLine(); + write("};"); + extendsEmitted = true; + } + if (ts.isExternalModule(node)) { + if (compilerOptions.module === 2 /* AMD */) { + emitAMDModule(node, startIndex); + } + else { + emitCommonJSModule(node, startIndex); + } + } + else { + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + } + } + function emitNode(node) { + if (!node || node.flags & 2 /* Ambient */) + return; + switch (node.kind) { + case 55 /* Identifier */: + return emitIdentifier(node); + case 114 /* Parameter */: + return emitParameter(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return emitAccessor(node); + case 83 /* ThisKeyword */: + return emitThis(node); + case 81 /* SuperKeyword */: + return emitSuper(node); + case 79 /* NullKeyword */: + return write("null"); + case 85 /* TrueKeyword */: + return write("true"); + case 70 /* FalseKeyword */: + return write("false"); + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 4 /* RegularExpressionLiteral */: + return emitLiteral(node); + case 112 /* QualifiedName */: + return emitPropertyAccess(node); + case 127 /* ArrayLiteral */: + return emitArrayLiteral(node); + case 128 /* ObjectLiteral */: + return emitObjectLiteral(node); + case 129 /* PropertyAssignment */: + return emitPropertyAssignment(node); + case 130 /* PropertyAccess */: + return emitPropertyAccess(node); + case 131 /* IndexedAccess */: + return emitIndexedAccess(node); + case 132 /* CallExpression */: + return emitCallExpression(node); + case 133 /* NewExpression */: + return emitNewExpression(node); + case 134 /* TypeAssertion */: + return emit(node.operand); + case 135 /* ParenExpression */: + return emitParenExpression(node); + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return emitFunctionDeclaration(node); + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + return emitUnaryExpression(node); + case 140 /* BinaryExpression */: + return emitBinaryExpression(node); + case 141 /* ConditionalExpression */: + return emitConditionalExpression(node); + case 142 /* OmittedExpression */: + return; + case 143 /* Block */: + case 162 /* TryBlock */: + case 164 /* FinallyBlock */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + return emitBlock(node); + case 144 /* VariableStatement */: + return emitVariableStatement(node); + case 145 /* EmptyStatement */: + return write(";"); + case 146 /* ExpressionStatement */: + return emitExpressionStatement(node); + case 147 /* IfStatement */: + return emitIfStatement(node); + case 148 /* DoStatement */: + return emitDoStatement(node); + case 149 /* WhileStatement */: + return emitWhileStatement(node); + case 150 /* ForStatement */: + return emitForStatement(node); + case 151 /* ForInStatement */: + return emitForInStatement(node); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return emitBreakOrContinueStatement(node); + case 154 /* ReturnStatement */: + return emitReturnStatement(node); + case 155 /* WithStatement */: + return emitWithStatement(node); + case 156 /* SwitchStatement */: + return emitSwitchStatement(node); + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + return emitCaseOrDefaultClause(node); + case 159 /* LabelledStatement */: + return emitLabelledStatement(node); + case 160 /* ThrowStatement */: + return emitThrowStatement(node); + case 161 /* TryStatement */: + return emitTryStatement(node); + case 163 /* CatchBlock */: + return emitCatchBlock(node); + case 165 /* DebuggerStatement */: + return emitDebuggerStatement(node); + case 166 /* VariableDeclaration */: + return emitVariableDeclaration(node); + case 169 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 171 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 177 /* SourceFile */: + return emitSourceFile(node); + } + } + if (compilerOptions.sourceMap) { + initializeEmitterWithSourceMaps(); + } + if (root) { + emit(root); + } + else { + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + emit(sourceFile); + } + }); + } + writeLine(); + writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); + } + function emitDeclarations(jsFilePath, root) { + var writer = createTextWriter(writeSymbol); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var enclosingDeclaration; + var reportedDeclarationError = false; + var aliasDeclarationEmitInfo = []; + var getSymbolVisibilityDiagnosticMessage; + function writeAsychronousImportDeclarations(importDeclarations) { + var oldWriter = writer; + ts.forEach(importDeclarations, function (aliasToWrite) { + var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); + writer = createTextWriter(writeSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } + function writeSymbol(symbol, enclosingDeclaration, meaning) { + var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + resolver.writeSymbol(symbol, enclosingDeclaration, meaning, writer); + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); } } - - declsToSearch = decls; - - if (!declsToSearch) { - break; + else { + reportedDeclarationError = true; + var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + } } } - - if (decls.length) { - this.declCache[cacheID] = decls; - } - - return decls; - }; - - SemanticInfoChain.prototype.findDeclsFromPath = function (declPath, declKind) { - var declString = []; - - for (var i = 0, n = declPath.length; i < n; i++) { - if (declPath[i].kind & 1 /* Script */) { - continue; + function emitLines(nodes) { + for (var i = 0, n = nodes.length; i < n; i++) { + emitNode(nodes[i]); } - - declString.push(declPath[i].name); } - - return this.findDecls(declString, declKind); - }; - - SemanticInfoChain.prototype.findSymbol = function (declPath, declType) { - var cacheID = this.getDeclPathCacheID(declPath, declType); - - if (declPath.length) { - var cachedSymbol = this.symbolCache[cacheID]; - - if (cachedSymbol) { - TypeScript.symbolCacheHit++; - return cachedSymbol; + function emitCommaList(nodes, eachNodeEmitFn) { + var currentWriterPos = writer.getTextPos(); + for (var i = 0, n = nodes.length; i < n; i++) { + if (currentWriterPos !== writer.getTextPos()) { + write(", "); + } + currentWriterPos = writer.getTextPos(); + eachNodeEmitFn(nodes[i]); } } - - TypeScript.symbolCacheMiss++; - - var decls = this.findDecls(declPath, declType); - var symbol = null; - - if (decls.length) { - var decl = decls[0]; - if (TypeScript.hasFlag(decl.kind, 164 /* SomeContainer */)) { - var valueDecl = decl.getValueDecl(); - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); + function emitSourceTextOfNode(node) { + write(getSourceTextOfLocalNode(node)); + } + function emitSourceFile(node) { + currentSourceFile = node; + enclosingDeclaration = node; + emitLines(node.statements); + } + function emitExportAssignment(node) { + write("export = "); + emitSourceTextOfNode(node.exportName); + write(";"); + writeLine(); + } + function emitDeclarationFlags(node) { + if (node.flags & 64 /* Static */) { + if (node.flags & 32 /* Private */) { + write("private "); } + write("static "); } - symbol = decl.getSymbol(); - - if (symbol) { - for (var i = 1; i < decls.length; i++) { - decls[i].ensureSymbolIsBound(); + else { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.parent === currentSourceFile) { + if (node.flags & 1 /* Export */) { + write("export "); + } + if (node.kind !== 170 /* InterfaceDeclaration */) { + write("declare "); + } } - - this.symbolCache[cacheID] = symbol; } } - - return symbol; - }; - - SemanticInfoChain.prototype.cacheGlobalSymbol = function (symbol, kind) { - var cacheID1 = this.getDeclPathCacheID([symbol.name], kind); - var cacheID2 = this.getDeclPathCacheID([symbol.name], symbol.kind); - - if (!this.symbolCache[cacheID1]) { - this.symbolCache[cacheID1] = symbol; - } - - if (!this.symbolCache[cacheID2]) { - this.symbolCache[cacheID2] = symbol; - } - }; - - SemanticInfoChain.prototype.invalidate = function (oldSettings, newSettings) { - if (typeof oldSettings === "undefined") { oldSettings = null; } - if (typeof newSettings === "undefined") { newSettings = null; } - TypeScript.PullTypeResolver.globalTypeCheckPhase++; - - var cleanStart = new Date().getTime(); - - this.astSymbolMap.length = 0; - this.astAliasSymbolMap.length = 0; - this.astCallResolutionDataMap.length = 0; - - this.declCache = TypeScript.createIntrinsicsObject(); - this.symbolCache = TypeScript.createIntrinsicsObject(); - this.fileNameToDiagnostics = TypeScript.createIntrinsicsObject(); - this._binder = null; - this._resolver = null; - this._topLevelDecls = null; - this._fileNames = null; - - this.declSymbolMap.length = 0; - this.declSignatureSymbolMap.length = 0; - - if (oldSettings && newSettings) { - if (this.settingsChangeAffectsSyntax(oldSettings, newSettings)) { - for (var i = 1, n = this.documents.length; i < n; i++) { - this.documents[i].invalidate(); + function emitImportDeclaration(node) { + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + function writeImportDeclaration(node) { + if (node.flags & 1 /* Export */) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(node.name)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(node.entityName)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(node.externalModuleName)); + writer.write(");"); + } + writer.writeLine(); + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + reportedDeclarationError = true; + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName)); + } + } + } + function emitModuleDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("module "); + emitSourceTextOfNode(node.name); + while (node.body.kind !== 173 /* ModuleBlock */) { + node = node.body; + write("."); + emitSourceTextOfNode(node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitEnumDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("enum "); + emitSourceTextOfNode(node.name); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + } + } + function emitEnumMemberDeclaration(node) { + emitSourceTextOfNode(node.name); + var enumMemberValue = resolver.getEnumMemberValue(node); + if (enumMemberValue !== undefined) { + write(" = "); + write(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + function emitTypeParameters(typeParameters) { + function emitTypeParameter(node) { + function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 169 /* ClassDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + case 170 /* InterfaceDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 116 /* Method */: + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for type parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + emitSourceTextOfNode(node.name); + if (node.constraint && (node.parent.kind !== 116 /* Method */ || !(node.parent.flags & 32 /* Private */))) { + write(" extends "); + getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + if (typeParameters) { + write("<"); + emitCommaList(typeParameters, emitTypeParameter); + write(">"); + } + } + function emitHeritageClause(typeReferences, isImplementsList) { + if (typeReferences) { + write(isImplementsList ? " implements " : " extends "); + emitCommaList(typeReferences, emitTypeOfTypeReference); + } + function emitTypeOfTypeReference(node) { + getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); + function getHeritageClauseVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.parent.kind === 169 /* ClassDeclaration */) { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; + } + } + else { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; + } + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.parent.name + }; } } } - - TypeScript.pullSymbolID = 0; - - this.resetGlobalSymbols(); - - var cleanEnd = new Date().getTime(); - }; - - SemanticInfoChain.prototype.settingsChangeAffectsSyntax = function (before, after) { - return before.allowAutomaticSemicolonInsertion() !== after.allowAutomaticSemicolonInsertion() || before.codeGenTarget() !== after.codeGenTarget() || before.propagateEnumConstants() !== after.propagateEnumConstants(); - }; - - SemanticInfoChain.prototype.setSymbolForAST = function (ast, symbol) { - this.astSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForAST = function (ast) { - return this.astSymbolMap[ast.syntaxID()] || null; - }; - - SemanticInfoChain.prototype.setAliasSymbolForAST = function (ast, symbol) { - this.astAliasSymbolMap[ast.syntaxID()] = symbol; - }; - - SemanticInfoChain.prototype.getAliasSymbolForAST = function (ast) { - return this.astAliasSymbolMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.getCallResolutionDataForAST = function (ast) { - return this.astCallResolutionDataMap[ast.syntaxID()]; - }; - - SemanticInfoChain.prototype.setCallResolutionDataForAST = function (ast, callResolutionData) { - if (callResolutionData) { - this.astCallResolutionDataMap[ast.syntaxID()] = callResolutionData; - } - }; - - SemanticInfoChain.prototype.setSymbolForDecl = function (decl, symbol) { - this.declSymbolMap[decl.declID] = symbol; - }; - - SemanticInfoChain.prototype.getSymbolForDecl = function (decl) { - return this.declSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.setSignatureSymbolForDecl = function (decl, signatureSymbol) { - this.declSignatureSymbolMap[decl.declID] = signatureSymbol; - }; - - SemanticInfoChain.prototype.getSignatureSymbolForDecl = function (decl) { - return this.declSignatureSymbolMap[decl.declID]; - }; - - SemanticInfoChain.prototype.addDiagnostic = function (diagnostic) { - var fileName = diagnostic.fileName(); - var diagnostics = this.fileNameToDiagnostics[fileName]; - if (!diagnostics) { - diagnostics = []; - this.fileNameToDiagnostics[fileName] = diagnostics; - } - - diagnostics.push(diagnostic); - }; - - SemanticInfoChain.prototype.getDiagnostics = function (fileName) { - var diagnostics = this.fileNameToDiagnostics[fileName]; - return diagnostics || []; - }; - - SemanticInfoChain.prototype.getBinder = function () { - if (!this._binder) { - this._binder = new TypeScript.PullSymbolBinder(this); + function emitClassDeclaration(node) { + function emitParameterProperties(constructorDeclaration) { + if (constructorDeclaration) { + ts.forEach(constructorDeclaration.parameters, function (param) { + if (param.flags & (16 /* Public */ | 32 /* Private */)) { + emitPropertyDeclaration(param); + } + }); + } + } + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("class "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + if (node.baseType) { + emitHeritageClause([node.baseType], false); + } + emitHeritageClause(node.implementedTypes, true); + write(" {"); + writeLine(); + increaseIndent(); + emitParameterProperties(getFirstConstructorWithBody(node)); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitInterfaceDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("interface "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + emitHeritageClause(node.baseTypes, false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitPropertyDeclaration(node) { + emitDeclarationFlags(node); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + function emitVariableDeclaration(node) { + if (node.kind !== 166 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + emitSourceTextOfNode(node.name); + if (node.kind === 115 /* Property */ && (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 166 /* VariableDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + else if (node.kind === 115 /* Property */) { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } + } + function emitVariableStatement(node) { + var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); + if (hasDeclarationWithEmit) { + emitDeclarationFlags(node); + write("var "); + emitCommaList(node.declarations, emitVariableDeclaration); + write(";"); + writeLine(); + } + } + function emitAccessorDeclaration(node) { + var accessors = getAllAccessorDeclarations(node.parent, node); + if (node === accessors.firstAccessor) { + emitDeclarationFlags(node); + emitSourceTextOfNode(node.name); + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + } + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 119 /* SetAccessor */) { + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } } - - return this._binder; - }; - - SemanticInfoChain.prototype.getResolver = function () { - if (!this._resolver) { - this._resolver = new TypeScript.PullTypeResolver(this.compiler.compilationSettings(), this); + function emitFunctionDeclaration(node) { + if ((node.kind !== 167 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitDeclarationFlags(node); + if (node.kind === 167 /* FunctionDeclaration */) { + write("function "); + emitSourceTextOfNode(node.name); + } + else if (node.kind === 117 /* Constructor */) { + write("constructor"); + } + else { + emitSourceTextOfNode(node.name); + if (node.flags & 4 /* QuestionMark */) { + write("?"); + } + } + emitSignatureDeclaration(node); + } } - - return this._resolver; - }; - - SemanticInfoChain.prototype.addSyntheticIndexSignature = function (containingDecl, containingSymbol, ast, indexParamName, indexParamType, returnType) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - var indexParameterSymbol = new TypeScript.PullSymbol(indexParamName, 2048 /* Parameter */); - indexParameterSymbol.type = indexParamType; - indexSignature.addParameter(indexParameterSymbol); - indexSignature.returnType = returnType; - indexSignature.setResolved(); - indexParameterSymbol.setResolved(); - - containingSymbol.addIndexSignature(indexSignature); - - var indexSigDecl = new TypeScript.PullSynthesizedDecl("", "", 4194304 /* IndexSignature */, 2048 /* Signature */, containingDecl, containingDecl.semanticInfoChain); - var indexParamDecl = new TypeScript.PullSynthesizedDecl(indexParamName, indexParamName, 2048 /* Parameter */, 0 /* None */, indexSigDecl, containingDecl.semanticInfoChain); - indexSigDecl.setSignatureSymbol(indexSignature); - indexParamDecl.setSymbol(indexParameterSymbol); - indexSignature.addDeclaration(indexSigDecl); - indexParameterSymbol.addDeclaration(indexParamDecl); - }; - - SemanticInfoChain.prototype.getDeclForAST = function (ast) { - var document = this.getDocument(ast.fileName()); - - if (document) { - return document._getDeclForAST(ast); + function emitConstructSignatureDeclaration(node) { + write("new "); + emitSignatureDeclaration(node); } - - return null; - }; - - SemanticInfoChain.prototype.getEnclosingDecl = function (ast) { - return this.getDocument(ast.fileName()).getEnclosingDecl(ast); - }; - - SemanticInfoChain.prototype.setDeclForAST = function (ast, decl) { - this.getDocument(decl.fileName())._setDeclForAST(ast, decl); - }; - - SemanticInfoChain.prototype.getASTForDecl = function (decl) { - var document = this.getDocument(decl.fileName()); - if (document) { - return document._getASTForDecl(decl); + function emitSignatureDeclaration(node) { + emitTypeParameters(node.typeParameters); + if (node.kind === 122 /* IndexSignature */) { + write("["); + } + else { + write("("); + } + emitCommaList(node.parameters, emitParameterDeclaration); + if (node.kind === 122 /* IndexSignature */) { + write("]"); + } + else { + write(")"); + } + if (node.kind !== 117 /* Constructor */ && !(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + function getReturnTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 122 /* IndexSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 116 /* Method */: + if (node.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node + }; + } } - - return null; - }; - - SemanticInfoChain.prototype.setASTForDecl = function (decl, ast) { - this.getDocument(decl.fileName())._setASTForDecl(decl, ast); - }; - - SemanticInfoChain.prototype.topLevelDecl = function (fileName) { - var document = this.getDocument(fileName); - if (document) { - return document.topLevelDecl(); + function emitParameterDeclaration(node) { + if (node.flags & 8 /* Rest */) { + write("..."); + } + emitSourceTextOfNode(node.name); + if (node.initializer || (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.parent.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 117 /* Constructor */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + case 121 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 116 /* Method */: + if (node.parent.flags & 64 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 169 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 167 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } } - - return null; - }; - - SemanticInfoChain.prototype.topLevelDecls = function () { - if (!this._topLevelDecls) { - this._topLevelDecls = TypeScript.ArrayUtilities.select(this.documents, function (u) { - return u.topLevelDecl(); + function emitNode(node) { + switch (node.kind) { + case 117 /* Constructor */: + case 167 /* FunctionDeclaration */: + case 116 /* Method */: + return emitFunctionDeclaration(node); + case 121 /* ConstructSignature */: + return emitConstructSignatureDeclaration(node); + case 120 /* CallSignature */: + case 122 /* IndexSignature */: + return emitSignatureDeclaration(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return emitAccessorDeclaration(node); + case 144 /* VariableStatement */: + return emitVariableStatement(node); + case 115 /* Property */: + return emitPropertyDeclaration(node); + case 170 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); + case 169 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 176 /* EnumMember */: + return emitEnumMemberDeclaration(node); + case 171 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 175 /* ExportAssignment */: + return emitExportAssignment(node); + case 177 /* SourceFile */: + return emitSourceFile(node); + } + } + function resolveScriptReference(sourceFile, reference) { + var referenceFileName = compilerOptions.noResolve ? reference.filename : ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); + return program.getSourceFile(referenceFileName); + } + var referencePathsOutput = ""; + function writeReferencePath(referencedFile) { + var declFileName = referencedFile.flags & 512 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; + declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); + referencePathsOutput += "/// " + newLine; + } + if (root) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = resolveScriptReference(root, fileReference); + if ((referencedFile.flags & 512 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile) || !addedGlobalFileReference) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + emitNode(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = resolveScriptReference(sourceFile, fileReference); + if (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile)) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + emitNode(sourceFile); + } }); } - - return this._topLevelDecls; - }; - - SemanticInfoChain.prototype.addDiagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - this.addDiagnostic(this.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations)); - }; - - SemanticInfoChain.prototype.diagnosticFromAST = function (ast, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - return new TypeScript.Diagnostic(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width(), diagnosticKey, _arguments, additionalLocations); - }; - - SemanticInfoChain.prototype.locationFromAST = function (ast) { - return new TypeScript.Location(ast.fileName(), this.lineMap(ast.fileName()), ast.start(), ast.width()); - }; - - SemanticInfoChain.prototype.duplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - return this.diagnosticFromAST(ast, TypeScript.DiagnosticCode.Duplicate_identifier_0, [identifier], additionalLocationAST ? [this.locationFromAST(additionalLocationAST)] : null); - }; - - SemanticInfoChain.prototype.addDuplicateIdentifierDiagnosticFromAST = function (ast, identifier, additionalLocationAST) { - this.addDiagnostic(this.duplicateIdentifierDiagnosticFromAST(ast, identifier, additionalLocationAST)); - }; - return SemanticInfoChain; - })(); - TypeScript.SemanticInfoChain = SemanticInfoChain; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var DeclCollectionContext = (function () { - function DeclCollectionContext(document, semanticInfoChain, propagateEnumConstants) { - this.document = document; - this.semanticInfoChain = semanticInfoChain; - this.propagateEnumConstants = propagateEnumConstants; - this.isDeclareFile = false; - this.parentChain = []; - } - DeclCollectionContext.prototype.getParent = function () { - return this.parentChain ? this.parentChain[this.parentChain.length - 1] : null; - }; - - DeclCollectionContext.prototype.pushParent = function (parentDecl) { - if (parentDecl) { - this.parentChain[this.parentChain.length] = parentDecl; + if (!reportedDeclarationError) { + var declarationOutput = referencePathsOutput; + var synchronousDeclarationOutput = writer.getText(); + var appliedSyncOutputPos = 0; + ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } - }; - - DeclCollectionContext.prototype.popParent = function () { - this.parentChain.length--; - }; - return DeclCollectionContext; - })(); - - function moduleElementsHasExportAssignment(moduleElements) { - return moduleElements.any(function (m) { - return m.kind() === 134 /* ExportAssignment */; - }); - } - - function containingModuleHasExportAssignment(ast) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = ast; - return moduleElementsHasExportAssignment(moduleDecl.moduleElements); - } else if (ast.kind() === 120 /* SourceUnit */) { - var sourceUnit = ast; - return moduleElementsHasExportAssignment(sourceUnit.moduleElements); + } + var shouldEmitDeclarations = resolver.shouldEmitDeclarations(); + function emitFile(jsFilePath, sourceFile) { + emitJavaScript(jsFilePath, sourceFile); + if (shouldEmitDeclarations) { + emitDeclarations(jsFilePath, sourceFile); } - - ast = ast.parent; } - - return false; - } - - function isParsingAmbientModule(ast, context) { - ast = ast.parent; - while (ast) { - if (ast.kind() === 130 /* ModuleDeclaration */) { - if (TypeScript.hasModifier(ast.modifiers, 8 /* Ambient */)) { - return true; - } + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (shouldEmitToOwnFile(sourceFile)) { + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); + emitFile(jsFilePath, sourceFile); } - - ast = ast.parent; + }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); } - - return false; + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); + return { + errors: diagnostics, + sourceMaps: sourceMapDataList + }; } - - function preCollectImportDecls(ast, context) { - var importDecl = ast; - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (TypeScript.hasModifier(importDecl.modifiers, 1 /* Exported */) && !containingModuleHasExportAssignment(ast)) { - declFlags |= 1 /* Exported */; + ts.emitFiles = emitFiles; +})(ts || (ts = {})); +var ts; +(function (ts) { + var nextSymbolId = 1; + var nextNodeId = 1; + var nextMergeId = 1; + function createTypeChecker(program, fullTypeCheck) { + var Symbol = ts.objectAllocator.getSymbolConstructor(); + var Type = ts.objectAllocator.getTypeConstructor(); + var Signature = ts.objectAllocator.getSignatureConstructor(); + var typeCount = 0; + var emptyArray = []; + var emptySymbols = {}; + var checker = { + getProgram: function () { return program; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, + getTypeCount: function () { return typeCount; }, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getSymbolsInScope: getSymbolsInScope, + getSymbolInfo: getSymbolInfo, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; + var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); + var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); + var unknownSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "unknown"); + var resolvingSymbol = createSymbol(33554432 /* Transient */, "__resolving__"); + var anyType = createIntrinsicType(1 /* Any */, "any"); + var stringType = createIntrinsicType(2 /* String */, "string"); + var numberType = createIntrinsicType(4 /* Number */, "number"); + var booleanType = createIntrinsicType(8 /* Boolean */, "boolean"); + var voidType = createIntrinsicType(16 /* Void */, "void"); + var undefinedType = createIntrinsicType(32 /* Undefined */, "undefined"); + var nullType = createIntrinsicType(64 /* Null */, "null"); + var unknownType = createIntrinsicType(1 /* Any */, "unknown"); + var resolvingType = createIntrinsicType(1 /* Any */, "__resolving__"); + var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false); + var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false); + var globals = {}; + var globalArraySymbol; + var globalObjectType; + var globalFunctionType; + var globalArrayType; + var globalStringType; + var globalNumberType; + var globalBooleanType; + var globalRegExpType; + var stringLiteralTypes = {}; + var emitExtends = false; + var mergedSymbols = []; + var symbolLinks = []; + var nodeLinks = []; + var potentialThisCollisions = []; + var diagnostics = []; + var diagnosticsModified = false; + function addDiagnostic(diagnostic) { + diagnostics.push(diagnostic); + diagnosticsModified = true; } - - var decl = new TypeScript.NormalPullDecl(importDecl.identifier.valueText(), importDecl.identifier.text(), 128 /* TypeAlias */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - } - - function preCollectScriptDecls(sourceUnit, context) { - var fileName = sourceUnit.fileName(); - - var isExternalModule = context.document.isExternalModule(); - - var decl = new TypeScript.RootPullDecl(fileName, fileName, 1 /* Script */, 0 /* None */, context.semanticInfoChain, isExternalModule); - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.isDeclareFile = context.document.isDeclareFile(); - - context.pushParent(decl); - - if (isExternalModule) { - var declFlags = 1 /* Exported */; - if (TypeScript.isDTSFile(fileName)) { - declFlags |= 8 /* Ambient */; + function error(location, message, arg0, arg1, arg2) { + var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); + addDiagnostic(diagnostic); + } + function createSymbol(flags, name) { + return new Symbol(flags, name); + } + function getExcludedSymbolFlags(flags) { + var result = 0; + if (flags & 1 /* Variable */) + result |= ts.SymbolFlags.VariableExcludes; + if (flags & 2 /* Property */) + result |= ts.SymbolFlags.PropertyExcludes; + if (flags & 4 /* EnumMember */) + result |= ts.SymbolFlags.EnumMemberExcludes; + if (flags & 8 /* Function */) + result |= ts.SymbolFlags.FunctionExcludes; + if (flags & 16 /* Class */) + result |= ts.SymbolFlags.ClassExcludes; + if (flags & 32 /* Interface */) + result |= ts.SymbolFlags.InterfaceExcludes; + if (flags & 64 /* Enum */) + result |= ts.SymbolFlags.EnumExcludes; + if (flags & 128 /* ValueModule */) + result |= ts.SymbolFlags.ValueModuleExcludes; + if (flags & 2048 /* Method */) + result |= ts.SymbolFlags.MethodExcludes; + if (flags & 8192 /* GetAccessor */) + result |= ts.SymbolFlags.GetAccessorExcludes; + if (flags & 16384 /* SetAccessor */) + result |= ts.SymbolFlags.SetAccessorExcludes; + if (flags & 262144 /* TypeParameter */) + result |= ts.SymbolFlags.TypeParameterExcludes; + if (flags & 4194304 /* Import */) + result |= ts.SymbolFlags.ImportExcludes; + return result; + } + function recordMergedSymbol(target, source) { + if (!source.mergeId) + source.mergeId = nextMergeId++; + mergedSymbols[source.mergeId] = target; + } + function cloneSymbol(symbol) { + var result = createSymbol(symbol.flags | 16777216 /* Merged */, symbol.name); + result.declarations = symbol.declarations.slice(0); + result.parent = symbol.parent; + if (symbol.valueDeclaration) + result.valueDeclaration = symbol.valueDeclaration; + if (symbol.members) + result.members = cloneSymbolTable(symbol.members); + if (symbol.exports) + result.exports = cloneSymbolTable(symbol.exports); + recordMergedSymbol(result, symbol); + return result; + } + function extendSymbol(target, source) { + if (!(target.flags & getExcludedSymbolFlags(source.flags))) { + target.flags |= source.flags; + if (!target.valueDeclaration && source.valueDeclaration) + target.valueDeclaration = source.valueDeclaration; + ts.forEach(source.declarations, function (node) { + target.declarations.push(node); + }); + if (source.members) { + if (!target.members) + target.members = {}; + extendSymbolTable(target.members, source.members); + } + if (source.exports) { + if (!target.exports) + target.exports = {}; + extendSymbolTable(target.exports, source.exports); + } + recordMergedSymbol(target, source); } - - var moduleContainsExecutableCode = containsExecutableCode(sourceUnit.moduleElements); - var kind = 32 /* DynamicModule */; - var valueText = TypeScript.quoteStr(fileName); - - var decl = new TypeScript.NormalPullDecl(valueText, fileName, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setASTForDecl(decl, sourceUnit); - - context.semanticInfoChain.setDeclForAST(sourceUnit, decl); - - if (!moduleElementsHasExportAssignment(sourceUnit.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, sourceUnit, context); + else { + ts.forEach(source.declarations, function (node) { + error(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, symbolToString(source)); + }); } - - context.pushParent(decl); - } - } - - function preCollectEnumDecls(enumDecl, context) { - var declFlags = 0 /* None */; - var enumName = enumDecl.identifier.valueText(); - - if ((TypeScript.hasModifier(enumDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(enumDecl, context)) && !containingModuleHasExportAssignment(enumDecl)) { - declFlags |= 1 /* Exported */; } - - if (TypeScript.hasModifier(enumDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(enumDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; + function cloneSymbolTable(symbolTable) { + var result = {}; + for (var id in symbolTable) { + if (ts.hasProperty(symbolTable, id)) { + result[id] = symbolTable[id]; + } + } + return result; } - - declFlags |= 4096 /* Enum */; - var kind = 64 /* Enum */; - - var enumDeclaration = new TypeScript.NormalPullDecl(enumName, enumDecl.identifier.text(), kind, declFlags, context.getParent()); - context.semanticInfoChain.setDeclForAST(enumDecl, enumDeclaration); - context.semanticInfoChain.setASTForDecl(enumDeclaration, enumDecl); - - var valueDecl = new TypeScript.NormalPullDecl(enumDeclaration.name, enumDeclaration.getDisplayName(), 512 /* Variable */, enumDeclaration.flags, context.getParent()); - enumDeclaration.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, enumDecl); - - context.pushParent(enumDeclaration); - } - - function createEnumElementDecls(propertyDecl, context) { - var parent = context.getParent(); - - var decl = new TypeScript.PullEnumElementDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function preCollectModuleDecls(moduleDecl, context) { - var declFlags = 0 /* None */; - - var moduleContainsExecutableCode = containsExecutableCode(moduleDecl.moduleElements); - - var isDynamic = moduleDecl.stringLiteral !== null; - - if ((TypeScript.hasModifier(moduleDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(moduleDecl, context)) && !containingModuleHasExportAssignment(moduleDecl)) { - declFlags |= 1 /* Exported */; + function extendSymbolTable(target, source) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + if (!ts.hasProperty(target, id)) { + target[id] = source[id]; + } + else { + var symbol = target[id]; + if (!(symbol.flags & 16777216 /* Merged */)) { + target[id] = symbol = cloneSymbol(symbol); + } + extendSymbol(symbol, source[id]); + } + } + } } - - if (TypeScript.hasModifier(moduleDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(moduleDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; + function getSymbolLinks(symbol) { + if (symbol.flags & 33554432 /* Transient */) + return symbol; + if (!symbol.id) + symbol.id = nextSymbolId++; + return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {}); + } + function getNodeLinks(node) { + if (!node.id) + node.id = nextNodeId++; + return nodeLinks[node.id] || (nodeLinks[node.id] = {}); + } + function getSourceFile(node) { + return getAncestor(node, 177 /* SourceFile */); + } + function isGlobalSourceFile(node) { + return node.kind === 177 /* SourceFile */ && !ts.isExternalModule(node); + } + function getSymbol(symbols, name, meaning) { + if (meaning && ts.hasProperty(symbols, name)) { + var symbol = symbols[name]; + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + if (symbol.flags & meaning) { + return symbol; + } + if (symbol.flags & 4194304 /* Import */) { + var target = resolveImport(symbol); + if (target === unknownSymbol || target.flags & meaning) { + return symbol; + } + } + } } - - var kind = isDynamic ? 32 /* DynamicModule */ : 4 /* Container */; - - if (moduleDecl.stringLiteral) { - var valueText = TypeScript.quoteStr(moduleDecl.stringLiteral.valueText()); - var text = moduleDecl.stringLiteral.text(); - - var decl = new TypeScript.NormalPullDecl(valueText, text, kind, declFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleDecl.stringLiteral, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleDecl.stringLiteral); - - if (!moduleElementsHasExportAssignment(moduleDecl.moduleElements) || moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleDecl.stringLiteral, context); + function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) { + var errorLocation = location; + var result; + var lastLocation; + var memberWithInitializerThatReferencesIdentifierFromConstructor; + function returnResolvedSymbol(s) { + if (s && memberWithInitializerThatReferencesIdentifierFromConstructor) { + var propertyName = memberWithInitializerThatReferencesIdentifierFromConstructor.name; + error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.identifierToString(propertyName), nameArg); + return undefined; + } + if (!s && nameNotFoundMessage) { + error(errorLocation, nameNotFoundMessage, nameArg); + } + return s; } - - context.pushParent(decl); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDecl.name); - for (var i = 0, n = moduleNames.length; i < n; i++) { - var moduleName = moduleNames[i]; - - var specificFlags = declFlags; - if (i > 0) { - specificFlags |= 1 /* Exported */; + while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + if (result = getSymbol(location.locals, name, meaning)) { + return returnResolvedSymbol(result); + } } - - var decl = new TypeScript.NormalPullDecl(moduleName.valueText(), moduleName.text(), kind, specificFlags, context.getParent()); - - context.semanticInfoChain.setDeclForAST(moduleDecl, decl); - context.semanticInfoChain.setDeclForAST(moduleName, decl); - context.semanticInfoChain.setASTForDecl(decl, moduleName); - - if (moduleContainsExecutableCode) { - createModuleVariableDecl(decl, moduleName, context); + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) + break; + case 172 /* ModuleDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & ts.SymbolFlags.ModuleMember)) { + return returnResolvedSymbol(result); + } + break; + case 171 /* EnumDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 4 /* EnumMember */)) { + return returnResolvedSymbol(result); + } + break; + case 115 /* Property */: + if (location.parent.kind === 169 /* ClassDeclaration */ && !(location.flags & 64 /* Static */)) { + var ctor = findConstructorDeclaration(location.parent); + if (ctor && ctor.locals) { + if (getSymbol(ctor.locals, name, meaning & ts.SymbolFlags.Value)) { + memberWithInitializerThatReferencesIdentifierFromConstructor = location; + } + } + } + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & ts.SymbolFlags.Type)) { + if (lastLocation && lastLocation.flags & 64 /* Static */) { + error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); + return undefined; + } + else { + return returnResolvedSymbol(result); + } + } + break; + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + if (name === "arguments") { + return returnResolvedSymbol(argumentsSymbol); + } + break; + case 136 /* FunctionExpression */: + if (name === "arguments") { + return returnResolvedSymbol(argumentsSymbol); + } + var id = location.name; + if (id && name === id.text) { + return returnResolvedSymbol(location.symbol); + } + break; + case 163 /* CatchBlock */: + var id = location.variable; + if (name === id.text) { + return returnResolvedSymbol(location.symbol); + } + break; } - - context.pushParent(decl); + lastLocation = location; + location = location.parent; } + if (result = getSymbol(globals, name, meaning)) { + return returnResolvedSymbol(result); + } + return returnResolvedSymbol(undefined); } - } - - function createModuleVariableDecl(decl, moduleNameAST, context) { - decl.setFlags(decl.flags | getInitializationFlag(decl)); - - var valueDecl = new TypeScript.NormalPullDecl(decl.name, decl.getDisplayName(), 512 /* Variable */, decl.flags, context.getParent()); - decl.setValueDecl(valueDecl); - context.semanticInfoChain.setASTForDecl(valueDecl, moduleNameAST); - } - - function containsExecutableCode(members) { - for (var i = 0, n = members.childCount(); i < n; i++) { - var member = members.childAt(i); - - if (member.kind() === 130 /* ModuleDeclaration */) { - var moduleDecl = member; - - if (containsExecutableCode(moduleDecl.moduleElements)) { - return true; + function resolveImport(symbol) { + ts.Debug.assert((symbol.flags & 4194304 /* Import */) !== 0, "Should only get Imports here."); + var links = getSymbolLinks(symbol); + if (!links.target) { + links.target = resolvingSymbol; + var node = getDeclarationOfKind(symbol, 174 /* ImportDeclaration */); + var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : getSymbolOfPartOfRightHandSideOfImport(node.entityName, node); + if (links.target === resolvingSymbol) { + links.target = target || unknownSymbol; } - } else if (member.kind() === 133 /* ImportDeclaration */) { - if (TypeScript.hasModifier(member.modifiers, 1 /* Exported */)) { - return true; + else { + error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); } - } else if (member.kind() !== 128 /* InterfaceDeclaration */ && member.kind() !== 134 /* ExportAssignment */) { - return true; } + else if (links.target === resolvingSymbol) { + links.target = unknownSymbol; + } + return links.target; } - - return false; - } - - function preCollectClassDecls(classDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(classDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(classDecl, context)) && !containingModuleHasExportAssignment(classDecl)) { - declFlags |= 1 /* Exported */; - } - - if (TypeScript.hasModifier(classDecl.modifiers, 8 /* Ambient */) || isParsingAmbientModule(classDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 8 /* Class */, declFlags, parent); - - var constructorDecl = new TypeScript.NormalPullDecl(classDecl.identifier.valueText(), classDecl.identifier.text(), 512 /* Variable */, declFlags | 16384 /* ClassConstructorVariable */, parent); - - decl.setValueDecl(constructorDecl); - - context.semanticInfoChain.setDeclForAST(classDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, classDecl); - context.semanticInfoChain.setASTForDecl(constructorDecl, classDecl); - - context.pushParent(decl); - } - - function preCollectObjectTypeDecls(objectType, context) { - if (objectType.parent.kind() === 128 /* InterfaceDeclaration */) { - return; - } - - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl("", "", 8388608 /* ObjectType */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(objectType, decl); - context.semanticInfoChain.setASTForDecl(decl, objectType); - - context.pushParent(decl); - } - - function preCollectInterfaceDecls(interfaceDecl, context) { - var declFlags = 0 /* None */; - - if ((TypeScript.hasModifier(interfaceDecl.modifiers, 1 /* Exported */) || isParsingAmbientModule(interfaceDecl, context)) && !containingModuleHasExportAssignment(interfaceDecl)) { - declFlags |= 1 /* Exported */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(interfaceDecl.identifier.valueText(), interfaceDecl.identifier.text(), 16 /* Interface */, declFlags, parent); - context.semanticInfoChain.setDeclForAST(interfaceDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, interfaceDecl); - - context.pushParent(decl); - } - - function preCollectParameterDecl(argDecl, context) { - var declFlags = 0 /* None */; - - if (TypeScript.hasModifier(argDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (argDecl.questionToken !== null || argDecl.equalsValueClause !== null || argDecl.dotDotDotToken !== null) { - declFlags |= 128 /* Optional */; - } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; - } - - var decl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - if (argDecl.equalsValueClause) { - parent.flags |= 33554432 /* HasDefaultArgs */; + function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) { + if (!importDeclaration) { + importDeclaration = getAncestor(entityName, 174 /* ImportDeclaration */); + ts.Debug.assert(importDeclaration); + } + if (entityName.kind === 55 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (entityName.kind === 55 /* Identifier */ || entityName.parent.kind === 112 /* QualifiedName */) { + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Namespace); + } + else { + ts.Debug.assert(entityName.parent.kind === 174 /* ImportDeclaration */); + return resolveEntityName(importDeclaration, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace); + } } - - if (parent.kind === 32768 /* ConstructorMethod */) { - decl.setFlag(67108864 /* ConstructorParameter */); + function getFullyQualifiedName(symbol) { + return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); } - - var isPublicOrPrivate = TypeScript.hasModifier(argDecl.modifiers, 4 /* Public */ | 2 /* Private */); - var isInConstructor = parent.kind === 32768 /* ConstructorMethod */; - if (isPublicOrPrivate && isInConstructor) { - var parentsParent = context.parentChain[context.parentChain.length - 2]; - - var propDeclFlags = declFlags & ~128 /* Optional */; - var propDecl = new TypeScript.NormalPullDecl(argDecl.identifier.valueText(), argDecl.identifier.text(), 4096 /* Property */, propDeclFlags, parentsParent); - propDecl.setValueDecl(decl); - decl.setFlag(8388608 /* PropertyParameter */); - propDecl.setFlag(8388608 /* PropertyParameter */); - - if (parent.kind === 32768 /* ConstructorMethod */) { - propDecl.setFlag(67108864 /* ConstructorParameter */); + function resolveEntityName(location, name, meaning) { + if (name.kind === 55 /* Identifier */) { + var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(name)); + if (!symbol) { + return; + } } - - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setASTForDecl(propDecl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, propDecl); - } else { - context.semanticInfoChain.setASTForDecl(decl, argDecl); - context.semanticInfoChain.setDeclForAST(argDecl, decl); + else if (name.kind === 112 /* QualifiedName */) { + var namespace = resolveEntityName(location, name.left, ts.SymbolFlags.Namespace); + if (!namespace || namespace === unknownSymbol || name.right.kind === 111 /* Missing */) + return; + var symbol = getSymbol(namespace.exports, name.right.text, meaning); + if (!symbol) { + error(location, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.identifierToString(name.right)); + return; + } + } + else { + return; + } + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + return symbol.flags & meaning ? symbol : resolveImport(symbol); } - - parent.addVariableDeclToGroup(decl); - } - - function preCollectTypeParameterDecl(typeParameterDecl, context) { - var declFlags = 0 /* None */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function isExternalModuleNameRelative(moduleName) { + return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; } - - var decl = new TypeScript.NormalPullDecl(typeParameterDecl.identifier.valueText(), typeParameterDecl.identifier.text(), 8192 /* TypeParameter */, declFlags, parent); - context.semanticInfoChain.setASTForDecl(decl, typeParameterDecl); - context.semanticInfoChain.setDeclForAST(typeParameterDecl, decl); - } - - function createPropertySignature(propertyDecl, context) { - var declFlags = 4 /* Public */; - var parent = context.getParent(); - var declType = 4096 /* Property */; - - if (propertyDecl.questionToken !== null) { - declFlags |= 128 /* Optional */; + function resolveExternalModuleName(location, moduleLiteral) { + var searchPath = ts.getDirectoryPath(getSourceFile(location).filename); + var moduleName = moduleLiteral.text; + if (!moduleName) + return; + var isRelative = isExternalModuleNameRelative(moduleName); + if (!isRelative) { + var symbol = getSymbol(globals, '"' + moduleName + '"', 128 /* ValueModule */); + if (symbol) { + return getResolvedExportSymbol(symbol); + } + } + while (true) { + var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + var sourceFile = program.getSourceFile(filename + ".ts") || program.getSourceFile(filename + ".d.ts"); + if (sourceFile || isRelative) + break; + var parentPath = ts.getDirectoryPath(searchPath); + if (parentPath === searchPath) + break; + searchPath = parentPath; + } + if (sourceFile) { + if (sourceFile.symbol) { + return getResolvedExportSymbol(sourceFile.symbol); + } + error(moduleLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename); + return; + } + error(moduleLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName); } - - var decl = new TypeScript.NormalPullDecl(propertyDecl.propertyName.valueText(), propertyDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(propertyDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyDecl); - } - - function createMemberVariableDeclaration(memberDecl, context) { - var declFlags = 0 /* None */; - var declType = 4096 /* Property */; - - if (TypeScript.hasModifier(memberDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; + function getResolvedExportSymbol(moduleSymbol) { + var symbol = getExportAssignmentSymbol(moduleSymbol); + if (symbol) { + if (symbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace)) { + return symbol; + } + if (symbol.flags & 4194304 /* Import */) { + return resolveImport(symbol); + } + } + return moduleSymbol; } - - if (TypeScript.hasModifier(memberDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; + function getExportAssignmentSymbol(symbol) { + checkTypeOfExportAssignmentSymbol(symbol); + var symbolLinks = getSymbolLinks(symbol); + return symbolLinks.exportAssignSymbol === unknownSymbol ? undefined : symbolLinks.exportAssignSymbol; } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(memberDecl.variableDeclarator.propertyName.valueText(), memberDecl.variableDeclarator.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(memberDecl, decl); - context.semanticInfoChain.setDeclForAST(memberDecl.variableDeclarator, decl); - context.semanticInfoChain.setASTForDecl(decl, memberDecl); - } - - function createVariableDeclaration(varDecl, context) { - var declFlags = 0 /* None */; - var declType = 512 /* Variable */; - - var modifiers = TypeScript.ASTHelpers.getVariableDeclaratorModifiers(varDecl); - if ((TypeScript.hasModifier(modifiers, 1 /* Exported */) || isParsingAmbientModule(varDecl, context)) && !containingModuleHasExportAssignment(varDecl)) { - declFlags |= 1 /* Exported */; + function checkTypeOfExportAssignmentSymbol(containerSymbol) { + var symbolLinks = getSymbolLinks(containerSymbol); + if (!symbolLinks.exportAssignSymbol) { + var exportInformation = collectExportInformationForSourceFileOrModule(containerSymbol); + if (exportInformation.exportAssignments.length) { + if (exportInformation.exportAssignments.length > 1) { + ts.forEach(exportInformation.exportAssignments, function (node) { return error(node, ts.Diagnostics.A_module_cannot_have_more_than_one_export_assignment); }); + } + var node = exportInformation.exportAssignments[0]; + if (exportInformation.hasExportedMember) { + error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); + } + if (node.exportName.text) { + var meaning = ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace; + var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node.exportName)); + } + } + symbolLinks.exportAssignSymbol = exportSymbol || unknownSymbol; + } } - - if (TypeScript.hasModifier(modifiers, 8 /* Ambient */) || isParsingAmbientModule(varDecl, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; + function collectExportInformationForSourceFileOrModule(symbol) { + var seenExportedMember = false; + var result = []; + ts.forEach(symbol.declarations, function (declaration) { + var block = (declaration.kind === 177 /* SourceFile */ ? declaration : declaration.body); + ts.forEach(block.statements, function (node) { + if (node.kind === 175 /* ExportAssignment */) { + result.push(node); + } + else { + seenExportedMember = seenExportedMember || (node.flags & 1 /* Export */) !== 0; + } + }); + }); + return { + hasExportedMember: seenExportedMember, + exportAssignments: result + }; } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function getMergedSymbol(symbol) { + var merged; + return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; } - - var decl = new TypeScript.NormalPullDecl(varDecl.propertyName.valueText(), varDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(varDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, varDecl); - - if (parent) { - parent.addVariableDeclToGroup(decl); + function getSymbolOfNode(node) { + return getMergedSymbol(node.symbol); } - } - - function preCollectVarDecls(ast, context) { - if (ast.parent.kind() === 136 /* MemberVariableDeclaration */) { - return; + function getParentOfSymbol(symbol) { + return getMergedSymbol(symbol.parent); } - - var varDecl = ast; - createVariableDeclaration(varDecl, context); - } - - function createFunctionTypeDeclaration(functionTypeDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 16777216 /* FunctionType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function getExportSymbolOfValueSymbolIfExported(symbol) { + return symbol && (symbol.flags & 524288 /* ExportValue */) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(functionTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionTypeDeclAST); - - context.pushParent(decl); - } - - function createConstructorTypeDeclaration(constructorTypeDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 33554432 /* ConstructorType */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function symbolIsValue(symbol) { + if (symbol.flags & ts.SymbolFlags.Value) { + return true; + } + if (symbol.flags & 4194304 /* Import */) { + return (resolveImport(symbol).flags & ts.SymbolFlags.Value) !== 0; + } + if (symbol.flags & 8388608 /* Instantiated */) { + return (getSymbolLinks(symbol).target.flags & ts.SymbolFlags.Value) !== 0; + } + return false; } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorTypeDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorTypeDeclAST); - - context.pushParent(decl); - } - - function createFunctionDeclaration(funcDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 16384 /* Function */; - - if ((TypeScript.hasModifier(funcDeclAST.modifiers, 1 /* Exported */) || isParsingAmbientModule(funcDeclAST, context)) && !containingModuleHasExportAssignment(funcDeclAST)) { - declFlags |= 1 /* Exported */; + function getDeclarationOfKind(symbol, kind) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if (declaration.kind === kind) { + return declaration; + } + } + return undefined; } - - if (TypeScript.hasModifier(funcDeclAST.modifiers, 8 /* Ambient */) || isParsingAmbientModule(funcDeclAST, context) || context.isDeclareFile) { - declFlags |= 8 /* Ambient */; + function findConstructorDeclaration(node) { + var members = node.members; + for (var i = 0; i < members.length; i++) { + var member = members[i]; + if (member.kind === 117 /* Constructor */ && member.body) { + return member; + } + } } - - if (!funcDeclAST.block) { - declFlags |= 2048 /* Signature */; + function createType(flags) { + var result = new Type(checker, flags); + result.id = typeCount++; + return result; } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function createIntrinsicType(kind, intrinsicName) { + var type = createType(kind); + type.intrinsicName = intrinsicName; + return type; } - - var decl = new TypeScript.NormalPullDecl(funcDeclAST.identifier.valueText(), funcDeclAST.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDeclAST); - - context.pushParent(decl); - } - - function createAnyFunctionExpressionDeclaration(functionExpressionDeclAST, id, context, displayName) { - if (typeof displayName === "undefined") { displayName = null; } - var declFlags = 0 /* None */; - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */ || functionExpressionDeclAST.kind() === 218 /* ParenthesizedArrowFunctionExpression */) { - declFlags |= 8192 /* ArrowFunction */; + function createObjectType(kind, symbol) { + var type = createType(kind); + type.symbol = symbol; + return type; } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function isReservedMemberName(name) { + return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */; } - - var name = id ? id.text() : ""; - var displayNameText = displayName ? displayName.text() : ""; - var decl = new TypeScript.PullFunctionExpressionDecl(name, declFlags, parent, displayNameText); - context.semanticInfoChain.setDeclForAST(functionExpressionDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, functionExpressionDeclAST); - - context.pushParent(decl); - - if (functionExpressionDeclAST.kind() === 219 /* SimpleArrowFunctionExpression */) { - var simpleArrow = functionExpressionDeclAST; - var declFlags = 4 /* Public */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function getNamedMembers(members) { + var result; + for (var id in members) { + if (ts.hasProperty(members, id)) { + if (!isReservedMemberName(id)) { + if (!result) + result = []; + var symbol = members[id]; + if (symbolIsValue(symbol)) { + result.push(symbol); + } + } + } } - - var decl = new TypeScript.NormalPullDecl(simpleArrow.identifier.valueText(), simpleArrow.identifier.text(), 2048 /* Parameter */, declFlags, parent); - - context.semanticInfoChain.setASTForDecl(decl, simpleArrow.identifier); - context.semanticInfoChain.setDeclForAST(simpleArrow.identifier, decl); - - parent.addVariableDeclToGroup(decl); - } - } - - function createMemberFunctionDeclaration(funcDecl, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - if (TypeScript.hasModifier(funcDecl.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; + return result || emptyArray; } - - if (TypeScript.hasModifier(funcDecl.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; - } - - if (!funcDecl.block) { - declFlags |= 2048 /* Signature */; - } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(funcDecl.propertyName.valueText(), funcDecl.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(funcDecl, decl); - context.semanticInfoChain.setASTForDecl(decl, funcDecl); - - context.pushParent(decl); - } - - function createIndexSignatureDeclaration(indexSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 4194304 /* IndexSignature */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(indexSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, indexSignatureDeclAST); - - context.pushParent(decl); - } - - function createCallSignatureDeclaration(callSignature, context) { - var isChildOfObjectType = callSignature.parent && callSignature.parent.parent && callSignature.parent.kind() === 2 /* SeparatedList */ && callSignature.parent.parent.kind() === 122 /* ObjectType */; - - if (!isChildOfObjectType) { - return; + function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { + type.members = members; + type.properties = getNamedMembers(members); + type.callSignatures = callSignatures; + type.constructSignatures = constructSignatures; + if (stringIndexType) + type.stringIndexType = stringIndexType; + if (numberIndexType) + type.numberIndexType = numberIndexType; + return type; } - - var declFlags = 2048 /* Signature */; - var declType = 1048576 /* CallSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { + return setObjectTypeMembers(createObjectType(8192 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType); } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(callSignature, decl); - context.semanticInfoChain.setASTForDecl(decl, callSignature); - - context.pushParent(decl); - } - - function createMethodSignatureDeclaration(method, context) { - var declFlags = 0 /* None */; - var declType = 65536 /* Method */; - - declFlags |= 4 /* Public */; - declFlags |= 2048 /* Signature */; - - if (method.questionToken !== null) { - declFlags |= 128 /* Optional */; + function isOptionalProperty(propertySymbol) { + if (propertySymbol.flags & 67108864 /* Prototype */) { + return false; + } + return (propertySymbol.valueDeclaration.flags & 4 /* QuestionMark */) && propertySymbol.valueDeclaration.kind !== 114 /* Parameter */; } - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl(method.propertyName.valueText(), method.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(method, decl); - context.semanticInfoChain.setASTForDecl(decl, method); - - context.pushParent(decl); - } - - function createConstructSignatureDeclaration(constructSignatureDeclAST, context) { - var declFlags = 2048 /* Signature */; - var declType = 2097152 /* ConstructSignature */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function forEachSymbolTableInScope(enclosingDeclaration, callback) { + var result; + for (var location = enclosingDeclaration; location; location = location.parent) { + if (location.locals && !isGlobalSourceFile(location)) { + if (result = callback(location.locals)) { + return result; + } + } + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) { + break; + } + case 172 /* ModuleDeclaration */: + if (result = callback(getSymbolOfNode(location).exports)) { + return result; + } + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (result = callback(getSymbolOfNode(location).members)) { + return result; + } + break; + } + } + return callback(globals); } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructSignatureDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructSignatureDeclAST); - - context.pushParent(decl); - } - - function createClassConstructorDeclaration(constructorDeclAST, context) { - var declFlags = 0 /* None */; - var declType = 32768 /* ConstructorMethod */; - - if (!constructorDeclAST.block) { - declFlags |= 2048 /* Signature */; + function getQualifiedLeftMeaning(rightMeaning) { + return rightMeaning === ts.SymbolFlags.Value ? ts.SymbolFlags.Value : ts.SymbolFlags.Namespace; } - - var parent = context.getParent(); - - if (parent) { - var parentFlags = parent.flags; - - if (parentFlags & 1 /* Exported */) { - declFlags |= 1 /* Exported */; + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolChainFromSymbolTable(symbols) { + function canQualifySymbol(symbolFromSymbolTable, meaning) { + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning)); + return !!accessibleParent; + } + function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { + if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { + return !ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); }) && canQualifySymbol(symbolFromSymbolTable, meaning); + } + } + if (isAccessible(ts.lookUp(symbols, symbol.name))) { + return [symbol]; + } + return ts.forEachValue(symbols, function (symbolFromSymbolTable) { + if (symbolFromSymbolTable.flags & 4194304 /* Import */) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); + if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + } + } + }); + } + if (symbol) { + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); } } - - var decl = new TypeScript.NormalPullDecl(parent.name, parent.getDisplayName(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(constructorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, constructorDeclAST); - - context.pushParent(decl); - } - - function createGetAccessorDeclaration(getAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 262144 /* GetAccessor */; - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; + function needsQualification(symbol, enclosingDeclaration, meaning) { + var qualify = false; + forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { + if (!ts.hasProperty(symbolTable, symbol.name)) { + return false; + } + var symbolFromSymbolTable = symbolTable[symbol.name]; + if (symbolFromSymbolTable === symbol) { + return true; + } + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 4194304 /* Import */) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable; + if (symbolFromSymbolTable.flags & meaning) { + qualify = true; + return true; + } + return false; + }); + return qualify; + } + function isSymbolAccessible(symbol, enclosingDeclaration, meaning) { + if (symbol && enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + var initialSymbol = symbol; + var meaningToLook = meaning; + while (symbol) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + if (accessibleSymbolChain) { + var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); + if (!hasAccessibleDeclarations) { + return { + accessibility: 1 /* NotAccessible */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, ts.SymbolFlags.Namespace) : undefined + }; + } + return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasAccessibleDeclarations.aliasesToMakeVisible }; + } + meaningToLook = getQualifiedLeftMeaning(meaning); + symbol = getParentOfSymbol(symbol); + } + var symbolExternalModule = ts.forEach(initialSymbol.declarations, function (declaration) { return getExternalModuleContainer(declaration); }); + if (symbolExternalModule) { + var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); + if (symbolExternalModule !== enclosingExternalModule) { + return { + accessibility: 2 /* CannotBeNamed */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbolToString(symbolExternalModule) + }; + } + } + return { + accessibility: 1 /* NotAccessible */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) + }; + } + return { accessibility: 0 /* Accessible */ }; + function getExternalModuleContainer(declaration) { + for (; declaration; declaration = declaration.parent) { + if (hasExternalModuleSymbol(declaration)) { + return getSymbolOfNode(declaration); + } + } + } } - - if (TypeScript.hasModifier(getAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; + function hasExternalModuleSymbol(declaration) { + return (declaration.kind === 172 /* ModuleDeclaration */ && declaration.name.kind === 3 /* StringLiteral */) || (declaration.kind === 177 /* SourceFile */ && ts.isExternalModule(declaration)); } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function hasVisibleDeclarations(symbol) { + var aliasesToMakeVisible; + if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { + return undefined; + } + return { aliasesToMakeVisible: aliasesToMakeVisible }; + function getIsDeclarationVisible(declaration) { + if (!isDeclarationVisible(declaration)) { + if (declaration.kind === 174 /* ImportDeclaration */ && !(declaration.flags & 1 /* Export */) && isDeclarationVisible(declaration.parent)) { + getNodeLinks(declaration).isVisible = true; + if (aliasesToMakeVisible) { + if (!ts.contains(aliasesToMakeVisible, declaration)) { + aliasesToMakeVisible.push(declaration); + } + } + else { + aliasesToMakeVisible = [declaration]; + } + return true; + } + return false; + } + return true; + } } - - var decl = new TypeScript.NormalPullDecl(getAccessorDeclAST.propertyName.valueText(), getAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(getAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, getAccessorDeclAST); - - context.pushParent(decl); - } - - function createFunctionExpressionDeclaration(expression, context) { - createAnyFunctionExpressionDeclaration(expression, expression.identifier, context); - } - - function createSetAccessorDeclaration(setAccessorDeclAST, context) { - var declFlags = 4 /* Public */; - var declType = 524288 /* SetAccessor */; - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 16 /* Static */)) { - declFlags |= 16 /* Static */; + function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) { + var firstIdentifier = getFirstIdentifier(entityName); + var firstIdentifierName = ts.identifierToString(firstIdentifier); + var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, ts.SymbolFlags.Namespace, ts.Diagnostics.Cannot_find_name_0, firstIdentifierName); + var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); + return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: firstIdentifierName }; } - - if (TypeScript.hasModifier(setAccessorDeclAST.modifiers, 2 /* Private */)) { - declFlags |= 2 /* Private */; - } else { - declFlags |= 4 /* Public */; + function symbolToString(symbol, enclosingDeclaration, meaning) { + function getSymbolName(symbol) { + if (symbol.declarations && symbol.declarations.length > 0) { + var declaration = symbol.declarations[0]; + if (declaration.name) { + return ts.identifierToString(declaration.name); + } + } + return symbol.name; + } + if (enclosingDeclaration && !(symbol.flags & ts.SymbolFlags.PropertyOrAccessor & ts.SymbolFlags.Signature & 4096 /* Constructor */ & 2048 /* Method */ & 262144 /* TypeParameter */)) { + var symbolName; + while (symbol) { + var isFirstName = !symbolName; + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning); + var currentSymbolName; + if (accessibleSymbolChain) { + currentSymbolName = ts.map(accessibleSymbolChain, function (accessibleSymbol) { return getSymbolName(accessibleSymbol); }).join("."); + } + else { + if (!isFirstName && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { + break; + } + currentSymbolName = getSymbolName(symbol); + } + symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); + if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { + break; + } + symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); + meaning = getQualifiedLeftMeaning(meaning); + } + return symbolName; + } + return getSymbolName(symbol); } - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, writer) { + writer.write(symbolToString(symbol, enclosingDeclaration, meaning)); } - - var decl = new TypeScript.NormalPullDecl(setAccessorDeclAST.propertyName.valueText(), setAccessorDeclAST.propertyName.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(setAccessorDeclAST, decl); - context.semanticInfoChain.setASTForDecl(decl, setAccessorDeclAST); - - context.pushParent(decl); - } - - function preCollectCatchDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 268435456 /* CatchBlock */; - - var parent = context.getParent(); - - if (parent && (parent.kind === 134217728 /* WithBlock */ || (parent.flags & 2097152 /* DeclaredInAWithBlock */))) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function createSingleLineTextWriter() { + var result = ""; + return { + write: function (s) { + result += s; + }, + writeSymbol: function (symbol, enclosingDeclaration, meaning) { + writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, this); + }, + writeLine: function () { + result += " "; + }, + increaseIndent: function () { + }, + decreaseIndent: function () { + }, + getText: function () { + return result; + } + }; } - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - - var declFlags = 0 /* None */; - var declType = 1024 /* CatchVariable */; - - var parent = context.getParent(); - - if (TypeScript.hasFlag(parent.flags, 2097152 /* DeclaredInAWithBlock */)) { - declFlags |= 2097152 /* DeclaredInAWithBlock */; + function typeToString(type, enclosingDeclaration, flags) { + var stringWriter = createSingleLineTextWriter(); + writeTypeToTextWriter(type, enclosingDeclaration, flags, stringWriter); + return stringWriter.getText(); } - - var decl = new TypeScript.NormalPullDecl(ast.identifier.valueText(), ast.identifier.text(), declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast.identifier, decl); - context.semanticInfoChain.setASTForDecl(decl, ast.identifier); - - if (parent) { - parent.addVariableDeclToGroup(decl); + function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { + var typeStack; + return writeType(type, true); + function writeType(type, allowFunctionOrConstructorTypeLiteral) { + if (type.flags & ts.TypeFlags.Intrinsic) { + writer.write(type.intrinsicName); + } + else if (type.flags & 4096 /* Reference */) { + writeTypeReference(type); + } + else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { + writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Type); + } + else if (type.flags & 8192 /* Anonymous */) { + writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral); + } + else if (type.flags & 256 /* StringLiteral */) { + writer.write(type.text); + } + else { + writer.write("{ ... }"); + } + } + function writeTypeReference(type) { + if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { + writeType(type.typeArguments[0], false); + writer.write("[]"); + } + else { + writer.writeSymbol(type.target.symbol, enclosingDeclaration, ts.SymbolFlags.Type); + writer.write("<"); + for (var i = 0; i < type.typeArguments.length; i++) { + if (i > 0) { + writer.write(", "); + } + writeType(type.typeArguments[i], true); + } + writer.write(">"); + } + } + function writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral) { + if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { + writeTypeofSymbol(type); + } + else if (shouldWriteTypeOfFunctionSymbol()) { + writeTypeofSymbol(type); + } + else if (typeStack && ts.contains(typeStack, type)) { + writer.write("any"); + } + else { + if (!typeStack) { + typeStack = []; + } + typeStack.push(type); + writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); + typeStack.pop(); + } + function shouldWriteTypeOfFunctionSymbol() { + if (type.symbol) { + var isStaticMethodSymbol = !!(type.symbol.flags & 2048 /* Method */ && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 64 /* Static */; })); + var isNonLocalFunctionSymbol = !!(type.symbol.flags & 8 /* Function */) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 177 /* SourceFile */ || declaration.parent.kind === 173 /* ModuleBlock */; })); + if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { + return !!(flags & 2 /* UseTypeOfFunction */) || (typeStack && ts.contains(typeStack, type)); + } + } + } + } + function writeTypeofSymbol(type) { + writer.write("typeof "); + writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Value); + } + function writeLiteralType(type, allowFunctionOrConstructorTypeLiteral) { + var resolved = resolveObjectTypeMembers(type); + if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { + if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { + writer.write("{}"); + return; + } + if (allowFunctionOrConstructorTypeLiteral) { + if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { + writeSignature(resolved.callSignatures[0], true); + return; + } + if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { + writer.write("new "); + writeSignature(resolved.constructSignatures[0], true); + return; + } + } + } + writer.write("{"); + writer.writeLine(); + writer.increaseIndent(); + for (var i = 0; i < resolved.callSignatures.length; i++) { + writeSignature(resolved.callSignatures[i]); + writer.write(";"); + writer.writeLine(); + } + for (var i = 0; i < resolved.constructSignatures.length; i++) { + writer.write("new "); + writeSignature(resolved.constructSignatures[i]); + writer.write(";"); + writer.writeLine(); + } + if (resolved.stringIndexType) { + writer.write("[x: string]: "); + writeType(resolved.stringIndexType, true); + writer.write(";"); + writer.writeLine(); + } + if (resolved.numberIndexType) { + writer.write("[x: number]: "); + writeType(resolved.numberIndexType, true); + writer.write(";"); + writer.writeLine(); + } + for (var i = 0; i < resolved.properties.length; i++) { + var p = resolved.properties[i]; + var t = getTypeOfSymbol(p); + if (p.flags & (8 /* Function */ | 2048 /* Method */) && !getPropertiesOfType(t).length) { + var signatures = getSignaturesOfType(t, 0 /* Call */); + for (var j = 0; j < signatures.length; j++) { + writer.writeSymbol(p); + if (isOptionalProperty(p)) { + writer.write("?"); + } + writeSignature(signatures[j]); + writer.write(";"); + writer.writeLine(); + } + } + else { + writer.writeSymbol(p); + if (isOptionalProperty(p)) { + writer.write("?"); + } + writer.write(": "); + writeType(t, true); + writer.write(";"); + writer.writeLine(); + } + } + writer.decreaseIndent(); + writer.write("}"); + } + function writeSignature(signature, arrowStyle) { + if (signature.typeParameters) { + writer.write("<"); + for (var i = 0; i < signature.typeParameters.length; i++) { + if (i > 0) { + writer.write(", "); + } + var tp = signature.typeParameters[i]; + writer.writeSymbol(tp.symbol); + var constraint = getConstraintOfTypeParameter(tp); + if (constraint) { + writer.write(" extends "); + writeType(constraint, true); + } + } + writer.write(">"); + } + writer.write("("); + for (var i = 0; i < signature.parameters.length; i++) { + if (i > 0) { + writer.write(", "); + } + var p = signature.parameters[i]; + if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { + writer.write("..."); + } + writer.writeSymbol(p); + if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { + writer.write("?"); + } + writer.write(": "); + writeType(getTypeOfSymbol(p), true); + } + writer.write(arrowStyle ? ") => " : "): "); + writeType(getReturnTypeOfSignature(signature), true); + } } - } - - function preCollectWithDecls(ast, context) { - var declFlags = 0 /* None */; - var declType = 134217728 /* WithBlock */; - - var parent = context.getParent(); - - var decl = new TypeScript.NormalPullDecl("", "", declType, declFlags, parent); - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectObjectLiteralDecls(ast, context) { - var decl = new TypeScript.NormalPullDecl("", "", 256 /* ObjectLiteral */, 0 /* None */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(ast, decl); - context.semanticInfoChain.setASTForDecl(decl, ast); - - context.pushParent(decl); - } - - function preCollectSimplePropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - var span = TypeScript.TextSpan.fromBounds(propertyAssignment.start(), propertyAssignment.end()); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - } - - function preCollectFunctionPropertyAssignmentDecls(propertyAssignment, context) { - var assignmentText = TypeScript.getPropertyAssignmentNameTextFromIdentifier(propertyAssignment.propertyName); - - var decl = new TypeScript.NormalPullDecl(assignmentText.memberName, assignmentText.actualText, 4096 /* Property */, 4 /* Public */, context.getParent()); - - context.semanticInfoChain.setDeclForAST(propertyAssignment, decl); - context.semanticInfoChain.setASTForDecl(decl, propertyAssignment); - - createAnyFunctionExpressionDeclaration(propertyAssignment, propertyAssignment.propertyName, context, propertyAssignment.propertyName); - } - - function preCollectDecls(ast, context) { - switch (ast.kind()) { - case 120 /* SourceUnit */: - preCollectScriptDecls(ast, context); - break; - case 132 /* EnumDeclaration */: - preCollectEnumDecls(ast, context); - break; - case 243 /* EnumElement */: - createEnumElementDecls(ast, context); - break; - case 130 /* ModuleDeclaration */: - preCollectModuleDecls(ast, context); - break; - case 131 /* ClassDeclaration */: - preCollectClassDecls(ast, context); - break; - case 128 /* InterfaceDeclaration */: - preCollectInterfaceDecls(ast, context); - break; - case 122 /* ObjectType */: - preCollectObjectTypeDecls(ast, context); - break; - case 242 /* Parameter */: - preCollectParameterDecl(ast, context); - break; - case 136 /* MemberVariableDeclaration */: - createMemberVariableDeclaration(ast, context); - break; - case 141 /* PropertySignature */: - createPropertySignature(ast, context); - break; - case 225 /* VariableDeclarator */: - preCollectVarDecls(ast, context); - break; - case 137 /* ConstructorDeclaration */: - createClassConstructorDeclaration(ast, context); - break; - case 139 /* GetAccessor */: - createGetAccessorDeclaration(ast, context); - break; - case 140 /* SetAccessor */: - createSetAccessorDeclaration(ast, context); - break; - case 222 /* FunctionExpression */: - createFunctionExpressionDeclaration(ast, context); - break; - case 135 /* MemberFunctionDeclaration */: - createMemberFunctionDeclaration(ast, context); - break; - case 144 /* IndexSignature */: - createIndexSignatureDeclaration(ast, context); - break; - case 123 /* FunctionType */: - createFunctionTypeDeclaration(ast, context); - break; - case 125 /* ConstructorType */: - createConstructorTypeDeclaration(ast, context); - break; - case 142 /* CallSignature */: - createCallSignatureDeclaration(ast, context); - break; - case 143 /* ConstructSignature */: - createConstructSignatureDeclaration(ast, context); - break; - case 145 /* MethodSignature */: - createMethodSignatureDeclaration(ast, context); - break; - case 129 /* FunctionDeclaration */: - createFunctionDeclaration(ast, context); - break; - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - createAnyFunctionExpressionDeclaration(ast, null, context); - break; - case 133 /* ImportDeclaration */: - preCollectImportDecls(ast, context); - break; - case 238 /* TypeParameter */: - preCollectTypeParameterDecl(ast, context); - break; - case 236 /* CatchClause */: - preCollectCatchDecls(ast, context); - break; - case 163 /* WithStatement */: - preCollectWithDecls(ast, context); - break; - case 215 /* ObjectLiteralExpression */: - preCollectObjectLiteralDecls(ast, context); - break; - case 240 /* SimplePropertyAssignment */: - preCollectSimplePropertyAssignmentDecls(ast, context); - break; - case 241 /* FunctionPropertyAssignment */: - preCollectFunctionPropertyAssignmentDecls(ast, context); - break; + function isDeclarationVisible(node) { + function getContainingExternalModule(node) { + for (; node; node = node.parent) { + if (node.kind === 172 /* ModuleDeclaration */) { + if (node.name.kind === 3 /* StringLiteral */) { + return node; + } + } + else if (node.kind === 177 /* SourceFile */) { + return ts.isExternalModule(node) ? node : undefined; + } + } + ts.Debug.fail("getContainingModule cant reach here"); + } + function isUsedInExportAssignment(node) { + var externalModule = getContainingExternalModule(node); + if (externalModule) { + var externalModuleSymbol = getSymbolOfNode(externalModule); + var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol); + var resolvedExportSymbol; + var symbolOfNode = getSymbolOfNode(node); + if (isSymbolUsedInExportAssignment(symbolOfNode)) { + return true; + } + if (symbolOfNode.flags & 4194304 /* Import */) { + return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode)); + } + } + function isSymbolUsedInExportAssignment(symbol) { + if (exportAssignmentSymbol === symbol) { + return true; + } + if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 4194304 /* Import */)) { + resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol); + if (resolvedExportSymbol === symbol) { + return true; + } + return ts.forEach(resolvedExportSymbol.declarations, function (declaration) { + while (declaration) { + if (declaration === node) { + return true; + } + declaration = declaration.parent; + } + }); + } + } + } + function determineIfDeclarationIsVisible() { + switch (node.kind) { + case 166 /* VariableDeclaration */: + case 172 /* ModuleDeclaration */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 167 /* FunctionDeclaration */: + case 171 /* EnumDeclaration */: + case 174 /* ImportDeclaration */: + var parent = node.kind === 166 /* VariableDeclaration */ ? node.parent.parent : node.parent; + if (!(node.flags & 1 /* Export */) && !(node.kind !== 174 /* ImportDeclaration */ && parent.kind !== 177 /* SourceFile */ && ts.isInAmbientContext(parent))) { + return isGlobalSourceFile(parent) || isUsedInExportAssignment(node); + } + return isDeclarationVisible(parent); + case 115 /* Property */: + case 116 /* Method */: + if (node.flags & 32 /* Private */) { + return false; + } + case 117 /* Constructor */: + case 121 /* ConstructSignature */: + case 120 /* CallSignature */: + case 122 /* IndexSignature */: + case 114 /* Parameter */: + case 173 /* ModuleBlock */: + return isDeclarationVisible(node.parent); + case 177 /* SourceFile */: + return true; + default: + ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + ts.SyntaxKind[node.kind]); + } + } + if (node) { + var links = getNodeLinks(node); + if (links.isVisible === undefined) { + links.isVisible = !!determineIfDeclarationIsVisible(); + } + return links.isVisible; + } } - } - - function isContainer(decl) { - return decl.kind === 4 /* Container */ || decl.kind === 32 /* DynamicModule */ || decl.kind === 64 /* Enum */; - } - - function getInitializationFlag(decl) { - if (decl.kind & 4 /* Container */) { - return 32768 /* InitializedModule */; - } else if (decl.kind & 32 /* DynamicModule */) { - return 65536 /* InitializedDynamicModule */; + function getApparentType(type) { + if (type.flags & 512 /* TypeParameter */) { + do { + type = getConstraintOfTypeParameter(type); + } while (type && type.flags & 512 /* TypeParameter */); + if (!type) + type = emptyObjectType; + } + if (type.flags & ts.TypeFlags.StringLike) { + type = globalStringType; + } + else if (type.flags & ts.TypeFlags.NumberLike) { + type = globalNumberType; + } + else if (type.flags & 8 /* Boolean */) { + type = globalBooleanType; + } + return type; } - - return 0 /* None */; - } - - function hasInitializationFlag(decl) { - var kind = decl.kind; - - if (kind & 4 /* Container */) { - return (decl.flags & 32768 /* InitializedModule */) !== 0; - } else if (kind & 32 /* DynamicModule */) { - return (decl.flags & 65536 /* InitializedDynamicModule */) !== 0; + function getTypeOfPrototypeProperty(prototype) { + var classType = getDeclaredTypeOfSymbol(prototype.parent); + return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; } - - return false; - } - - function postCollectDecls(ast, context) { - var currentDecl = context.getParent(); - - if (ast.kind() === 11 /* IdentifierName */ || ast.kind() === 14 /* StringLiteral */) { - if (currentDecl.kind === 4 /* Container */ || currentDecl.kind === 32 /* DynamicModule */) { - return; + function getTypeOfVariableDeclaration(declaration) { + if (declaration.parent.kind === 151 /* ForInStatement */) { + return anyType; + } + if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.kind === 114 /* Parameter */) { + var func = declaration.parent; + if (func.kind === 119 /* SetAccessor */) { + var getter = getDeclarationOfKind(declaration.parent.symbol, 118 /* GetAccessor */); + if (getter) { + return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + } + } + var type = getContextuallyTypedParameterType(declaration); + if (type) { + return type; + } + } + if (declaration.initializer) { + var unwidenedType = checkAndMarkExpression(declaration.initializer); + var type = getWidenedType(unwidenedType); + if (type !== unwidenedType) { + checkImplicitAny(type); + } + return type; + } + var type = declaration.flags & 8 /* Rest */ ? createArrayType(anyType) : anyType; + checkImplicitAny(type); + return type; + function checkImplicitAny(type) { + if (!fullTypeCheck || !program.getCompilerOptions().noImplicitAny) { + return; + } + if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { + return; + } + if (isPrivateWithinAmbient(declaration) || (declaration.kind === 114 /* Parameter */ && isPrivateWithinAmbient(declaration.parent))) { + return; + } + switch (declaration.kind) { + case 115 /* Property */: + var diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; + break; + case 114 /* Parameter */: + var diagnostic = declaration.flags & 8 /* Rest */ ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; + break; + default: + var diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type; + } + error(declaration, diagnostic, ts.identifierToString(declaration.name), typeToString(type)); } } - - if (ast.kind() === 130 /* ModuleDeclaration */) { - var moduleDeclaration = ast; - if (moduleDeclaration.stringLiteral) { - TypeScript.Debug.assert(currentDecl.ast() === moduleDeclaration.stringLiteral); - context.popParent(); - } else { - var moduleNames = TypeScript.ASTHelpers.getModuleNames(moduleDeclaration.name); - for (var i = moduleNames.length - 1; i >= 0; i--) { - var moduleName = moduleNames[i]; - TypeScript.Debug.assert(currentDecl.ast() === moduleName); - context.popParent(); - currentDecl = context.getParent(); + function getTypeOfVariableOrParameterOrProperty(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + if (symbol.flags & 67108864 /* Prototype */) { + return links.type = getTypeOfPrototypeProperty(symbol); + } + var declaration = symbol.valueDeclaration; + if (declaration.kind === 163 /* CatchBlock */) { + return links.type = anyType; } + links.type = resolvingType; + var type = getTypeOfVariableDeclaration(declaration); + if (links.type === resolvingType) { + links.type = type; + } + } + else if (links.type === resolvingType) { + links.type = anyType; } + return links.type; } - - if (ast.kind() === 132 /* EnumDeclaration */) { - computeEnumElementConstantValues(ast, currentDecl, context); + function getSetAccessorTypeAnnotationNode(accessor) { + return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; } - - while (currentDecl.getParentDecl() && currentDecl.ast() === ast) { - context.popParent(); - currentDecl = context.getParent(); + function getAnnotatedAccessorType(accessor) { + if (accessor) { + if (accessor.kind === 118 /* GetAccessor */) { + return accessor.type && getTypeFromTypeNode(accessor.type); + } + else { + var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor); + return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); + } + } + return undefined; } - } - - function computeEnumElementConstantValues(ast, enumDecl, context) { - TypeScript.Debug.assert(enumDecl.kind === 64 /* Enum */); - - var isAmbientEnum = TypeScript.hasFlag(enumDecl.flags, 8 /* Ambient */); - var inConstantSection = !isAmbientEnum; - var currentConstantValue = 0; - var enumMemberDecls = enumDecl.getChildDecls(); - - for (var i = 0, n = ast.enumElements.nonSeparatorCount(); i < n; i++) { - var enumElement = ast.enumElements.nonSeparatorAt(i); - var enumElementDecl = TypeScript.ArrayUtilities.first(enumMemberDecls, function (d) { - return context.semanticInfoChain.getASTForDecl(d) === enumElement; - }); - - TypeScript.Debug.assert(enumElementDecl.kind === 67108864 /* EnumMember */); - - if (enumElement.equalsValueClause === null) { - if (inConstantSection) { - enumElementDecl.constantValue = currentConstantValue; - currentConstantValue++; + function getTypeOfAccessors(symbol) { + var links = getSymbolLinks(symbol); + checkAndStoreTypeOfAccessors(symbol, links); + return links.type; + } + function checkAndStoreTypeOfAccessors(symbol, links) { + links = links || getSymbolLinks(symbol); + if (!links.type) { + links.type = resolvingType; + var getter = getDeclarationOfKind(symbol, 118 /* GetAccessor */); + var setter = getDeclarationOfKind(symbol, 119 /* SetAccessor */); + var type; + var getterReturnType = getAnnotatedAccessorType(getter); + if (getterReturnType) { + type = getterReturnType; + } + else { + var setterParameterType = getAnnotatedAccessorType(setter); + if (setterParameterType) { + type = setterParameterType; + } + else { + if (getter) { + type = getReturnTypeFromBody(getter); + } + else { + if (program.getCompilerOptions().noImplicitAny) { + error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbol.name); + } + type = anyType; + } + } } - } else { - enumElementDecl.constantValue = computeEnumElementConstantValue(enumElement.equalsValueClause.value, enumMemberDecls, context); - if (enumElementDecl.constantValue !== null && !isAmbientEnum) { - inConstantSection = true; - currentConstantValue = enumElementDecl.constantValue + 1; - } else { - inConstantSection = false; + if (links.type === resolvingType) { + links.type = type; } } - - TypeScript.Debug.assert(enumElementDecl.constantValue !== undefined); + else if (links.type === resolvingType) { + links.type = anyType; + } } - } - - function computeEnumElementConstantValue(expression, enumMemberDecls, context) { - TypeScript.Debug.assert(expression); - - if (TypeScript.ASTHelpers.isIntegerLiteralAST(expression)) { - var token; - switch (expression.kind()) { - case 164 /* PlusExpression */: - case 165 /* NegateExpression */: - token = expression.operand; - break; - default: - token = expression; + function getTypeOfFuncClassEnumModule(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + var type = links.type = createObjectType(8192 /* Anonymous */, symbol); } - - var value = token.value(); - return value && expression.kind() === 165 /* NegateExpression */ ? -value : value; - } else if (context.propagateEnumConstants) { - switch (expression.kind()) { - case 11 /* IdentifierName */: - var name = expression; - var matchingEnumElement = TypeScript.ArrayUtilities.firstOrDefault(enumMemberDecls, function (d) { - return d.name === name.valueText(); - }); - - return matchingEnumElement ? matchingEnumElement.constantValue : null; - - case 202 /* LeftShiftExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left << right; - - case 189 /* BitwiseOrExpression */: - var binaryExpression = expression; - var left = computeEnumElementConstantValue(binaryExpression.left, enumMemberDecls, context); - var right = computeEnumElementConstantValue(binaryExpression.right, enumMemberDecls, context); - if (left === null || right === null) { - return null; - } - - return left | right; + return links.type; + } + function getTypeOfEnumMember(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); } - - return null; - } else { - return null; + return links.type; } - } - - (function (DeclarationCreator) { - function create(document, semanticInfoChain, compilationSettings) { - var declCollectionContext = new DeclCollectionContext(document, semanticInfoChain, compilationSettings.propagateEnumConstants()); - - TypeScript.getAstWalkerFactory().simpleWalk(document.sourceUnit(), preCollectDecls, postCollectDecls, declCollectionContext); - - return declCollectionContext.getParent(); + function getTypeOfImport(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = getTypeOfSymbol(resolveImport(symbol)); + } + return links.type; } - DeclarationCreator.create = create; - })(TypeScript.DeclarationCreator || (TypeScript.DeclarationCreator = {})); - var DeclarationCreator = TypeScript.DeclarationCreator; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var PullSymbolBinder = (function () { - function PullSymbolBinder(semanticInfoChain) { - this.semanticInfoChain = semanticInfoChain; - this.declsBeingBound = []; - this.inBindingOtherDeclsWalker = new TypeScript.PullHelpers.OtherPullDeclsWalker(); - } - PullSymbolBinder.prototype.getParent = function (decl, returnInstanceType) { - if (typeof returnInstanceType === "undefined") { returnInstanceType = false; } - var parentDecl = decl.getParentDecl(); - - if (parentDecl.kind === 1 /* Script */) { - return null; + function getTypeOfInstantiatedSymbol(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper); } - - var parent = parentDecl.getSymbol(); - - if (!parent && parentDecl && !parentDecl.hasBeenBound()) { - this.bindDeclToPullSymbol(parentDecl); + return links.type; + } + function getTypeOfSymbol(symbol) { + if (symbol.flags & (1 /* Variable */ | 2 /* Property */)) { + return getTypeOfVariableOrParameterOrProperty(symbol); } - - parent = parentDecl.getSymbol(); - if (parent) { - var parentDeclKind = parentDecl.kind; - if (parentDeclKind === 262144 /* GetAccessor */) { - parent = parent.getGetter(); - } else if (parentDeclKind === 524288 /* SetAccessor */) { - parent = parent.getSetter(); - } + if (symbol.flags & (8 /* Function */ | 2048 /* Method */ | 16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { + return getTypeOfFuncClassEnumModule(symbol); } - - if (parent) { - if (returnInstanceType && parent.isType() && parent.isContainer()) { - var instanceSymbol = parent.getInstanceSymbol(); - - if (instanceSymbol) { - return instanceSymbol.type; - } - } - - return parent.type; + if (symbol.flags & 4 /* EnumMember */) { + return getTypeOfEnumMember(symbol); } - - return null; - }; - - PullSymbolBinder.prototype.findDeclsInContext = function (startingDecl, declKind, searchGlobally) { - if (!searchGlobally) { - var parentDecl = startingDecl.getParentDecl(); - return parentDecl.searchChildDecls(startingDecl.name, declKind); + if (symbol.flags & ts.SymbolFlags.Accessor) { + return getTypeOfAccessors(symbol); } - - var contextSymbolPath = startingDecl.getParentPath(); - - if (contextSymbolPath.length) { - var copyOfContextSymbolPath = []; - - for (var i = 0; i < contextSymbolPath.length; i++) { - if (contextSymbolPath[i].kind & 1 /* Script */) { - continue; + if (symbol.flags & 4194304 /* Import */) { + return getTypeOfImport(symbol); + } + if (symbol.flags & 8388608 /* Instantiated */) { + return getTypeOfInstantiatedSymbol(symbol); + } + return unknownType; + } + function getTargetType(type) { + return type.flags & 4096 /* Reference */ ? type.target : type; + } + function hasBaseType(type, checkBase) { + return check(type); + function check(type) { + var target = getTargetType(type); + return target === checkBase || ts.forEach(target.baseTypes, check); + } + } + function getTypeParametersOfClassOrInterface(symbol) { + var result; + ts.forEach(symbol.declarations, function (node) { + if (node.kind === 170 /* InterfaceDeclaration */ || node.kind === 169 /* ClassDeclaration */) { + var declaration = node; + if (declaration.typeParameters && declaration.typeParameters.length) { + ts.forEach(declaration.typeParameters, function (node) { + var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node)); + if (!result) { + result = [tp]; + } + else if (!ts.contains(result, tp)) { + result.push(tp); + } + }); } - copyOfContextSymbolPath[copyOfContextSymbolPath.length] = contextSymbolPath[i].name; } - - return this.semanticInfoChain.findDecls(copyOfContextSymbolPath, declKind); - } - }; - - PullSymbolBinder.prototype.getExistingSymbol = function (decl, searchKind, parent) { - var lookingForValue = (searchKind & 68147712 /* SomeValue */) !== 0; - var lookingForType = (searchKind & 58728795 /* SomeType */) !== 0; - var lookingForContainer = (searchKind & 164 /* SomeContainer */) !== 0; - var name = decl.name; - if (parent) { - var isExported = (decl.flags & 1 /* Exported */) !== 0; - - var prevSymbol = null; - if (lookingForValue) { - prevSymbol = parent.findContainedNonMember(name); - } else if (lookingForType) { - prevSymbol = parent.findContainedNonMemberType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findContainedNonMemberContainer(name, searchKind); - } - var prevIsExported = !prevSymbol; - if (!prevSymbol) { - if (lookingForValue) { - prevSymbol = parent.findMember(name, false); - } else if (lookingForType) { - prevSymbol = parent.findNestedType(name, searchKind); - } else if (lookingForContainer) { - prevSymbol = parent.findNestedContainer(name, searchKind); + }); + return result; + } + function getDeclaredTypeOfClass(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = links.declaredType = createObjectType(1024 /* Class */, symbol); + var typeParameters = getTypeParametersOfClassOrInterface(symbol); + if (typeParameters) { + type.flags |= 4096 /* Reference */; + type.typeParameters = typeParameters; + type.instantiations = {}; + type.instantiations[getTypeListId(type.typeParameters)] = type; + type.target = type; + type.typeArguments = type.typeParameters; + } + type.baseTypes = []; + var declaration = getDeclarationOfKind(symbol, 169 /* ClassDeclaration */); + if (declaration.baseType) { + var baseType = getTypeFromTypeReferenceNode(declaration.baseType); + if (baseType !== unknownType) { + if (getTargetType(baseType).flags & 1024 /* Class */) { + if (type !== baseType && !hasBaseType(baseType, type)) { + type.baseTypes.push(baseType); + } + else { + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + } + } + else { + error(declaration.baseType, ts.Diagnostics.A_class_may_only_extend_another_class); + } } } - - if (isExported && prevIsExported) { - return prevSymbol; - } - if (prevSymbol) { - var prevDecls = prevSymbol.getDeclarations(); - var lastPrevDecl = prevDecls[prevDecls.length - 1]; - var parentDecl = decl.getParentDecl(); - var prevParentDecl = lastPrevDecl && lastPrevDecl.getParentDecl(); - if (parentDecl !== prevParentDecl) { - return null; + type.declaredProperties = getNamedMembers(symbol.members); + type.declaredCallSignatures = emptyArray; + type.declaredConstructSignatures = emptyArray; + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + } + return links.declaredType; + } + function getDeclaredTypeOfInterface(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = links.declaredType = createObjectType(2048 /* Interface */, symbol); + var typeParameters = getTypeParametersOfClassOrInterface(symbol); + if (typeParameters) { + type.flags |= 4096 /* Reference */; + type.typeParameters = typeParameters; + type.instantiations = {}; + type.instantiations[getTypeListId(type.typeParameters)] = type; + type.target = type; + type.typeArguments = type.typeParameters; + } + type.baseTypes = []; + ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 170 /* InterfaceDeclaration */ && declaration.baseTypes) { + ts.forEach(declaration.baseTypes, function (node) { + var baseType = getTypeFromTypeReferenceNode(node); + if (baseType !== unknownType) { + if (getTargetType(baseType).flags & (1024 /* Class */ | 2048 /* Interface */)) { + if (type !== baseType && !hasBaseType(baseType, type)) { + type.baseTypes.push(baseType); + } + else { + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + } + } + else { + error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); + } + } + }); } - - return prevSymbol; + }); + type.declaredProperties = getNamedMembers(symbol.members); + type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); + type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + } + return links.declaredType; + } + function getDeclaredTypeOfEnum(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(128 /* Enum */); + type.symbol = symbol; + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfTypeParameter(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(512 /* TypeParameter */); + type.symbol = symbol; + if (!getDeclarationOfKind(symbol, 113 /* TypeParameter */).constraint) { + type.constraint = noConstraintType; } - } else { - var parentDecl = decl.getParentDecl(); - if (parentDecl && parentDecl.kind === 1 /* Script */) { - return this.semanticInfoChain.findTopLevelSymbol(name, searchKind, decl); - } else { - var prevDecls = parentDecl && parentDecl.searchChildDecls(name, searchKind); - return prevDecls[0] && prevDecls[0].getSymbol(); + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfImport(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + links.declaredType = getDeclaredTypeOfSymbol(resolveImport(symbol)); + } + return links.declaredType; + } + function getDeclaredTypeOfSymbol(symbol) { + if (symbol.flags & 16 /* Class */) { + return getDeclaredTypeOfClass(symbol); + } + if (symbol.flags & 32 /* Interface */) { + return getDeclaredTypeOfInterface(symbol); + } + if (symbol.flags & 64 /* Enum */) { + return getDeclaredTypeOfEnum(symbol); + } + if (symbol.flags & 262144 /* TypeParameter */) { + return getDeclaredTypeOfTypeParameter(symbol); + } + if (symbol.flags & 4194304 /* Import */) { + return getDeclaredTypeOfImport(symbol); + } + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0); + return unknownType; + } + function createSymbolTable(symbols) { + var result = {}; + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + result[symbol.name] = symbol; + } + return result; + } + function createInstantiatedSymbolTable(symbols, mapper) { + var result = {}; + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + result[symbol.name] = instantiateSymbol(symbol, mapper); + } + return result; + } + function addInheritedMembers(symbols, baseSymbols) { + for (var i = 0; i < baseSymbols.length; i++) { + var s = baseSymbols[i]; + if (!ts.hasProperty(symbols, s.name)) { + symbols[s.name] = s; } } - - return null; - }; - - PullSymbolBinder.prototype.checkThatExportsMatch = function (decl, prevSymbol, reportError) { - if (typeof reportError === "undefined") { reportError = true; } - var isExported = (decl.flags & 1 /* Exported */) !== 0; - var prevDecls = prevSymbol.getDeclarations(); - var prevIsExported = (prevDecls[prevDecls.length - 1].flags & 1 /* Exported */) !== 0; - if ((isExported !== prevIsExported) && !prevSymbol.isSignature() && (decl.kind & 7340032 /* SomeSignature */) === 0) { - if (reportError) { - var ast = this.semanticInfoChain.getASTForDecl(decl); - this.semanticInfoChain.addDiagnosticFromAST(ast, TypeScript.DiagnosticCode.All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported, [decl.getDisplayName()]); + } + function addInheritedSignatures(signatures, baseSignatures) { + if (baseSignatures) { + for (var i = 0; i < baseSignatures.length; i++) { + signatures.push(baseSignatures[i]); } - return false; } - - return true; - }; - - PullSymbolBinder.prototype.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList = function (signature, currentSignatures) { - var signatureDecl = signature.getDeclarations()[0]; - TypeScript.Debug.assert(signatureDecl); - var enclosingDecl = signatureDecl.getParentDecl(); - var indexToInsert = TypeScript.ArrayUtilities.indexOf(currentSignatures, function (someSignature) { - return someSignature.getDeclarations()[0].getParentDecl() !== enclosingDecl; + } + function resolveClassOrInterfaceMembers(type) { + var members = type.symbol.members; + var callSignatures = type.declaredCallSignatures; + var constructSignatures = type.declaredConstructSignatures; + var stringIndexType = type.declaredStringIndexType; + var numberIndexType = type.declaredNumberIndexType; + if (type.baseTypes.length) { + members = createSymbolTable(type.declaredProperties); + ts.forEach(type.baseTypes, function (baseType) { + addInheritedMembers(members, getPropertiesOfType(baseType)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0 /* Call */)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1 /* Construct */)); + stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0 /* String */); + numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1 /* Number */); + }); + } + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + function resolveTypeReferenceMembers(type) { + var target = type.target; + var mapper = createTypeMapper(target.typeParameters, type.typeArguments); + var members = createInstantiatedSymbolTable(target.declaredProperties, mapper); + var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature); + var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature); + var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined; + var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined; + ts.forEach(target.baseTypes, function (baseType) { + var instantiatedBaseType = instantiateType(baseType, mapper); + addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); + stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0 /* String */); + numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1 /* Number */); }); - return indexToInsert < 0 ? currentSignatures.length : indexToInsert; - }; - - PullSymbolBinder.prototype.bindEnumDeclarationToPullSymbol = function (enumContainerDecl) { - var enumName = enumContainerDecl.name; - - var enumContainerSymbol = null; - var enumInstanceSymbol = null; - var moduleInstanceTypeSymbol = null; - - var enumInstanceDecl = enumContainerDecl.getValueDecl(); - - var enumDeclKind = enumContainerDecl.kind; - - var parent = this.getParent(enumContainerDecl); - var parentInstanceSymbol = this.getParent(enumContainerDecl, true); - var parentDecl = enumContainerDecl.getParentDecl(); - var enumAST = this.semanticInfoChain.getASTForDecl(enumContainerDecl); - - var isExported = enumContainerDecl.flags & 1 /* Exported */; - - var createdNewSymbol = false; - - enumContainerSymbol = this.getExistingSymbol(enumContainerDecl, 64 /* Enum */, parent); - - if (enumContainerSymbol) { - if (enumContainerSymbol.kind !== enumDeclKind) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(enumAST.identifier, enumContainerDecl.getDisplayName(), enumContainerSymbol.getDeclarations()[0].ast()); - enumContainerSymbol = null; - } else if (!this.checkThatExportsMatch(enumContainerDecl, enumContainerSymbol)) { - enumContainerSymbol = null; + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) { + var sig = new Signature(checker); + sig.declaration = declaration; + sig.typeParameters = typeParameters; + sig.parameters = parameters; + sig.resolvedReturnType = resolvedReturnType; + sig.minArgumentCount = minArgumentCount; + sig.hasRestParameter = hasRestParameter; + sig.hasStringLiterals = hasStringLiterals; + return sig; + } + function cloneSignature(sig) { + return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); + } + function getDefaultConstructSignatures(classType) { + if (classType.baseTypes.length) { + var baseType = classType.baseTypes[0]; + var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1 /* Construct */); + return ts.map(baseSignatures, function (baseSignature) { + var signature = baseType.flags & 4096 /* Reference */ ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature); + signature.typeParameters = classType.typeParameters; + signature.resolvedReturnType = classType; + return signature; + }); + } + return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)]; + } + function resolveAnonymousTypeMembers(type) { + var symbol = type.symbol; + var members = emptySymbols; + var callSignatures = emptyArray; + var constructSignatures = emptyArray; + if (symbol.flags & ts.SymbolFlags.HasExports) { + members = symbol.exports; + } + if (symbol.flags & (8 /* Function */ | 2048 /* Method */)) { + callSignatures = getSignaturesOfSymbol(symbol); + } + if (symbol.flags & 16 /* Class */) { + var classType = getDeclaredTypeOfClass(symbol); + constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); + if (!constructSignatures.length) + constructSignatures = getDefaultConstructSignatures(classType); + if (classType.baseTypes.length) { + var members = createSymbolTable(getNamedMembers(members)); + addInheritedMembers(members, getPropertiesOfType(getTypeOfSymbol(classType.baseTypes[0].symbol))); } } - - if (enumContainerSymbol) { - enumInstanceSymbol = enumContainerSymbol.getInstanceSymbol(); - } else { - enumContainerSymbol = new TypeScript.PullContainerSymbol(enumName, enumDeclKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(enumContainerSymbol, 64 /* Enum */); + var numberIndexType = (symbol.flags & 64 /* Enum */) ? stringType : undefined; + setObjectTypeMembers(type, members, callSignatures, constructSignatures, undefined, numberIndexType); + } + function resolveObjectTypeMembers(type) { + if (!type.members) { + if (type.flags & (1024 /* Class */ | 2048 /* Interface */)) { + resolveClassOrInterfaceMembers(type); + } + else if (type.flags & 8192 /* Anonymous */) { + resolveAnonymousTypeMembers(type); + } + else { + resolveTypeReferenceMembers(type); } } - - enumContainerSymbol.addDeclaration(enumContainerDecl); - enumContainerDecl.setSymbol(enumContainerSymbol); - - this.semanticInfoChain.setSymbolForAST(enumAST.identifier, enumContainerSymbol); - this.semanticInfoChain.setSymbolForAST(enumAST, enumContainerSymbol); - - if (!enumInstanceSymbol) { - var variableSymbol = null; - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(enumName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(enumName, false); - } + return type; + } + function getPropertiesOfType(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + return resolveObjectTypeMembers(type).properties; + } + return emptyArray; + } + function getPropertyOfType(type, name) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - - if (parentDecl !== variableSymbolParentDecl) { - variableSymbol = null; - } - } + } + } + } + function getPropertyOfApparentType(type, name) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; } - } else if (!(enumContainerDecl.flags & 1 /* Exported */)) { - var siblingDecls = parentDecl.getChildDecls(); - var augmentedDecl = null; - - for (var i = 0; i < siblingDecls.length; i++) { - if (siblingDecls[i] === enumContainerDecl) { - break; - } - - if ((siblingDecls[i].name === enumName) && (siblingDecls[i].kind & 68147712 /* SomeValue */)) { - augmentedDecl = siblingDecls[i]; - break; + } + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + var symbol = getPropertyOfType(globalFunctionType, name); + if (symbol) + return symbol; + } + return getPropertyOfType(globalObjectType, name); + } + } + function getSignaturesOfType(type, kind) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; + } + return emptyArray; + } + function getIndexTypeOfType(type, kind) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + return kind === 0 /* String */ ? resolved.stringIndexType : resolved.numberIndexType; + } + } + function getTypeParametersFromDeclaration(typeParameterDeclarations) { + var result = []; + ts.forEach(typeParameterDeclarations, function (node) { + var tp = getDeclaredTypeOfTypeParameter(node.symbol); + if (!ts.contains(result, tp)) { + result.push(tp); + } + }); + return result; + } + function getSignatureFromDeclaration(declaration) { + var links = getNodeLinks(declaration); + if (!links.resolvedSignature) { + var classType = declaration.kind === 117 /* Constructor */ ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined; + var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined; + var parameters = []; + var hasStringLiterals = false; + var minArgumentCount = -1; + for (var i = 0, n = declaration.parameters.length; i < n; i++) { + var param = declaration.parameters[i]; + parameters.push(param.symbol); + if (param.type && param.type.kind === 3 /* StringLiteral */) { + hasStringLiterals = true; + } + if (minArgumentCount < 0) { + if (param.initializer || param.flags & (4 /* QuestionMark */ | 8 /* Rest */)) { + minArgumentCount = i; } } - - if (augmentedDecl) { - variableSymbol = augmentedDecl.getSymbol(); - - if (variableSymbol) { - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); + } + if (minArgumentCount < 0) { + minArgumentCount = declaration.parameters.length; + } + var returnType; + if (classType) { + returnType = classType; + } + else if (declaration.type) { + returnType = getTypeFromTypeNode(declaration.type); + } + else { + if (declaration.kind === 118 /* GetAccessor */) { + var setter = getDeclarationOfKind(declaration.symbol, 119 /* SetAccessor */); + returnType = getAnnotatedAccessorType(setter); + } + if (!returnType && !declaration.body) { + returnType = anyType; + } + } + links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals); + } + return links.resolvedSignature; + } + function getSignaturesOfSymbol(symbol) { + if (!symbol) + return emptyArray; + var result = []; + for (var i = 0, len = symbol.declarations.length; i < len; i++) { + var node = symbol.declarations[i]; + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 116 /* Method */: + case 117 /* Constructor */: + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + if (i > 0 && node.body) { + var previous = symbol.declarations[i - 1]; + if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { + break; } } - } + result.push(getSignatureFromDeclaration(node)); + } + } + return result; + } + function getReturnTypeOfSignature(signature) { + if (!signature.resolvedReturnType) { + signature.resolvedReturnType = resolvingType; + if (signature.target) { + var type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); + } + else { + var type = getReturnTypeFromBody(signature.declaration); + } + if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = type; + } + } + else if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = anyType; + } + return signature.resolvedReturnType; + } + function getRestTypeOfSignature(signature) { + if (signature.hasRestParameter) { + var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + if (type.flags & 4096 /* Reference */ && type.target === globalArrayType) { + return type.typeArguments[0]; } - - if (variableSymbol) { - enumInstanceSymbol = variableSymbol; - moduleInstanceTypeSymbol = variableSymbol.type; - } else { - enumInstanceSymbol = new TypeScript.PullSymbol(enumName, 512 /* Variable */); + } + return anyType; + } + function getSignatureInstantiation(signature, typeArguments) { + return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true); + } + function getErasedSignature(signature) { + if (!signature.typeParameters) + return signature; + if (!signature.erasedSignatureCache) { + if (signature.target) { + signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); } - - enumContainerSymbol.setInstanceSymbol(enumInstanceSymbol); - - if (!moduleInstanceTypeSymbol) { - moduleInstanceTypeSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - enumInstanceSymbol.type = moduleInstanceTypeSymbol; + else { + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); } - - moduleInstanceTypeSymbol.addDeclaration(enumContainerDecl); - - if (!moduleInstanceTypeSymbol.getAssociatedContainerType()) { - moduleInstanceTypeSymbol.setAssociatedContainerType(enumContainerSymbol); + } + return signature.erasedSignatureCache; + } + function getOrCreateTypeFromSignature(signature) { + if (!signature.isolatedSignatureType) { + var isConstructor = signature.declaration.kind === 117 /* Constructor */ || signature.declaration.kind === 121 /* ConstructSignature */; + var type = createObjectType(8192 /* Anonymous */ | 16384 /* FromSignature */); + type.members = emptySymbols; + type.properties = emptyArray; + type.callSignatures = !isConstructor ? [signature] : emptyArray; + type.constructSignatures = isConstructor ? [signature] : emptyArray; + signature.isolatedSignatureType = type; + } + return signature.isolatedSignatureType; + } + function getIndexSymbol(symbol) { + return symbol.members["__index"]; + } + function getIndexDeclarationOfSymbol(symbol, kind) { + var syntaxKind = kind === 1 /* Number */ ? 108 /* NumberKeyword */ : 110 /* StringKeyword */; + var indexSymbol = getIndexSymbol(symbol); + if (indexSymbol) { + var len = indexSymbol.declarations.length; + for (var i = 0; i < len; i++) { + var node = indexSymbol.declarations[i]; + if (node.parameters.length === 1) { + var parameter = node.parameters[0]; + if (parameter && parameter.type && parameter.type.kind === syntaxKind) { + return node; + } + } } } - - if (createdNewSymbol && parent) { - if (enumContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(enumContainerSymbol); - } else { - parent.addEnclosedNonMemberType(enumContainerSymbol); + return undefined; + } + function getIndexTypeOfSymbol(symbol, kind) { + var declaration = getIndexDeclarationOfSymbol(symbol, kind); + return declaration ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType : undefined; + } + function getConstraintOfTypeParameter(type) { + if (!type.constraint) { + if (type.target) { + var targetConstraint = getConstraintOfTypeParameter(type.target); + type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType; + } + else { + type.constraint = getTypeFromTypeNode(getDeclarationOfKind(type.symbol, 113 /* TypeParameter */).constraint); } } - - if (createdNewSymbol) { - this.bindEnumIndexerDeclsToPullSymbols(enumContainerSymbol); + return type.constraint === noConstraintType ? undefined : type.constraint; + } + function getTypeListId(types) { + switch (types.length) { + case 1: + return "" + types[0].id; + case 2: + return types[0].id + "," + types[1].id; + default: + var result = ""; + for (var i = 0; i < types.length; i++) { + if (i > 0) + result += ","; + result += types[i].id; + } + return result; } - var valueDecl = enumContainerDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); + } + function createTypeReference(target, typeArguments) { + var id = getTypeListId(typeArguments); + var type = target.instantiations[id]; + if (!type) { + type = target.instantiations[id] = createObjectType(4096 /* Reference */, target.symbol); + type.target = target; + type.typeArguments = typeArguments; } - }; - - PullSymbolBinder.prototype.bindEnumIndexerDeclsToPullSymbols = function (enumContainerSymbol) { - var enumContainerInstanceTypeSymbol = enumContainerSymbol.getInstanceSymbol().type; - - var syntheticIndexerParameterSymbol = new TypeScript.PullSymbol("x", 2048 /* Parameter */); - syntheticIndexerParameterSymbol.type = this.semanticInfoChain.numberTypeSymbol; - syntheticIndexerParameterSymbol.setResolved(); - syntheticIndexerParameterSymbol.setIsSynthesized(); - - var syntheticIndexerSignatureSymbol = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - syntheticIndexerSignatureSymbol.addParameter(syntheticIndexerParameterSymbol); - syntheticIndexerSignatureSymbol.returnType = this.semanticInfoChain.stringTypeSymbol; - syntheticIndexerSignatureSymbol.setResolved(); - syntheticIndexerSignatureSymbol.setIsSynthesized(); - - enumContainerInstanceTypeSymbol.addIndexSignature(syntheticIndexerSignatureSymbol); - }; - - PullSymbolBinder.prototype.findExistingVariableSymbolForModuleValueDecl = function (decl) { - var isExported = TypeScript.hasFlag(decl.flags, 1 /* Exported */); - var modName = decl.name; - var parentInstanceSymbol = this.getParent(decl, true); - var parentDecl = decl.getParentDecl(); - - var variableSymbol = null; - - if (parentInstanceSymbol) { - if (isExported) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); + return type; + } + function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) { + var links = getNodeLinks(typeReferenceNode); + if (links.isIllegalTypeReferenceInConstraint !== undefined) { + return links.isIllegalTypeReferenceInConstraint; + } + var currentNode = typeReferenceNode; + while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) { + currentNode = currentNode.parent; + } + links.isIllegalTypeReferenceInConstraint = currentNode.kind === 113 /* TypeParameter */; + return links.isIllegalTypeReferenceInConstraint; + } + function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) { + var typeParameterSymbol; + function check(n) { + if (n.kind === 123 /* TypeReference */ && n.typeName.kind === 55 /* Identifier */) { + var links = getNodeLinks(n); + if (links.isIllegalTypeReferenceInConstraint === undefined) { + var symbol = resolveName(typeParameter, n.typeName.text, ts.SymbolFlags.Type, undefined, undefined); + if (symbol && (symbol.flags & 262144 /* TypeParameter */)) { + links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; }); + } } - } else { - variableSymbol = parentInstanceSymbol.findContainedNonMember(modName); - - if (!variableSymbol) { - variableSymbol = parentInstanceSymbol.findMember(modName, false); + if (links.isIllegalTypeReferenceInConstraint) { + error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); } } - - if (variableSymbol) { - var declarations = variableSymbol.getDeclarations(); - - if (declarations.length) { - var variableSymbolParentDecl = declarations[0].getParentDecl(); - var isExportedOrHasTheSameParent = isExported || (parentDecl === variableSymbolParentDecl); - - var canReuseVariableSymbol = isExportedOrHasTheSameParent && this.checkThatExportsMatch(decl, variableSymbol, false); - - if (!canReuseVariableSymbol) { - variableSymbol = null; + ts.forEachChild(n, check); + } + if (typeParameter.constraint) { + typeParameterSymbol = getSymbolOfNode(typeParameter); + check(typeParameter.constraint); + } + } + function getTypeFromTypeReferenceNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var symbol = resolveEntityName(node, node.typeName, ts.SymbolFlags.Type); + if (symbol) { + var type; + if ((symbol.flags & 262144 /* TypeParameter */) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) { + type = unknownType; + } + else { + type = getDeclaredTypeOfSymbol(symbol); + if (type.flags & (1024 /* Class */ | 2048 /* Interface */) && type.flags & 4096 /* Reference */) { + var typeParameters = type.typeParameters; + if (node.typeArguments && node.typeArguments.length === typeParameters.length) { + type = createTypeReference(type, ts.map(node.typeArguments, function (t) { return getTypeFromTypeNode(t); })); + } + else { + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */), typeParameters.length); + type = undefined; + } } - } - } - } else if (!isExported) { - var siblingDecls = parentDecl.getChildDecls(); - - for (var i = 0; i < siblingDecls.length; i++) { - var sibling = siblingDecls[i]; - - var siblingIsSomeValue = TypeScript.hasFlag(sibling.kind, 68147712 /* SomeValue */); - var siblingIsFunctionOrHasImplictVarFlag = TypeScript.hasFlag(sibling.kind, 1032192 /* SomeFunction */) || TypeScript.hasFlag(sibling.flags, 118784 /* ImplicitVariable */); - - var isSiblingAnAugmentableVariable = sibling !== decl && sibling !== decl.getValueDecl() && sibling.name === modName && siblingIsSomeValue && siblingIsFunctionOrHasImplictVarFlag; - - if (isSiblingAnAugmentableVariable) { - if (sibling.hasSymbol()) { - variableSymbol = sibling.getSymbol(); - if (variableSymbol.isContainer()) { - variableSymbol = variableSymbol.getInstanceSymbol(); - } else if (variableSymbol && variableSymbol.isType()) { - variableSymbol = variableSymbol.getConstructorMethod(); + else { + if (node.typeArguments) { + error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type)); + type = undefined; } - - break; } } } + links.resolvedType = type || unknownType; } - return variableSymbol; - }; - - PullSymbolBinder.prototype.bindModuleDeclarationToPullSymbol = function (moduleContainerDecl) { - var modName = moduleContainerDecl.name; - - var moduleContainerTypeSymbol = null; - var moduleKind = moduleContainerDecl.kind; - - var parent = this.getParent(moduleContainerDecl); - var parentInstanceSymbol = this.getParent(moduleContainerDecl, true); - var parentDecl = moduleContainerDecl.getParentDecl(); - var moduleNameAST = this.semanticInfoChain.getASTForDecl(moduleContainerDecl); - var moduleDeclAST = TypeScript.ASTHelpers.getEnclosingModuleDeclaration(moduleNameAST); - if (!moduleDeclAST) { - TypeScript.Debug.assert(moduleKind === 32 /* DynamicModule */); - TypeScript.Debug.assert(moduleNameAST.kind() === 120 /* SourceUnit */); - - moduleDeclAST = moduleNameAST; - } - - var isExported = TypeScript.hasFlag(moduleContainerDecl.flags, 1 /* Exported */); - var searchKind = 164 /* SomeContainer */; - var isInitializedModule = (moduleContainerDecl.flags & 102400 /* SomeInitializedModule */) !== 0; - - if (parent && moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_must_be_defined_in_global_context, null); + return links.resolvedType; + } + function getTypeFromTypeQueryNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getWidenedType(checkExpression(node.exprName)); } - - var createdNewSymbol = false; - - moduleContainerTypeSymbol = this.getExistingSymbol(moduleContainerDecl, searchKind, parent); - - if (moduleContainerTypeSymbol) { - if (moduleContainerTypeSymbol.kind !== moduleKind) { - if (isInitializedModule) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(moduleNameAST, moduleContainerDecl.getDisplayName(), moduleContainerTypeSymbol.getDeclarations()[0].ast()); + return links.resolvedType; + } + function getTypeOfGlobalSymbol(symbol, arity) { + function getTypeDeclaration(symbol) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + switch (declaration.kind) { + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + return declaration; } - - moduleContainerTypeSymbol = null; - } else if (moduleKind === 32 /* DynamicModule */) { - this.semanticInfoChain.addDiagnosticFromAST(moduleNameAST, TypeScript.DiagnosticCode.Ambient_external_module_declaration_cannot_be_reopened); - } else if (!this.checkThatExportsMatch(moduleContainerDecl, moduleContainerTypeSymbol)) { - moduleContainerTypeSymbol = null; } } - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = new TypeScript.PullContainerSymbol(modName, moduleKind); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(moduleContainerTypeSymbol, searchKind); - } + if (!symbol) { + return emptyObjectType; } - - moduleContainerTypeSymbol.addDeclaration(moduleContainerDecl); - moduleContainerDecl.setSymbol(moduleContainerTypeSymbol); - - this.semanticInfoChain.setSymbolForAST(moduleNameAST, moduleContainerTypeSymbol); - this.semanticInfoChain.setSymbolForAST(moduleDeclAST, moduleContainerTypeSymbol); - - var currentModuleValueDecl = moduleContainerDecl.getValueDecl(); - - var moduleDeclarations = moduleContainerTypeSymbol.getDeclarations(); - - if (createdNewSymbol) { - if (parent) { - if (moduleContainerDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(moduleContainerTypeSymbol); - } else { - parent.addEnclosedNonMemberContainer(moduleContainerTypeSymbol); - } + var type = getDeclaredTypeOfSymbol(symbol); + if (!(type.flags & ts.TypeFlags.ObjectType)) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); + return emptyObjectType; + } + if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); + return emptyObjectType; + } + return type; + } + function getGlobalSymbol(name) { + return resolveName(undefined, name, ts.SymbolFlags.Type, ts.Diagnostics.Cannot_find_global_type_0, name); + } + function getGlobalType(name) { + return getTypeOfGlobalSymbol(getGlobalSymbol(name), 0); + } + function createArrayType(elementType) { + var arrayType = globalArrayType || getDeclaredTypeOfSymbol(globalArraySymbol); + return arrayType !== emptyObjectType ? createTypeReference(arrayType, [elementType]) : emptyObjectType; + } + function getTypeFromArrayTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType)); + } + return links.resolvedType; + } + function getTypeFromTypeLiteralNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var symbol = node.symbol; + var members = symbol.members; + var callSignatures = getSignaturesOfSymbol(members["__call"]); + var constructSignatures = getSignaturesOfSymbol(members["__new"]); + var stringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + var numberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + links.resolvedType = createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + return links.resolvedType; + } + function getStringLiteralType(node) { + if (ts.hasProperty(stringLiteralTypes, node.text)) + return stringLiteralTypes[node.text]; + var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); + type.text = ts.getSourceTextOfNode(node); + return type; + } + function getTypeFromStringLiteral(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getStringLiteralType(node); + } + return links.resolvedType; + } + function getTypeFromTypeNode(node) { + switch (node.kind) { + case 101 /* AnyKeyword */: + return anyType; + case 110 /* StringKeyword */: + return stringType; + case 108 /* NumberKeyword */: + return numberType; + case 102 /* BooleanKeyword */: + return booleanType; + case 89 /* VoidKeyword */: + return voidType; + case 3 /* StringLiteral */: + return getTypeFromStringLiteral(node); + case 123 /* TypeReference */: + return getTypeFromTypeReferenceNode(node); + case 124 /* TypeQuery */: + return getTypeFromTypeQueryNode(node); + case 126 /* ArrayType */: + return getTypeFromArrayTypeNode(node); + case 125 /* TypeLiteral */: + return getTypeFromTypeLiteralNode(node); + case 55 /* Identifier */: + case 112 /* QualifiedName */: + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); + default: + return unknownType; + } + } + function instantiateList(items, mapper, instantiator) { + if (items && items.length) { + var result = []; + for (var i = 0; i < items.length; i++) { + result.push(instantiator(items[i], mapper)); } + return result; } - - if (currentModuleValueDecl) { - currentModuleValueDecl.ensureSymbolIsBound(); - - var instanceSymbol = null; - var instanceTypeSymbol = null; - if (currentModuleValueDecl.hasSymbol()) { - instanceSymbol = currentModuleValueDecl.getSymbol(); - } else { - instanceSymbol = new TypeScript.PullSymbol(modName, 512 /* Variable */); - currentModuleValueDecl.setSymbol(instanceSymbol); - if (!instanceSymbol.hasDeclaration(currentModuleValueDecl)) { - instanceSymbol.addDeclaration(currentModuleValueDecl); - } + return items; + } + function createUnaryTypeMapper(source, target) { + return function (t) { return t === source ? target : t; }; + } + function createBinaryTypeMapper(source1, target1, source2, target2) { + return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; + } + function createTypeMapper(sources, targets) { + switch (sources.length) { + case 1: + return createUnaryTypeMapper(sources[0], targets[0]); + case 2: + return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]); + } + return function (t) { + for (var i = 0; i < sources.length; i++) { + if (t === sources[i]) + return targets[i]; } - - if (!instanceSymbol.type) { - instanceSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); + return t; + }; + } + function createUnaryTypeEraser(source) { + return function (t) { return t === source ? anyType : t; }; + } + function createBinaryTypeEraser(source1, source2) { + return function (t) { return t === source1 || t === source2 ? anyType : t; }; + } + function createTypeEraser(sources) { + switch (sources.length) { + case 1: + return createUnaryTypeEraser(sources[0]); + case 2: + return createBinaryTypeEraser(sources[0], sources[1]); + } + return function (t) { + for (var i = 0; i < sources.length; i++) { + if (t === sources[i]) + return anyType; } - - moduleContainerTypeSymbol.setInstanceSymbol(instanceSymbol); - - if (!instanceSymbol.type.getAssociatedContainerType()) { - instanceSymbol.type.setAssociatedContainerType(moduleContainerTypeSymbol); + return t; + }; + } + function createInferenceMapper(context) { + return function (t) { + for (var i = 0; i < context.typeParameters.length; i++) { + if (t === context.typeParameters[i]) { + return getInferredType(context, i); + } } + return t; + }; + } + function identityMapper(type) { + return type; + } + function combineTypeMappers(mapper1, mapper2) { + return function (t) { return mapper2(mapper1(t)); }; + } + function instantiateTypeParameter(typeParameter, mapper) { + var result = createType(512 /* TypeParameter */); + result.symbol = typeParameter.symbol; + if (typeParameter.constraint) { + result.constraint = instantiateType(typeParameter.constraint, mapper); } - }; - - PullSymbolBinder.prototype.bindImportDeclaration = function (importDeclaration) { - var declFlags = importDeclaration.flags; - var declKind = importDeclaration.kind; - var importDeclAST = this.semanticInfoChain.getASTForDecl(importDeclaration); - - var isExported = false; - var importSymbol = null; - var declName = importDeclaration.name; - var parentHadSymbol = false; - var parent = this.getParent(importDeclaration); - - importSymbol = this.getExistingSymbol(importDeclaration, 164 /* SomeContainer */, parent); - - if (importSymbol) { - parentHadSymbol = true; + else { + result.target = typeParameter; + result.mapper = mapper; } - - if (importSymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(importDeclAST, importDeclaration.getDisplayName(), importSymbol.getDeclarations()[0].ast()); - importSymbol = null; + return result; + } + function instantiateSignature(signature, mapper, eraseTypeParameters) { + if (signature.typeParameters && !eraseTypeParameters) { + var freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter); + mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); } - - if (!importSymbol) { - importSymbol = new TypeScript.PullTypeAliasSymbol(declName); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(importSymbol, 164 /* SomeContainer */); - } + var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); + result.target = signature; + result.mapper = mapper; + return result; + } + function instantiateSymbol(symbol, mapper) { + if (symbol.flags & 8388608 /* Instantiated */) { + var links = getSymbolLinks(symbol); + symbol = links.target; + mapper = combineTypeMappers(links.mapper, mapper); } - - importSymbol.addDeclaration(importDeclaration); - importDeclaration.setSymbol(importSymbol); - - this.semanticInfoChain.setSymbolForAST(importDeclAST, importSymbol); - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addEnclosedMemberContainer(importSymbol); - } else { - parent.addEnclosedNonMemberContainer(importSymbol); + var result = createSymbol(8388608 /* Instantiated */ | 33554432 /* Transient */, symbol.name); + result.declarations = symbol.declarations; + result.parent = symbol.parent; + result.target = symbol; + result.mapper = mapper; + if (symbol.valueDeclaration) { + result.valueDeclaration = symbol.valueDeclaration; + } + return result; + } + function instantiateAnonymousType(type, mapper) { + var result = createObjectType(8192 /* Anonymous */, type.symbol); + result.properties = instantiateList(getPropertiesOfType(type), mapper, instantiateSymbol); + result.members = createSymbolTable(result.properties); + result.callSignatures = instantiateList(getSignaturesOfType(type, 0 /* Call */), mapper, instantiateSignature); + result.constructSignatures = instantiateList(getSignaturesOfType(type, 1 /* Construct */), mapper, instantiateSignature); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType) + result.stringIndexType = instantiateType(stringIndexType, mapper); + if (numberIndexType) + result.numberIndexType = instantiateType(numberIndexType, mapper); + return result; + } + function instantiateType(type, mapper) { + if (mapper !== identityMapper) { + if (type.flags & 512 /* TypeParameter */) { + return mapper(type); + } + if (type.flags & 8192 /* Anonymous */) { + return type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */ | 512 /* TypeLiteral */ | 1024 /* ObjectLiteral */) ? instantiateAnonymousType(type, mapper) : type; + } + if (type.flags & 4096 /* Reference */) { + return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); } } - }; - - PullSymbolBinder.prototype.ensurePriorDeclarationsAreBound = function (container, currentDecl) { - if (!container) { - return; + return type; + } + function isContextSensitiveExpression(node) { + switch (node.kind) { + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return !node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; }); + case 128 /* ObjectLiteral */: + return ts.forEach(node.properties, function (p) { return p.kind === 129 /* PropertyAssignment */ && isContextSensitiveExpression(p.initializer); }); + case 127 /* ArrayLiteral */: + return ts.forEach(node.elements, function (e) { return isContextSensitiveExpression(e); }); + case 141 /* ConditionalExpression */: + return isContextSensitiveExpression(node.whenTrue) || isContextSensitiveExpression(node.whenFalse); + case 140 /* BinaryExpression */: + return node.operator === 40 /* BarBarToken */ && (isContextSensitiveExpression(node.left) || isContextSensitiveExpression(node.right)); } - - var parentDecls = container.getDeclarations(); - for (var i = 0; i < parentDecls.length; ++i) { - var parentDecl = parentDecls[i]; - var childDecls = parentDecl.getChildDecls(); - for (var j = 0; j < childDecls.length; ++j) { - var childDecl = childDecls[j]; - if (childDecl === currentDecl) { - return; - } - - if (childDecl.name === currentDecl.name) { - childDecl.ensureSymbolIsBound(); - } + return false; + } + function getTypeWithoutConstructors(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (resolved.constructSignatures.length) { + var result = createObjectType(8192 /* Anonymous */, type.symbol); + result.members = resolved.members; + result.properties = resolved.properties; + result.callSignatures = resolved.callSignatures; + result.constructSignatures = emptyArray; + type = result; } } - }; - - PullSymbolBinder.prototype.bindClassDeclarationToPullSymbol = function (classDecl) { - var className = classDecl.name; - var classSymbol = null; - - var constructorSymbol = null; - var constructorTypeSymbol = null; - - var classAST = this.semanticInfoChain.getASTForDecl(classDecl); - - var parent = this.getParent(classDecl); - - this.ensurePriorDeclarationsAreBound(parent, classDecl); - - var parentDecl = classDecl.getParentDecl(); - var isExported = classDecl.flags & 1 /* Exported */; - var isGeneric = false; - - classSymbol = this.getExistingSymbol(classDecl, 58728795 /* SomeType */, parent); - - if (classSymbol && classSymbol.kind === 16 /* Interface */) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(classAST.identifier, classDecl.getDisplayName(), classSymbol.getDeclarations()[0].ast()); - classSymbol = null; + return type; + } + var subtypeRelation = {}; + var assignableRelation = {}; + var identityRelation = {}; + function isTypeIdenticalTo(source, target) { + return checkTypeRelatedTo(source, target, identityRelation, undefined, undefined, undefined); + } + function isTypeSubtypeOf(source, target) { + return checkTypeSubtypeOf(source, target, undefined, undefined, undefined); + } + function checkTypeSubtypeOf(source, target, errorNode, chainedMessage, terminalMessage) { + return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, chainedMessage, terminalMessage); + } + function isTypeAssignableTo(source, target) { + return checkTypeAssignableTo(source, target, undefined, undefined, undefined); + } + function checkTypeAssignableTo(source, target, errorNode, chainedMessage, terminalMessage) { + return checkTypeRelatedTo(source, target, assignableRelation, errorNode, chainedMessage, terminalMessage); + } + function isTypeRelatedTo(source, target, relation) { + return checkTypeRelatedTo(source, target, relation, undefined, undefined, undefined); + } + function isSignatureAssignableTo(source, target) { + var sourceType = getOrCreateTypeFromSignature(source); + var targetType = getOrCreateTypeFromSignature(target); + return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined, undefined, undefined); + } + function isPropertyIdenticalTo(sourceProp, targetProp) { + return isPropertyIdenticalToRecursive(sourceProp, targetProp, false, function (s, t, _reportErrors) { return isTypeIdenticalTo(s, t); }); + } + function checkInheritedPropertiesAreIdentical(type, typeNode) { + if (!type.baseTypes.length || type.baseTypes.length === 1) { + return true; } - - classSymbol = new TypeScript.PullTypeSymbol(className, 8 /* Class */); - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(classSymbol, 8 /* Class */); + var seen = {}; + ts.forEach(type.declaredProperties, function (p) { + seen[p.name] = { prop: p, containingType: type }; + }); + var ok = true; + for (var i = 0, len = type.baseTypes.length; i < len; ++i) { + var base = type.baseTypes[i]; + var properties = getPropertiesOfType(base); + for (var j = 0, proplen = properties.length; j < proplen; ++j) { + var prop = properties[j]; + if (!ts.hasProperty(seen, prop.name)) { + seen[prop.name] = { prop: prop, containingType: base }; + } + else { + var existing = seen[prop.name]; + var isInheritedProperty = existing.containingType !== type; + if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) { + ok = false; + var typeName1 = typeToString(existing.containingType); + var typeName2 = typeToString(base); + var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); + errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon, typeToString(type), typeName1, typeName2); + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, program.getCompilerHost().getNewLine())); + } + } + } + } + return ok; + } + function isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, relate) { + ts.Debug.assert(sourceProp); + if (!targetProp) { + return false; } - - classSymbol.addDeclaration(classDecl); - - classDecl.setSymbol(classSymbol); - - this.semanticInfoChain.setSymbolForAST(classAST.identifier, classSymbol); - this.semanticInfoChain.setSymbolForAST(classAST, classSymbol); - - if (parent) { - if (classDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(classSymbol); - } else { - parent.addEnclosedNonMemberType(classSymbol); - } + var sourcePropIsPrivate = getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */; + var targetPropIsPrivate = getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */; + if (sourcePropIsPrivate !== targetPropIsPrivate) { + return false; } - - var typeParameterDecls = classDecl.getTypeParameters(); - - for (var i = 0; i < typeParameterDecls.length; i++) { - var typeParameterSymbol = classSymbol.findTypeParameter(typeParameterDecls[i].name); - - if (typeParameterSymbol) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterSymbol.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameterSymbol.getName()]); - } - - typeParameterSymbol = new TypeScript.PullTypeParameterSymbol(typeParameterDecls[i].name); - - classSymbol.addTypeParameter(typeParameterSymbol); - typeParameterSymbol.addDeclaration(typeParameterDecls[i]); - typeParameterDecls[i].setSymbol(typeParameterSymbol); + if (sourcePropIsPrivate) { + return (getTargetSymbol(sourceProp).parent === getTargetSymbol(targetProp).parent) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); } - - constructorSymbol = classSymbol.getConstructorMethod(); - constructorTypeSymbol = constructorSymbol ? constructorSymbol.type : null; - - if (!constructorSymbol) { - var siblingValueDecls = null; - if (parentDecl) { - siblingValueDecls = parentDecl.searchChildDecls(className, 68147712 /* SomeValue */); - - if (siblingValueDecls && siblingValueDecls[0] && siblingValueDecls[0].hasSymbol()) { - constructorSymbol = siblingValueDecls[0].getSymbol(); + else { + return isOptionalProperty(sourceProp) === isOptionalProperty(targetProp) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); + } + } + function checkTypeRelatedTo(source, target, relation, errorNode, chainedMessage, terminalMessage) { + var errorInfo; + var sourceStack; + var targetStack; + var expandingFlags; + var depth = 0; + var overflow = false; + ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); + var result = isRelatedToWithCustomErrors(source, target, errorNode !== undefined, chainedMessage, terminalMessage); + if (overflow) { + error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); + } + else if (errorInfo) { + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, program.getCompilerHost().getNewLine())); + } + return result; + function reportError(message, arg0, arg1) { + errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1); + } + function isRelatedTo(source, target, reportErrors) { + return isRelatedToWithCustomErrors(source, target, reportErrors, undefined, undefined); + } + function isRelatedToWithCustomErrors(source, target, reportErrors, chainedMessage, terminalMessage) { + if (relation === identityRelation) { + if (source === target) + return true; + } + else { + if (source === target) + return true; + if (target.flags & 1 /* Any */) + return true; + if (source === undefinedType) + return true; + if (source === nullType && target !== undefinedType) + return true; + if (source.flags & 128 /* Enum */ && target === numberType) + return true; + if (source.flags & 256 /* StringLiteral */ && target === stringType) + return true; + if (relation === assignableRelation) { + if (source.flags & 1 /* Any */) + return true; + if (source === numberType && target.flags & 128 /* Enum */) + return true; } } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(className, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - constructorSymbol.setIsSynthesized(); - constructorSymbol.type = constructorTypeSymbol; + if (source.flags & 512 /* TypeParameter */ && target.flags & 512 /* TypeParameter */) { + if (typeParameterRelatedTo(source, target, reportErrors)) { + return true; + } } - - classSymbol.setConstructorMethod(constructorSymbol); - classSymbol.setHasDefaultConstructor(); - } - - if (constructorSymbol.getIsSynthesized()) { - constructorSymbol.addDeclaration(classDecl.getValueDecl()); - constructorTypeSymbol.addDeclaration(classDecl); - } else { - classSymbol.setHasDefaultConstructor(false); + else { + var saveErrorInfo = errorInfo; + if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + if (typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) { + return true; + } + } + var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo; + var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source); + if (sourceOrApparentType.flags & ts.TypeFlags.ObjectType && target.flags & ts.TypeFlags.ObjectType && objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors)) { + errorInfo = saveErrorInfo; + return true; + } + } + if (reportErrors) { + chainedMessage = chainedMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Colon; + terminalMessage = terminalMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1; + var diagnosticKey = errorInfo ? chainedMessage : terminalMessage; + ts.Debug.assert(diagnosticKey); + reportError(diagnosticKey, typeToString(source), typeToString(target)); + } + return false; } - - constructorTypeSymbol.setAssociatedContainerType(classSymbol); - - var valueDecl = classDecl.getValueDecl(); - - if (valueDecl) { - valueDecl.ensureSymbolIsBound(); + function typesRelatedTo(sources, targets, reportErrors) { + for (var i = 0, len = sources.length; i < len; i++) { + if (!isRelatedTo(sources[i], targets[i], reportErrors)) + return false; + } + return true; } - - this.bindStaticPrototypePropertyOfClass(classAST, classSymbol, constructorTypeSymbol); - }; - - PullSymbolBinder.prototype.bindInterfaceDeclarationToPullSymbol = function (interfaceDecl) { - var interfaceName = interfaceDecl.name; - var interfaceSymbol = null; - - var interfaceAST = this.semanticInfoChain.getASTForDecl(interfaceDecl); - var createdNewSymbol = false; - var parent = this.getParent(interfaceDecl); - - var acceptableSharedKind = 16 /* Interface */; - - interfaceSymbol = this.getExistingSymbol(interfaceDecl, 58728795 /* SomeType */, parent); - - if (interfaceSymbol) { - if (!(interfaceSymbol.kind & acceptableSharedKind)) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(interfaceAST.identifier, interfaceDecl.getDisplayName(), interfaceSymbol.getDeclarations()[0].ast()); - interfaceSymbol = null; - } else if (!this.checkThatExportsMatch(interfaceDecl, interfaceSymbol)) { - interfaceSymbol = null; + function typeParameterRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + if (source.symbol.name !== target.symbol.name) { + return false; + } + if (source.constraint === target.constraint) { + return true; + } + if (source.constraint === noConstraintType || target.constraint === noConstraintType) { + return false; + } + return isRelatedTo(source.constraint, target.constraint, reportErrors); } - } - - if (!interfaceSymbol) { - interfaceSymbol = new TypeScript.PullTypeSymbol(interfaceName, 16 /* Interface */); - createdNewSymbol = true; - - if (!parent) { - this.semanticInfoChain.cacheGlobalSymbol(interfaceSymbol, acceptableSharedKind); + else { + while (true) { + var constraint = getConstraintOfTypeParameter(source); + if (constraint === target) + return true; + if (!(constraint && constraint.flags & 512 /* TypeParameter */)) + break; + source = constraint; + } + return false; } } - - interfaceSymbol.addDeclaration(interfaceDecl); - interfaceDecl.setSymbol(interfaceSymbol); - - if (createdNewSymbol) { - if (parent) { - if (interfaceDecl.flags & 1 /* Exported */) { - parent.addEnclosedMemberType(interfaceSymbol); - } else { - parent.addEnclosedNonMemberType(interfaceSymbol); + function objectTypeRelatedTo(source, target, reportErrors) { + if (overflow) + return false; + var result; + var id = source.id + "," + target.id; + if ((result = relation[id]) !== undefined) + return result; + if (depth > 0) { + for (var i = 0; i < depth; i++) { + if (source === sourceStack[i] && target === targetStack[i]) + return true; + } + if (depth === 100) { + overflow = true; + return false; } } + else { + sourceStack = []; + targetStack = []; + expandingFlags = 0; + } + sourceStack[depth] = source; + targetStack[depth] = target; + depth++; + var saveExpandingFlags = expandingFlags; + if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack)) + expandingFlags |= 1; + if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack)) + expandingFlags |= 2; + result = expandingFlags === 3 || propertiesRelatedTo(source, target, reportErrors) && signaturesRelatedTo(source, target, 0 /* Call */, reportErrors) && signaturesRelatedTo(source, target, 1 /* Construct */, reportErrors) && stringIndexTypesRelatedTo(source, target, reportErrors) && numberIndexTypesRelatedTo(source, target, reportErrors); + expandingFlags = saveExpandingFlags; + depth--; + if (depth === 0) { + relation[id] = result; + } + return result; } - - var typeParameters = interfaceDecl.getTypeParameters(); - var typeParameter; - var typeParameterDecls = null; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = interfaceSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - interfaceSymbol.addTypeParameter(typeParameter); - } else { - typeParameterDecls = typeParameter.getDeclarations(); - - for (var j = 0; j < typeParameterDecls.length; j++) { - var typeParameterDeclParent = typeParameterDecls[j].getParentDecl(); - - if (typeParameterDeclParent && typeParameterDeclParent === interfaceDecl) { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameterDecls[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); - - break; + function isDeeplyNestedGeneric(type, stack) { + if (type.flags & 4096 /* Reference */ && depth >= 10) { + var target = type.target; + var count = 0; + for (var i = 0; i < depth; i++) { + var t = stack[i]; + if (t.flags & 4096 /* Reference */ && t.target === target) { + count++; + if (count >= 10) + return true; } } } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); - } - }; - - PullSymbolBinder.prototype.bindObjectTypeDeclarationToPullSymbol = function (objectDecl) { - var objectSymbolAST = this.semanticInfoChain.getASTForDecl(objectDecl); - - var objectSymbol = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); - - objectSymbol.addDeclaration(objectDecl); - objectDecl.setSymbol(objectSymbol); - - this.semanticInfoChain.setSymbolForAST(objectSymbolAST, objectSymbol); - - var childDecls = objectDecl.getChildDecls(); - - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); + return false; } - }; - - PullSymbolBinder.prototype.bindConstructorTypeDeclarationToPullSymbol = function (constructorTypeDeclaration) { - var declKind = constructorTypeDeclaration.kind; - var declFlags = constructorTypeDeclaration.flags; - var constructorTypeAST = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - - var constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); - - constructorTypeDeclaration.setSymbol(constructorTypeSymbol); - constructorTypeSymbol.addDeclaration(constructorTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(constructorTypeAST, constructorTypeSymbol); - - var signature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructorTypeDeclaration); - if (TypeScript.lastParameterIsRest(funcDecl.parameterList)) { - signature.hasVarArgs = true; + function propertiesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return propertiesAreIdenticalTo(source, target, reportErrors); + } + else { + return propertiesAreSubtypeOrAssignableTo(source, target, reportErrors); + } } - - signature.addDeclaration(constructorTypeDeclaration); - constructorTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), constructorTypeSymbol, signature); - - var typeParameters = constructorTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructorTypeSymbol.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); + function propertiesAreIdenticalTo(source, target, reportErrors) { + if (source === target) { + return true; } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); + var sourceProperties = getPropertiesOfType(source); + var targetProperties = getPropertiesOfType(target); + if (sourceProperties.length !== targetProperties.length) { + return false; + } + for (var i = 0, len = sourceProperties.length; i < len; ++i) { + var sourceProp = sourceProperties[i]; + var targetProp = getPropertyOfType(target, sourceProp.name); + if (!isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, isRelatedTo)) { + return false; + } + } + return true; } - - constructorTypeSymbol.appendConstructSignature(signature); - }; - - PullSymbolBinder.prototype.bindVariableDeclarationToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var varDeclAST = this.semanticInfoChain.getASTForDecl(variableDeclaration); - var nameAST = varDeclAST.kind() === 131 /* ClassDeclaration */ ? varDeclAST.identifier : varDeclAST.kind() === 225 /* VariableDeclarator */ ? varDeclAST.propertyName : varDeclAST.kind() === 132 /* EnumDeclaration */ ? varDeclAST.identifier : varDeclAST; - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var variableSymbol = null; - - var declName = variableDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(variableDeclaration, true); - - var parentDecl = variableDeclaration.getParentDecl(); - - var isImplicit = (declFlags & 118784 /* ImplicitVariable */) !== 0; - var isModuleValue = (declFlags & (32768 /* InitializedModule */)) !== 0; - var isEnumValue = (declFlags & 4096 /* Enum */) !== 0; - var isClassConstructorVariable = (declFlags & 16384 /* ClassConstructorVariable */) !== 0; - variableSymbol = this.getExistingSymbol(variableDeclaration, 68147712 /* SomeValue */, parent); - - if (!variableSymbol && isModuleValue) { - variableSymbol = this.findExistingVariableSymbolForModuleValueDecl(variableDeclaration.getContainerDecl()); + function propertiesAreSubtypeOrAssignableTo(source, target, reportErrors) { + var properties = getPropertiesOfType(target); + for (var i = 0; i < properties.length; i++) { + var targetProp = properties[i]; + var sourceProp = getPropertyOfApparentType(source, targetProp.name); + if (sourceProp === targetProp) { + continue; + } + var targetPropIsOptional = isOptionalProperty(targetProp); + if (!sourceProp) { + if (!targetPropIsOptional) { + if (reportErrors) { + reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); + } + return false; + } + } + else if (sourceProp !== targetProp) { + if (targetProp.flags & 67108864 /* Prototype */) { + continue; + } + if (getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */ || getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */) { + if (reportErrors) { + reportError(ts.Diagnostics.Private_property_0_cannot_be_reimplemented, symbolToString(targetProp)); + } + return false; + } + if (!isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors)) { + if (reportErrors) { + reportError(ts.Diagnostics.Types_of_property_0_are_incompatible_Colon, symbolToString(targetProp)); + } + return false; + } + else if (isOptionalProperty(sourceProp) && !targetPropIsOptional) { + if (reportErrors) { + reportError(ts.Diagnostics.Required_property_0_cannot_be_reimplemented_with_optional_property_in_1, targetProp.name, typeToString(source)); + } + return false; + } + } + } + return true; } - - if (variableSymbol && !variableSymbol.isType()) { - parentHadSymbol = true; + function signaturesRelatedTo(source, target, kind, reportErrors) { + if (relation === identityRelation) { + return areSignaturesIdenticalTo(source, target, kind, reportErrors); + } + else { + return areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors); + } } - - var decl; - var decls; - var ast; - var members; - - if (variableSymbol) { - var prevKind = variableSymbol.kind; - var prevIsEnum = variableSymbol.anyDeclHasFlag(4096 /* Enum */); - var prevIsClassConstructorVariable = variableSymbol.anyDeclHasFlag(16384 /* ClassConstructorVariable */); - var prevIsModuleValue = variableSymbol.allDeclsHaveFlag(32768 /* InitializedModule */); - var prevIsImplicit = variableSymbol.anyDeclHasFlag(118784 /* ImplicitVariable */); - var prevIsFunction = TypeScript.ArrayUtilities.any(variableSymbol.getDeclarations(), function (decl) { - return decl.kind === 16384 /* Function */; - }); - var prevIsAmbient = variableSymbol.allDeclsHaveFlag(8 /* Ambient */); - var isAmbientOrPrevIsAmbient = prevIsAmbient || (variableDeclaration.flags & 8 /* Ambient */) !== 0; - var prevDecl = variableSymbol.getDeclarations()[0]; - var prevParentDecl = prevDecl.getParentDecl(); - var bothAreGlobal = parentDecl && (parentDecl.kind === 1 /* Script */) && (prevParentDecl.kind === 1 /* Script */); - var shareParent = bothAreGlobal || prevDecl.getParentDecl() === variableDeclaration.getParentDecl(); - var prevIsParam = shareParent && prevKind === 2048 /* Parameter */ && declKind == 512 /* Variable */; - - var acceptableRedeclaration = prevIsParam || (isImplicit && ((!isEnumValue && !isClassConstructorVariable && prevIsFunction) || ((isModuleValue || isEnumValue) && (prevIsModuleValue || prevIsEnum)) || (isClassConstructorVariable && prevIsModuleValue && isAmbientOrPrevIsAmbient) || (isModuleValue && prevIsClassConstructorVariable))); - - if (acceptableRedeclaration && (prevIsClassConstructorVariable || prevIsFunction) && !isAmbientOrPrevIsAmbient) { - if (prevDecl.fileName() !== variableDeclaration.fileName()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(variableDeclaration, TypeScript.DiagnosticCode.Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2, [declName, declName, prevDecl.fileName()])); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); + function areSignaturesIdenticalTo(source, target, kind, reportErrors) { + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + if (sourceSignatures.length !== targetSignatures.length) { + return false; + } + for (var i = 0, len = sourceSignatures.length; i < len; ++i) { + if (!isSignatureIdenticalTo(sourceSignatures[i], targetSignatures[i], reportErrors)) { + return false; } } - - if (!acceptableRedeclaration || prevIsParam) { - if (!prevIsParam && (isImplicit || prevIsImplicit || TypeScript.hasFlag(prevKind, 1032192 /* SomeFunction */)) || !shareParent) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(nameAST, variableDeclaration.getDisplayName(), variableSymbol.getDeclarations()[0].ast()); - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); - } else { - this.checkThatExportsMatch(variableDeclaration, variableSymbol); - variableSymbol = null; - parentHadSymbol = false; + return true; + } + function isSignatureIdenticalTo(source, target, reportErrors) { + if (source === target) { + return true; + } + if (source.hasRestParameter !== target.hasRestParameter) { + return false; + } + if (source.parameters.length !== target.parameters.length) { + return false; + } + if (source.minArgumentCount !== target.minArgumentCount) { + return false; + } + if (source.typeParameters && target.typeParameters) { + if (source.typeParameters.length !== target.typeParameters.length) { + return false; + } + for (var i = 0, len = source.typeParameters.length; i < len; ++i) { + if (!isRelatedTo(source.typeParameters[i], target.typeParameters[i], reportErrors)) { + return false; + } } } - - if (variableSymbol && !(variableSymbol.type && variableSymbol.type.isError()) && !this.checkThatExportsMatch(variableDeclaration, variableSymbol, !(isModuleValue && prevIsModuleValue))) { - variableSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(declName); + else if (source.typeParameters || source.typeParameters) { + return false; } - } - - if ((declFlags & 118784 /* ImplicitVariable */) === 0) { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - if (!parent && parentDecl.kind === 1 /* Script */) { - this.semanticInfoChain.cacheGlobalSymbol(variableSymbol, declKind); + source = getErasedSignature(source); + target = getErasedSignature(target); + for (var i = 0, len = source.parameters.length; i < len; i++) { + var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]); + var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]); + if (!isRelatedTo(s, t, reportErrors)) { + return false; } } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - this.semanticInfoChain.setSymbolForAST(nameAST, variableSymbol); - this.semanticInfoChain.setSymbolForAST(varDeclAST, variableSymbol); - } else if (!parentHadSymbol) { - if (isClassConstructorVariable) { - var classTypeSymbol = variableSymbol; - - if (parent) { - members = parent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].kind === 8 /* Class */)) { - classTypeSymbol = members[i]; - break; + var t = getReturnTypeOfSignature(target); + var s = getReturnTypeOfSignature(source); + return isRelatedTo(s, t, reportErrors); + } + function areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors) { + if (target === anyFunctionType || source === anyFunctionType) + return true; + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + var saveErrorInfo = errorInfo; + outer: for (var i = 0; i < targetSignatures.length; i++) { + var t = targetSignatures[i]; + if (!t.hasStringLiterals || target.flags & 16384 /* FromSignature */) { + var localErrors = reportErrors; + for (var j = 0; j < sourceSignatures.length; j++) { + var s = sourceSignatures[j]; + if (!s.hasStringLiterals || source.flags & 16384 /* FromSignature */) { + if (isSignatureSubtypeOrAssignableTo(s, t, localErrors)) { + errorInfo = saveErrorInfo; + continue outer; + } + localErrors = false; } } + return false; } - - if (!classTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - classTypeSymbol = containerDecl.getSymbol(); - if (!classTypeSymbol) { - classTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 58728795 /* SomeType */, variableDeclaration); + } + return true; + } + function isSignatureSubtypeOrAssignableTo(source, target, reportErrors) { + if (source === target) { + return true; + } + if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { + return false; + } + var sourceMax = source.parameters.length; + var targetMax = target.parameters.length; + var checkCount; + if (source.hasRestParameter && target.hasRestParameter) { + checkCount = sourceMax > targetMax ? sourceMax : targetMax; + sourceMax--; + targetMax--; + } + else if (source.hasRestParameter) { + sourceMax--; + checkCount = targetMax; + } + else if (target.hasRestParameter) { + targetMax--; + checkCount = sourceMax; + } + else { + checkCount = sourceMax < targetMax ? sourceMax : targetMax; + } + source = getErasedSignature(source); + target = getErasedSignature(target); + for (var i = 0; i < checkCount; i++) { + var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); + var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); + var saveErrorInfo = errorInfo; + if (!isRelatedTo(s, t, reportErrors)) { + if (!isRelatedTo(t, s, false)) { + if (reportErrors) { + reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible_Colon, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name); + } + return false; } + errorInfo = saveErrorInfo; } - - if (classTypeSymbol && (classTypeSymbol.kind !== 8 /* Class */)) { - classTypeSymbol = null; - } - - if (classTypeSymbol && classTypeSymbol.isClass()) { - variableSymbol = classTypeSymbol.getConstructorMethod(); - variableDeclaration.setSymbol(variableSymbol); - - decls = classTypeSymbol.getDeclarations(); - - if (decls.length) { - decl = decls[decls.length - 1]; - ast = this.semanticInfoChain.getASTForDecl(decl); + } + var t = getReturnTypeOfSignature(target); + if (t === voidType) + return true; + var s = getReturnTypeOfSignature(source); + return isRelatedTo(s, t, reportErrors); + } + function stringIndexTypesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return areIndexTypesIdenticalTo(0 /* String */, source, target, reportErrors); + } + else { + var targetType = getIndexTypeOfType(target, 0 /* String */); + if (targetType) { + var sourceType = getIndexTypeOfType(source, 0 /* String */); + if (!sourceType) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); + } + return false; } - } else { - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); + if (!isRelatedTo(sourceType, targetType, reportErrors)) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); + } + return false; } - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; } - } else if (declFlags & 102400 /* SomeInitializedModule */) { - var moduleContainerTypeSymbol = null; - var moduleParent = this.getParent(variableDeclaration); - - if (moduleParent) { - members = moduleParent.getMembers(); - - for (var i = 0; i < members.length; i++) { - if ((members[i].name === declName) && (members[i].isContainer())) { - moduleContainerTypeSymbol = members[i]; - break; + return true; + } + } + function numberIndexTypesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return areIndexTypesIdenticalTo(1 /* Number */, source, target, reportErrors); + } + else { + var targetType = getIndexTypeOfType(target, 1 /* Number */); + if (targetType) { + var sourceStringType = getIndexTypeOfType(source, 0 /* String */); + var sourceNumberType = getIndexTypeOfType(source, 1 /* Number */); + if (!(sourceStringType || sourceNumberType)) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); } + return false; } - } - - if (!moduleContainerTypeSymbol) { - var containerDecl = variableDeclaration.getContainerDecl(); - moduleContainerTypeSymbol = containerDecl.getSymbol(); - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 164 /* SomeContainer */, variableDeclaration); - - if (!moduleContainerTypeSymbol) { - moduleContainerTypeSymbol = this.semanticInfoChain.findTopLevelSymbol(declName, 64 /* Enum */, variableDeclaration); + if (sourceStringType && sourceNumberType) { + var compatible = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors); + } + else { + var compatible = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors); + } + if (!compatible) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); } + return false; } } - - if (moduleContainerTypeSymbol && (!moduleContainerTypeSymbol.isContainer())) { - moduleContainerTypeSymbol = null; + return true; + } + } + function areIndexTypesIdenticalTo(indexKind, source, target, reportErrors) { + var targetType = getIndexTypeOfType(target, indexKind); + var sourceType = getIndexTypeOfType(source, indexKind); + return (!sourceType && !targetType) || (sourceType && targetType && isRelatedTo(sourceType, targetType, reportErrors)); + } + } + function isSupertypeOfEach(candidate, types) { + for (var i = 0, len = types.length; i < len; i++) { + if (candidate !== types[i] && !isTypeSubtypeOf(types[i], candidate)) + return false; + } + return true; + } + function getBestCommonType(types, contextualType, candidatesOnly) { + if (contextualType && isSupertypeOfEach(contextualType, types)) + return contextualType; + return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; }) || (candidatesOnly ? undefined : emptyObjectType); + } + function isTypeOfObjectLiteral(type) { + return (type.flags & 8192 /* Anonymous */) && type.symbol && (type.symbol.flags & 1024 /* ObjectLiteral */) ? true : false; + } + function getWidenedTypeOfObjectLiteral(type) { + var properties = getPropertiesOfType(type); + if (properties.length) { + var widenedTypes = []; + var propTypeWasWidened = false; + ts.forEach(properties, function (p) { + var propType = getTypeOfSymbol(p); + var widenedType = getWidenedType(propType); + if (propType !== widenedType) { + propTypeWasWidened = true; + if (program.getCompilerOptions().noImplicitAny && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(widenedType)); + } } - - if (moduleContainerTypeSymbol) { - variableSymbol = moduleContainerTypeSymbol.getInstanceSymbol(); - if (!variableSymbol) { - variableSymbol = new TypeScript.PullSymbol(declName, declKind); - variableSymbol.type = new TypeScript.PullTypeSymbol("", 8388608 /* ObjectType */); + widenedTypes.push(widenedType); + }); + if (propTypeWasWidened) { + var members = {}; + var index = 0; + ts.forEach(properties, function (p) { + var symbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, p.name); + symbol.declarations = p.declarations; + symbol.parent = p.parent; + symbol.type = widenedTypes[index++]; + if (p.valueDeclaration) + symbol.valueDeclaration = p.valueDeclaration; + members[symbol.name] = symbol; + }); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType) + stringIndexType = getWidenedType(stringIndexType); + if (numberIndexType) + numberIndexType = getWidenedType(numberIndexType); + type = createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType); + } + } + return type; + } + function isArrayType(type) { + return type.flags & 4096 /* Reference */ && type.target === globalArrayType; + } + function getInnermostTypeOfNestedArrayTypes(type) { + while (isArrayType(type)) { + type = type.typeArguments[0]; + } + return type; + } + function getWidenedTypeOfArrayLiteral(type) { + var elementType = type.typeArguments[0]; + var widenedType = getWidenedType(elementType); + type = elementType !== widenedType ? createArrayType(widenedType) : type; + return type; + } + function getWidenedType(type) { + if (type.flags & (32 /* Undefined */ | 64 /* Null */)) { + return anyType; + } + if (isTypeOfObjectLiteral(type)) { + return getWidenedTypeOfObjectLiteral(type); + } + if (isArrayType(type)) { + return getWidenedTypeOfArrayLiteral(type); + } + return type; + } + function forEachMatchingParameterType(source, target, callback) { + var sourceMax = source.parameters.length; + var targetMax = target.parameters.length; + var count; + if (source.hasRestParameter && target.hasRestParameter) { + count = sourceMax > targetMax ? sourceMax : targetMax; + sourceMax--; + targetMax--; + } + else if (source.hasRestParameter) { + sourceMax--; + count = targetMax; + } + else if (target.hasRestParameter) { + targetMax--; + count = sourceMax; + } + else { + count = sourceMax < targetMax ? sourceMax : targetMax; + } + for (var i = 0; i < count; i++) { + var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); + var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); + callback(s, t); + } + } + function createInferenceContext(typeParameters) { + var inferences = []; + for (var i = 0; i < typeParameters.length; i++) + inferences.push([]); + return { + typeParameters: typeParameters, + inferences: inferences, + inferredTypes: new Array(typeParameters.length) + }; + } + function inferTypes(context, source, target) { + var sourceStack; + var targetStack; + var depth = 0; + inferFromTypes(source, target); + function isInProcess(source, target) { + for (var i = 0; i < depth; i++) { + if (source === sourceStack[i] && target === targetStack[i]) + return true; + } + return false; + } + function isWithinDepthLimit(type, stack) { + if (depth >= 5) { + var target = type.target; + var count = 0; + for (var i = 0; i < depth; i++) { + var t = stack[i]; + if (t.flags & 4096 /* Reference */ && t.target === target) + count++; + } + return count < 5; + } + return true; + } + function inferFromTypes(source, target) { + if (target.flags & 512 /* TypeParameter */) { + var typeParameters = context.typeParameters; + for (var i = 0; i < typeParameters.length; i++) { + if (target === typeParameters[i]) { + var inferences = context.inferences[i]; + if (!ts.contains(inferences, source)) + inferences.push(source); + break; } - - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); + } + } + else if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + var sourceTypes = source.typeArguments; + var targetTypes = target.typeArguments; + for (var i = 0; i < sourceTypes.length; i++) { + inferFromTypes(sourceTypes[i], targetTypes[i]); + } + } + else if (source.flags & ts.TypeFlags.ObjectType && (target.flags & 4096 /* Reference */ || (target.flags & 8192 /* Anonymous */) && target.symbol && target.symbol.flags & (2048 /* Method */ | 512 /* TypeLiteral */))) { + if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) { + if (depth === 0) { + sourceStack = []; + targetStack = []; } - variableDeclaration.setSymbol(variableSymbol); - } else { - TypeScript.Debug.assert(false, "Attempted to bind invalid implicit variable symbol"); + sourceStack[depth] = source; + targetStack[depth] = target; + depth++; + inferFromProperties(source, target); + inferFromSignatures(source, target, 0 /* Call */); + inferFromSignatures(source, target, 1 /* Construct */); + inferFromIndexTypes(source, target, 0 /* String */, 0 /* String */); + inferFromIndexTypes(source, target, 1 /* Number */, 1 /* Number */); + inferFromIndexTypes(source, target, 0 /* String */, 1 /* Number */); + depth--; } } - } else { - if (!variableSymbol.hasDeclaration(variableDeclaration)) { - variableSymbol.addDeclaration(variableDeclaration); + } + function inferFromProperties(source, target) { + var properties = getPropertiesOfType(target); + for (var i = 0; i < properties.length; i++) { + var targetProp = properties[i]; + var sourceProp = getPropertyOfType(source, targetProp.name); + if (sourceProp) { + inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); + } } - variableDeclaration.setSymbol(variableSymbol); } - - var containerDecl = variableDeclaration.getContainerDecl(); - if (variableSymbol && variableSymbol.type && containerDecl && !variableSymbol.type.hasDeclaration(containerDecl)) { - variableSymbol.type.addDeclaration(containerDecl); + function inferFromSignatures(source, target, kind) { + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + var sourceLen = sourceSignatures.length; + var targetLen = targetSignatures.length; + var len = sourceLen < targetLen ? sourceLen : targetLen; + for (var i = 0; i < len; i++) { + inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i])); + } } - - if (parent && !parentHadSymbol) { - if (declFlags & 1 /* Exported */) { - parent.addMember(variableSymbol); - } else { - parent.addEnclosedNonMember(variableSymbol); + function inferFromSignature(source, target) { + forEachMatchingParameterType(source, target, inferFromTypes); + inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + } + function inferFromIndexTypes(source, target, sourceKind, targetKind) { + var targetIndexType = getIndexTypeOfType(target, targetKind); + if (targetIndexType) { + var sourceIndexType = getIndexTypeOfType(source, sourceKind); + if (sourceIndexType) { + inferFromTypes(sourceIndexType, targetIndexType); + } } } - }; - - PullSymbolBinder.prototype.bindCatchVariableToPullSymbol = function (variableDeclaration) { - var declFlags = variableDeclaration.flags; - var declKind = variableDeclaration.kind; - var identifier = this.semanticInfoChain.getASTForDecl(variableDeclaration); - - var declName = variableDeclaration.name; - - var variableSymbol = new TypeScript.PullSymbol(declName, declKind); - - variableSymbol.addDeclaration(variableDeclaration); - variableDeclaration.setSymbol(variableSymbol); - - variableSymbol.type = this.semanticInfoChain.anyTypeSymbol; - - this.semanticInfoChain.setSymbolForAST(identifier, variableSymbol); - }; - - PullSymbolBinder.prototype.bindEnumMemberDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - var propDeclAST = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - var propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(propDeclAST.propertyName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); + } + function getInferredType(context, index) { + var result = context.inferredTypes[index]; + if (!result) { + var commonType = getWidenedType(getBestCommonType(context.inferences[index])); + var constraint = getConstraintOfTypeParameter(context.typeParameters[index]); + var result = constraint && !isTypeAssignableTo(commonType, constraint) ? constraint : commonType; + context.inferredTypes[index] = result; } - - if (propertySymbol) { - parentHadSymbol = true; + return result; + } + function getInferredTypes(context) { + for (var i = 0; i < context.inferredTypes.length; i++) { + getInferredType(context, i); } - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); + context.inferences = undefined; + return context.inferredTypes; + } + function hasAncestor(node, kind) { + return getAncestor(node, kind) !== undefined; + } + function getAncestor(node, kind) { + switch (kind) { + case 169 /* ClassDeclaration */: + while (node) { + switch (node.kind) { + case 169 /* ClassDeclaration */: + return node; + case 171 /* EnumDeclaration */: + case 170 /* InterfaceDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return undefined; + default: + node = node.parent; + continue; + } + } + break; + default: + while (node) { + if (node.kind === kind) { + return node; + } + else { + node = node.parent; + } + } + break; } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(propDeclAST.propertyName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(propDeclAST, propertySymbol); - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); + return undefined; + } + function checkIdentifier(node) { + function isInTypeQuery(node) { + while (node) { + switch (node.kind) { + case 124 /* TypeQuery */: + return true; + case 55 /* Identifier */: + case 112 /* QualifiedName */: + node = node.parent; + continue; + default: + return false; + } + } + ts.Debug.fail("should not get here"); } - }; - - PullSymbolBinder.prototype.bindPropertyDeclarationToPullSymbol = function (propertyDeclaration) { - var declFlags = propertyDeclaration.flags; - var declKind = propertyDeclaration.kind; - - var ast = this.semanticInfoChain.getASTForDecl(propertyDeclaration); - var astName = ast.kind() === 136 /* MemberVariableDeclaration */ ? ast.variableDeclarator.propertyName : ast.kind() === 141 /* PropertySignature */ ? ast.propertyName : ast.kind() === 242 /* Parameter */ ? ast.identifier : ast.propertyName; - - var isStatic = false; - var isOptional = false; - - var propertySymbol = null; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; + var symbol = resolveName(node, node.text, ts.SymbolFlags.Value | 524288 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node)); + if (!symbol) { + symbol = unknownSymbol; } - - if (TypeScript.hasFlag(declFlags, 128 /* Optional */)) { - isOptional = true; + if (symbol.flags & 4194304 /* Import */) { + getSymbolLinks(symbol).referenced = !isInTypeQuery(node); } - - var declName = propertyDeclaration.name; - - var parentHadSymbol = false; - - var parent = this.getParent(propertyDeclaration, true); - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; + getNodeLinks(node).resolvedSymbol = symbol; + checkCollisionWithCapturedSuperVariable(node, node); + checkCollisionWithCapturedThisVariable(node, node); + checkCollisionWithIndexVariableInGeneratedCode(node, node); + return getTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol)); + } + function getThisContainer(node) { + while (true) { + node = node.parent; + if (!node) { + return node; + } + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 172 /* ModuleDeclaration */: + case 115 /* Property */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 171 /* EnumDeclaration */: + case 177 /* SourceFile */: + case 137 /* ArrowFunction */: + return node; + } + } + } + function captureLexicalThis(node, container) { + var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; + getNodeLinks(node).flags |= 2 /* LexicalThis */; + if (container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */) { + getNodeLinks(classNode).flags |= 4 /* CaptureThis */; + } + else { + getNodeLinks(container).flags |= 4 /* CaptureThis */; + } + } + function checkThisExpression(node) { + var container = getThisContainer(node); + var needToCaptureLexicalThis = false; + while (container.kind === 137 /* ArrowFunction */) { + container = getThisContainer(container); + needToCaptureLexicalThis = true; + } + switch (container.kind) { + case 172 /* ModuleDeclaration */: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body); + break; + case 171 /* EnumDeclaration */: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + break; + case 117 /* Constructor */: + if (isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); + } + break; + case 115 /* Property */: + if (container.flags & 64 /* Static */) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); + } + break; } - - propertySymbol = parent.findMember(declName, false); - - if (propertySymbol) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(astName, propertyDeclaration.getDisplayName(), propertySymbol.getDeclarations()[0].ast()); + if (needToCaptureLexicalThis) { + captureLexicalThis(node, container); } - - if (propertySymbol) { - parentHadSymbol = true; + var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; + if (classNode) { + var symbol = getSymbolOfNode(classNode); + return container.flags & 64 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol); } - - var classTypeSymbol; - - if (!parentHadSymbol) { - propertySymbol = new TypeScript.PullSymbol(declName, declKind); + return anyType; + } + function getSuperContainer(node) { + while (true) { + node = node.parent; + if (!node) + return node; + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 115 /* Property */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return node; + } + } + } + function isInConstructorArgumentInitializer(node, constructorDecl) { + for (var n = node; n && n !== constructorDecl; n = n.parent) { + if (n.kind === 114 /* Parameter */) { + return true; + } } - - propertySymbol.addDeclaration(propertyDeclaration); - propertyDeclaration.setSymbol(propertySymbol); - - this.semanticInfoChain.setSymbolForAST(astName, propertySymbol); - this.semanticInfoChain.setSymbolForAST(ast, propertySymbol); - - if (isOptional) { - propertySymbol.isOptional = true; + return false; + } + function checkSuperExpression(node, isCallExpression) { + var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); + var baseClass; + if (enclosingClass && enclosingClass.baseType) { + var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass)); + baseClass = classType.baseTypes.length && classType.baseTypes[0]; } - - if (parent && !parentHadSymbol) { - parent.addMember(propertySymbol); + if (!baseClass) { + error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class); + return unknownType; } - }; - - PullSymbolBinder.prototype.bindParameterSymbols = function (functionDeclaration, parameterList, funcType, signatureSymbol) { - var parameters = []; - var params = TypeScript.createIntrinsicsObject(); - var funcDecl = this.semanticInfoChain.getDeclForAST(functionDeclaration); - - if (parameterList) { - for (var i = 0, n = parameterList.length; i < n; i++) { - var argDecl = parameterList.astAt(i); - var id = parameterList.identifierAt(i); - var decl = this.semanticInfoChain.getDeclForAST(argDecl); - var isProperty = TypeScript.hasFlag(decl.flags, 8388608 /* PropertyParameter */); - var parameterSymbol = new TypeScript.PullSymbol(id.valueText(), 2048 /* Parameter */); - - if ((i === (n - 1)) && parameterList.lastParameterIsRest()) { - parameterSymbol.isVarArg = true; - } - - if (params[id.valueText()]) { - this.semanticInfoChain.addDiagnosticFromAST(argDecl, TypeScript.DiagnosticCode.Duplicate_identifier_0, [id.text()]); - } else { - params[id.valueText()] = true; + var container = getSuperContainer(node); + if (container) { + var canUseSuperExpression = false; + if (isCallExpression) { + canUseSuperExpression = container.kind === 117 /* Constructor */; + } + else { + var needToCaptureLexicalThis = false; + while (container && container.kind === 137 /* ArrowFunction */) { + container = getSuperContainer(container); + needToCaptureLexicalThis = true; } - - if (decl) { - var isParameterOptional = false; - - if (isProperty) { - decl.ensureSymbolIsBound(); - var valDecl = decl.getValueDecl(); - - if (valDecl) { - isParameterOptional = TypeScript.hasFlag(valDecl.flags, 128 /* Optional */); - - valDecl.setSymbol(parameterSymbol); - parameterSymbol.addDeclaration(valDecl); - } - } else { - isParameterOptional = TypeScript.hasFlag(decl.flags, 128 /* Optional */); - - parameterSymbol.addDeclaration(decl); - decl.setSymbol(parameterSymbol); + if (container && container.parent && container.parent.kind === 169 /* ClassDeclaration */) { + if (container.flags & 64 /* Static */) { + canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */; + } + else { + canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */ || container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */; } - - parameterSymbol.isOptional = isParameterOptional; - } - - signatureSymbol.addParameter(parameterSymbol, parameterSymbol.isOptional); - - if (signatureSymbol.isDefinition()) { - funcType.addEnclosedNonMember(parameterSymbol); } } - } - }; - - PullSymbolBinder.prototype.bindFunctionDeclarationToPullSymbol = function (functionDeclaration) { - var declKind = functionDeclaration.kind; - var declFlags = functionDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(functionDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = functionDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(functionDeclaration, true); - - var parentDecl = functionDeclaration.getParentDecl(); - var parentHadSymbol = false; - - var functionSymbol = null; - var functionTypeSymbol = null; - - functionSymbol = this.getExistingSymbol(functionDeclaration, 68147712 /* SomeValue */, parent); - - if (functionSymbol) { - var acceptableRedeclaration; - - if (functionSymbol.kind === 16384 /* Function */) { - acceptableRedeclaration = isSignature || functionSymbol.allDeclsHaveFlag(2048 /* Signature */); - } else { - var isCurrentDeclAmbient = TypeScript.hasFlag(functionDeclaration.flags, 8 /* Ambient */); - acceptableRedeclaration = TypeScript.ArrayUtilities.all(functionSymbol.getDeclarations(), function (decl) { - var isInitializedModuleOrAmbientDecl = TypeScript.hasFlag(decl.flags, 32768 /* InitializedModule */) && (isCurrentDeclAmbient || TypeScript.hasFlag(decl.flags, 8 /* Ambient */)); - var isSignature = TypeScript.hasFlag(decl.flags, 2048 /* Signature */); - return isInitializedModuleOrAmbientDecl || isSignature; - }); - } - - if (!acceptableRedeclaration) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.identifier, functionDeclaration.getDisplayName(), functionSymbol.getDeclarations()[0].ast()); - functionSymbol.type = this.semanticInfoChain.getResolver().getNewErrorTypeSymbol(funcName); + if (canUseSuperExpression) { + var returnType; + if ((container.flags & 64 /* Static */) || isCallExpression) { + getNodeLinks(node).flags |= 32 /* SuperStatic */; + returnType = getTypeOfSymbol(baseClass.symbol); + } + else { + getNodeLinks(node).flags |= 16 /* SuperInstance */; + returnType = baseClass; + } + if (container.kind === 117 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); + returnType = unknownType; + } + if (!isCallExpression && needToCaptureLexicalThis) { + captureLexicalThis(node.parent, container); + } + return returnType; } } - - if (functionSymbol) { - functionTypeSymbol = functionSymbol.type; - parentHadSymbol = true; - } - - if (!functionSymbol) { - functionSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); + if (isCallExpression) { + error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors); } - - if (!functionTypeSymbol) { - functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionSymbol.type = functionTypeSymbol; - functionTypeSymbol.setFunctionSymbol(functionSymbol); + else { + error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class); } - - functionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionDeclaration); - functionTypeSymbol.addDeclaration(functionDeclaration); - - this.semanticInfoChain.setSymbolForAST(funcDeclAST.identifier, functionSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, functionSymbol); - - if (parent && !parentHadSymbol) { - if (isExported) { - parent.addMember(functionSymbol); - } else { - parent.addEnclosedNonMember(functionSymbol); + return unknownType; + } + function getContextuallyTypedParameterType(parameter) { + var func = parameter.parent; + if (func.kind === 136 /* FunctionExpression */ || func.kind === 137 /* ArrowFunction */) { + if (isContextSensitiveExpression(func)) { + var signature = getContextualSignature(func); + if (signature) { + return getTypeAtPosition(signature, ts.indexOf(func.parameters, parameter)); + } } } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(functionDeclaration); - functionDeclaration.setSignatureSymbol(signature); - - if (TypeScript.lastParameterIsRest(funcDeclAST.callSignature.parameterList)) { - signature.hasVarArgs = true; - } - - var funcDecl = this.semanticInfoChain.getASTForDecl(functionDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.callSignature.parameterList), functionTypeSymbol, signature); - - var typeParameters = functionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); + return undefined; + } + function getContextualTypeForInitializerExpression(node) { + var declaration = node.parent; + if (node === declaration.initializer) { + if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.kind === 114 /* Parameter */) { + return getContextuallyTypedParameterType(declaration); } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); } - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionExpressionToPullSymbol = function (functionExpressionDeclaration) { - var declKind = functionExpressionDeclaration.kind; - var declFlags = functionExpressionDeclaration.flags; - var ast = this.semanticInfoChain.getASTForDecl(functionExpressionDeclaration); - - var parameters = ast.kind() === 219 /* SimpleArrowFunctionExpression */ ? TypeScript.ASTHelpers.parametersFromIdentifier(ast.identifier) : TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(ast)); - var funcExpAST = ast; - - var functionName = declKind === 131072 /* FunctionExpression */ ? functionExpressionDeclaration.getFunctionExpressionName() : functionExpressionDeclaration.name; - var functionSymbol = new TypeScript.PullSymbol(functionName, declKind); - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - functionTypeSymbol.setFunctionSymbol(functionSymbol); - - functionSymbol.type = functionTypeSymbol; - - functionExpressionDeclaration.setSymbol(functionSymbol); - functionSymbol.addDeclaration(functionExpressionDeclaration); - functionTypeSymbol.addDeclaration(functionExpressionDeclaration); - - var name = funcExpAST.kind() === 222 /* FunctionExpression */ ? funcExpAST.identifier : funcExpAST.kind() === 241 /* FunctionPropertyAssignment */ ? funcExpAST.propertyName : null; - if (name) { - this.semanticInfoChain.setSymbolForAST(name, functionSymbol); + return undefined; + } + function getContextualTypeForReturnExpression(node) { + var func = getContainingFunction(node); + if (func) { + if (func.type || func.kind === 117 /* Constructor */ || func.kind === 118 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 119 /* SetAccessor */))) { + return getReturnTypeOfSignature(getSignatureFromDeclaration(func)); + } + var signature = getContextualSignature(func); + if (signature) { + return getReturnTypeOfSignature(signature); + } } - - this.semanticInfoChain.setSymbolForAST(funcExpAST, functionSymbol); - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, true); - - if (parameters.lastParameterIsRest()) { - signature.hasVarArgs = true; + return undefined; + } + function getContextualTypeForArgument(node) { + var callExpression = node.parent; + var argIndex = ts.indexOf(callExpression.arguments, node); + if (argIndex >= 0) { + var signature = getResolvedSignature(callExpression); + return getTypeAtPosition(signature, argIndex); } - - var typeParameters = functionExpressionDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); + return undefined; + } + function getContextualTypeForBinaryOperand(node) { + var binaryExpression = node.parent; + var operator = binaryExpression.operator; + if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { + if (node === binaryExpression.right) { + return checkExpression(binaryExpression.left); } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); } - - signature.addDeclaration(functionExpressionDeclaration); - functionExpressionDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcExpAST, parameters, functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindFunctionTypeDeclarationToPullSymbol = function (functionTypeDeclaration) { - var declKind = functionTypeDeclaration.kind; - var declFlags = functionTypeDeclaration.flags; - var funcTypeAST = this.semanticInfoChain.getASTForDecl(functionTypeDeclaration); - - var functionTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - - functionTypeDeclaration.setSymbol(functionTypeSymbol); - functionTypeSymbol.addDeclaration(functionTypeDeclaration); - this.semanticInfoChain.setSymbolForAST(funcTypeAST, functionTypeSymbol); - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - if (TypeScript.lastParameterIsRest(funcTypeAST.parameterList)) { - signature.hasVarArgs = true; + else if (operator === 40 /* BarBarToken */) { + var type = getContextualType(binaryExpression); + if (!type && node === binaryExpression.right) { + type = checkExpression(binaryExpression.left); + } + return type; } - - var typeParameters = functionTypeDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = signature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - signature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.name]); + return undefined; + } + function getContextualTypeForPropertyExpression(node) { + var declaration = node.parent; + var objectLiteral = declaration.parent; + var type = getContextualType(objectLiteral); + var name = declaration.name.text; + if (type && name) { + var prop = getPropertyOfType(type, name); + if (prop) { + return getTypeOfSymbol(prop); } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); + return isNumericName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */); } - - signature.addDeclaration(functionTypeDeclaration); - functionTypeDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcTypeAST, TypeScript.ASTHelpers.parametersFromParameterList(funcTypeAST.parameterList), functionTypeSymbol, signature); - - functionTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindMethodDeclarationToPullSymbol = function (methodDeclaration) { - var declKind = methodDeclaration.kind; - var declFlags = methodDeclaration.flags; - var methodAST = this.semanticInfoChain.getASTForDecl(methodDeclaration); - - var isPrivate = (declFlags & 2 /* Private */) !== 0; - var isStatic = (declFlags & 16 /* Static */) !== 0; - var isOptional = (declFlags & 128 /* Optional */) !== 0; - - var methodName = methodDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(methodDeclaration, true); - var parentHadSymbol = false; - - var methodSymbol = null; - var methodTypeSymbol = null; - - if (parent.isClass() && isStatic) { - parent = parent.getConstructorMethod().type; + return undefined; + } + function getContextualTypeForElementExpression(node) { + var arrayLiteral = node.parent; + var type = getContextualType(arrayLiteral); + return type ? getIndexTypeOfType(type, 1 /* Number */) : undefined; + } + function getContextualTypeForConditionalOperand(node) { + var conditional = node.parent; + return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined; + } + function getContextualType(node) { + if (node.contextualType) { + return node.contextualType; + } + var parent = node.parent; + switch (parent.kind) { + case 166 /* VariableDeclaration */: + case 114 /* Parameter */: + case 115 /* Property */: + return getContextualTypeForInitializerExpression(node); + case 137 /* ArrowFunction */: + case 154 /* ReturnStatement */: + return getContextualTypeForReturnExpression(node); + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return getContextualTypeForArgument(node); + case 134 /* TypeAssertion */: + return getTypeFromTypeNode(parent.type); + case 140 /* BinaryExpression */: + return getContextualTypeForBinaryOperand(node); + case 129 /* PropertyAssignment */: + return getContextualTypeForPropertyExpression(node); + case 127 /* ArrayLiteral */: + return getContextualTypeForElementExpression(node); + case 141 /* ConditionalExpression */: + return getContextualTypeForConditionalOperand(node); } - - methodSymbol = parent.findMember(methodName, false); - - if (methodSymbol && (methodSymbol.kind !== 65536 /* Method */ || (!isSignature && !methodSymbol.allDeclsHaveFlag(2048 /* Signature */)))) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(methodAST, methodDeclaration.getDisplayName(), methodSymbol.getDeclarations()[0].ast()); - methodSymbol = null; + return undefined; + } + function getContextualSignature(node) { + var type = getContextualType(node); + if (type) { + var signatures = getSignaturesOfType(type, 0 /* Call */); + if (signatures.length === 1) { + var signature = signatures[0]; + if (!signature.typeParameters) { + return signature; + } + } } - - if (methodSymbol) { - methodTypeSymbol = methodSymbol.type; - parentHadSymbol = true; + return undefined; + } + function isInferentialContext(mapper) { + return mapper && mapper !== identityMapper; + } + function checkArrayLiteral(node, contextualMapper) { + var elementTypes = []; + ts.forEach(node.elements, function (element) { + if (element.kind !== 142 /* OmittedExpression */) { + var type = checkExpression(element, contextualMapper); + if (!ts.contains(elementTypes, type)) + elementTypes.push(type); + } + }); + var contextualType = isInferentialContext(contextualMapper) ? undefined : getContextualType(node); + var contextualElementType = contextualType && getIndexTypeOfType(contextualType, 1 /* Number */); + var elementType = getBestCommonType(elementTypes, contextualElementType, true); + if (!elementType) + elementType = elementTypes.length ? emptyObjectType : undefinedType; + return createArrayType(elementType); + } + function isNumericName(name) { + return !isNaN(name); + } + function checkObjectLiteral(node, contextualMapper) { + var members = node.symbol.members; + var properties = {}; + var contextualType = getContextualType(node); + for (var id in members) { + if (ts.hasProperty(members, id)) { + var member = members[id]; + if (member.flags & 2 /* Property */) { + var type = checkExpression(member.declarations[0].initializer, contextualMapper); + var prop = createSymbol(2 /* Property */ | 33554432 /* Transient */, member.name); + prop.declarations = member.declarations; + prop.parent = member.parent; + if (member.valueDeclaration) + prop.valueDeclaration = member.valueDeclaration; + prop.type = type; + member = prop; + } + else { + var getAccessor = getDeclarationOfKind(member, 118 /* GetAccessor */); + if (getAccessor) { + checkAccessorDeclaration(getAccessor); + } + var setAccessor = getDeclarationOfKind(member, 119 /* SetAccessor */); + if (setAccessor) { + checkAccessorDeclaration(setAccessor); + } + } + properties[member.name] = member; + } + } + var stringIndexType = getIndexType(0 /* String */); + var numberIndexType = getIndexType(1 /* Number */); + return createAnonymousType(node.symbol, properties, emptyArray, emptyArray, stringIndexType, numberIndexType); + function getIndexType(kind) { + if (contextualType) { + var indexType = getIndexTypeOfType(contextualType, kind); + if (indexType) { + var propTypes = []; + for (var id in properties) { + if (ts.hasProperty(properties, id)) { + if (kind === 0 /* String */ || isNumericName(id)) { + var type = getTypeOfSymbol(properties[id]); + if (!ts.contains(propTypes, type)) + propTypes.push(type); + } + } + } + return getBestCommonType(propTypes, isInferentialContext(contextualMapper) ? undefined : indexType); + } + } } - - if (!methodSymbol) { - methodSymbol = new TypeScript.PullSymbol(methodName, 65536 /* Method */); + } + function getDeclarationKindFromSymbol(s) { + return s.flags & 67108864 /* Prototype */ ? 115 /* Property */ : s.valueDeclaration.kind; + } + function getDeclarationFlagsFromSymbol(s) { + return s.flags & 67108864 /* Prototype */ ? 16 /* Public */ | 64 /* Static */ : s.valueDeclaration.flags; + } + function checkPropertyAccess(node) { + var type = checkExpression(node.left); + if (type === unknownType) + return type; + if (type !== anyType) { + var apparentType = getApparentType(getWidenedType(type)); + if (apparentType === unknownType) { + return unknownType; + } + var prop = getPropertyOfApparentType(apparentType, node.right.text); + if (!prop) { + if (node.right.text) { + error(node.right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.identifierToString(node.right), typeToString(type)); + } + return unknownType; + } + getNodeLinks(node).resolvedSymbol = prop; + if (prop.parent && prop.parent.flags & 16 /* Class */) { + if (node.left.kind === 81 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 116 /* Method */) { + error(node.right, ts.Diagnostics.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword); + } + else if (getDeclarationFlagsFromSymbol(prop) & 32 /* Private */) { + var classDeclaration = getAncestor(node, 169 /* ClassDeclaration */); + if (!classDeclaration || !ts.contains(prop.parent.declarations, classDeclaration)) { + error(node, ts.Diagnostics.Property_0_is_inaccessible, getFullyQualifiedName(prop)); + } + } + } + return getTypeOfSymbol(prop); } - - if (!methodTypeSymbol) { - methodTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - methodSymbol.type = methodTypeSymbol; - methodTypeSymbol.setFunctionSymbol(methodSymbol); + return anyType; + } + function checkIndexedAccess(node) { + var objectType = checkExpression(node.object); + var indexType = checkExpression(node.index); + if (objectType === unknownType) + return unknownType; + var apparentType = getApparentType(objectType); + if (apparentType === unknownType) { + return unknownType; } - - methodDeclaration.setSymbol(methodSymbol); - methodSymbol.addDeclaration(methodDeclaration); - methodTypeSymbol.addDeclaration(methodDeclaration); - - var nameAST = methodAST.kind() === 135 /* MemberFunctionDeclaration */ ? methodAST.propertyName : methodAST.propertyName; - - TypeScript.Debug.assert(nameAST); - - this.semanticInfoChain.setSymbolForAST(nameAST, methodSymbol); - this.semanticInfoChain.setSymbolForAST(methodAST, methodSymbol); - - if (isOptional) { - methodSymbol.isOptional = true; + if (node.index.kind === 3 /* StringLiteral */ || node.index.kind === 2 /* NumericLiteral */) { + var name = node.index.text; + var prop = getPropertyOfApparentType(apparentType, name); + if (prop) { + return getTypeOfSymbol(prop); + } } - - if (!parentHadSymbol) { - parent.addMember(methodSymbol); + if (indexType.flags & (1 /* Any */ | ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike)) { + if (indexType.flags & (1 /* Any */ | ts.TypeFlags.NumberLike)) { + var numberIndexType = getIndexTypeOfType(apparentType, 1 /* Number */); + if (numberIndexType) { + return numberIndexType; + } + } + var stringIndexType = getIndexTypeOfType(apparentType, 0 /* String */); + if (stringIndexType) { + return stringIndexType; + } + if (program.getCompilerOptions().noImplicitAny && objectType !== anyType) { + error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type); + } + return anyType; } - - var sigKind = 1048576 /* CallSignature */; - - var signature = new TypeScript.PullSignatureSymbol(sigKind, !isSignature); - - var parameterList = TypeScript.ASTHelpers.getParameterList(methodAST); - if (TypeScript.lastParameterIsRest(parameterList)) { - signature.hasVarArgs = true; + error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_or_any); + return unknownType; + } + function resolveUntypedCall(node) { + ts.forEach(node.arguments, function (argument) { + checkExpression(argument); + }); + return anySignature; + } + function resolveErrorCall(node) { + resolveUntypedCall(node); + return unknownSignature; + } + function isCandidateSignature(node, signature) { + var args = node.arguments || emptyArray; + return args.length >= signature.minArgumentCount && (signature.hasRestParameter || args.length <= signature.parameters.length) && (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); + } + function collectCandidates(node, signatures) { + var result = []; + var lastParent; + var lastSymbol; + var cutoffPos = 0; + var pos; + for (var i = 0; i < signatures.length; i++) { + var signature = signatures[i]; + if (isCandidateSignature(node, signature)) { + var symbol = signature.declaration && getSymbolOfNode(signature.declaration); + var parent = signature.declaration && signature.declaration.parent; + if (!lastSymbol || symbol === lastSymbol) { + if (lastParent && parent === lastParent) { + pos++; + } + else { + lastParent = parent; + pos = cutoffPos; + } + } + else { + pos = cutoffPos = result.length; + lastParent = parent; + } + lastSymbol = symbol; + for (var j = result.length; j > pos; j--) { + result[j] = result[j - 1]; + } + result[pos] = signature; + } } - - var typeParameters = methodDeclaration.getTypeParameters(); - var typeParameter; - var typeParameterName; - var typeParameterAST; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameterName = typeParameters[i].name; - typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameters[i]); - - typeParameter = signature.findTypeParameter(typeParameterName); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameterName); - signature.addTypeParameter(typeParameter); - } else { - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); + return result; + } + function getSingleCallSignature(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) { + return resolved.callSignatures[0]; } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); } - - signature.addDeclaration(methodDeclaration); - methodDeclaration.setSignatureSymbol(signature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(methodDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), methodTypeSymbol, signature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(signature, methodTypeSymbol.getOwnCallSignatures()); - methodTypeSymbol.insertCallSignatureAtIndex(signature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindStaticPrototypePropertyOfClass = function (classAST, classTypeSymbol, constructorTypeSymbol) { - var prototypeStr = "prototype"; - - var prototypeSymbol = constructorTypeSymbol.findMember(prototypeStr, false); - if (prototypeSymbol && !prototypeSymbol.getIsSynthesized()) { - this.semanticInfoChain.addDiagnostic(TypeScript.PullHelpers.diagnosticFromDecl(prototypeSymbol.getDeclarations()[0], TypeScript.DiagnosticCode.Duplicate_identifier_0, [prototypeSymbol.getDisplayName()])); + return undefined; + } + function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) { + var context = createInferenceContext(signature.typeParameters); + forEachMatchingParameterType(contextualSignature, signature, function (source, target) { + inferTypes(context, instantiateType(source, contextualMapper), target); + }); + return getSignatureInstantiation(signature, getInferredTypes(context)); + } + function inferentiallyTypeExpession(expr, contextualType, contextualMapper) { + var type = checkExpressionWithContextualType(expr, contextualType, contextualMapper); + var signature = getSingleCallSignature(type); + if (signature && signature.typeParameters) { + var contextualSignature = getSingleCallSignature(contextualType); + if (contextualSignature && !contextualSignature.typeParameters) { + type = getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); + } } - - if (!prototypeSymbol || !prototypeSymbol.getIsSynthesized()) { - var prototypeDecl = new TypeScript.PullSynthesizedDecl(prototypeStr, prototypeStr, 4096 /* Property */, 4 /* Public */ | 16 /* Static */, constructorTypeSymbol.getDeclarations()[0], this.semanticInfoChain); - - prototypeSymbol = new TypeScript.PullSymbol(prototypeStr, 4096 /* Property */); - prototypeSymbol.setIsSynthesized(); - prototypeSymbol.addDeclaration(prototypeDecl); - prototypeSymbol.type = classTypeSymbol; - constructorTypeSymbol.addMember(prototypeSymbol); - - if (prototypeSymbol.type && prototypeSymbol.type.isGeneric()) { - var resolver = this.semanticInfoChain.getResolver(); - prototypeSymbol.type = resolver.instantiateTypeToAny(prototypeSymbol.type, new TypeScript.PullTypeResolutionContext(resolver)); + return type; + } + function inferTypeArguments(signature, args, excludeArgument) { + var typeParameters = signature.typeParameters; + var context = createInferenceContext(typeParameters); + var mapper = createInferenceMapper(context); + for (var i = 0; i < args.length; i++) { + if (!excludeArgument || excludeArgument[i] === undefined) { + var parameterType = getTypeAtPosition(signature, i); + inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); } - prototypeSymbol.setResolved(); } - }; - - PullSymbolBinder.prototype.bindConstructorDeclarationToPullSymbol = function (constructorDeclaration) { - var declKind = constructorDeclaration.kind; - var declFlags = constructorDeclaration.flags; - var constructorAST = this.semanticInfoChain.getASTForDecl(constructorDeclaration); - - var constructorName = constructorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - - var parent = this.getParent(constructorDeclaration, true); - - var parentHadSymbol = false; - - var constructorSymbol = parent.getConstructorMethod(); - var constructorTypeSymbol = null; - - if (constructorSymbol && (constructorSymbol.kind !== 32768 /* ConstructorMethod */ || (!isSignature && constructorSymbol.type && constructorSymbol.type.hasOwnConstructSignatures()))) { - var hasDefinitionSignature = false; - var constructorSigs = constructorSymbol.type.getOwnDeclaredConstructSignatures(); - - for (var i = 0; i < constructorSigs.length; i++) { - if (!constructorSigs[i].anyDeclHasFlag(2048 /* Signature */)) { - hasDefinitionSignature = true; - break; + if (excludeArgument) { + for (var i = 0; i < args.length; i++) { + if (excludeArgument[i] === false) { + var parameterType = getTypeAtPosition(signature, i); + inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); } } - - if (hasDefinitionSignature) { - this.semanticInfoChain.addDiagnosticFromAST(constructorAST, TypeScript.DiagnosticCode.Multiple_constructor_implementations_are_not_allowed); - - constructorSymbol = null; - } } - - if (constructorSymbol) { - constructorTypeSymbol = constructorSymbol.type; - } else { - constructorSymbol = new TypeScript.PullSymbol(constructorName, 32768 /* ConstructorMethod */); - constructorTypeSymbol = new TypeScript.PullTypeSymbol("", 33554432 /* ConstructorType */); + return getInferredTypes(context); + } + function checkTypeArguments(signature, typeArguments) { + var typeParameters = signature.typeParameters; + var result = []; + for (var i = 0; i < typeParameters.length; i++) { + var typeArgNode = typeArguments[i]; + var typeArgument = getTypeFromTypeNode(typeArgNode); + var constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (constraint && fullTypeCheck) { + checkTypeAssignableTo(typeArgument, constraint, typeArgNode, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + result.push(typeArgument); } - - parent.setConstructorMethod(constructorSymbol); - constructorSymbol.type = constructorTypeSymbol; - - constructorDeclaration.setSymbol(constructorSymbol); - constructorSymbol.addDeclaration(constructorDeclaration); - constructorTypeSymbol.addDeclaration(constructorDeclaration); - constructorSymbol.setIsSynthesized(false); - this.semanticInfoChain.setSymbolForAST(constructorAST, constructorSymbol); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */, !isSignature); - constructSignature.returnType = parent; - constructSignature.addTypeParametersFromReturnType(); - - constructSignature.addDeclaration(constructorDeclaration); - constructorDeclaration.setSignatureSymbol(constructSignature); - - this.bindParameterSymbols(constructorAST, TypeScript.ASTHelpers.parametersFromParameterList(constructorAST.callSignature.parameterList), constructorTypeSymbol, constructSignature); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; + return result; + } + function checkApplicableSignature(node, signature, relation, excludeArgument, reportErrors) { + if (node.arguments) { + for (var i = 0; i < node.arguments.length; i++) { + var arg = node.arguments[i]; + var paramType = getTypeAtPosition(signature, i); + var argType = arg.kind === 3 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); + var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1); + if (!isValidArgument) { + return false; + } + } } - - constructorTypeSymbol.appendConstructSignature(constructSignature); - }; - - PullSymbolBinder.prototype.bindConstructSignatureDeclarationToPullSymbol = function (constructSignatureDeclaration) { - var parent = this.getParent(constructSignatureDeclaration, true); - var constructorAST = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - - var constructSignature = new TypeScript.PullSignatureSymbol(2097152 /* ConstructSignature */); - - if (TypeScript.lastParameterIsRest(constructorAST.callSignature.parameterList)) { - constructSignature.hasVarArgs = true; + return true; + } + function resolveCall(node, signatures) { + ts.forEach(node.typeArguments, checkSourceElement); + var candidates = collectCandidates(node, signatures); + if (!candidates.length) { + error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + return resolveErrorCall(node); } - - var typeParameters = constructSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = constructSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - constructSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); + var args = node.arguments || emptyArray; + var excludeArgument; + for (var i = 0; i < args.length; i++) { + if (isContextSensitiveExpression(args[i])) { + if (!excludeArgument) + excludeArgument = new Array(args.length); + excludeArgument[i] = true; } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); } - - constructSignature.addDeclaration(constructSignatureDeclaration); - constructSignatureDeclaration.setSignatureSymbol(constructSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(TypeScript.ASTHelpers.getParameterList(funcDecl)), null, constructSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(constructSignatureDeclaration), constructSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(constructSignature, parent.getOwnDeclaredConstructSignatures()); - parent.insertConstructSignatureAtIndex(constructSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindCallSignatureDeclarationToPullSymbol = function (callSignatureDeclaration) { - var parent = this.getParent(callSignatureDeclaration, true); - var callSignatureAST = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - - var callSignature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */); - - if (TypeScript.lastParameterIsRest(callSignatureAST.parameterList)) { - callSignature.hasVarArgs = true; + var relation = candidates.length === 1 ? assignableRelation : subtypeRelation; + while (true) { + for (var i = 0; i < candidates.length; i++) { + while (true) { + var candidate = candidates[i]; + if (candidate.typeParameters) { + var typeArguments = node.typeArguments ? checkTypeArguments(candidate, node.typeArguments) : inferTypeArguments(candidate, args, excludeArgument); + candidate = getSignatureInstantiation(candidate, typeArguments); + } + if (!checkApplicableSignature(node, candidate, relation, excludeArgument, false)) { + break; + } + var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; + if (index < 0) { + return candidate; + } + excludeArgument[index] = false; + } + } + if (relation === assignableRelation) { + break; + } + relation = assignableRelation; } - - var typeParameters = callSignatureDeclaration.getTypeParameters(); - var typeParameter; - - for (var i = 0; i < typeParameters.length; i++) { - typeParameter = callSignature.findTypeParameter(typeParameters[i].name); - - if (!typeParameter) { - typeParameter = new TypeScript.PullTypeParameterSymbol(typeParameters[i].name); - - callSignature.addTypeParameter(typeParameter); - } else { - var typeParameterAST = this.semanticInfoChain.getASTForDecl(typeParameter.getDeclarations()[0]); - this.semanticInfoChain.addDiagnosticFromAST(typeParameterAST, TypeScript.DiagnosticCode.Duplicate_identifier_0, [typeParameter.getName()]); + checkApplicableSignature(node, candidate, relation, undefined, true); + return resolveErrorCall(node); + } + function resolveCallExpression(node) { + if (node.func.kind === 81 /* SuperKeyword */) { + var superType = checkSuperExpression(node.func, true); + if (superType !== unknownType) { + return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */)); } - - typeParameter.addDeclaration(typeParameters[i]); - typeParameters[i].setSymbol(typeParameter); + return resolveUntypedCall(node); } - - callSignature.addDeclaration(callSignatureDeclaration); - callSignatureDeclaration.setSignatureSymbol(callSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(callSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameterList(funcDecl.parameterList), null, callSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(callSignatureDeclaration), callSignature); - - var signatureIndex = this.getIndexForInsertingSignatureAtEndOfEnclosingDeclInSignatureList(callSignature, parent.getOwnCallSignatures()); - parent.insertCallSignatureAtIndex(callSignature, signatureIndex); - }; - - PullSymbolBinder.prototype.bindIndexSignatureDeclarationToPullSymbol = function (indexSignatureDeclaration) { - var indexSignature = new TypeScript.PullSignatureSymbol(4194304 /* IndexSignature */); - - indexSignature.addDeclaration(indexSignatureDeclaration); - indexSignatureDeclaration.setSignatureSymbol(indexSignature); - - var funcDecl = this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration); - this.bindParameterSymbols(funcDecl, TypeScript.ASTHelpers.parametersFromParameter(funcDecl.parameter), null, indexSignature); - - this.semanticInfoChain.setSymbolForAST(this.semanticInfoChain.getASTForDecl(indexSignatureDeclaration), indexSignature); - - var parent = this.getParent(indexSignatureDeclaration); - parent.addIndexSignature(indexSignature); - indexSignature.setContainer(parent); - }; - - PullSymbolBinder.prototype.bindGetAccessorDeclarationToPullSymbol = function (getAccessorDeclaration) { - var declKind = getAccessorDeclaration.kind; - var declFlags = getAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(getAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = getAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; + var funcType = checkExpression(node.func); + if (funcType === unknownType) { + return resolveErrorCall(node); } - - var parent = this.getParent(getAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var getterSymbol = null; - var getterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; + var apparentType = getApparentType(funcType); + if (apparentType === unknownType) { + return resolveErrorCall(node); } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, getAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - getterSymbol = accessorSymbol.getGetter(); - - if (getterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Getter_0_already_declared, [getAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - getterSymbol = null; - } + var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if ((funcType === anyType) || (!callSignatures.length && !constructSignatures.length && isTypeAssignableTo(funcType, globalFunctionType))) { + if (node.typeArguments) { + error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } + return resolveUntypedCall(node); } - - if (accessorSymbol) { - parentHadSymbol = true; + if (!callSignatures.length) { + if (constructSignatures.length) { + error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); + } + else { + error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature); + } + return resolveErrorCall(node); } - - if (accessorSymbol && getterSymbol) { - getterTypeSymbol = getterSymbol.type; + return resolveCall(node, callSignatures); + } + function resolveNewExpression(node) { + var expressionType = checkExpression(node.func); + if (expressionType === unknownType) { + return resolveErrorCall(node); } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); + if (expressionType === anyType) { + if (node.typeArguments) { + error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); + } + return resolveUntypedCall(node); } - - if (!getterSymbol) { - getterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - getterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - getterTypeSymbol.setFunctionSymbol(getterSymbol); - - getterSymbol.type = getterTypeSymbol; - - accessorSymbol.setGetter(getterSymbol); + expressionType = getApparentType(expressionType); + if (expressionType === unknownType) { + return resolveErrorCall(node); } - - getAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(getAccessorDeclaration); - getterSymbol.addDeclaration(getAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, getterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); + var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); + if (constructSignatures.length) { + return resolveCall(node, constructSignatures); } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(getAccessorDeclaration); - getAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), getterTypeSymbol, signature); - - getterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.bindSetAccessorDeclarationToPullSymbol = function (setAccessorDeclaration) { - var declKind = setAccessorDeclaration.kind; - var declFlags = setAccessorDeclaration.flags; - var funcDeclAST = this.semanticInfoChain.getASTForDecl(setAccessorDeclaration); - - var isExported = (declFlags & 1 /* Exported */) !== 0; - - var funcName = setAccessorDeclaration.name; - - var isSignature = (declFlags & 2048 /* Signature */) !== 0; - var isStatic = false; - - if (TypeScript.hasFlag(declFlags, 16 /* Static */)) { - isStatic = true; + var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); + if (callSignatures.length) { + var signature = resolveCall(node, callSignatures); + if (getReturnTypeOfSignature(signature) !== voidType) { + error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); + } + return signature; } - - var parent = this.getParent(setAccessorDeclaration, true); - var parentHadSymbol = false; - - var accessorSymbol = null; - var setterSymbol = null; - var setterTypeSymbol = null; - - if (isStatic) { - parent = parent.getConstructorMethod().type; + error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature); + return resolveErrorCall(node); + } + function getResolvedSignature(node) { + var links = getNodeLinks(node); + if (!links.resolvedSignature) { + links.resolvedSignature = anySignature; + links.resolvedSignature = node.kind === 132 /* CallExpression */ ? resolveCallExpression(node) : resolveNewExpression(node); } - - accessorSymbol = parent.findMember(funcName, false); - - if (accessorSymbol) { - if (!accessorSymbol.isAccessor()) { - this.semanticInfoChain.addDuplicateIdentifierDiagnosticFromAST(funcDeclAST.propertyName, setAccessorDeclaration.getDisplayName(), accessorSymbol.getDeclarations()[0].ast()); - accessorSymbol = null; - } else { - setterSymbol = accessorSymbol.getSetter(); - - if (setterSymbol) { - this.semanticInfoChain.addDiagnosticFromAST(funcDeclAST, TypeScript.DiagnosticCode.Setter_0_already_declared, [setAccessorDeclaration.getDisplayName()]); - accessorSymbol = null; - setterSymbol = null; + return links.resolvedSignature; + } + function checkCallExpression(node) { + var signature = getResolvedSignature(node); + if (node.func.kind === 81 /* SuperKeyword */) { + return voidType; + } + if (node.kind === 133 /* NewExpression */) { + var declaration = signature.declaration; + if (declaration && (declaration.kind !== 117 /* Constructor */ && declaration.kind !== 121 /* ConstructSignature */)) { + if (program.getCompilerOptions().noImplicitAny) { + error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); } + return anyType; } } - - if (accessorSymbol) { - parentHadSymbol = true; - - if (setterSymbol) { - setterTypeSymbol = setterSymbol.type; + return getReturnTypeOfSignature(signature); + } + function checkTypeAssertion(node) { + var exprType = checkExpression(node.operand); + var targetType = getTypeFromTypeNode(node.type); + if (fullTypeCheck && targetType !== unknownType) { + var widenedType = getWidenedType(exprType); + if (!(isTypeAssignableTo(exprType, targetType) || isTypeAssignableTo(targetType, widenedType))) { + checkTypeAssignableTo(targetType, widenedType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other); } } - - if (!accessorSymbol) { - accessorSymbol = new TypeScript.PullAccessorSymbol(funcName); + return targetType; + } + function getTypeAtPosition(signature, pos) { + return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType; + } + function assignContextualParameterTypes(signature, context, mapper) { + var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); + for (var i = 0; i < len; i++) { + var parameter = signature.parameters[i]; + var links = getSymbolLinks(parameter); + links.type = instantiateType(getTypeAtPosition(context, i), mapper); + } + if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) { + var parameter = signature.parameters[signature.parameters.length - 1]; + var links = getSymbolLinks(parameter); + links.type = instantiateType(getTypeOfSymbol(context.parameters[context.parameters.length - 1]), mapper); + } + } + function getReturnTypeFromBody(func, contextualMapper) { + if (func.body.kind !== 168 /* FunctionBlock */) { + var unwidenedType = checkAndMarkExpression(func.body, contextualMapper); + var widenedType = getWidenedType(unwidenedType); + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType)); + } + return widenedType; + } + var types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper); + if (types.length > 0) { + var commonType = getBestCommonType(types, undefined, true); + if (!commonType) { + error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); + return unknownType; + } + var widenedType = getWidenedType(commonType); + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + var typeName = typeToString(widenedType); + if (func.name) { + error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(func.name), typeName); + } + else { + error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); + } + } + return widenedType; + } + return voidType; + } + function forEachReturnStatement(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 154 /* ReturnStatement */: + return visitor(node); + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 150 /* ForStatement */: + case 151 /* ForInStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + case 159 /* LabelledStatement */: + case 161 /* TryStatement */: + case 162 /* TryBlock */: + case 163 /* CatchBlock */: + case 164 /* FinallyBlock */: + return ts.forEachChild(node, traverse); + } + } + } + function checkAndAggregateReturnExpressionTypes(body, contextualMapper) { + var aggregatedTypes = []; + forEachReturnStatement(body, function (returnStatement) { + var expr = returnStatement.expression; + if (expr) { + var type = checkAndMarkExpression(expr, contextualMapper); + if (!ts.contains(aggregatedTypes, type)) { + aggregatedTypes.push(type); + } + } + }); + return aggregatedTypes; + } + function bodyContainsAReturnStatement(funcBody) { + return forEachReturnStatement(funcBody, function (returnStatement) { + return true; + }); + } + function bodyContainsSingleThrowStatement(body) { + return (body.statements.length === 1) && (body.statements[0].kind === 160 /* ThrowStatement */); + } + function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { + if (!fullTypeCheck) { + return; } - - if (!setterSymbol) { - setterSymbol = new TypeScript.PullSymbol(funcName, 16384 /* Function */); - setterTypeSymbol = new TypeScript.PullTypeSymbol("", 16777216 /* FunctionType */); - setterTypeSymbol.setFunctionSymbol(setterSymbol); - - setterSymbol.type = setterTypeSymbol; - - accessorSymbol.setSetter(setterSymbol); + if (returnType === voidType || returnType === anyType) { + return; } - - setAccessorDeclaration.setSymbol(accessorSymbol); - accessorSymbol.addDeclaration(setAccessorDeclaration); - setterSymbol.addDeclaration(setAccessorDeclaration); - - var nameAST = funcDeclAST.propertyName; - this.semanticInfoChain.setSymbolForAST(nameAST, accessorSymbol); - this.semanticInfoChain.setSymbolForAST(funcDeclAST, setterSymbol); - - if (!parentHadSymbol) { - parent.addMember(accessorSymbol); + if (!func.body || func.body.kind !== 168 /* FunctionBlock */) { + return; } - - var signature = new TypeScript.PullSignatureSymbol(1048576 /* CallSignature */, !isSignature); - - signature.addDeclaration(setAccessorDeclaration); - setAccessorDeclaration.setSignatureSymbol(signature); - - this.bindParameterSymbols(funcDeclAST, TypeScript.ASTHelpers.parametersFromParameterList(funcDeclAST.parameterList), setterTypeSymbol, signature); - - setterTypeSymbol.appendCallSignature(signature); - }; - - PullSymbolBinder.prototype.getDeclsToBind = function (decl) { - var decls; - switch (decl.kind) { - case 64 /* Enum */: - case 32 /* DynamicModule */: - case 4 /* Container */: - case 16 /* Interface */: - decls = this.findDeclsInContext(decl, decl.kind, true); - break; - - case 512 /* Variable */: - case 16384 /* Function */: - case 65536 /* Method */: - case 32768 /* ConstructorMethod */: - decls = this.findDeclsInContext(decl, decl.kind, false); - break; - - default: - decls = [decl]; + var bodyBlock = func.body; + if (bodyContainsAReturnStatement(bodyBlock)) { + return; } - TypeScript.Debug.assert(decls && decls.length > 0); - TypeScript.Debug.assert(TypeScript.ArrayUtilities.contains(decls, decl)); - return decls; - }; - - PullSymbolBinder.prototype.shouldBindDeclaration = function (decl) { - return !decl.hasBeenBound() && this.declsBeingBound.indexOf(decl.declID) < 0; - }; - - PullSymbolBinder.prototype.bindDeclToPullSymbol = function (decl) { - if (this.shouldBindDeclaration(decl)) { - this.bindAllDeclsToPullSymbol(decl); + if (bodyContainsSingleThrowStatement(bodyBlock)) { + return; } - }; - - PullSymbolBinder.prototype.bindAllDeclsToPullSymbol = function (askedDecl) { - var allDecls = this.getDeclsToBind(askedDecl); - for (var i = 0; i < allDecls.length; i++) { - var decl = allDecls[i]; - - if (this.shouldBindDeclaration(decl)) { - this.bindSingleDeclToPullSymbol(decl); + error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement); + } + function checkFunctionExpression(node, contextualMapper) { + if (contextualMapper === identityMapper) { + return anyFunctionType; + } + var links = getNodeLinks(node); + var type = getTypeOfSymbol(node.symbol); + if (!(links.flags & 64 /* ContextChecked */)) { + var contextualSignature = getContextualSignature(node); + if (!(links.flags & 64 /* ContextChecked */)) { + links.flags |= 64 /* ContextChecked */; + if (contextualSignature) { + var signature = getSignaturesOfType(type, 0 /* Call */)[0]; + if (isContextSensitiveExpression(node)) { + assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); + } + if (!node.type) { + signature.resolvedReturnType = resolvingType; + var returnType = getReturnTypeFromBody(node, contextualMapper); + if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = returnType; + } + } + } } } - }; - - PullSymbolBinder.prototype.bindSingleDeclToPullSymbol = function (decl) { - this.declsBeingBound.push(decl.declID); - - switch (decl.kind) { - case 1 /* Script */: - var childDecls = decl.getChildDecls(); - for (var i = 0; i < childDecls.length; i++) { - this.bindDeclToPullSymbol(childDecls[i]); + if (fullTypeCheck && !(links.flags & 1 /* TypeChecked */)) { + checkSignatureDeclaration(node); + if (node.type) { + checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); + } + if (node.body.kind === 168 /* FunctionBlock */) { + checkSourceElement(node.body); + } + else { + var exprType = checkExpression(node.body); + if (node.type) { + checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, undefined, undefined); } - break; - - case 64 /* Enum */: - this.bindEnumDeclarationToPullSymbol(decl); - break; - - case 32 /* DynamicModule */: - case 4 /* Container */: - this.bindModuleDeclarationToPullSymbol(decl); - break; - - case 16 /* Interface */: - this.bindInterfaceDeclarationToPullSymbol(decl); - break; - - case 8 /* Class */: - this.bindClassDeclarationToPullSymbol(decl); - break; - - case 16384 /* Function */: - this.bindFunctionDeclarationToPullSymbol(decl); - break; - - case 512 /* Variable */: - this.bindVariableDeclarationToPullSymbol(decl); - break; - - case 1024 /* CatchVariable */: - this.bindCatchVariableToPullSymbol(decl); - break; - - case 67108864 /* EnumMember */: - this.bindEnumMemberDeclarationToPullSymbol(decl); - break; - - case 4096 /* Property */: - this.bindPropertyDeclarationToPullSymbol(decl); - break; - - case 65536 /* Method */: - this.bindMethodDeclarationToPullSymbol(decl); - break; - - case 32768 /* ConstructorMethod */: - this.bindConstructorDeclarationToPullSymbol(decl); - break; - - case 1048576 /* CallSignature */: - this.bindCallSignatureDeclarationToPullSymbol(decl); - break; - - case 2097152 /* ConstructSignature */: - this.bindConstructSignatureDeclarationToPullSymbol(decl); - break; - - case 4194304 /* IndexSignature */: - this.bindIndexSignatureDeclarationToPullSymbol(decl); - break; - - case 262144 /* GetAccessor */: - this.bindGetAccessorDeclarationToPullSymbol(decl); - break; - - case 524288 /* SetAccessor */: - this.bindSetAccessorDeclarationToPullSymbol(decl); - break; - - case 8388608 /* ObjectType */: - this.bindObjectTypeDeclarationToPullSymbol(decl); - break; - - case 16777216 /* FunctionType */: - this.bindFunctionTypeDeclarationToPullSymbol(decl); - break; - - case 33554432 /* ConstructorType */: - this.bindConstructorTypeDeclarationToPullSymbol(decl); - break; - - case 131072 /* FunctionExpression */: - this.bindFunctionExpressionToPullSymbol(decl); - break; - - case 128 /* TypeAlias */: - this.bindImportDeclaration(decl); - break; - - case 2048 /* Parameter */: - case 8192 /* TypeParameter */: - decl.getParentDecl().getSymbol(); - break; - - case 268435456 /* CatchBlock */: - case 134217728 /* WithBlock */: - break; - - default: - TypeScript.CompilerDiagnostics.assert(false, "Unrecognized type declaration"); + } + links.flags |= 1 /* TypeChecked */; } - - TypeScript.Debug.assert(TypeScript.ArrayUtilities.last(this.declsBeingBound) === decl.declID); - this.declsBeingBound.pop(); - }; - return PullSymbolBinder; - })(); - TypeScript.PullSymbolBinder = PullSymbolBinder; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (PullHelpers) { - function diagnosticFromDecl(decl, diagnosticKey, _arguments, additionalLocations) { - if (typeof _arguments === "undefined") { _arguments = null; } - if (typeof additionalLocations === "undefined") { additionalLocations = null; } - var ast = decl.ast(); - return decl.semanticInfoChain.diagnosticFromAST(ast, diagnosticKey, _arguments, additionalLocations); - } - PullHelpers.diagnosticFromDecl = diagnosticFromDecl; - - function resolveDeclaredSymbolToUseType(symbol) { - if (symbol.isSignature()) { - if (!symbol.returnType) { - symbol._resolveDeclaredSymbol(); + return type; + } + function checkArithmeticOperandType(operand, type, diagnostic) { + if (!(type.flags & (1 /* Any */ | ts.TypeFlags.NumberLike))) { + error(operand, diagnostic); + return false; + } + return true; + } + function checkReferenceExpression(n, message) { + function findSymbol(n) { + var symbol = getNodeLinks(n).resolvedSymbol; + return symbol && getExportSymbolOfValueSymbolIfExported(symbol); + } + function isReferenceOrErrorExpression(n) { + switch (n.kind) { + case 55 /* Identifier */: + var symbol = findSymbol(n); + return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 1 /* Variable */) !== 0; + case 130 /* PropertyAccess */: + var symbol = findSymbol(n); + return !symbol || symbol === unknownSymbol || (symbol.flags & ~4 /* EnumMember */) !== 0; + case 131 /* IndexedAccess */: + return true; + case 135 /* ParenExpression */: + return isReferenceOrErrorExpression(n.expression); + default: + return false; + } + } + if (!isReferenceOrErrorExpression(n)) { + error(n, message); + return false; + } + return true; + } + function checkPrefixExpression(node) { + var operandType = checkExpression(node.operand); + switch (node.operator) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + return numberType; + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + return booleanType; + case 87 /* TypeOfKeyword */: + return stringType; + case 89 /* VoidKeyword */: + return undefinedType; + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); + if (ok) { + checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); + } + return numberType; + } + return unknownType; + } + function checkPostfixExpression(node) { + var operandType = checkExpression(node.operand); + var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); + if (ok) { + checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); + } + return numberType; + } + function isTypeAnyTypeObjectTypeOrTypeParameter(type) { + return type === anyType || ((type.flags & (ts.TypeFlags.ObjectType | 512 /* TypeParameter */)) !== 0); + } + function checkInstanceOfExpression(node, leftType, rightType) { + if (!isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { + error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + if (rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { + error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); + } + return booleanType; + } + function checkInExpression(node, leftType, rightType) { + if (leftType !== anyType && leftType !== stringType && leftType !== numberType) { + error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number); + } + if (!isTypeAnyTypeObjectTypeOrTypeParameter(rightType)) { + error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + return booleanType; + } + function checkBinaryExpression(node, contextualMapper) { + var operator = node.operator; + var leftType = checkExpression(node.left, contextualMapper); + var rightType = checkExpression(node.right, contextualMapper); + switch (operator) { + case 26 /* AsteriskToken */: + case 46 /* AsteriskEqualsToken */: + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + case 28 /* PercentToken */: + case 48 /* PercentEqualsToken */: + case 25 /* MinusToken */: + case 45 /* MinusEqualsToken */: + case 31 /* LessThanLessThanToken */: + case 49 /* LessThanLessThanEqualsToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 50 /* GreaterThanGreaterThanEqualsToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + case 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 35 /* BarToken */: + case 53 /* BarEqualsToken */: + case 36 /* CaretToken */: + case 54 /* CaretEqualsToken */: + case 34 /* AmpersandToken */: + case 52 /* AmpersandEqualsToken */: + if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + leftType = rightType; + if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + rightType = leftType; + var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + if (leftOk && rightOk) { + checkAssignmentOperator(numberType); + } + return numberType; + case 24 /* PlusToken */: + case 44 /* PlusEqualsToken */: + if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + leftType = rightType; + if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + rightType = leftType; + var resultType; + if (leftType.flags & ts.TypeFlags.NumberLike && rightType.flags & ts.TypeFlags.NumberLike) { + resultType = numberType; + } + else if (leftType.flags & ts.TypeFlags.StringLike || rightType.flags & ts.TypeFlags.StringLike) { + resultType = stringType; + } + else if (leftType.flags & 1 /* Any */ || leftType === unknownType || rightType.flags & 1 /* Any */ || rightType === unknownType) { + resultType = anyType; + } + if (!resultType) { + reportOperatorError(); + return anyType; + } + if (operator === 44 /* PlusEqualsToken */) { + checkAssignmentOperator(resultType); + } + return resultType; + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + if (!isTypeSubtypeOf(leftType, rightType) && !isTypeSubtypeOf(rightType, leftType)) { + reportOperatorError(); + } + return booleanType; + case 77 /* InstanceOfKeyword */: + return checkInstanceOfExpression(node, leftType, rightType); + case 76 /* InKeyword */: + return checkInExpression(node, leftType, rightType); + case 39 /* AmpersandAmpersandToken */: + return rightType; + case 40 /* BarBarToken */: + return getBestCommonType([leftType, rightType], isInferentialContext(contextualMapper) ? undefined : getContextualType(node)); + case 43 /* EqualsToken */: + checkAssignmentOperator(rightType); + return rightType; + case 14 /* CommaToken */: + return rightType; + } + function checkAssignmentOperator(valueType) { + if (fullTypeCheck && operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { + var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); + if (ok) { + checkTypeAssignableTo(valueType, leftType, node.left, undefined, undefined); + } + } + } + function reportOperatorError() { + error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operator), typeToString(leftType), typeToString(rightType)); + } + } + function checkConditionalExpression(node, contextualMapper) { + checkExpression(node.condition); + var type1 = checkExpression(node.whenTrue, contextualMapper); + var type2 = checkExpression(node.whenFalse, contextualMapper); + var contextualType = isInferentialContext(contextualMapper) ? undefined : getContextualType(node); + var resultType = getBestCommonType([type1, type2], contextualType, true); + if (!resultType) { + if (contextualType) { + error(node, ts.Diagnostics.No_best_common_type_exists_between_0_1_and_2, typeToString(contextualType), typeToString(type1), typeToString(type2)); + } + else { + error(node, ts.Diagnostics.No_best_common_type_exists_between_0_and_1, typeToString(type1), typeToString(type2)); } - } else if (!symbol.type) { - symbol._resolveDeclaredSymbol(); + resultType = emptyObjectType; } + return resultType; } - PullHelpers.resolveDeclaredSymbolToUseType = resolveDeclaredSymbolToUseType; - - function getSignatureForFuncDecl(functionDecl) { - var funcDecl = functionDecl.ast(); - var funcSymbol = functionDecl.getSymbol(); - - if (!funcSymbol) { - funcSymbol = functionDecl.getSignatureSymbol(); + function checkExpressionWithContextualType(node, contextualType, contextualMapper) { + var saveContextualType = node.contextualType; + node.contextualType = contextualType; + var result = checkExpression(node, contextualMapper); + node.contextualType = saveContextualType; + return result; + } + function checkAndMarkExpression(node, contextualMapper) { + var result = checkExpression(node, contextualMapper); + getNodeLinks(node).flags |= 1 /* TypeChecked */; + return result; + } + function checkExpression(node, contextualMapper) { + switch (node.kind) { + case 55 /* Identifier */: + return checkIdentifier(node); + case 83 /* ThisKeyword */: + return checkThisExpression(node); + case 81 /* SuperKeyword */: + return checkSuperExpression(node, false); + case 79 /* NullKeyword */: + return nullType; + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + return booleanType; + case 2 /* NumericLiteral */: + return numberType; + case 3 /* StringLiteral */: + return stringType; + case 4 /* RegularExpressionLiteral */: + return globalRegExpType; + case 112 /* QualifiedName */: + return checkPropertyAccess(node); + case 127 /* ArrayLiteral */: + return checkArrayLiteral(node, contextualMapper); + case 128 /* ObjectLiteral */: + return checkObjectLiteral(node, contextualMapper); + case 130 /* PropertyAccess */: + return checkPropertyAccess(node); + case 131 /* IndexedAccess */: + return checkIndexedAccess(node); + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return checkCallExpression(node); + case 134 /* TypeAssertion */: + return checkTypeAssertion(node); + case 135 /* ParenExpression */: + return checkExpression(node.expression); + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return checkFunctionExpression(node, contextualMapper); + case 138 /* PrefixOperator */: + return checkPrefixExpression(node); + case 139 /* PostfixOperator */: + return checkPostfixExpression(node); + case 140 /* BinaryExpression */: + return checkBinaryExpression(node, contextualMapper); + case 141 /* ConditionalExpression */: + return checkConditionalExpression(node, contextualMapper); + } + return unknownType; + } + function checkTypeParameter(node) { + checkSourceElement(node.constraint); + if (fullTypeCheck) { + checkTypeParameterHasIllegalReferencesInConstraint(node); + checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); + } + } + function checkParameter(parameterDeclaration) { + checkVariableDeclaration(parameterDeclaration); + if (fullTypeCheck) { + checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); + if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + if (parameterDeclaration.flags & 8 /* Rest */) { + if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { + error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + } + } + else { + if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + } + } + } + function checkReferencesInInitializer(n) { + if (n.kind === 55 /* Identifier */) { + var referencedSymbol = getNodeLinks(n).resolvedSymbol; + if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(parameterDeclaration.parent.locals, referencedSymbol.name, ts.SymbolFlags.Value) === referencedSymbol) { + if (referencedSymbol.valueDeclaration.kind === 114 /* Parameter */) { + if (referencedSymbol.valueDeclaration === parameterDeclaration) { + error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.identifierToString(parameterDeclaration.name)); + return; + } + var enclosingOrReferencedParameter = ts.forEach(parameterDeclaration.parent.parameters, function (p) { return p === parameterDeclaration || p === referencedSymbol.valueDeclaration ? p : undefined; }); + if (enclosingOrReferencedParameter === referencedSymbol.valueDeclaration) { + return; + } + } + error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.identifierToString(parameterDeclaration.name), ts.identifierToString(n)); + } + } + else { + ts.forEachChild(n, checkReferencesInInitializer); + } } - - var functionSignature = null; - var typeSymbolWithAllSignatures = null; - if (funcSymbol.isSignature()) { - functionSignature = funcSymbol; - var parent = functionDecl.getParentDecl(); - typeSymbolWithAllSignatures = parent.getSymbol().type; - } else { - functionSignature = functionDecl.getSignatureSymbol(); - typeSymbolWithAllSignatures = funcSymbol.type; - } - var signatures; - - if (funcDecl.kind() === 137 /* ConstructorDeclaration */ || functionDecl.kind === 2097152 /* ConstructSignature */) { - signatures = typeSymbolWithAllSignatures.getConstructSignatures(); - } else if (functionDecl.kind === 4194304 /* IndexSignature */) { - signatures = typeSymbolWithAllSignatures.getIndexSignatures(); - } else { - signatures = typeSymbolWithAllSignatures.getCallSignatures(); + if (parameterDeclaration.initializer) { + checkReferencesInInitializer(parameterDeclaration.initializer); } - - return { - signature: functionSignature, - allSignatures: signatures - }; } - PullHelpers.getSignatureForFuncDecl = getSignatureForFuncDecl; - - function getAccessorSymbol(getterOrSetter, semanticInfoChain) { - var functionDecl = semanticInfoChain.getDeclForAST(getterOrSetter); - var getterOrSetterSymbol = functionDecl.getSymbol(); - - return getterOrSetterSymbol; + function checkSignatureDeclaration(node) { + checkTypeParameters(node.typeParameters); + ts.forEach(node.parameters, checkParameter); + if (node.type) { + checkSourceElement(node.type); + } + if (fullTypeCheck) { + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithArgumentsInGeneratedCode(node); + if (program.getCompilerOptions().noImplicitAny && !node.type) { + switch (node.kind) { + case 121 /* ConstructSignature */: + error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 120 /* CallSignature */: + error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } + } + } + checkSpecializedSignatureDeclaration(node); } - PullHelpers.getAccessorSymbol = getAccessorSymbol; - - function getGetterAndSetterFunction(funcDecl, semanticInfoChain) { - var accessorSymbol = PullHelpers.getAccessorSymbol(funcDecl, semanticInfoChain); - var result = { - getter: null, - setter: null - }; - var getter = accessorSymbol.getGetter(); - if (getter) { - var getterDecl = getter.getDeclarations()[0]; - result.getter = semanticInfoChain.getASTForDecl(getterDecl); + function checkTypeForDuplicateIndexSignatures(node) { + if (node.kind === 170 /* InterfaceDeclaration */) { + var nodeSymbol = getSymbolOfNode(node); + if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { + return; + } } - var setter = accessorSymbol.getSetter(); - if (setter) { - var setterDecl = setter.getDeclarations()[0]; - result.setter = semanticInfoChain.getASTForDecl(setterDecl); + var indexSymbol = getIndexSymbol(getSymbolOfNode(node)); + if (indexSymbol) { + var seenNumericIndexer = false; + var seenStringIndexer = false; + for (var i = 0, len = indexSymbol.declarations.length; i < len; ++i) { + var declaration = indexSymbol.declarations[i]; + if (declaration.parameters.length == 1 && declaration.parameters[0].type) { + switch (declaration.parameters[0].type.kind) { + case 110 /* StringKeyword */: + if (!seenStringIndexer) { + seenStringIndexer = true; + } + else { + error(declaration, ts.Diagnostics.Duplicate_string_index_signature); + } + break; + case 108 /* NumberKeyword */: + if (!seenNumericIndexer) { + seenNumericIndexer = true; + } + else { + error(declaration, ts.Diagnostics.Duplicate_number_index_signature); + } + break; + } + } + } } - - return result; } - PullHelpers.getGetterAndSetterFunction = getGetterAndSetterFunction; - - function symbolIsEnum(source) { - return source && (source.kind & (64 /* Enum */ | 67108864 /* EnumMember */)) !== 0; + function checkPropertyDeclaration(node) { + checkVariableDeclaration(node); } - PullHelpers.symbolIsEnum = symbolIsEnum; - - function symbolIsModule(symbol) { - return symbol && (symbol.kind === 4 /* Container */ || isOneDeclarationOfKind(symbol, 4 /* Container */)); + function checkMethodDeclaration(node) { + checkFunctionDeclaration(node); } - PullHelpers.symbolIsModule = symbolIsModule; - - function isOneDeclarationOfKind(symbol, kind) { - var decls = symbol.getDeclarations(); - for (var i = 0; i < decls.length; i++) { - if (decls[i].kind === kind) { + function checkConstructorDeclaration(node) { + checkSignatureDeclaration(node); + checkSourceElement(node.body); + var symbol = getSymbolOfNode(node); + var firstDeclaration = getDeclarationOfKind(symbol, node.kind); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(symbol); + } + if (!node.body) { + return; + } + if (!fullTypeCheck) { + return; + } + function isSuperCallExpression(n) { + return n.kind === 132 /* CallExpression */ && n.func.kind === 81 /* SuperKeyword */; + } + function containsSuperCall(n) { + if (isSuperCallExpression(n)) { return true; } + switch (n.kind) { + case 136 /* FunctionExpression */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + case 128 /* ObjectLiteral */: + return false; + default: + return ts.forEachChild(n, containsSuperCall); + } } - - return false; - } - - function isNameNumeric(name) { - return isFinite(+name); - } - PullHelpers.isNameNumeric = isNameNumeric; - - function typeSymbolsAreIdentical(a, b) { - if (a.isTypeReference() && !a.getIsSpecialized()) { - a = a.referencedTypeSymbol; + function markThisReferencesAsErrors(n) { + if (n.kind === 83 /* ThisKeyword */) { + error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + } + else if (n.kind !== 136 /* FunctionExpression */ && n.kind !== 167 /* FunctionDeclaration */) { + ts.forEachChild(n, markThisReferencesAsErrors); + } } - - if (b.isTypeReference() && !b.getIsSpecialized()) { - b = b.referencedTypeSymbol; + function isInstancePropertyWithInitializer(n) { + return n.kind === 115 /* Property */ && !(n.flags & 64 /* Static */) && !!n.initializer; } - - return a === b; - } - PullHelpers.typeSymbolsAreIdentical = typeSymbolsAreIdentical; - - function getRootType(type) { - var rootType = type.getRootSymbol(); - - while (true) { - if (type === rootType) { - return type; + if (node.parent.baseType) { + if (containsSuperCall(node.body)) { + var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 /* Public */ | 32 /* Private */); }); + if (superCallShouldBeFirst) { + var statements = node.body.statements; + if (!statements.length || statements[0].kind !== 146 /* ExpressionStatement */ || !isSuperCallExpression(statements[0].expression)) { + error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); + } + else { + markThisReferencesAsErrors(statements[0].expression); + } + } + } + else { + error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); } - - type = rootType; - rootType = type.getRootSymbol(); } } - PullHelpers.getRootType = getRootType; - - function isSymbolLocal(symbol) { - var container = symbol.getContainer(); - if (container) { - var containerKind = container.kind; - if (containerKind & (1032192 /* SomeFunction */ | 16777216 /* FunctionType */)) { - return true; + function checkAccessorDeclaration(node) { + if (fullTypeCheck) { + if (node.kind === 118 /* GetAccessor */) { + if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { + error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + } } - - if (containerKind === 33554432 /* ConstructorType */ && !symbol.anyDeclHasFlag(16 /* Static */ | 1 /* Exported */)) { - return true; + var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; + var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); + if (otherAccessor) { + var visibilityFlags = 32 /* Private */ | 16 /* Public */; + if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { + error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); + } + var thisType = getAnnotatedAccessorType(node); + var otherType = getAnnotatedAccessorType(otherAccessor); + if (thisType && otherType) { + if (!isTypeIdenticalTo(thisType, otherType)) { + error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + } + } } } - - return false; - } - PullHelpers.isSymbolLocal = isSymbolLocal; - - function isExportedSymbolInClodule(symbol) { - var container = symbol.getContainer(); - return container && container.kind === 33554432 /* ConstructorType */ && symbolIsModule(container) && symbol.anyDeclHasFlag(1 /* Exported */); + checkFunctionDeclaration(node); + checkAndStoreTypeOfAccessors(getSymbolOfNode(node)); } - PullHelpers.isExportedSymbolInClodule = isExportedSymbolInClodule; - - function isSymbolDeclaredInScopeChain(symbol, scopeSymbol) { - TypeScript.Debug.assert(symbol); - var symbolDeclarationScope = symbol.getContainer(); - - while (scopeSymbol) { - if (scopeSymbol === symbolDeclarationScope) { - return true; + function checkTypeReference(node) { + var type = getTypeFromTypeReferenceNode(node); + if (type !== unknownType && node.typeArguments) { + var len = node.typeArguments.length; + for (var i = 0; i < len; i++) { + checkSourceElement(node.typeArguments[i]); + var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]); + if (fullTypeCheck && constraint) { + var typeArgument = type.typeArguments[i]; + checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } } - - scopeSymbol = scopeSymbol.getContainer(); } - - if (scopeSymbol === null && symbolDeclarationScope === null) { - return true; + } + function checkTypeQuery(node) { + getTypeFromTypeQueryNode(node); + } + function checkTypeLiteral(node) { + ts.forEach(node.members, checkSourceElement); + if (fullTypeCheck) { + var type = getTypeFromTypeLiteralNode(node); + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); } - - return false; } - PullHelpers.isSymbolDeclaredInScopeChain = isSymbolDeclaredInScopeChain; - - - - function walkSignatureSymbol(signatureSymbol, walker) { - var continueWalk = true; - var parameters = signatureSymbol.parameters; - if (parameters) { - for (var i = 0; continueWalk && i < parameters.length; i++) { - continueWalk = walker.signatureParameterWalk(parameters[i]); + function checkArrayType(node) { + getTypeFromArrayTypeNode(node); + } + function isPrivateWithinAmbient(node) { + return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); + } + function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { + if (!fullTypeCheck) { + return; + } + var signature = getSignatureFromDeclaration(signatureDeclarationNode); + if (!signature.hasStringLiterals) { + return; + } + if (signatureDeclarationNode.body) { + error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type); + return; + } + var symbol = getSymbolOfNode(signatureDeclarationNode); + var signaturesToCheck; + if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 170 /* InterfaceDeclaration */) { + ts.Debug.assert(signatureDeclarationNode.kind === 120 /* CallSignature */ || signatureDeclarationNode.kind === 121 /* ConstructSignature */); + var signatureKind = signatureDeclarationNode.kind === 120 /* CallSignature */ ? 0 /* Call */ : 1 /* Construct */; + var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent); + var containingType = getDeclaredTypeOfSymbol(containingSymbol); + signaturesToCheck = getSignaturesOfType(containingType, signatureKind); + } + else { + signaturesToCheck = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode)); + } + for (var i = 0; i < signaturesToCheck.length; i++) { + var otherSignature = signaturesToCheck[i]; + if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) { + return; } } - - if (continueWalk) { - continueWalk = walker.signatureReturnTypeWalk(signatureSymbol.returnType); + error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature); + } + function getEffectiveDeclarationFlags(n, flagsToCheck) { + var flags = n.flags; + if (n.parent.kind !== 170 /* InterfaceDeclaration */ && ts.isInAmbientContext(n)) { + if (!(flags & 2 /* Ambient */)) { + flags |= 1 /* Export */; + } + flags |= 2 /* Ambient */; } - - return continueWalk; + return flags & flagsToCheck; } - - function walkPullTypeSymbolStructure(typeSymbol, walker) { - var continueWalk = true; - - var members = typeSymbol.getMembers(); - for (var i = 0; continueWalk && i < members.length; i++) { - continueWalk = walker.memberSymbolWalk(members[i]); + function checkFunctionOrConstructorSymbol(symbol) { + if (!fullTypeCheck) { + return; } - - if (continueWalk) { - var callSigantures = typeSymbol.getCallSignatures(); - for (var i = 0; continueWalk && i < callSigantures.length; i++) { - continueWalk = walker.callSignatureWalk(callSigantures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(callSigantures[i], walker); - } + function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { + var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; + if (someButNotAllOverloadFlags !== 0) { + var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent; + var canonicalFlags = implementationSharesContainerWithFirstOverload ? getEffectiveDeclarationFlags(implementation, flagsToCheck) : getEffectiveDeclarationFlags(overloads[0], flagsToCheck); + ts.forEach(overloads, function (o) { + var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags; + if (deviation & 1 /* Export */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported); + } + else if (deviation & 2 /* Ambient */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } + else if (deviation & 32 /* Private */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_or_private); + } + else if (deviation & 4 /* QuestionMark */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required); + } + }); } } - - if (continueWalk) { - var constructSignatures = typeSymbol.getConstructSignatures(); - for (var i = 0; continueWalk && i < constructSignatures.length; i++) { - continueWalk = walker.constructSignatureWalk(constructSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(constructSignatures[i], walker); + var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 32 /* Private */ | 4 /* QuestionMark */; + var someNodeFlags = 0; + var allNodeFlags = flagsToCheck; + var hasOverloads = false; + var bodyDeclaration; + var lastSeenNonAmbientDeclaration; + var previousDeclaration; + var declarations = symbol.declarations; + var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; + function reportImplementationExpectedError(node) { + var seen = false; + var subsequentNode = ts.forEachChild(node.parent, function (c) { + if (seen) { + return c; + } + else { + seen = c === node; + } + }); + if (subsequentNode) { + if (subsequentNode.kind === node.kind) { + var errorNode = subsequentNode.name || subsequentNode; + if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { + ts.Debug.assert(node.kind === 116 /* Method */); + ts.Debug.assert((node.flags & 64 /* Static */) !== (subsequentNode.flags & 64 /* Static */)); + var diagnostic = node.flags & 64 /* Static */ ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; + error(errorNode, diagnostic); + return; + } + else if (subsequentNode.body) { + error(errorNode, ts.Diagnostics.Function_implementation_name_must_be_0, ts.identifierToString(node.name)); + return; + } } } + var errorNode = node.name || node; + if (isConstructor) { + error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing); + } + else { + error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); + } } - - if (continueWalk) { - var indexSignatures = typeSymbol.getIndexSignatures(); - for (var i = 0; continueWalk && i < indexSignatures.length; i++) { - continueWalk = walker.indexSignatureWalk(indexSignatures[i]); - if (continueWalk) { - continueWalk = walkSignatureSymbol(indexSignatures[i], walker); + var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & ts.SymbolFlags.Module; + for (var i = 0; i < declarations.length; i++) { + var node = declarations[i]; + var inAmbientContext = ts.isInAmbientContext(node); + var inAmbientContextOrInterface = node.parent.kind === 170 /* InterfaceDeclaration */ || node.parent.kind === 125 /* TypeLiteral */ || inAmbientContext; + if (inAmbientContextOrInterface) { + previousDeclaration = undefined; + } + if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */) { + var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); + someNodeFlags |= currentNodeFlags; + allNodeFlags &= currentNodeFlags; + if (node.body && bodyDeclaration) { + if (isConstructor) { + error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + } + else { + error(node, ts.Diagnostics.Duplicate_function_implementation); + } + } + else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + reportImplementationExpectedError(previousDeclaration); + } + if (node.body) { + if (!bodyDeclaration) { + bodyDeclaration = node; + } + } + else { + hasOverloads = true; + } + previousDeclaration = node; + if (!inAmbientContextOrInterface) { + lastSeenNonAmbientDeclaration = node; } } } - } - PullHelpers.walkPullTypeSymbolStructure = walkPullTypeSymbolStructure; - - var OtherPullDeclsWalker = (function () { - function OtherPullDeclsWalker() { - this.currentlyWalkingOtherDecls = []; - } - OtherPullDeclsWalker.prototype.walkOtherPullDecls = function (currentDecl, otherDecls, callBack) { - if (otherDecls) { - var isAlreadyWalkingOtherDecl = TypeScript.ArrayUtilities.any(this.currentlyWalkingOtherDecls, function (inWalkingOtherDecl) { - return TypeScript.ArrayUtilities.contains(otherDecls, inWalkingOtherDecl); - }); - - if (!isAlreadyWalkingOtherDecl) { - this.currentlyWalkingOtherDecls.push(currentDecl); - for (var i = 0; i < otherDecls.length; i++) { - if (otherDecls[i] !== currentDecl) { - callBack(otherDecls[i]); + if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { + reportImplementationExpectedError(lastSeenNonAmbientDeclaration); + } + if (hasOverloads) { + checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); + if (bodyDeclaration) { + var signatures = getSignaturesOfSymbol(symbol); + var bodySignature = getSignatureFromDeclaration(bodyDeclaration); + if (!bodySignature.hasStringLiterals) { + for (var i = 0, len = signatures.length; i < len; ++i) { + if (!signatures[i].hasStringLiterals && !isSignatureAssignableTo(bodySignature, signatures[i])) { + error(signatures[i].declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation); + break; } } - var currentlyWalkingOtherDeclsDecl = this.currentlyWalkingOtherDecls.pop(); - TypeScript.Debug.assert(currentlyWalkingOtherDeclsDecl == currentDecl); } } - }; - return OtherPullDeclsWalker; - })(); - PullHelpers.OtherPullDeclsWalker = OtherPullDeclsWalker; - })(TypeScript.PullHelpers || (TypeScript.PullHelpers = {})); - var PullHelpers = TypeScript.PullHelpers; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var WrapsTypeParameterCache = (function () { - function WrapsTypeParameterCache() { - this._wrapsTypeParameterCache = TypeScript.BitVector.getBitVector(true); + } } - WrapsTypeParameterCache.prototype.getWrapsTypeParameter = function (typeParameterArgumentMap) { - var mapHasTypeParameterNotCached = false; - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - var cachedValue = this._wrapsTypeParameterCache.valueAt(typeParameterID); - if (cachedValue) { - return typeParameterID; + function checkExportsOnMergedDeclarations(node) { + if (!fullTypeCheck) { + return; + } + var symbol; + var symbol = node.localSymbol; + if (!symbol) { + symbol = getSymbolOfNode(node); + if (!(symbol.flags & ts.SymbolFlags.Export)) { + return; + } + } + if (getDeclarationOfKind(symbol, node.kind) !== node) { + return; + } + var exportedDeclarationSpaces = 0; + var nonExportedDeclarationSpaces = 0; + ts.forEach(symbol.declarations, function (d) { + var declarationSpaces = getDeclarationSpaces(d); + if (getEffectiveDeclarationFlags(d, 1 /* Export */)) { + exportedDeclarationSpaces |= declarationSpaces; + } + else { + nonExportedDeclarationSpaces |= declarationSpaces; + } + }); + var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces; + if (commonDeclarationSpace) { + ts.forEach(symbol.declarations, function (d) { + if (getDeclarationSpaces(d) & commonDeclarationSpace) { + error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.identifierToString(d.name)); } - mapHasTypeParameterNotCached = mapHasTypeParameterNotCached || cachedValue === undefined; + }); + } + function getDeclarationSpaces(d) { + switch (d.kind) { + case 170 /* InterfaceDeclaration */: + return 1048576 /* ExportType */; + case 172 /* ModuleDeclaration */: + return d.name.kind === 3 /* StringLiteral */ || ts.isInstantiated(d) ? 2097152 /* ExportNamespace */ | 524288 /* ExportValue */ : 2097152 /* ExportNamespace */; + case 169 /* ClassDeclaration */: + case 171 /* EnumDeclaration */: + return 1048576 /* ExportType */ | 524288 /* ExportValue */; + case 174 /* ImportDeclaration */: + var result = 0; + var target = resolveImport(getSymbolOfNode(d)); + ts.forEach(target.declarations, function (d) { + result |= getDeclarationSpaces(d); + }); + return result; + default: + return 524288 /* ExportValue */; } } - - if (!mapHasTypeParameterNotCached) { - return 0; + } + function checkFunctionDeclaration(node) { + checkSignatureDeclaration(node); + var symbol = getSymbolOfNode(node); + var localSymbol = node.localSymbol || symbol; + var firstDeclaration = getDeclarationOfKind(localSymbol, node.kind); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(localSymbol); } - - return undefined; - }; - - WrapsTypeParameterCache.prototype.setWrapsTypeParameter = function (typeParameterArgumentMap, wrappingTypeParameterID) { - if (wrappingTypeParameterID) { - this._wrapsTypeParameterCache.setValueAt(wrappingTypeParameterID, true); - } else { - for (var typeParameterID in typeParameterArgumentMap) { - if (typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - this._wrapsTypeParameterCache.setValueAt(typeParameterID, false); + if (symbol.parent) { + if (getDeclarationOfKind(symbol, node.kind) === node) { + checkFunctionOrConstructorSymbol(symbol); + } + } + checkSourceElement(node.body); + if (node.type && !isAccessor(node.kind)) { + checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); + } + if (fullTypeCheck && program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { + if (!isPrivateWithinAmbient(node)) { + var typeName = typeToString(anyType); + if (node.name) { + error(node, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(node.name), typeName); + } + else { + error(node, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); + } + } + } + } + function checkBlock(node) { + ts.forEach(node.statements, checkSourceElement); + } + function checkCollisionWithArgumentsInGeneratedCode(node) { + if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || !node.body) { + return; + } + ts.forEach(node.parameters, function (p) { + if (p.name && p.name.text === argumentsSymbol.name) { + error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); + } + }); + } + function checkCollisionWithIndexVariableInGeneratedCode(node, name) { + if (!(name && name.text === "_i")) { + return; + } + if (node.kind === 114 /* Parameter */) { + if (node.parent.body && ts.hasRestParameters(node.parent) && !ts.isInAmbientContext(node)) { + error(node, ts.Diagnostics.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter); + } + return; + } + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol === unknownSymbol) { + return; + } + var current = node; + while (current) { + var definedOnCurrentLevel = ts.forEach(symbol.declarations, function (d) { return d.parent === current ? d : undefined; }); + if (definedOnCurrentLevel) { + return; + } + switch (current.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 116 /* Method */: + case 137 /* ArrowFunction */: + case 117 /* Constructor */: + if (ts.hasRestParameters(current)) { + error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter); + return; + } + break; + } + current = current.parent; + } + } + function needCollisionCheckForIdentifier(node, identifier, name) { + if (!(identifier && identifier.text === name)) { + return false; + } + if (node.kind === 115 /* Property */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { + return false; + } + if (ts.isInAmbientContext(node)) { + return false; + } + if (node.kind === 114 /* Parameter */ && !node.parent.body) { + return false; + } + return true; + } + function checkCollisionWithCapturedThisVariable(node, name) { + if (!needCollisionCheckForIdentifier(node, name, "_this")) { + return; + } + potentialThisCollisions.push(node); + } + function checkIfThisIsCapturedInEnclosingScope(node) { + var current = node; + while (current) { + if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { + var isDeclaration = node.kind !== 55 /* Identifier */; + if (isDeclaration) { + error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); + } + else { + error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference); + } + return; + } + current = current.parent; + } + } + function checkCollisionWithCapturedSuperVariable(node, name) { + if (!needCollisionCheckForIdentifier(node, name, "_super")) { + return; + } + var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); + if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) { + return; + } + if (enclosingClass.baseType) { + var isDeclaration = node.kind !== 55 /* Identifier */; + if (isDeclaration) { + error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference); + } + else { + error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference); + } + } + } + function checkVariableDeclaration(node) { + checkSourceElement(node.type); + checkExportsOnMergedDeclarations(node); + if (fullTypeCheck) { + var symbol = getSymbolOfNode(node); + var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); + var type; + var useTypeFromValueDeclaration = node === symbol.valueDeclaration; + if (useTypeFromValueDeclaration) { + type = typeOfValueDeclaration; + } + else { + type = getTypeOfVariableDeclaration(node); + } + if (node.initializer) { + if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { + checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined, undefined); + } + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + if (!useTypeFromValueDeclaration) { + if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { + error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); } } } - }; - return WrapsTypeParameterCache; - })(); - TypeScript.WrapsTypeParameterCache = WrapsTypeParameterCache; - - (function (PullInstantiationHelpers) { - var MutableTypeArgumentMap = (function () { - function MutableTypeArgumentMap(typeParameterArgumentMap) { - this.typeParameterArgumentMap = typeParameterArgumentMap; - this.createdDuplicateTypeArgumentMap = false; - } - MutableTypeArgumentMap.prototype.ensureTypeArgumentCopy = function () { - if (!this.createdDuplicateTypeArgumentMap) { - var passedInTypeArgumentMap = this.typeParameterArgumentMap; - this.typeParameterArgumentMap = []; - for (var typeParameterID in passedInTypeArgumentMap) { - if (passedInTypeArgumentMap.hasOwnProperty(typeParameterID)) { - this.typeParameterArgumentMap[typeParameterID] = passedInTypeArgumentMap[typeParameterID]; - } - } - this.createdDuplicateTypeArgumentMap = true; - } - }; - return MutableTypeArgumentMap; - })(); - PullInstantiationHelpers.MutableTypeArgumentMap = MutableTypeArgumentMap; - - function instantiateTypeArgument(resolver, symbol, mutableTypeParameterMap) { - if (symbol.getIsSpecialized()) { - var rootTypeArgumentMap = symbol.getTypeParameterArgumentMap(); - var newTypeArgumentMap = []; - var allowedTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - var typeArg = rootTypeArgumentMap[typeParameterID]; - if (typeArg) { - newTypeArgumentMap[typeParameterID] = resolver.instantiateType(typeArg, mutableTypeParameterMap.typeParameterArgumentMap); - } + } + function checkVariableStatement(node) { + ts.forEach(node.declarations, checkVariableDeclaration); + } + function checkExpressionStatement(node) { + checkExpression(node.expression); + } + function checkIfStatement(node) { + checkExpression(node.expression); + checkSourceElement(node.thenStatement); + checkSourceElement(node.elseStatement); + } + function checkDoStatement(node) { + checkSourceElement(node.statement); + checkExpression(node.expression); + } + function checkWhileStatement(node) { + checkExpression(node.expression); + checkSourceElement(node.statement); + } + function checkForStatement(node) { + if (node.declarations) + ts.forEach(node.declarations, checkVariableDeclaration); + if (node.initializer) + checkExpression(node.initializer); + if (node.condition) + checkExpression(node.condition); + if (node.iterator) + checkExpression(node.iterator); + checkSourceElement(node.statement); + } + function checkForInStatement(node) { + if (node.declaration) { + checkVariableDeclaration(node.declaration); + if (node.declaration.type) { + error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + } + } + if (node.variable) { + var exprType = checkExpression(node.variable); + if (exprType !== anyType && exprType !== stringType) { + error(node.variable, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any); } - - for (var i = 0; i < allowedTypeParameters.length; i++) { - var typeParameterID = allowedTypeParameters[i].pullSymbolID; - if (newTypeArgumentMap[typeParameterID] && mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] != newTypeArgumentMap[typeParameterID]) { - mutableTypeParameterMap.ensureTypeArgumentCopy(); - mutableTypeParameterMap.typeParameterArgumentMap[typeParameterID] = newTypeArgumentMap[typeParameterID]; - } + else { + checkReferenceExpression(node.variable, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement); } } + var exprType = checkExpression(node.expression); + if (!isTypeAnyTypeObjectTypeOrTypeParameter(exprType) && exprType !== unknownType) { + error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + checkSourceElement(node.statement); } - PullInstantiationHelpers.instantiateTypeArgument = instantiateTypeArgument; - - function cleanUpTypeArgumentMap(symbol, mutableTypeArgumentMap) { - var allowedToReferenceTypeParameters = symbol.getAllowedToReferenceTypeParameters(); - for (var typeParameterID in mutableTypeArgumentMap.typeParameterArgumentMap) { - if (mutableTypeArgumentMap.typeParameterArgumentMap.hasOwnProperty(typeParameterID)) { - if (!TypeScript.ArrayUtilities.any(allowedToReferenceTypeParameters, function (typeParameter) { - return typeParameter.pullSymbolID == typeParameterID; - })) { - mutableTypeArgumentMap.ensureTypeArgumentCopy(); - delete mutableTypeArgumentMap.typeParameterArgumentMap[typeParameterID]; - } + function checkBreakOrContinueStatement(node) { + } + function getContainingFunction(node) { + while (true) { + node = node.parent; + if (!node || node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 137 /* ArrowFunction */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { + return node; } } } - PullInstantiationHelpers.cleanUpTypeArgumentMap = cleanUpTypeArgumentMap; - - function getAllowedToReferenceTypeParametersFromDecl(decl) { - var allowedToReferenceTypeParameters = []; - - var allowedToUseDeclTypeParameters = false; - var getTypeParametersFromParentDecl = false; - - switch (decl.kind) { - case 65536 /* Method */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - allowedToUseDeclTypeParameters = true; - break; + function checkReturnStatement(node) { + if (node.expression && !(getNodeLinks(node.expression).flags & 1 /* TypeChecked */)) { + var func = getContainingFunction(node); + if (func) { + if (func.kind === 119 /* SetAccessor */) { + if (node.expression) { + error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); + } } - - case 16777216 /* FunctionType */: - case 33554432 /* ConstructorType */: - case 2097152 /* ConstructSignature */: - case 1048576 /* CallSignature */: - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - allowedToUseDeclTypeParameters = true; - getTypeParametersFromParentDecl = true; - break; - - case 4096 /* Property */: - if (TypeScript.hasFlag(decl.flags, 16 /* Static */)) { - break; + else { + var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); + var checkAssignability = func.type || (func.kind === 118 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 119 /* SetAccessor */))); + if (checkAssignability) { + checkTypeAssignableTo(checkExpression(node.expression), returnType, node.expression, undefined, undefined); + } + else if (func.kind == 117 /* Constructor */) { + if (!isTypeAssignableTo(checkExpression(node.expression), returnType)) { + error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); + } + } } - - case 2048 /* Parameter */: - case 262144 /* GetAccessor */: - case 524288 /* SetAccessor */: - case 32768 /* ConstructorMethod */: - case 4194304 /* IndexSignature */: - case 8388608 /* ObjectType */: - case 256 /* ObjectLiteral */: - case 8192 /* TypeParameter */: - getTypeParametersFromParentDecl = true; - break; - - case 8 /* Class */: - case 16 /* Interface */: - allowedToUseDeclTypeParameters = true; - break; - } - - if (getTypeParametersFromParentDecl) { - allowedToReferenceTypeParameters = allowedToReferenceTypeParameters.concat(getAllowedToReferenceTypeParametersFromDecl(decl.getParentDecl())); - } - - if (allowedToUseDeclTypeParameters) { - var typeParameterDecls = decl.getTypeParameters(); - for (var i = 0; i < typeParameterDecls.length; i++) { - allowedToReferenceTypeParameters.push(typeParameterDecls[i].getSymbol()); } } - - return allowedToReferenceTypeParameters; - } - PullInstantiationHelpers.getAllowedToReferenceTypeParametersFromDecl = getAllowedToReferenceTypeParametersFromDecl; - - function createTypeParameterArgumentMap(typeParameters, typeArguments) { - return updateTypeParameterArgumentMap(typeParameters, typeArguments, {}); } - PullInstantiationHelpers.createTypeParameterArgumentMap = createTypeParameterArgumentMap; - - function updateTypeParameterArgumentMap(typeParameters, typeArguments, typeParameterArgumentMap) { - for (var i = 0; i < typeParameters.length; i++) { - typeParameterArgumentMap[typeParameters[i].getRootSymbol().pullSymbolID] = typeArguments[i]; - } - return typeParameterArgumentMap; + function checkWithStatement(node) { + checkExpression(node.expression); + error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any); } - PullInstantiationHelpers.updateTypeParameterArgumentMap = updateTypeParameterArgumentMap; - - function updateMutableTypeParameterArgumentMap(typeParameters, typeArguments, mutableMap) { - for (var i = 0; i < typeParameters.length; i++) { - var typeParameterId = typeParameters[i].getRootSymbol().pullSymbolID; - if (mutableMap.typeParameterArgumentMap[typeParameterId] !== typeArguments[i]) { - mutableMap.ensureTypeArgumentCopy(); - mutableMap.typeParameterArgumentMap[typeParameterId] = typeArguments[i]; + function checkSwitchStatement(node) { + var expressionType = checkExpression(node.expression); + ts.forEach(node.clauses, function (clause) { + if (fullTypeCheck && clause.expression) { + var caseType = checkExpression(clause.expression); + if (!isTypeAssignableTo(expressionType, caseType)) { + checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined, undefined); + } } - } + checkBlock(clause); + }); } - PullInstantiationHelpers.updateMutableTypeParameterArgumentMap = updateMutableTypeParameterArgumentMap; - - function twoTypesAreInstantiationsOfSameNamedGenericType(type1, type2) { - var type1IsGeneric = type1.isGeneric() && type1.getTypeArguments() !== null; - var type2IsGeneric = type2.isGeneric() && type2.getTypeArguments() !== null; - - if (type1IsGeneric && type2IsGeneric) { - var type1Root = TypeScript.PullHelpers.getRootType(type1); - var type2Root = TypeScript.PullHelpers.getRootType(type2); - return type1Root === type2Root; - } - - return false; + function checkLabelledStatement(node) { + checkSourceElement(node.statement); } - PullInstantiationHelpers.twoTypesAreInstantiationsOfSameNamedGenericType = twoTypesAreInstantiationsOfSameNamedGenericType; - })(TypeScript.PullInstantiationHelpers || (TypeScript.PullInstantiationHelpers = {})); - var PullInstantiationHelpers = TypeScript.PullInstantiationHelpers; -})(TypeScript || (TypeScript = {})); -if (Error) - Error.stackTraceLimit = 1000; - -var TypeScript; -(function (TypeScript) { - TypeScript.fileResolutionTime = 0; - TypeScript.fileResolutionIOTime = 0; - TypeScript.fileResolutionScanImportsTime = 0; - TypeScript.fileResolutionImportFileSearchTime = 0; - TypeScript.fileResolutionGetDefaultLibraryTime = 0; - TypeScript.sourceCharactersCompiled = 0; - TypeScript.syntaxTreeParseTime = 0; - TypeScript.syntaxDiagnosticsTime = 0; - TypeScript.astTranslationTime = 0; - TypeScript.typeCheckTime = 0; - - TypeScript.compilerResolvePathTime = 0; - TypeScript.compilerDirectoryNameTime = 0; - TypeScript.compilerDirectoryExistsTime = 0; - TypeScript.compilerFileExistsTime = 0; - - TypeScript.emitTime = 0; - TypeScript.emitWriteFileTime = 0; - - TypeScript.declarationEmitTime = 0; - TypeScript.declarationEmitIsExternallyVisibleTime = 0; - TypeScript.declarationEmitTypeSignatureTime = 0; - TypeScript.declarationEmitGetBoundDeclTypeTime = 0; - TypeScript.declarationEmitIsOverloadedCallSignatureTime = 0; - TypeScript.declarationEmitFunctionDeclarationGetSymbolTime = 0; - TypeScript.declarationEmitGetBaseTypeTime = 0; - TypeScript.declarationEmitGetAccessorFunctionTime = 0; - TypeScript.declarationEmitGetTypeParameterSymbolTime = 0; - TypeScript.declarationEmitGetImportDeclarationSymbolTime = 0; - - TypeScript.ioHostResolvePathTime = 0; - TypeScript.ioHostDirectoryNameTime = 0; - TypeScript.ioHostCreateDirectoryStructureTime = 0; - TypeScript.ioHostWriteFileTime = 0; - - (function (EmitOutputResult) { - EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; - EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors"; - EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors"; - })(TypeScript.EmitOutputResult || (TypeScript.EmitOutputResult = {})); - var EmitOutputResult = TypeScript.EmitOutputResult; - - var EmitOutput = (function () { - function EmitOutput(emitOutputResult) { - if (typeof emitOutputResult === "undefined") { emitOutputResult = 0 /* Succeeded */; } - this.outputFiles = []; - this.emitOutputResult = emitOutputResult; + function checkThrowStatement(node) { + checkExpression(node.expression); } - return EmitOutput; - })(); - TypeScript.EmitOutput = EmitOutput; - - (function (OutputFileType) { - OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; - OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; - OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; - })(TypeScript.OutputFileType || (TypeScript.OutputFileType = {})); - var OutputFileType = TypeScript.OutputFileType; - - var OutputFile = (function () { - function OutputFile(name, writeByteOrderMark, text, fileType, sourceMapEntries) { - if (typeof sourceMapEntries === "undefined") { sourceMapEntries = []; } - this.name = name; - this.writeByteOrderMark = writeByteOrderMark; - this.text = text; - this.fileType = fileType; - this.sourceMapEntries = sourceMapEntries; + function checkTryStatement(node) { + checkBlock(node.tryBlock); + if (node.catchBlock) + checkBlock(node.catchBlock); + if (node.finallyBlock) + checkBlock(node.finallyBlock); } - return OutputFile; - })(); - TypeScript.OutputFile = OutputFile; - - var CompileResult = (function () { - function CompileResult() { - this.diagnostics = []; - this.outputFiles = []; - } - CompileResult.fromDiagnostics = function (diagnostics) { - var result = new CompileResult(); - result.diagnostics = diagnostics; - return result; - }; - - CompileResult.fromOutputFiles = function (outputFiles) { - var result = new CompileResult(); - result.outputFiles = outputFiles; - return result; - }; - return CompileResult; - })(); - TypeScript.CompileResult = CompileResult; - - var TypeScriptCompiler = (function () { - function TypeScriptCompiler(logger, _settings) { - if (typeof logger === "undefined") { logger = new TypeScript.NullLogger(); } - if (typeof _settings === "undefined") { _settings = TypeScript.ImmutableCompilationSettings.defaultSettings(); } - this.logger = logger; - this._settings = _settings; - this.semanticInfoChain = null; - this.semanticInfoChain = new TypeScript.SemanticInfoChain(this, logger); - } - TypeScriptCompiler.prototype.compilationSettings = function () { - return this._settings; - }; - - TypeScriptCompiler.prototype.setCompilationSettings = function (newSettings) { - var oldSettings = this._settings; - this._settings = newSettings; - - if (!compareDataObjects(oldSettings, newSettings)) { - this.semanticInfoChain.invalidate(oldSettings, newSettings); + function checkIndexConstraints(type) { + function checkIndexConstraintForProperty(prop, propertyType, indexDeclaration, indexType, indexKind) { + if (!indexType) { + return; + } + if (indexKind === 1 /* Number */ && !isNumericName(prop.name)) { + return; + } + var errorNode; + if (prop.parent === type.symbol) { + errorNode = prop.valueDeclaration; + } + else if (indexDeclaration) { + errorNode = indexDeclaration; + } + else if (type.flags & 2048 /* Interface */) { + var someBaseClassHasBothPropertyAndIndexer = ts.forEach(type.baseTypes, function (base) { return getPropertyOfType(base, prop.name) && getIndexTypeOfType(base, indexKind); }); + errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : type.symbol.declarations[0]; + } + if (errorNode && !isTypeAssignableTo(propertyType, indexType)) { + var errorMessage = indexKind === 0 /* String */ ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; + error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType)); + } } - }; - - TypeScriptCompiler.prototype.getDocument = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.semanticInfoChain.getDocument(fileName); - }; - - TypeScriptCompiler.prototype.cleanupSemanticCache = function () { - this.semanticInfoChain.invalidate(); - }; - - TypeScriptCompiler.prototype.addFile = function (fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { - if (typeof referencedFiles === "undefined") { referencedFiles = []; } - fileName = TypeScript.switchToForwardSlashes(fileName); - - TypeScript.sourceCharactersCompiled += scriptSnapshot.getLength(); - - var document = TypeScript.Document.create(this, this.semanticInfoChain, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles); - - this.semanticInfoChain.addDocument(document); - }; - - TypeScriptCompiler.prototype.updateFile = function (fileName, scriptSnapshot, version, isOpen, textChangeRange) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - var updatedDocument = document.update(scriptSnapshot, version, isOpen, textChangeRange); - - this.semanticInfoChain.addDocument(updatedDocument); - }; - - TypeScriptCompiler.prototype.removeFile = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - this.semanticInfoChain.removeDocument(fileName); - }; - - TypeScriptCompiler.prototype.mapOutputFileName = function (document, emitOptions, extensionChanger) { - if (document.emitToOwnOutputFile()) { - var updatedFileName = document.fileName; - if (emitOptions.outputDirectory() !== "") { - updatedFileName = document.fileName.replace(emitOptions.commonDirectoryPath(), ""); - updatedFileName = emitOptions.outputDirectory() + updatedFileName; + var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */); + var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType || numberIndexType) { + ts.forEach(getPropertiesOfType(type), function (prop) { + var propType = getTypeOfSymbol(prop); + checkIndexConstraintForProperty(prop, propType, declaredStringIndexer, stringIndexType, 0 /* String */); + checkIndexConstraintForProperty(prop, propType, declaredNumberIndexer, numberIndexType, 1 /* Number */); + }); + } + var errorNode; + if (stringIndexType && numberIndexType) { + errorNode = declaredNumberIndexer || declaredStringIndexer; + if (!errorNode && (type.flags & 2048 /* Interface */)) { + var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); }); + errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0]; + } + } + if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { + error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType)); + } + } + function checkTypeNameIsReserved(name, message) { + switch (name.text) { + case "any": + case "number": + case "boolean": + case "string": + case "void": + error(name, message, name.text); + } + } + function checkTypeParameters(typeParameterDeclarations) { + if (typeParameterDeclarations) { + for (var i = 0; i < typeParameterDeclarations.length; i++) { + var node = typeParameterDeclarations[i]; + checkTypeParameter(node); + if (fullTypeCheck) { + for (var j = 0; j < i; j++) { + if (typeParameterDeclarations[j].symbol === node.symbol) { + error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + } + } + } } - return extensionChanger(updatedFileName, false); - } else { - return extensionChanger(emitOptions.sharedOutputFile(), true); } - }; - - TypeScriptCompiler.prototype.writeByteOrderMarkForDocument = function (document) { - var printReason = false; - - if (document.emitToOwnOutputFile()) { - var result = document.byteOrderMark !== 0 /* None */; - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); + } + function checkClassDeclaration(node) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); + checkTypeParameters(node.typeParameters); + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var type = getDeclaredTypeOfSymbol(symbol); + var staticType = getTypeOfSymbol(symbol); + if (node.baseType) { + emitExtends = emitExtends || !ts.isInAmbientContext(node); + checkTypeReference(node.baseType); + } + if (type.baseTypes.length) { + if (fullTypeCheck) { + var baseType = type.baseTypes[0]; + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); + var staticBaseType = getTypeOfSymbol(baseType.symbol); + checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { + error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + } + checkKindsOfPropertyMemberOverrides(type, baseType); } - return result; - } else { - var fileNames = this.fileNames(); - - var result = false; - for (var i = 0, n = fileNames.length; i < n; i++) { - var document = this.getDocument(fileNames[i]); - - if (document.isExternalModule()) { + checkExpression(node.baseType.typeName); + } + if (node.implementedTypes) { + ts.forEach(node.implementedTypes, function (typeRefNode) { + checkTypeReference(typeRefNode); + if (fullTypeCheck) { + var t = getTypeFromTypeReferenceNode(typeRefNode); + if (t !== unknownType) { + var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; + if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { + checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); + } + else { + error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + } + } + } + }); + } + ts.forEach(node.members, checkSourceElement); + if (fullTypeCheck) { + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } + } + function getTargetSymbol(s) { + return s.flags & 8388608 /* Instantiated */ ? getSymbolLinks(s).target : s; + } + function checkKindsOfPropertyMemberOverrides(type, baseType) { + var baseProperties = getPropertiesOfType(baseType); + for (var i = 0, len = baseProperties.length; i < len; ++i) { + var base = getTargetSymbol(baseProperties[i]); + if (base.flags & 67108864 /* Prototype */) { + continue; + } + var derived = getTargetSymbol(getPropertyOfType(type, base.name)); + if (derived) { + var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base); + var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived); + if ((baseDeclarationFlags & 32 /* Private */) || (derivedDeclarationFlags & 32 /* Private */)) { continue; } - - if (document.byteOrderMark !== 0 /* None */) { - if (printReason) { - TypeScript.Environment.standardOut.WriteLine("Emitting byte order mark because of: " + document.fileName); - result = true; - } else { - return true; + if ((baseDeclarationFlags & 64 /* Static */) !== (derivedDeclarationFlags & 64 /* Static */)) { + continue; + } + if ((base.flags & derived.flags & 2048 /* Method */) || ((base.flags & ts.SymbolFlags.PropertyOrAccessor) && (derived.flags & ts.SymbolFlags.PropertyOrAccessor))) { + continue; + } + var errorMessage; + if (base.flags & 2048 /* Method */) { + if (derived.flags & ts.SymbolFlags.Accessor) { + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; + } + else { + ts.Debug.assert(derived.flags & 2 /* Property */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; } } + else if (base.flags & 2 /* Property */) { + ts.Debug.assert(derived.flags & 2048 /* Method */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; + } + else { + ts.Debug.assert(base.flags & ts.SymbolFlags.Accessor); + ts.Debug.assert(derived.flags & 2048 /* Method */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; + } + error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); } - - return result; } - }; - - TypeScriptCompiler.mapToDTSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScript.getDeclareFilePath(fileName); - }; - - TypeScriptCompiler.prototype._shouldEmit = function (document) { - return !document.isDeclareFile(); - }; - - TypeScriptCompiler.prototype._shouldEmitDeclarations = function (document) { - if (!this.compilationSettings().generateDeclarationFiles()) { + } + function isAccessor(kind) { + return kind === 118 /* GetAccessor */ || kind === 119 /* SetAccessor */; + } + function areTypeParametersIdentical(list1, list2) { + if (!list1 && !list2) { + return true; + } + if (!list1 || !list2 || list1.length !== list2.length) { return false; } - - return this._shouldEmit(document); - }; - - TypeScriptCompiler.prototype.emitDocumentDeclarationsWorker = function (document, emitOptions, declarationEmitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmitDeclarations(document)); - - if (declarationEmitter) { - declarationEmitter.document = document; - } else { - var declareFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToDTSFileName); - declarationEmitter = new TypeScript.DeclarationEmitter(declareFileName, document, this, emitOptions, this.semanticInfoChain); + for (var i = 0, len = list1.length; i < len; i++) { + var tp1 = list1[i]; + var tp2 = list2[i]; + if (tp1.name.text !== tp2.name.text) { + return false; + } + if (!tp1.constraint && !tp2.constraint) { + continue; + } + if (!tp1.constraint || !tp2.constraint) { + return false; + } + if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) { + return false; + } } - - declarationEmitter.emitDeclarations(sourceUnit); - return declarationEmitter; - }; - - TypeScriptCompiler.prototype._emitDocumentDeclarations = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmitDeclarations(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFile()); + return true; + } + function checkInterfaceDeclaration(node) { + checkTypeParameters(node.typeParameters); + if (fullTypeCheck) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); + if (symbol.declarations.length > 1) { + if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { + error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + } + } + if (node === firstInterfaceDecl) { + var type = getDeclaredTypeOfSymbol(symbol); + if (checkInheritedPropertiesAreIdentical(type, node.name)) { + ts.forEach(type.baseTypes, function (baseType) { + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); + }); + checkIndexConstraints(type); } - } else { - sharedEmitter = this.emitDocumentDeclarationsWorker(document, emitOptions, sharedEmitter); } } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAllDeclarations = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var sharedEmitter = null; - var fileNames = this.fileNames(); - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileNames[i]); - - sharedEmitter = this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, sharedEmitter); + ts.forEach(node.baseTypes, checkTypeReference); + ts.forEach(node.members, checkSourceElement); + if (fullTypeCheck) { + checkTypeForDuplicateIndexSignatures(node); } - - if (sharedEmitter) { - emitOutput.outputFiles.push(sharedEmitter.getOutputFile()); + } + function getConstantValue(node) { + var isNegative = false; + if (node.kind === 138 /* PrefixOperator */) { + var unaryExpression = node; + if (unaryExpression.operator === 25 /* MinusToken */ || unaryExpression.operator === 24 /* PlusToken */) { + node = unaryExpression.operand; + isNegative = unaryExpression.operator === 25 /* MinusToken */; + } } - - TypeScript.declarationEmitTime += new Date().getTime() - start; - - return emitOutput; - }; - - TypeScriptCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; + if (node.kind === 2 /* NumericLiteral */) { + var literalText = node.text; + return isNegative ? -literalText : +literalText; } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocumentDeclarations(document, emitOptions, function (file) { - return emitOutput.outputFiles.push(file); - }, null); - return emitOutput; - } else { - return this.emitAllDeclarations(resolvePath); + return undefined; + } + function checkEnumDeclaration(node) { + if (!fullTypeCheck) { + return; } - }; - - TypeScriptCompiler.prototype.canEmitDeclarations = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var document = this.getDocument(fileName); - return this._shouldEmitDeclarations(document); - }; - - TypeScriptCompiler.mapToFileNameExtension = function (extension, fileName, wholeFileNameReplaced) { - if (wholeFileNameReplaced) { - return fileName; - } else { - var splitFname = fileName.split("."); - splitFname.pop(); - return splitFname.join(".") + extension; + checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var enumSymbol = getSymbolOfNode(node); + var enumType = getDeclaredTypeOfSymbol(enumSymbol); + var autoValue = 0; + var ambient = ts.isInAmbientContext(node); + ts.forEach(node.members, function (member) { + var initializer = member.initializer; + if (initializer) { + autoValue = getConstantValue(initializer); + if (autoValue === undefined && !ambient) { + checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); + } + } + else if (ambient) { + autoValue = undefined; + } + if (autoValue !== undefined) { + getNodeLinks(member).enumMemberValue = autoValue++; + } + }); + var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); + if (node === firstDeclaration) { + var seenEnumMissingInitialInitializer = false; + ts.forEach(enumSymbol.declarations, function (declaration) { + if (declaration.kind !== 171 /* EnumDeclaration */) { + return false; + } + var enumDeclaration = declaration; + if (!enumDeclaration.members.length) { + return false; + } + var firstEnumMember = enumDeclaration.members[0]; + if (!firstEnumMember.initializer) { + if (seenEnumMissingInitialInitializer) { + error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element); + } + else { + seenEnumMissingInitialInitializer = true; + } + } + }); } - }; - - TypeScriptCompiler.mapToJSFileName = function (fileName, wholeFileNameReplaced) { - return TypeScriptCompiler.mapToFileNameExtension(".js", fileName, wholeFileNameReplaced); - }; - - TypeScriptCompiler.prototype.emitDocumentWorker = function (document, emitOptions, emitter) { - var sourceUnit = document.sourceUnit(); - TypeScript.Debug.assert(this._shouldEmit(document)); - - var typeScriptFileName = document.fileName; - if (!emitter) { - var javaScriptFileName = this.mapOutputFileName(document, emitOptions, TypeScriptCompiler.mapToJSFileName); - var outFile = new TypeScript.TextWriter(javaScriptFileName, this.writeByteOrderMarkForDocument(document), 0 /* JavaScript */); - - emitter = new TypeScript.Emitter(javaScriptFileName, outFile, emitOptions, this.semanticInfoChain); - - if (this.compilationSettings().mapSourceFiles()) { - var sourceMapFile = new TypeScript.TextWriter(javaScriptFileName + TypeScript.SourceMapper.MapFileExtension, false, 1 /* SourceMap */); - emitter.createSourceMapper(document, javaScriptFileName, outFile, sourceMapFile, emitOptions.resolvePath); + } + function getFirstNonAmbientClassOrFunctionDeclaration(symbol) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if ((declaration.kind === 169 /* ClassDeclaration */ || (declaration.kind === 167 /* FunctionDeclaration */ && declaration.body)) && !ts.isInAmbientContext(declaration)) { + return declaration; } - } else if (this.compilationSettings().mapSourceFiles()) { - emitter.setSourceMapperNewSourceFile(document); } - - emitter.setDocument(document); - emitter.emitJavascript(sourceUnit, false); - - return emitter; - }; - - TypeScriptCompiler.prototype._emitDocument = function (document, emitOptions, onSingleFileEmitComplete, sharedEmitter) { - if (this._shouldEmit(document)) { - if (document.emitToOwnOutputFile()) { - var singleEmitter = this.emitDocumentWorker(document, emitOptions); - if (singleEmitter) { - onSingleFileEmitComplete(singleEmitter.getOutputFiles()); + return undefined; + } + function checkModuleDeclaration(node) { + if (fullTypeCheck) { + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { + var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (classOrFunc) { + if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } + else if (node.pos < classOrFunc.pos) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } + } + } + if (node.name.kind === 3 /* StringLiteral */) { + if (!isGlobalSourceFile(node.parent)) { + error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); + } + if (isExternalModuleNameRelative(node.name.text)) { + error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); } - } else { - sharedEmitter = this.emitDocumentWorker(document, emitOptions, sharedEmitter); } } - - return sharedEmitter; - }; - - TypeScriptCompiler.prototype.emitAll = function (resolvePath) { - var start = new Date().getTime(); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var fileNames = this.fileNames(); - var sharedEmitter = null; - - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - - var document = this.getDocument(fileName); - - sharedEmitter = this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, sharedEmitter); - } - - if (sharedEmitter) { - emitOutput.outputFiles.push.apply(emitOutput.outputFiles, sharedEmitter.getOutputFiles()); - } - - TypeScript.emitTime += new Date().getTime() - start; - return emitOutput; - }; - - TypeScriptCompiler.prototype.emit = function (fileName, resolvePath) { - fileName = TypeScript.switchToForwardSlashes(fileName); - var emitOutput = new EmitOutput(); - - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - if (emitOptions.diagnostic()) { - emitOutput.emitOutputResult = 2 /* FailedBecauseOfCompilerOptionsErrors */; - return emitOutput; - } - - var document = this.getDocument(fileName); - - if (document.emitToOwnOutputFile()) { - this._emitDocument(document, emitOptions, function (files) { - return emitOutput.outputFiles.push.apply(emitOutput.outputFiles, files); - }, null); - return emitOutput; - } else { - return this.emitAll(resolvePath); + checkSourceElement(node.body); + } + function getFirstIdentifier(node) { + while (node.kind === 112 /* QualifiedName */) { + node = node.left; } - }; - - TypeScriptCompiler.prototype.compile = function (resolvePath, continueOnDiagnostics) { - if (typeof continueOnDiagnostics === "undefined") { continueOnDiagnostics = false; } - return new CompilerIterator(this, resolvePath, continueOnDiagnostics); - }; - - TypeScriptCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.getDocument(fileName).diagnostics(); - }; - - TypeScriptCompiler.prototype.getSyntaxTree = function (fileName) { - return this.getDocument(fileName).syntaxTree(); - }; - - TypeScriptCompiler.prototype.getSourceUnit = function (fileName) { - return this.getDocument(fileName).sourceUnit(); - }; - - TypeScriptCompiler.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.getDocument(fileName); - - var startTime = (new Date()).getTime(); - TypeScript.PullTypeResolver.typeCheck(this.compilationSettings(), this.semanticInfoChain, document); - var endTime = (new Date()).getTime(); - - TypeScript.typeCheckTime += endTime - startTime; - - var errors = this.semanticInfoChain.getDiagnostics(fileName); - - errors = TypeScript.ArrayUtilities.distinct(errors, TypeScript.Diagnostic.equals); - errors.sort(function (d1, d2) { - if (d1.fileName() < d2.fileName()) { - return -1; - } else if (d1.fileName() > d2.fileName()) { - return 1; + return node; + } + function checkImportDeclaration(node) { + checkCollisionWithCapturedThisVariable(node, node.name); + var symbol = getSymbolOfNode(node); + var target; + if (node.entityName) { + target = resolveImport(symbol); + if (target !== unknownSymbol) { + if (target.flags & ts.SymbolFlags.Value) { + var moduleName = getFirstIdentifier(node.entityName); + if (resolveEntityName(node, moduleName, ts.SymbolFlags.Value | ts.SymbolFlags.Namespace).flags & ts.SymbolFlags.Namespace) { + checkExpression(node.entityName); + } + else { + error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.identifierToString(moduleName)); + } + } + if (target.flags & ts.SymbolFlags.Type) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); + } } - - if (d1.start() < d2.start()) { - return -1; - } else if (d1.start() > d2.start()) { - return 1; + } + else { + if (node.parent.kind === 177 /* SourceFile */) { + target = resolveImport(symbol); } - - var code1 = TypeScript.diagnosticInformationMap[d1.diagnosticKey()].code; - var code2 = TypeScript.diagnosticInformationMap[d2.diagnosticKey()].code; - if (code1 < code2) { - return -1; - } else if (code1 > code2) { - return 1; + else if (node.parent.kind === 173 /* ModuleBlock */ && node.parent.parent.name.kind === 3 /* StringLiteral */) { + if (isExternalModuleNameRelative(node.externalModuleName.text)) { + error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name); + target = unknownSymbol; + } + else { + target = resolveImport(symbol); + } + } + else { + target = unknownSymbol; } - - return 0; - }); - - return errors; - }; - - TypeScriptCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - var emitOptions = new TypeScript.EmitOptions(this, resolvePath); - var emitDiagnostic = emitOptions.diagnostic(); - if (emitDiagnostic) { - return [emitDiagnostic]; } - return TypeScript.sentinelEmptyArray; - }; - - TypeScriptCompiler.prototype.resolveAllFiles = function () { - var fileNames = this.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - this.getSemanticDiagnostics(fileNames[i]); + if (target !== unknownSymbol) { + var excludedMeanings = (symbol.flags & ts.SymbolFlags.Value ? ts.SymbolFlags.Value : 0) | (symbol.flags & ts.SymbolFlags.Type ? ts.SymbolFlags.Type : 0) | (symbol.flags & ts.SymbolFlags.Namespace ? ts.SymbolFlags.Namespace : 0); + if (target.flags & excludedMeanings) { + error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol)); + } } - }; - - TypeScriptCompiler.prototype.getSymbolOfDeclaration = function (decl) { - if (!decl) { - return null; + } + function checkExportAssignment(node) { + var container = node.parent; + if (container.kind !== 177 /* SourceFile */) { + container = container.parent; } - - var resolver = this.semanticInfoChain.getResolver(); - var ast = this.semanticInfoChain.getASTForDecl(decl); - if (!ast) { - return null; + checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container)); + } + function checkSourceElement(node) { + if (!node) + return; + switch (node.kind) { + case 113 /* TypeParameter */: + return checkTypeParameter(node); + case 114 /* Parameter */: + return checkParameter(node); + case 115 /* Property */: + return checkPropertyDeclaration(node); + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return checkSignatureDeclaration(node); + case 116 /* Method */: + return checkMethodDeclaration(node); + case 117 /* Constructor */: + return checkConstructorDeclaration(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return checkAccessorDeclaration(node); + case 123 /* TypeReference */: + return checkTypeReference(node); + case 124 /* TypeQuery */: + return checkTypeQuery(node); + case 125 /* TypeLiteral */: + return checkTypeLiteral(node); + case 126 /* ArrayType */: + return checkArrayType(node); + case 167 /* FunctionDeclaration */: + return checkFunctionDeclaration(node); + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + return checkBlock(node); + case 144 /* VariableStatement */: + return checkVariableStatement(node); + case 146 /* ExpressionStatement */: + return checkExpressionStatement(node); + case 147 /* IfStatement */: + return checkIfStatement(node); + case 148 /* DoStatement */: + return checkDoStatement(node); + case 149 /* WhileStatement */: + return checkWhileStatement(node); + case 150 /* ForStatement */: + return checkForStatement(node); + case 151 /* ForInStatement */: + return checkForInStatement(node); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return checkBreakOrContinueStatement(node); + case 154 /* ReturnStatement */: + return checkReturnStatement(node); + case 155 /* WithStatement */: + return checkWithStatement(node); + case 156 /* SwitchStatement */: + return checkSwitchStatement(node); + case 159 /* LabelledStatement */: + return checkLabelledStatement(node); + case 160 /* ThrowStatement */: + return checkThrowStatement(node); + case 161 /* TryStatement */: + return checkTryStatement(node); + case 166 /* VariableDeclaration */: + return ts.Debug.fail("Checker encountered variable declaration"); + case 169 /* ClassDeclaration */: + return checkClassDeclaration(node); + case 170 /* InterfaceDeclaration */: + return checkInterfaceDeclaration(node); + case 171 /* EnumDeclaration */: + return checkEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return checkModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return checkImportDeclaration(node); + case 175 /* ExportAssignment */: + return checkExportAssignment(node); + } + } + function checkSourceFile(node) { + var links = getNodeLinks(node); + if (!(links.flags & 1 /* TypeChecked */)) { + emitExtends = false; + potentialThisCollisions.length = 0; + ts.forEach(node.statements, checkSourceElement); + if (ts.isExternalModule(node)) { + var symbol = getExportAssignmentSymbol(node.symbol); + if (symbol && symbol.flags & 4194304 /* Import */) { + getSymbolLinks(symbol).referenced = true; + } + } + if (potentialThisCollisions.length) { + ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); + potentialThisCollisions.length = 0; + } + if (emitExtends) + links.flags |= 8 /* EmitExtends */; + links.flags |= 1 /* TypeChecked */; + } + } + function checkProgram() { + ts.forEach(program.getSourceFiles(), checkSourceFile); + } + function getSortedDiagnostics() { + ts.Debug.assert(fullTypeCheck, "diagnostics are available only in the full typecheck mode"); + if (diagnosticsModified) { + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); + diagnosticsModified = false; } - - var enclosingDecl = resolver.getEnclosingDecl(decl); - if (ast.kind() === 139 /* GetAccessor */ || ast.kind() === 140 /* SetAccessor */) { - return this.getSymbolOfDeclaration(enclosingDecl); + return diagnostics; + } + function getDiagnostics(sourceFile) { + if (sourceFile) { + checkSourceFile(sourceFile); + return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; }); } - - return resolver.resolveAST(ast, false, new TypeScript.PullTypeResolutionContext(resolver)); - }; - - TypeScriptCompiler.prototype.extractResolutionContextFromAST = function (resolver, ast, document, propagateContextualTypes) { - var scriptName = document.fileName; - - var enclosingDecl = null; - var enclosingDeclAST = null; - var inContextuallyTypedAssignment = false; - var inWithBlock = false; - - var resolutionContext = new TypeScript.PullTypeResolutionContext(resolver); - - if (!ast) { - return null; + checkProgram(); + return getSortedDiagnostics(); + } + function getGlobalDiagnostics() { + return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); + } + function getNodeAtPosition(sourceFile, position) { + function findChildAtPosition(parent) { + var child = ts.forEachChild(parent, function (node) { + if (position >= node.pos && position <= node.end && position >= ts.getTokenPosOfNode(node)) { + return findChildAtPosition(node); + } + }); + return child || parent; } - - var path = this.getASTPath(ast); - - for (var i = 0, n = path.length; i < n; i++) { - var current = path[i]; - - switch (current.kind()) { - case 222 /* FunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - if (propagateContextualTypes) { - resolver.resolveAST(current, true, resolutionContext); - } - break; - - case 136 /* MemberVariableDeclaration */: - var memberVariable = current; - inContextuallyTypedAssignment = memberVariable.variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, memberVariable, memberVariable.variableDeclarator.equalsValueClause); - break; - - case 225 /* VariableDeclarator */: - var variableDeclarator = current; - inContextuallyTypedAssignment = variableDeclarator.typeAnnotation !== null; - - this.extractResolutionContextForVariable(inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, variableDeclarator, variableDeclarator.equalsValueClause); - break; - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - if (propagateContextualTypes) { - var isNew = current.kind() === 216 /* ObjectCreationExpression */; - var callExpression = current; - var contextualType = null; - - if ((i + 2 < n) && callExpression.argumentList === path[i + 1] && callExpression.argumentList.arguments === path[i + 2]) { - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext, callResolutionResults); - } - - if (callResolutionResults.actualParametersContextTypeSymbols) { - var argExpression = path[i + 3]; - if (argExpression) { - for (var j = 0, m = callExpression.argumentList.arguments.nonSeparatorCount(); j < m; j++) { - if (callExpression.argumentList.arguments.nonSeparatorAt(j) === argExpression) { - var callContextualType = callResolutionResults.actualParametersContextTypeSymbols[j]; - if (callContextualType) { - contextualType = callContextualType; - break; - } - } - } - } - } - } else { - if (isNew) { - resolver.resolveObjectCreationExpression(callExpression, resolutionContext); - } else { - resolver.resolveInvocationExpression(callExpression, resolutionContext); - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 214 /* ArrayLiteralExpression */: - if (propagateContextualTypes) { - var contextualType = null; - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isArrayNamedTypeReference()) { - contextualType = currentContextualType.getElementType(); - } - - resolutionContext.pushNewContextualType(contextualType); - } - - break; - - case 215 /* ObjectLiteralExpression */: - if (propagateContextualTypes) { - var objectLiteralExpression = current; - var objectLiteralResolutionContext = new TypeScript.PullAdditionalObjectLiteralResolutionData(); - resolver.resolveObjectLiteralExpression(objectLiteralExpression, inContextuallyTypedAssignment, resolutionContext, objectLiteralResolutionContext); - - var memeberAST = (path[i + 1] && path[i + 1].kind() === 2 /* SeparatedList */) ? path[i + 2] : path[i + 1]; - if (memeberAST) { - var contextualType = null; - var memberDecls = objectLiteralExpression.propertyAssignments; - if (memberDecls && objectLiteralResolutionContext.membersContextTypeSymbols) { - for (var j = 0, m = memberDecls.nonSeparatorCount(); j < m; j++) { - if (memberDecls.nonSeparatorAt(j) === memeberAST) { - var memberContextualType = objectLiteralResolutionContext.membersContextTypeSymbols[j]; - if (memberContextualType) { - contextualType = memberContextualType; - break; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); - } + if (position < sourceFile.pos) + position = sourceFile.pos; + if (position > sourceFile.end) + position = sourceFile.end; + return findChildAtPosition(sourceFile); + } + function getSymbolsInScope(location, meaning) { + var symbols = {}; + var memberFlags = 0; + function copySymbol(symbol, meaning) { + if (symbol.flags & meaning) { + var id = symbol.name; + if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) { + symbols[id] = symbol; + } + } + } + function copySymbols(source, meaning) { + if (meaning) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + copySymbol(source[id], meaning); } - + } + } + } + while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + copySymbols(location.locals, meaning); + } + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) + break; + case 172 /* ModuleDeclaration */: + copySymbols(getSymbolOfNode(location).exports, meaning & ts.SymbolFlags.ModuleMember); break; - - case 174 /* AssignmentExpression */: - if (propagateContextualTypes) { - var assignmentExpression = current; - var contextualType = null; - - if (path[i + 1] && path[i + 1] === assignmentExpression.right) { - var leftType = resolver.resolveAST(assignmentExpression.left, inContextuallyTypedAssignment, resolutionContext).type; - if (leftType) { - inContextuallyTypedAssignment = true; - contextualType = leftType; - } - } - - resolutionContext.pushNewContextualType(contextualType); - } - + case 171 /* EnumDeclaration */: + copySymbols(getSymbolOfNode(location).exports, meaning & 4 /* EnumMember */); break; - - case 220 /* CastExpression */: - var castExpression = current; - if (!(i + 1 < n && path[i + 1] === castExpression.type)) { - if (propagateContextualTypes) { - var contextualType = null; - var typeSymbol = resolver.resolveAST(castExpression, inContextuallyTypedAssignment, resolutionContext).type; - - if (typeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = typeSymbol; - } - - resolutionContext.pushNewContextualType(contextualType); - } + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (!(memberFlags & 64 /* Static */)) { + copySymbols(getSymbolOfNode(location).members, meaning & ts.SymbolFlags.Type); } - break; - - case 150 /* ReturnStatement */: - if (propagateContextualTypes) { - var returnStatement = current; - var contextualType = null; - - if (enclosingDecl && (enclosingDecl.kind & 1032192 /* SomeFunction */)) { - var typeAnnotation = TypeScript.ASTHelpers.getType(enclosingDeclAST); - if (typeAnnotation) { - var returnTypeSymbol = resolver.resolveTypeReference(typeAnnotation, resolutionContext); - if (returnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = returnTypeSymbol; - } - } else { - var currentContextualType = resolutionContext.getContextualType(); - if (currentContextualType && currentContextualType.isFunction()) { - var contextualSignatures = currentContextualType.kind == 33554432 /* ConstructorType */ ? currentContextualType.getConstructSignatures() : currentContextualType.getCallSignatures(); - var currentContextualTypeSignatureSymbol = contextualSignatures[0]; - var currentContextualTypeReturnTypeSymbol = currentContextualTypeSignatureSymbol.returnType; - if (currentContextualTypeReturnTypeSymbol) { - inContextuallyTypedAssignment = true; - contextualType = currentContextualTypeReturnTypeSymbol; - } - } - } - } - - resolutionContext.pushNewContextualType(contextualType); + case 136 /* FunctionExpression */: + if (location.name) { + copySymbol(location.symbol, meaning); } - break; - - case 122 /* ObjectType */: - if (propagateContextualTypes && TypeScript.isTypesOnlyLocation(current)) { - resolver.resolveAST(current, false, resolutionContext); + case 163 /* CatchBlock */: + if (location.variable.text) { + copySymbol(location.symbol, meaning); } - break; - - case 163 /* WithStatement */: - inWithBlock = true; - break; - - case 146 /* Block */: - inContextuallyTypedAssignment = false; - break; - } - - var decl = this.semanticInfoChain.getDeclForAST(current); - if (decl) { - enclosingDecl = decl; - enclosingDeclAST = current; } + memberFlags = location.flags; + location = location.parent; } - - if (ast && ast.parent && ast.kind() === 11 /* IdentifierName */) { - if (ast.parent.kind() === 212 /* MemberAccessExpression */) { - if (ast.parent.name === ast) { - ast = ast.parent; + copySymbols(globals, meaning); + return ts.mapToArray(symbols); + } + function isTypeDeclarationName(name) { + return name.kind == 55 /* Identifier */ && isTypeDeclaration(name.parent) && name.parent.name === name; + } + function isDeclarationOrFunctionExpressionOrCatchVariableName(name) { + if (name.kind !== 55 /* Identifier */ && name.kind !== 3 /* StringLiteral */ && name.kind !== 2 /* NumericLiteral */) { + return false; + } + var parent = name.parent; + if (isDeclaration(parent) || parent.kind === 136 /* FunctionExpression */) { + return parent.name === name; + } + if (parent.kind === 163 /* CatchBlock */) { + return parent.variable === name; + } + return false; + } + function isTypeDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + return true; + } + } + function isDeclaration(node) { + switch (node.kind) { + case 113 /* TypeParameter */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return true; + } + return false; + } + function isTypeReferenceIdentifier(entityName) { + var node = entityName; + while (node.parent && node.parent.kind === 112 /* QualifiedName */) + node = node.parent; + return node.parent && node.parent.kind === 123 /* TypeReference */; + } + function isExpression(node) { + switch (node.kind) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + case 4 /* RegularExpressionLiteral */: + case 127 /* ArrayLiteral */: + case 128 /* ObjectLiteral */: + case 130 /* PropertyAccess */: + case 131 /* IndexedAccess */: + case 132 /* CallExpression */: + case 133 /* NewExpression */: + case 134 /* TypeAssertion */: + case 135 /* ParenExpression */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + case 140 /* BinaryExpression */: + case 141 /* ConditionalExpression */: + case 142 /* OmittedExpression */: + return true; + case 112 /* QualifiedName */: + while (node.parent.kind === 112 /* QualifiedName */) + node = node.parent; + return node.parent.kind === 124 /* TypeQuery */; + case 55 /* Identifier */: + if (node.parent.kind === 124 /* TypeQuery */) { + return true; } - } else if (ast.parent.kind() === 121 /* QualifiedName */) { - if (ast.parent.right === ast) { - ast = ast.parent; + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + var parent = node.parent; + switch (parent.kind) { + case 166 /* VariableDeclaration */: + case 114 /* Parameter */: + case 115 /* Property */: + case 176 /* EnumMember */: + return parent.initializer === node; + case 146 /* ExpressionStatement */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 154 /* ReturnStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 160 /* ThrowStatement */: + case 156 /* SwitchStatement */: + return parent.expression === node; + case 150 /* ForStatement */: + return parent.initializer === node || parent.condition === node || parent.iterator === node; + case 151 /* ForInStatement */: + return parent.variable === node || parent.expression === node; + case 134 /* TypeAssertion */: + return node === parent.operand; + default: + if (isExpression(parent)) { + return true; + } } - } } - - return { - ast: ast, - enclosingDecl: enclosingDecl, - resolutionContext: resolutionContext, - inContextuallyTypedAssignment: inContextuallyTypedAssignment, - inWithBlock: inWithBlock - }; - }; - - TypeScriptCompiler.prototype.extractResolutionContextForVariable = function (inContextuallyTypedAssignment, propagateContextualTypes, resolver, resolutionContext, enclosingDecl, assigningAST, init) { - if (inContextuallyTypedAssignment) { - if (propagateContextualTypes) { - resolver.resolveAST(assigningAST, false, resolutionContext); - var varSymbol = this.semanticInfoChain.getSymbolForAST(assigningAST); - - var contextualType = null; - if (varSymbol && inContextuallyTypedAssignment) { - contextualType = varSymbol.type; + return false; + } + function isTypeNode(node) { + if (node.kind >= ts.SyntaxKind.FirstTypeNode && node.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (node.kind) { + case 101 /* AnyKeyword */: + case 108 /* NumberKeyword */: + case 110 /* StringKeyword */: + case 102 /* BooleanKeyword */: + return true; + case 89 /* VoidKeyword */: + return node.parent.kind !== 138 /* PrefixOperator */; + case 3 /* StringLiteral */: + return node.parent.kind === 114 /* Parameter */; + case 55 /* Identifier */: + if (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; } - - resolutionContext.pushNewContextualType(contextualType); - - if (init) { - resolver.resolveAST(init, inContextuallyTypedAssignment, resolutionContext); + case 112 /* QualifiedName */: + var parent = node.parent; + if (parent.kind === 124 /* TypeQuery */) { + return false; + } + if (parent.kind >= ts.SyntaxKind.FirstTypeNode && parent.kind <= ts.SyntaxKind.LastTypeNode) { + return true; + } + switch (parent.kind) { + case 113 /* TypeParameter */: + return node === parent.constraint; + case 115 /* Property */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + return node === parent.type; + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 117 /* Constructor */: + case 116 /* Method */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return node === parent.type; + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return node === parent.type; + case 134 /* TypeAssertion */: + return node === parent.type; + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return parent.typeArguments.indexOf(node) >= 0; + } + } + return false; + } + function isInRightSideOfImportOrExportAssignment(node) { + while (node.parent.kind === 112 /* QualifiedName */) { + node = node.parent; + } + if (node.parent.kind === 174 /* ImportDeclaration */) { + return node.parent.entityName === node; + } + if (node.parent.kind === 175 /* ExportAssignment */) { + return node.parent.exportName === node; + } + return false; + } + function isRightSideOfQualifiedNameOrPropertyAccess(node) { + return (node.parent.kind === 112 /* QualifiedName */ || node.parent.kind === 130 /* PropertyAccess */) && node.parent.right === node; + } + function getSymbolOfEntityName(entityName) { + if (isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { + return getSymbolOfNode(entityName.parent); + } + if (entityName.parent.kind === 175 /* ExportAssignment */) { + return resolveEntityName(entityName.parent.parent, entityName, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | 4194304 /* Import */); + } + if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (isExpression(entityName)) { + if (entityName.kind === 55 /* Identifier */) { + var meaning = ts.SymbolFlags.Value | 4194304 /* Import */; + return resolveEntityName(entityName, entityName, meaning); + } + else if (entityName.kind === 112 /* QualifiedName */ || entityName.kind === 130 /* PropertyAccess */) { + var symbol = getNodeLinks(entityName).resolvedSymbol; + if (!symbol) { + checkPropertyAccess(entityName); } + return getNodeLinks(entityName).resolvedSymbol; + } + else { + return; } } - }; - - TypeScriptCompiler.prototype.getASTPath = function (ast) { - var result = []; - - while (ast) { - result.unshift(ast); - ast = ast.parent; + else if (isTypeReferenceIdentifier(entityName)) { + var meaning = entityName.parent.kind === 123 /* TypeReference */ ? ts.SymbolFlags.Type : ts.SymbolFlags.Namespace; + meaning |= 4194304 /* Import */; + return resolveEntityName(entityName, entityName, meaning); } - - return result; - }; - - TypeScriptCompiler.prototype.pullGetSymbolInformationFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; + return undefined; + } + function getSymbolInfo(node) { + switch (node.kind) { + case 55 /* Identifier */: + case 130 /* PropertyAccess */: + case 112 /* QualifiedName */: + return getSymbolOfEntityName(node); + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + var type = checkExpression(node); + return type.symbol; + case 103 /* ConstructorKeyword */: + var constructorDeclaration = node.parent; + if (constructorDeclaration && constructorDeclaration.kind === 117 /* Constructor */) { + return constructorDeclaration.parent.symbol; + } + return undefined; + case 3 /* StringLiteral */: + if (node.parent.kind === 131 /* IndexedAccess */ && node.parent.index === node) { + var objectType = checkExpression(node.parent.object); + if (objectType === unknownType) + return undefined; + var apparentType = getApparentType(objectType); + if (apparentType === unknownType) + return undefined; + return getPropertyOfApparentType(apparentType, node.text); + } + else if (node.parent.kind === 174 /* ImportDeclaration */ && node.parent.externalModuleName === node) { + var importSymbol = getSymbolOfNode(node.parent); + var moduleType = getTypeOfSymbol(importSymbol); + return moduleType ? moduleType.symbol : undefined; + } + else if (node.parent.kind === 172 /* ModuleDeclaration */) { + return getSymbolOfNode(node.parent); + } + break; } - - ast = context.ast; - var symbol = resolver.resolveAST(ast, context.inContextuallyTypedAssignment, context.resolutionContext); - - if (!symbol) { - TypeScript.Debug.assert(ast.kind() === 120 /* SourceUnit */, "No symbol was found for ast and ast was not source unit. Ast Kind: " + TypeScript.SyntaxKind[ast.kind()]); - return null; + return undefined; + } + function getTypeOfNode(node) { + if (isExpression(node)) { + return getTypeOfExpression(node); } - - if (symbol.isTypeReference()) { - symbol = symbol.getReferencedTypeSymbol(); + if (isTypeNode(node)) { + return getTypeFromTypeNode(node); + } + if (isTypeDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isTypeDeclarationName(node)) { + var symbol = getSymbolInfo(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isDeclaration(node)) { + var symbol = getSymbolOfNode(node); + return getTypeOfSymbol(symbol); + } + if (isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + var symbol = getSymbolInfo(node); + return getTypeOfSymbol(symbol); + } + if (isInRightSideOfImportOrExportAssignment(node)) { + var symbol; + symbol = node.parent.kind === 175 /* ExportAssignment */ ? getSymbolInfo(node) : getSymbolOfPartOfRightHandSideOfImport(node); + var declaredType = getDeclaredTypeOfSymbol(symbol); + return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); + } + return unknownType; + } + function getTypeOfExpression(expr) { + if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return checkExpression(expr); + } + function getAugmentedPropertiesOfApparentType(type) { + var apparentType = getApparentType(type); + if (apparentType.flags & ts.TypeFlags.ObjectType) { + var propertiesByName = {}; + var results = []; + ts.forEach(getPropertiesOfType(apparentType), function (s) { + propertiesByName[s.name] = s; + results.push(s); + }); + var resolved = resolveObjectTypeMembers(type); + ts.forEachValue(resolved.members, function (s) { + if (symbolIsValue(s) && !propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + ts.forEach(getPropertiesOfType(globalFunctionType), function (s) { + if (!propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + } + return results; + } + else { + return getPropertiesOfType(apparentType); + } + } + function isExternalModuleSymbol(symbol) { + return symbol.flags & 128 /* ValueModule */ && symbol.declarations.length === 1 && symbol.declarations[0].kind === 177 /* SourceFile */; + } + function isNodeDescendentOf(node, ancestor) { + while (node) { + if (node === ancestor) + return true; + node = node.parent; } - - var aliasSymbol = this.semanticInfoChain.getAliasSymbolForAST(ast); - - return { - symbol: symbol, - aliasSymbol: aliasSymbol, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetCallInformationFromAST = function (ast, document) { - if (ast.kind() !== 213 /* InvocationExpression */ && ast.kind() !== 216 /* ObjectCreationExpression */) { - return null; + return false; + } + function isUniqueLocalName(name, container) { + for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { + if (node.locals && ts.hasProperty(node.locals, name) && node.locals[name].flags & (ts.SymbolFlags.Value | 524288 /* ExportValue */)) { + return false; + } } - - var isNew = ast.kind() === 216 /* ObjectCreationExpression */; - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; + return true; + } + function getLocalNameOfContainer(container) { + var links = getNodeLinks(container); + if (!links.localModuleName) { + var prefix = ""; + var name = ts.unescapeIdentifier(container.name.text); + while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) { + prefix += "_"; + } + links.localModuleName = prefix + ts.getSourceTextOfNode(container.name); } - - var callResolutionResults = new TypeScript.PullAdditionalCallResolutionData(); - - if (isNew) { - resolver.resolveObjectCreationExpression(ast, context.resolutionContext, callResolutionResults); - } else { - resolver.resolveInvocationExpression(ast, context.resolutionContext, callResolutionResults); + return links.localModuleName; + } + function getLocalNameForSymbol(symbol, location) { + var node = location; + while (node) { + if ((node.kind === 172 /* ModuleDeclaration */ || node.kind === 171 /* EnumDeclaration */) && getSymbolOfNode(node) === symbol) { + return getLocalNameOfContainer(node); + } + node = node.parent; } - - return { - targetSymbol: callResolutionResults.targetSymbol, - resolvedSignatures: callResolutionResults.resolvedSignatures, - candidateSignature: callResolutionResults.candidateSignature, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl), - isConstructorCall: isNew - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleMemberSymbolsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; + ts.Debug.fail("getLocalNameForSymbol failed"); + } + function getExpressionNamePrefix(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol) { + var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + if (symbol !== exportSymbol && !(exportSymbol.flags & ts.SymbolFlags.ExportHasLocal)) { + symbol = exportSymbol; + } + if (symbol.parent) { + return isExternalModuleSymbol(symbol.parent) ? "exports" : getLocalNameForSymbol(getParentOfSymbol(symbol), node.parent); + } } - - var symbols = resolver.getVisibleMembersFromExpression(ast, context.enclosingDecl, context.resolutionContext); - if (!symbols) { - return null; + } + function getPropertyAccessSubstitution(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol && (symbol.flags & 4 /* EnumMember */)) { + var declaration = symbol.valueDeclaration; + var constantValue; + if (declaration.kind === 176 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { + return constantValue.toString() + " /* " + ts.identifierToString(declaration.name) + " */"; + } } - - return { - symbols: symbols, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetVisibleDeclsFromAST = function (ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, false); - if (!context || context.inWithBlock) { - return null; + } + function getExportAssignmentName(node) { + var symbol = getExportAssignmentSymbol(getSymbolOfNode(node)); + return symbol && symbolIsValue(symbol) ? symbolToString(symbol) : undefined; + } + function isTopLevelValueImportedViaEntityName(node) { + if (node.parent.kind !== 177 /* SourceFile */ || !node.entityName) { + return false; } - - return resolver.getVisibleDecls(context.enclosingDecl); - }; - - TypeScriptCompiler.prototype.pullGetContextualMembersFromAST = function (ast, document) { - if (ast.kind() !== 215 /* ObjectLiteralExpression */) { - return null; + var symbol = getSymbolOfNode(node); + var target = resolveImport(symbol); + return target !== unknownSymbol && ((target.flags & ts.SymbolFlags.Value) !== 0); + } + function shouldEmitDeclarations() { + return program.getCompilerOptions().declaration && !program.getDiagnostics().length && !getDiagnostics().length; + } + function isReferencedImportDeclaration(node) { + var symbol = getSymbolOfNode(node); + if (getSymbolLinks(symbol).referenced) { + return true; } - - var resolver = this.semanticInfoChain.getResolver(); - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; + if (node.flags & 1 /* Export */) { + var target = resolveImport(symbol); + if (target !== unknownSymbol && target.flags & ts.SymbolFlags.Value) { + return true; + } } - - var members = resolver.getVisibleContextSymbols(context.enclosingDecl, context.resolutionContext); - - return { - symbols: members, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - var resolver = this.semanticInfoChain.getResolver(); - - var context = this.extractResolutionContextFromAST(resolver, ast, document, true); - if (!context || context.inWithBlock) { - return null; + return false; + } + function isImplementationOfOverload(node) { + if (node.body) { + var symbol = getSymbolOfNode(node); + return getSignaturesOfSymbol(symbol).length > 1; } - - var astForDecl = decl.ast(); - if (!astForDecl) { - return null; + return false; + } + function getNodeCheckFlags(node) { + return getNodeLinks(node).flags; + } + function getEnumMemberValue(node) { + return getNodeLinks(node).enumMemberValue; + } + function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) { + var symbol = getSymbolOfNode(location); + var type = symbol && !(symbol.flags & 512 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location); + writeTypeToTextWriter(type, enclosingDeclaration, flags, writer); + } + function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { + var signature = getSignatureFromDeclaration(signatureDeclaration); + writeTypeToTextWriter(getReturnTypeOfSignature(signature), enclosingDeclaration, flags, writer); + } + function invokeEmitter() { + var resolver = { + getProgram: function () { return program; }, + getLocalNameOfContainer: getLocalNameOfContainer, + getExpressionNamePrefix: getExpressionNamePrefix, + getPropertyAccessSubstitution: getPropertyAccessSubstitution, + getExportAssignmentName: getExportAssignmentName, + isReferencedImportDeclaration: isReferencedImportDeclaration, + getNodeCheckFlags: getNodeCheckFlags, + getEnumMemberValue: getEnumMemberValue, + isTopLevelValueImportedViaEntityName: isTopLevelValueImportedViaEntityName, + shouldEmitDeclarations: shouldEmitDeclarations, + isDeclarationVisible: isDeclarationVisible, + isImplementationOfOverload: isImplementationOfOverload, + writeTypeAtLocation: writeTypeAtLocation, + writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, + writeSymbol: writeSymbolToTextWriter, + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile + }; + checkProgram(); + return ts.emitFiles(resolver); + } + function initializeTypeChecker() { + ts.forEach(program.getSourceFiles(), function (file) { + ts.bindSourceFile(file); + ts.forEach(file.semanticErrors, addDiagnostic); + }); + ts.forEach(program.getSourceFiles(), function (file) { + if (!ts.isExternalModule(file)) { + extendSymbolTable(globals, file.locals); + } + }); + getSymbolLinks(undefinedSymbol).type = undefinedType; + getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); + getSymbolLinks(unknownSymbol).type = unknownType; + globals[undefinedSymbol.name] = undefinedSymbol; + globalArraySymbol = getGlobalSymbol("Array"); + globalArrayType = getTypeOfGlobalSymbol(globalArraySymbol, 1); + globalObjectType = getGlobalType("Object"); + globalFunctionType = getGlobalType("Function"); + globalStringType = getGlobalType("String"); + globalNumberType = getGlobalType("Number"); + globalBooleanType = getGlobalType("Boolean"); + globalRegExpType = getGlobalType("RegExp"); + } + initializeTypeChecker(); + return checker; + } + ts.createTypeChecker = createTypeChecker; +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.DiagnosticCode = { + error_TS_0_1: "error TS{0}: {1}", + warning_TS_0_1: "warning TS{0}: {1}", + Unrecognized_escape_sequence: "Unrecognized escape sequence.", + Unexpected_character_0: "Unexpected character {0}.", + Missing_close_quote_character: "Missing close quote character.", + Identifier_expected: "Identifier expected.", + _0_keyword_expected: "'{0}' keyword expected.", + _0_expected: "'{0}' expected.", + Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.", + Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.", + Unexpected_token_0_expected: "Unexpected token; '{0}' expected.", + Trailing_comma_not_allowed: "Trailing comma not allowed.", + AsteriskSlash_expected: "'*/' expected.", + public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.", + Unexpected_token: "Unexpected token.", + Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.", + A_rest_parameter_must_be_last_in_a_parameter_list: "A rest parameter must be last in a parameter list.", + Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.", + A_required_parameter_cannot_follow_an_optional_parameter: "A required parameter cannot follow an optional parameter.", + Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.", + Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.", + Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.", + Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.", + Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.", + Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.", + Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.", + extends_clause_already_seen: "'extends' clause already seen.", + extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.", + Classes_can_only_extend_a_single_class: "Classes can only extend a single class.", + implements_clause_already_seen: "'implements' clause already seen.", + Accessibility_modifier_already_seen: "Accessibility modifier already seen.", + _0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.", + _0_modifier_already_seen: "'{0}' modifier already seen.", + _0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.", + Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.", + super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.", + Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.", + Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.", + A_function_implementation_cannot_be_declared_in_an_ambient_context: "A function implementation cannot be declared in an ambient context.", + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: "A 'declare' modifier cannot be used in an already ambient context.", + Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.", + _0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.", + A_declare_modifier_cannot_be_used_with_an_interface_declaration: "A 'declare' modifier cannot be used with an interface declaration.", + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: "A 'declare' modifier is required for a top level declaration in a .d.ts file.", + A_rest_parameter_cannot_be_optional: "A rest parameter cannot be optional.", + A_rest_parameter_cannot_have_an_initializer: "A rest parameter cannot have an initializer.", + set_accessor_must_have_exactly_one_parameter: "'set' accessor must have exactly one parameter.", + set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.", + set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.", + set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.", + get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.", + Modifiers_cannot_appear_here: "Modifiers cannot appear here.", + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.", + Enum_member_must_have_initializer: "Enum member must have initializer.", + Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.", + Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.", + module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement", + constructor_function_accessor_or_variable: "constructor, function, accessor or variable", + statement: "statement", + case_or_default_clause: "case or default clause", + identifier: "identifier", + call_construct_index_property_or_function_signature: "call, construct, index, property or function signature", + expression: "expression", + type_name: "type name", + property_or_accessor: "property or accessor", + parameter: "parameter", + type: "type", + type_parameter: "type parameter", + A_declare_modifier_cannot_be_used_with_an_import_declaration: "A 'declare' modifier cannot be used with an import declaration.", + Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.", + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.", + Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.", + _0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.", + _0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.", + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.", + Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.", + Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.", + Type_parameters_cannot_appear_on_an_accessor: "Type parameters cannot appear on an accessor.", + Type_annotation_cannot_appear_on_a_set_accessor: "Type annotation cannot appear on a 'set' accessor.", + Index_signature_must_have_exactly_one_parameter: "Index signature must have exactly one parameter.", + _0_list_cannot_be_empty: "'{0}' list cannot be empty.", + variable_declaration: "variable declaration", + type_argument: "type argument", + Invalid_use_of_0_in_strict_mode: "Invalid use of '{0}' in strict mode.", + with_statements_are_not_allowed_in_strict_mode: "'with' statements are not allowed in strict mode.", + delete_cannot_be_called_on_an_identifier_in_strict_mode: "'delete' cannot be called on an identifier in strict mode.", + Invalid_left_hand_side_in_for_in_statement: "Invalid left-hand side in 'for...in' statement.", + continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.", + break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.", + Jump_target_not_found: "Jump target not found.", + Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.", + return_statement_must_be_contained_within_a_function_body: "'return' statement must be contained within a function body.", + Expression_expected: "Expression expected.", + Type_expected: "Type expected.", + Duplicate_identifier_0: "Duplicate identifier '{0}'.", + The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", + The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", + super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.", + The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.", + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?", + Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.", + Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.", + An_index_expression_argument_must_be_string_number_or_any: "An index expression argument must be 'string', 'number', or 'any'.", + Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.", + Type_0_is_not_assignable_to_type_1: "Type '{0}' is not assignable to type '{1}'.", + Type_0_is_not_assignable_to_type_1_NL_2: "Type '{0}' is not assignable to type '{1}':{NL}{2}", + Expected_var_class_interface_or_module: "Expected var, class, interface, or module.", + Getter_0_already_declared: "Getter '{0}' already declared.", + Setter_0_already_declared: "Setter '{0}' already declared.", + Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.", + Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.", + Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.", + Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.", + Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.", + Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.", + Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.", + Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.", + Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.", + Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.", + Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.", + Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.", + Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.", + Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.", + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.", + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.", + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.", + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.", + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.", + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.", + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.", + Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.", + Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.", + Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.", + Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.", + Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", + Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}", + Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.", + Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.", + Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.", + Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.", + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.", + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.", + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.", + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.", + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.", + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.", + Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.", + Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.", + Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.", + Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.", + Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.", + Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.", + Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.", + Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.", + Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.", + Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.", + Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.", + Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.", + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", + A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.", + Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.", + Cannot_find_external_module_0: "Cannot find external module '{0}'.", + Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.", + A_class_may_only_extend_another_class: "A class may only extend another class.", + A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.", + An_interface_may_only_extend_a_class_or_another_interface: "An interface may only extend a class or another interface.", + Unable_to_resolve_type: "Unable to resolve type.", + Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.", + Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.", + Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.", + Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.", + Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}", + Cannot_use_new_with_an_expression_whose_type_lacks_a_signature: "Cannot use 'new' with an expression whose type lacks a signature.", + Only_a_void_function_can_be_called_with_the_new_keyword: "Only a void function can be called with the 'new' keyword.", + Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.", + Type_0_does_not_satisfy_the_constraint_1: "Type '{0}' does not satisfy the constraint '{1}'.", + Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.", + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.", + Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.", + Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).", + Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.", + Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.", + Property_0_does_not_exist_on_value_of_type_1: "Property '{0}' does not exist on value of type '{1}'.", + Cannot_find_name_0: "Cannot find name '{0}'.", + get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.", + this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.", + Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.", + Type_0_recursively_references_itself_as_a_base_type: "Type '{0}' recursively references itself as a base type.", + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.", + super_can_only_be_referenced_in_a_derived_class: "'super' can only be referenced in a derived class.", + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.", + Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.", + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.", + _0_1_is_inaccessible: "'{0}.{1}' is inaccessible.", + this_cannot_be_referenced_in_a_module_body: "'this' cannot be referenced in a module body.", + Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.", + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: "An arithmetic operand must be of type 'any', 'number' or an enum type.", + Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.", + Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.", + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.", + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.", + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.", + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.", + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.", + Setters_cannot_return_a_value: "Setters cannot return a value.", + Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.", + Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.", + Type_0_is_not_generic: "Type '{0}' is not generic.", + Getters_must_return_a_value: "Getters must return a value.", + Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.", + Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.", + Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.", + Cannot_resolve_return_type_reference: "Cannot resolve return type reference.", + Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.", + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.", + All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.", + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.", + Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}", + Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}", + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.", + this_cannot_be_referenced_in_a_static_property_initializer: "'this' cannot be referenced in a static property initializer.", + Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}", + Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}", + Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}", + Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.", + Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}", + Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.", + Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.", + Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.", + Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.", + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.", + this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.", + Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.", + Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.", + Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.", + A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.", + A_rest_parameter_must_be_of_an_array_type: "A rest parameter must be of an array type.", + Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.", + Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.", + Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.", + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.", + Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.", + Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}", + All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.", + All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}", + All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.", + All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}", + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: "A parameter initializer is only allowed in a function or constructor implementation.", + Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.", + Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.", + Module_0_has_no_exported_member_1: "Module '{0}' has no exported member '{1}'.", + Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.", + Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.", + Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.", + Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.", + Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.", + Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.", + Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.", + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.", + Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.", + Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.", + Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}", + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.", + Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.", + All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.", + super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.", + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.", + Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.", + Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.", + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.", + No_best_common_type_exists_among_return_expressions: "No best common type exists among return expressions.", + Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.", + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.", + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.", + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.", + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.", + TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.", + TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.", + TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.", + TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", + TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}", + TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.", + TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.", + TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.", + TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.", + TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.", + TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.", + TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.", + TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.", + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.", + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.", + No_best_common_type_exists_between_0_and_1: "No best common type exists between '{0}' and '{1}'.", + No_best_common_type_exists_between_0_1_and_2: "No best common type exists between '{0}', '{1}', and '{2}'.", + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.", + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.", + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.", + Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.", + Duplicate_string_index_signature: "Duplicate string index signature.", + Duplicate_number_index_signature: "Duplicate number index signature.", + All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.", + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.", + Neither_type_0_nor_type_1_is_assignable_to_the_other: "Neither type '{0}' nor type '{1}' is assignable to the other.", + Neither_type_0_nor_type_1_is_assignable_to_the_other_NL_2: "Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}", + Duplicate_function_implementation: "Duplicate function implementation.", + Function_implementation_expected: "Function implementation expected.", + Function_overload_name_must_be_0: "Function overload name must be '{0}'.", + Constructor_implementation_expected: "Constructor implementation expected.", + Class_name_cannot_be_0: "Class name cannot be '{0}'.", + Interface_name_cannot_be_0: "Interface name cannot be '{0}'.", + Enum_name_cannot_be_0: "Enum name cannot be '{0}'.", + A_module_cannot_have_multiple_export_assignments: "A module cannot have multiple export assignments.", + Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.", + A_parameter_property_is_only_allowed_in_a_constructor_implementation: "A parameter property is only allowed in a constructor implementation.", + Function_overload_must_be_static: "Function overload must be static.", + Function_overload_must_not_be_static: "Function overload must not be static.", + Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.", + Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.", + Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}", + Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", + Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", + Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.", + Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.", + Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.", + Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.", + Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.", + Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.", + Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.", + Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.", + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.", + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.", + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.", + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.", + Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.", + Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}", + Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.", + Type_reference_must_refer_to_type: "Type reference must refer to type.", + In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.", + _0_overload_s: " (+ {0} overload(s))", + Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.", + Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.", + Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}", + Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.", + Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.", + Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.", + Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}", + Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}", + Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}", + Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", + Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", + Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.", + Current_host_does_not_support_0_option: "Current host does not support '{0}' option.", + ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'", + Argument_for_0_option_must_be_1_or_2: "Argument for '{0}' option must be '{1}' or '{2}'", + Could_not_find_file_0: "Could not find file: '{0}'.", + A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.", + Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.", + Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.", + Emit_Error_0: "Emit Error: {0}.", + Cannot_read_file_0_1: "Cannot read file '{0}': {1}", + Unsupported_file_encoding: "Unsupported file encoding.", + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form or -. For example '{0}' or '{1}'.", + Unsupported_locale_0: "Unsupported locale: '{0}'.", + Execution_Failed_NL: "Execution Failed.{NL}", + Invalid_call_to_up: "Invalid call to 'up'", + Invalid_call_to_down: "Invalid call to 'down'", + Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.", + Unknown_compiler_option_0: "Unknown compiler option '{0}'", + Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.", + Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}", + Could_not_delete_file_0: "Could not delete file '{0}'", + Could_not_create_directory_0: "Could not create directory '{0}'", + Error_while_executing_file_0: "Error while executing file '{0}': ", + Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.", + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.", + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.", + Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.", + Option_0_specified_without_1: "Option '{0}' specified without '{1}'", + codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.", + Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.", + Generates_corresponding_0_file: "Generates corresponding {0} file.", + Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.", + Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.", + Watch_input_files: "Watch input files.", + Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.", + Do_not_emit_comments_to_output: "Do not emit comments to output.", + Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.", + Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'", + Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'", + Print_this_message: "Print this message.", + Print_the_compiler_s_version_0: "Print the compiler's version: {0}", + Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.", + Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'", + Syntax_0: "Syntax: {0}", + options: "options", + file1: "file", + Examples: "Examples:", + Options: "Options:", + Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.", + Version_0: "Version {0}", + Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.", + NL_Recompiling_0: "{NL}Recompiling ({0}):", + STRING: "STRING", + KIND: "KIND", + file2: "FILE", + VERSION: "VERSION", + LOCATION: "LOCATION", + DIRECTORY: "DIRECTORY", + NUMBER: "NUMBER", + Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.", + Additional_locations: "Additional locations:", + This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.", + Unknown_rule: "Unknown rule.", + Invalid_line_number_0: "Invalid line number ({0})", + Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.", + Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.", + Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.", + Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.", + Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.", + new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.", + _0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.", + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.", + Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.", + Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.", + Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.", + Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.", + _0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.", + Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.", + Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening." + }; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; + DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; + })(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {})); + var DiagnosticCategory = TypeScript.DiagnosticCategory; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.diagnosticInformationMap = { + "error TS{0}: {1}": { "code": 0, "category": 3 /* NoPrefix */ }, + "warning TS{0}: {1}": { "code": 1, "category": 3 /* NoPrefix */ }, + "Unrecognized escape sequence.": { "code": 1000, "category": 1 /* Error */ }, + "Unexpected character {0}.": { "code": 1001, "category": 1 /* Error */ }, + "Missing close quote character.": { "code": 1002, "category": 1 /* Error */ }, + "Identifier expected.": { "code": 1003, "category": 1 /* Error */ }, + "'{0}' keyword expected.": { "code": 1004, "category": 1 /* Error */ }, + "'{0}' expected.": { "code": 1005, "category": 1 /* Error */ }, + "Identifier expected; '{0}' is a keyword.": { "code": 1006, "category": 1 /* Error */ }, + "Automatic semicolon insertion not allowed.": { "code": 1007, "category": 1 /* Error */ }, + "Unexpected token; '{0}' expected.": { "code": 1008, "category": 1 /* Error */ }, + "Trailing comma not allowed.": { "code": 1009, "category": 1 /* Error */ }, + "'*/' expected.": { "code": 1010, "category": 1 /* Error */ }, + "'public' or 'private' modifier must precede 'static'.": { "code": 1011, "category": 1 /* Error */ }, + "Unexpected token.": { "code": 1012, "category": 1 /* Error */ }, + "Catch clause parameter cannot have a type annotation.": { "code": 1013, "category": 1 /* Error */ }, + "A rest parameter must be last in a parameter list.": { "code": 1014, "category": 1 /* Error */ }, + "Parameter cannot have question mark and initializer.": { "code": 1015, "category": 1 /* Error */ }, + "A required parameter cannot follow an optional parameter.": { "code": 1016, "category": 1 /* Error */ }, + "Index signatures cannot have rest parameters.": { "code": 1017, "category": 1 /* Error */ }, + "Index signature parameter cannot have accessibility modifiers.": { "code": 1018, "category": 1 /* Error */ }, + "Index signature parameter cannot have a question mark.": { "code": 1019, "category": 1 /* Error */ }, + "Index signature parameter cannot have an initializer.": { "code": 1020, "category": 1 /* Error */ }, + "Index signature must have a type annotation.": { "code": 1021, "category": 1 /* Error */ }, + "Index signature parameter must have a type annotation.": { "code": 1022, "category": 1 /* Error */ }, + "Index signature parameter type must be 'string' or 'number'.": { "code": 1023, "category": 1 /* Error */ }, + "'extends' clause already seen.": { "code": 1024, "category": 1 /* Error */ }, + "'extends' clause must precede 'implements' clause.": { "code": 1025, "category": 1 /* Error */ }, + "Classes can only extend a single class.": { "code": 1026, "category": 1 /* Error */ }, + "'implements' clause already seen.": { "code": 1027, "category": 1 /* Error */ }, + "Accessibility modifier already seen.": { "code": 1028, "category": 1 /* Error */ }, + "'{0}' modifier must precede '{1}' modifier.": { "code": 1029, "category": 1 /* Error */ }, + "'{0}' modifier already seen.": { "code": 1030, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a class element.": { "code": 1031, "category": 1 /* Error */ }, + "Interface declaration cannot have 'implements' clause.": { "code": 1032, "category": 1 /* Error */ }, + "'super' invocation cannot have type arguments.": { "code": 1034, "category": 1 /* Error */ }, + "Only ambient modules can use quoted names.": { "code": 1035, "category": 1 /* Error */ }, + "Statements are not allowed in ambient contexts.": { "code": 1036, "category": 1 /* Error */ }, + "A function implementation cannot be declared in an ambient context.": { "code": 1037, "category": 1 /* Error */ }, + "A 'declare' modifier cannot be used in an already ambient context.": { "code": 1038, "category": 1 /* Error */ }, + "Initializers are not allowed in ambient contexts.": { "code": 1039, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a module element.": { "code": 1044, "category": 1 /* Error */ }, + "A 'declare' modifier cannot be used with an interface declaration.": { "code": 1045, "category": 1 /* Error */ }, + "A 'declare' modifier is required for a top level declaration in a .d.ts file.": { "code": 1046, "category": 1 /* Error */ }, + "A rest parameter cannot be optional.": { "code": 1047, "category": 1 /* Error */ }, + "A rest parameter cannot have an initializer.": { "code": 1048, "category": 1 /* Error */ }, + "'set' accessor must have exactly one parameter.": { "code": 1049, "category": 1 /* Error */ }, + "'set' accessor parameter cannot be optional.": { "code": 1051, "category": 1 /* Error */ }, + "'set' accessor parameter cannot have an initializer.": { "code": 1052, "category": 1 /* Error */ }, + "'set' accessor cannot have rest parameter.": { "code": 1053, "category": 1 /* Error */ }, + "'get' accessor cannot have parameters.": { "code": 1054, "category": 1 /* Error */ }, + "Modifiers cannot appear here.": { "code": 1055, "category": 1 /* Error */ }, + "Accessors are only available when targeting ECMAScript 5 and higher.": { "code": 1056, "category": 1 /* Error */ }, + "Enum member must have initializer.": { "code": 1061, "category": 1 /* Error */ }, + "Export assignment cannot be used in internal modules.": { "code": 1063, "category": 1 /* Error */ }, + "Ambient enum elements can only have integer literal initializers.": { "code": 1066, "category": 1 /* Error */ }, + "module, class, interface, enum, import or statement": { "code": 1067, "category": 3 /* NoPrefix */ }, + "constructor, function, accessor or variable": { "code": 1068, "category": 3 /* NoPrefix */ }, + "statement": { "code": 1069, "category": 3 /* NoPrefix */ }, + "case or default clause": { "code": 1070, "category": 3 /* NoPrefix */ }, + "identifier": { "code": 1071, "category": 3 /* NoPrefix */ }, + "call, construct, index, property or function signature": { "code": 1072, "category": 3 /* NoPrefix */ }, + "expression": { "code": 1073, "category": 3 /* NoPrefix */ }, + "type name": { "code": 1074, "category": 3 /* NoPrefix */ }, + "property or accessor": { "code": 1075, "category": 3 /* NoPrefix */ }, + "parameter": { "code": 1076, "category": 3 /* NoPrefix */ }, + "type": { "code": 1077, "category": 3 /* NoPrefix */ }, + "type parameter": { "code": 1078, "category": 3 /* NoPrefix */ }, + "A 'declare' modifier cannot be used with an import declaration.": { "code": 1079, "category": 1 /* Error */ }, + "Invalid 'reference' directive syntax.": { "code": 1084, "category": 1 /* Error */ }, + "Octal literals are not available when targeting ECMAScript 5 and higher.": { "code": 1085, "category": 1 /* Error */ }, + "Accessors are not allowed in ambient contexts.": { "code": 1086, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a constructor declaration.": { "code": 1089, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a parameter.": { "code": 1090, "category": 1 /* Error */ }, + "Only a single variable declaration is allowed in a 'for...in' statement.": { "code": 1091, "category": 1 /* Error */ }, + "Type parameters cannot appear on a constructor declaration.": { "code": 1092, "category": 1 /* Error */ }, + "Type annotation cannot appear on a constructor declaration.": { "code": 1093, "category": 1 /* Error */ }, + "Type parameters cannot appear on an accessor.": { "code": 1094, "category": 1 /* Error */ }, + "Type annotation cannot appear on a 'set' accessor.": { "code": 1095, "category": 1 /* Error */ }, + "Index signature must have exactly one parameter.": { "code": 1096, "category": 1 /* Error */ }, + "'{0}' list cannot be empty.": { "code": 1097, "category": 1 /* Error */ }, + "variable declaration": { "code": 1098, "category": 3 /* NoPrefix */ }, + "type argument": { "code": 1099, "category": 3 /* NoPrefix */ }, + "Invalid use of '{0}' in strict mode.": { "code": 1100, "category": 1 /* Error */ }, + "'with' statements are not allowed in strict mode.": { "code": 1101, "category": 1 /* Error */ }, + "'delete' cannot be called on an identifier in strict mode.": { "code": 1102, "category": 1 /* Error */ }, + "Invalid left-hand side in 'for...in' statement.": { "code": 1103, "category": 1 /* Error */ }, + "'continue' statement can only be used within an enclosing iteration statement.": { "code": 1104, "category": 1 /* Error */ }, + "'break' statement can only be used within an enclosing iteration or switch statement.": { "code": 1105, "category": 1 /* Error */ }, + "Jump target not found.": { "code": 1106, "category": 1 /* Error */ }, + "Jump target cannot cross function boundary.": { "code": 1107, "category": 1 /* Error */ }, + "'return' statement must be contained within a function body.": { "code": 1108, "category": 1 /* Error */ }, + "Expression expected.": { "code": 1109, "category": 1 /* Error */ }, + "Type expected.": { "code": 1110, "category": 1 /* Error */ }, + "Duplicate identifier '{0}'.": { "code": 2000, "category": 1 /* Error */ }, + "The name '{0}' does not exist in the current scope.": { "code": 2001, "category": 1 /* Error */ }, + "The name '{0}' does not refer to a value.": { "code": 2002, "category": 1 /* Error */ }, + "'super' can only be used inside a class instance method.": { "code": 2003, "category": 1 /* Error */ }, + "The left-hand side of an assignment expression must be a variable, property or indexer.": { "code": 2004, "category": 1 /* Error */ }, + "Value of type '{0}' is not callable. Did you mean to include 'new'?": { "code": 2161, "category": 1 /* Error */ }, + "Value of type '{0}' is not callable.": { "code": 2006, "category": 1 /* Error */ }, + "Value of type '{0}' is not newable.": { "code": 2007, "category": 1 /* Error */ }, + "An index expression argument must be 'string', 'number', or 'any'.": { "code": 2008, "category": 1 /* Error */ }, + "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { "code": 2009, "category": 1 /* Error */ }, + "Type '{0}' is not assignable to type '{1}'.": { "code": 2011, "category": 1 /* Error */ }, + "Type '{0}' is not assignable to type '{1}':{NL}{2}": { "code": 2012, "category": 1 /* Error */ }, + "Expected var, class, interface, or module.": { "code": 2013, "category": 1 /* Error */ }, + "Getter '{0}' already declared.": { "code": 2015, "category": 1 /* Error */ }, + "Setter '{0}' already declared.": { "code": 2016, "category": 1 /* Error */ }, + "Exported class '{0}' extends private class '{1}'.": { "code": 2018, "category": 1 /* Error */ }, + "Exported class '{0}' implements private interface '{1}'.": { "code": 2019, "category": 1 /* Error */ }, + "Exported interface '{0}' extends private interface '{1}'.": { "code": 2020, "category": 1 /* Error */ }, + "Exported class '{0}' extends class from inaccessible module {1}.": { "code": 2021, "category": 1 /* Error */ }, + "Exported class '{0}' implements interface from inaccessible module {1}.": { "code": 2022, "category": 1 /* Error */ }, + "Exported interface '{0}' extends interface from inaccessible module {1}.": { "code": 2023, "category": 1 /* Error */ }, + "Public static property '{0}' of exported class has or is using private type '{1}'.": { "code": 2024, "category": 1 /* Error */ }, + "Public property '{0}' of exported class has or is using private type '{1}'.": { "code": 2025, "category": 1 /* Error */ }, + "Property '{0}' of exported interface has or is using private type '{1}'.": { "code": 2026, "category": 1 /* Error */ }, + "Exported variable '{0}' has or is using private type '{1}'.": { "code": 2027, "category": 1 /* Error */ }, + "Public static property '{0}' of exported class is using inaccessible module {1}.": { "code": 2028, "category": 1 /* Error */ }, + "Public property '{0}' of exported class is using inaccessible module {1}.": { "code": 2029, "category": 1 /* Error */ }, + "Property '{0}' of exported interface is using inaccessible module {1}.": { "code": 2030, "category": 1 /* Error */ }, + "Exported variable '{0}' is using inaccessible module {1}.": { "code": 2031, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { "code": 2032, "category": 1 /* Error */ }, + "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { "code": 2033, "category": 1 /* Error */ }, + "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { "code": 2034, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2035, "category": 1 /* Error */ }, + "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2036, "category": 1 /* Error */ }, + "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2037, "category": 1 /* Error */ }, + "Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2038, "category": 1 /* Error */ }, + "Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2039, "category": 1 /* Error */ }, + "Parameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2040, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { "code": 2041, "category": 1 /* Error */ }, + "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { "code": 2042, "category": 1 /* Error */ }, + "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { "code": 2043, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2044, "category": 1 /* Error */ }, + "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2045, "category": 1 /* Error */ }, + "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2046, "category": 1 /* Error */ }, + "Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2047, "category": 1 /* Error */ }, + "Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2048, "category": 1 /* Error */ }, + "Parameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2049, "category": 1 /* Error */ }, + "Return type of public static property getter from exported class has or is using private type '{0}'.": { "code": 2050, "category": 1 /* Error */ }, + "Return type of public property getter from exported class has or is using private type '{0}'.": { "code": 2051, "category": 1 /* Error */ }, + "Return type of constructor signature from exported interface has or is using private type '{0}'.": { "code": 2052, "category": 1 /* Error */ }, + "Return type of call signature from exported interface has or is using private type '{0}'.": { "code": 2053, "category": 1 /* Error */ }, + "Return type of index signature from exported interface has or is using private type '{0}'.": { "code": 2054, "category": 1 /* Error */ }, + "Return type of public static method from exported class has or is using private type '{0}'.": { "code": 2055, "category": 1 /* Error */ }, + "Return type of public method from exported class has or is using private type '{0}'.": { "code": 2056, "category": 1 /* Error */ }, + "Return type of method from exported interface has or is using private type '{0}'.": { "code": 2057, "category": 1 /* Error */ }, + "Return type of exported function has or is using private type '{0}'.": { "code": 2058, "category": 1 /* Error */ }, + "Return type of public static property getter from exported class is using inaccessible module {0}.": { "code": 2059, "category": 1 /* Error */ }, + "Return type of public property getter from exported class is using inaccessible module {0}.": { "code": 2060, "category": 1 /* Error */ }, + "Return type of constructor signature from exported interface is using inaccessible module {0}.": { "code": 2061, "category": 1 /* Error */ }, + "Return type of call signature from exported interface is using inaccessible module {0}.": { "code": 2062, "category": 1 /* Error */ }, + "Return type of index signature from exported interface is using inaccessible module {0}.": { "code": 2063, "category": 1 /* Error */ }, + "Return type of public static method from exported class is using inaccessible module {0}.": { "code": 2064, "category": 1 /* Error */ }, + "Return type of public method from exported class is using inaccessible module {0}.": { "code": 2065, "category": 1 /* Error */ }, + "Return type of method from exported interface is using inaccessible module {0}.": { "code": 2066, "category": 1 /* Error */ }, + "Return type of exported function is using inaccessible module {0}.": { "code": 2067, "category": 1 /* Error */ }, + "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { "code": 2068, "category": 1 /* Error */ }, + "A parameter list must follow a generic type argument list. '(' expected.": { "code": 2069, "category": 1 /* Error */ }, + "Multiple constructor implementations are not allowed.": { "code": 2070, "category": 1 /* Error */ }, + "Cannot find external module '{0}'.": { "code": 2071, "category": 1 /* Error */ }, + "Module cannot be aliased to a non-module type.": { "code": 2072, "category": 1 /* Error */ }, + "A class may only extend another class.": { "code": 2073, "category": 1 /* Error */ }, + "A class may only implement another class or interface.": { "code": 2074, "category": 1 /* Error */ }, + "An interface may only extend a class or another interface.": { "code": 2075, "category": 1 /* Error */ }, + "Unable to resolve type.": { "code": 2077, "category": 1 /* Error */ }, + "Unable to resolve type of '{0}'.": { "code": 2078, "category": 1 /* Error */ }, + "Unable to resolve type parameter constraint.": { "code": 2079, "category": 1 /* Error */ }, + "Type parameter constraint cannot be a primitive type.": { "code": 2080, "category": 1 /* Error */ }, + "Supplied parameters do not match any signature of call target.": { "code": 2081, "category": 1 /* Error */ }, + "Supplied parameters do not match any signature of call target:{NL}{0}": { "code": 2082, "category": 1 /* Error */ }, + "Cannot use 'new' with an expression whose type lacks a signature.": { "code": 2083, "category": 1 /* Error */ }, + "Only a void function can be called with the 'new' keyword.": { "code": 2084, "category": 1 /* Error */ }, + "Could not select overload for 'new' expression.": { "code": 2085, "category": 1 /* Error */ }, + "Type '{0}' does not satisfy the constraint '{1}'.": { "code": 2086, "category": 1 /* Error */ }, + "Could not select overload for 'call' expression.": { "code": 2087, "category": 1 /* Error */ }, + "Cannot invoke an expression whose type lacks a call signature.": { "code": 2088, "category": 1 /* Error */ }, + "Calls to 'super' are only valid inside a class.": { "code": 2089, "category": 1 /* Error */ }, + "Generic type '{0}' requires {1} type argument(s).": { "code": 2090, "category": 1 /* Error */ }, + "Type of array literal cannot be determined. Best common type could not be found for array elements.": { "code": 2092, "category": 1 /* Error */ }, + "Could not find enclosing symbol for dotted name '{0}'.": { "code": 2093, "category": 1 /* Error */ }, + "Property '{0}' does not exist on value of type '{1}'.": { "code": 2094, "category": 1 /* Error */ }, + "Cannot find name '{0}'.": { "code": 2095, "category": 1 /* Error */ }, + "'get' and 'set' accessor must have the same type.": { "code": 2096, "category": 1 /* Error */ }, + "'this' cannot be referenced in current location.": { "code": 2097, "category": 1 /* Error */ }, + "Static members cannot reference class type parameters.": { "code": 2099, "category": 1 /* Error */ }, + "Type '{0}' recursively references itself as a base type.": { "code": 2100, "category": 1 /* Error */ }, + "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { "code": 2102, "category": 1 /* Error */ }, + "'super' can only be referenced in a derived class.": { "code": 2103, "category": 1 /* Error */ }, + "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { "code": 2104, "category": 1 /* Error */ }, + "Constructors for derived classes must contain a 'super' call.": { "code": 2105, "category": 1 /* Error */ }, + "Super calls are not permitted outside constructors or in nested functions inside constructors.": { "code": 2106, "category": 1 /* Error */ }, + "'{0}.{1}' is inaccessible.": { "code": 2107, "category": 1 /* Error */ }, + "'this' cannot be referenced in a module body.": { "code": 2108, "category": 1 /* Error */ }, + "Invalid '+' expression - types not known to support the addition operator.": { "code": 2111, "category": 1 /* Error */ }, + "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2112, "category": 1 /* Error */ }, + "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2113, "category": 1 /* Error */ }, + "An arithmetic operand must be of type 'any', 'number' or an enum type.": { "code": 2114, "category": 1 /* Error */ }, + "Variable declarations of a 'for' statement cannot use a type annotation.": { "code": 2115, "category": 1 /* Error */ }, + "Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { "code": 2116, "category": 1 /* Error */ }, + "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { "code": 2117, "category": 1 /* Error */ }, + "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { "code": 2118, "category": 1 /* Error */ }, + "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { "code": 2119, "category": 1 /* Error */ }, + "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { "code": 2120, "category": 1 /* Error */ }, + "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { "code": 2121, "category": 1 /* Error */ }, + "Setters cannot return a value.": { "code": 2122, "category": 1 /* Error */ }, + "Tried to query type of uninitialized module '{0}'.": { "code": 2123, "category": 1 /* Error */ }, + "Tried to set variable type to uninitialized module type '{0}'.": { "code": 2124, "category": 1 /* Error */ }, + "Type '{0}' is not generic.": { "code": 2125, "category": 1 /* Error */ }, + "Getters must return a value.": { "code": 2126, "category": 1 /* Error */ }, + "Getter and setter accessors do not agree in visibility.": { "code": 2127, "category": 1 /* Error */ }, + "Invalid left-hand side of assignment expression.": { "code": 2130, "category": 1 /* Error */ }, + "Function declared a non-void return type, but has no return expression.": { "code": 2131, "category": 1 /* Error */ }, + "Cannot resolve return type reference.": { "code": 2132, "category": 1 /* Error */ }, + "Constructors cannot have a return type of 'void'.": { "code": 2133, "category": 1 /* Error */ }, + "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { "code": 2134, "category": 1 /* Error */ }, + "All symbols within a with block will be resolved to 'any'.": { "code": 2135, "category": 1 /* Error */ }, + "Import declarations in an internal module cannot reference an external module.": { "code": 2136, "category": 1 /* Error */ }, + "Class {0} declares interface {1} but does not implement it:{NL}{2}": { "code": 2137, "category": 1 /* Error */ }, + "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { "code": 2138, "category": 1 /* Error */ }, + "The operand of an increment or decrement operator must be a variable, property or indexer.": { "code": 2139, "category": 1 /* Error */ }, + "'this' cannot be referenced in a static property initializer.": { "code": 2140, "category": 1 /* Error */ }, + "Class '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2141, "category": 1 /* Error */ }, + "Interface '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2142, "category": 1 /* Error */ }, + "Interface '{0}' cannot extend interface '{1}':{NL}{2}": { "code": 2143, "category": 1 /* Error */ }, + "Overload signature is not compatible with function definition.": { "code": 2148, "category": 1 /* Error */ }, + "Overload signature is not compatible with function definition:{NL}{0}": { "code": 2149, "category": 1 /* Error */ }, + "Overload signatures must all be public or private.": { "code": 2150, "category": 1 /* Error */ }, + "Overload signatures must all be exported or not exported.": { "code": 2151, "category": 1 /* Error */ }, + "Overload signatures must all be ambient or non-ambient.": { "code": 2152, "category": 1 /* Error */ }, + "Overload signatures must all be optional or required.": { "code": 2153, "category": 1 /* Error */ }, + "Specialized overload signature is not assignable to any non-specialized signature.": { "code": 2154, "category": 1 /* Error */ }, + "'this' cannot be referenced in constructor arguments.": { "code": 2155, "category": 1 /* Error */ }, + "Instance member cannot be accessed off a class.": { "code": 2157, "category": 1 /* Error */ }, + "Untyped function calls may not accept type arguments.": { "code": 2158, "category": 1 /* Error */ }, + "Non-generic functions may not accept type arguments.": { "code": 2159, "category": 1 /* Error */ }, + "A generic type may not reference itself with a wrapped form of its own type parameters.": { "code": 2160, "category": 1 /* Error */ }, + "A rest parameter must be of an array type.": { "code": 2162, "category": 1 /* Error */ }, + "Overload signature implementation cannot use specialized type.": { "code": 2163, "category": 1 /* Error */ }, + "Export assignments may only be used at the top-level of external modules.": { "code": 2164, "category": 1 /* Error */ }, + "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2165, "category": 1 /* Error */ }, + "Only public methods of the base class are accessible via the 'super' keyword.": { "code": 2166, "category": 1 /* Error */ }, + "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { "code": 2167, "category": 1 /* Error */ }, + "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { "code": 2168, "category": 1 /* Error */ }, + "All numerically named properties must be assignable to numeric indexer type '{0}'.": { "code": 2169, "category": 1 /* Error */ }, + "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { "code": 2170, "category": 1 /* Error */ }, + "All named properties must be assignable to string indexer type '{0}'.": { "code": 2171, "category": 1 /* Error */ }, + "All named properties must be assignable to string indexer type '{0}':{NL}{1}": { "code": 2172, "category": 1 /* Error */ }, + "A parameter initializer is only allowed in a function or constructor implementation.": { "code": 2174, "category": 1 /* Error */ }, + "Function expression declared a non-void return type, but has no return expression.": { "code": 2176, "category": 1 /* Error */ }, + "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2177, "category": 1 /* Error */ }, + "Module '{0}' has no exported member '{1}'.": { "code": 2178, "category": 1 /* Error */ }, + "Unable to resolve module reference '{0}'.": { "code": 2179, "category": 1 /* Error */ }, + "Could not find module '{0}' in module '{1}'.": { "code": 2180, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { "code": 2181, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { "code": 2182, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { "code": 2183, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { "code": 2184, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { "code": 2185, "category": 1 /* Error */ }, + "Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { "code": 2186, "category": 1 /* Error */ }, + "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { "code": 2187, "category": 1 /* Error */ }, + "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { "code": 2188, "category": 1 /* Error */ }, + "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { "code": 2189, "category": 1 /* Error */ }, + "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { "code": 2190, "category": 1 /* Error */ }, + "Ambient external module declaration cannot be reopened.": { "code": 2191, "category": 1 /* Error */ }, + "All declarations of merged declaration '{0}' must be exported or not exported.": { "code": 2192, "category": 1 /* Error */ }, + "'super' cannot be referenced in constructor arguments.": { "code": 2193, "category": 1 /* Error */ }, + "Return type of constructor signature must be assignable to the instance type of the class.": { "code": 2194, "category": 1 /* Error */ }, + "Ambient external module declaration must be defined in global context.": { "code": 2195, "category": 1 /* Error */ }, + "Ambient external module declaration cannot specify relative module name.": { "code": 2196, "category": 1 /* Error */ }, + "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { "code": 2197, "category": 1 /* Error */ }, + "No best common type exists among return expressions.": { "code": 2198, "category": 1 /* Error */ }, + "Import declaration cannot refer to external module reference when --noResolve option is set.": { "code": 2199, "category": 1 /* Error */ }, + "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { "code": 2200, "category": 1 /* Error */ }, + "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { "code": 2205, "category": 1 /* Error */ }, + "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { "code": 2206, "category": 1 /* Error */ }, + "Expression resolves to '_super' that compiler uses to capture base class reference.": { "code": 2207, "category": 1 /* Error */ }, + "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2208, "category": 1 /* Error */ }, + "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2209, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2210, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2211, "category": 1 /* Error */ }, + "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2212, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2213, "category": 1 /* Error */ }, + "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2214, "category": 1 /* Error */ }, + "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2215, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2216, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2217, "category": 1 /* Error */ }, + "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2218, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2219, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported class has or is using private type '{1}'.": { "code": 2220, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { "code": 2221, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported class is using inaccessible module {1}.": { "code": 2222, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { "code": 2223, "category": 1 /* Error */ }, + "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { "code": 2224, "category": 1 /* Error */ }, + "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { "code": 2225, "category": 1 /* Error */ }, + "No best common type exists between '{0}' and '{1}'.": { "code": 2226, "category": 1 /* Error */ }, + "No best common type exists between '{0}', '{1}', and '{2}'.": { "code": 2227, "category": 1 /* Error */ }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { "code": 2228, "category": 1 /* Error */ }, + "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { "code": 2229, "category": 1 /* Error */ }, + "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { "code": 2230, "category": 1 /* Error */ }, + "Parameter '{0}' cannot be referenced in its initializer.": { "code": 2231, "category": 1 /* Error */ }, + "Duplicate string index signature.": { "code": 2232, "category": 1 /* Error */ }, + "Duplicate number index signature.": { "code": 2233, "category": 1 /* Error */ }, + "All declarations of an interface must have identical type parameters.": { "code": 2234, "category": 1 /* Error */ }, + "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { "code": 2235, "category": 1 /* Error */ }, + "Neither type '{0}' nor type '{1}' is assignable to the other.": { "code": 2236, "category": 1 /* Error */ }, + "Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}": { "code": 2237, "category": 1 /* Error */ }, + "Duplicate function implementation.": { "code": 2237, "category": 1 /* Error */ }, + "Function implementation expected.": { "code": 2238, "category": 1 /* Error */ }, + "Function overload name must be '{0}'.": { "code": 2239, "category": 1 /* Error */ }, + "Constructor implementation expected.": { "code": 2240, "category": 1 /* Error */ }, + "Class name cannot be '{0}'.": { "code": 2241, "category": 1 /* Error */ }, + "Interface name cannot be '{0}'.": { "code": 2242, "category": 1 /* Error */ }, + "Enum name cannot be '{0}'.": { "code": 2243, "category": 1 /* Error */ }, + "A module cannot have multiple export assignments.": { "code": 2244, "category": 1 /* Error */ }, + "Export assignment not allowed in module with exported element.": { "code": 2245, "category": 1 /* Error */ }, + "A parameter property is only allowed in a constructor implementation.": { "code": 2246, "category": 1 /* Error */ }, + "Function overload must be static.": { "code": 2247, "category": 1 /* Error */ }, + "Function overload must not be static.": { "code": 2248, "category": 1 /* Error */ }, + "Type '{0}' is missing property '{1}' from type '{2}'.": { "code": 4000, "category": 3 /* NoPrefix */ }, + "Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { "code": 4001, "category": 3 /* NoPrefix */ }, + "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { "code": 4002, "category": 3 /* NoPrefix */ }, + "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4003, "category": 3 /* NoPrefix */ }, + "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4004, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' define property '{2}' as private.": { "code": 4005, "category": 3 /* NoPrefix */ }, + "Call signatures of types '{0}' and '{1}' are incompatible.": { "code": 4006, "category": 3 /* NoPrefix */ }, + "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4007, "category": 3 /* NoPrefix */ }, + "Type '{0}' requires a call signature, but type '{1}' lacks one.": { "code": 4008, "category": 3 /* NoPrefix */ }, + "Construct signatures of types '{0}' and '{1}' are incompatible.": { "code": 4009, "category": 3 /* NoPrefix */ }, + "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4010, "category": 3 /* NoPrefix */ }, + "Type '{0}' requires a construct signature, but type '{1}' lacks one.": { "code": 4011, "category": 3 /* NoPrefix */ }, + "Index signatures of types '{0}' and '{1}' are incompatible.": { "code": 4012, "category": 3 /* NoPrefix */ }, + "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4013, "category": 3 /* NoPrefix */ }, + "Call signature expects {0} or fewer parameters.": { "code": 4014, "category": 3 /* NoPrefix */ }, + "Could not apply type '{0}' to argument {1} which is of type '{2}'.": { "code": 4015, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4016, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4017, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { "code": 4018, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { "code": 4019, "category": 3 /* NoPrefix */ }, + "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { "code": 4020, "category": 3 /* NoPrefix */ }, + "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { "code": 4021, "category": 3 /* NoPrefix */ }, + "Type reference cannot refer to container '{0}'.": { "code": 4022, "category": 1 /* Error */ }, + "Type reference must refer to type.": { "code": 4023, "category": 1 /* Error */ }, + "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { "code": 4024, "category": 1 /* Error */ }, + " (+ {0} overload(s))": { "code": 4025, "category": 2 /* Message */ }, + "Variable declaration cannot have the same name as an import declaration.": { "code": 4026, "category": 1 /* Error */ }, + "Signature expected {0} type arguments, got {1} instead.": { "code": 4027, "category": 1 /* Error */ }, + "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { "code": 4028, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { "code": 4029, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { "code": 4030, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { "code": 4031, "category": 3 /* NoPrefix */ }, + "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { "code": 4032, "category": 3 /* NoPrefix */ }, + "Types of string indexer of types '{0}' and '{1}' are not identical.": { "code": 4033, "category": 3 /* NoPrefix */ }, + "Types of number indexer of types '{0}' and '{1}' are not identical.": { "code": 4034, "category": 3 /* NoPrefix */ }, + "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { "code": 4035, "category": 3 /* NoPrefix */ }, + "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { "code": 4036, "category": 3 /* NoPrefix */ }, + "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { "code": 4037, "category": 3 /* NoPrefix */ }, + "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4038, "category": 3 /* NoPrefix */ }, + "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4039, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' define static property '{2}' as private.": { "code": 4040, "category": 3 /* NoPrefix */ }, + "Current host does not support '{0}' option.": { "code": 5001, "category": 1 /* Error */ }, + "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { "code": 5002, "category": 1 /* Error */ }, + "Argument for '{0}' option must be '{1}' or '{2}'": { "code": 5003, "category": 1 /* Error */ }, + "Could not find file: '{0}'.": { "code": 5004, "category": 1 /* Error */ }, + "A file cannot have a reference to itself.": { "code": 5006, "category": 1 /* Error */ }, + "Cannot resolve referenced file: '{0}'.": { "code": 5007, "category": 1 /* Error */ }, + "Cannot find the common subdirectory path for the input files.": { "code": 5009, "category": 1 /* Error */ }, + "Emit Error: {0}.": { "code": 5011, "category": 1 /* Error */ }, + "Cannot read file '{0}': {1}": { "code": 5012, "category": 1 /* Error */ }, + "Unsupported file encoding.": { "code": 5013, "category": 3 /* NoPrefix */ }, + "Locale must be of the form or -. For example '{0}' or '{1}'.": { "code": 5014, "category": 1 /* Error */ }, + "Unsupported locale: '{0}'.": { "code": 5015, "category": 1 /* Error */ }, + "Execution Failed.{NL}": { "code": 5016, "category": 1 /* Error */ }, + "Invalid call to 'up'": { "code": 5019, "category": 1 /* Error */ }, + "Invalid call to 'down'": { "code": 5020, "category": 1 /* Error */ }, + "Base64 value '{0}' finished with a continuation bit.": { "code": 5021, "category": 1 /* Error */ }, + "Unknown compiler option '{0}'": { "code": 5023, "category": 1 /* Error */ }, + "Expected {0} arguments to message, got {1} instead.": { "code": 5024, "category": 1 /* Error */ }, + "Expected the message '{0}' to have {1} arguments, but it had {2}": { "code": 5025, "category": 1 /* Error */ }, + "Could not delete file '{0}'": { "code": 5034, "category": 1 /* Error */ }, + "Could not create directory '{0}'": { "code": 5035, "category": 1 /* Error */ }, + "Error while executing file '{0}': ": { "code": 5036, "category": 1 /* Error */ }, + "Cannot compile external modules unless the '--module' flag is provided.": { "code": 5037, "category": 1 /* Error */ }, + "Option mapRoot cannot be specified without specifying sourcemap option.": { "code": 5038, "category": 1 /* Error */ }, + "Option sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5039, "category": 1 /* Error */ }, + "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5040, "category": 1 /* Error */ }, + "Option '{0}' specified without '{1}'": { "code": 5041, "category": 1 /* Error */ }, + "'codepage' option not supported on current platform.": { "code": 5042, "category": 1 /* Error */ }, + "Concatenate and emit output to single file.": { "code": 6001, "category": 2 /* Message */ }, + "Generates corresponding {0} file.": { "code": 6002, "category": 2 /* Message */ }, + "Specifies the location where debugger should locate map files instead of generated locations.": { "code": 6003, "category": 2 /* Message */ }, + "Specifies the location where debugger should locate TypeScript files instead of source locations.": { "code": 6004, "category": 2 /* Message */ }, + "Watch input files.": { "code": 6005, "category": 2 /* Message */ }, + "Redirect output structure to the directory.": { "code": 6006, "category": 2 /* Message */ }, + "Do not emit comments to output.": { "code": 6009, "category": 2 /* Message */ }, + "Skip resolution and preprocessing.": { "code": 6010, "category": 2 /* Message */ }, + "Specify ECMAScript target version: '{0}' (default), or '{1}'": { "code": 6015, "category": 2 /* Message */ }, + "Specify module code generation: '{0}' or '{1}'": { "code": 6016, "category": 2 /* Message */ }, + "Print this message.": { "code": 6017, "category": 2 /* Message */ }, + "Print the compiler's version: {0}": { "code": 6019, "category": 2 /* Message */ }, + "Allow use of deprecated '{0}' keyword when referencing an external module.": { "code": 6021, "category": 2 /* Message */ }, + "Specify locale for errors and messages. For example '{0}' or '{1}'": { "code": 6022, "category": 2 /* Message */ }, + "Syntax: {0}": { "code": 6023, "category": 2 /* Message */ }, + "options": { "code": 6024, "category": 2 /* Message */ }, + "file1": { "code": 6025, "category": 2 /* Message */ }, + "Examples:": { "code": 6026, "category": 2 /* Message */ }, + "Options:": { "code": 6027, "category": 2 /* Message */ }, + "Insert command line options and files from a file.": { "code": 6030, "category": 2 /* Message */ }, + "Version {0}": { "code": 6029, "category": 2 /* Message */ }, + "Use the '{0}' flag to see options.": { "code": 6031, "category": 2 /* Message */ }, + "{NL}Recompiling ({0}):": { "code": 6032, "category": 2 /* Message */ }, + "STRING": { "code": 6033, "category": 2 /* Message */ }, + "KIND": { "code": 6034, "category": 2 /* Message */ }, + "file2": { "code": 6035, "category": 2 /* Message */ }, + "VERSION": { "code": 6036, "category": 2 /* Message */ }, + "LOCATION": { "code": 6037, "category": 2 /* Message */ }, + "DIRECTORY": { "code": 6038, "category": 2 /* Message */ }, + "NUMBER": { "code": 6039, "category": 2 /* Message */ }, + "Specify the codepage to use when opening source files.": { "code": 6040, "category": 2 /* Message */ }, + "Additional locations:": { "code": 6041, "category": 2 /* Message */ }, + "This version of the Javascript runtime does not support the '{0}' function.": { "code": 7000, "category": 1 /* Error */ }, + "Unknown rule.": { "code": 7002, "category": 1 /* Error */ }, + "Invalid line number ({0})": { "code": 7003, "category": 1 /* Error */ }, + "Warn on expressions and declarations with an implied 'any' type.": { "code": 7004, "category": 2 /* Message */ }, + "Variable '{0}' implicitly has an 'any' type.": { "code": 7005, "category": 1 /* Error */ }, + "Parameter '{0}' of '{1}' implicitly has an 'any' type.": { "code": 7006, "category": 1 /* Error */ }, + "Parameter '{0}' of function type implicitly has an 'any' type.": { "code": 7007, "category": 1 /* Error */ }, + "Member '{0}' of object type implicitly has an 'any' type.": { "code": 7008, "category": 1 /* Error */ }, + "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { "code": 7009, "category": 1 /* Error */ }, + "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7010, "category": 1 /* Error */ }, + "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7011, "category": 1 /* Error */ }, + "Parameter '{0}' of lambda function implicitly has an 'any' type.": { "code": 7012, "category": 1 /* Error */ }, + "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7013, "category": 1 /* Error */ }, + "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7014, "category": 1 /* Error */ }, + "Array Literal implicitly has an 'any' type from widening.": { "code": 7015, "category": 1 /* Error */ }, + "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { "code": 7016, "category": 1 /* Error */ }, + "Index signature of object type implicitly has an 'any' type.": { "code": 7017, "category": 1 /* Error */ }, + "Object literal's property '{0}' implicitly has an 'any' type from widening.": { "code": 7018, "category": 1 /* Error */ } + }; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var ArrayUtilities = (function () { + function ArrayUtilities() { + } + ArrayUtilities.sequenceEquals = function (array1, array2, equals) { + if (array1 === array2) { + return true; } - - var astForDeclContext = this.extractResolutionContextFromAST(resolver, astForDecl, this.getDocument(astForDecl.fileName()), true); - if (!astForDeclContext) { - return null; + if (array1 === null || array2 === null) { + return false; } - - var symbol = decl.getSymbol(); - resolver.resolveDeclaredSymbol(symbol, context.resolutionContext); - symbol.setUnresolved(); - - return { - symbol: symbol, - aliasSymbol: null, - ast: ast, - enclosingScopeSymbol: this.getSymbolOfDeclaration(context.enclosingDecl) - }; - }; - - TypeScriptCompiler.prototype.topLevelDeclaration = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.prototype.getDeclForAST = function (ast) { - return this.semanticInfoChain.getDeclForAST(ast); - }; - - TypeScriptCompiler.prototype.fileNames = function () { - return this.semanticInfoChain.fileNames(); - }; - - TypeScriptCompiler.prototype.topLevelDecl = function (fileName) { - return this.semanticInfoChain.topLevelDecl(fileName); - }; - - TypeScriptCompiler.getLocationText = function (location, resolvePath) { - return resolvePath(location.fileName()) + "(" + (location.line() + 1) + "," + (location.character() + 1) + ")"; - }; - - TypeScriptCompiler.getFullDiagnosticText = function (diagnostic, resolvePath) { - var result = ""; - if (diagnostic.fileName()) { - result += this.getLocationText(diagnostic, resolvePath) + ": "; + if (array1.length !== array2.length) { + return false; } - - result += diagnostic.message(); - - var additionalLocations = diagnostic.additionalLocations(); - if (additionalLocations.length > 0) { - result += " " + TypeScript.getLocalizedText(TypeScript.DiagnosticCode.Additional_locations, null) + TypeScript.Environment.newLine; - - for (var i = 0, n = additionalLocations.length; i < n; i++) { - result += "\t" + this.getLocationText(additionalLocations[i], resolvePath) + TypeScript.Environment.newLine; + for (var i = 0, n = array1.length; i < n; i++) { + if (!equals(array1[i], array2[i])) { + return false; } - } else { - result += TypeScript.Environment.newLine; } - - return result; - }; - return TypeScriptCompiler; - })(); - TypeScript.TypeScriptCompiler = TypeScriptCompiler; - - var CompilerPhase; - (function (CompilerPhase) { - CompilerPhase[CompilerPhase["Syntax"] = 0] = "Syntax"; - CompilerPhase[CompilerPhase["Semantics"] = 1] = "Semantics"; - CompilerPhase[CompilerPhase["EmitOptionsValidation"] = 2] = "EmitOptionsValidation"; - CompilerPhase[CompilerPhase["Emit"] = 3] = "Emit"; - CompilerPhase[CompilerPhase["DeclarationEmit"] = 4] = "DeclarationEmit"; - })(CompilerPhase || (CompilerPhase = {})); - - var CompilerIterator = (function () { - function CompilerIterator(compiler, resolvePath, continueOnDiagnostics, startingPhase) { - if (typeof startingPhase === "undefined") { startingPhase = 0 /* Syntax */; } - this.compiler = compiler; - this.resolvePath = resolvePath; - this.continueOnDiagnostics = continueOnDiagnostics; - this.index = -1; - this.fileNames = null; - this._current = null; - this._emitOptions = null; - this._sharedEmitter = null; - this._sharedDeclarationEmitter = null; - this.hadSyntacticDiagnostics = false; - this.hadSemanticDiagnostics = false; - this.hadEmitDiagnostics = false; - this.fileNames = compiler.fileNames(); - this.compilerPhase = startingPhase; - } - CompilerIterator.prototype.current = function () { - return this._current; + return true; }; - - CompilerIterator.prototype.moveNext = function () { - this._current = null; - - while (this.moveNextInternal()) { - if (this._current) { + ArrayUtilities.contains = function (array, value) { + for (var i = 0; i < array.length; i++) { + if (array[i] === value) { return true; } } - return false; }; - - CompilerIterator.prototype.moveNextInternal = function () { - this.index++; - - while (this.shouldMoveToNextPhase()) { - this.index = 0; - this.compilerPhase++; + ArrayUtilities.distinct = function (array, equalsFn) { + var result = []; + for (var i = 0, n = array.length; i < n; i++) { + var current = array[i]; + for (var j = 0; j < result.length; j++) { + if (equalsFn(result[j], current)) { + break; + } + } + if (j === result.length) { + result.push(current); + } } - - if (this.compilerPhase > 4 /* DeclarationEmit */) { - return false; + return result; + }; + ArrayUtilities.last = function (array) { + if (array.length === 0) { + throw TypeScript.Errors.argumentOutOfRange('array'); } - - switch (this.compilerPhase) { - case 0 /* Syntax */: - return this.moveNextSyntaxPhase(); - case 1 /* Semantics */: - return this.moveNextSemanticsPhase(); - case 2 /* EmitOptionsValidation */: - return this.moveNextEmitOptionsValidationPhase(); - case 3 /* Emit */: - return this.moveNextEmitPhase(); - case 4 /* DeclarationEmit */: - return this.moveNextDeclarationEmitPhase(); + return array[array.length - 1]; + }; + ArrayUtilities.lastOrDefault = function (array, predicate) { + for (var i = array.length - 1; i >= 0; i--) { + var v = array[i]; + if (predicate(v, i)) { + return v; + } } + return null; }; - - CompilerIterator.prototype.shouldMoveToNextPhase = function () { - switch (this.compilerPhase) { - case 2 /* EmitOptionsValidation */: - return this.index === 1; - - case 0 /* Syntax */: - case 1 /* Semantics */: - return this.index === this.fileNames.length; - - case 3 /* Emit */: - case 4 /* DeclarationEmit */: - return this.index === (this.fileNames.length + 1); + ArrayUtilities.firstOrDefault = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + var value = array[i]; + if (func(value, i)) { + return value; + } } - - return false; + return null; }; - - CompilerIterator.prototype.moveNextSyntaxPhase = function () { - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - - var diagnostics = this.compiler.getSyntacticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSyntacticDiagnostics = true; + ArrayUtilities.first = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + var value = array[i]; + if (!func || func(value, i)) { + return value; } - - this._current = CompileResult.fromDiagnostics(diagnostics); } - - return true; + throw TypeScript.Errors.invalidOperation(); }; - - CompilerIterator.prototype.moveNextSemanticsPhase = function () { - if (this.hadSyntacticDiagnostics) { - return false; + ArrayUtilities.sum = function (array, func) { + var result = 0; + for (var i = 0, n = array.length; i < n; i++) { + result += func(array[i]); } - - TypeScript.Debug.assert(this.index >= 0 && this.index < this.fileNames.length); - var fileName = this.fileNames[this.index]; - var diagnostics = this.compiler.getSemanticDiagnostics(fileName); - if (diagnostics.length) { - if (!this.continueOnDiagnostics) { - this.hadSemanticDiagnostics = true; + return result; + }; + ArrayUtilities.select = function (values, func) { + var result = new Array(values.length); + for (var i = 0; i < values.length; i++) { + result[i] = func(values[i]); + } + return result; + }; + ArrayUtilities.where = function (values, func) { + var result = new Array(); + for (var i = 0; i < values.length; i++) { + if (func(values[i])) { + result.push(values[i]); } - - this._current = CompileResult.fromDiagnostics(diagnostics); } - - return true; + return result; }; - - CompilerIterator.prototype.moveNextEmitOptionsValidationPhase = function () { - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - - if (!this._emitOptions) { - this._emitOptions = new TypeScript.EmitOptions(this.compiler, this.resolvePath); + ArrayUtilities.any = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + if (func(array[i])) { + return true; + } } - - if (this._emitOptions.diagnostic()) { - if (!this.continueOnDiagnostics) { - this.hadEmitDiagnostics = true; + return false; + }; + ArrayUtilities.all = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + if (!func(array[i])) { + return false; } - - this._current = CompileResult.fromDiagnostics([this._emitOptions.diagnostic()]); } - return true; }; - - CompilerIterator.prototype.moveNextEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(this._emitOptions); - - if (this.hadEmitDiagnostics) { - return false; - } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedEmitter = this.compiler._emitDocument(document, this._emitOptions, function (outputFiles) { - _this._current = CompileResult.fromOutputFiles(outputFiles); - }, this._sharedEmitter); - return true; - } - - if (this.index === this.fileNames.length && this._sharedEmitter) { - this._current = CompileResult.fromOutputFiles(this._sharedEmitter.getOutputFiles()); + ArrayUtilities.binarySearch = function (array, value) { + var low = 0; + var high = array.length - 1; + while (low <= high) { + var middle = low + ((high - low) >> 1); + var midValue = array[middle]; + if (midValue === value) { + return middle; + } + else if (midValue > value) { + high = middle - 1; + } + else { + low = middle + 1; + } } - - return true; + return ~low; }; - - CompilerIterator.prototype.moveNextDeclarationEmitPhase = function () { - var _this = this; - TypeScript.Debug.assert(!this.hadSyntacticDiagnostics); - TypeScript.Debug.assert(!this.hadEmitDiagnostics); - if (this.hadSemanticDiagnostics) { - return false; + ArrayUtilities.createArray = function (length, defaultValue) { + var result = new Array(length); + for (var i = 0; i < length; i++) { + result[i] = defaultValue; } - - if (!this.compiler.compilationSettings().generateDeclarationFiles()) { - return false; + return result; + }; + ArrayUtilities.grow = function (array, length, defaultValue) { + var count = length - array.length; + for (var i = 0; i < count; i++) { + array.push(defaultValue); } - - TypeScript.Debug.assert(this.index >= 0 && this.index <= this.fileNames.length); - if (this.index < this.fileNames.length) { - var fileName = this.fileNames[this.index]; - var document = this.compiler.getDocument(fileName); - - this._sharedDeclarationEmitter = this.compiler._emitDocumentDeclarations(document, this._emitOptions, function (file) { - _this._current = CompileResult.fromOutputFiles([file]); - }, this._sharedDeclarationEmitter); - return true; + }; + ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) { + for (var i = 0; i < length; i++) { + destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]; } - - if (this.index === this.fileNames.length && this._sharedDeclarationEmitter) { - this._current = CompileResult.fromOutputFiles([this._sharedDeclarationEmitter.getOutputFile()]); + }; + ArrayUtilities.indexOf = function (array, predicate) { + for (var i = 0, n = array.length; i < n; i++) { + if (predicate(array[i])) { + return i; + } } - - return true; + return -1; }; - return CompilerIterator; + return ArrayUtilities; })(); - - function compareDataObjects(dst, src) { - for (var e in dst) { - if (typeof dst[e] === "object") { - if (!compareDataObjects(dst[e], src[e])) - return false; - } else if (typeof dst[e] !== "function") { - if (dst[e] !== src[e]) - return false; - } - } - return true; - } - TypeScript.compareDataObjects = compareDataObjects; + TypeScript.ArrayUtilities = ArrayUtilities; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { - (function (GenerativeTypeClassification) { - GenerativeTypeClassification[GenerativeTypeClassification["Unknown"] = 0] = "Unknown"; - GenerativeTypeClassification[GenerativeTypeClassification["Open"] = 1] = "Open"; - GenerativeTypeClassification[GenerativeTypeClassification["Closed"] = 2] = "Closed"; - GenerativeTypeClassification[GenerativeTypeClassification["InfinitelyExpanding"] = 3] = "InfinitelyExpanding"; - })(TypeScript.GenerativeTypeClassification || (TypeScript.GenerativeTypeClassification = {})); - var GenerativeTypeClassification = TypeScript.GenerativeTypeClassification; - - var PullTypeReferenceSymbol = (function (_super) { - __extends(PullTypeReferenceSymbol, _super); - function PullTypeReferenceSymbol(referencedTypeSymbol) { - _super.call(this, referencedTypeSymbol.name, referencedTypeSymbol.kind); - this.referencedTypeSymbol = referencedTypeSymbol; - this.isResolved = true; - - TypeScript.Debug.assert(referencedTypeSymbol !== null, "Type root symbol may not be null"); - - this.setRootSymbol(referencedTypeSymbol); - - this.typeReference = this; + (function (AssertionLevel) { + AssertionLevel[AssertionLevel["None"] = 0] = "None"; + AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; + AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; + AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; + })(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {})); + var AssertionLevel = TypeScript.AssertionLevel; + var Debug = (function () { + function Debug() { } - PullTypeReferenceSymbol.createTypeReference = function (type) { - if (type.isTypeReference()) { - return type; - } - - var typeReference = type.typeReference; - - if (!typeReference) { - typeReference = new PullTypeReferenceSymbol(type); - type.typeReference = typeReference; - } - - return typeReference; - }; - - PullTypeReferenceSymbol.prototype.isTypeReference = function () { - return true; - }; - - PullTypeReferenceSymbol.prototype.setResolved = function () { - }; - - PullTypeReferenceSymbol.prototype.setUnresolved = function () { - }; - PullTypeReferenceSymbol.prototype.invalidate = function () { - }; - - PullTypeReferenceSymbol.prototype.ensureReferencedTypeIsResolved = function () { - this._getResolver().resolveDeclaredSymbol(this.referencedTypeSymbol); - }; - - PullTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol; - }; - - PullTypeReferenceSymbol.prototype._getResolver = function () { - return this.referencedTypeSymbol._getResolver(); - }; - - PullTypeReferenceSymbol.prototype.hasMembers = function () { - return this.referencedTypeSymbol.hasMembers(); - }; - - PullTypeReferenceSymbol.prototype.setAssociatedContainerType = function (type) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setAssociatedContainerType"); - }; - - PullTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - return this.referencedTypeSymbol.getAssociatedContainerType(); - }; - - PullTypeReferenceSymbol.prototype.getFunctionSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getFunctionSymbol(); - }; - PullTypeReferenceSymbol.prototype.setFunctionSymbol = function (symbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setFunctionSymbol"); - }; - - PullTypeReferenceSymbol.prototype.addContainedNonMember = function (nonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addContainedNonMember"); - }; - PullTypeReferenceSymbol.prototype.findContainedNonMemberContainer = function (containerName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.findContainedNonMemberContainer(containerName, kind); - }; - - PullTypeReferenceSymbol.prototype.addMember = function (memberSymbol) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberType = function (enclosedType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberType"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedMemberContainer = function (enclosedContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedMemberContainer"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMember = function (enclosedNonMember) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMember"); - }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberType = function (enclosedNonMemberType) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberType"); + Debug.shouldAssert = function (level) { + return this.currentAssertionLevel >= level; }; - PullTypeReferenceSymbol.prototype.addEnclosedNonMemberContainer = function (enclosedNonMemberContainer) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addEnclosedNonMemberContainer"); + Debug.assert = function (expression, message, verboseDebugInfo) { + if (message === void 0) { message = ""; } + if (verboseDebugInfo === void 0) { verboseDebugInfo = null; } + if (!expression) { + var verboseDebugString = ""; + if (verboseDebugInfo) { + verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo(); + } + throw new Error("Debug Failure. False expression: " + message + verboseDebugString); + } }; - PullTypeReferenceSymbol.prototype.addTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addTypeParameter"); + Debug.fail = function (message) { + Debug.assert(false, message); }; - PullTypeReferenceSymbol.prototype.addConstructorTypeParameter = function (typeParameter) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addConstructorTypeParameter"); + Debug.currentAssertionLevel = 0 /* None */; + return Debug; + })(); + TypeScript.Debug = Debug; +})(TypeScript || (TypeScript = {})); +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TypeScript; +(function (TypeScript) { + TypeScript.LocalizedDiagnosticMessages = null; + var Location = (function () { + function Location(fileName, lineMap, start, length) { + this._fileName = fileName; + this._lineMap = lineMap; + this._start = start; + this._length = length; + } + Location.prototype.fileName = function () { + return this._fileName; }; - - PullTypeReferenceSymbol.prototype.findContainedNonMember = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMember(name); + Location.prototype.lineMap = function () { + return this._lineMap; }; - - PullTypeReferenceSymbol.prototype.findContainedNonMemberType = function (typeName, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findContainedNonMemberType(typeName, kind); + Location.prototype.line = function () { + return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0; }; - - PullTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getMembers(); + Location.prototype.character = function () { + return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0; }; - - PullTypeReferenceSymbol.prototype.setHasDefaultConstructor = function (hasOne) { - if (typeof hasOne === "undefined") { hasOne = true; } - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ":setHasDefaultConstructor"); + Location.prototype.start = function () { + return this._start; }; - PullTypeReferenceSymbol.prototype.getHasDefaultConstructor = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getHasDefaultConstructor(); + Location.prototype.length = function () { + return this._length; }; - PullTypeReferenceSymbol.prototype.getConstructorMethod = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructorMethod(); + Location.equals = function (location1, location2) { + return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length; }; - PullTypeReferenceSymbol.prototype.setConstructorMethod = function (constructorMethod) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": setConstructorMethod"); + return Location; + })(); + TypeScript.Location = Location; + var Diagnostic = (function (_super) { + __extends(Diagnostic, _super); + function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) { + if (_arguments === void 0) { _arguments = null; } + if (additionalLocations === void 0) { additionalLocations = null; } + _super.call(this, fileName, lineMap, start, length); + this._diagnosticKey = diagnosticKey; + this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null; + this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null; + } + Diagnostic.prototype.toJSON = function (key) { + var result = {}; + result.start = this.start(); + result.length = this.length(); + result.diagnosticCode = this._diagnosticKey; + var _arguments = this.arguments(); + if (_arguments && _arguments.length > 0) { + result.arguments = _arguments; + } + return result; }; - PullTypeReferenceSymbol.prototype.getTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeParameters(); + Diagnostic.prototype.diagnosticKey = function () { + return this._diagnosticKey; }; - - PullTypeReferenceSymbol.prototype.isGeneric = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isGeneric(); + Diagnostic.prototype.arguments = function () { + return this._arguments; }; - - PullTypeReferenceSymbol.prototype.addSpecialization = function (specializedVersionOfThisType, substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.addSpecialization(specializedVersionOfThisType, substitutingTypes); + Diagnostic.prototype.text = function () { + return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments); }; - PullTypeReferenceSymbol.prototype.getSpecialization = function (substitutingTypes) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getSpecialization(substitutingTypes); + Diagnostic.prototype.message = function () { + return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments); }; - PullTypeReferenceSymbol.prototype.getKnownSpecializations = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getKnownSpecializations(); + Diagnostic.prototype.additionalLocations = function () { + return this._additionalLocations || []; }; - PullTypeReferenceSymbol.prototype.getTypeArguments = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArguments(); + Diagnostic.equals = function (diagnostic1, diagnostic2) { + return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { return v1 === v2; }); }; - PullTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypeArgumentsOrTypeParameters(); + Diagnostic.prototype.info = function () { + return getDiagnosticInfoFromKey(this.diagnosticKey()); }; - - PullTypeReferenceSymbol.prototype.appendCallSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendCallSignature"); + return Diagnostic; + })(Location); + TypeScript.Diagnostic = Diagnostic; + function newLine() { + return sys.newLine ? sys.newLine : "\r\n"; + } + TypeScript.newLine = newLine; + function getLargestIndex(diagnostic) { + var largest = -1; + var regex = /\{(\d+)\}/g; + var match; + while (match = regex.exec(diagnostic)) { + var val = parseInt(match[1]); + if (!isNaN(val) && val > largest) { + largest = val; + } + } + return largest; + } + function getDiagnosticInfoFromKey(diagnosticKey) { + var result = TypeScript.diagnosticInformationMap[diagnosticKey]; + TypeScript.Debug.assert(result); + return result; + } + function getLocalizedText(diagnosticKey, args) { + var diagnosticMessageText = diagnosticKey; + TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null); + var actualCount = args ? args.length : 0; + var expectedCount = 1 + getLargestIndex(diagnosticKey); + if (expectedCount !== actualCount) { + throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount])); + } + var valueCount = 1 + getLargestIndex(diagnosticMessageText); + if (valueCount !== expectedCount) { + throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount])); + } + diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) { + return typeof args[num] !== 'undefined' ? args[num] : match; + }); + diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) { + return TypeScript.newLine(); + }); + return diagnosticMessageText; + } + TypeScript.getLocalizedText = getLocalizedText; + function getDiagnosticMessage(diagnosticKey, args) { + var diagnostic = getDiagnosticInfoFromKey(diagnosticKey); + var diagnosticMessageText = getLocalizedText(diagnosticKey, args); + var message; + if (diagnostic.category === 1 /* Error */) { + message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]); + } + else if (diagnostic.category === 0 /* Warning */) { + message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]); + } + else { + message = diagnosticMessageText; + } + return message; + } + TypeScript.getDiagnosticMessage = getDiagnosticMessage; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Errors = (function () { + function Errors() { + } + Errors.argument = function (argument, message) { + return new Error("Invalid argument: " + argument + ". " + message); }; - PullTypeReferenceSymbol.prototype.insertCallSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertCallSignatureAtIndex"); + Errors.argumentOutOfRange = function (argument) { + return new Error("Argument out of range: " + argument); }; - PullTypeReferenceSymbol.prototype.appendConstructSignature = function (callSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": appendConstructSignature"); + Errors.argumentNull = function (argument) { + return new Error("Argument null: " + argument); }; - PullTypeReferenceSymbol.prototype.insertConstructSignatureAtIndex = function (callSignature, index) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": insertConstructSignatureAtIndex"); + Errors.abstract = function () { + return new Error("Operation not implemented properly by subclass."); }; - PullTypeReferenceSymbol.prototype.addIndexSignature = function (indexSignature) { - TypeScript.Debug.fail("Reference symbol " + this.pullSymbolID + ": addIndexSignature"); + Errors.notYetImplemented = function () { + return new Error("Not yet implemented."); }; - - PullTypeReferenceSymbol.prototype.hasOwnCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnCallSignatures(); + Errors.invalidOperation = function (message) { + return new Error("Invalid operation: " + message); }; - PullTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getCallSignatures(); + return Errors; + })(); + TypeScript.Errors = Errors; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Hash = (function () { + function Hash() { + } + Hash.computeFnv1aCharArrayHashCode = function (text, start, len) { + var hashCode = Hash.FNV_BASE; + var end = start + len; + for (var i = start; i < end; i++) { + hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); + } + return hashCode; }; - PullTypeReferenceSymbol.prototype.hasOwnConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnConstructSignatures(); + Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) { + var hash = 0; + for (var i = 0; i < len; i++) { + var ch = key[start + i]; + hash = ((((hash << 5) - hash) | 0) + ch) | 0; + } + return hash & 0x7FFFFFFF; }; - PullTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getConstructSignatures(); + Hash.computeSimple31BitStringHashCode = function (key) { + var hash = 0; + var start = 0; + var len = key.length; + for (var i = 0; i < len; i++) { + var ch = key.charCodeAt(start + i); + hash = ((((hash << 5) - hash) | 0) + ch) | 0; + } + return hash & 0x7FFFFFFF; }; - PullTypeReferenceSymbol.prototype.hasOwnIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.hasOwnIndexSignatures(); + Hash.computeMurmur2StringHashCode = function (key, seed) { + var m = 0x5bd1e995; + var r = 24; + var numberOfCharsLeft = key.length; + var h = Math.abs(seed ^ numberOfCharsLeft); + var index = 0; + while (numberOfCharsLeft >= 2) { + var c1 = key.charCodeAt(index); + var c2 = key.charCodeAt(index + 1); + var k = Math.abs(c1 | (c2 << 16)); + k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); + k ^= k >> r; + k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + h ^= k; + index += 2; + numberOfCharsLeft -= 2; + } + if (numberOfCharsLeft === 1) { + h ^= key.charCodeAt(index); + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + } + h ^= h >> 13; + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + h ^= h >> 15; + return h; }; - PullTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getIndexSignatures(); + Hash.combine = function (value, currentHash) { + return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; }; - - PullTypeReferenceSymbol.prototype.addImplementedType = function (implementedType) { - this.referencedTypeSymbol.addImplementedType(implementedType); + Hash.FNV_BASE = 2166136261; + Hash.FNV_PRIME = 16777619; + return Hash; + })(); + TypeScript.Hash = Hash; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (IntegerUtilities) { + function integerDivide(numerator, denominator) { + return (numerator / denominator) >> 0; + } + IntegerUtilities.integerDivide = integerDivide; + function integerMultiplyLow32Bits(n1, n2) { + var n1Low16 = n1 & 0x0000ffff; + var n1High16 = n1 >>> 16; + var n2Low16 = n2 & 0x0000ffff; + var n2High16 = n2 >>> 16; + var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0; + return resultLow32; + } + IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits; + function isInteger(text) { + return /^[0-9]+$/.test(text); + } + IntegerUtilities.isInteger = isInteger; + function isHexInteger(text) { + return /^0(x|X)[0-9a-fA-F]+$/.test(text); + } + IntegerUtilities.isHexInteger = isHexInteger; + })(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {})); + var IntegerUtilities = TypeScript.IntegerUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var LineMap = (function () { + function LineMap(_computeLineStarts, length) { + this._computeLineStarts = _computeLineStarts; + this.length = length; + this._lineStarts = null; + } + LineMap.prototype.toJSON = function (key) { + return { lineStarts: this.lineStarts(), length: this.length }; }; - PullTypeReferenceSymbol.prototype.getImplementedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getImplementedTypes(); + LineMap.prototype.equals = function (other) { + return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { return v1 === v2; }); }; - PullTypeReferenceSymbol.prototype.addExtendedType = function (extendedType) { - this.referencedTypeSymbol.addExtendedType(extendedType); + LineMap.prototype.lineStarts = function () { + if (this._lineStarts === null) { + this._lineStarts = this._computeLineStarts(); + } + return this._lineStarts; }; - PullTypeReferenceSymbol.prototype.getExtendedTypes = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getExtendedTypes(); + LineMap.prototype.lineCount = function () { + return this.lineStarts().length; }; - PullTypeReferenceSymbol.prototype.addTypeThatExtendsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExtendsThisType(type); + LineMap.prototype.getPosition = function (line, character) { + return this.lineStarts()[line] + character; }; - PullTypeReferenceSymbol.prototype.getTypesThatExtendThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExtendThisType(); + LineMap.prototype.getLineNumberFromPosition = function (position) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + if (position === this.length) { + return this.lineCount() - 1; + } + var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position); + if (lineNumber < 0) { + lineNumber = (~lineNumber) - 1; + } + return lineNumber; }; - PullTypeReferenceSymbol.prototype.addTypeThatExplicitlyImplementsThisType = function (type) { - this.referencedTypeSymbol.addTypeThatExplicitlyImplementsThisType(type); + LineMap.prototype.getLineStartPosition = function (lineNumber) { + return this.lineStarts()[lineNumber]; }; - PullTypeReferenceSymbol.prototype.getTypesThatExplicitlyImplementThisType = function () { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.getTypesThatExplicitlyImplementThisType(); + LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var lineNumber = this.getLineNumberFromPosition(position); + lineAndCharacter.line = lineNumber; + lineAndCharacter.character = position - this.lineStarts()[lineNumber]; }; - - PullTypeReferenceSymbol.prototype.isValidBaseKind = function (baseType, isExtendedType) { - this.ensureReferencedTypeIsResolved(); - return this.referencedTypeSymbol.isValidBaseKind(baseType, isExtendedType); + LineMap.prototype.getLineAndCharacterFromPosition = function (position) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var lineNumber = this.getLineNumberFromPosition(position); + return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]); }; - - PullTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findMember(name, lookInParent); + LineMap.empty = new LineMap(function () { return [0]; }, 0); + return LineMap; + })(); + TypeScript.LineMap = LineMap; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var LineAndCharacter = (function () { + function LineAndCharacter(line, character) { + this._line = 0; + this._character = 0; + if (line < 0) { + throw TypeScript.Errors.argumentOutOfRange("line"); + } + if (character < 0) { + throw TypeScript.Errors.argumentOutOfRange("character"); + } + this._line = line; + this._character = character; + } + LineAndCharacter.prototype.line = function () { + return this._line; }; - PullTypeReferenceSymbol.prototype.findNestedType = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedType(name, kind); + LineAndCharacter.prototype.character = function () { + return this._character; }; - PullTypeReferenceSymbol.prototype.findNestedContainer = function (name, kind) { - if (typeof kind === "undefined") { kind = 0 /* None */; } - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findNestedContainer(name, kind); + return LineAndCharacter; + })(); + TypeScript.LineAndCharacter = LineAndCharacter; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var StringUtilities = (function () { + function StringUtilities() { + } + StringUtilities.isString = function (value) { + return Object.prototype.toString.apply(value, []) === '[object String]'; }; - PullTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); + StringUtilities.endsWith = function (string, value) { + return string.substring(string.length - value.length, string.length) === value; }; - - PullTypeReferenceSymbol.prototype.findTypeParameter = function (name) { - this.ensureReferencedTypeIsResolved(); - - return this.referencedTypeSymbol.findTypeParameter(name); + StringUtilities.startsWith = function (string, value) { + return string.substr(0, value.length) === value; }; - - PullTypeReferenceSymbol.prototype.hasOnlyOverloadCallSignatures = function () { - return this.referencedTypeSymbol.hasOnlyOverloadCallSignatures(); + StringUtilities.repeat = function (value, count) { + return Array(count + 1).join(value); }; - return PullTypeReferenceSymbol; - })(TypeScript.PullTypeSymbol); - TypeScript.PullTypeReferenceSymbol = PullTypeReferenceSymbol; - - TypeScript.nSpecializationsCreated = 0; - TypeScript.nSpecializedSignaturesCreated = 0; - TypeScript.nSpecializedTypeParameterCreated = 0; - - var PullInstantiatedTypeReferenceSymbol = (function (_super) { - __extends(PullInstantiatedTypeReferenceSymbol, _super); - function PullInstantiatedTypeReferenceSymbol(referencedTypeSymbol, _typeParameterArgumentMap, isInstanceReferenceType) { - _super.call(this, referencedTypeSymbol); - this.referencedTypeSymbol = referencedTypeSymbol; - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.isInstanceReferenceType = isInstanceReferenceType; - this._instantiatedMembers = null; - this._allInstantiatedMemberNameCache = null; - this._instantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - this._instantiatedCallSignatures = null; - this._instantiatedConstructSignatures = null; - this._instantiatedIndexSignatures = null; - this._typeArgumentReferences = undefined; - this._instantiatedConstructorMethod = null; - this._instantiatedAssociatedContainerType = null; - this._isArray = undefined; - this._generativeTypeClassification = []; - - TypeScript.nSpecializationsCreated++; + return StringUtilities; + })(); + TypeScript.StringUtilities = StringUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (CharacterCodes) { + CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; + CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; + CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; + CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; + CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; + CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; + CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; + CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; + CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; + CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; + CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; + CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; + CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; + CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; + CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; + CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; + CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; + CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; + CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; + CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; + CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; + CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; + CharacterCodes[CharacterCodes["_"] = 95] = "_"; + CharacterCodes[CharacterCodes["$"] = 36] = "$"; + CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; + CharacterCodes[CharacterCodes["_1"] = 49] = "_1"; + CharacterCodes[CharacterCodes["_2"] = 50] = "_2"; + CharacterCodes[CharacterCodes["_3"] = 51] = "_3"; + CharacterCodes[CharacterCodes["_4"] = 52] = "_4"; + CharacterCodes[CharacterCodes["_5"] = 53] = "_5"; + CharacterCodes[CharacterCodes["_6"] = 54] = "_6"; + CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; + CharacterCodes[CharacterCodes["_8"] = 56] = "_8"; + CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; + CharacterCodes[CharacterCodes["a"] = 97] = "a"; + CharacterCodes[CharacterCodes["b"] = 98] = "b"; + CharacterCodes[CharacterCodes["c"] = 99] = "c"; + CharacterCodes[CharacterCodes["d"] = 100] = "d"; + CharacterCodes[CharacterCodes["e"] = 101] = "e"; + CharacterCodes[CharacterCodes["f"] = 102] = "f"; + CharacterCodes[CharacterCodes["g"] = 103] = "g"; + CharacterCodes[CharacterCodes["h"] = 104] = "h"; + CharacterCodes[CharacterCodes["i"] = 105] = "i"; + CharacterCodes[CharacterCodes["j"] = 106] = "j"; + CharacterCodes[CharacterCodes["k"] = 107] = "k"; + CharacterCodes[CharacterCodes["l"] = 108] = "l"; + CharacterCodes[CharacterCodes["m"] = 109] = "m"; + CharacterCodes[CharacterCodes["n"] = 110] = "n"; + CharacterCodes[CharacterCodes["o"] = 111] = "o"; + CharacterCodes[CharacterCodes["p"] = 112] = "p"; + CharacterCodes[CharacterCodes["q"] = 113] = "q"; + CharacterCodes[CharacterCodes["r"] = 114] = "r"; + CharacterCodes[CharacterCodes["s"] = 115] = "s"; + CharacterCodes[CharacterCodes["t"] = 116] = "t"; + CharacterCodes[CharacterCodes["u"] = 117] = "u"; + CharacterCodes[CharacterCodes["v"] = 118] = "v"; + CharacterCodes[CharacterCodes["w"] = 119] = "w"; + CharacterCodes[CharacterCodes["x"] = 120] = "x"; + CharacterCodes[CharacterCodes["y"] = 121] = "y"; + CharacterCodes[CharacterCodes["z"] = 122] = "z"; + CharacterCodes[CharacterCodes["A"] = 65] = "A"; + CharacterCodes[CharacterCodes["B"] = 66] = "B"; + CharacterCodes[CharacterCodes["C"] = 67] = "C"; + CharacterCodes[CharacterCodes["D"] = 68] = "D"; + CharacterCodes[CharacterCodes["E"] = 69] = "E"; + CharacterCodes[CharacterCodes["F"] = 70] = "F"; + CharacterCodes[CharacterCodes["G"] = 71] = "G"; + CharacterCodes[CharacterCodes["H"] = 72] = "H"; + CharacterCodes[CharacterCodes["I"] = 73] = "I"; + CharacterCodes[CharacterCodes["J"] = 74] = "J"; + CharacterCodes[CharacterCodes["K"] = 75] = "K"; + CharacterCodes[CharacterCodes["L"] = 76] = "L"; + CharacterCodes[CharacterCodes["M"] = 77] = "M"; + CharacterCodes[CharacterCodes["N"] = 78] = "N"; + CharacterCodes[CharacterCodes["O"] = 79] = "O"; + CharacterCodes[CharacterCodes["P"] = 80] = "P"; + CharacterCodes[CharacterCodes["Q"] = 81] = "Q"; + CharacterCodes[CharacterCodes["R"] = 82] = "R"; + CharacterCodes[CharacterCodes["S"] = 83] = "S"; + CharacterCodes[CharacterCodes["T"] = 84] = "T"; + CharacterCodes[CharacterCodes["U"] = 85] = "U"; + CharacterCodes[CharacterCodes["V"] = 86] = "V"; + CharacterCodes[CharacterCodes["W"] = 87] = "W"; + CharacterCodes[CharacterCodes["X"] = 88] = "X"; + CharacterCodes[CharacterCodes["Y"] = 89] = "Y"; + CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; + CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; + CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; + CharacterCodes[CharacterCodes["at"] = 64] = "at"; + CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; + CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; + CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; + CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; + CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; + CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; + CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; + CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; + CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; + CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; + CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; + CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; + CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; + CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; + CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; + CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; + CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; + CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; + CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; + CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; + CharacterCodes[CharacterCodes["question"] = 63] = "question"; + CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; + CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; + CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; + CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; + CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; + CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; + CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; + CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; + CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; + })(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {})); + var CharacterCodes = TypeScript.CharacterCodes; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (ScriptSnapshot) { + var StringScriptSnapshot = (function () { + function StringScriptSnapshot(text) { + this.text = text; + this._lineStartPositions = null; + } + StringScriptSnapshot.prototype.getText = function (start, end) { + return this.text.substring(start, end); + }; + StringScriptSnapshot.prototype.getLength = function () { + return this.text.length; + }; + StringScriptSnapshot.prototype.getLineStartPositions = function () { + if (!this._lineStartPositions) { + this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text); + } + return this._lineStartPositions; + }; + StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + throw TypeScript.Errors.notYetImplemented(); + }; + return StringScriptSnapshot; + })(); + function fromString(text) { + return new StringScriptSnapshot(text); + } + ScriptSnapshot.fromString = fromString; + })(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {})); + var ScriptSnapshot = TypeScript.ScriptSnapshot; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (LineMap1) { + function fromSimpleText(text) { + return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { return text.charCodeAt(index); }, length: text.length() }); }, text.length()); + } + LineMap1.fromSimpleText = fromSimpleText; + function fromScriptSnapshot(scriptSnapshot) { + return new TypeScript.LineMap(function () { return scriptSnapshot.getLineStartPositions(); }, scriptSnapshot.getLength()); + } + LineMap1.fromScriptSnapshot = fromScriptSnapshot; + function fromString(text) { + return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts(text); }, text.length); + } + LineMap1.fromString = fromString; + })(TypeScript.LineMap1 || (TypeScript.LineMap1 = {})); + var LineMap1 = TypeScript.LineMap1; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SimpleText) { + var SimpleStringText = (function () { + function SimpleStringText(value) { + this.value = value; + this._lineMap = null; + } + SimpleStringText.prototype.length = function () { + return this.value.length; + }; + SimpleStringText.prototype.substr = function (start, length) { + return this.value.substr(start, length); + }; + SimpleStringText.prototype.charCodeAt = function (index) { + return this.value.charCodeAt(index); + }; + SimpleStringText.prototype.lineMap = function () { + if (!this._lineMap) { + this._lineMap = TypeScript.LineMap1.fromString(this.value); + } + return this._lineMap; + }; + return SimpleStringText; + })(); + var SimpleScriptSnapshotText = (function () { + function SimpleScriptSnapshotText(scriptSnapshot) { + this.scriptSnapshot = scriptSnapshot; + this._lineMap = null; + } + SimpleScriptSnapshotText.prototype.charCodeAt = function (index) { + return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0); + }; + SimpleScriptSnapshotText.prototype.length = function () { + return this.scriptSnapshot.getLength(); + }; + SimpleScriptSnapshotText.prototype.substr = function (start, length) { + return this.scriptSnapshot.getText(start, start + length); + }; + SimpleScriptSnapshotText.prototype.lineMap = function () { + var _this = this; + if (this._lineMap === null) { + this._lineMap = new TypeScript.LineMap(function () { return _this.scriptSnapshot.getLineStartPositions(); }, this.length()); + } + return this._lineMap; + }; + return SimpleScriptSnapshotText; + })(); + function fromString(value) { + return new SimpleStringText(value); } - PullInstantiatedTypeReferenceSymbol.prototype.getIsSpecialized = function () { - return !this.isInstanceReferenceType; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getGenerativeTypeClassification = function (enclosingType) { - if (!this.isNamedTypeSymbol()) { - return 0 /* Unknown */; + SimpleText.fromString = fromString; + function fromScriptSnapshot(scriptSnapshot) { + return new SimpleScriptSnapshotText(scriptSnapshot); + } + SimpleText.fromScriptSnapshot = fromScriptSnapshot; + })(TypeScript.SimpleText || (TypeScript.SimpleText = {})); + var SimpleText = TypeScript.SimpleText; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (TextUtilities) { + function parseLineStarts(text) { + var length = text.length; + if (0 === length) { + var result = new Array(); + result.push(0); + return result; } - - var generativeTypeClassification = this._generativeTypeClassification[enclosingType.pullSymbolID] || 0 /* Unknown */; - if (generativeTypeClassification === 0 /* Unknown */) { - var typeParameters = enclosingType.getTypeParameters(); - var enclosingTypeParameterMap = []; - for (var i = 0; i < typeParameters.length; i++) { - enclosingTypeParameterMap[typeParameters[i].pullSymbolID] = typeParameters[i]; + var position = 0; + var index = 0; + var arrayBuilder = new Array(); + var lineNumber = 0; + while (index < length) { + var c = text.charCodeAt(index); + var lineBreakLength; + if (c > 13 /* carriageReturn */ && c <= 127) { + index++; + continue; } - - var typeArguments = this.getTypeArguments(); - for (var i = 0; i < typeArguments.length; i++) { - if (typeArguments[i].wrapsSomeTypeParameter(enclosingTypeParameterMap, true)) { - generativeTypeClassification = 1 /* Open */; - break; - } + else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) { + lineBreakLength = 2; } - - if (generativeTypeClassification === 1 /* Open */) { - if (this.wrapsSomeTypeParameterIntoInfinitelyExpandingTypeReference(enclosingType)) { - generativeTypeClassification = 3 /* InfinitelyExpanding */; - } - } else { - generativeTypeClassification = 2 /* Closed */; + else if (c === 10 /* lineFeed */) { + lineBreakLength = 1; + } + else { + lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index); + } + if (0 === lineBreakLength) { + index++; + } + else { + arrayBuilder.push(position); + index += lineBreakLength; + position = index; + lineNumber++; } - - this._generativeTypeClassification[enclosingType.pullSymbolID] = generativeTypeClassification; } - - return generativeTypeClassification; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.isArrayNamedTypeReference = function () { - if (this._isArray === undefined) { - this._isArray = this.getRootSymbol().isArrayNamedTypeReference() || (this.getRootSymbol() === this._getResolver().getArrayNamedType()); + arrayBuilder.push(position); + return arrayBuilder; + } + TextUtilities.parseLineStarts = parseLineStarts; + function getLengthOfLineBreakSlow(text, index, c) { + if (c === 13 /* carriageReturn */) { + var next = index + 1; + return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1; } - return this._isArray; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getElementType = function () { - if (!this.isArrayNamedTypeReference()) { - return null; + else if (isAnyLineBreakCharacter(c)) { + return 1; } - - var typeArguments = this.getTypeArguments(); - return typeArguments ? typeArguments[0] : null; - }; - - PullInstantiatedTypeReferenceSymbol.prototype.getReferencedTypeSymbol = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.getIsSpecialized()) { - return this; + else { + return 0; } - - return this.referencedTypeSymbol; - }; - - PullInstantiatedTypeReferenceSymbol.create = function (resolver, type, typeParameterArgumentMap) { - TypeScript.Debug.assert(resolver); - - var mutableTypeParameterMap = new TypeScript.PullInstantiationHelpers.MutableTypeArgumentMap(typeParameterArgumentMap); - - TypeScript.PullInstantiationHelpers.instantiateTypeArgument(resolver, type, mutableTypeParameterMap); - - var rootType = type.getRootSymbol(); - var instantiation = rootType.getSpecialization(mutableTypeParameterMap.typeParameterArgumentMap); - if (instantiation) { - return instantiation; + } + TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow; + function getLengthOfLineBreak(text, index) { + var c = text.charCodeAt(index); + if (c > 13 /* carriageReturn */ && c <= 127) { + return 0; } - - TypeScript.PullInstantiationHelpers.cleanUpTypeArgumentMap(type, mutableTypeParameterMap); - typeParameterArgumentMap = mutableTypeParameterMap.typeParameterArgumentMap; - - var isInstanceReferenceType = (type.kind & 8216 /* SomeInstantiatableType */) != 0; - var resolvedTypeParameterArgumentMap = typeParameterArgumentMap; - if (isInstanceReferenceType) { - var typeParameters = rootType.getTypeParameters(); - for (var i = 0; i < typeParameters.length; i++) { - if (!TypeScript.PullHelpers.typeSymbolsAreIdentical(typeParameters[i], typeParameterArgumentMap[typeParameters[i].pullSymbolID])) { - isInstanceReferenceType = false; - break; - } - } - - if (isInstanceReferenceType) { - typeParameterArgumentMap = []; - } + return getLengthOfLineBreakSlow(text, index, c); + } + TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak; + function isAnyLineBreakCharacter(c) { + return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */; + } + TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter; + })(TypeScript.TextUtilities || (TypeScript.TextUtilities = {})); + var TextUtilities = TypeScript.TextUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var TextSpan = (function () { + function TextSpan(start, length) { + if (start < 0) { + TypeScript.Errors.argument("start"); } - - instantiation = new PullInstantiatedTypeReferenceSymbol(rootType, typeParameterArgumentMap, isInstanceReferenceType); - - rootType.addSpecialization(instantiation, resolvedTypeParameterArgumentMap); - - return instantiation; + if (length < 0) { + TypeScript.Errors.argument("length"); + } + this._start = start; + this._length = length; + } + TextSpan.prototype.start = function () { + return this._start; }; - - PullInstantiatedTypeReferenceSymbol.prototype.isGeneric = function () { - return this.getRootSymbol().isGeneric(); + TextSpan.prototype.length = function () { + return this._length; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; + TextSpan.prototype.end = function () { + return this._start + this._length; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArguments = function () { - if (this.isInstanceReferenceType) { - return this.getTypeParameters(); - } - - if (this._typeArgumentReferences === undefined) { - var typeParameters = this.referencedTypeSymbol.getTypeParameters(); - - if (typeParameters.length) { - var typeArgument = null; - var typeArguments = []; - - for (var i = 0; i < typeParameters.length; i++) { - typeArgument = this._typeParameterArgumentMap[typeParameters[i].pullSymbolID]; - - if (!typeArgument) { - TypeScript.Debug.fail("type argument count mismatch"); - } - - if (typeArgument) { - typeArguments[typeArguments.length] = typeArgument; - } - } - - this._typeArgumentReferences = typeArguments; - } else { - this._typeArgumentReferences = null; - } - } - - return this._typeArgumentReferences; + TextSpan.prototype.isEmpty = function () { + return this._length === 0; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getTypeArgumentsOrTypeParameters = function () { - return this.getTypeArguments(); + TextSpan.prototype.containsPosition = function (position) { + return position >= this._start && position < this.end(); }; - - PullInstantiatedTypeReferenceSymbol.prototype.populateInstantiatedMemberFromReferencedMember = function (referencedMember) { - var instantiatedMember; - TypeScript.PullHelpers.resolveDeclaredSymbolToUseType(referencedMember); - - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - instantiatedMember = referencedMember; - } else { - instantiatedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - instantiatedMember.setRootSymbol(referencedMember); - instantiatedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - instantiatedMember.isOptional = referencedMember.isOptional; - } - this._instantiatedMemberNameCache[instantiatedMember.name] = instantiatedMember; + TextSpan.prototype.containsTextSpan = function (span) { + return span._start >= this._start && span.end() <= this.end(); }; - - PullInstantiatedTypeReferenceSymbol.prototype.getMembers = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getMembers(); - } - - if (!this._instantiatedMembers) { - var referencedMembers = this.referencedTypeSymbol.getMembers(); - var referencedMember = null; - var instantiatedMember = null; - - this._instantiatedMembers = []; - - for (var i = 0; i < referencedMembers.length; i++) { - referencedMember = referencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (!this._instantiatedMemberNameCache[referencedMember.name]) { - this.populateInstantiatedMemberFromReferencedMember(referencedMember); - } - - this._instantiatedMembers[this._instantiatedMembers.length] = this._instantiatedMemberNameCache[referencedMember.name]; - } - } - - return this._instantiatedMembers; + TextSpan.prototype.overlapsWith = function (span) { + var overlapStart = Math.max(this._start, span._start); + var overlapEnd = Math.min(this.end(), span.end()); + return overlapStart < overlapEnd; }; - - PullInstantiatedTypeReferenceSymbol.prototype.findMember = function (name, lookInParent) { - if (typeof lookInParent === "undefined") { lookInParent = true; } - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.findMember(name, lookInParent); - } - - var memberSymbol = this._instantiatedMemberNameCache[name]; - - if (!memberSymbol) { - var referencedMemberSymbol = this.referencedTypeSymbol.findMember(name, lookInParent); - - if (referencedMemberSymbol) { - this.populateInstantiatedMemberFromReferencedMember(referencedMemberSymbol); - memberSymbol = this._instantiatedMemberNameCache[name]; - } else { - memberSymbol = null; - } + TextSpan.prototype.overlap = function (span) { + var overlapStart = Math.max(this._start, span._start); + var overlapEnd = Math.min(this.end(), span.end()); + if (overlapStart < overlapEnd) { + return TextSpan.fromBounds(overlapStart, overlapEnd); } - - return memberSymbol; + return null; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAllMembers = function (searchDeclKind, memberVisiblity) { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - } - - var requestedMembers = []; - var allReferencedMembers = this.referencedTypeSymbol.getAllMembers(searchDeclKind, memberVisiblity); - - if (!this._allInstantiatedMemberNameCache) { - this._allInstantiatedMemberNameCache = TypeScript.createIntrinsicsObject(); - - var members = this.getMembers(); - - for (var i = 0; i < members.length; i++) { - this._allInstantiatedMemberNameCache[members[i].name] = members[i]; - } - } - - var referencedMember = null; - var requestedMember = null; - - for (var i = 0; i < allReferencedMembers.length; i++) { - referencedMember = allReferencedMembers[i]; - - this._getResolver().resolveDeclaredSymbol(referencedMember); - - if (this._allInstantiatedMemberNameCache[referencedMember.name]) { - requestedMembers[requestedMembers.length] = this._allInstantiatedMemberNameCache[referencedMember.name]; - } else { - if (!referencedMember.type.wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._allInstantiatedMemberNameCache[referencedMember.name] = referencedMember; - requestedMembers[requestedMembers.length] = referencedMember; - } else { - requestedMember = new TypeScript.PullSymbol(referencedMember.name, referencedMember.kind); - requestedMember.setRootSymbol(referencedMember); - - requestedMember.type = this._getResolver().instantiateType(referencedMember.type, this._typeParameterArgumentMap); - requestedMember.isOptional = referencedMember.isOptional; - - this._allInstantiatedMemberNameCache[requestedMember.name] = requestedMember; - requestedMembers[requestedMembers.length] = requestedMember; - } - } - } - - return requestedMembers; + TextSpan.prototype.intersectsWithTextSpan = function (span) { + return span._start <= this.end() && span.end() >= this._start; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructorMethod = function () { - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructorMethod(); - } - - if (!this._instantiatedConstructorMethod) { - var referencedConstructorMethod = this.referencedTypeSymbol.getConstructorMethod(); - this._instantiatedConstructorMethod = new TypeScript.PullSymbol(referencedConstructorMethod.name, referencedConstructorMethod.kind); - this._instantiatedConstructorMethod.setRootSymbol(referencedConstructorMethod); - this._instantiatedConstructorMethod.setResolved(); - - this._instantiatedConstructorMethod.type = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedConstructorMethod.type, this._typeParameterArgumentMap); - } - - return this._instantiatedConstructorMethod; + TextSpan.prototype.intersectsWith = function (start, length) { + var end = start + length; + return start <= this.end() && end >= this._start; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getAssociatedContainerType = function () { - if (!this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getAssociatedContainerType(); + TextSpan.prototype.intersectsWithPosition = function (position) { + return position <= this.end() && position >= this._start; + }; + TextSpan.prototype.intersection = function (span) { + var intersectStart = Math.max(this._start, span._start); + var intersectEnd = Math.min(this.end(), span.end()); + if (intersectStart <= intersectEnd) { + return TextSpan.fromBounds(intersectStart, intersectEnd); } - - if (!this._instantiatedAssociatedContainerType) { - var referencedAssociatedContainerType = this.referencedTypeSymbol.getAssociatedContainerType(); - - if (referencedAssociatedContainerType) { - this._instantiatedAssociatedContainerType = PullInstantiatedTypeReferenceSymbol.create(this._getResolver(), referencedAssociatedContainerType, this._typeParameterArgumentMap); - } + return null; + }; + TextSpan.fromBounds = function (start, end) { + TypeScript.Debug.assert(start >= 0); + TypeScript.Debug.assert(end - start >= 0); + return new TextSpan(start, end - start); + }; + return TextSpan; + })(); + TypeScript.TextSpan = TextSpan; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var TextChangeRange = (function () { + function TextChangeRange(span, newLength) { + if (newLength < 0) { + throw TypeScript.Errors.argumentOutOfRange("newLength"); } - - return this._instantiatedAssociatedContainerType; + this._span = span; + this._newLength = newLength; + } + TextChangeRange.prototype.span = function () { + return this._span; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getCallSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getCallSignatures(); - } - - if (this._instantiatedCallSignatures) { - return this._instantiatedCallSignatures; - } - - var referencedCallSignatures = this.referencedTypeSymbol.getCallSignatures(); - this._instantiatedCallSignatures = []; - - for (var i = 0; i < referencedCallSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedCallSignatures[i]); - - if (!referencedCallSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = referencedCallSignatures[i]; - } else { - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length] = this._getResolver().instantiateSignature(referencedCallSignatures[i], this._typeParameterArgumentMap); - this._instantiatedCallSignatures[this._instantiatedCallSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedCallSignatures; + TextChangeRange.prototype.newLength = function () { + return this._newLength; }; - - PullInstantiatedTypeReferenceSymbol.prototype.getConstructSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getConstructSignatures(); - } - - if (this._instantiatedConstructSignatures) { - return this._instantiatedConstructSignatures; - } - - var referencedConstructSignatures = this.referencedTypeSymbol.getConstructSignatures(); - this._instantiatedConstructSignatures = []; - - for (var i = 0; i < referencedConstructSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedConstructSignatures[i]); - - if (!referencedConstructSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = referencedConstructSignatures[i]; - } else { - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length] = this._getResolver().instantiateSignature(referencedConstructSignatures[i], this._typeParameterArgumentMap); - this._instantiatedConstructSignatures[this._instantiatedConstructSignatures.length - 1].functionType = this; - } - } - - return this._instantiatedConstructSignatures; + TextChangeRange.prototype.newSpan = function () { + return new TypeScript.TextSpan(this.span().start(), this.newLength()); }; - - PullInstantiatedTypeReferenceSymbol.prototype.getIndexSignatures = function () { - this.ensureReferencedTypeIsResolved(); - - if (this.isInstanceReferenceType) { - return this.referencedTypeSymbol.getIndexSignatures(); + TextChangeRange.prototype.isUnchanged = function () { + return this.span().isEmpty() && this.newLength() === 0; + }; + TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) { + if (changes.length === 0) { + return TextChangeRange.unchanged; } - - if (this._instantiatedIndexSignatures) { - return this._instantiatedIndexSignatures; + if (changes.length === 1) { + return changes[0]; } - - var referencedIndexSignatures = this.referencedTypeSymbol.getIndexSignatures(); - this._instantiatedIndexSignatures = []; - - for (var i = 0; i < referencedIndexSignatures.length; i++) { - this._getResolver().resolveDeclaredSymbol(referencedIndexSignatures[i]); - - if (!referencedIndexSignatures[i].wrapsSomeTypeParameter(this._typeParameterArgumentMap)) { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = referencedIndexSignatures[i]; - } else { - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length] = this._getResolver().instantiateSignature(referencedIndexSignatures[i], this._typeParameterArgumentMap); - this._instantiatedIndexSignatures[this._instantiatedIndexSignatures.length - 1].functionType = this; - } + var change0 = changes[0]; + var oldStartN = change0.span().start(); + var oldEndN = change0.span().end(); + var newEndN = oldStartN + change0.newLength(); + for (var i = 1; i < changes.length; i++) { + var nextChange = changes[i]; + var oldStart1 = oldStartN; + var oldEnd1 = oldEndN; + var newEnd1 = newEndN; + var oldStart2 = nextChange.span().start(); + var oldEnd2 = nextChange.span().end(); + var newEnd2 = oldStart2 + nextChange.newLength(); + oldStartN = Math.min(oldStart1, oldStart2); + oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); + newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); } - - return this._instantiatedIndexSignatures; + return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN); }; - return PullInstantiatedTypeReferenceSymbol; - })(PullTypeReferenceSymbol); - TypeScript.PullInstantiatedTypeReferenceSymbol = PullInstantiatedTypeReferenceSymbol; - - var PullInstantiatedSignatureSymbol = (function (_super) { - __extends(PullInstantiatedSignatureSymbol, _super); - function PullInstantiatedSignatureSymbol(rootSignature, _typeParameterArgumentMap) { - _super.call(this, rootSignature.kind, rootSignature.isDefinition()); - this._typeParameterArgumentMap = _typeParameterArgumentMap; - this.setRootSymbol(rootSignature); - TypeScript.nSpecializedSignaturesCreated++; - - rootSignature.addSpecialization(this, _typeParameterArgumentMap); + TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0); + return TextChangeRange; + })(); + TypeScript.TextChangeRange = TextChangeRange; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (CharacterInfo) { + function isDecimalDigit(c) { + return c >= 48 /* _0 */ && c <= 57 /* _9 */; } - PullInstantiatedSignatureSymbol.prototype.getTypeParameterArgumentMap = function () { - return this._typeParameterArgumentMap; - }; - - PullInstantiatedSignatureSymbol.prototype.getIsSpecialized = function () { - return true; - }; - - PullInstantiatedSignatureSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - - PullInstantiatedSignatureSymbol.prototype.getTypeParameters = function () { - var _this = this; - if (!this._typeParameters) { - var rootSymbol = this.getRootSymbol(); - var typeParameters = rootSymbol.getTypeParameters(); - var hasInstantiatedTypeParametersOfThisSignature = TypeScript.ArrayUtilities.all(typeParameters, function (typeParameter) { - return _this._typeParameterArgumentMap[typeParameter.pullSymbolID] !== undefined; - }); - - if (!hasInstantiatedTypeParametersOfThisSignature && typeParameters.length) { - this._typeParameters = []; - for (var i = 0; i < typeParameters.length; i++) { - this._typeParameters[this._typeParameters.length] = this._getResolver().instantiateTypeParameter(typeParameters[i], this._typeParameterArgumentMap); - } - } else { - this._typeParameters = TypeScript.sentinelEmptyArray; - } + CharacterInfo.isDecimalDigit = isDecimalDigit; + function isOctalDigit(c) { + return c >= 48 /* _0 */ && c <= 55 /* _7 */; + } + CharacterInfo.isOctalDigit = isOctalDigit; + function isHexDigit(c) { + return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */); + } + CharacterInfo.isHexDigit = isHexDigit; + function hexValue(c) { + return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10; + } + CharacterInfo.hexValue = hexValue; + function isWhitespace(ch) { + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + return true; } - - return this._typeParameters; - }; - - PullInstantiatedSignatureSymbol.prototype.getAllowedToReferenceTypeParameters = function () { - var rootSymbol = this.getRootSymbol(); - return rootSymbol.getAllowedToReferenceTypeParameters(); - }; - return PullInstantiatedSignatureSymbol; - })(TypeScript.PullSignatureSymbol); - TypeScript.PullInstantiatedSignatureSymbol = PullInstantiatedSignatureSymbol; - - var PullInstantiatedTypeParameterSymbol = (function (_super) { - __extends(PullInstantiatedTypeParameterSymbol, _super); - function PullInstantiatedTypeParameterSymbol(rootTypeParameter, constraintType) { - _super.call(this, rootTypeParameter.name); - TypeScript.nSpecializedTypeParameterCreated++; - - this.setRootSymbol(rootTypeParameter); - this.setConstraint(constraintType); - - rootTypeParameter.addSpecialization(this, [constraintType]); + return false; } - PullInstantiatedTypeParameterSymbol.prototype._getResolver = function () { - return this.getRootSymbol()._getResolver(); - }; - return PullInstantiatedTypeParameterSymbol; - })(TypeScript.PullTypeParameterSymbol); - TypeScript.PullInstantiatedTypeParameterSymbol = PullInstantiatedTypeParameterSymbol; + CharacterInfo.isWhitespace = isWhitespace; + function isLineTerminator(ch) { + switch (ch) { + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + return true; + } + return false; + } + CharacterInfo.isLineTerminator = isLineTerminator; + })(TypeScript.CharacterInfo || (TypeScript.CharacterInfo = {})); + var CharacterInfo = TypeScript.CharacterInfo; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxConstants) { + SyntaxConstants[SyntaxConstants["None"] = 0] = "None"; + SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed"; + SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask"; + SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask"; + SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift"; + })(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {})); + var SyntaxConstants = TypeScript.SyntaxConstants; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var FormattingOptions = (function () { + function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { + this.useTabs = useTabs; + this.spacesPerTab = spacesPerTab; + this.indentSpaces = indentSpaces; + this.newLineCharacter = newLineCharacter; + } + FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n"); + return FormattingOptions; + })(); + TypeScript.FormattingOptions = FormattingOptions; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxKind) { + SyntaxKind[SyntaxKind["None"] = 0] = "None"; + SyntaxKind[SyntaxKind["List"] = 1] = "List"; + SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList"; + SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList"; + SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia"; + SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia"; + SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia"; + SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia"; + SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia"; + SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken"; + SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken"; + SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName"; + SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; + SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral"; + SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral"; + SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword"; + SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword"; + SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword"; + SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword"; + SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword"; + SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword"; + SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword"; + SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword"; + SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword"; + SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword"; + SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword"; + SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword"; + SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword"; + SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword"; + SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword"; + SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword"; + SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword"; + SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword"; + SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword"; + SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword"; + SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword"; + SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword"; + SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword"; + SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword"; + SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword"; + SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword"; + SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword"; + SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword"; + SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword"; + SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword"; + SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword"; + SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword"; + SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword"; + SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword"; + SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword"; + SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword"; + SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword"; + SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword"; + SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword"; + SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword"; + SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword"; + SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword"; + SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword"; + SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword"; + SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword"; + SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword"; + SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword"; + SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword"; + SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword"; + SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword"; + SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword"; + SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken"; + SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken"; + SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken"; + SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken"; + SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken"; + SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken"; + SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken"; + SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken"; + SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken"; + SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken"; + SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken"; + SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken"; + SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken"; + SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken"; + SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken"; + SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken"; + SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken"; + SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken"; + SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken"; + SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken"; + SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken"; + SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken"; + SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken"; + SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken"; + SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken"; + SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken"; + SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken"; + SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken"; + SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken"; + SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken"; + SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken"; + SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken"; + SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken"; + SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken"; + SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken"; + SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken"; + SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit"; + SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName"; + SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType"; + SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType"; + SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType"; + SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType"; + SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType"; + SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment"; + SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration"; + SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration"; + SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration"; + SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration"; + SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor"; + SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature"; + SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature"; + SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; + SyntaxKind[SyntaxKind["Block"] = 146] = "Block"; + SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; + SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement"; + SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement"; + SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression"; + SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression"; + SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression"; + SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression"; + SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression"; + SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression"; + SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression"; + SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression"; + SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression"; + SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression"; + SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression"; + SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression"; + SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression"; + SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression"; + SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression"; + SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression"; + SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression"; + SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression"; + SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression"; + SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression"; + SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression"; + SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression"; + SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression"; + SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression"; + SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression"; + SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression"; + SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression"; + SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression"; + SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression"; + SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression"; + SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression"; + SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression"; + SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression"; + SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression"; + SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression"; + SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression"; + SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression"; + SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression"; + SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression"; + SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression"; + SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression"; + SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression"; + SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression"; + SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression"; + SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression"; + SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression"; + SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression"; + SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression"; + SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression"; + SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression"; + SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression"; + SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator"; + SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList"; + SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList"; + SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList"; + SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList"; + SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause"; + SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause"; + SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause"; + SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause"; + SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause"; + SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause"; + SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause"; + SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause"; + SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter"; + SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint"; + SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment"; + SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment"; + SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter"; + SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement"; + SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference"; + SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; + SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; + SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword"; + SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword"; + SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword"; + SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword"; + SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword"; + SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken"; + SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation"; + SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth"; + SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth"; + SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia"; + SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia"; + SyntaxKind[SyntaxKind["FirstNode"] = SyntaxKind.SourceUnit] = "FirstNode"; + SyntaxKind[SyntaxKind["LastNode"] = SyntaxKind.ModuleNameModuleReference] = "LastNode"; + })(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {})); + var SyntaxKind = TypeScript.SyntaxKind; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { - var SyntaxTreeToAstVisitor = (function () { - function SyntaxTreeToAstVisitor(fileName, lineMap, compilationSettings) { - this.fileName = fileName; - this.lineMap = lineMap; - this.compilationSettings = compilationSettings; - this.position = 0; - this.previousTokenTrailingComments = null; - } - SyntaxTreeToAstVisitor.visit = function (syntaxTree, fileName, compilationSettings, incrementalAST) { - var visitor = incrementalAST ? new SyntaxTreeToIncrementalAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings) : new SyntaxTreeToAstVisitor(fileName, syntaxTree.lineMap(), compilationSettings); - return syntaxTree.sourceUnit().accept(visitor); - }; - - SyntaxTreeToAstVisitor.prototype.movePast = function (element) { - if (element !== null) { - this.position += element.fullWidth(); - } - }; - - SyntaxTreeToAstVisitor.prototype.moveTo = function (element1, element2) { - if (element2 !== null) { - this.position += TypeScript.Syntax.childOffset(element1, element2); - } - }; - - SyntaxTreeToAstVisitor.prototype.setCommentsAndSpan = function (ast, fullStart, node) { - var firstToken = node.firstToken(); - var lastToken = node.lastToken(); - - this.setSpan(ast, fullStart, node, firstToken, lastToken); - ast.setPreComments(this.convertTokenLeadingComments(firstToken, fullStart)); - ast.setPostComments(this.convertNodeTrailingComments(node, lastToken, fullStart)); - }; - - SyntaxTreeToAstVisitor.prototype.createTokenSpan = function (fullStart, element) { - if (element === null) { - return null; - } - - if (element.fullWidth() === 0) { - return new TypeScript.ASTSpan(-1, -1); - } - - var leadingTriviaWidth = element.leadingTriviaWidth(); - var trailingTriviaWidth = element.trailingTriviaWidth(); - - var start = fullStart + leadingTriviaWidth; - var end = fullStart + element.fullWidth() - trailingTriviaWidth; - - return new TypeScript.ASTSpan(start, end); - }; - - SyntaxTreeToAstVisitor.prototype.setSpan = function (span, fullStart, element, firstToken, lastToken) { - if (typeof firstToken === "undefined") { firstToken = element.firstToken(); } - if (typeof lastToken === "undefined") { lastToken = element.lastToken(); } - var leadingTriviaWidth = firstToken ? firstToken.leadingTriviaWidth() : 0; - var trailingTriviaWidth = lastToken ? lastToken.trailingTriviaWidth() : 0; - - var desiredMinChar = fullStart + leadingTriviaWidth; - var desiredLimChar = fullStart + element.fullWidth() - trailingTriviaWidth; - - this.setSpanExplicit(span, desiredMinChar, desiredLimChar); - - span._trailingTriviaWidth = trailingTriviaWidth; - }; - - SyntaxTreeToAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - span._start = start; - span._end = end; - }; - - SyntaxTreeToAstVisitor.prototype.visitSyntaxList = function (node) { - var start = this.position; - var array = new Array(node.childCount()); - - for (var i = 0, n = node.childCount(); i < n; i++) { - array[i] = node.childAt(i).accept(this); - } - - var result = new TypeScript.ISyntaxList2(this.fileName, array); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var start = this.position; - var array = new Array(list.nonSeparatorCount()); - - for (var i = 0, n = list.childCount(); i < n; i++) { - if (i % 2 === 0) { - array[i / 2] = list.childAt(i).accept(this); - this.previousTokenTrailingComments = null; - } else { - var separatorToken = list.childAt(i); - this.previousTokenTrailingComments = this.convertTokenTrailingComments(separatorToken, this.position + separatorToken.leadingTriviaWidth() + separatorToken.width()); - this.movePast(separatorToken); - } - } - - var result = new TypeScript.ISeparatedSyntaxList2(this.fileName, array, list.separatorCount()); - this.setSpan(result, start, list); - - result.setPostComments(this.previousTokenTrailingComments); - this.previousTokenTrailingComments = null; - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.convertComment = function (trivia, commentStartPosition, hasTrailingNewLine) { - var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth()); - - return comment; - }; - - SyntaxTreeToAstVisitor.prototype.convertComments = function (triviaList, commentStartPosition) { - var result = []; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment()) { - var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine(); - result.push(this.convertComment(trivia, commentStartPosition, hasTrailingNewLine)); - } - - commentStartPosition += trivia.fullWidth(); - } - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.mergeComments = function (comments1, comments2) { - if (comments1 === null) { - return comments2; - } - - if (comments2 === null) { - return comments1; - } - - return comments1.concat(comments2); - }; - - SyntaxTreeToAstVisitor.prototype.convertTokenLeadingComments = function (token, commentStartPosition) { - if (token === null) { - return null; - } - - var preComments = token.hasLeadingComment() ? this.convertComments(token.leadingTrivia(), commentStartPosition) : null; - - var previousTokenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; - - return this.mergeComments(previousTokenTrailingComments, preComments); + (function (SyntaxFacts) { + var textToKeywordKind = { + "any": 60 /* AnyKeyword */, + "boolean": 61 /* BooleanKeyword */, + "break": 15 /* BreakKeyword */, + "case": 16 /* CaseKeyword */, + "catch": 17 /* CatchKeyword */, + "class": 44 /* ClassKeyword */, + "continue": 18 /* ContinueKeyword */, + "const": 45 /* ConstKeyword */, + "constructor": 62 /* ConstructorKeyword */, + "debugger": 19 /* DebuggerKeyword */, + "declare": 63 /* DeclareKeyword */, + "default": 20 /* DefaultKeyword */, + "delete": 21 /* DeleteKeyword */, + "do": 22 /* DoKeyword */, + "else": 23 /* ElseKeyword */, + "enum": 46 /* EnumKeyword */, + "export": 47 /* ExportKeyword */, + "extends": 48 /* ExtendsKeyword */, + "false": 24 /* FalseKeyword */, + "finally": 25 /* FinallyKeyword */, + "for": 26 /* ForKeyword */, + "function": 27 /* FunctionKeyword */, + "get": 64 /* GetKeyword */, + "if": 28 /* IfKeyword */, + "implements": 51 /* ImplementsKeyword */, + "import": 49 /* ImportKeyword */, + "in": 29 /* InKeyword */, + "instanceof": 30 /* InstanceOfKeyword */, + "interface": 52 /* InterfaceKeyword */, + "let": 53 /* LetKeyword */, + "module": 65 /* ModuleKeyword */, + "new": 31 /* NewKeyword */, + "null": 32 /* NullKeyword */, + "number": 67 /* NumberKeyword */, + "package": 54 /* PackageKeyword */, + "private": 55 /* PrivateKeyword */, + "protected": 56 /* ProtectedKeyword */, + "public": 57 /* PublicKeyword */, + "require": 66 /* RequireKeyword */, + "return": 33 /* ReturnKeyword */, + "set": 68 /* SetKeyword */, + "static": 58 /* StaticKeyword */, + "string": 69 /* StringKeyword */, + "super": 50 /* SuperKeyword */, + "switch": 34 /* SwitchKeyword */, + "this": 35 /* ThisKeyword */, + "throw": 36 /* ThrowKeyword */, + "true": 37 /* TrueKeyword */, + "try": 38 /* TryKeyword */, + "typeof": 39 /* TypeOfKeyword */, + "var": 40 /* VarKeyword */, + "void": 41 /* VoidKeyword */, + "while": 42 /* WhileKeyword */, + "with": 43 /* WithKeyword */, + "yield": 59 /* YieldKeyword */, + "{": 70 /* OpenBraceToken */, + "}": 71 /* CloseBraceToken */, + "(": 72 /* OpenParenToken */, + ")": 73 /* CloseParenToken */, + "[": 74 /* OpenBracketToken */, + "]": 75 /* CloseBracketToken */, + ".": 76 /* DotToken */, + "...": 77 /* DotDotDotToken */, + ";": 78 /* SemicolonToken */, + ",": 79 /* CommaToken */, + "<": 80 /* LessThanToken */, + ">": 81 /* GreaterThanToken */, + "<=": 82 /* LessThanEqualsToken */, + ">=": 83 /* GreaterThanEqualsToken */, + "==": 84 /* EqualsEqualsToken */, + "=>": 85 /* EqualsGreaterThanToken */, + "!=": 86 /* ExclamationEqualsToken */, + "===": 87 /* EqualsEqualsEqualsToken */, + "!==": 88 /* ExclamationEqualsEqualsToken */, + "+": 89 /* PlusToken */, + "-": 90 /* MinusToken */, + "*": 91 /* AsteriskToken */, + "%": 92 /* PercentToken */, + "++": 93 /* PlusPlusToken */, + "--": 94 /* MinusMinusToken */, + "<<": 95 /* LessThanLessThanToken */, + ">>": 96 /* GreaterThanGreaterThanToken */, + ">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */, + "&": 98 /* AmpersandToken */, + "|": 99 /* BarToken */, + "^": 100 /* CaretToken */, + "!": 101 /* ExclamationToken */, + "~": 102 /* TildeToken */, + "&&": 103 /* AmpersandAmpersandToken */, + "||": 104 /* BarBarToken */, + "?": 105 /* QuestionToken */, + ":": 106 /* ColonToken */, + "=": 107 /* EqualsToken */, + "+=": 108 /* PlusEqualsToken */, + "-=": 109 /* MinusEqualsToken */, + "*=": 110 /* AsteriskEqualsToken */, + "%=": 111 /* PercentEqualsToken */, + "<<=": 112 /* LessThanLessThanEqualsToken */, + ">>=": 113 /* GreaterThanGreaterThanEqualsToken */, + ">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */, + "&=": 115 /* AmpersandEqualsToken */, + "|=": 116 /* BarEqualsToken */, + "^=": 117 /* CaretEqualsToken */, + "/": 118 /* SlashToken */, + "/=": 119 /* SlashEqualsToken */ }; - - SyntaxTreeToAstVisitor.prototype.convertTokenTrailingComments = function (token, commentStartPosition) { - if (token === null || !token.hasTrailingComment() || token.hasTrailingNewLine()) { - return null; + var kindToText = new Array(); + for (var name in textToKeywordKind) { + if (textToKeywordKind.hasOwnProperty(name)) { + kindToText[textToKeywordKind[name]] = name; } - - return this.convertComments(token.trailingTrivia(), commentStartPosition); - }; - - SyntaxTreeToAstVisitor.prototype.convertNodeTrailingComments = function (node, lastToken, nodeStart) { - if (lastToken === null || !lastToken.hasTrailingComment() || lastToken.hasTrailingNewLine()) { - return null; + } + kindToText[62 /* ConstructorKeyword */] = "constructor"; + function getTokenKind(text) { + if (textToKeywordKind.hasOwnProperty(text)) { + return textToKeywordKind[text]; } - - return this.convertComments(lastToken.trailingTrivia(), nodeStart + node.fullWidth() - lastToken.trailingTriviaWidth()); - }; - - SyntaxTreeToAstVisitor.prototype.visitIdentifier = function (token) { - return this.visitToken(token); - }; - - SyntaxTreeToAstVisitor.prototype.visitToken = function (token) { - var fullStart = this.position; - - var result = this.visitTokenWorker(token); - - this.movePast(token); - - var start = fullStart + token.leadingTriviaWidth(); - this.setSpanExplicit(result, start, start + token.width()); - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTokenWorker = function (token) { - switch (token.tokenKind) { - case 60 /* AnyKeyword */: - return new TypeScript.BuiltInType(60 /* AnyKeyword */, token.text(), token.valueText()); - case 61 /* BooleanKeyword */: - return new TypeScript.BuiltInType(61 /* BooleanKeyword */, token.text(), token.valueText()); - case 67 /* NumberKeyword */: - return new TypeScript.BuiltInType(67 /* NumberKeyword */, token.text(), token.valueText()); - case 69 /* StringKeyword */: - return new TypeScript.BuiltInType(69 /* StringKeyword */, token.text(), token.valueText()); - case 41 /* VoidKeyword */: - return new TypeScript.BuiltInType(41 /* VoidKeyword */, token.text(), token.valueText()); - case 35 /* ThisKeyword */: - return new TypeScript.ThisExpression(token.text(), token.valueText()); - case 50 /* SuperKeyword */: - return new TypeScript.SuperExpression(token.text(), token.valueText()); - case 37 /* TrueKeyword */: - return new TypeScript.LiteralExpression(37 /* TrueKeyword */, token.text(), token.valueText()); - case 24 /* FalseKeyword */: - return new TypeScript.LiteralExpression(24 /* FalseKeyword */, token.text(), token.valueText()); - case 32 /* NullKeyword */: - return new TypeScript.LiteralExpression(32 /* NullKeyword */, token.text(), token.valueText()); - case 14 /* StringLiteral */: - return new TypeScript.StringLiteral(token.text(), token.valueText()); - case 12 /* RegularExpressionLiteral */: - return new TypeScript.RegularExpressionLiteral(token.text(), token.valueText()); - case 13 /* NumericLiteral */: - var fullStart = this.position; - var preComments = this.convertTokenLeadingComments(token, fullStart); - - var result = new TypeScript.NumericLiteral(token.value(), token.text(), token.valueText()); - - result.setPreComments(preComments); - return result; - case 11 /* IdentifierName */: - return new TypeScript.Identifier(token.text()); + return 0 /* None */; + } + SyntaxFacts.getTokenKind = getTokenKind; + function getText(kind) { + var result = kindToText[kind]; + return result !== undefined ? result : null; + } + SyntaxFacts.getText = getText; + function isAnyKeyword(kind) { + return kind >= TypeScript.SyntaxKind.FirstKeyword && kind <= TypeScript.SyntaxKind.LastKeyword; + } + SyntaxFacts.isAnyKeyword = isAnyKeyword; + function isAnyPunctuation(kind) { + return kind >= TypeScript.SyntaxKind.FirstPunctuation && kind <= TypeScript.SyntaxKind.LastPunctuation; + } + SyntaxFacts.isAnyPunctuation = isAnyPunctuation; + function isPrefixUnaryExpressionOperatorToken(tokenKind) { + return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; + } + SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken; + function isBinaryExpressionOperatorToken(tokenKind) { + return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; + } + SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken; + function getPrefixUnaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 89 /* PlusToken */: + return 164 /* PlusExpression */; + case 90 /* MinusToken */: + return 165 /* NegateExpression */; + case 102 /* TildeToken */: + return 166 /* BitwiseNotExpression */; + case 101 /* ExclamationToken */: + return 167 /* LogicalNotExpression */; + case 93 /* PlusPlusToken */: + return 168 /* PreIncrementExpression */; + case 94 /* MinusMinusToken */: + return 169 /* PreDecrementExpression */; default: - throw TypeScript.Errors.invalidOperation(); - } - }; - - SyntaxTreeToAstVisitor.prototype.visitSourceUnit = function (node) { - var start = this.position; - TypeScript.Debug.assert(start === 0); - - var bod = this.visitSyntaxList(node.moduleElements); - var comments = this.convertTokenLeadingComments(node.endOfFileToken, TypeScript.Syntax.childOffset(node, node.endOfFileToken)); - var result = new TypeScript.SourceUnit(bod, comments, this.fileName); - this.setSpanExplicit(result, start, start + node.fullWidth()); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExternalModuleReference = function (node) { - var start = this.position; - - this.moveTo(node, node.stringLiteral); - var stringLiteral = node.stringLiteral.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ExternalModuleReference(stringLiteral); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleNameModuleReference = function (node) { - var start = this.position; - var moduleName = node.moduleName.accept(this); - - var result = new TypeScript.ModuleNameModuleReference(moduleName); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitClassDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - this.movePast(node.openBraceToken); - var members = this.visitSyntaxList(node.classElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ClassDeclaration(modifiers, name, typeParameters, heritageClauses, members, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModifiers = function (modifiers) { - var result = null; - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result = result || []; - result.push(1 /* Exported */); - } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result = result || []; - result.push(8 /* Ambient */); + return 0 /* None */; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result = result || []; - result.push(16 /* Static */); + } + SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken; + function getPostfixUnaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 93 /* PlusPlusToken */: + return 210 /* PostIncrementExpression */; + case 94 /* MinusMinusToken */: + return 211 /* PostDecrementExpression */; + default: + return 0 /* None */; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result = result || []; - result.push(4 /* Public */); + } + SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken; + function getBinaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 91 /* AsteriskToken */: + return 205 /* MultiplyExpression */; + case 118 /* SlashToken */: + return 206 /* DivideExpression */; + case 92 /* PercentToken */: + return 207 /* ModuloExpression */; + case 89 /* PlusToken */: + return 208 /* AddExpression */; + case 90 /* MinusToken */: + return 209 /* SubtractExpression */; + case 95 /* LessThanLessThanToken */: + return 202 /* LeftShiftExpression */; + case 96 /* GreaterThanGreaterThanToken */: + return 203 /* SignedRightShiftExpression */; + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + return 204 /* UnsignedRightShiftExpression */; + case 80 /* LessThanToken */: + return 196 /* LessThanExpression */; + case 81 /* GreaterThanToken */: + return 197 /* GreaterThanExpression */; + case 82 /* LessThanEqualsToken */: + return 198 /* LessThanOrEqualExpression */; + case 83 /* GreaterThanEqualsToken */: + return 199 /* GreaterThanOrEqualExpression */; + case 30 /* InstanceOfKeyword */: + return 200 /* InstanceOfExpression */; + case 29 /* InKeyword */: + return 201 /* InExpression */; + case 84 /* EqualsEqualsToken */: + return 192 /* EqualsWithTypeConversionExpression */; + case 86 /* ExclamationEqualsToken */: + return 193 /* NotEqualsWithTypeConversionExpression */; + case 87 /* EqualsEqualsEqualsToken */: + return 194 /* EqualsExpression */; + case 88 /* ExclamationEqualsEqualsToken */: + return 195 /* NotEqualsExpression */; + case 98 /* AmpersandToken */: + return 191 /* BitwiseAndExpression */; + case 100 /* CaretToken */: + return 190 /* BitwiseExclusiveOrExpression */; + case 99 /* BarToken */: + return 189 /* BitwiseOrExpression */; + case 103 /* AmpersandAmpersandToken */: + return 188 /* LogicalAndExpression */; + case 104 /* BarBarToken */: + return 187 /* LogicalOrExpression */; + case 116 /* BarEqualsToken */: + return 182 /* OrAssignmentExpression */; + case 115 /* AmpersandEqualsToken */: + return 180 /* AndAssignmentExpression */; + case 117 /* CaretEqualsToken */: + return 181 /* ExclusiveOrAssignmentExpression */; + case 112 /* LessThanLessThanEqualsToken */: + return 183 /* LeftShiftAssignmentExpression */; + case 113 /* GreaterThanGreaterThanEqualsToken */: + return 184 /* SignedRightShiftAssignmentExpression */; + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + return 185 /* UnsignedRightShiftAssignmentExpression */; + case 108 /* PlusEqualsToken */: + return 175 /* AddAssignmentExpression */; + case 109 /* MinusEqualsToken */: + return 176 /* SubtractAssignmentExpression */; + case 110 /* AsteriskEqualsToken */: + return 177 /* MultiplyAssignmentExpression */; + case 119 /* SlashEqualsToken */: + return 178 /* DivideAssignmentExpression */; + case 111 /* PercentEqualsToken */: + return 179 /* ModuloAssignmentExpression */; + case 107 /* EqualsToken */: + return 174 /* AssignmentExpression */; + case 79 /* CommaToken */: + return 173 /* CommaExpression */; + default: + return 0 /* None */; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result = result || []; - result.push(2 /* Private */); + } + SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken; + function getOperatorTokenFromBinaryExpression(tokenKind) { + switch (tokenKind) { + case 205 /* MultiplyExpression */: + return 91 /* AsteriskToken */; + case 206 /* DivideExpression */: + return 118 /* SlashToken */; + case 207 /* ModuloExpression */: + return 92 /* PercentToken */; + case 208 /* AddExpression */: + return 89 /* PlusToken */; + case 209 /* SubtractExpression */: + return 90 /* MinusToken */; + case 202 /* LeftShiftExpression */: + return 95 /* LessThanLessThanToken */; + case 203 /* SignedRightShiftExpression */: + return 96 /* GreaterThanGreaterThanToken */; + case 204 /* UnsignedRightShiftExpression */: + return 97 /* GreaterThanGreaterThanGreaterThanToken */; + case 196 /* LessThanExpression */: + return 80 /* LessThanToken */; + case 197 /* GreaterThanExpression */: + return 81 /* GreaterThanToken */; + case 198 /* LessThanOrEqualExpression */: + return 82 /* LessThanEqualsToken */; + case 199 /* GreaterThanOrEqualExpression */: + return 83 /* GreaterThanEqualsToken */; + case 200 /* InstanceOfExpression */: + return 30 /* InstanceOfKeyword */; + case 201 /* InExpression */: + return 29 /* InKeyword */; + case 192 /* EqualsWithTypeConversionExpression */: + return 84 /* EqualsEqualsToken */; + case 193 /* NotEqualsWithTypeConversionExpression */: + return 86 /* ExclamationEqualsToken */; + case 194 /* EqualsExpression */: + return 87 /* EqualsEqualsEqualsToken */; + case 195 /* NotEqualsExpression */: + return 88 /* ExclamationEqualsEqualsToken */; + case 191 /* BitwiseAndExpression */: + return 98 /* AmpersandToken */; + case 190 /* BitwiseExclusiveOrExpression */: + return 100 /* CaretToken */; + case 189 /* BitwiseOrExpression */: + return 99 /* BarToken */; + case 188 /* LogicalAndExpression */: + return 103 /* AmpersandAmpersandToken */; + case 187 /* LogicalOrExpression */: + return 104 /* BarBarToken */; + case 182 /* OrAssignmentExpression */: + return 116 /* BarEqualsToken */; + case 180 /* AndAssignmentExpression */: + return 115 /* AmpersandEqualsToken */; + case 181 /* ExclusiveOrAssignmentExpression */: + return 117 /* CaretEqualsToken */; + case 183 /* LeftShiftAssignmentExpression */: + return 112 /* LessThanLessThanEqualsToken */; + case 184 /* SignedRightShiftAssignmentExpression */: + return 113 /* GreaterThanGreaterThanEqualsToken */; + case 185 /* UnsignedRightShiftAssignmentExpression */: + return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + case 175 /* AddAssignmentExpression */: + return 108 /* PlusEqualsToken */; + case 176 /* SubtractAssignmentExpression */: + return 109 /* MinusEqualsToken */; + case 177 /* MultiplyAssignmentExpression */: + return 110 /* AsteriskEqualsToken */; + case 178 /* DivideAssignmentExpression */: + return 119 /* SlashEqualsToken */; + case 179 /* ModuloAssignmentExpression */: + return 111 /* PercentEqualsToken */; + case 174 /* AssignmentExpression */: + return 107 /* EqualsToken */; + case 173 /* CommaExpression */: + return 79 /* CommaToken */; + default: + return 0 /* None */; } - - return result || TypeScript.sentinelEmptyArray; - }; - - SyntaxTreeToAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var heritageClauses = node.heritageClauses ? this.visitSyntaxList(node.heritageClauses) : null; - - var body = this.visitObjectType(node.body); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.InterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, body); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitHeritageClause = function (node) { - var start = this.position; - - this.movePast(node.extendsOrImplementsKeyword); - var typeNames = this.visitSeparatedSyntaxList(node.typeNames); - - var result = new TypeScript.HeritageClause(node.extendsOrImplementsKeyword.tokenKind === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */, typeNames); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitModuleDeclaration = function (node) { - var start = this.position; - - var modifiers = this.visitModifiers(node.modifiers); - - this.moveTo(node, node.moduleKeyword); - this.movePast(node.moduleKeyword); - - var moduleName = node.name ? node.name.accept(this) : null; - var stringLiteral = node.stringLiteral ? node.stringLiteral.accept(this) : null; - - this.movePast(node.openBraceToken); - - var moduleElements = this.visitSyntaxList(node.moduleElements); - - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ModuleDeclaration(modifiers, moduleName, stringLiteral, moduleElements, closeBraceToken); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.FunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - this.movePast(node.openBraceToken); - - var enumElements = this.visitSeparatedSyntaxList(node.enumElements); - - this.movePast(node.closeBraceToken); - - var result = new TypeScript.EnumDeclaration(this.visitModifiers(node.modifiers), identifier, enumElements); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEnumElement = function (node) { - var start = this.position; - - var memberName = this.visitToken(node.propertyName); - - var value = node.equalsValueClause !== null ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.EnumElement(memberName, value); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitImportDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.equalsToken); - var alias = node.moduleReference.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.ImportDeclaration(modifiers, name, alias); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExportAssignment = function (node) { - var start = this.position; - - this.moveTo(node, node.identifier); - var name = this.visitIdentifier(node.identifier); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExportAssignment(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclaration); - - var declaration = node.variableDeclaration.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.VariableStatement(modifiers, declaration); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarators); - var variableDecls = this.visitSeparatedSyntaxList(node.variableDeclarators); - - var result = new TypeScript.VariableDeclaration(variableDecls); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVariableDeclarator = function (node) { - var start = this.position; - var propertyName = this.visitToken(node.propertyName); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? this.visitEqualsValueClause(node.equalsValueClause) : null; - - var result = new TypeScript.VariableDeclarator(propertyName, typeExpr, init); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEqualsValueClause = function (node) { - var start = this.position; - var afterEqualsComments = this.convertTokenTrailingComments(node.equalsToken, this.position + node.equalsToken.leadingTriviaWidth() + node.equalsToken.width()); - - this.movePast(node.equalsToken); - var value = node.value.accept(this); - value.setPreComments(this.mergeComments(afterEqualsComments, value.preComments())); - - var result = new TypeScript.EqualsValueClause(value); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var start = this.position; - - this.movePast(node.operatorToken); - var operand = node.operand.accept(this); - - var result = new TypeScript.PrefixUnaryExpression(node.kind(), operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var start = this.position; - var openStart = this.position + node.openBracketToken.leadingTriviaWidth(); - this.movePast(node.openBracketToken); - - var expressions = this.visitSeparatedSyntaxList(node.expressions); - - var closeStart = this.position + node.closeBracketToken.leadingTriviaWidth(); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayLiteralExpression(expressions); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitOmittedExpression = function (node) { - var start = this.position; - - var result = new TypeScript.OmittedExpression(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var start = this.position; - - var openParenToken = node.openParenToken; - var openParenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - - this.movePast(openParenToken); - - var expr = node.expression.accept(this); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParenthesizedExpression(openParenTrailingComments, expr); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var start = this.position; - - var identifier = node.identifier.accept(this); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.SimpleArrowFunctionExpression(identifier, block, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var start = this.position; - - var callSignature = this.visitCallSignature(node.callSignature); - this.movePast(node.equalsGreaterThanToken); - - var block = node.block ? this.visitBlock(node.block) : null; - var expression = node.expression ? node.expression.accept(this) : null; - - var result = new TypeScript.ParenthesizedArrowFunctionExpression(callSignature, block, expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitType = function (type) { - return type ? type.accept(this) : null; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeQuery = function (node) { - var start = this.position; - this.movePast(node.typeOfKeyword); - var name = node.name.accept(this); - - var result = new TypeScript.TypeQuery(name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitQualifiedName = function (node) { - var start = this.position; - var left = this.visitType(node.left); - this.movePast(node.dotToken); - var right = this.visitIdentifier(node.right); - - var result = new TypeScript.QualifiedName(left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeArgumentList = function (node) { - if (node === null) { - return null; + } + SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression; + function isAssignmentOperatorToken(tokenKind) { + switch (tokenKind) { + case 116 /* BarEqualsToken */: + case 115 /* AmpersandEqualsToken */: + case 117 /* CaretEqualsToken */: + case 112 /* LessThanLessThanEqualsToken */: + case 113 /* GreaterThanGreaterThanEqualsToken */: + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 108 /* PlusEqualsToken */: + case 109 /* MinusEqualsToken */: + case 110 /* AsteriskEqualsToken */: + case 119 /* SlashEqualsToken */: + case 111 /* PercentEqualsToken */: + case 107 /* EqualsToken */: + return true; + default: + return false; } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeArguments = this.visitSeparatedSyntaxList(node.typeArguments); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeArgumentList(typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorType = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.ConstructorType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionType = function (node) { - var start = this.position; - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - this.movePast(node.equalsGreaterThanToken); - var returnType = this.visitType(node.type); - - var result = new TypeScript.FunctionType(typeParameters, parameters, returnType); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectType = function (node) { - var start = this.position; - - this.movePast(node.openBraceToken); - var typeMembers = this.visitSeparatedSyntaxList(node.typeMembers); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectType(typeMembers); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArrayType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.type); - this.movePast(node.openBracketToken); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ArrayType(underlying); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGenericType = function (node) { - var start = this.position; - - var underlying = this.visitType(node.name); - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - var result = new TypeScript.GenericType(underlying, typeArguments); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeAnnotation = function (node) { - if (!node) { - return null; + } + SyntaxFacts.isAssignmentOperatorToken = isAssignmentOperatorToken; + function isType(kind) { + switch (kind) { + case 124 /* ArrayType */: + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + case 41 /* VoidKeyword */: + case 123 /* FunctionType */: + case 122 /* ObjectType */: + case 125 /* ConstructorType */: + case 127 /* TypeQuery */: + case 126 /* GenericType */: + case 121 /* QualifiedName */: + case 11 /* IdentifierName */: + return true; } - - var start = this.position; - this.movePast(node.colonToken); - var type = this.visitType(node.type); - - var result = new TypeScript.TypeAnnotation(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBlock = function (node) { - if (!node) { - return null; + return false; + } + SyntaxFacts.isType = isType; + })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); + var SyntaxFacts = TypeScript.SyntaxFacts; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Scanner) { + TypeScript.Debug.assert(TypeScript.SyntaxKind.LastToken <= 127); + var ScannerConstants; + (function (ScannerConstants) { + ScannerConstants[ScannerConstants["LargeTokenFullStartShift"] = 2] = "LargeTokenFullStartShift"; + ScannerConstants[ScannerConstants["LargeTokenFullWidthShift"] = 7] = "LargeTokenFullWidthShift"; + ScannerConstants[ScannerConstants["FixedWidthTokenFullStartShift"] = 7] = "FixedWidthTokenFullStartShift"; + ScannerConstants[ScannerConstants["SmallTokenFullWidthShift"] = 7] = "SmallTokenFullWidthShift"; + ScannerConstants[ScannerConstants["SmallTokenFullStartShift"] = 12] = "SmallTokenFullStartShift"; + ScannerConstants[ScannerConstants["KindMask"] = 0x7F] = "KindMask"; + ScannerConstants[ScannerConstants["IsVariableWidthMask"] = 0x80] = "IsVariableWidthMask"; + ScannerConstants[ScannerConstants["LargeTokenLeadingTriviaBitMask"] = 0x01] = "LargeTokenLeadingTriviaBitMask"; + ScannerConstants[ScannerConstants["LargeTokenTrailingTriviaBitMask"] = 0x02] = "LargeTokenTrailingTriviaBitMask"; + ScannerConstants[ScannerConstants["SmallTokenFullWidthMask"] = 0x1F] = "SmallTokenFullWidthMask"; + ScannerConstants[ScannerConstants["FixedWidthTokenMaxFullStart"] = 0x7FFFFF] = "FixedWidthTokenMaxFullStart"; + ScannerConstants[ScannerConstants["SmallTokenMaxFullStart"] = 0x3FFFF] = "SmallTokenMaxFullStart"; + ScannerConstants[ScannerConstants["SmallTokenMaxFullWidth"] = 0x1F] = "SmallTokenMaxFullWidth"; + })(ScannerConstants || (ScannerConstants = {})); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 28, 1, 1)) === (1 << 28)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 27, 0, 1)) === (3 << 27)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 25, 1, 0)) === (10 << 25)); + function fixedWidthTokenPackData(fullStart, kind) { + return (fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind; + } + function fixedWidthTokenUnpackFullStart(packedData) { + return packedData >> 7 /* FixedWidthTokenFullStartShift */; + } + function smallTokenPackData(fullStart, fullWidth, kind) { + return (fullStart << 12 /* SmallTokenFullStartShift */) | (fullWidth << 7 /* SmallTokenFullWidthShift */) | kind; + } + function smallTokenUnpackFullWidth(packedData) { + return (packedData >> 7 /* SmallTokenFullWidthShift */) & 31 /* SmallTokenFullWidthMask */; + } + function smallTokenUnpackFullStart(packedData) { + return packedData >> 12 /* SmallTokenFullStartShift */; + } + function largeTokenPackFullStartAndInfo(fullStart, hasLeadingTriviaInfo, hasTrailingTriviaInfo) { + return (fullStart << 2 /* LargeTokenFullStartShift */) | hasLeadingTriviaInfo | hasTrailingTriviaInfo; + } + function largeTokenUnpackFullWidth(packedFullWidthAndKind) { + return packedFullWidthAndKind >> 7 /* LargeTokenFullWidthShift */; + } + function largeTokenUnpackFullStart(packedFullStartAndInfo) { + return packedFullStartAndInfo >> 2 /* LargeTokenFullStartShift */; + } + function largeTokenUnpackHasLeadingTriviaInfo(packed) { + return packed & 1 /* LargeTokenLeadingTriviaBitMask */; + } + function largeTokenUnpackHasTrailingTriviaInfo(packed) { + return packed & 2 /* LargeTokenTrailingTriviaBitMask */; + } + var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, 0); + var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); + var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); + for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) { + if ((character >= 97 /* a */ && character <= 122 /* z */) || (character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) { + isIdentifierStartCharacter[character] = true; + isIdentifierPartCharacter[character] = true; + } + else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) { + isIdentifierPartCharacter[character] = true; + } + } + for (var keywordKind = TypeScript.SyntaxKind.FirstKeyword; keywordKind <= TypeScript.SyntaxKind.LastKeyword; keywordKind++) { + var keyword = TypeScript.SyntaxFacts.getText(keywordKind); + isKeywordStartCharacter[keyword.charCodeAt(0)] = 1; + } + function isContextualToken(token) { + switch (token.kind()) { + case 12 /* RegularExpressionLiteral */: + case 96 /* GreaterThanGreaterThanToken */: + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + case 83 /* GreaterThanEqualsToken */: + case 113 /* GreaterThanGreaterThanEqualsToken */: + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + return true; + default: + return token.isKeywordConvertedToIdentifier(); } - - var start = this.position; - - this.movePast(node.openBraceToken); - var statements = this.visitSyntaxList(node.statements); - var closeBracePosition = this.position; - - var closeBraceLeadingComments = this.convertTokenLeadingComments(node.closeBraceToken, this.position); - var closeBraceToken = this.createTokenSpan(this.position, node.closeBraceToken); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.Block(statements, closeBraceLeadingComments, closeBraceToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameter = function (node) { - var start = this.position; - - var dotDotDotToken = this.createTokenSpan(this.position, node.dotDotDotToken); - - this.moveTo(node, node.identifier); - var identifier = this.visitIdentifier(node.identifier); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - var init = node.equalsValueClause ? node.equalsValueClause.accept(this) : null; - - var modifiers = this.visitModifiers(node.modifiers); - - var result = new TypeScript.Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeExpr, init); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.dotToken); - var name = this.visitIdentifier(node.name); - - var result = new TypeScript.MemberAccessExpression(expression, name); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var start = this.position; - - var operand = node.operand.accept(this); - this.movePast(node.operatorToken); - - var result = new TypeScript.PostfixUnaryExpression(node.kind() === 210 /* PostIncrementExpression */ ? 210 /* PostIncrementExpression */ : 211 /* PostDecrementExpression */, operand); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElementAccessExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - this.movePast(node.openBracketToken); - var argumentExpression = node.argumentExpression.accept(this); - this.movePast(node.closeBracketToken); - - var result = new TypeScript.ElementAccessExpression(expression, argumentExpression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitInvocationExpression = function (node) { - var start = this.position; - - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.InvocationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitArgumentList = function (node) { - if (node === null) { - return null; + } + Scanner.isContextualToken = isContextualToken; + var lastTokenInfo = { leadingTriviaWidth: -1, width: -1 }; + var lastTokenInfoTokenID = -1; + var triviaScanner = createScannerInternal(1 /* ES5 */, TypeScript.SimpleText.fromString(""), function () { + }); + function fillSizeInfo(token, text) { + if (lastTokenInfoTokenID !== TypeScript.syntaxID(token)) { + triviaScanner.fillTokenInfo(token, text, lastTokenInfo); + lastTokenInfoTokenID = TypeScript.syntaxID(token); } - - var start = this.position; - - var typeArguments = this.visitTypeArgumentList(node.typeArgumentList); - - this.movePast(node.openParenToken); - - var _arguments = this.visitSeparatedSyntaxList(node.arguments); - - if (node.arguments.fullWidth() === 0 && node.closeParenToken.fullWidth() === 0) { - var openParenTokenEnd = start + node.openParenToken.leadingTriviaWidth() + node.openParenToken.width(); - this.setSpanExplicit(_arguments, openParenTokenEnd, openParenTokenEnd + node.openParenToken.trailingTriviaWidth()); + } + function fullText(token, text) { + return text.substr(token.fullStart(), token.fullWidth()); + } + function leadingTrivia(token, text) { + if (!token.hasLeadingTrivia()) { + return TypeScript.Syntax.emptyTriviaList; } - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ArgumentList(typeArguments, _arguments, closeParenToken); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBinaryExpression = function (node) { - var start = this.position; - - var left = node.left.accept(this); - this.movePast(node.operatorToken); - var right = node.right.accept(this); - - var result = new TypeScript.BinaryExpression(node.kind(), left, right); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConditionalExpression = function (node) { - var start = this.position; - - var condition = node.condition.accept(this); - this.movePast(node.questionToken); - var whenTrue = node.whenTrue.accept(this); - this.movePast(node.colonToken); - var whenFalse = node.whenFalse.accept(this); - - var result = new TypeScript.ConditionalExpression(condition, whenTrue, whenFalse); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructSignature = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.ConstructSignature(callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMethodSignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - - var callSignature = this.visitCallSignature(node.callSignature); - - var result = new TypeScript.MethodSignature(name, questionToken, callSignature); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexSignature = function (node) { - var start = this.position; - - this.movePast(node.openBracketToken); - - var parameter = node.parameter.accept(this); - - this.movePast(node.closeBracketToken); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.IndexSignature(parameter, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitPropertySignature = function (node) { - var start = this.position; - - var name = this.visitToken(node.propertyName); - - var questionToken = this.createTokenSpan(this.position, node.questionToken); - this.movePast(node.questionToken); - var typeExpr = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.PropertySignature(name, questionToken, typeExpr); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitParameterList = function (node) { - if (!node) { - return null; + return triviaScanner.scanTrivia(token, text, false); + } + function trailingTrivia(token, text) { + if (!token.hasTrailingTrivia()) { + return TypeScript.Syntax.emptyTriviaList; } - - var start = this.position; - - var openParenToken = node.openParenToken; - - this.previousTokenTrailingComments = this.convertTokenTrailingComments(openParenToken, start + openParenToken.leadingTriviaWidth() + openParenToken.width()); - var openParenTrailingComments = null; - if (node.parameters.childCount() === 0) { - openParenTrailingComments = this.previousTokenTrailingComments; - this.previousTokenTrailingComments = null; + return triviaScanner.scanTrivia(token, text, true); + } + function leadingTriviaWidth(token, text) { + if (!token.hasLeadingTrivia()) { + return 0; } - - this.movePast(node.openParenToken); - var parameters = this.visitSeparatedSyntaxList(node.parameters); - this.movePast(node.closeParenToken); - - var result = new TypeScript.ParameterList(openParenTrailingComments, parameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCallSignature = function (node) { - var start = this.position; - - var typeParameters = this.visitTypeParameterList(node.typeParameterList); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var result = new TypeScript.CallSignature(typeParameters, parameters, returnType); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameterList = function (node) { - if (!node) { - return null; + fillSizeInfo(token, text); + return lastTokenInfo.leadingTriviaWidth; + } + function trailingTriviaWidth(token, text) { + if (!token.hasTrailingTrivia()) { + return 0; + } + fillSizeInfo(token, text); + return token.fullWidth() - lastTokenInfo.leadingTriviaWidth - lastTokenInfo.width; + } + function tokenIsIncrementallyUnusable(token) { + return false; + } + var FixedWidthTokenWithNoTrivia = (function () { + function FixedWidthTokenWithNoTrivia(_packedData) { + this._packedData = _packedData; + } + FixedWidthTokenWithNoTrivia.prototype.setFullStart = function (fullStart) { + this._packedData = fixedWidthTokenPackData(fullStart, this.kind()); + }; + FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.fullText = function () { + return TypeScript.SyntaxFacts.getText(this.kind()); + }; + FixedWidthTokenWithNoTrivia.prototype.text = function () { + return this.fullText(); + }; + FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { + return TypeScript.Syntax.emptyTriviaList; + }; + FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { + return TypeScript.Syntax.emptyTriviaList; + }; + FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { + return 0; + }; + FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { + return 0; + }; + FixedWidthTokenWithNoTrivia.prototype.kind = function () { + return this._packedData & 127 /* KindMask */; + }; + FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () { + return this.fullText().length; + }; + FixedWidthTokenWithNoTrivia.prototype.fullStart = function () { + return fixedWidthTokenUnpackFullStart(this._packedData); + }; + FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.clone = function () { + return new FixedWidthTokenWithNoTrivia(this._packedData); + }; + return FixedWidthTokenWithNoTrivia; + })(); + var LargeScannerToken = (function () { + function LargeScannerToken(_packedFullStartAndInfo, _packedFullWidthAndKind, cachedText) { + this._packedFullStartAndInfo = _packedFullStartAndInfo; + this._packedFullWidthAndKind = _packedFullWidthAndKind; + if (cachedText !== undefined) { + this.cachedText = cachedText; + } + } + LargeScannerToken.prototype.setFullStart = function (fullStart) { + this._packedFullStartAndInfo = largeTokenPackFullStartAndInfo(fullStart, largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo), largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo)); + }; + LargeScannerToken.prototype.syntaxTreeText = function (text) { + var result = text || TypeScript.syntaxTree(this).text; + TypeScript.Debug.assert(result); + return result; + }; + LargeScannerToken.prototype.isIncrementallyUnusable = function () { + return tokenIsIncrementallyUnusable(this); + }; + LargeScannerToken.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + LargeScannerToken.prototype.hasSkippedToken = function () { + return false; + }; + LargeScannerToken.prototype.fullText = function (text) { + return fullText(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.text = function () { + var cachedText = this.cachedText; + return cachedText !== undefined ? cachedText : TypeScript.SyntaxFacts.getText(this.kind()); + }; + LargeScannerToken.prototype.leadingTrivia = function (text) { + return leadingTrivia(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.trailingTrivia = function (text) { + return trailingTrivia(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.leadingTriviaWidth = function (text) { + return leadingTriviaWidth(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.trailingTriviaWidth = function (text) { + return trailingTriviaWidth(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.kind = function () { + return this._packedFullWidthAndKind & 127 /* KindMask */; + }; + LargeScannerToken.prototype.fullWidth = function () { + return largeTokenUnpackFullWidth(this._packedFullWidthAndKind); + }; + LargeScannerToken.prototype.fullStart = function () { + return largeTokenUnpackFullStart(this._packedFullStartAndInfo); + }; + LargeScannerToken.prototype.hasLeadingTrivia = function () { + return largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo) !== 0; + }; + LargeScannerToken.prototype.hasTrailingTrivia = function () { + return largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo) !== 0; + }; + LargeScannerToken.prototype.clone = function () { + return new LargeScannerToken(this._packedFullStartAndInfo, this._packedFullWidthAndKind, this.cachedText); + }; + return LargeScannerToken; + })(); + function createScanner(languageVersion, text, reportDiagnostic) { + var scanner = createScannerInternal(languageVersion, text, reportDiagnostic); + return { + setIndex: scanner.setIndex, + scan: scanner.scan + }; + } + Scanner.createScanner = createScanner; + function createScannerInternal(languageVersion, text, reportDiagnostic) { + var str; + var index; + var start; + var end; + function setIndex(_index) { + index = _index; + } + function reset(_text, _start, _end) { + TypeScript.Debug.assert(_start <= _text.length()); + TypeScript.Debug.assert(_end <= _text.length()); + if (!str || text !== _text) { + text = _text; + str = _text.substr(0, _text.length()); + } + start = _start; + end = _end; + index = _start; + } + function scan(allowContextualToken) { + var fullStart = index; + var leadingTriviaInfo = scanTriviaInfo(false); + var start = index; + var kindAndIsVariableWidth = scanSyntaxKind(allowContextualToken); + var end = index; + var trailingTriviaInfo = scanTriviaInfo(true); + var fullWidth = index - fullStart; + var kind = kindAndIsVariableWidth & 127 /* KindMask */; + var isFixedWidth = kind >= TypeScript.SyntaxKind.FirstFixedWidth && kind <= TypeScript.SyntaxKind.LastFixedWidth && ((kindAndIsVariableWidth & 128 /* IsVariableWidthMask */) === 0); + if (isFixedWidth && leadingTriviaInfo === 0 && trailingTriviaInfo === 0 && fullStart <= 8388607 /* FixedWidthTokenMaxFullStart */ && (kindAndIsVariableWidth & 128 /* IsVariableWidthMask */) === 0) { + return new FixedWidthTokenWithNoTrivia((fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind); + } + else { + var packedFullStartAndTriviaInfo = (fullStart << 2 /* LargeTokenFullStartShift */) | leadingTriviaInfo | (trailingTriviaInfo << 1); + var packedFullWidthAndKind = (fullWidth << 7 /* LargeTokenFullWidthShift */) | kind; + var cachedText = isFixedWidth ? undefined : text.substr(start, end - start); + return new LargeScannerToken(packedFullStartAndTriviaInfo, packedFullWidthAndKind, cachedText); + } + } + function scanTrivia(parent, text, isTrailing) { + var tokenFullStart = parent.fullStart(); + var tokenStart = tokenFullStart + leadingTriviaWidth(parent, text); + if (isTrailing) { + reset(text, tokenStart + parent.text().length, tokenFullStart + parent.fullWidth()); + } + else { + reset(text, tokenFullStart, tokenStart); + } + var trivia = []; + while (true) { + if (index < end) { + var ch = str.charCodeAt(index); + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + trivia.push(scanWhitespaceTrivia()); + continue; + case 47 /* slash */: + var ch2 = str.charCodeAt(index + 1); + if (ch2 === 47 /* slash */) { + trivia.push(scanSingleLineCommentTrivia()); + continue; + } + if (ch2 === 42 /* asterisk */) { + trivia.push(scanMultiLineCommentTrivia()); + continue; + } + throw TypeScript.Errors.invalidOperation(); + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + trivia.push(scanLineTerminatorSequenceTrivia(ch)); + if (!isTrailing) { + continue; + } + break; + default: + throw TypeScript.Errors.invalidOperation(); + } + } + var triviaList = TypeScript.Syntax.triviaList(trivia); + triviaList.parent = parent; + return triviaList; + } } - - var start = this.position; - this.movePast(node.lessThanToken); - var typeParameters = this.visitSeparatedSyntaxList(node.typeParameters); - this.movePast(node.greaterThanToken); - - var result = new TypeScript.TypeParameterList(typeParameters); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeParameter = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - var constraint = node.constraint ? node.constraint.accept(this) : null; - - var result = new TypeScript.TypeParameter(identifier, constraint); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstraint = function (node) { - var start = this.position; - this.movePast(node.extendsKeyword); - var type = this.visitType(node.type); - - var result = new TypeScript.Constraint(type); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIfStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var thenBod = node.statement.accept(this); - var elseBod = node.elseClause ? node.elseClause.accept(this) : null; - - var result = new TypeScript.IfStatement(condition, thenBod, elseBod); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitElseClause = function (node) { - var start = this.position; - - this.movePast(node.elseKeyword); - var statement = node.statement.accept(this); - - var result = new TypeScript.ElseClause(statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitExpressionStatement = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var expression = node.expression.accept(this); - - var semicolonPosition = this.position; - - var postComments = this.convertComments(node.semicolonToken.trailingTrivia(), this.position + node.semicolonToken.leadingTriviaWidth() + node.semicolonToken.width()); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ExpressionStatement(expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.callSignature); - var callSignature = this.visitCallSignature(node.callSignature); - - var block = node.block ? node.block.accept(this) : null; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.ConstructorDeclaration(callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitIndexMemberDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.indexSignature); - var indexSignature = node.indexSignature.accept(this); - - this.movePast(node.semicolonToken); - - var result = new TypeScript.IndexMemberDeclaration(indexSignature); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? this.visitBlock(node.block) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.MemberFunctionDeclaration(this.visitModifiers(node.modifiers), name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitGetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var returnType = this.visitTypeAnnotation(node.typeAnnotation); - - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.GetAccessor(this.visitModifiers(node.modifiers), name, parameters, returnType, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSetAccessor = function (node) { - var start = this.position; - - this.moveTo(node, node.propertyName); - var name = this.visitToken(node.propertyName); - var parameters = this.visitParameterList(node.parameterList); - var block = node.block ? node.block.accept(this) : null; - var result = new TypeScript.SetAccessor(this.visitModifiers(node.modifiers), name, parameters, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var start = this.position; - - this.moveTo(node, node.variableDeclarator); - var variableDeclarator = node.variableDeclarator.accept(this); - this.movePast(node.semicolonToken); - - var modifiers = this.visitModifiers(node.modifiers); - var result = new TypeScript.MemberVariableDeclaration(modifiers, variableDeclarator); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitThrowStatement = function (node) { - var start = this.position; - - this.movePast(node.throwKeyword); - var expression = node.expression.accept(this); - this.movePast(node.semicolonToken); - - var result = new TypeScript.ThrowStatement(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitReturnStatement = function (node) { - var start = this.position; - - this.movePast(node.returnKeyword); - var expression = node.expression ? node.expression.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ReturnStatement(expression); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var start = this.position; - - this.movePast(node.newKeyword); - var expression = node.expression.accept(this); - var argumentList = this.visitArgumentList(node.argumentList); - - var result = new TypeScript.ObjectCreationExpression(expression, argumentList); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSwitchStatement = function (node) { - var start = this.position; - - this.movePast(node.switchKeyword); - this.movePast(node.openParenToken); - var expression = node.expression.accept(this); - - var closeParenToken = this.createTokenSpan(this.position, node.closeParenToken); - this.movePast(node.closeParenToken); - this.movePast(node.openBraceToken); - var switchClauses = this.visitSyntaxList(node.switchClauses); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.SwitchStatement(expression, closeParenToken, switchClauses); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.caseKeyword); - var expression = node.expression.accept(this); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.CaseSwitchClause(expression, statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var start = this.position; - - this.movePast(node.defaultKeyword); - this.movePast(node.colonToken); - var statements = this.visitSyntaxList(node.statements); - - var result = new TypeScript.DefaultSwitchClause(statements); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitBreakStatement = function (node) { - var start = this.position; - - this.movePast(node.breakKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.BreakStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitContinueStatement = function (node) { - var start = this.position; - - this.movePast(node.continueKeyword); - var identifier = node.identifier ? node.identifier.accept(this) : null; - this.movePast(node.semicolonToken); - - var result = new TypeScript.ContinueStatement(identifier); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var initializer = node.initializer ? node.initializer.accept(this) : null; - - this.movePast(node.firstSemicolonToken); - var cond = node.condition ? node.condition.accept(this) : null; - this.movePast(node.secondSemicolonToken); - var incr = node.incrementor ? node.incrementor.accept(this) : null; - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForStatement(variableDeclaration, initializer, cond, incr, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitForInStatement = function (node) { - var start = this.position; - - this.movePast(node.forKeyword); - this.movePast(node.openParenToken); - var variableDeclaration = node.variableDeclaration ? node.variableDeclaration.accept(this) : null; - var left = node.left ? node.left.accept(this) : null; - - this.movePast(node.inKeyword); - var expression = node.expression.accept(this); - this.movePast(node.closeParenToken); - var body = node.statement.accept(this); - - var result = new TypeScript.ForInStatement(variableDeclaration, left, expression, body); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWhileStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WhileStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitWithStatement = function (node) { - var start = this.position; - - this.moveTo(node, node.condition); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.WithStatement(condition, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCastExpression = function (node) { - var start = this.position; - - this.movePast(node.lessThanToken); - var castTerm = this.visitType(node.type); - this.movePast(node.greaterThanToken); - var expression = node.expression.accept(this); - - var result = new TypeScript.CastExpression(castTerm, expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var start = this.position; - - var openStart = this.position + node.openBraceToken.leadingTriviaWidth(); - this.movePast(node.openBraceToken); - - var propertyAssignments = this.visitSeparatedSyntaxList(node.propertyAssignments); - - var closeStart = this.position + node.closeBraceToken.leadingTriviaWidth(); - this.movePast(node.closeBraceToken); - - var result = new TypeScript.ObjectLiteralExpression(propertyAssignments); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var start = this.position; - - var preComments = this.convertTokenLeadingComments(node.firstToken(), start); - var postComments = this.convertNodeTrailingComments(node, node.lastToken(), start); - - var propertyName = node.propertyName.accept(this); - - var afterColonComments = this.convertTokenTrailingComments(node.colonToken, this.position + node.colonToken.leadingTriviaWidth() + node.colonToken.width()); - - this.movePast(node.colonToken); - var expression = node.expression.accept(this); - expression.setPreComments(this.mergeComments(afterColonComments, expression.preComments())); - - var result = new TypeScript.SimplePropertyAssignment(propertyName, expression); - this.setSpan(result, start, node); - - result.setPreComments(preComments); - result.setPostComments(postComments); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var start = this.position; - - var propertyName = node.propertyName.accept(this); - var callSignature = this.visitCallSignature(node.callSignature); - var block = this.visitBlock(node.block); - - var result = new TypeScript.FunctionPropertyAssignment(propertyName, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFunctionExpression = function (node) { - var start = this.position; - - this.movePast(node.functionKeyword); - var name = node.identifier === null ? null : this.visitIdentifier(node.identifier); - - var callSignature = this.visitCallSignature(node.callSignature); - var block = node.block ? node.block.accept(this) : null; - - var result = new TypeScript.FunctionExpression(name, callSignature, block); - this.setCommentsAndSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitEmptyStatement = function (node) { - var start = this.position; - - this.movePast(node.semicolonToken); - - var result = new TypeScript.EmptyStatement(); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTryStatement = function (node) { - var start = this.position; - - this.movePast(node.tryKeyword); - var tryBody = node.block.accept(this); - - var catchClause = null; - if (node.catchClause !== null) { - catchClause = node.catchClause.accept(this); + function scanTriviaInfo(isTrailing) { + var result = 0; + var _end = end; + while (index < _end) { + var ch = str.charCodeAt(index); + switch (ch) { + case 9 /* tab */: + case 32 /* space */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + index++; + result = 1; + continue; + case 13 /* carriageReturn */: + if ((index + 1) < end && str.charCodeAt(index + 1) === 10 /* lineFeed */) { + index++; + } + case 10 /* lineFeed */: + index++; + if (isTrailing) { + return 1; + } + result = 1; + continue; + case 47 /* slash */: + if ((index + 1) < _end) { + var ch2 = str.charCodeAt(index + 1); + if (ch2 === 47 /* slash */) { + result = 1; + skipSingleLineCommentTrivia(); + continue; + } + if (ch2 === 42 /* asterisk */) { + result = 1; + skipMultiLineCommentTrivia(); + continue; + } + } + return result; + default: + if (ch > 127 /* maxAsciiCharacter */ && slowScanTriviaInfo(ch)) { + result = 1; + continue; + } + return result; + } + } + return result; } - - var finallyBody = null; - if (node.finallyClause !== null) { - finallyBody = node.finallyClause.accept(this); + function slowScanTriviaInfo(ch) { + switch (ch) { + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 65279 /* byteOrderMark */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + index++; + return true; + default: + return false; + } } - - var result = new TypeScript.TryStatement(tryBody, catchClause, finallyBody); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitCatchClause = function (node) { - var start = this.position; - - this.movePast(node.catchKeyword); - this.movePast(node.openParenToken); - var identifier = this.visitIdentifier(node.identifier); - var typeAnnotation = this.visitTypeAnnotation(node.typeAnnotation); - this.movePast(node.closeParenToken); - var block = node.block.accept(this); - - var result = new TypeScript.CatchClause(identifier, typeAnnotation, block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitFinallyClause = function (node) { - var start = this.position; - this.movePast(node.finallyKeyword); - var block = node.block.accept(this); - - var result = new TypeScript.FinallyClause(block); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitLabeledStatement = function (node) { - var start = this.position; - - var identifier = this.visitIdentifier(node.identifier); - this.movePast(node.colonToken); - var statement = node.statement.accept(this); - - var result = new TypeScript.LabeledStatement(identifier, statement); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDoStatement = function (node) { - var start = this.position; - - this.movePast(node.doKeyword); - var statement = node.statement.accept(this); - var whileKeyword = this.createTokenSpan(this.position, node.whileKeyword); - - this.movePast(node.whileKeyword); - this.movePast(node.openParenToken); - var condition = node.condition.accept(this); - this.movePast(node.closeParenToken); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DoStatement(statement, whileKeyword, condition); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitTypeOfExpression = function (node) { - var start = this.position; - - this.movePast(node.typeOfKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.TypeOfExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDeleteExpression = function (node) { - var start = this.position; - - this.movePast(node.deleteKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.DeleteExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitVoidExpression = function (node) { - var start = this.position; - - this.movePast(node.voidKeyword); - var expression = node.expression.accept(this); - - var result = new TypeScript.VoidExpression(expression); - this.setSpan(result, start, node); - - return result; - }; - - SyntaxTreeToAstVisitor.prototype.visitDebuggerStatement = function (node) { - var start = this.position; - - this.movePast(node.debuggerKeyword); - this.movePast(node.semicolonToken); - - var result = new TypeScript.DebuggerStatement(); - this.setSpan(result, start, node); - - return result; - }; - return SyntaxTreeToAstVisitor; - })(); - TypeScript.SyntaxTreeToAstVisitor = SyntaxTreeToAstVisitor; - - function applyDelta(ast, delta) { - if (ast) { - if (ast._start !== -1) { - ast._start += delta; + function isNewLineCharacter(ch) { + switch (ch) { + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + return true; + default: + return false; + } + } + function scanWhitespaceTrivia() { + var absoluteStartIndex = index; + while (true) { + var ch = str.charCodeAt(index); + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + index++; + continue; + } + break; + } + return createTrivia(4 /* WhitespaceTrivia */, absoluteStartIndex); + } + function createTrivia(kind, absoluteStartIndex) { + var fullWidth = index - absoluteStartIndex; + return TypeScript.Syntax.deferredTrivia(kind, text, absoluteStartIndex, fullWidth); + } + function scanSingleLineCommentTrivia() { + var absoluteStartIndex = index; + skipSingleLineCommentTrivia(); + return createTrivia(7 /* SingleLineCommentTrivia */, absoluteStartIndex); + } + function skipSingleLineCommentTrivia() { + index += 2; + while (index < end) { + if (isNewLineCharacter(str.charCodeAt(index))) { + return; + } + index++; + } + } + function scanMultiLineCommentTrivia() { + var absoluteStartIndex = index; + skipMultiLineCommentTrivia(); + return createTrivia(6 /* MultiLineCommentTrivia */, absoluteStartIndex); + } + function skipMultiLineCommentTrivia() { + index += 2; + while (true) { + if (index === end) { + reportDiagnostic(end, 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null); + return; + } + if ((index + 1) < end && str.charCodeAt(index) === 42 /* asterisk */ && str.charCodeAt(index + 1) === 47 /* slash */) { + index += 2; + return; + } + index++; + } + } + function scanLineTerminatorSequenceTrivia(ch) { + var absoluteStartIndex = index; + skipLineTerminatorSequence(ch); + return createTrivia(5 /* NewLineTrivia */, absoluteStartIndex); + } + function skipLineTerminatorSequence(ch) { + index++; + if (ch === 13 /* carriageReturn */ && str.charCodeAt(index) === 10 /* lineFeed */) { + index++; + } + } + function scanSyntaxKind(allowContextualToken) { + if (index >= end) { + return 10 /* EndOfFileToken */; + } + var character = str.charCodeAt(index); + index++; + switch (character) { + case 33 /* exclamation */: + return scanExclamationToken(); + case 34 /* doubleQuote */: + return scanStringLiteral(character); + case 37 /* percent */: + return scanPercentToken(); + case 38 /* ampersand */: + return scanAmpersandToken(); + case 39 /* singleQuote */: + return scanStringLiteral(character); + case 40 /* openParen */: + return 72 /* OpenParenToken */; + case 41 /* closeParen */: + return 73 /* CloseParenToken */; + case 42 /* asterisk */: + return scanAsteriskToken(); + case 43 /* plus */: + return scanPlusToken(); + case 44 /* comma */: + return 79 /* CommaToken */; + case 45 /* minus */: + return scanMinusToken(); + case 46 /* dot */: + return scanDotToken(); + case 47 /* slash */: + return scanSlashToken(allowContextualToken); + case 48 /* _0 */: + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + case 56 /* _8 */: + case 57 /* _9 */: + return scanNumericLiteral(character); + case 58 /* colon */: + return 106 /* ColonToken */; + case 59 /* semicolon */: + return 78 /* SemicolonToken */; + case 60 /* lessThan */: + return scanLessThanToken(); + case 61 /* equals */: + return scanEqualsToken(); + case 62 /* greaterThan */: + return scanGreaterThanToken(allowContextualToken); + case 63 /* question */: + return 105 /* QuestionToken */; + case 91 /* openBracket */: + return 74 /* OpenBracketToken */; + case 93 /* closeBracket */: + return 75 /* CloseBracketToken */; + case 94 /* caret */: + return scanCaretToken(); + case 123 /* openBrace */: + return 70 /* OpenBraceToken */; + case 124 /* bar */: + return scanBarToken(); + case 125 /* closeBrace */: + return 71 /* CloseBraceToken */; + case 126 /* tilde */: + return 102 /* TildeToken */; + } + if (isIdentifierStartCharacter[character]) { + var result = tryFastScanIdentifierOrKeyword(character); + if (result !== 0 /* None */) { + return result; + } + } + index--; + if (isIdentifierStart(peekCharOrUnicodeEscape())) { + return slowScanIdentifierOrKeyword(); + } + var text = String.fromCharCode(character); + var messageText = getErrorMessageText(text); + reportDiagnostic(index, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText]); + index++; + return 9 /* ErrorToken */; + } + function isIdentifierStart(interpretedChar) { + if (isIdentifierStartCharacter[interpretedChar]) { + return true; + } + return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, languageVersion); + } + function isIdentifierPart(interpretedChar) { + if (isIdentifierPartCharacter[interpretedChar]) { + return true; + } + return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, languageVersion); + } + function tryFastScanIdentifierOrKeyword(firstCharacter) { + var startIndex = index; + var character = firstCharacter; + while (index < end) { + character = str.charCodeAt(index); + if (!isIdentifierPartCharacter[character]) { + break; + } + index++; + } + if (index < end && (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */)) { + index = startIndex; + return 0 /* None */; + } + else { + if (isKeywordStartCharacter[firstCharacter]) { + return TypeScript.ScannerUtilities.identifierKind(str, startIndex - 1, index - startIndex + 1); + } + else { + return 11 /* IdentifierName */; + } + } + } + function slowScanIdentifierOrKeyword() { + var startIndex = index; + do { + scanCharOrUnicodeEscape(); + } while (isIdentifierPart(peekCharOrUnicodeEscape())); + var length = index - startIndex; + var text = str.substr(startIndex, length); + var valueText = TypeScript.massageEscapes(text); + var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText); + if (keywordKind >= TypeScript.SyntaxKind.FirstKeyword && keywordKind <= TypeScript.SyntaxKind.LastKeyword) { + return keywordKind | 128 /* IsVariableWidthMask */; + } + return 11 /* IdentifierName */; + } + function scanNumericLiteral(ch) { + if (isHexNumericLiteral(ch)) { + scanHexNumericLiteral(); + } + else if (isOctalNumericLiteral(ch)) { + scanOctalNumericLiteral(); + } + else { + scanDecimalNumericLiteral(); + } + return 13 /* NumericLiteral */; + } + function isOctalNumericLiteral(ch) { + return ch === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index)); + } + function scanOctalNumericLiteral() { + var start = index - 1; + while (TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index))) { + index++; + } + if (languageVersion >= 1 /* ES5 */) { + reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null); + } + } + function scanDecimalDigits() { + while (TypeScript.CharacterInfo.isDecimalDigit(str.charCodeAt(index))) { + index++; + } + } + function scanDecimalNumericLiteral() { + scanDecimalDigits(); + if (str.charCodeAt(index) === 46 /* dot */) { + index++; + } + scanDecimalNumericLiteralAfterDot(); + } + function scanDecimalNumericLiteralAfterDot() { + scanDecimalDigits(); + var ch = str.charCodeAt(index); + if (ch === 101 /* e */ || ch === 69 /* E */) { + var nextChar1 = str.charCodeAt(index + 1); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) { + index++; + scanDecimalDigits(); + } + else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) { + var nextChar2 = str.charCodeAt(index + 2); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) { + index += 2; + scanDecimalDigits(); + } + } + } + } + function scanHexNumericLiteral() { + index++; + while (TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index))) { + index++; + } + } + function isHexNumericLiteral(ch) { + if (ch === 48 /* _0 */) { + var ch = str.charCodeAt(index); + if (ch === 120 /* x */ || ch === 88 /* X */) { + return TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index + 1)); + } + } + return false; + } + function scanLessThanToken() { + var ch0 = str.charCodeAt(index); + if (ch0 === 61 /* equals */) { + index++; + return 82 /* LessThanEqualsToken */; + } + else if (ch0 === 60 /* lessThan */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 112 /* LessThanLessThanEqualsToken */; + } + else { + return 95 /* LessThanLessThanToken */; + } + } + else { + return 80 /* LessThanToken */; + } + } + function scanGreaterThanToken(allowContextualToken) { + if (allowContextualToken) { + var ch0 = str.charCodeAt(index); + if (ch0 === 62 /* greaterThan */) { + index++; + var ch1 = str.charCodeAt(index); + if (ch1 === 62 /* greaterThan */) { + index++; + var ch2 = str.charCodeAt(index); + if (ch2 === 61 /* equals */) { + index++; + return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + } + else { + return 97 /* GreaterThanGreaterThanGreaterThanToken */; + } + } + else if (ch1 === 61 /* equals */) { + index++; + return 113 /* GreaterThanGreaterThanEqualsToken */; + } + else { + return 96 /* GreaterThanGreaterThanToken */; + } + } + else if (ch0 === 61 /* equals */) { + index++; + return 83 /* GreaterThanEqualsToken */; + } + } + return 81 /* GreaterThanToken */; + } + function scanBarToken() { + var ch = str.charCodeAt(index); + if (ch === 61 /* equals */) { + index++; + return 116 /* BarEqualsToken */; + } + else if (ch === 124 /* bar */) { + index++; + return 104 /* BarBarToken */; + } + else { + return 99 /* BarToken */; + } + } + function scanCaretToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 117 /* CaretEqualsToken */; + } + else { + return 100 /* CaretToken */; + } + } + function scanAmpersandToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 115 /* AmpersandEqualsToken */; + } + else if (character === 38 /* ampersand */) { + index++; + return 103 /* AmpersandAmpersandToken */; + } + else { + return 98 /* AmpersandToken */; + } } - - if (ast._end !== -1) { - ast._end += delta; + function scanPercentToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 111 /* PercentEqualsToken */; + } + else { + return 92 /* PercentToken */; + } } - } - } - - function applyDeltaToComments(comments, delta) { - if (comments && comments.length > 0) { - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; - applyDelta(comment, delta); + function scanMinusToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 109 /* MinusEqualsToken */; + } + else if (character === 45 /* minus */) { + index++; + return 94 /* MinusMinusToken */; + } + else { + return 90 /* MinusToken */; + } } - } - } - - var SyntaxTreeToIncrementalAstVisitor = (function (_super) { - __extends(SyntaxTreeToIncrementalAstVisitor, _super); - function SyntaxTreeToIncrementalAstVisitor() { - _super.apply(this, arguments); - } - SyntaxTreeToIncrementalAstVisitor.prototype.applyDelta = function (ast, delta) { - if (delta === 0) { - return; + function scanPlusToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 108 /* PlusEqualsToken */; + } + else if (character === 43 /* plus */) { + index++; + return 93 /* PlusPlusToken */; + } + else { + return 89 /* PlusToken */; + } } - - var pre = function (cur) { - applyDelta(cur, delta); - applyDeltaToComments(cur.preComments(), delta); - applyDeltaToComments(cur.postComments(), delta); - - switch (cur.kind()) { - case 146 /* Block */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 226 /* ArgumentList */: - applyDelta(cur.closeParenToken, delta); - break; - - case 130 /* ModuleDeclaration */: - applyDelta(cur.endingToken, delta); - break; - - case 131 /* ClassDeclaration */: - applyDelta(cur.closeBraceToken, delta); - break; - - case 161 /* DoStatement */: - applyDelta(cur.whileKeyword, delta); - break; - - case 151 /* SwitchStatement */: - applyDelta(cur.closeParenToken, delta); - break; + function scanAsteriskToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 110 /* AsteriskEqualsToken */; + } + else { + return 91 /* AsteriskToken */; } - }; - - TypeScript.getAstWalkerFactory().simpleWalk(ast, pre); - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setSpanExplicit = function (span, start, end) { - if (span._start !== -1) { - var delta = start - span._start; - this.applyDelta(span, delta); - - span._end = end; - } else { - _super.prototype.setSpanExplicit.call(this, span, start, end); } - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.getAndMovePastAST = function (element) { - if (this.previousTokenTrailingComments !== null) { - return null; + function scanEqualsToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 87 /* EqualsEqualsEqualsToken */; + } + else { + return 84 /* EqualsEqualsToken */; + } + } + else if (character === 62 /* greaterThan */) { + index++; + return 85 /* EqualsGreaterThanToken */; + } + else { + return 107 /* EqualsToken */; + } } - - var result = element._ast; - if (!result) { - return null; + function scanDotToken() { + var nextChar = str.charCodeAt(index); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar)) { + scanDecimalNumericLiteralAfterDot(); + return 13 /* NumericLiteral */; + } + if (nextChar === 46 /* dot */ && str.charCodeAt(index + 1) === 46 /* dot */) { + index += 2; + return 77 /* DotDotDotToken */; + } + else { + return 76 /* DotToken */; + } } - - var start = this.position; - this.movePast(element); - this.setSpan(result, start, element); - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.setAST = function (element, ast) { - element._ast = ast; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); + function scanSlashToken(allowContextualToken) { + if (allowContextualToken) { + var result = tryScanRegularExpressionToken(); + if (result !== 0 /* None */) { + return result; + } + } + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 119 /* SlashEqualsToken */; + } + else { + return 118 /* SlashToken */; } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSeparatedSyntaxList = function (list) { - var result = this.getAndMovePastAST(list); - if (!result) { - result = _super.prototype.visitSeparatedSyntaxList.call(this, list); - - if (list.childCount() > 0) { - this.setAST(list, result); + function tryScanRegularExpressionToken() { + var startIndex = index; + var inEscape = false; + var inCharacterClass = false; + while (true) { + var ch = str.charCodeAt(index); + if (isNaN(ch) || isNewLineCharacter(ch)) { + index = startIndex; + return 0 /* None */; + } + index++; + if (inEscape) { + inEscape = false; + continue; + } + switch (ch) { + case 92 /* backslash */: + inEscape = true; + continue; + case 91 /* openBracket */: + inCharacterClass = true; + continue; + case 93 /* closeBracket */: + inCharacterClass = false; + continue; + case 47 /* slash */: + if (inCharacterClass) { + continue; + } + break; + default: + continue; + } + break; } + while (isIdentifierPartCharacter[str.charCodeAt(index)]) { + index++; + } + return 12 /* RegularExpressionLiteral */; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitToken = function (token) { - var result = this.getAndMovePastAST(token); - - if (!result) { - result = _super.prototype.visitToken.call(this, token); - this.setAST(token, result); + function scanExclamationToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 88 /* ExclamationEqualsEqualsToken */; + } + else { + return 86 /* ExclamationEqualsToken */; + } + } + else { + return 101 /* ExclamationToken */; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitClassDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitClassDeclaration.call(this, node); - this.setAST(node, result); + function getErrorMessageText(text) { + if (text === "\\") { + return '"\\"'; + } + return JSON.stringify(text); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInterfaceDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInterfaceDeclaration.call(this, node); - this.setAST(node, result); + function skipEscapeSequence() { + var rewindPoint = index; + index++; + var ch = str.charCodeAt(index); + if (isNaN(ch)) { + return; + } + index++; + switch (ch) { + case 120 /* x */: + case 117 /* u */: + index = rewindPoint; + var value = scanUnicodeOrHexEscape(true); + break; + case 13 /* carriageReturn */: + if (str.charCodeAt(index) === 10 /* lineFeed */) { + index++; + } + break; + default: + break; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitHeritageClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitHeritageClause.call(this, node); - this.setAST(node, result); + function scanStringLiteral(quoteCharacter) { + while (true) { + var ch = str.charCodeAt(index); + if (ch === 92 /* backslash */) { + skipEscapeSequence(); + } + else if (ch === quoteCharacter) { + index++; + break; + } + else if (isNaN(ch) || isNewLineCharacter(ch)) { + reportDiagnostic(Math.min(index, end), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null); + break; + } + else { + index++; + } + } + return 14 /* StringLiteral */; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitModuleDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitModuleDeclaration.call(this, node); - this.setAST(node, result); + function isUnicodeEscape(character) { + return character === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionDeclaration.call(this, node); - this.setAST(node, result); + function peekCharOrUnicodeEscape() { + var character = str.charCodeAt(index); + if (isUnicodeEscape(character)) { + return peekUnicodeOrHexEscape(); + } + else { + return character; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitImportDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitImportDeclaration.call(this, node); - this.setAST(node, result); + function peekUnicodeOrHexEscape() { + var startIndex = index; + var ch = scanUnicodeOrHexEscape(false); + index = startIndex; + return ch; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExportAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExportAssignment.call(this, node); - this.setAST(node, result); + function scanCharOrUnicodeEscape() { + if (str.charCodeAt(index) === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */) { + scanUnicodeOrHexEscape(true); + } + else { + index++; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPrefixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPrefixUnaryExpression.call(this, node); - this.setAST(node, result); + function scanUnicodeOrHexEscape(report) { + var start = index; + var character = str.charCodeAt(index); + index++; + character = str.charCodeAt(index); + var intChar = 0; + index++; + var count = character === 117 /* u */ ? 4 : 2; + for (var i = 0; i < count; i++) { + var ch2 = str.charCodeAt(index); + if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { + if (report) { + reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null); + } + break; + } + intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); + index++; + } + return intChar; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayLiteralExpression.call(this, node); - this.setAST(node, result); + function fillTokenInfo(token, text, tokenInfo) { + var fullStart = token.fullStart(); + var fullEnd = fullStart + token.fullWidth(); + reset(text, fullStart, fullEnd); + var leadingTriviaInfo = scanTriviaInfo(false); + var start = index; + scanSyntaxKind(isContextualToken(token)); + var end = index; + tokenInfo.leadingTriviaWidth = start - fullStart; + tokenInfo.width = end - start; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitOmittedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitOmittedExpression.call(this, node); - this.setAST(node, result); + reset(text, 0, text.length()); + return { + setIndex: setIndex, + scan: scan, + fillTokenInfo: fillTokenInfo, + scanTrivia: scanTrivia + }; + } + function isValidIdentifier(text, languageVersion) { + var hadError = false; + var scanner = createScanner(languageVersion, text, function () { return hadError = true; }); + var token = scanner.scan(false); + return !hadError && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && TypeScript.width(token) === text.length(); + } + Scanner.isValidIdentifier = isValidIdentifier; + function createParserSource(fileName, text, languageVersion) { + var _absolutePosition = 0; + var _tokenDiagnostics = []; + var rewindPointPool = []; + var rewindPointPoolCount = 0; + var lastDiagnostic = null; + var reportDiagnostic = function (position, fullWidth, diagnosticKey, args) { + lastDiagnostic = new TypeScript.Diagnostic(fileName, text.lineMap(), position, fullWidth, diagnosticKey, args); + }; + var slidingWindow = new TypeScript.SlidingWindow(fetchNextItem, TypeScript.ArrayUtilities.createArray(1024, null), null); + var scanner = createScanner(languageVersion, text, reportDiagnostic); + function release() { + slidingWindow = null; + scanner = null; + _tokenDiagnostics = []; + rewindPointPool = []; + lastDiagnostic = null; + reportDiagnostic = null; + } + function currentNode() { + return null; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedExpression.call(this, node); - this.setAST(node, result); + function consumeNode(node) { + throw TypeScript.Errors.invalidOperation(); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimpleArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimpleArrowFunctionExpression.call(this, node); - this.setAST(node, result); + function absolutePosition() { + return _absolutePosition; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParenthesizedArrowFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParenthesizedArrowFunctionExpression.call(this, node); - this.setAST(node, result); + function tokenDiagnostics() { + return _tokenDiagnostics; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitQualifiedName = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - var result = _super.prototype.visitQualifiedName.call(this, node); - this.setAST(node, result); + function getOrCreateRewindPoint() { + if (rewindPointPoolCount === 0) { + return {}; + } + rewindPointPoolCount--; + var result = rewindPointPool[rewindPointPoolCount]; + rewindPointPool[rewindPointPoolCount] = null; + return result; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorType.call(this, node); - this.setAST(node, result); + function getRewindPoint() { + var slidingWindowIndex = slidingWindow.getAndPinAbsoluteIndex(); + var rewindPoint = getOrCreateRewindPoint(); + rewindPoint.slidingWindowIndex = slidingWindowIndex; + rewindPoint.absolutePosition = _absolutePosition; + return rewindPoint; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionType.call(this, node); - this.setAST(node, result); + function rewind(rewindPoint) { + slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); + _absolutePosition = rewindPoint.absolutePosition; + } + function releaseRewindPoint(rewindPoint) { + slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex); + rewindPointPool[rewindPointPoolCount] = rewindPoint; + rewindPointPoolCount++; + } + function fetchNextItem(allowContextualToken) { + var token = scanner.scan(allowContextualToken); + if (lastDiagnostic === null) { + return token; + } + _tokenDiagnostics.push(lastDiagnostic); + lastDiagnostic = null; + return TypeScript.Syntax.realizeToken(token, text); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectType.call(this, node); - this.setAST(node, result); + function peekToken(n) { + return slidingWindow.peekItemN(n); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitArrayType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitArrayType.call(this, node); - this.setAST(node, result); + function consumeToken(token) { + _absolutePosition += token.fullWidth(); + slidingWindow.moveToNextItem(); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGenericType = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGenericType.call(this, node); - this.setAST(node, result); + function currentToken() { + return slidingWindow.currentItem(false); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBlock = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBlock.call(this, node); - this.setAST(node, result); + function removeDiagnosticsOnOrAfterPosition(position) { + var tokenDiagnosticsLength = _tokenDiagnostics.length; + while (tokenDiagnosticsLength > 0) { + var diagnostic = _tokenDiagnostics[tokenDiagnosticsLength - 1]; + if (diagnostic.start() >= position) { + tokenDiagnosticsLength--; + } + else { + break; + } + } + _tokenDiagnostics.length = tokenDiagnosticsLength; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitParameter.call(this, node); - this.setAST(node, result); + function resetToPosition(absolutePosition) { + _absolutePosition = absolutePosition; + removeDiagnosticsOnOrAfterPosition(absolutePosition); + slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); + scanner.setIndex(absolutePosition); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberAccessExpression.call(this, node); - this.setAST(node, result); + function currentContextualToken() { + resetToPosition(_absolutePosition); + var token = slidingWindow.currentItem(true); + return token; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPostfixUnaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPostfixUnaryExpression.call(this, node); - this.setAST(node, result); + return { + text: text, + fileName: fileName, + languageVersion: languageVersion, + currentNode: currentNode, + currentToken: currentToken, + currentContextualToken: currentContextualToken, + peekToken: peekToken, + consumeNode: consumeNode, + consumeToken: consumeToken, + getRewindPoint: getRewindPoint, + rewind: rewind, + releaseRewindPoint: releaseRewindPoint, + tokenDiagnostics: tokenDiagnostics, + release: release, + absolutePosition: absolutePosition, + resetToPosition: resetToPosition + }; + } + Scanner.createParserSource = createParserSource; + })(TypeScript.Scanner || (TypeScript.Scanner = {})); + var Scanner = TypeScript.Scanner; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var ScannerUtilities = (function () { + function ScannerUtilities() { + } + ScannerUtilities.identifierKind = function (str, start, length) { + switch (length) { + case 2: + switch (str.charCodeAt(start)) { + case 100 /* d */: + return (str.charCodeAt(start + 1) === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */; + case 105 /* i */: + switch (str.charCodeAt(start + 1)) { + case 102 /* f */: + return 28 /* IfKeyword */; + case 110 /* n */: + return 29 /* InKeyword */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 3: + switch (str.charCodeAt(start)) { + case 97 /* a */: + return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */; + case 103 /* g */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */; + case 108 /* l */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */; + case 118 /* v */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 4: + switch (str.charCodeAt(start)) { + case 99 /* c */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */; + case 101 /* e */: + switch (str.charCodeAt(start + 1)) { + case 108 /* l */: + return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 110 /* n */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + switch (str.charCodeAt(start + 1)) { + case 104 /* h */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 118 /* v */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */; + case 119 /* w */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 5: + switch (str.charCodeAt(start)) { + case 98 /* b */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */; + case 99 /* c */: + switch (str.charCodeAt(start + 1)) { + case 97 /* a */: + return (str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */; + case 108 /* l */: + return (str.charCodeAt(start + 2) === 97 /* a */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */; + case 111 /* o */: + return (str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 102 /* f */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 114 /* r */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */; + case 119 /* w */: + return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */; + case 121 /* y */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 6: + switch (str.charCodeAt(start)) { + case 100 /* d */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */; + case 101 /* e */: + return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */; + case 105 /* i */: + return (str.charCodeAt(start + 1) === 109 /* m */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */; + case 109 /* m */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 100 /* d */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 109 /* m */ && str.charCodeAt(start + 3) === 98 /* b */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + switch (str.charCodeAt(start + 1)) { + case 116 /* t */: + switch (str.charCodeAt(start + 2)) { + case 97 /* a */: + return (str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 3) === 105 /* i */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 119 /* w */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 99 /* c */ && str.charCodeAt(start + 5) === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 116 /* t */: + return (str.charCodeAt(start + 1) === 121 /* y */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 111 /* o */ && str.charCodeAt(start + 5) === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 7: + switch (str.charCodeAt(start)) { + case 98 /* b */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 97 /* a */ && str.charCodeAt(start + 6) === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */; + case 100 /* d */: + switch (str.charCodeAt(start + 1)) { + case 101 /* e */: + switch (str.charCodeAt(start + 2)) { + case 99 /* c */: + return (str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 117 /* u */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 101 /* e */: + return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 100 /* d */ && str.charCodeAt(start + 6) === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + switch (str.charCodeAt(start + 1)) { + case 97 /* a */: + return (str.charCodeAt(start + 2) === 99 /* c */ && str.charCodeAt(start + 3) === 107 /* k */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 118 /* v */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 116 /* t */ && str.charCodeAt(start + 6) === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 114 /* r */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 113 /* q */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 8: + switch (str.charCodeAt(start)) { + case 99 /* c */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */; + case 100 /* d */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 103 /* g */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 105 /* i */ && str.charCodeAt(start + 6) === 111 /* o */ && str.charCodeAt(start + 7) === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 9: + switch (str.charCodeAt(start)) { + case 105 /* i */: + return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 102 /* f */ && str.charCodeAt(start + 6) === 97 /* a */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 99 /* c */ && str.charCodeAt(start + 6) === 116 /* t */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 10: + switch (str.charCodeAt(start)) { + case 105 /* i */: + switch (str.charCodeAt(start + 1)) { + case 109 /* m */: + return (str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 109 /* m */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 110 /* n */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 99 /* c */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 111 /* o */ && str.charCodeAt(start + 9) === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 11: + return (str.charCodeAt(start) === 99 /* c */ && str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 111 /* o */ && str.charCodeAt(start + 10) === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; } - - return result; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitElementAccessExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitElementAccessExpression.call(this, node); - this.setAST(node, result); + return ScannerUtilities; + })(); + TypeScript.ScannerUtilities = ScannerUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SlidingWindow = (function () { + function SlidingWindow(fetchNextItem, window, defaultValue, sourceLength) { + if (sourceLength === void 0) { sourceLength = -1; } + this.fetchNextItem = fetchNextItem; + this.window = window; + this.defaultValue = defaultValue; + this.sourceLength = sourceLength; + this.windowCount = 0; + this.windowAbsoluteStartIndex = 0; + this.currentRelativeItemIndex = 0; + this._pinCount = 0; + this.firstPinnedAbsoluteIndex = -1; + } + SlidingWindow.prototype.addMoreItemsToWindow = function (argument) { + var sourceLength = this.sourceLength; + if (sourceLength >= 0 && this.absoluteIndex() >= sourceLength) { + return false; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitInvocationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitInvocationExpression.call(this, node); - this.setAST(node, result); + if (this.windowCount >= this.window.length) { + this.tryShiftOrGrowWindow(); } - - return result; + var item = this.fetchNextItem(argument); + this.window[this.windowCount] = item; + this.windowCount++; + return true; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBinaryExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBinaryExpression.call(this, node); - this.setAST(node, result); + SlidingWindow.prototype.tryShiftOrGrowWindow = function () { + var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1); + var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex; + if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) { + var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex; + var shiftCount = this.windowCount - shiftStartIndex; + if (shiftCount > 0) { + TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount); + } + this.windowAbsoluteStartIndex += shiftStartIndex; + this.windowCount -= shiftStartIndex; + this.currentRelativeItemIndex -= shiftStartIndex; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConditionalExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConditionalExpression.call(this, node); - this.setAST(node, result); + else { + TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue); } - - return result; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructSignature.call(this, node); - this.setAST(node, result); - } - - return result; + SlidingWindow.prototype.absoluteIndex = function () { + return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMethodSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMethodSignature.call(this, node); - this.setAST(node, result); + SlidingWindow.prototype.isAtEndOfSource = function () { + return this.absoluteIndex() >= this.sourceLength; + }; + SlidingWindow.prototype.getAndPinAbsoluteIndex = function () { + var absoluteIndex = this.absoluteIndex(); + var pinCount = this._pinCount++; + if (pinCount === 0) { + this.firstPinnedAbsoluteIndex = absoluteIndex; } - - return result; + return absoluteIndex; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIndexSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIndexSignature.call(this, node); - this.setAST(node, result); + SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) { + this._pinCount--; + if (this._pinCount === 0) { + this.firstPinnedAbsoluteIndex = -1; } - - return result; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitPropertySignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitPropertySignature.call(this, node); - this.setAST(node, result); - } - - return result; + SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) { + var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex; + this.currentRelativeItemIndex = relativeIndex; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCallSignature = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCallSignature.call(this, node); - this.setAST(node, result); + SlidingWindow.prototype.currentItem = function (argument) { + if (this.currentRelativeItemIndex >= this.windowCount) { + if (!this.addMoreItemsToWindow(argument)) { + return this.defaultValue; + } } - - return result; + return this.window[this.currentRelativeItemIndex]; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeParameter = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeParameter.call(this, node); - this.setAST(node, result); + SlidingWindow.prototype.peekItemN = function (n) { + while (this.currentRelativeItemIndex + n >= this.windowCount) { + if (!this.addMoreItemsToWindow(null)) { + return this.defaultValue; + } } - - return result; + return this.window[this.currentRelativeItemIndex + n]; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitIfStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitIfStatement.call(this, node); - this.setAST(node, result); - } - - return result; + SlidingWindow.prototype.moveToNextItem = function () { + this.currentRelativeItemIndex++; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitExpressionStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitExpressionStatement.call(this, node); - this.setAST(node, result); - } - - return result; + SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () { + this.windowCount = this.currentRelativeItemIndex; }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitConstructorDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitConstructorDeclaration.call(this, node); - this.setAST(node, result); + return SlidingWindow; + })(); + TypeScript.SlidingWindow = SlidingWindow; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + Syntax._nextSyntaxID = 1; + function childIndex(parent, child) { + for (var i = 0, n = TypeScript.childCount(parent); i < n; i++) { + var current = TypeScript.childAt(parent, i); + if (current === child) { + return i; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberFunctionDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberFunctionDeclaration.call(this, node); - this.setAST(node, result); + throw TypeScript.Errors.invalidOperation(); + } + Syntax.childIndex = childIndex; + function nodeHasSkippedOrMissingTokens(node) { + for (var i = 0; i < TypeScript.childCount(node); i++) { + var child = TypeScript.childAt(node, i); + if (TypeScript.isToken(child)) { + var token = child; + if (token.hasSkippedToken() || (TypeScript.width(token) === 0 && token.kind() !== 10 /* EndOfFileToken */)) { + return true; + } + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitGetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitGetAccessor.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens; + function isUnterminatedStringLiteral(token) { + if (token && token.kind() === 14 /* StringLiteral */) { + var text = token.text(); + return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSetAccessor = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSetAccessor.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral; + function isUnterminatedMultilineCommentTrivia(trivia) { + if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) { + var text = trivia.fullText(); + return text.length < 4 || text.substring(text.length - 2) !== "*/"; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitMemberVariableDeclaration = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia; + function isEntirelyInsideCommentTrivia(trivia, fullStart, position) { + if (trivia && trivia.isComment() && position > fullStart) { + var end = fullStart + trivia.fullWidth(); + if (position < end) { + return true; + } + else if (position === end) { + return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitThrowStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitThrowStatement.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia; + function isEntirelyInsideComment(sourceUnit, position) { + var positionedToken = TypeScript.findToken(sourceUnit, position); + var fullStart = positionedToken.fullStart(); + var triviaList = null; + var lastTriviaBeforeToken = null; + if (positionedToken.kind() === 10 /* EndOfFileToken */) { + if (positionedToken.hasLeadingTrivia()) { + triviaList = positionedToken.leadingTrivia(); + } + else { + positionedToken = TypeScript.previousToken(positionedToken); + if (positionedToken) { + if (positionedToken && positionedToken.hasTrailingTrivia()) { + triviaList = positionedToken.trailingTrivia(); + fullStart = TypeScript.end(positionedToken); + } + } + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitReturnStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitReturnStatement.call(this, node); - this.setAST(node, result); + else { + if (position <= (fullStart + positionedToken.leadingTriviaWidth())) { + triviaList = positionedToken.leadingTrivia(); + } + else if (position >= (fullStart + TypeScript.width(positionedToken))) { + triviaList = positionedToken.trailingTrivia(); + fullStart = TypeScript.end(positionedToken); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectCreationExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectCreationExpression.call(this, node); - this.setAST(node, result); + if (triviaList) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (position <= fullStart) { + break; + } + else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) { + lastTriviaBeforeToken = trivia; + break; + } + fullStart += trivia.fullWidth(); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSwitchStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSwitchStatement.call(this, node); - this.setAST(node, result); + return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position); + } + Syntax.isEntirelyInsideComment = isEntirelyInsideComment; + function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) { + var positionedToken = TypeScript.findToken(sourceUnit, position); + if (positionedToken) { + if (positionedToken.kind() === 10 /* EndOfFileToken */) { + positionedToken = TypeScript.previousToken(positionedToken); + return positionedToken && positionedToken.trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken); + } + else if (position > TypeScript.start(positionedToken)) { + return (position < TypeScript.end(positionedToken) && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= TypeScript.end(positionedToken) && isUnterminatedStringLiteral(positionedToken)); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCaseSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCaseSwitchClause.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral; + function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) { + var triviaList = null; + var fullEnd; + if (lookInLeadingTriviaList) { + triviaList = positionedToken.leadingTrivia(); + fullEnd = positionedToken.fullStart() + triviaList.fullWidth(); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDefaultSwitchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDefaultSwitchClause.call(this, node); - this.setAST(node, result); + else { + triviaList = positionedToken.trailingTrivia(); + fullEnd = TypeScript.fullEnd(positionedToken); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitBreakStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitBreakStatement.call(this, node); - this.setAST(node, result); + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = triviaList.count() - 1; i >= 0; i--) { + var trivia = triviaList.syntaxTriviaAt(i); + var triviaWidth = trivia.fullWidth(); + if (trivia.isSkippedToken() && position >= fullEnd) { + return trivia.skippedToken(); + } + fullEnd -= triviaWidth; + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitContinueStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitContinueStatement.call(this, node); - this.setAST(node, result); + return null; + } + function findSkippedTokenOnLeft(positionedToken, position) { + var positionInLeadingTriviaList = (position < TypeScript.start(positionedToken)); + return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList); + } + Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft; + function getAncestorOfKind(positionedToken, kind) { + while (positionedToken && positionedToken.parent) { + if (positionedToken.parent.kind() === kind) { + return positionedToken.parent; + } + positionedToken = positionedToken.parent; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForStatement.call(this, node); - this.setAST(node, result); + return null; + } + Syntax.getAncestorOfKind = getAncestorOfKind; + function hasAncestorOfKind(positionedToken, kind) { + return getAncestorOfKind(positionedToken, kind) !== null; + } + Syntax.hasAncestorOfKind = hasAncestorOfKind; + function isIntegerLiteral(expression) { + if (expression) { + switch (expression.kind()) { + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + expression = expression.operand; + return TypeScript.isToken(expression) && TypeScript.IntegerUtilities.isInteger(expression.text()); + case 13 /* NumericLiteral */: + var text = expression.text(); + return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitForInStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitForInStatement.call(this, node); - this.setAST(node, result); + return false; + } + Syntax.isIntegerLiteral = isIntegerLiteral; + function containingNode(element) { + var current = element.parent; + while (current !== null && !TypeScript.isNode(current)) { + current = current.parent; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWhileStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWhileStatement.call(this, node); - this.setAST(node, result); + return current; + } + Syntax.containingNode = containingNode; + function findTokenOnLeft(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var positionedToken = TypeScript.findToken(element, position, false); + var _start = TypeScript.start(positionedToken); + if (includeSkippedTokens) { + positionedToken = findSkippedTokenOnLeft(positionedToken, position) || positionedToken; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitWithStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitWithStatement.call(this, node); - this.setAST(node, result); + if (position > _start) { + return positionedToken; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCastExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCastExpression.call(this, node); - this.setAST(node, result); + if (positionedToken.fullStart() === 0) { + return null; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitObjectLiteralExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitObjectLiteralExpression.call(this, node); - this.setAST(node, result); + return TypeScript.previousToken(positionedToken, includeSkippedTokens); + } + Syntax.findTokenOnLeft = findTokenOnLeft; + function findCompleteTokenOnLeft(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var positionedToken = TypeScript.findToken(element, position, false); + if (includeSkippedTokens) { + positionedToken = findSkippedTokenOnLeft(positionedToken, position) || positionedToken; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitSimplePropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitSimplePropertyAssignment.call(this, node); - this.setAST(node, result); + if (TypeScript.width(positionedToken) > 0 && position >= TypeScript.end(positionedToken)) { + return positionedToken; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionPropertyAssignment = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionPropertyAssignment.call(this, node); - this.setAST(node, result); + return TypeScript.previousToken(positionedToken, includeSkippedTokens); + } + Syntax.findCompleteTokenOnLeft = findCompleteTokenOnLeft; + function firstTokenInLineContainingPosition(syntaxTree, position) { + var current = TypeScript.findToken(syntaxTree.sourceUnit(), position); + while (true) { + if (isFirstTokenInLine(current, syntaxTree.lineMap())) { + break; + } + current = TypeScript.previousToken(current); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitFunctionExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitFunctionExpression.call(this, node); - this.setAST(node, result); + return current; + } + Syntax.firstTokenInLineContainingPosition = firstTokenInLineContainingPosition; + function isFirstTokenInLine(token, lineMap) { + var _previousToken = TypeScript.previousToken(token); + if (_previousToken === null) { + return true; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitEmptyStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitEmptyStatement.call(this, node); - this.setAST(node, result); + return lineMap.getLineNumberFromPosition(TypeScript.end(_previousToken)) !== lineMap.getLineNumberFromPosition(TypeScript.start(token)); + } + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function isShared(element) { + var kind = element.kind(); + return (kind === 1 /* List */ || kind === 2 /* SeparatedList */) && element.length === 0; + } + TypeScript.isShared = isShared; + function childCount(element) { + var kind = element.kind(); + if (kind === 1 /* List */) { + return element.length; + } + else if (kind === 2 /* SeparatedList */) { + return element.length + element.separators.length; + } + else if (kind >= TypeScript.SyntaxKind.FirstToken && kind <= TypeScript.SyntaxKind.LastToken) { + return 0; + } + else { + return TypeScript.nodeMetadata[kind].length; + } + } + TypeScript.childCount = childCount; + function childAt(element, index) { + var kind = element.kind(); + if (kind === 1 /* List */) { + return element[index]; + } + else if (kind === 2 /* SeparatedList */) { + return (index % 2 === 0) ? element[index / 2] : element.separators[(index - 1) / 2]; + } + else { + return element[TypeScript.nodeMetadata[element.kind()][index]]; + } + } + TypeScript.childAt = childAt; + function syntaxTree(element) { + if (element) { + TypeScript.Debug.assert(!isShared(element)); + while (element) { + if (element.kind() === 120 /* SourceUnit */) { + return element.syntaxTree; + } + element = element.parent; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTryStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTryStatement.call(this, node); - this.setAST(node, result); + } + return null; + } + TypeScript.syntaxTree = syntaxTree; + function parsedInStrictMode(node) { + var info = node.data; + if (info === undefined) { + return false; + } + return (info & 4 /* NodeParsedInStrictModeMask */) !== 0; + } + TypeScript.parsedInStrictMode = parsedInStrictMode; + function previousToken(token, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + if (includeSkippedTokens) { + var triviaList = token.leadingTrivia(); + if (triviaList && triviaList.hasSkippedToken()) { + var currentTriviaEndPosition = TypeScript.start(token); + for (var i = triviaList.count() - 1; i >= 0; i--) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isSkippedToken()) { + return trivia.skippedToken(); + } + currentTriviaEndPosition -= trivia.fullWidth(); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitCatchClause = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitCatchClause.call(this, node); - this.setAST(node, result); + } + var start = token.fullStart(); + if (start === 0) { + return null; + } + return findToken(syntaxTree(token).sourceUnit(), start - 1, includeSkippedTokens); + } + TypeScript.previousToken = previousToken; + function findToken(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var endOfFileToken = tryGetEndOfFileAt(element, position); + if (endOfFileToken !== null) { + return endOfFileToken; + } + if (position < 0 || position >= fullWidth(element)) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var positionedToken = findTokenWorker(element, position); + if (includeSkippedTokens) { + return findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken; + } + return positionedToken; + } + TypeScript.findToken = findToken; + function findSkippedTokenInPositionedToken(positionedToken, position) { + var positionInLeadingTriviaList = (position < start(positionedToken)); + return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList); + } + TypeScript.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken; + function findSkippedTokenInLeadingTriviaList(positionedToken, position) { + return findSkippedTokenInTriviaList(positionedToken, position, true); + } + TypeScript.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList; + function findSkippedTokenInTrailingTriviaList(positionedToken, position) { + return findSkippedTokenInTriviaList(positionedToken, position, false); + } + TypeScript.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList; + function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) { + var triviaList = null; + var fullStart; + if (lookInLeadingTriviaList) { + triviaList = positionedToken.leadingTrivia(); + fullStart = positionedToken.fullStart(); + } + else { + triviaList = positionedToken.trailingTrivia(); + fullStart = end(positionedToken); + } + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + var triviaWidth = trivia.fullWidth(); + if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) { + return trivia.skippedToken(); + } + fullStart += triviaWidth; } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitLabeledStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitLabeledStatement.call(this, node); - this.setAST(node, result); + } + return null; + } + function findTokenWorker(element, position) { + if (isToken(element)) { + TypeScript.Debug.assert(fullWidth(element) > 0); + return element; + } + if (isShared(element)) { + throw TypeScript.Errors.invalidOperation(); + } + for (var i = 0, n = childCount(element); i < n; i++) { + var child = childAt(element, i); + if (child !== null) { + var childFullWidth = fullWidth(child); + if (childFullWidth > 0) { + var childFullStart = fullStart(child); + if (position >= childFullStart) { + var childFullEnd = childFullStart + childFullWidth; + if (position < childFullEnd) { + return findTokenWorker(child, position); + } + } + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDoStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDoStatement.call(this, node); - this.setAST(node, result); + } + throw TypeScript.Errors.invalidOperation(); + } + function tryGetEndOfFileAt(element, position) { + if (element.kind() === 120 /* SourceUnit */ && position === fullWidth(element)) { + var sourceUnit = element; + return sourceUnit.endOfFileToken; + } + return null; + } + function nextToken(token, text, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + if (token.kind() === 10 /* EndOfFileToken */) { + return null; + } + if (includeSkippedTokens) { + var triviaList = token.trailingTrivia(text); + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isSkippedToken()) { + return trivia.skippedToken(); + } + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitTypeOfExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitTypeOfExpression.call(this, node); - this.setAST(node, result); + } + return findToken(syntaxTree(token).sourceUnit(), fullEnd(token), includeSkippedTokens); + } + TypeScript.nextToken = nextToken; + function isNode(element) { + if (element !== null) { + var kind = element.kind(); + return kind >= TypeScript.SyntaxKind.FirstNode && kind <= TypeScript.SyntaxKind.LastNode; + } + return false; + } + TypeScript.isNode = isNode; + function isTokenKind(kind) { + return kind >= TypeScript.SyntaxKind.FirstToken && kind <= TypeScript.SyntaxKind.LastToken; + } + function isToken(element) { + if (element !== null) { + return isTokenKind(element.kind()); + } + return false; + } + TypeScript.isToken = isToken; + function isList(element) { + return element !== null && element.kind() === 1 /* List */; + } + TypeScript.isList = isList; + function isSeparatedList(element) { + return element !== null && element.kind() === 2 /* SeparatedList */; + } + TypeScript.isSeparatedList = isSeparatedList; + function syntaxID(element) { + if (isShared(element)) { + throw TypeScript.Errors.invalidOperation("Should not use shared syntax element as a key."); + } + var obj = element; + if (obj._syntaxID === undefined) { + obj._syntaxID = TypeScript.Syntax._nextSyntaxID++; + } + return obj._syntaxID; + } + TypeScript.syntaxID = syntaxID; + function collectTextElements(element, elements, text) { + if (element) { + if (isToken(element)) { + elements.push(element.fullText(text)); } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDeleteExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDeleteExpression.call(this, node); - this.setAST(node, result); + else { + for (var i = 0, n = childCount(element); i < n; i++) { + collectTextElements(childAt(element, i), elements, text); + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitVoidExpression = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitVoidExpression.call(this, node); - this.setAST(node, result); + } + } + function fullText(element, text) { + if (isToken(element)) { + return element.fullText(text); + } + var elements = []; + collectTextElements(element, elements, text); + return elements.join(""); + } + TypeScript.fullText = fullText; + function leadingTriviaWidth(element, text) { + var token = firstToken(element); + return token ? token.leadingTriviaWidth(text) : 0; + } + TypeScript.leadingTriviaWidth = leadingTriviaWidth; + function trailingTriviaWidth(element, text) { + var token = lastToken(element); + return token ? token.trailingTriviaWidth(text) : 0; + } + TypeScript.trailingTriviaWidth = trailingTriviaWidth; + function firstToken(element) { + if (element) { + var kind = element.kind(); + if (isTokenKind(kind)) { + return fullWidth(element) > 0 || element.kind() === 10 /* EndOfFileToken */ ? element : null; + } + if (kind === 1 /* List */) { + var array = element; + for (var i = 0, n = array.length; i < n; i++) { + var token = firstToken(array[i]); + if (token) { + return token; + } + } } - - return result; - }; - - SyntaxTreeToIncrementalAstVisitor.prototype.visitDebuggerStatement = function (node) { - var result = this.getAndMovePastAST(node); - if (!result) { - result = _super.prototype.visitDebuggerStatement.call(this, node); - this.setAST(node, result); + else if (kind === 2 /* SeparatedList */) { + var array = element; + var separators = array.separators; + for (var i = 0, n = array.length + separators.length; i < n; i++) { + var token = firstToken(i % 2 === 0 ? array[i / 2] : separators[(i - 1) / 2]); + if (token) { + return token; + } + } + } + else { + var metadata = TypeScript.nodeMetadata[kind]; + for (var i = 0, n = metadata.length; i < n; i++) { + var child = element[metadata[i]]; + var token = firstToken(child); + if (token) { + return token; + } + } + if (element.kind() === 120 /* SourceUnit */) { + return element.endOfFileToken; + } } - - return result; - }; - return SyntaxTreeToIncrementalAstVisitor; - })(SyntaxTreeToAstVisitor); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var ASTSpan = (function () { - function ASTSpan(_start, _end) { - this._start = _start; - this._end = _end; } - ASTSpan.prototype.start = function () { - return this._start; - }; - - ASTSpan.prototype.end = function () { - return this._end; - }; - return ASTSpan; - })(); - TypeScript.ASTSpan = ASTSpan; - - var astID = 0; - - function structuralEqualsNotIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, false); + return null; } - TypeScript.structuralEqualsNotIncludingPosition = structuralEqualsNotIncludingPosition; - - function structuralEqualsIncludingPosition(ast1, ast2) { - return structuralEquals(ast1, ast2, true); + TypeScript.firstToken = firstToken; + function lastToken(element) { + if (isToken(element)) { + return fullWidth(element) > 0 || element.kind() === 10 /* EndOfFileToken */ ? element : null; + } + if (element.kind() === 120 /* SourceUnit */) { + return element.endOfFileToken; + } + for (var i = childCount(element) - 1; i >= 0; i--) { + var child = childAt(element, i); + if (child !== null) { + var token = lastToken(child); + if (token) { + return token; + } + } + } + return null; } - TypeScript.structuralEqualsIncludingPosition = structuralEqualsIncludingPosition; - - function commentStructuralEqualsNotIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, false); + TypeScript.lastToken = lastToken; + function fullStart(element) { + TypeScript.Debug.assert(!isShared(element)); + var token = isToken(element) ? element : firstToken(element); + return token ? token.fullStart() : -1; } - - function commentStructuralEqualsIncludingPosition(ast1, ast2) { - return commentStructuralEquals(ast1, ast2, true); + TypeScript.fullStart = fullStart; + function fullWidth(element) { + if (isToken(element)) { + return element.fullWidth(); + } + if (isShared(element)) { + return 0; + } + var info = data(element); + return info >>> 3 /* NodeFullWidthShift */; } - - function structuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { - return true; + TypeScript.fullWidth = fullWidth; + function isIncrementallyUnusable(element) { + if (isToken(element)) { + return element.isIncrementallyUnusable(); } - - return ast1 !== null && ast2 !== null && ast1.kind() === ast2.kind() && ast1.structuralEquals(ast2, includingPosition); + if (isShared(element)) { + return false; + } + return (data(element) & 2 /* NodeIncrementallyUnusableMask */) !== 0; } - - function commentStructuralEquals(ast1, ast2, includingPosition) { - if (ast1 === ast2) { + TypeScript.isIncrementallyUnusable = isIncrementallyUnusable; + function data(element) { + TypeScript.Debug.assert(isNode(element) || isList(element) || isSeparatedList(element)); + var dataElement = element; + var info = dataElement.data; + if (info === undefined) { + info = 0; + } + if ((info & 1 /* NodeDataComputed */) === 0) { + info |= computeData(element); + dataElement.data = info; + } + return info; + } + function computeData(element) { + var slotCount = childCount(element); + var fullWidth = 0; + var isIncrementallyUnusable = slotCount === 0; + for (var i = 0, n = slotCount; i < n; i++) { + var child = childAt(element, i); + if (child) { + fullWidth += TypeScript.fullWidth(child); + isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child); + } + } + return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; + } + function start(element, text) { + var token = isToken(element) ? element : firstToken(element); + return token ? token.fullStart() + token.leadingTriviaWidth(text) : -1; + } + TypeScript.start = start; + function end(element, text) { + var token = isToken(element) ? element : lastToken(element); + return token ? fullEnd(token) - token.trailingTriviaWidth(text) : -1; + } + TypeScript.end = end; + function width(element, text) { + if (isToken(element)) { + return element.text().length; + } + return fullWidth(element) - leadingTriviaWidth(element, text) - trailingTriviaWidth(element, text); + } + TypeScript.width = width; + function fullEnd(element) { + return fullStart(element) + fullWidth(element); + } + TypeScript.fullEnd = fullEnd; + function existsNewLineBetweenTokens(token1, token2, text) { + if (token1 === token2) { + return false; + } + if (token1 === null || token2 === null) { return true; } - - return ast1 !== null && ast2 !== null && ast1.structuralEquals(ast2, includingPosition); - } - - function astArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? structuralEqualsIncludingPosition : structuralEqualsNotIncludingPosition); - } - - function commentArrayStructuralEquals(array1, array2, includingPosition) { - return TypeScript.ArrayUtilities.sequenceEquals(array1, array2, includingPosition ? commentStructuralEqualsIncludingPosition : commentStructuralEqualsNotIncludingPosition); - } - - var AST = (function () { - function AST() { - this.parent = null; - this._start = -1; - this._end = -1; - this._trailingTriviaWidth = 0; - this._astID = astID++; - this._preComments = null; - this._postComments = null; - } - AST.prototype.syntaxID = function () { - return this._astID; - }; - - AST.prototype.start = function () { - return this._start; - }; - - AST.prototype.end = function () { - return this._end; - }; - - AST.prototype.trailingTriviaWidth = function () { - return this._trailingTriviaWidth; - }; - - AST.prototype.fileName = function () { - return this.parent.fileName(); - }; - - AST.prototype.kind = function () { - throw TypeScript.Errors.abstract(); + var lineMap = text.lineMap(); + return lineMap.getLineNumberFromPosition(end(token1, text)) !== lineMap.getLineNumberFromPosition(start(token2, text)); + } + TypeScript.existsNewLineBetweenTokens = existsNewLineBetweenTokens; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxFacts) { + function isDirectivePrologueElement(node) { + if (node.kind() === 149 /* ExpressionStatement */) { + var expressionStatement = node; + var expression = expressionStatement.expression; + if (expression.kind() === 14 /* StringLiteral */) { + return true; + } + } + return false; + } + SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement; + function isUseStrictDirective(node) { + var expressionStatement = node; + var stringLiteral = expressionStatement.expression; + var text = stringLiteral.text(); + return text === '"use strict"' || text === "'use strict'"; + } + SyntaxFacts.isUseStrictDirective = isUseStrictDirective; + function isIdentifierNameOrAnyKeyword(token) { + var tokenKind = token.kind(); + return tokenKind === 11 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind); + } + SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword; + })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); + var SyntaxFacts = TypeScript.SyntaxFacts; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var _emptyList = []; + var _emptySeparatedList = []; + var _emptySeparators = []; + _emptySeparatedList.separators = _emptySeparators; + function assertEmptyLists() { + } + Array.prototype.kind = function () { + return this.separators === undefined ? 1 /* List */ : 2 /* SeparatedList */; }; - - AST.prototype.preComments = function () { - return this._preComments; + Array.prototype.separatorCount = function () { + assertEmptyLists(); + return this.separators.length; }; - - AST.prototype.postComments = function () { - return this._postComments; + Array.prototype.separatorAt = function (index) { + assertEmptyLists(); + return this.separators[index]; }; - - AST.prototype.setPreComments = function (comments) { - if (comments && comments.length) { - this._preComments = comments; - } else if (this._preComments) { - this._preComments = null; + function emptyList() { + return _emptyList; + } + Syntax.emptyList = emptyList; + function emptySeparatedList() { + return _emptySeparatedList; + } + Syntax.emptySeparatedList = emptySeparatedList; + function list(nodes) { + if (nodes === undefined || nodes === null || nodes.length === 0) { + return emptyList(); } - }; - - AST.prototype.setPostComments = function (comments) { - if (comments && comments.length) { - this._postComments = comments; - } else if (this._postComments) { - this._postComments = null; + for (var i = 0, n = nodes.length; i < n; i++) { + nodes[i].parent = nodes; } - }; - - AST.prototype.width = function () { - return this.end() - this.start(); - }; - - AST.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { - return false; - } + return nodes; + } + Syntax.list = list; + function separatedList(nodes, separators) { + if (nodes === undefined || nodes === null || nodes.length === 0) { + return emptySeparatedList(); } - - return commentArrayStructuralEquals(this.preComments(), ast.preComments(), includingPosition) && commentArrayStructuralEquals(this.postComments(), ast.postComments(), includingPosition); - }; - - AST.prototype.isExpression = function () { - return false; - }; - return AST; - })(); - TypeScript.AST = AST; - - var ISyntaxList2 = (function (_super) { - __extends(ISyntaxList2, _super); - function ISyntaxList2(_fileName, members) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; + for (var i = 0, n = nodes.length; i < n; i++) { + nodes[i].parent = nodes; } - } - ISyntaxList2.prototype.childCount = function () { - return this.members.length; - }; - - ISyntaxList2.prototype.childAt = function (index) { - return this.members[index]; - }; - - ISyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISyntaxList2.prototype.kind = function () { - return 1 /* List */; - }; - - ISyntaxList2.prototype.firstOrDefault = function (func) { - return TypeScript.ArrayUtilities.firstOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.lastOrDefault = function (func) { - return TypeScript.ArrayUtilities.lastOrDefault(this.members, func); - }; - - ISyntaxList2.prototype.any = function (func) { - return TypeScript.ArrayUtilities.any(this.members, func); - }; - - ISyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISyntaxList2; - })(AST); - TypeScript.ISyntaxList2 = ISyntaxList2; - - var ISeparatedSyntaxList2 = (function (_super) { - __extends(ISeparatedSyntaxList2, _super); - function ISeparatedSyntaxList2(_fileName, members, _separatorCount) { - _super.call(this); - this._fileName = _fileName; - this.members = members; - this._separatorCount = _separatorCount; - - for (var i = 0, n = members.length; i < n; i++) { - members[i].parent = this; + for (var i = 0, n = separators.length; i < n; i++) { + separators[i].parent = nodes; } + nodes.separators = separators.length === 0 ? _emptySeparators : separators; + return nodes; } - ISeparatedSyntaxList2.prototype.nonSeparatorCount = function () { - return this.members.length; - }; - - ISeparatedSyntaxList2.prototype.separatorCount = function () { - return this._separatorCount; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorAt = function (index) { - return this.members[index]; - }; - - ISeparatedSyntaxList2.prototype.nonSeparatorIndexOf = function (ast) { - for (var i = 0, n = this.nonSeparatorCount(); i < n; i++) { - if (this.nonSeparatorAt(i) === ast) { + Syntax.separatedList = separatedList; + function nonSeparatorIndexOf(list, ast) { + for (var i = 0, n = list.length; i < n; i++) { + if (list[i] === ast) { return i; } } - return -1; - }; - - ISeparatedSyntaxList2.prototype.fileName = function () { - return this._fileName; - }; - - ISeparatedSyntaxList2.prototype.kind = function () { - return 2 /* SeparatedList */; - }; - - ISeparatedSyntaxList2.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && astArrayStructuralEquals(this.members, ast.members, includingPosition); - }; - return ISeparatedSyntaxList2; - })(AST); - TypeScript.ISeparatedSyntaxList2 = ISeparatedSyntaxList2; - - var SourceUnit = (function (_super) { - __extends(SourceUnit, _super); - function SourceUnit(moduleElements, endOfFileTokenLeadingComments, _fileName) { - _super.call(this); - this.moduleElements = moduleElements; - this.endOfFileTokenLeadingComments = endOfFileTokenLeadingComments; - this._fileName = _fileName; - moduleElements && (moduleElements.parent = this); - } - SourceUnit.prototype.fileName = function () { - return this._fileName; - }; - - SourceUnit.prototype.kind = function () { - return 120 /* SourceUnit */; - }; - - SourceUnit.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return SourceUnit; - })(AST); - TypeScript.SourceUnit = SourceUnit; - - var Identifier = (function (_super) { - __extends(Identifier, _super); - function Identifier(_text) { - _super.call(this); - this._text = _text; - this._valueText = null; } - Identifier.prototype.text = function () { - return this._text; - }; - Identifier.prototype.valueText = function () { - if (!this._valueText) { - var text = this._text; - if (text === "__proto__") { - this._valueText = "#__proto__"; - } else { - this._valueText = TypeScript.Syntax.massageEscapes(text); - } + Syntax.nonSeparatorIndexOf = nonSeparatorIndexOf; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxNode = (function () { + function SyntaxNode(data) { + if (data) { + this.data = data; } - - return this._valueText; - }; - - Identifier.prototype.kind = function () { - return 11 /* IdentifierName */; - }; - - Identifier.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - Identifier.prototype.isExpression = function () { - return true; - }; - return Identifier; - })(AST); - TypeScript.Identifier = Identifier; - - var LiteralExpression = (function (_super) { - __extends(LiteralExpression, _super); - function LiteralExpression(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; } - LiteralExpression.prototype.text = function () { - return this._text; - }; - - LiteralExpression.prototype.valueText = function () { - return this._valueText; - }; - - LiteralExpression.prototype.kind = function () { - return this._nodeType; - }; - - LiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - LiteralExpression.prototype.isExpression = function () { - return true; + SyntaxNode.prototype.kind = function () { + return this.__kind; }; - return LiteralExpression; - })(AST); - TypeScript.LiteralExpression = LiteralExpression; - - var ThisExpression = (function (_super) { - __extends(ThisExpression, _super); - function ThisExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; + return SyntaxNode; + })(); + TypeScript.SyntaxNode = SyntaxNode; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.nodeMetadata = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["moduleElements", "endOfFileToken"], ["left", "dotToken", "right"], ["openBraceToken", "typeMembers", "closeBraceToken"], ["typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["type", "openBracketToken", "closeBracketToken"], ["newKeyword", "typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["name", "typeArgumentList"], ["typeOfKeyword", "name"], ["modifiers", "interfaceKeyword", "identifier", "typeParameterList", "heritageClauses", "body"], ["modifiers", "functionKeyword", "identifier", "callSignature", "block", "semicolonToken"], ["modifiers", "moduleKeyword", "name", "stringLiteral", "openBraceToken", "moduleElements", "closeBraceToken"], ["modifiers", "classKeyword", "identifier", "typeParameterList", "heritageClauses", "openBraceToken", "classElements", "closeBraceToken"], ["modifiers", "enumKeyword", "identifier", "openBraceToken", "enumElements", "closeBraceToken"], ["modifiers", "importKeyword", "identifier", "equalsToken", "moduleReference", "semicolonToken"], ["exportKeyword", "equalsToken", "identifier", "semicolonToken"], ["modifiers", "propertyName", "callSignature", "block", "semicolonToken"], ["modifiers", "variableDeclarator", "semicolonToken"], ["modifiers", "constructorKeyword", "callSignature", "block", "semicolonToken"], ["modifiers", "indexSignature", "semicolonToken"], ["modifiers", "getKeyword", "propertyName", "callSignature", "block"], ["modifiers", "setKeyword", "propertyName", "callSignature", "block"], ["propertyName", "questionToken", "typeAnnotation"], ["typeParameterList", "parameterList", "typeAnnotation"], ["newKeyword", "callSignature"], ["openBracketToken", "parameters", "closeBracketToken", "typeAnnotation"], ["propertyName", "questionToken", "callSignature"], ["openBraceToken", "statements", "closeBraceToken"], ["ifKeyword", "openParenToken", "condition", "closeParenToken", "statement", "elseClause"], ["modifiers", "variableDeclaration", "semicolonToken"], ["expression", "semicolonToken"], ["returnKeyword", "expression", "semicolonToken"], ["switchKeyword", "openParenToken", "expression", "closeParenToken", "openBraceToken", "switchClauses", "closeBraceToken"], ["breakKeyword", "identifier", "semicolonToken"], ["continueKeyword", "identifier", "semicolonToken"], ["forKeyword", "openParenToken", "variableDeclaration", "initializer", "firstSemicolonToken", "condition", "secondSemicolonToken", "incrementor", "closeParenToken", "statement"], ["forKeyword", "openParenToken", "variableDeclaration", "left", "inKeyword", "expression", "closeParenToken", "statement"], ["semicolonToken"], ["throwKeyword", "expression", "semicolonToken"], ["whileKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["tryKeyword", "block", "catchClause", "finallyClause"], ["identifier", "colonToken", "statement"], ["doKeyword", "statement", "whileKeyword", "openParenToken", "condition", "closeParenToken", "semicolonToken"], ["debuggerKeyword", "semicolonToken"], ["withKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["deleteKeyword", "expression"], ["typeOfKeyword", "expression"], ["voidKeyword", "expression"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["operand", "operatorToken"], ["operand", "operatorToken"], ["expression", "dotToken", "name"], ["expression", "argumentList"], ["openBracketToken", "expressions", "closeBracketToken"], ["openBraceToken", "propertyAssignments", "closeBraceToken"], ["newKeyword", "expression", "argumentList"], ["openParenToken", "expression", "closeParenToken"], ["callSignature", "equalsGreaterThanToken", "block", "expression"], ["parameter", "equalsGreaterThanToken", "block", "expression"], ["lessThanToken", "type", "greaterThanToken", "expression"], ["expression", "openBracketToken", "argumentExpression", "closeBracketToken"], ["functionKeyword", "identifier", "callSignature", "block"], [], ["varKeyword", "variableDeclarators"], ["propertyName", "typeAnnotation", "equalsValueClause"], ["typeArgumentList", "openParenToken", "arguments", "closeParenToken"], ["openParenToken", "parameters", "closeParenToken"], ["lessThanToken", "typeArguments", "greaterThanToken"], ["lessThanToken", "typeParameters", "greaterThanToken"], ["extendsOrImplementsKeyword", "typeNames"], ["extendsOrImplementsKeyword", "typeNames"], ["equalsToken", "value"], ["caseKeyword", "expression", "colonToken", "statements"], ["defaultKeyword", "colonToken", "statements"], ["elseKeyword", "statement"], ["catchKeyword", "openParenToken", "identifier", "typeAnnotation", "closeParenToken", "block"], ["finallyKeyword", "block"], ["identifier", "constraint"], ["extendsKeyword", "typeOrExpression"], ["propertyName", "colonToken", "expression"], ["propertyName", "callSignature", "block"], ["dotDotDotToken", "modifiers", "identifier", "questionToken", "typeAnnotation", "equalsValueClause"], ["propertyName", "equalsValueClause"], ["colonToken", "type"], ["requireKeyword", "openParenToken", "stringLiteral", "closeParenToken"], ["moduleName"], ]; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function tokenValue(token) { + if (token.fullWidth() === 0) { + return null; } - ThisExpression.prototype.text = function () { - return this._text; - }; - - ThisExpression.prototype.valueText = function () { - return this._valueText; - }; - - ThisExpression.prototype.kind = function () { - return 35 /* ThisKeyword */; - }; - - ThisExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - ThisExpression.prototype.isExpression = function () { - return true; - }; - return ThisExpression; - })(AST); - TypeScript.ThisExpression = ThisExpression; - - var SuperExpression = (function (_super) { - __extends(SuperExpression, _super); - function SuperExpression(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; + var kind = token.kind(); + var text = token.text(); + if (kind === 11 /* IdentifierName */) { + return massageEscapes(text); } - SuperExpression.prototype.text = function () { - return this._text; - }; - - SuperExpression.prototype.valueText = function () { - return this._valueText; - }; - - SuperExpression.prototype.kind = function () { - return 50 /* SuperKeyword */; - }; - - SuperExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - SuperExpression.prototype.isExpression = function () { - return true; - }; - return SuperExpression; - })(AST); - TypeScript.SuperExpression = SuperExpression; - - var NumericLiteral = (function (_super) { - __extends(NumericLiteral, _super); - function NumericLiteral(_value, _text, _valueText) { - _super.call(this); - this._value = _value; - this._text = _text; - this._valueText = _valueText; + switch (kind) { + case 37 /* TrueKeyword */: + return true; + case 24 /* FalseKeyword */: + return false; + case 32 /* NullKeyword */: + return null; } - NumericLiteral.prototype.text = function () { - return this._text; - }; - NumericLiteral.prototype.valueText = function () { - return this._valueText; - }; - NumericLiteral.prototype.value = function () { - return this._value; - }; - - NumericLiteral.prototype.kind = function () { - return 13 /* NumericLiteral */; - }; - - NumericLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && (this._value === ast._value || (isNaN(this._value) && isNaN(ast._value))) && this._text === ast._text; - }; - - NumericLiteral.prototype.isExpression = function () { - return true; - }; - return NumericLiteral; - })(AST); - TypeScript.NumericLiteral = NumericLiteral; - - var RegularExpressionLiteral = (function (_super) { - __extends(RegularExpressionLiteral, _super); - function RegularExpressionLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; + if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { + return TypeScript.SyntaxFacts.getText(kind); } - RegularExpressionLiteral.prototype.text = function () { - return this._text; - }; - - RegularExpressionLiteral.prototype.valueText = function () { - return this._valueText; - }; - - RegularExpressionLiteral.prototype.kind = function () { - return 12 /* RegularExpressionLiteral */; - }; - - RegularExpressionLiteral.prototype.isExpression = function () { - return true; - }; - return RegularExpressionLiteral; - })(AST); - TypeScript.RegularExpressionLiteral = RegularExpressionLiteral; - - var StringLiteral = (function (_super) { - __extends(StringLiteral, _super); - function StringLiteral(_text, _valueText) { - _super.call(this); - this._text = _text; - this._valueText = _valueText; - this._valueText = _valueText === "__proto__" ? "#__proto__" : _valueText; + if (kind === 13 /* NumericLiteral */) { + return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text); } - StringLiteral.prototype.text = function () { - return this._text; - }; - StringLiteral.prototype.valueText = function () { - return this._valueText; - }; - - StringLiteral.prototype.kind = function () { - return 14 /* StringLiteral */; - }; - - StringLiteral.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && this._text === ast._text; - }; - - StringLiteral.prototype.isExpression = function () { - return true; - }; - return StringLiteral; - })(AST); - TypeScript.StringLiteral = StringLiteral; - - var TypeAnnotation = (function (_super) { - __extends(TypeAnnotation, _super); - function TypeAnnotation(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); + else if (kind === 14 /* StringLiteral */) { + if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) { + return massageEscapes(text.substr(1, text.length - 2)); + } + else { + return massageEscapes(text.substr(1)); + } } - TypeAnnotation.prototype.kind = function () { - return 244 /* TypeAnnotation */; - }; - return TypeAnnotation; - })(AST); - TypeScript.TypeAnnotation = TypeAnnotation; - - var BuiltInType = (function (_super) { - __extends(BuiltInType, _super); - function BuiltInType(_nodeType, _text, _valueText) { - _super.call(this); - this._nodeType = _nodeType; - this._text = _text; - this._valueText = _valueText; + else if (kind === 12 /* RegularExpressionLiteral */) { + return regularExpressionValue(text); } - BuiltInType.prototype.text = function () { - return this._text; - }; - - BuiltInType.prototype.valueText = function () { - return this._valueText; - }; - - BuiltInType.prototype.kind = function () { - return this._nodeType; - }; - return BuiltInType; - })(AST); - TypeScript.BuiltInType = BuiltInType; - - var ExternalModuleReference = (function (_super) { - __extends(ExternalModuleReference, _super); - function ExternalModuleReference(stringLiteral) { - _super.call(this); - this.stringLiteral = stringLiteral; - stringLiteral && (stringLiteral.parent = this); + else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) { + return null; + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + TypeScript.tokenValue = tokenValue; + function tokenValueText(token) { + var value = tokenValue(token); + return value === null ? "" : massageDisallowedIdentifiers(value.toString()); + } + TypeScript.tokenValueText = tokenValueText; + function massageEscapes(text) { + return text.indexOf("\\") >= 0 ? convertEscapes(text) : text; + } + TypeScript.massageEscapes = massageEscapes; + function regularExpressionValue(text) { + try { + var lastSlash = text.lastIndexOf("/"); + var body = text.substring(1, lastSlash); + var flags = text.substring(lastSlash + 1); + return new RegExp(body, flags); + } + catch (e) { + return null; + } + } + function massageDisallowedIdentifiers(text) { + if (text.charCodeAt(0) === 95 /* _ */ && text.charCodeAt(1) === 95 /* _ */) { + return "_" + text; + } + return text; + } + var characterArray = []; + function convertEscapes(text) { + characterArray.length = 0; + var result = ""; + for (var i = 0, n = text.length; i < n; i++) { + var ch = text.charCodeAt(i); + if (ch === 92 /* backslash */) { + i++; + if (i < n) { + ch = text.charCodeAt(i); + switch (ch) { + case 48 /* _0 */: + characterArray.push(0 /* nullCharacter */); + continue; + case 98 /* b */: + characterArray.push(8 /* backspace */); + continue; + case 102 /* f */: + characterArray.push(12 /* formFeed */); + continue; + case 110 /* n */: + characterArray.push(10 /* lineFeed */); + continue; + case 114 /* r */: + characterArray.push(13 /* carriageReturn */); + continue; + case 116 /* t */: + characterArray.push(9 /* tab */); + continue; + case 118 /* v */: + characterArray.push(11 /* verticalTab */); + continue; + case 120 /* x */: + characterArray.push(hexValue(text, i + 1, 2)); + i += 2; + continue; + case 117 /* u */: + characterArray.push(hexValue(text, i + 1, 4)); + i += 4; + continue; + case 13 /* carriageReturn */: + var nextIndex = i + 1; + if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) { + i++; + } + continue; + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + continue; + default: + } + } + } + characterArray.push(ch); + if (i && !(i % 1024)) { + result = result.concat(String.fromCharCode.apply(null, characterArray)); + characterArray.length = 0; + } } - ExternalModuleReference.prototype.kind = function () { - return 245 /* ExternalModuleReference */; - }; - return ExternalModuleReference; - })(AST); - TypeScript.ExternalModuleReference = ExternalModuleReference; - - var ModuleNameModuleReference = (function (_super) { - __extends(ModuleNameModuleReference, _super); - function ModuleNameModuleReference(moduleName) { - _super.call(this); - this.moduleName = moduleName; - moduleName && (moduleName.parent = this); + if (characterArray.length) { + result = result.concat(String.fromCharCode.apply(null, characterArray)); } - ModuleNameModuleReference.prototype.kind = function () { - return 246 /* ModuleNameModuleReference */; - }; - return ModuleNameModuleReference; - })(AST); - TypeScript.ModuleNameModuleReference = ModuleNameModuleReference; - - var ImportDeclaration = (function (_super) { - __extends(ImportDeclaration, _super); - function ImportDeclaration(modifiers, identifier, moduleReference) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.moduleReference = moduleReference; - identifier && (identifier.parent = this); - moduleReference && (moduleReference.parent = this); - } - ImportDeclaration.prototype.kind = function () { - return 133 /* ImportDeclaration */; - }; - - ImportDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.moduleReference, ast.moduleReference, includingPosition); - }; - return ImportDeclaration; - })(AST); - TypeScript.ImportDeclaration = ImportDeclaration; - - var ExportAssignment = (function (_super) { - __extends(ExportAssignment, _super); - function ExportAssignment(identifier) { - _super.call(this); - this.identifier = identifier; - identifier && (identifier.parent = this); + return result; + } + function hexValue(text, start, length) { + var intChar = 0; + for (var i = 0; i < length; i++) { + var ch2 = text.charCodeAt(start + i); + if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { + break; + } + intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); } - ExportAssignment.prototype.kind = function () { - return 134 /* ExportAssignment */; - }; - - ExportAssignment.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition); - }; - return ExportAssignment; - })(AST); - TypeScript.ExportAssignment = ExportAssignment; - - var TypeParameterList = (function (_super) { - __extends(TypeParameterList, _super); - function TypeParameterList(typeParameters) { - _super.call(this); - this.typeParameters = typeParameters; - typeParameters && (typeParameters.parent = this); + return intChar; + } +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + function realizeToken(token, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text(), token.trailingTrivia(text)); } - TypeParameterList.prototype.kind = function () { - return 229 /* TypeParameterList */; - }; - return TypeParameterList; - })(AST); - TypeScript.TypeParameterList = TypeParameterList; - - var ClassDeclaration = (function (_super) { - __extends(ClassDeclaration, _super); - function ClassDeclaration(modifiers, identifier, typeParameterList, heritageClauses, classElements, closeBraceToken) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.classElements = classElements; - this.closeBraceToken = closeBraceToken; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - heritageClauses && (heritageClauses.parent = this); - classElements && (classElements.parent = this); - } - ClassDeclaration.prototype.kind = function () { - return 131 /* ClassDeclaration */; - }; - - ClassDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.classElements, ast.classElements, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return ClassDeclaration; - })(AST); - TypeScript.ClassDeclaration = ClassDeclaration; - - var InterfaceDeclaration = (function (_super) { - __extends(InterfaceDeclaration, _super); - function InterfaceDeclaration(modifiers, identifier, typeParameterList, heritageClauses, body) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.typeParameterList = typeParameterList; - this.heritageClauses = heritageClauses; - this.body = body; - identifier && (identifier.parent = this); - typeParameterList && (typeParameterList.parent = this); - body && (body.parent = this); - heritageClauses && (heritageClauses.parent = this); - } - InterfaceDeclaration.prototype.kind = function () { - return 128 /* InterfaceDeclaration */; - }; - - InterfaceDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.body, ast.body, includingPosition) && structuralEquals(this.typeParameterList, ast.typeParameterList, includingPosition) && structuralEquals(this.heritageClauses, ast.heritageClauses, includingPosition); - }; - return InterfaceDeclaration; - })(AST); - TypeScript.InterfaceDeclaration = InterfaceDeclaration; - - var HeritageClause = (function (_super) { - __extends(HeritageClause, _super); - function HeritageClause(_nodeType, typeNames) { - _super.call(this); - this._nodeType = _nodeType; - this.typeNames = typeNames; - typeNames && (typeNames.parent = this); + Syntax.realizeToken = realizeToken; + function convertKeywordToIdentifier(token) { + return new ConvertedKeywordToken(token); } - HeritageClause.prototype.kind = function () { - return this._nodeType; - }; - - HeritageClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeNames, ast.typeNames, includingPosition); - }; - return HeritageClause; - })(AST); - TypeScript.HeritageClause = HeritageClause; - - var ModuleDeclaration = (function (_super) { - __extends(ModuleDeclaration, _super); - function ModuleDeclaration(modifiers, name, stringLiteral, moduleElements, endingToken) { - _super.call(this); - this.modifiers = modifiers; - this.name = name; - this.stringLiteral = stringLiteral; - this.moduleElements = moduleElements; - this.endingToken = endingToken; - name && (name.parent = this); - stringLiteral && (stringLiteral.parent = this); - moduleElements && (moduleElements.parent = this); - } - ModuleDeclaration.prototype.kind = function () { - return 130 /* ModuleDeclaration */; - }; - - ModuleDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.moduleElements, ast.moduleElements, includingPosition); - }; - return ModuleDeclaration; - })(AST); - TypeScript.ModuleDeclaration = ModuleDeclaration; - - var FunctionDeclaration = (function (_super) { - __extends(FunctionDeclaration, _super); - function FunctionDeclaration(modifiers, identifier, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionDeclaration.prototype.kind = function () { - return 129 /* FunctionDeclaration */; - }; - - FunctionDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.callSignature, ast.callSignature, includingPosition); - }; - return FunctionDeclaration; - })(AST); - TypeScript.FunctionDeclaration = FunctionDeclaration; - - var VariableStatement = (function (_super) { - __extends(VariableStatement, _super); - function VariableStatement(modifiers, declaration) { - _super.call(this); - this.modifiers = modifiers; - this.declaration = declaration; - declaration && (declaration.parent = this); + Syntax.convertKeywordToIdentifier = convertKeywordToIdentifier; + function withLeadingTrivia(token, leadingTrivia, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), leadingTrivia, token.text(), token.trailingTrivia(text)); } - VariableStatement.prototype.kind = function () { - return 148 /* VariableStatement */; - }; - - VariableStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declaration, ast.declaration, includingPosition); - }; - return VariableStatement; - })(AST); - TypeScript.VariableStatement = VariableStatement; - - var VariableDeclaration = (function (_super) { - __extends(VariableDeclaration, _super); - function VariableDeclaration(declarators) { - _super.call(this); - this.declarators = declarators; - declarators && (declarators.parent = this); + Syntax.withLeadingTrivia = withLeadingTrivia; + function withTrailingTrivia(token, trailingTrivia, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text(), trailingTrivia); + } + Syntax.withTrailingTrivia = withTrailingTrivia; + function emptyToken(kind) { + return new EmptyToken(kind); + } + Syntax.emptyToken = emptyToken; + var EmptyToken = (function () { + function EmptyToken(_kind) { + this._kind = _kind; + } + EmptyToken.prototype.setFullStart = function (fullStart) { + }; + EmptyToken.prototype.kind = function () { + return this._kind; + }; + EmptyToken.prototype.clone = function () { + return new EmptyToken(this.kind()); + }; + EmptyToken.prototype.isIncrementallyUnusable = function () { + return true; + }; + EmptyToken.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + EmptyToken.prototype.fullWidth = function () { + return 0; + }; + EmptyToken.prototype.position = function () { + var previousElement = this.previousNonZeroWidthElement(); + return previousElement === null ? 0 : TypeScript.fullStart(previousElement) + TypeScript.fullWidth(previousElement); + }; + EmptyToken.prototype.previousNonZeroWidthElement = function () { + var current = this; + while (true) { + var parent = current.parent; + if (parent === null) { + TypeScript.Debug.assert(current.kind() === 120 /* SourceUnit */, "We had a node without a parent that was not the root node!"); + return null; + } + for (var i = 0, n = TypeScript.childCount(parent); i < n; i++) { + if (TypeScript.childAt(parent, i) === current) { + break; + } + } + TypeScript.Debug.assert(i !== n, "Could not find current element in parent's child list!"); + for (var j = i - 1; j >= 0; j--) { + var sibling = TypeScript.childAt(parent, j); + if (sibling && TypeScript.fullWidth(sibling) > 0) { + return sibling; + } + } + current = current.parent; + } + }; + EmptyToken.prototype.fullStart = function () { + return this.position(); + }; + EmptyToken.prototype.text = function () { + return ""; + }; + EmptyToken.prototype.fullText = function () { + return ""; + }; + EmptyToken.prototype.hasLeadingTrivia = function () { + return false; + }; + EmptyToken.prototype.leadingTriviaWidth = function () { + return 0; + }; + EmptyToken.prototype.hasTrailingTrivia = function () { + return false; + }; + EmptyToken.prototype.hasSkippedToken = function () { + return false; + }; + EmptyToken.prototype.trailingTriviaWidth = function () { + return 0; + }; + EmptyToken.prototype.leadingTrivia = function () { + return Syntax.emptyTriviaList; + }; + EmptyToken.prototype.trailingTrivia = function () { + return Syntax.emptyTriviaList; + }; + return EmptyToken; + })(); + var RealizedToken = (function () { + function RealizedToken(fullStart, kind, isKeywordConvertedToIdentifier, leadingTrivia, text, trailingTrivia) { + this._fullStart = fullStart; + this._kind = kind; + this._isKeywordConvertedToIdentifier = isKeywordConvertedToIdentifier; + this._text = text; + this._leadingTrivia = leadingTrivia.clone(); + this._trailingTrivia = trailingTrivia.clone(); + if (!this._leadingTrivia.isShared()) { + this._leadingTrivia.parent = this; + } + if (!this._trailingTrivia.isShared()) { + this._trailingTrivia.parent = this; + } + } + RealizedToken.prototype.setFullStart = function (fullStart) { + this._fullStart = fullStart; + }; + RealizedToken.prototype.kind = function () { + return this._kind; + }; + RealizedToken.prototype.clone = function () { + return new RealizedToken(this._fullStart, this.kind(), this._isKeywordConvertedToIdentifier, this._leadingTrivia, this._text, this._trailingTrivia); + }; + RealizedToken.prototype.isIncrementallyUnusable = function () { + return true; + }; + RealizedToken.prototype.isKeywordConvertedToIdentifier = function () { + return this._isKeywordConvertedToIdentifier; + }; + RealizedToken.prototype.fullStart = function () { + return this._fullStart; + }; + RealizedToken.prototype.fullWidth = function () { + return this._leadingTrivia.fullWidth() + this._text.length + this._trailingTrivia.fullWidth(); + }; + RealizedToken.prototype.text = function () { + return this._text; + }; + RealizedToken.prototype.fullText = function () { + return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText(); + }; + RealizedToken.prototype.hasLeadingTrivia = function () { + return this._leadingTrivia.count() > 0; + }; + RealizedToken.prototype.hasTrailingTrivia = function () { + return this._trailingTrivia.count() > 0; + }; + RealizedToken.prototype.leadingTriviaWidth = function () { + return this._leadingTrivia.fullWidth(); + }; + RealizedToken.prototype.trailingTriviaWidth = function () { + return this._trailingTrivia.fullWidth(); + }; + RealizedToken.prototype.hasSkippedToken = function () { + return this._leadingTrivia.hasSkippedToken() || this._trailingTrivia.hasSkippedToken(); + }; + RealizedToken.prototype.leadingTrivia = function () { + return this._leadingTrivia; + }; + RealizedToken.prototype.trailingTrivia = function () { + return this._trailingTrivia; + }; + return RealizedToken; + })(); + var ConvertedKeywordToken = (function () { + function ConvertedKeywordToken(underlyingToken) { + this.underlyingToken = underlyingToken; + } + ConvertedKeywordToken.prototype.kind = function () { + return 11 /* IdentifierName */; + }; + ConvertedKeywordToken.prototype.setFullStart = function (fullStart) { + this.underlyingToken.setFullStart(fullStart); + }; + ConvertedKeywordToken.prototype.fullStart = function () { + return this.underlyingToken.fullStart(); + }; + ConvertedKeywordToken.prototype.fullWidth = function () { + return this.underlyingToken.fullWidth(); + }; + ConvertedKeywordToken.prototype.text = function () { + return this.underlyingToken.text(); + }; + ConvertedKeywordToken.prototype.syntaxTreeText = function (text) { + var result = text || TypeScript.syntaxTree(this).text; + TypeScript.Debug.assert(result); + return result; + }; + ConvertedKeywordToken.prototype.fullText = function (text) { + return this.underlyingToken.fullText(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.hasLeadingTrivia = function () { + return this.underlyingToken.hasLeadingTrivia(); + }; + ConvertedKeywordToken.prototype.hasTrailingTrivia = function () { + return this.underlyingToken.hasTrailingTrivia(); + }; + ConvertedKeywordToken.prototype.hasSkippedToken = function () { + return this.underlyingToken.hasSkippedToken(); + }; + ConvertedKeywordToken.prototype.leadingTrivia = function (text) { + var result = this.underlyingToken.leadingTrivia(this.syntaxTreeText(text)); + result.parent = this; + return result; + }; + ConvertedKeywordToken.prototype.trailingTrivia = function (text) { + var result = this.underlyingToken.trailingTrivia(this.syntaxTreeText(text)); + result.parent = this; + return result; + }; + ConvertedKeywordToken.prototype.leadingTriviaWidth = function (text) { + return this.underlyingToken.leadingTriviaWidth(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.trailingTriviaWidth = function (text) { + return this.underlyingToken.trailingTriviaWidth(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.isKeywordConvertedToIdentifier = function () { + return true; + }; + ConvertedKeywordToken.prototype.isIncrementallyUnusable = function () { + return this.underlyingToken.isIncrementallyUnusable(); + }; + ConvertedKeywordToken.prototype.clone = function () { + return new ConvertedKeywordToken(this.underlyingToken); + }; + return ConvertedKeywordToken; + })(); + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var AbstractTrivia = (function () { + function AbstractTrivia(_kind) { + this._kind = _kind; + } + AbstractTrivia.prototype.kind = function () { + return this._kind; + }; + AbstractTrivia.prototype.clone = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullStart = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullWidth = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullText = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.skippedToken = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.isWhitespace = function () { + return this.kind() === 4 /* WhitespaceTrivia */; + }; + AbstractTrivia.prototype.isComment = function () { + return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */; + }; + AbstractTrivia.prototype.isNewLine = function () { + return this.kind() === 5 /* NewLineTrivia */; + }; + AbstractTrivia.prototype.isSkippedToken = function () { + return this.kind() === 8 /* SkippedTokenTrivia */; + }; + return AbstractTrivia; + })(); + var SkippedTokenTrivia = (function (_super) { + __extends(SkippedTokenTrivia, _super); + function SkippedTokenTrivia(_skippedToken, _fullText) { + _super.call(this, 8 /* SkippedTokenTrivia */); + this._skippedToken = _skippedToken; + this._fullText = _fullText; + _skippedToken.parent = this; + } + SkippedTokenTrivia.prototype.clone = function () { + return new SkippedTokenTrivia(this._skippedToken.clone(), this._fullText); + }; + SkippedTokenTrivia.prototype.fullStart = function () { + return this._skippedToken.fullStart(); + }; + SkippedTokenTrivia.prototype.fullWidth = function () { + return this.fullText().length; + }; + SkippedTokenTrivia.prototype.fullText = function () { + return this._fullText; + }; + SkippedTokenTrivia.prototype.skippedToken = function () { + return this._skippedToken; + }; + return SkippedTokenTrivia; + })(AbstractTrivia); + var DeferredTrivia = (function (_super) { + __extends(DeferredTrivia, _super); + function DeferredTrivia(kind, _text, _fullStart, _fullWidth) { + _super.call(this, kind); + this._text = _text; + this._fullStart = _fullStart; + this._fullWidth = _fullWidth; + } + DeferredTrivia.prototype.clone = function () { + return new DeferredTrivia(this.kind(), this._text, this._fullStart, this._fullWidth); + }; + DeferredTrivia.prototype.fullStart = function () { + return this._fullStart; + }; + DeferredTrivia.prototype.fullWidth = function () { + return this._fullWidth; + }; + DeferredTrivia.prototype.fullText = function () { + return this._text.substr(this._fullStart, this._fullWidth); + }; + DeferredTrivia.prototype.skippedToken = function () { + throw TypeScript.Errors.invalidOperation(); + }; + return DeferredTrivia; + })(AbstractTrivia); + function deferredTrivia(kind, text, fullStart, fullWidth) { + return new DeferredTrivia(kind, text, fullStart, fullWidth); } - VariableDeclaration.prototype.kind = function () { - return 224 /* VariableDeclaration */; - }; - - VariableDeclaration.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.declarators, ast.declarators, includingPosition); - }; - return VariableDeclaration; - })(AST); - TypeScript.VariableDeclaration = VariableDeclaration; - - var VariableDeclarator = (function (_super) { - __extends(VariableDeclarator, _super); - function VariableDeclarator(propertyName, typeAnnotation, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - VariableDeclarator.prototype.kind = function () { - return 225 /* VariableDeclarator */; - }; - return VariableDeclarator; - })(AST); - TypeScript.VariableDeclarator = VariableDeclarator; - - var EqualsValueClause = (function (_super) { - __extends(EqualsValueClause, _super); - function EqualsValueClause(value) { - _super.call(this); - this.value = value; - value && (value.parent = this); + Syntax.deferredTrivia = deferredTrivia; + function skippedTokenTrivia(token, text) { + TypeScript.Debug.assert(!token.hasLeadingTrivia()); + TypeScript.Debug.assert(!token.hasTrailingTrivia()); + TypeScript.Debug.assert(token.fullWidth() > 0); + return new SkippedTokenTrivia(token, token.fullText(text)); } - EqualsValueClause.prototype.kind = function () { - return 232 /* EqualsValueClause */; - }; - return EqualsValueClause; - })(AST); - TypeScript.EqualsValueClause = EqualsValueClause; - - var PrefixUnaryExpression = (function (_super) { - __extends(PrefixUnaryExpression, _super); - function PrefixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); + Syntax.skippedTokenTrivia = skippedTokenTrivia; + function splitMultiLineCommentTriviaIntoMultipleLines(trivia) { + var result = []; + var triviaText = trivia.fullText(); + var currentIndex = 0; + for (var i = 0; i < triviaText.length; i++) { + var ch = triviaText.charCodeAt(i); + var isCarriageReturnLineFeed = false; + switch (ch) { + case 13 /* carriageReturn */: + if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) { + i++; + } + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + result.push(triviaText.substring(currentIndex, i + 1)); + currentIndex = i + 1; + continue; + } + } + result.push(triviaText.substring(currentIndex)); + return result; } - PrefixUnaryExpression.prototype.kind = function () { - return this._nodeType; - }; - - PrefixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); - }; - - PrefixUnaryExpression.prototype.isExpression = function () { - return true; - }; - return PrefixUnaryExpression; - })(AST); - TypeScript.PrefixUnaryExpression = PrefixUnaryExpression; - - var ArrayLiteralExpression = (function (_super) { - __extends(ArrayLiteralExpression, _super); - function ArrayLiteralExpression(expressions) { - _super.call(this); - this.expressions = expressions; - expressions && (expressions.parent = this); + Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var EmptyTriviaList = (function () { + function EmptyTriviaList() { + } + EmptyTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + EmptyTriviaList.prototype.isShared = function () { + return true; + }; + EmptyTriviaList.prototype.count = function () { + return 0; + }; + EmptyTriviaList.prototype.syntaxTriviaAt = function (index) { + throw TypeScript.Errors.argumentOutOfRange("index"); + }; + EmptyTriviaList.prototype.last = function () { + throw TypeScript.Errors.argumentOutOfRange("index"); + }; + EmptyTriviaList.prototype.fullWidth = function () { + return 0; + }; + EmptyTriviaList.prototype.fullText = function () { + return ""; + }; + EmptyTriviaList.prototype.hasComment = function () { + return false; + }; + EmptyTriviaList.prototype.hasNewLine = function () { + return false; + }; + EmptyTriviaList.prototype.hasSkippedToken = function () { + return false; + }; + EmptyTriviaList.prototype.toArray = function () { + return []; + }; + EmptyTriviaList.prototype.clone = function () { + return this; + }; + return EmptyTriviaList; + })(); + ; + Syntax.emptyTriviaList = new EmptyTriviaList(); + function isComment(trivia) { + return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */; } - ArrayLiteralExpression.prototype.kind = function () { - return 214 /* ArrayLiteralExpression */; - }; - - ArrayLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expressions, ast.expressions, includingPosition); - }; - - ArrayLiteralExpression.prototype.isExpression = function () { - return true; - }; - return ArrayLiteralExpression; - })(AST); - TypeScript.ArrayLiteralExpression = ArrayLiteralExpression; - - var OmittedExpression = (function (_super) { - __extends(OmittedExpression, _super); - function OmittedExpression() { - _super.apply(this, arguments); + var SingletonSyntaxTriviaList = (function () { + function SingletonSyntaxTriviaList(item) { + this.item = item.clone(); + this.item.parent = this; + } + SingletonSyntaxTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + SingletonSyntaxTriviaList.prototype.isShared = function () { + return false; + }; + SingletonSyntaxTriviaList.prototype.count = function () { + return 1; + }; + SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { + if (index !== 0) { + throw TypeScript.Errors.argumentOutOfRange("index"); + } + return this.item; + }; + SingletonSyntaxTriviaList.prototype.last = function () { + return this.item; + }; + SingletonSyntaxTriviaList.prototype.fullWidth = function () { + return this.item.fullWidth(); + }; + SingletonSyntaxTriviaList.prototype.fullText = function () { + return this.item.fullText(); + }; + SingletonSyntaxTriviaList.prototype.hasComment = function () { + return isComment(this.item); + }; + SingletonSyntaxTriviaList.prototype.hasNewLine = function () { + return this.item.kind() === 5 /* NewLineTrivia */; + }; + SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () { + return this.item.kind() === 8 /* SkippedTokenTrivia */; + }; + SingletonSyntaxTriviaList.prototype.toArray = function () { + return [this.item]; + }; + SingletonSyntaxTriviaList.prototype.clone = function () { + return new SingletonSyntaxTriviaList(this.item.clone()); + }; + return SingletonSyntaxTriviaList; + })(); + var NormalSyntaxTriviaList = (function () { + function NormalSyntaxTriviaList(trivia) { + var _this = this; + this.trivia = trivia.map(function (t) { + var cloned = t.clone(); + cloned.parent = _this; + return cloned; + }); + } + NormalSyntaxTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + NormalSyntaxTriviaList.prototype.isShared = function () { + return false; + }; + NormalSyntaxTriviaList.prototype.count = function () { + return this.trivia.length; + }; + NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { + if (index < 0 || index >= this.trivia.length) { + throw TypeScript.Errors.argumentOutOfRange("index"); + } + return this.trivia[index]; + }; + NormalSyntaxTriviaList.prototype.last = function () { + return this.trivia[this.trivia.length - 1]; + }; + NormalSyntaxTriviaList.prototype.fullWidth = function () { + return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { return t.fullWidth(); }); + }; + NormalSyntaxTriviaList.prototype.fullText = function () { + var result = []; + for (var i = 0, n = this.trivia.length; i < n; i++) { + result.push(this.trivia[i].fullText()); + } + return result.join(""); + }; + NormalSyntaxTriviaList.prototype.hasComment = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (isComment(this.trivia[i])) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.hasNewLine = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (this.trivia[i].kind() === 5 /* NewLineTrivia */) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.hasSkippedToken = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.toArray = function () { + return this.trivia.slice(0); + }; + NormalSyntaxTriviaList.prototype.clone = function () { + return new NormalSyntaxTriviaList(this.trivia.map(function (t) { return t.clone(); })); + }; + return NormalSyntaxTriviaList; + })(); + function triviaList(trivia) { + if (trivia === undefined || trivia === null || trivia.length === 0) { + return Syntax.emptyTriviaList; + } + if (trivia.length === 1) { + return new SingletonSyntaxTriviaList(trivia[0]); + } + return new NormalSyntaxTriviaList(trivia); } - OmittedExpression.prototype.kind = function () { - return 223 /* OmittedExpression */; - }; - - OmittedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); - }; - - OmittedExpression.prototype.isExpression = function () { - return true; - }; - return OmittedExpression; - })(AST); - TypeScript.OmittedExpression = OmittedExpression; - - var ParenthesizedExpression = (function (_super) { - __extends(ParenthesizedExpression, _super); - function ParenthesizedExpression(openParenTrailingComments, expression) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.expression = expression; - expression && (expression.parent = this); + Syntax.triviaList = triviaList; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxUtilities = (function () { + function SyntaxUtilities() { } - ParenthesizedExpression.prototype.kind = function () { - return 217 /* ParenthesizedExpression */; - }; - - ParenthesizedExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - ParenthesizedExpression.prototype.isExpression = function () { - return true; - }; - return ParenthesizedExpression; - })(AST); - TypeScript.ParenthesizedExpression = ParenthesizedExpression; - - var SimpleArrowFunctionExpression = (function (_super) { - __extends(SimpleArrowFunctionExpression, _super); - function SimpleArrowFunctionExpression(identifier, block, expression) { - _super.call(this); - this.identifier = identifier; - this.block = block; - this.expression = expression; - identifier && (identifier.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - SimpleArrowFunctionExpression.prototype.kind = function () { - return 219 /* SimpleArrowFunctionExpression */; - }; - - SimpleArrowFunctionExpression.prototype.isExpression = function () { - return true; + SyntaxUtilities.isAnyFunctionExpressionOrDeclaration = function (ast) { + switch (ast.kind()) { + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 222 /* FunctionExpression */: + case 129 /* FunctionDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 241 /* FunctionPropertyAssignment */: + case 137 /* ConstructorDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + return true; + } + return false; }; - return SimpleArrowFunctionExpression; - })(AST); - TypeScript.SimpleArrowFunctionExpression = SimpleArrowFunctionExpression; - - var ParenthesizedArrowFunctionExpression = (function (_super) { - __extends(ParenthesizedArrowFunctionExpression, _super); - function ParenthesizedArrowFunctionExpression(callSignature, block, expression) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - this.expression = expression; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - expression && (expression.parent = this); - } - ParenthesizedArrowFunctionExpression.prototype.kind = function () { - return 218 /* ParenthesizedArrowFunctionExpression */; + SyntaxUtilities.isLastTokenOnLine = function (token, text) { + var _nextToken = TypeScript.nextToken(token, text); + if (_nextToken === null) { + return true; + } + var lineMap = text.lineMap(); + var tokenLine = lineMap.getLineNumberFromPosition(TypeScript.end(token, text)); + var nextTokenLine = lineMap.getLineNumberFromPosition(TypeScript.start(_nextToken, text)); + return tokenLine !== nextTokenLine; }; - - ParenthesizedArrowFunctionExpression.prototype.isExpression = function () { - return true; + SyntaxUtilities.isLeftHandSizeExpression = function (element) { + if (element) { + switch (element.kind()) { + case 212 /* MemberAccessExpression */: + case 221 /* ElementAccessExpression */: + case 216 /* ObjectCreationExpression */: + case 213 /* InvocationExpression */: + case 214 /* ArrayLiteralExpression */: + case 217 /* ParenthesizedExpression */: + case 215 /* ObjectLiteralExpression */: + case 222 /* FunctionExpression */: + case 11 /* IdentifierName */: + case 12 /* RegularExpressionLiteral */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 50 /* SuperKeyword */: + return true; + } + } + return false; }; - return ParenthesizedArrowFunctionExpression; - })(AST); - TypeScript.ParenthesizedArrowFunctionExpression = ParenthesizedArrowFunctionExpression; - - var QualifiedName = (function (_super) { - __extends(QualifiedName, _super); - function QualifiedName(left, right) { - _super.call(this); - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - QualifiedName.prototype.kind = function () { - return 121 /* QualifiedName */; + SyntaxUtilities.isExpression = function (element) { + if (element) { + switch (element.kind()) { + case 11 /* IdentifierName */: + case 12 /* RegularExpressionLiteral */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 50 /* SuperKeyword */: + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + case 166 /* BitwiseNotExpression */: + case 167 /* LogicalNotExpression */: + case 168 /* PreIncrementExpression */: + case 169 /* PreDecrementExpression */: + case 170 /* DeleteExpression */: + case 171 /* TypeOfExpression */: + case 172 /* VoidExpression */: + case 173 /* CommaExpression */: + case 174 /* AssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 182 /* OrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 186 /* ConditionalExpression */: + case 187 /* LogicalOrExpression */: + case 188 /* LogicalAndExpression */: + case 189 /* BitwiseOrExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 191 /* BitwiseAndExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + case 210 /* PostIncrementExpression */: + case 211 /* PostDecrementExpression */: + case 212 /* MemberAccessExpression */: + case 213 /* InvocationExpression */: + case 214 /* ArrayLiteralExpression */: + case 215 /* ObjectLiteralExpression */: + case 216 /* ObjectCreationExpression */: + case 217 /* ParenthesizedExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + case 220 /* CastExpression */: + case 221 /* ElementAccessExpression */: + case 222 /* FunctionExpression */: + case 223 /* OmittedExpression */: + return true; + } + } + return false; }; - - QualifiedName.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); + SyntaxUtilities.isSwitchClause = function (element) { + if (element) { + switch (element.kind()) { + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + return true; + } + } + return false; }; - return QualifiedName; - })(AST); - TypeScript.QualifiedName = QualifiedName; - - var ParameterList = (function (_super) { - __extends(ParameterList, _super); - function ParameterList(openParenTrailingComments, parameters) { - _super.call(this); - this.openParenTrailingComments = openParenTrailingComments; - this.parameters = parameters; - parameters && (parameters.parent = this); - } - ParameterList.prototype.kind = function () { - return 227 /* ParameterList */; + SyntaxUtilities.isTypeMember = function (element) { + if (element) { + switch (element.kind()) { + case 143 /* ConstructSignature */: + case 145 /* MethodSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 142 /* CallSignature */: + return true; + } + } + return false; }; - return ParameterList; - })(AST); - TypeScript.ParameterList = ParameterList; - - var ConstructorType = (function (_super) { - __extends(ConstructorType, _super); - function ConstructorType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - ConstructorType.prototype.kind = function () { - return 125 /* ConstructorType */; + SyntaxUtilities.isClassElement = function (element) { + if (element) { + switch (element.kind()) { + case 137 /* ConstructorDeclaration */: + case 138 /* IndexMemberDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 135 /* MemberFunctionDeclaration */: + case 136 /* MemberVariableDeclaration */: + return true; + } + } + return false; }; - return ConstructorType; - })(AST); - TypeScript.ConstructorType = ConstructorType; - - var FunctionType = (function (_super) { - __extends(FunctionType, _super); - function FunctionType(typeParameterList, parameterList, type) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.type = type; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - type && (type.parent = this); - } - FunctionType.prototype.kind = function () { - return 123 /* FunctionType */; + SyntaxUtilities.isModuleElement = function (element) { + if (element) { + switch (element.kind()) { + case 133 /* ImportDeclaration */: + case 134 /* ExportAssignment */: + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 149 /* ExpressionStatement */: + case 157 /* ThrowStatement */: + case 150 /* ReturnStatement */: + case 151 /* SwitchStatement */: + case 152 /* BreakStatement */: + case 153 /* ContinueStatement */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 163 /* WithStatement */: + case 156 /* EmptyStatement */: + case 159 /* TryStatement */: + case 160 /* LabeledStatement */: + case 161 /* DoStatement */: + case 162 /* DebuggerStatement */: + return true; + } + } + return false; }; - return FunctionType; - })(AST); - TypeScript.FunctionType = FunctionType; - - var ObjectType = (function (_super) { - __extends(ObjectType, _super); - function ObjectType(typeMembers) { - _super.call(this); - this.typeMembers = typeMembers; - typeMembers && (typeMembers.parent = this); - } - ObjectType.prototype.kind = function () { - return 122 /* ObjectType */; + SyntaxUtilities.isStatement = function (element) { + if (element) { + switch (element.kind()) { + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 149 /* ExpressionStatement */: + case 157 /* ThrowStatement */: + case 150 /* ReturnStatement */: + case 151 /* SwitchStatement */: + case 152 /* BreakStatement */: + case 153 /* ContinueStatement */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 163 /* WithStatement */: + case 156 /* EmptyStatement */: + case 159 /* TryStatement */: + case 160 /* LabeledStatement */: + case 161 /* DoStatement */: + case 162 /* DebuggerStatement */: + return true; + } + } + return false; }; - - ObjectType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.typeMembers, ast.typeMembers, includingPosition); + SyntaxUtilities.isAngleBracket = function (positionedElement) { + var element = positionedElement; + var parent = positionedElement.parent; + if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) { + switch (parent.kind()) { + case 228 /* TypeArgumentList */: + case 229 /* TypeParameterList */: + case 220 /* CastExpression */: + return true; + } + } + return false; }; - return ObjectType; - })(AST); - TypeScript.ObjectType = ObjectType; - - var ArrayType = (function (_super) { - __extends(ArrayType, _super); - function ArrayType(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - ArrayType.prototype.kind = function () { - return 124 /* ArrayType */; + SyntaxUtilities.getToken = function (list, kind) { + for (var i = 0, n = list.length; i < n; i++) { + var token = list[i]; + if (token.kind() === kind) { + return token; + } + } + return null; }; - - ArrayType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition); + SyntaxUtilities.containsToken = function (list, kind) { + return SyntaxUtilities.getToken(list, kind) !== null; }; - return ArrayType; - })(AST); - TypeScript.ArrayType = ArrayType; - - var TypeArgumentList = (function (_super) { - __extends(TypeArgumentList, _super); - function TypeArgumentList(typeArguments) { - _super.call(this); - this.typeArguments = typeArguments; - typeArguments && (typeArguments.parent = this); - } - TypeArgumentList.prototype.kind = function () { - return 228 /* TypeArgumentList */; + SyntaxUtilities.hasExportKeyword = function (moduleElement) { + return SyntaxUtilities.getExportKeyword(moduleElement) !== null; }; - return TypeArgumentList; - })(AST); - TypeScript.TypeArgumentList = TypeArgumentList; - - var GenericType = (function (_super) { - __extends(GenericType, _super); - function GenericType(name, typeArgumentList) { - _super.call(this); - this.name = name; - this.typeArgumentList = typeArgumentList; - name && (name.parent = this); - typeArgumentList && (typeArgumentList.parent = this); - } - GenericType.prototype.kind = function () { - return 126 /* GenericType */; + SyntaxUtilities.getExportKeyword = function (moduleElement) { + switch (moduleElement.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 132 /* EnumDeclaration */: + case 128 /* InterfaceDeclaration */: + case 133 /* ImportDeclaration */: + return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */); + default: + return null; + } }; - - GenericType.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition) && structuralEquals(this.typeArgumentList, ast.typeArgumentList, includingPosition); + SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) { + if (!positionNode) { + return false; + } + var node = positionNode; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 132 /* EnumDeclaration */: + if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { + return true; + } + case 133 /* ImportDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 136 /* MemberVariableDeclaration */: + if (SyntaxUtilities.isClassElement(node) || SyntaxUtilities.isModuleElement(node)) { + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode)); + } + case 243 /* EnumElement */: + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(TypeScript.Syntax.containingNode(positionNode))); + default: + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode)); + } }; - return GenericType; - })(AST); - TypeScript.GenericType = GenericType; - - var TypeQuery = (function (_super) { - __extends(TypeQuery, _super); - function TypeQuery(name) { - _super.call(this); - this.name = name; - name && (name.parent = this); + return SyntaxUtilities; + })(); + TypeScript.SyntaxUtilities = SyntaxUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function visitNodeOrToken(visitor, element) { + if (element === null) { + return null; } - TypeQuery.prototype.kind = function () { - return 127 /* TypeQuery */; - }; - - TypeQuery.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); - }; - return TypeQuery; - })(AST); - TypeScript.TypeQuery = TypeQuery; - - var Block = (function (_super) { - __extends(Block, _super); - function Block(statements, closeBraceLeadingComments, closeBraceToken) { - _super.call(this); - this.statements = statements; - this.closeBraceLeadingComments = closeBraceLeadingComments; - this.closeBraceToken = closeBraceToken; - statements && (statements.parent = this); + if (TypeScript.isToken(element)) { + return visitor.visitToken(element); } - Block.prototype.kind = function () { - return 146 /* Block */; - }; - - Block.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); - }; - return Block; - })(AST); - TypeScript.Block = Block; - - var Parameter = (function (_super) { - __extends(Parameter, _super); - function Parameter(dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { - _super.call(this); - this.dotDotDotToken = dotDotDotToken; - this.modifiers = modifiers; - this.identifier = identifier; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - this.equalsValueClause = equalsValueClause; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - Parameter.prototype.kind = function () { - return 242 /* Parameter */; - }; - return Parameter; - })(AST); - TypeScript.Parameter = Parameter; - - var MemberAccessExpression = (function (_super) { - __extends(MemberAccessExpression, _super); - function MemberAccessExpression(expression, name) { - _super.call(this); - this.expression = expression; - this.name = name; - expression && (expression.parent = this); - name && (name.parent = this); + switch (element.kind()) { + case 120 /* SourceUnit */: + return visitor.visitSourceUnit(element); + case 121 /* QualifiedName */: + return visitor.visitQualifiedName(element); + case 122 /* ObjectType */: + return visitor.visitObjectType(element); + case 123 /* FunctionType */: + return visitor.visitFunctionType(element); + case 124 /* ArrayType */: + return visitor.visitArrayType(element); + case 125 /* ConstructorType */: + return visitor.visitConstructorType(element); + case 126 /* GenericType */: + return visitor.visitGenericType(element); + case 127 /* TypeQuery */: + return visitor.visitTypeQuery(element); + case 128 /* InterfaceDeclaration */: + return visitor.visitInterfaceDeclaration(element); + case 129 /* FunctionDeclaration */: + return visitor.visitFunctionDeclaration(element); + case 130 /* ModuleDeclaration */: + return visitor.visitModuleDeclaration(element); + case 131 /* ClassDeclaration */: + return visitor.visitClassDeclaration(element); + case 132 /* EnumDeclaration */: + return visitor.visitEnumDeclaration(element); + case 133 /* ImportDeclaration */: + return visitor.visitImportDeclaration(element); + case 134 /* ExportAssignment */: + return visitor.visitExportAssignment(element); + case 135 /* MemberFunctionDeclaration */: + return visitor.visitMemberFunctionDeclaration(element); + case 136 /* MemberVariableDeclaration */: + return visitor.visitMemberVariableDeclaration(element); + case 137 /* ConstructorDeclaration */: + return visitor.visitConstructorDeclaration(element); + case 138 /* IndexMemberDeclaration */: + return visitor.visitIndexMemberDeclaration(element); + case 139 /* GetAccessor */: + return visitor.visitGetAccessor(element); + case 140 /* SetAccessor */: + return visitor.visitSetAccessor(element); + case 141 /* PropertySignature */: + return visitor.visitPropertySignature(element); + case 142 /* CallSignature */: + return visitor.visitCallSignature(element); + case 143 /* ConstructSignature */: + return visitor.visitConstructSignature(element); + case 144 /* IndexSignature */: + return visitor.visitIndexSignature(element); + case 145 /* MethodSignature */: + return visitor.visitMethodSignature(element); + case 146 /* Block */: + return visitor.visitBlock(element); + case 147 /* IfStatement */: + return visitor.visitIfStatement(element); + case 148 /* VariableStatement */: + return visitor.visitVariableStatement(element); + case 149 /* ExpressionStatement */: + return visitor.visitExpressionStatement(element); + case 150 /* ReturnStatement */: + return visitor.visitReturnStatement(element); + case 151 /* SwitchStatement */: + return visitor.visitSwitchStatement(element); + case 152 /* BreakStatement */: + return visitor.visitBreakStatement(element); + case 153 /* ContinueStatement */: + return visitor.visitContinueStatement(element); + case 154 /* ForStatement */: + return visitor.visitForStatement(element); + case 155 /* ForInStatement */: + return visitor.visitForInStatement(element); + case 156 /* EmptyStatement */: + return visitor.visitEmptyStatement(element); + case 157 /* ThrowStatement */: + return visitor.visitThrowStatement(element); + case 158 /* WhileStatement */: + return visitor.visitWhileStatement(element); + case 159 /* TryStatement */: + return visitor.visitTryStatement(element); + case 160 /* LabeledStatement */: + return visitor.visitLabeledStatement(element); + case 161 /* DoStatement */: + return visitor.visitDoStatement(element); + case 162 /* DebuggerStatement */: + return visitor.visitDebuggerStatement(element); + case 163 /* WithStatement */: + return visitor.visitWithStatement(element); + case 168 /* PreIncrementExpression */: + case 169 /* PreDecrementExpression */: + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + case 166 /* BitwiseNotExpression */: + case 167 /* LogicalNotExpression */: + return visitor.visitPrefixUnaryExpression(element); + case 170 /* DeleteExpression */: + return visitor.visitDeleteExpression(element); + case 171 /* TypeOfExpression */: + return visitor.visitTypeOfExpression(element); + case 172 /* VoidExpression */: + return visitor.visitVoidExpression(element); + case 186 /* ConditionalExpression */: + return visitor.visitConditionalExpression(element); + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 191 /* BitwiseAndExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 189 /* BitwiseOrExpression */: + case 188 /* LogicalAndExpression */: + case 187 /* LogicalOrExpression */: + case 182 /* OrAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 174 /* AssignmentExpression */: + case 173 /* CommaExpression */: + return visitor.visitBinaryExpression(element); + case 210 /* PostIncrementExpression */: + case 211 /* PostDecrementExpression */: + return visitor.visitPostfixUnaryExpression(element); + case 212 /* MemberAccessExpression */: + return visitor.visitMemberAccessExpression(element); + case 213 /* InvocationExpression */: + return visitor.visitInvocationExpression(element); + case 214 /* ArrayLiteralExpression */: + return visitor.visitArrayLiteralExpression(element); + case 215 /* ObjectLiteralExpression */: + return visitor.visitObjectLiteralExpression(element); + case 216 /* ObjectCreationExpression */: + return visitor.visitObjectCreationExpression(element); + case 217 /* ParenthesizedExpression */: + return visitor.visitParenthesizedExpression(element); + case 218 /* ParenthesizedArrowFunctionExpression */: + return visitor.visitParenthesizedArrowFunctionExpression(element); + case 219 /* SimpleArrowFunctionExpression */: + return visitor.visitSimpleArrowFunctionExpression(element); + case 220 /* CastExpression */: + return visitor.visitCastExpression(element); + case 221 /* ElementAccessExpression */: + return visitor.visitElementAccessExpression(element); + case 222 /* FunctionExpression */: + return visitor.visitFunctionExpression(element); + case 223 /* OmittedExpression */: + return visitor.visitOmittedExpression(element); + case 224 /* VariableDeclaration */: + return visitor.visitVariableDeclaration(element); + case 225 /* VariableDeclarator */: + return visitor.visitVariableDeclarator(element); + case 226 /* ArgumentList */: + return visitor.visitArgumentList(element); + case 227 /* ParameterList */: + return visitor.visitParameterList(element); + case 228 /* TypeArgumentList */: + return visitor.visitTypeArgumentList(element); + case 229 /* TypeParameterList */: + return visitor.visitTypeParameterList(element); + case 230 /* ExtendsHeritageClause */: + case 231 /* ImplementsHeritageClause */: + return visitor.visitHeritageClause(element); + case 232 /* EqualsValueClause */: + return visitor.visitEqualsValueClause(element); + case 233 /* CaseSwitchClause */: + return visitor.visitCaseSwitchClause(element); + case 234 /* DefaultSwitchClause */: + return visitor.visitDefaultSwitchClause(element); + case 235 /* ElseClause */: + return visitor.visitElseClause(element); + case 236 /* CatchClause */: + return visitor.visitCatchClause(element); + case 237 /* FinallyClause */: + return visitor.visitFinallyClause(element); + case 238 /* TypeParameter */: + return visitor.visitTypeParameter(element); + case 239 /* Constraint */: + return visitor.visitConstraint(element); + case 240 /* SimplePropertyAssignment */: + return visitor.visitSimplePropertyAssignment(element); + case 241 /* FunctionPropertyAssignment */: + return visitor.visitFunctionPropertyAssignment(element); + case 242 /* Parameter */: + return visitor.visitParameter(element); + case 243 /* EnumElement */: + return visitor.visitEnumElement(element); + case 244 /* TypeAnnotation */: + return visitor.visitTypeAnnotation(element); + case 245 /* ExternalModuleReference */: + return visitor.visitExternalModuleReference(element); + case 246 /* ModuleNameModuleReference */: + return visitor.visitModuleNameModuleReference(element); + } + throw TypeScript.Errors.invalidOperation(); + } + TypeScript.visitNodeOrToken = visitNodeOrToken; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxWalker = (function () { + function SyntaxWalker() { } - MemberAccessExpression.prototype.kind = function () { - return 212 /* MemberAccessExpression */; - }; - - MemberAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.name, ast.name, includingPosition); + SyntaxWalker.prototype.visitToken = function (token) { }; - - MemberAccessExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitNode = function (node) { + TypeScript.visitNodeOrToken(this, node); }; - return MemberAccessExpression; - })(AST); - TypeScript.MemberAccessExpression = MemberAccessExpression; - - var PostfixUnaryExpression = (function (_super) { - __extends(PostfixUnaryExpression, _super); - function PostfixUnaryExpression(_nodeType, operand) { - _super.call(this); - this._nodeType = _nodeType; - this.operand = operand; - operand && (operand.parent = this); - } - PostfixUnaryExpression.prototype.kind = function () { - return this._nodeType; + SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) { + if (TypeScript.isToken(nodeOrToken)) { + this.visitToken(nodeOrToken); + } + else { + this.visitNode(nodeOrToken); + } }; - - PostfixUnaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.operand, ast.operand, includingPosition); + SyntaxWalker.prototype.visitOptionalToken = function (token) { + if (token === null) { + return; + } + this.visitToken(token); }; - - PostfixUnaryExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitOptionalNode = function (node) { + if (node === null) { + return; + } + this.visitNode(node); }; - return PostfixUnaryExpression; - })(AST); - TypeScript.PostfixUnaryExpression = PostfixUnaryExpression; - - var ElementAccessExpression = (function (_super) { - __extends(ElementAccessExpression, _super); - function ElementAccessExpression(expression, argumentExpression) { - _super.call(this); - this.expression = expression; - this.argumentExpression = argumentExpression; - expression && (expression.parent = this); - argumentExpression && (argumentExpression.parent = this); - } - ElementAccessExpression.prototype.kind = function () { - return 221 /* ElementAccessExpression */; + SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) { + if (nodeOrToken === null) { + return; + } + this.visitNodeOrToken(nodeOrToken); }; - - ElementAccessExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentExpression, ast.argumentExpression, includingPosition); + SyntaxWalker.prototype.visitList = function (list) { + for (var i = 0, n = list.length; i < n; i++) { + this.visitNodeOrToken(list[i]); + } }; - - ElementAccessExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitSeparatedList = function (list) { + for (var i = 0, n = TypeScript.childCount(list); i < n; i++) { + var item = TypeScript.childAt(list, i); + this.visitNodeOrToken(item); + } }; - return ElementAccessExpression; - })(AST); - TypeScript.ElementAccessExpression = ElementAccessExpression; - - var InvocationExpression = (function (_super) { - __extends(InvocationExpression, _super); - function InvocationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - InvocationExpression.prototype.kind = function () { - return 213 /* InvocationExpression */; + SyntaxWalker.prototype.visitSourceUnit = function (node) { + this.visitList(node.moduleElements); + this.visitToken(node.endOfFileToken); }; - - InvocationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); + SyntaxWalker.prototype.visitQualifiedName = function (node) { + this.visitNodeOrToken(node.left); + this.visitToken(node.dotToken); + this.visitToken(node.right); }; - - InvocationExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitObjectType = function (node) { + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.typeMembers); + this.visitToken(node.closeBraceToken); }; - return InvocationExpression; - })(AST); - TypeScript.InvocationExpression = InvocationExpression; - - var ArgumentList = (function (_super) { - __extends(ArgumentList, _super); - function ArgumentList(typeArgumentList, _arguments, closeParenToken) { - _super.call(this); - this.typeArgumentList = typeArgumentList; - this.closeParenToken = closeParenToken; - this.arguments = _arguments; - - typeArgumentList && (typeArgumentList.parent = this); - _arguments && (_arguments.parent = this); - } - ArgumentList.prototype.kind = function () { - return 226 /* ArgumentList */; + SyntaxWalker.prototype.visitFunctionType = function (node) { + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitToken(node.equalsGreaterThanToken); + this.visitNodeOrToken(node.type); }; - return ArgumentList; - })(AST); - TypeScript.ArgumentList = ArgumentList; - - var BinaryExpression = (function (_super) { - __extends(BinaryExpression, _super); - function BinaryExpression(_nodeType, left, right) { - _super.call(this); - this._nodeType = _nodeType; - this.left = left; - this.right = right; - left && (left.parent = this); - right && (right.parent = this); - } - BinaryExpression.prototype.kind = function () { - return this._nodeType; + SyntaxWalker.prototype.visitArrayType = function (node) { + this.visitNodeOrToken(node.type); + this.visitToken(node.openBracketToken); + this.visitToken(node.closeBracketToken); }; - - BinaryExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.left, ast.left, includingPosition) && structuralEquals(this.right, ast.right, includingPosition); + SyntaxWalker.prototype.visitConstructorType = function (node) { + this.visitToken(node.newKeyword); + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitToken(node.equalsGreaterThanToken); + this.visitNodeOrToken(node.type); }; - - BinaryExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitGenericType = function (node) { + this.visitNodeOrToken(node.name); + this.visitNode(node.typeArgumentList); }; - return BinaryExpression; - })(AST); - TypeScript.BinaryExpression = BinaryExpression; - - var ConditionalExpression = (function (_super) { - __extends(ConditionalExpression, _super); - function ConditionalExpression(condition, whenTrue, whenFalse) { - _super.call(this); - this.condition = condition; - this.whenTrue = whenTrue; - this.whenFalse = whenFalse; - condition && (condition.parent = this); - whenTrue && (whenTrue.parent = this); - whenFalse && (whenFalse.parent = this); - } - ConditionalExpression.prototype.kind = function () { - return 186 /* ConditionalExpression */; + SyntaxWalker.prototype.visitTypeQuery = function (node) { + this.visitToken(node.typeOfKeyword); + this.visitNodeOrToken(node.name); }; - - ConditionalExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.whenTrue, ast.whenTrue, includingPosition) && structuralEquals(this.whenFalse, ast.whenFalse, includingPosition); + SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.interfaceKeyword); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeParameterList); + this.visitList(node.heritageClauses); + this.visitNode(node.body); }; - - ConditionalExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitFunctionDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.functionKeyword); + this.visitToken(node.identifier); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); }; - return ConditionalExpression; - })(AST); - TypeScript.ConditionalExpression = ConditionalExpression; - - var ConstructSignature = (function (_super) { - __extends(ConstructSignature, _super); - function ConstructSignature(callSignature) { - _super.call(this); - this.callSignature = callSignature; - callSignature && (callSignature.parent = this); - } - ConstructSignature.prototype.kind = function () { - return 143 /* ConstructSignature */; + SyntaxWalker.prototype.visitModuleDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.moduleKeyword); + this.visitOptionalNodeOrToken(node.name); + this.visitOptionalToken(node.stringLiteral); + this.visitToken(node.openBraceToken); + this.visitList(node.moduleElements); + this.visitToken(node.closeBraceToken); }; - return ConstructSignature; - })(AST); - TypeScript.ConstructSignature = ConstructSignature; - - var MethodSignature = (function (_super) { - __extends(MethodSignature, _super); - function MethodSignature(propertyName, questionToken, callSignature) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.callSignature = callSignature; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - } - MethodSignature.prototype.kind = function () { - return 145 /* MethodSignature */; + SyntaxWalker.prototype.visitClassDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.classKeyword); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeParameterList); + this.visitList(node.heritageClauses); + this.visitToken(node.openBraceToken); + this.visitList(node.classElements); + this.visitToken(node.closeBraceToken); }; - return MethodSignature; - })(AST); - TypeScript.MethodSignature = MethodSignature; - - var IndexSignature = (function (_super) { - __extends(IndexSignature, _super); - function IndexSignature(parameter, typeAnnotation) { - _super.call(this); - this.parameter = parameter; - this.typeAnnotation = typeAnnotation; - parameter && (parameter.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - IndexSignature.prototype.kind = function () { - return 144 /* IndexSignature */; + SyntaxWalker.prototype.visitEnumDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.enumKeyword); + this.visitToken(node.identifier); + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.enumElements); + this.visitToken(node.closeBraceToken); }; - return IndexSignature; - })(AST); - TypeScript.IndexSignature = IndexSignature; - - var PropertySignature = (function (_super) { - __extends(PropertySignature, _super); - function PropertySignature(propertyName, questionToken, typeAnnotation) { - _super.call(this); - this.propertyName = propertyName; - this.questionToken = questionToken; - this.typeAnnotation = typeAnnotation; - propertyName && (propertyName.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - PropertySignature.prototype.kind = function () { - return 141 /* PropertySignature */; + SyntaxWalker.prototype.visitImportDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.importKeyword); + this.visitToken(node.identifier); + this.visitToken(node.equalsToken); + this.visitNodeOrToken(node.moduleReference); + this.visitOptionalToken(node.semicolonToken); }; - return PropertySignature; - })(AST); - TypeScript.PropertySignature = PropertySignature; - - var CallSignature = (function (_super) { - __extends(CallSignature, _super); - function CallSignature(typeParameterList, parameterList, typeAnnotation) { - _super.call(this); - this.typeParameterList = typeParameterList; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - typeParameterList && (typeParameterList.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - } - CallSignature.prototype.kind = function () { - return 142 /* CallSignature */; + SyntaxWalker.prototype.visitExportAssignment = function (node) { + this.visitToken(node.exportKeyword); + this.visitToken(node.equalsToken); + this.visitToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); }; - return CallSignature; - })(AST); - TypeScript.CallSignature = CallSignature; - - var TypeParameter = (function (_super) { - __extends(TypeParameter, _super); - function TypeParameter(identifier, constraint) { - _super.call(this); - this.identifier = identifier; - this.constraint = constraint; - identifier && (identifier.parent = this); - constraint && (constraint.parent = this); - } - TypeParameter.prototype.kind = function () { - return 238 /* TypeParameter */; + SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); }; - - TypeParameter.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.constraint, ast.constraint, includingPosition); + SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.variableDeclarator); + this.visitOptionalToken(node.semicolonToken); }; - return TypeParameter; - })(AST); - TypeScript.TypeParameter = TypeParameter; - - var Constraint = (function (_super) { - __extends(Constraint, _super); - function Constraint(type) { - _super.call(this); - this.type = type; - type && (type.parent = this); - } - Constraint.prototype.kind = function () { - return 239 /* Constraint */; + SyntaxWalker.prototype.visitConstructorDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.constructorKeyword); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); }; - return Constraint; - })(AST); - TypeScript.Constraint = Constraint; - - var ElseClause = (function (_super) { - __extends(ElseClause, _super); - function ElseClause(statement) { - _super.call(this); - this.statement = statement; - statement && (statement.parent = this); - } - ElseClause.prototype.kind = function () { - return 235 /* ElseClause */; + SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.indexSignature); + this.visitOptionalToken(node.semicolonToken); }; - - ElseClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitGetAccessor = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.getKeyword); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); }; - return ElseClause; - })(AST); - TypeScript.ElseClause = ElseClause; - - var IfStatement = (function (_super) { - __extends(IfStatement, _super); - function IfStatement(condition, statement, elseClause) { - _super.call(this); - this.condition = condition; - this.statement = statement; - this.elseClause = elseClause; - condition && (condition.parent = this); - statement && (statement.parent = this); - elseClause && (elseClause.parent = this); - } - IfStatement.prototype.kind = function () { - return 147 /* IfStatement */; + SyntaxWalker.prototype.visitSetAccessor = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.setKeyword); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); }; - - IfStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.elseClause, ast.elseClause, includingPosition); + SyntaxWalker.prototype.visitPropertySignature = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalToken(node.questionToken); + this.visitOptionalNode(node.typeAnnotation); }; - return IfStatement; - })(AST); - TypeScript.IfStatement = IfStatement; - - var ExpressionStatement = (function (_super) { - __extends(ExpressionStatement, _super); - function ExpressionStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ExpressionStatement.prototype.kind = function () { - return 149 /* ExpressionStatement */; + SyntaxWalker.prototype.visitCallSignature = function (node) { + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitOptionalNode(node.typeAnnotation); }; - - ExpressionStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitConstructSignature = function (node) { + this.visitToken(node.newKeyword); + this.visitNode(node.callSignature); }; - return ExpressionStatement; - })(AST); - TypeScript.ExpressionStatement = ExpressionStatement; - - var ConstructorDeclaration = (function (_super) { - __extends(ConstructorDeclaration, _super); - function ConstructorDeclaration(callSignature, block) { - _super.call(this); - this.callSignature = callSignature; - this.block = block; - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - ConstructorDeclaration.prototype.kind = function () { - return 137 /* ConstructorDeclaration */; + SyntaxWalker.prototype.visitIndexSignature = function (node) { + this.visitToken(node.openBracketToken); + this.visitSeparatedList(node.parameters); + this.visitToken(node.closeBracketToken); + this.visitOptionalNode(node.typeAnnotation); }; - return ConstructorDeclaration; - })(AST); - TypeScript.ConstructorDeclaration = ConstructorDeclaration; - - var MemberFunctionDeclaration = (function (_super) { - __extends(MemberFunctionDeclaration, _super); - function MemberFunctionDeclaration(modifiers, propertyName, callSignature, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - MemberFunctionDeclaration.prototype.kind = function () { - return 135 /* MemberFunctionDeclaration */; + SyntaxWalker.prototype.visitMethodSignature = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalToken(node.questionToken); + this.visitNode(node.callSignature); }; - return MemberFunctionDeclaration; - })(AST); - TypeScript.MemberFunctionDeclaration = MemberFunctionDeclaration; - - var GetAccessor = (function (_super) { - __extends(GetAccessor, _super); - function GetAccessor(modifiers, propertyName, parameterList, typeAnnotation, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.typeAnnotation = typeAnnotation; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - GetAccessor.prototype.kind = function () { - return 139 /* GetAccessor */; + SyntaxWalker.prototype.visitBlock = function (node) { + this.visitToken(node.openBraceToken); + this.visitList(node.statements); + this.visitToken(node.closeBraceToken); }; - return GetAccessor; - })(AST); - TypeScript.GetAccessor = GetAccessor; - - var SetAccessor = (function (_super) { - __extends(SetAccessor, _super); - function SetAccessor(modifiers, propertyName, parameterList, block) { - _super.call(this); - this.modifiers = modifiers; - this.propertyName = propertyName; - this.parameterList = parameterList; - this.block = block; - propertyName && (propertyName.parent = this); - parameterList && (parameterList.parent = this); - block && (block.parent = this); - } - SetAccessor.prototype.kind = function () { - return 140 /* SetAccessor */; + SyntaxWalker.prototype.visitIfStatement = function (node) { + this.visitToken(node.ifKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + this.visitOptionalNode(node.elseClause); }; - return SetAccessor; - })(AST); - TypeScript.SetAccessor = SetAccessor; - - var MemberVariableDeclaration = (function (_super) { - __extends(MemberVariableDeclaration, _super); - function MemberVariableDeclaration(modifiers, variableDeclarator) { - _super.call(this); - this.modifiers = modifiers; - this.variableDeclarator = variableDeclarator; - variableDeclarator && (variableDeclarator.parent = this); - } - MemberVariableDeclaration.prototype.kind = function () { - return 136 /* MemberVariableDeclaration */; + SyntaxWalker.prototype.visitVariableStatement = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.variableDeclaration); + this.visitOptionalToken(node.semicolonToken); }; - return MemberVariableDeclaration; - })(AST); - TypeScript.MemberVariableDeclaration = MemberVariableDeclaration; - - var IndexMemberDeclaration = (function (_super) { - __extends(IndexMemberDeclaration, _super); - function IndexMemberDeclaration(indexSignature) { - _super.call(this); - this.indexSignature = indexSignature; - indexSignature && (indexSignature.parent = this); - } - IndexMemberDeclaration.prototype.kind = function () { - return 138 /* IndexMemberDeclaration */; + SyntaxWalker.prototype.visitExpressionStatement = function (node) { + this.visitNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); }; - return IndexMemberDeclaration; - })(AST); - TypeScript.IndexMemberDeclaration = IndexMemberDeclaration; - - var ThrowStatement = (function (_super) { - __extends(ThrowStatement, _super); - function ThrowStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ThrowStatement.prototype.kind = function () { - return 157 /* ThrowStatement */; + SyntaxWalker.prototype.visitReturnStatement = function (node) { + this.visitToken(node.returnKeyword); + this.visitOptionalNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); }; - - ThrowStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitSwitchStatement = function (node) { + this.visitToken(node.switchKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); + this.visitToken(node.openBraceToken); + this.visitList(node.switchClauses); + this.visitToken(node.closeBraceToken); }; - return ThrowStatement; - })(AST); - TypeScript.ThrowStatement = ThrowStatement; - - var ReturnStatement = (function (_super) { - __extends(ReturnStatement, _super); - function ReturnStatement(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - ReturnStatement.prototype.kind = function () { - return 150 /* ReturnStatement */; + SyntaxWalker.prototype.visitBreakStatement = function (node) { + this.visitToken(node.breakKeyword); + this.visitOptionalToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); }; - - ReturnStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitContinueStatement = function (node) { + this.visitToken(node.continueKeyword); + this.visitOptionalToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); }; - return ReturnStatement; - })(AST); - TypeScript.ReturnStatement = ReturnStatement; - - var ObjectCreationExpression = (function (_super) { - __extends(ObjectCreationExpression, _super); - function ObjectCreationExpression(expression, argumentList) { - _super.call(this); - this.expression = expression; - this.argumentList = argumentList; - expression && (expression.parent = this); - argumentList && (argumentList.parent = this); - } - ObjectCreationExpression.prototype.kind = function () { - return 216 /* ObjectCreationExpression */; + SyntaxWalker.prototype.visitForStatement = function (node) { + this.visitToken(node.forKeyword); + this.visitToken(node.openParenToken); + this.visitOptionalNode(node.variableDeclaration); + this.visitOptionalNodeOrToken(node.initializer); + this.visitToken(node.firstSemicolonToken); + this.visitOptionalNodeOrToken(node.condition); + this.visitToken(node.secondSemicolonToken); + this.visitOptionalNodeOrToken(node.incrementor); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); }; - - ObjectCreationExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.argumentList, ast.argumentList, includingPosition); + SyntaxWalker.prototype.visitForInStatement = function (node) { + this.visitToken(node.forKeyword); + this.visitToken(node.openParenToken); + this.visitOptionalNode(node.variableDeclaration); + this.visitOptionalNodeOrToken(node.left); + this.visitToken(node.inKeyword); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); }; - - ObjectCreationExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitEmptyStatement = function (node) { + this.visitToken(node.semicolonToken); }; - return ObjectCreationExpression; - })(AST); - TypeScript.ObjectCreationExpression = ObjectCreationExpression; - - var SwitchStatement = (function (_super) { - __extends(SwitchStatement, _super); - function SwitchStatement(expression, closeParenToken, switchClauses) { - _super.call(this); - this.expression = expression; - this.closeParenToken = closeParenToken; - this.switchClauses = switchClauses; - expression && (expression.parent = this); - switchClauses && (switchClauses.parent = this); - } - SwitchStatement.prototype.kind = function () { - return 151 /* SwitchStatement */; + SyntaxWalker.prototype.visitThrowStatement = function (node) { + this.visitToken(node.throwKeyword); + this.visitNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); }; - - SwitchStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.switchClauses, ast.switchClauses, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitWhileStatement = function (node) { + this.visitToken(node.whileKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); }; - return SwitchStatement; - })(AST); - TypeScript.SwitchStatement = SwitchStatement; - - var CaseSwitchClause = (function (_super) { - __extends(CaseSwitchClause, _super); - function CaseSwitchClause(expression, statements) { - _super.call(this); - this.expression = expression; - this.statements = statements; - expression && (expression.parent = this); - statements && (statements.parent = this); - } - CaseSwitchClause.prototype.kind = function () { - return 233 /* CaseSwitchClause */; + SyntaxWalker.prototype.visitTryStatement = function (node) { + this.visitToken(node.tryKeyword); + this.visitNode(node.block); + this.visitOptionalNode(node.catchClause); + this.visitOptionalNode(node.finallyClause); }; - - CaseSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); + SyntaxWalker.prototype.visitLabeledStatement = function (node) { + this.visitToken(node.identifier); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.statement); }; - return CaseSwitchClause; - })(AST); - TypeScript.CaseSwitchClause = CaseSwitchClause; - - var DefaultSwitchClause = (function (_super) { - __extends(DefaultSwitchClause, _super); - function DefaultSwitchClause(statements) { - _super.call(this); - this.statements = statements; - statements && (statements.parent = this); - } - DefaultSwitchClause.prototype.kind = function () { - return 234 /* DefaultSwitchClause */; + SyntaxWalker.prototype.visitDoStatement = function (node) { + this.visitToken(node.doKeyword); + this.visitNodeOrToken(node.statement); + this.visitToken(node.whileKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitOptionalToken(node.semicolonToken); }; - - DefaultSwitchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statements, ast.statements, includingPosition); + SyntaxWalker.prototype.visitDebuggerStatement = function (node) { + this.visitToken(node.debuggerKeyword); + this.visitOptionalToken(node.semicolonToken); }; - return DefaultSwitchClause; - })(AST); - TypeScript.DefaultSwitchClause = DefaultSwitchClause; - - var BreakStatement = (function (_super) { - __extends(BreakStatement, _super); - function BreakStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - BreakStatement.prototype.kind = function () { - return 152 /* BreakStatement */; + SyntaxWalker.prototype.visitWithStatement = function (node) { + this.visitToken(node.withKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); }; - - BreakStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); + SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) { + this.visitToken(node.operatorToken); + this.visitNodeOrToken(node.operand); }; - return BreakStatement; - })(AST); - TypeScript.BreakStatement = BreakStatement; - - var ContinueStatement = (function (_super) { - __extends(ContinueStatement, _super); - function ContinueStatement(identifier) { - _super.call(this); - this.identifier = identifier; - } - ContinueStatement.prototype.kind = function () { - return 153 /* ContinueStatement */; + SyntaxWalker.prototype.visitDeleteExpression = function (node) { + this.visitToken(node.deleteKeyword); + this.visitNodeOrToken(node.expression); }; - - ContinueStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); + SyntaxWalker.prototype.visitTypeOfExpression = function (node) { + this.visitToken(node.typeOfKeyword); + this.visitNodeOrToken(node.expression); }; - return ContinueStatement; - })(AST); - TypeScript.ContinueStatement = ContinueStatement; - - var ForStatement = (function (_super) { - __extends(ForStatement, _super); - function ForStatement(variableDeclaration, initializer, condition, incrementor, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.initializer = initializer; - this.condition = condition; - this.incrementor = incrementor; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - initializer && (initializer.parent = this); - condition && (condition.parent = this); - incrementor && (incrementor.parent = this); - statement && (statement.parent = this); - } - ForStatement.prototype.kind = function () { - return 154 /* ForStatement */; + SyntaxWalker.prototype.visitVoidExpression = function (node) { + this.visitToken(node.voidKeyword); + this.visitNodeOrToken(node.expression); }; - - ForStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.initializer, ast.initializer, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.incrementor, ast.incrementor, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitConditionalExpression = function (node) { + this.visitNodeOrToken(node.condition); + this.visitToken(node.questionToken); + this.visitNodeOrToken(node.whenTrue); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.whenFalse); }; - return ForStatement; - })(AST); - TypeScript.ForStatement = ForStatement; - - var ForInStatement = (function (_super) { - __extends(ForInStatement, _super); - function ForInStatement(variableDeclaration, left, expression, statement) { - _super.call(this); - this.variableDeclaration = variableDeclaration; - this.left = left; - this.expression = expression; - this.statement = statement; - variableDeclaration && (variableDeclaration.parent = this); - left && (left.parent = this); - expression && (expression.parent = this); - statement && (statement.parent = this); - } - ForInStatement.prototype.kind = function () { - return 155 /* ForInStatement */; + SyntaxWalker.prototype.visitBinaryExpression = function (node) { + this.visitNodeOrToken(node.left); + this.visitToken(node.operatorToken); + this.visitNodeOrToken(node.right); }; - - ForInStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.variableDeclaration, ast.variableDeclaration, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) { + this.visitNodeOrToken(node.operand); + this.visitToken(node.operatorToken); }; - return ForInStatement; - })(AST); - TypeScript.ForInStatement = ForInStatement; - - var WhileStatement = (function (_super) { - __extends(WhileStatement, _super); - function WhileStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WhileStatement.prototype.kind = function () { - return 158 /* WhileStatement */; + SyntaxWalker.prototype.visitMemberAccessExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitToken(node.dotToken); + this.visitToken(node.name); }; - - WhileStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitInvocationExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitNode(node.argumentList); }; - return WhileStatement; - })(AST); - TypeScript.WhileStatement = WhileStatement; - - var WithStatement = (function (_super) { - __extends(WithStatement, _super); - function WithStatement(condition, statement) { - _super.call(this); - this.condition = condition; - this.statement = statement; - condition && (condition.parent = this); - statement && (statement.parent = this); - } - WithStatement.prototype.kind = function () { - return 163 /* WithStatement */; + SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) { + this.visitToken(node.openBracketToken); + this.visitSeparatedList(node.expressions); + this.visitToken(node.closeBracketToken); }; - - WithStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) { + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.propertyAssignments); + this.visitToken(node.closeBraceToken); }; - return WithStatement; - })(AST); - TypeScript.WithStatement = WithStatement; - - var EnumDeclaration = (function (_super) { - __extends(EnumDeclaration, _super); - function EnumDeclaration(modifiers, identifier, enumElements) { - _super.call(this); - this.modifiers = modifiers; - this.identifier = identifier; - this.enumElements = enumElements; - identifier && (identifier.parent = this); - enumElements && (enumElements.parent = this); - } - EnumDeclaration.prototype.kind = function () { - return 132 /* EnumDeclaration */; + SyntaxWalker.prototype.visitObjectCreationExpression = function (node) { + this.visitToken(node.newKeyword); + this.visitNodeOrToken(node.expression); + this.visitOptionalNode(node.argumentList); }; - return EnumDeclaration; - })(AST); - TypeScript.EnumDeclaration = EnumDeclaration; - - var EnumElement = (function (_super) { - __extends(EnumElement, _super); - function EnumElement(propertyName, equalsValueClause) { - _super.call(this); - this.propertyName = propertyName; - this.equalsValueClause = equalsValueClause; - propertyName && (propertyName.parent = this); - equalsValueClause && (equalsValueClause.parent = this); - } - EnumElement.prototype.kind = function () { - return 243 /* EnumElement */; + SyntaxWalker.prototype.visitParenthesizedExpression = function (node) { + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); }; - return EnumElement; - })(AST); - TypeScript.EnumElement = EnumElement; - - var CastExpression = (function (_super) { - __extends(CastExpression, _super); - function CastExpression(type, expression) { - _super.call(this); - this.type = type; - this.expression = expression; - type && (type.parent = this); - expression && (expression.parent = this); - } - CastExpression.prototype.kind = function () { - return 220 /* CastExpression */; + SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) { + this.visitNode(node.callSignature); + this.visitToken(node.equalsGreaterThanToken); + this.visitOptionalNode(node.block); + this.visitOptionalNodeOrToken(node.expression); }; - - CastExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.type, ast.type, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) { + this.visitNode(node.parameter); + this.visitToken(node.equalsGreaterThanToken); + this.visitOptionalNode(node.block); + this.visitOptionalNodeOrToken(node.expression); }; - - CastExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitCastExpression = function (node) { + this.visitToken(node.lessThanToken); + this.visitNodeOrToken(node.type); + this.visitToken(node.greaterThanToken); + this.visitNodeOrToken(node.expression); }; - return CastExpression; - })(AST); - TypeScript.CastExpression = CastExpression; - - var ObjectLiteralExpression = (function (_super) { - __extends(ObjectLiteralExpression, _super); - function ObjectLiteralExpression(propertyAssignments) { - _super.call(this); - this.propertyAssignments = propertyAssignments; - propertyAssignments && (propertyAssignments.parent = this); - } - ObjectLiteralExpression.prototype.kind = function () { - return 215 /* ObjectLiteralExpression */; + SyntaxWalker.prototype.visitElementAccessExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitToken(node.openBracketToken); + this.visitNodeOrToken(node.argumentExpression); + this.visitToken(node.closeBracketToken); }; - - ObjectLiteralExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.propertyAssignments, ast.propertyAssignments, includingPosition); + SyntaxWalker.prototype.visitFunctionExpression = function (node) { + this.visitToken(node.functionKeyword); + this.visitOptionalToken(node.identifier); + this.visitNode(node.callSignature); + this.visitNode(node.block); }; - - ObjectLiteralExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitOmittedExpression = function (node) { }; - return ObjectLiteralExpression; - })(AST); - TypeScript.ObjectLiteralExpression = ObjectLiteralExpression; - - var SimplePropertyAssignment = (function (_super) { - __extends(SimplePropertyAssignment, _super); - function SimplePropertyAssignment(propertyName, expression) { - _super.call(this); - this.propertyName = propertyName; - this.expression = expression; - propertyName && (propertyName.parent = this); - expression && (expression.parent = this); - } - SimplePropertyAssignment.prototype.kind = function () { - return 240 /* SimplePropertyAssignment */; + SyntaxWalker.prototype.visitVariableDeclaration = function (node) { + this.visitToken(node.varKeyword); + this.visitSeparatedList(node.variableDeclarators); }; - return SimplePropertyAssignment; - })(AST); - TypeScript.SimplePropertyAssignment = SimplePropertyAssignment; - - var FunctionPropertyAssignment = (function (_super) { - __extends(FunctionPropertyAssignment, _super); - function FunctionPropertyAssignment(propertyName, callSignature, block) { - _super.call(this); - this.propertyName = propertyName; - this.callSignature = callSignature; - this.block = block; - propertyName && (propertyName.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionPropertyAssignment.prototype.kind = function () { - return 241 /* FunctionPropertyAssignment */; + SyntaxWalker.prototype.visitVariableDeclarator = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); }; - return FunctionPropertyAssignment; - })(AST); - TypeScript.FunctionPropertyAssignment = FunctionPropertyAssignment; - - var FunctionExpression = (function (_super) { - __extends(FunctionExpression, _super); - function FunctionExpression(identifier, callSignature, block) { - _super.call(this); - this.identifier = identifier; - this.callSignature = callSignature; - this.block = block; - identifier && (identifier.parent = this); - callSignature && (callSignature.parent = this); - block && (block.parent = this); - } - FunctionExpression.prototype.kind = function () { - return 222 /* FunctionExpression */; + SyntaxWalker.prototype.visitArgumentList = function (node) { + this.visitOptionalNode(node.typeArgumentList); + this.visitToken(node.openParenToken); + this.visitSeparatedList(node.arguments); + this.visitToken(node.closeParenToken); }; - - FunctionExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitParameterList = function (node) { + this.visitToken(node.openParenToken); + this.visitSeparatedList(node.parameters); + this.visitToken(node.closeParenToken); }; - return FunctionExpression; - })(AST); - TypeScript.FunctionExpression = FunctionExpression; - - var EmptyStatement = (function (_super) { - __extends(EmptyStatement, _super); - function EmptyStatement() { - _super.apply(this, arguments); - } - EmptyStatement.prototype.kind = function () { - return 156 /* EmptyStatement */; + SyntaxWalker.prototype.visitTypeArgumentList = function (node) { + this.visitToken(node.lessThanToken); + this.visitSeparatedList(node.typeArguments); + this.visitToken(node.greaterThanToken); }; - - EmptyStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition); + SyntaxWalker.prototype.visitTypeParameterList = function (node) { + this.visitToken(node.lessThanToken); + this.visitSeparatedList(node.typeParameters); + this.visitToken(node.greaterThanToken); }; - return EmptyStatement; - })(AST); - TypeScript.EmptyStatement = EmptyStatement; - - var TryStatement = (function (_super) { - __extends(TryStatement, _super); - function TryStatement(block, catchClause, finallyClause) { - _super.call(this); - this.block = block; - this.catchClause = catchClause; - this.finallyClause = finallyClause; - block && (block.parent = this); - catchClause && (catchClause.parent = this); - finallyClause && (finallyClause.parent = this); - } - TryStatement.prototype.kind = function () { - return 159 /* TryStatement */; + SyntaxWalker.prototype.visitHeritageClause = function (node) { + this.visitToken(node.extendsOrImplementsKeyword); + this.visitSeparatedList(node.typeNames); }; - - TryStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition) && structuralEquals(this.catchClause, ast.catchClause, includingPosition) && structuralEquals(this.finallyClause, ast.finallyClause, includingPosition); + SyntaxWalker.prototype.visitEqualsValueClause = function (node) { + this.visitToken(node.equalsToken); + this.visitNodeOrToken(node.value); }; - return TryStatement; - })(AST); - TypeScript.TryStatement = TryStatement; - - var CatchClause = (function (_super) { - __extends(CatchClause, _super); - function CatchClause(identifier, typeAnnotation, block) { - _super.call(this); - this.identifier = identifier; - this.typeAnnotation = typeAnnotation; - this.block = block; - identifier && (identifier.parent = this); - typeAnnotation && (typeAnnotation.parent = this); - block && (block.parent = this); - } - CatchClause.prototype.kind = function () { - return 236 /* CatchClause */; + SyntaxWalker.prototype.visitCaseSwitchClause = function (node) { + this.visitToken(node.caseKeyword); + this.visitNodeOrToken(node.expression); + this.visitToken(node.colonToken); + this.visitList(node.statements); }; - - CatchClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.typeAnnotation, ast.typeAnnotation, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); + SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) { + this.visitToken(node.defaultKeyword); + this.visitToken(node.colonToken); + this.visitList(node.statements); }; - return CatchClause; - })(AST); - TypeScript.CatchClause = CatchClause; - - var FinallyClause = (function (_super) { - __extends(FinallyClause, _super); - function FinallyClause(block) { - _super.call(this); - this.block = block; - block && (block.parent = this); - } - FinallyClause.prototype.kind = function () { - return 237 /* FinallyClause */; + SyntaxWalker.prototype.visitElseClause = function (node) { + this.visitToken(node.elseKeyword); + this.visitNodeOrToken(node.statement); }; - - FinallyClause.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.block, ast.block, includingPosition); + SyntaxWalker.prototype.visitCatchClause = function (node) { + this.visitToken(node.catchKeyword); + this.visitToken(node.openParenToken); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeAnnotation); + this.visitToken(node.closeParenToken); + this.visitNode(node.block); }; - return FinallyClause; - })(AST); - TypeScript.FinallyClause = FinallyClause; - - var LabeledStatement = (function (_super) { - __extends(LabeledStatement, _super); - function LabeledStatement(identifier, statement) { - _super.call(this); - this.identifier = identifier; - this.statement = statement; - identifier && (identifier.parent = this); - statement && (statement.parent = this); - } - LabeledStatement.prototype.kind = function () { - return 160 /* LabeledStatement */; + SyntaxWalker.prototype.visitFinallyClause = function (node) { + this.visitToken(node.finallyKeyword); + this.visitNode(node.block); }; - - LabeledStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.identifier, ast.identifier, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition); + SyntaxWalker.prototype.visitTypeParameter = function (node) { + this.visitToken(node.identifier); + this.visitOptionalNode(node.constraint); }; - return LabeledStatement; - })(AST); - TypeScript.LabeledStatement = LabeledStatement; - - var DoStatement = (function (_super) { - __extends(DoStatement, _super); - function DoStatement(statement, whileKeyword, condition) { - _super.call(this); - this.statement = statement; - this.whileKeyword = whileKeyword; - this.condition = condition; - statement && (statement.parent = this); - condition && (condition.parent = this); - } - DoStatement.prototype.kind = function () { - return 161 /* DoStatement */; + SyntaxWalker.prototype.visitConstraint = function (node) { + this.visitToken(node.extendsKeyword); + this.visitNodeOrToken(node.typeOrExpression); }; - - DoStatement.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.statement, ast.statement, includingPosition) && structuralEquals(this.condition, ast.condition, includingPosition); + SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) { + this.visitToken(node.propertyName); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.expression); }; - return DoStatement; - })(AST); - TypeScript.DoStatement = DoStatement; - - var TypeOfExpression = (function (_super) { - __extends(TypeOfExpression, _super); - function TypeOfExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - TypeOfExpression.prototype.kind = function () { - return 171 /* TypeOfExpression */; + SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) { + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); }; - - TypeOfExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitParameter = function (node) { + this.visitOptionalToken(node.dotDotDotToken); + this.visitList(node.modifiers); + this.visitToken(node.identifier); + this.visitOptionalToken(node.questionToken); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); }; - - TypeOfExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitEnumElement = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalNode(node.equalsValueClause); }; - return TypeOfExpression; - })(AST); - TypeScript.TypeOfExpression = TypeOfExpression; - - var DeleteExpression = (function (_super) { - __extends(DeleteExpression, _super); - function DeleteExpression(expression) { - _super.call(this); - this.expression = expression; - expression && (expression.parent = this); - } - DeleteExpression.prototype.kind = function () { - return 170 /* DeleteExpression */; + SyntaxWalker.prototype.visitTypeAnnotation = function (node) { + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.type); }; - - DeleteExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); + SyntaxWalker.prototype.visitExternalModuleReference = function (node) { + this.visitToken(node.requireKeyword); + this.visitToken(node.openParenToken); + this.visitToken(node.stringLiteral); + this.visitToken(node.closeParenToken); }; - - DeleteExpression.prototype.isExpression = function () { - return true; + SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) { + this.visitNodeOrToken(node.moduleName); }; - return DeleteExpression; - })(AST); - TypeScript.DeleteExpression = DeleteExpression; - - var VoidExpression = (function (_super) { - __extends(VoidExpression, _super); - function VoidExpression(expression) { + return SyntaxWalker; + })(); + TypeScript.SyntaxWalker = SyntaxWalker; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var DepthLimitedWalker = (function (_super) { + __extends(DepthLimitedWalker, _super); + function DepthLimitedWalker(maximumDepth) { _super.call(this); - this.expression = expression; - expression && (expression.parent = this); + this._depth = 0; + this._maximumDepth = 0; + this._maximumDepth = maximumDepth; } - VoidExpression.prototype.kind = function () { - return 172 /* VoidExpression */; - }; - - VoidExpression.prototype.structuralEquals = function (ast, includingPosition) { - return _super.prototype.structuralEquals.call(this, ast, includingPosition) && structuralEquals(this.expression, ast.expression, includingPosition); - }; - - VoidExpression.prototype.isExpression = function () { - return true; + DepthLimitedWalker.prototype.visitNode = function (node) { + if (this._depth < this._maximumDepth) { + this._depth++; + _super.prototype.visitNode.call(this, node); + this._depth--; + } }; - return VoidExpression; - })(AST); - TypeScript.VoidExpression = VoidExpression; - - var DebuggerStatement = (function (_super) { - __extends(DebuggerStatement, _super); - function DebuggerStatement() { - _super.apply(this, arguments); + return DepthLimitedWalker; + })(TypeScript.SyntaxWalker); + TypeScript.DepthLimitedWalker = DepthLimitedWalker; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Parser) { + Parser.syntaxFactory; + var arrayPool = []; + var arrayPoolCount = 0; + function getArray() { + if (arrayPoolCount === 0) { + return []; + } + arrayPoolCount--; + var result = arrayPool[arrayPoolCount]; + arrayPool[arrayPoolCount] = null; + return result; } - DebuggerStatement.prototype.kind = function () { - return 162 /* DebuggerStatement */; - }; - return DebuggerStatement; - })(AST); - TypeScript.DebuggerStatement = DebuggerStatement; - - var Comment = (function () { - function Comment(_trivia, endsLine, _start, _end) { - this._trivia = _trivia; - this.endsLine = endsLine; - this._start = _start; - this._end = _end; + function returnZeroLengthArray(array) { + if (array.length === 0) { + returnArray(array); + } } - Comment.prototype.start = function () { - return this._start; - }; - - Comment.prototype.end = function () { - return this._end; - }; - - Comment.prototype.fullText = function () { - return this._trivia.fullText(); - }; - - Comment.prototype.kind = function () { - return this._trivia.kind(); - }; - - Comment.prototype.structuralEquals = function (ast, includingPosition) { - if (includingPosition) { - if (this.start() !== ast.start() || this.end() !== ast.end()) { + function returnArray(array) { + array.length = 0; + arrayPool[arrayPoolCount] = array; + arrayPoolCount++; + } + function createParseSyntaxTree() { + var fileName; + var source; + var languageVersion; + var listParsingState = 0; + var isInStrictMode = false; + var diagnostics = []; + var parseNodeData = 0; + function parseSyntaxTree(_source, isDeclaration) { + fileName = _source.fileName; + source = _source; + languageVersion = source.languageVersion; + var result = parseSyntaxTreeWorker(isDeclaration); + diagnostics = []; + parseNodeData = 0 /* None */; + fileName = null; + source.release(); + source = null; + _source = null; + return result; + } + function parseSyntaxTreeWorker(isDeclaration) { + var sourceUnit = parseSourceUnit(); + var allDiagnostics = source.tokenDiagnostics().concat(diagnostics); + allDiagnostics.sort(function (a, b) { return a.start() - b.start(); }); + return new TypeScript.SyntaxTree(Parser.syntaxFactory.isConcrete, sourceUnit, isDeclaration, allDiagnostics, fileName, source.text, languageVersion); + } + function getRewindPoint() { + var rewindPoint = source.getRewindPoint(); + rewindPoint.diagnosticsCount = diagnostics.length; + rewindPoint.isInStrictMode = isInStrictMode; + rewindPoint.listParsingState = listParsingState; + return rewindPoint; + } + function rewind(rewindPoint) { + source.rewind(rewindPoint); + diagnostics.length = rewindPoint.diagnosticsCount; + } + function releaseRewindPoint(rewindPoint) { + source.releaseRewindPoint(rewindPoint); + } + function currentNode() { + var node = source.currentNode(); + if (node === null || TypeScript.parsedInStrictMode(node) !== isInStrictMode) { + return null; + } + return node; + } + function currentToken() { + return source.currentToken(); + } + function currentContextualToken() { + return source.currentContextualToken(); + } + function peekToken(n) { + return source.peekToken(n); + } + function consumeToken(token) { + source.consumeToken(token); + return token; + } + function consumeNode(node) { + source.consumeNode(node); + } + function eatToken(kind) { + var token = currentToken(); + if (token.kind() === kind) { + return consumeToken(token); + } + return createMissingToken(kind, token); + } + function tryEatToken(kind) { + var _currentToken = currentToken(); + if (_currentToken.kind() === kind) { + return consumeToken(_currentToken); + } + return null; + } + function isIdentifier(token) { + var tokenKind = token.kind(); + if (tokenKind === 11 /* IdentifierName */) { + return true; + } + if (tokenKind >= TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword) { + if (tokenKind <= TypeScript.SyntaxKind.LastFutureReservedStrictKeyword) { + return !isInStrictMode; + } + return tokenKind <= TypeScript.SyntaxKind.LastTypeScriptKeyword; + } + return false; + } + function eatIdentifierNameToken() { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 11 /* IdentifierName */) { + return consumeToken(token); + } + if (TypeScript.SyntaxFacts.isAnyKeyword(tokenKind)) { + return TypeScript.Syntax.convertKeywordToIdentifier(consumeToken(token)); + } + return createMissingToken(11 /* IdentifierName */, token); + } + function eatOptionalIdentifierToken() { + return isIdentifier(currentToken()) ? eatIdentifierToken() : null; + } + function eatIdentifierToken(diagnosticCode) { + var token = currentToken(); + if (isIdentifier(token)) { + consumeToken(token); + if (token.kind() === 11 /* IdentifierName */) { + return token; + } + return TypeScript.Syntax.convertKeywordToIdentifier(token); + } + return createMissingToken(11 /* IdentifierName */, token, diagnosticCode); + } + function previousTokenHasTrailingNewLine(token) { + var tokenFullStart = token.fullStart(); + if (tokenFullStart === 0) { return false; } + var lineNumber = source.text.lineMap().getLineNumberFromPosition(tokenFullStart); + var lineStart = source.text.lineMap().getLineStartPosition(lineNumber); + return lineStart == tokenFullStart; + } + function canEatAutomaticSemicolon(allowWithoutNewLine) { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 10 /* EndOfFileToken */) { + return true; + } + if (tokenKind === 71 /* CloseBraceToken */) { + return true; + } + if (allowWithoutNewLine) { + return true; + } + if (previousTokenHasTrailingNewLine(token)) { + return true; + } + return false; } - - return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine; - }; - return Comment; - })(); - TypeScript.Comment = Comment; -})(TypeScript || (TypeScript = {})); -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement, fromIndex) { - "use strict"; - if (this == null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { - n = 0; - } else if (n != 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); + function canEatExplicitOrAutomaticSemicolon(allowWithoutNewline) { + var token = currentToken(); + if (token.kind() === 78 /* SemicolonToken */) { + return true; + } + return canEatAutomaticSemicolon(allowWithoutNewline); } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; + function eatExplicitOrAutomaticSemicolon(allowWithoutNewline) { + var token = currentToken(); + if (token.kind() === 78 /* SemicolonToken */) { + return consumeToken(token); + } + if (canEatAutomaticSemicolon(allowWithoutNewline)) { + return null; + } + return eatToken(78 /* SemicolonToken */); } - } - return -1; - }; -} - -if (!Array.prototype.filter) { - Array.prototype.filter = function (fun, thisp) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - if (fun.call(thisp, val, i, t)) - res.push(val); + function createMissingToken(expectedKind, actual, diagnosticCode) { + var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode); + addDiagnostic(diagnostic); + return TypeScript.Syntax.emptyToken(expectedKind); } - } - - return res; - }; -} - -if (!Array.prototype.map) { - Array.prototype.map = function (callback, thisArg) { - var T = undefined, A, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } - - A = new Array(len); - - k = 0; - - while (k < len) { - var kValue, mappedValue; - - if (k in O) { - kValue = O[k]; - - mappedValue = callback.call(T, kValue, k, O); - - A[k] = mappedValue; + function getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode) { + var token = currentToken(); + var args = null; + if (!diagnosticCode) { + if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) { + diagnosticCode = TypeScript.DiagnosticCode._0_expected; + args = [TypeScript.SyntaxFacts.getText(expectedKind)]; + } + else { + if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.kind())) { + diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword; + args = [TypeScript.SyntaxFacts.getText(actual.kind())]; + } + else { + diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected; + } + } + } + return new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), diagnosticCode, args); } - - k++; - } - - return A; - }; -} - -if (!Array.prototype.reduce) { - Array.prototype.reduce = function reduce(accumulator) { - if (this === null || this === undefined) - throw new TypeError("Object is null or undefined"); - var i = 0, l = this.length >> 0, curr; - - if (typeof accumulator !== "function") - throw new TypeError("First argument is not callable"); - - if (arguments.length < 2) { - if (l === 0) - throw new TypeError("Array length is 0 and no second argument"); - curr = this[0]; - i = 1; - } else - curr = arguments[1]; - - while (i < l) { - if (i in this) - curr = accumulator.call(undefined, curr, this[i], i, this); - ++i; - } - - return curr; - }; -} - -if (!Array.prototype.forEach) { - Array.prototype.forEach = function (callback, thisArg) { - var T, k; - - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if ({}.toString.call(callback) != "[object Function]") { - throw new TypeError(callback + " is not a function"); - } - - if (thisArg) { - T = thisArg; - } else { - T = undefined; - } - - k = 0; - - while (k < len) { - var kValue; - - if (k in O) { - kValue = O[k]; - - callback.call(T, kValue, k, O); + function getBinaryExpressionPrecedence(tokenKind) { + switch (tokenKind) { + case 104 /* BarBarToken */: + return 2 /* LogicalOrExpressionPrecedence */; + case 103 /* AmpersandAmpersandToken */: + return 3 /* LogicalAndExpressionPrecedence */; + case 99 /* BarToken */: + return 4 /* BitwiseOrExpressionPrecedence */; + case 100 /* CaretToken */: + return 5 /* BitwiseExclusiveOrExpressionPrecedence */; + case 98 /* AmpersandToken */: + return 6 /* BitwiseAndExpressionPrecedence */; + case 84 /* EqualsEqualsToken */: + case 86 /* ExclamationEqualsToken */: + case 87 /* EqualsEqualsEqualsToken */: + case 88 /* ExclamationEqualsEqualsToken */: + return 7 /* EqualityExpressionPrecedence */; + case 80 /* LessThanToken */: + case 81 /* GreaterThanToken */: + case 82 /* LessThanEqualsToken */: + case 83 /* GreaterThanEqualsToken */: + case 30 /* InstanceOfKeyword */: + case 29 /* InKeyword */: + return 8 /* RelationalExpressionPrecedence */; + case 95 /* LessThanLessThanToken */: + case 96 /* GreaterThanGreaterThanToken */: + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + return 9 /* ShiftExpressionPrecdence */; + case 89 /* PlusToken */: + case 90 /* MinusToken */: + return 10 /* AdditiveExpressionPrecedence */; + case 91 /* AsteriskToken */: + case 118 /* SlashToken */: + case 92 /* PercentToken */: + return 11 /* MultiplicativeExpressionPrecedence */; + } + throw TypeScript.Errors.invalidOperation(); } - - k++; - } - }; -} - -if (!Date.now) { - Date.now = function () { - return (new Date()).getTime(); - }; -} - -if (!Array.prototype.some) { - Array.prototype.some = function (fun) { - "use strict"; - - if (this == null) - throw new TypeError(); - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun != "function") - throw new TypeError(); - - var thisp = arguments[1]; - for (var i = 0; i < len; i++) { - var idx = i.toString(); - if (idx in t && fun.call(thisp, t[i], i, t)) - return true; - } - - return false; - }; -} -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (EndOfLineState) { - EndOfLineState[EndOfLineState["Start"] = 0] = "Start"; - EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; - EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; - EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; - })(Services.EndOfLineState || (Services.EndOfLineState = {})); - var EndOfLineState = Services.EndOfLineState; - - (function (TokenClass) { - TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; - TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; - TokenClass[TokenClass["Operator"] = 2] = "Operator"; - TokenClass[TokenClass["Comment"] = 3] = "Comment"; - TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; - TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; - TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; - TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; - TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; - })(Services.TokenClass || (Services.TokenClass = {})); - var TokenClass = Services.TokenClass; - - var noRegexTable = []; - noRegexTable[11 /* IdentifierName */] = true; - noRegexTable[14 /* StringLiteral */] = true; - noRegexTable[13 /* NumericLiteral */] = true; - noRegexTable[12 /* RegularExpressionLiteral */] = true; - noRegexTable[35 /* ThisKeyword */] = true; - noRegexTable[93 /* PlusPlusToken */] = true; - noRegexTable[94 /* MinusMinusToken */] = true; - noRegexTable[73 /* CloseParenToken */] = true; - noRegexTable[75 /* CloseBracketToken */] = true; - noRegexTable[71 /* CloseBraceToken */] = true; - noRegexTable[37 /* TrueKeyword */] = true; - noRegexTable[24 /* FalseKeyword */] = true; - - var Classifier = (function () { - function Classifier(host) { - this.host = host; - this.characterWindow = TypeScript.ArrayUtilities.createArray(2048, 0); - this.diagnostics = []; - } - Classifier.prototype.getClassificationsForLine = function (text, lexState) { - var offset = 0; - if (lexState !== 0 /* Start */) { - if (lexState === 3 /* InDoubleQuoteStringLiteral */) { - text = '"\\\n' + text; - } else if (lexState === 2 /* InSingleQuoteStringLiteral */) { - text = "'\\\n" + text; - } else if (lexState === 1 /* InMultiLineCommentTrivia */) { - text = "/*\n" + text; + function addSkippedTokenAfterNodeOrToken(nodeOrToken, skippedToken) { + if (TypeScript.isToken(nodeOrToken)) { + return addSkippedTokenAfterToken(nodeOrToken, skippedToken); + } + else if (TypeScript.isNode(nodeOrToken)) { + return addSkippedTokenAfterNode(nodeOrToken, skippedToken); + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function replaceTokenInParent(oldToken, newToken) { + replaceTokenInParentWorker(oldToken, newToken); + var parent = oldToken.parent; + newToken.parent = parent; + TypeScript.Debug.assert(TypeScript.isNode(parent) || TypeScript.isList(parent) || TypeScript.isSeparatedList(parent)); + var dataElement = parent; + if (dataElement.data) { + dataElement.data &= 4 /* NodeParsedInStrictModeMask */; + } + } + function replaceTokenInParentWorker(oldToken, newToken) { + var parent = oldToken.parent; + if (TypeScript.isNode(parent)) { + var node = parent; + for (var key in node) { + if (node[key] === oldToken) { + node[key] = newToken; + return; + } } - - offset = 3; } - - var result = new ClassificationResult(); - this.scanner = new TypeScript.Scanner("", TypeScript.SimpleText.fromString(text), 1 /* EcmaScript5 */, this.characterWindow); - - var lastTokenKind = 0 /* None */; - - while (this.scanner.absoluteIndex() < text.length) { - this.diagnostics.length = 0; - var token = this.scanner.scan(this.diagnostics, !noRegexTable[lastTokenKind]); - lastTokenKind = token.tokenKind; - - this.processToken(text, offset, token, result); + else if (TypeScript.isList(parent)) { + var list1 = parent; + for (var i = 0, n = list1.length; i < n; i++) { + if (list1[i] === oldToken) { + list1[i] = newToken; + return; + } + } } - - return result; - }; - - Classifier.prototype.processToken = function (text, offset, token, result) { - this.processTriviaList(text, offset, token.leadingTrivia(), result); - this.addResult(text, offset, result, token.width(), token.tokenKind); - this.processTriviaList(text, offset, token.trailingTrivia(), result); - - if (this.scanner.absoluteIndex() >= text.length) { - if (this.diagnostics.length > 0) { - if (this.diagnostics[this.diagnostics.length - 1].diagnosticKey() === TypeScript.DiagnosticCode.AsteriskSlash_expected) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; + else if (TypeScript.isSeparatedList(parent)) { + var list2 = parent; + for (var i = 0, n = TypeScript.childCount(list2); i < n; i++) { + if (TypeScript.childAt(list2, i) === oldToken) { + if (i % 2 === 0) { + list2[i / 2] = newToken; + } + else { + list2.separators[(i - 1) / 2] = newToken; + } return; } } - - if (token.tokenKind === 14 /* StringLiteral */) { - var tokenText = token.text(); - if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { - var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; + } + throw TypeScript.Errors.invalidOperation(); + } + function addSkippedTokenAfterNode(node, skippedToken) { + var oldToken = TypeScript.lastToken(node); + var newToken = addSkippedTokenAfterToken(oldToken, skippedToken); + replaceTokenInParent(oldToken, newToken); + return node; + } + function addSkippedTokensBeforeNode(node, skippedTokens) { + if (skippedTokens.length > 0) { + var oldToken = TypeScript.firstToken(node); + var newToken = addSkippedTokensBeforeToken(oldToken, skippedTokens); + replaceTokenInParent(oldToken, newToken); + } + return node; + } + function addSkippedTokensBeforeToken(token, skippedTokens) { + var leadingTrivia = []; + for (var i = 0, n = skippedTokens.length; i < n; i++) { + var skippedToken = skippedTokens[i]; + addSkippedTokenToTriviaArray(leadingTrivia, skippedToken); + } + addTriviaTo(token.leadingTrivia(source.text), leadingTrivia); + var updatedToken = TypeScript.Syntax.withLeadingTrivia(token, TypeScript.Syntax.triviaList(leadingTrivia), source.text); + updatedToken.setFullStart(skippedTokens[0].fullStart()); + returnArray(skippedTokens); + return updatedToken; + } + function addSkippedTokensAfterToken(token, skippedTokens) { + if (skippedTokens.length === 0) { + returnArray(skippedTokens); + return token; + } + var trailingTrivia = token.trailingTrivia(source.text).toArray(); + for (var i = 0, n = skippedTokens.length; i < n; i++) { + addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]); + } + returnArray(skippedTokens); + return TypeScript.Syntax.withTrailingTrivia(token, TypeScript.Syntax.triviaList(trailingTrivia), source.text); + } + function addSkippedTokenAfterToken(token, skippedToken) { + var trailingTrivia = token.trailingTrivia(source.text).toArray(); + addSkippedTokenToTriviaArray(trailingTrivia, skippedToken); + return TypeScript.Syntax.withTrailingTrivia(token, TypeScript.Syntax.triviaList(trailingTrivia), source.text); + } + function addSkippedTokenToTriviaArray(array, skippedToken) { + addTriviaTo(skippedToken.leadingTrivia(source.text), array); + var trimmedToken = TypeScript.Syntax.withTrailingTrivia(TypeScript.Syntax.withLeadingTrivia(skippedToken, TypeScript.Syntax.emptyTriviaList, source.text), TypeScript.Syntax.emptyTriviaList, source.text); + trimmedToken.setFullStart(TypeScript.start(skippedToken, source.text)); + array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken, source.text)); + addTriviaTo(skippedToken.trailingTrivia(source.text), array); + } + function addTriviaTo(list, array) { + for (var i = 0, n = list.count(); i < n; i++) { + array.push(list.syntaxTriviaAt(i)); + } + } + function setStrictMode(_isInStrictMode) { + isInStrictMode = _isInStrictMode; + parseNodeData = _isInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0; + } + function parseSourceUnit() { + var savedIsInStrictMode = isInStrictMode; + var skippedTokens = getArray(); + var moduleElements = parseSyntaxList(0 /* SourceUnit_ModuleElements */, skippedTokens, updateStrictModeState); + setStrictMode(savedIsInStrictMode); + var sourceUnit = new Parser.syntaxFactory.SourceUnitSyntax(parseNodeData, moduleElements, currentToken()); + sourceUnit = addSkippedTokensBeforeNode(sourceUnit, skippedTokens); + if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { + TypeScript.Debug.assert(TypeScript.fullWidth(sourceUnit) === source.text.length()); + if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { + TypeScript.Debug.assert(TypeScript.fullText(sourceUnit) === source.text.substr(0, source.text.length())); + } + } + return sourceUnit; + } + function updateStrictModeState(items) { + if (!isInStrictMode) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) { return; } } + setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1])); } - }; - - Classifier.prototype.processTriviaList = function (text, offset, triviaList, result) { - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - this.addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); + } + function isModuleElement(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isModuleElement(currentNode())) { + return true; } - }; - - Classifier.prototype.addResult = function (text, offset, result, length, kind) { - if (length > 0) { - if (result.entries.length === 0) { - length -= offset; + var _modifierCount = modifierCount(); + return isInterfaceEnumClassModuleImportOrExport(_modifierCount) || isStatement(_modifierCount, inErrorRecovery); + } + function tryParseModuleElement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isModuleElement(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var _modifierCount = modifierCount(); + if (_modifierCount) { + switch (peekToken(_modifierCount).kind()) { + case 49 /* ImportKeyword */: + return parseImportDeclaration(); + case 65 /* ModuleKeyword */: + return parseModuleDeclaration(); + case 52 /* InterfaceKeyword */: + return parseInterfaceDeclaration(); + case 44 /* ClassKeyword */: + return parseClassDeclaration(); + case 46 /* EnumKeyword */: + return parseEnumDeclaration(); } - - result.entries.push(new ClassificationInfo(length, this.classFromKind(kind))); } - }; - - Classifier.prototype.classFromKind = function (kind) { - if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { - return 1 /* Keyword */; - } else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { - return 2 /* Operator */; - } else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { - return 0 /* Punctuation */; + var nextToken = peekToken(1); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 65 /* ModuleKeyword */: + if (isIdentifier(nextToken) || nextToken.kind() === 14 /* StringLiteral */) { + return parseModuleDeclaration(); + } + break; + case 49 /* ImportKeyword */: + if (isIdentifier(nextToken)) { + return parseImportDeclaration(); + } + break; + case 44 /* ClassKeyword */: + if (isIdentifier(nextToken)) { + return parseClassDeclaration(); + } + break; + case 46 /* EnumKeyword */: + if (isIdentifier(nextToken)) { + return parseEnumDeclaration(); + } + break; + case 52 /* InterfaceKeyword */: + if (isIdentifier(nextToken)) { + return parseInterfaceDeclaration(); + } + break; + case 47 /* ExportKeyword */: + if (nextToken.kind() === 107 /* EqualsToken */) { + return parseExportAssignment(); + } + break; } - + return tryParseStatementWorker(_currentToken, currentTokenKind, _modifierCount, inErrorRecovery); + } + function parseImportDeclaration() { + return new Parser.syntaxFactory.ImportDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(49 /* ImportKeyword */), eatIdentifierToken(), eatToken(107 /* EqualsToken */), parseModuleReference(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseExportAssignment() { + return new Parser.syntaxFactory.ExportAssignmentSyntax(parseNodeData, eatToken(47 /* ExportKeyword */), eatToken(107 /* EqualsToken */), eatIdentifierToken(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseModuleReference() { + return isExternalModuleReference() ? parseExternalModuleReference() : parseModuleNameModuleReference(); + } + function isExternalModuleReference() { + return currentToken().kind() === 66 /* RequireKeyword */ && peekToken(1).kind() === 72 /* OpenParenToken */; + } + function parseExternalModuleReference() { + return new Parser.syntaxFactory.ExternalModuleReferenceSyntax(parseNodeData, eatToken(66 /* RequireKeyword */), eatToken(72 /* OpenParenToken */), eatToken(14 /* StringLiteral */), eatToken(73 /* CloseParenToken */)); + } + function parseModuleNameModuleReference() { + return new Parser.syntaxFactory.ModuleNameModuleReferenceSyntax(parseNodeData, parseName(false)); + } + function tryParseTypeArgumentList(inExpression) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 80 /* LessThanToken */) { + return null; + } + if (!inExpression) { + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeArguments = parseSeparatedSyntaxList(19 /* TypeArgumentList_Types */, skippedTokens); + lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + return new Parser.syntaxFactory.TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, eatToken(81 /* GreaterThanToken */)); + } + var rewindPoint = getRewindPoint(); + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeArguments = parseSeparatedSyntaxList(19 /* TypeArgumentList_Types */, skippedTokens); + var lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + var greaterThanToken = eatToken(81 /* GreaterThanToken */); + if (greaterThanToken.fullWidth() === 0 || !canFollowTypeArgumentListInExpression(currentToken().kind())) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + return new Parser.syntaxFactory.TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, greaterThanToken); + } + } + function canFollowTypeArgumentListInExpression(kind) { switch (kind) { - case 4 /* WhitespaceTrivia */: - return 4 /* Whitespace */; - case 6 /* MultiLineCommentTrivia */: - case 7 /* SingleLineCommentTrivia */: - return 3 /* Comment */; - case 13 /* NumericLiteral */: - return 6 /* NumberLiteral */; - case 14 /* StringLiteral */: - return 7 /* StringLiteral */; - case 12 /* RegularExpressionLiteral */: - return 8 /* RegExpLiteral */; - case 11 /* IdentifierName */: + case 72 /* OpenParenToken */: + case 76 /* DotToken */: + case 73 /* CloseParenToken */: + case 75 /* CloseBracketToken */: + case 106 /* ColonToken */: + case 78 /* SemicolonToken */: + case 79 /* CommaToken */: + case 105 /* QuestionToken */: + case 84 /* EqualsEqualsToken */: + case 87 /* EqualsEqualsEqualsToken */: + case 86 /* ExclamationEqualsToken */: + case 88 /* ExclamationEqualsEqualsToken */: + case 103 /* AmpersandAmpersandToken */: + case 104 /* BarBarToken */: + case 100 /* CaretToken */: + case 98 /* AmpersandToken */: + case 99 /* BarToken */: + case 71 /* CloseBraceToken */: + case 10 /* EndOfFileToken */: + return true; default: - return 5 /* Identifier */; + return false; } - }; - return Classifier; - })(); - Services.Classifier = Classifier; - - var ClassificationResult = (function () { - function ClassificationResult() { - this.finalLexState = 0 /* Start */; - this.entries = []; } - return ClassificationResult; - })(); - Services.ClassificationResult = ClassificationResult; - - var ClassificationInfo = (function () { - function ClassificationInfo(length, classification) { - this.length = length; - this.classification = classification; + function parseName(allowIdentifierName) { + return tryParseName(allowIdentifierName) || eatIdentifierToken(); + } + function eatRightSideOfName(allowIdentifierNames) { + var _currentToken = currentToken(); + if (TypeScript.SyntaxFacts.isAnyKeyword(_currentToken.kind()) && previousTokenHasTrailingNewLine(_currentToken)) { + var token1 = peekToken(1); + if (!TypeScript.existsNewLineBetweenTokens(_currentToken, token1, source.text) && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { + return createMissingToken(11 /* IdentifierName */, _currentToken); + } + } + return allowIdentifierNames ? eatIdentifierNameToken() : eatIdentifierToken(); + } + function tryParseName(allowIdentifierNames) { + var token0 = currentToken(); + var shouldContinue = isIdentifier(token0); + if (!shouldContinue) { + return null; + } + var current = eatIdentifierToken(); + while (shouldContinue && currentToken().kind() === 76 /* DotToken */) { + var dotToken = consumeToken(currentToken()); + var identifierName = eatRightSideOfName(allowIdentifierNames); + current = new Parser.syntaxFactory.QualifiedNameSyntax(parseNodeData, current, dotToken, identifierName); + shouldContinue = identifierName.fullWidth() > 0; + } + return current; } - return ClassificationInfo; - })(); - Services.ClassificationInfo = ClassificationInfo; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - - - - - function logInternalError(logger, err) { - logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); - } - Services.logInternalError = logInternalError; - - var ReferenceEntry = (function () { - function ReferenceEntry(fileName, minChar, limChar, isWriteAccess) { - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.isWriteAccess = false; - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.isWriteAccess = isWriteAccess; + function parseEnumDeclaration() { + var modifiers = parseModifiers(); + var enumKeyword = eatToken(46 /* EnumKeyword */); + var identifier = eatIdentifierToken(); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var enumElements = TypeScript.Syntax.emptySeparatedList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + enumElements = parseSeparatedSyntaxList(8 /* EnumDeclaration_EnumElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.EnumDeclarationSyntax(parseNodeData, modifiers, enumKeyword, identifier, openBraceToken, enumElements, eatToken(71 /* CloseBraceToken */)); + } + function isEnumElement(inErrorRecovery) { + var node = currentNode(); + if (node !== null && node.kind() === 243 /* EnumElement */) { + return true; + } + return isPropertyName(currentToken(), inErrorRecovery); } - return ReferenceEntry; - })(); - Services.ReferenceEntry = ReferenceEntry; - - var NavigateToItem = (function () { - function NavigateToItem() { - this.name = ""; - this.kind = ""; - this.kindModifiers = ""; - this.matchKind = ""; - this.fileName = ""; - this.minChar = -1; - this.limChar = -1; - this.additionalSpans = null; - this.containerName = ""; - this.containerKind = ""; - } - return NavigateToItem; - })(); - Services.NavigateToItem = NavigateToItem; - - var TextEdit = (function () { - function TextEdit(minChar, limChar, text) { - this.minChar = minChar; - this.limChar = limChar; - this.text = text; + function tryParseEnumElementEqualsValueClause() { + return isEqualsValueClause(false) ? parseEqualsValueClause(true) : null; } - TextEdit.createInsert = function (pos, text) { - return new TextEdit(pos, pos, text); - }; - TextEdit.createDelete = function (minChar, limChar) { - return new TextEdit(minChar, limChar, ""); - }; - TextEdit.createReplace = function (minChar, limChar, text) { - return new TextEdit(minChar, limChar, text); - }; - return TextEdit; - })(); - Services.TextEdit = TextEdit; - - var EditorOptions = (function () { - function EditorOptions() { - this.IndentSize = 4; - this.TabSize = 4; - this.NewLineCharacter = "\r\n"; - this.ConvertTabsToSpaces = true; - } - EditorOptions.clone = function (objectToClone) { - var editorOptions = new EditorOptions(); - editorOptions.IndentSize = objectToClone.IndentSize; - editorOptions.TabSize = objectToClone.TabSize; - editorOptions.NewLineCharacter = objectToClone.NewLineCharacter; - editorOptions.ConvertTabsToSpaces = objectToClone.ConvertTabsToSpaces; - return editorOptions; - }; - return EditorOptions; - })(); - Services.EditorOptions = EditorOptions; - - var FormatCodeOptions = (function (_super) { - __extends(FormatCodeOptions, _super); - function FormatCodeOptions() { - _super.apply(this, arguments); - this.InsertSpaceAfterCommaDelimiter = true; - this.InsertSpaceAfterSemicolonInForStatements = true; - this.InsertSpaceBeforeAndAfterBinaryOperators = true; - this.InsertSpaceAfterKeywordsInControlFlowStatements = true; - this.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = false; - this.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = false; - this.PlaceOpenBraceOnNewLineForFunctions = false; - this.PlaceOpenBraceOnNewLineForControlBlocks = false; - } - FormatCodeOptions.clone = function (objectToClone) { - var formatCodeOptions = EditorOptions.clone(objectToClone); - formatCodeOptions.InsertSpaceAfterCommaDelimiter = objectToClone.InsertSpaceAfterCommaDelimiter; - formatCodeOptions.InsertSpaceAfterSemicolonInForStatements = objectToClone.InsertSpaceAfterSemicolonInForStatements; - formatCodeOptions.InsertSpaceBeforeAndAfterBinaryOperators = objectToClone.InsertSpaceBeforeAndAfterBinaryOperators; - formatCodeOptions.InsertSpaceAfterKeywordsInControlFlowStatements = objectToClone.InsertSpaceAfterKeywordsInControlFlowStatements; - formatCodeOptions.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = objectToClone.InsertSpaceAfterFunctionKeywordForAnonymousFunctions; - formatCodeOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = objectToClone.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis; - formatCodeOptions.PlaceOpenBraceOnNewLineForFunctions = objectToClone.PlaceOpenBraceOnNewLineForFunctions; - formatCodeOptions.PlaceOpenBraceOnNewLineForControlBlocks = objectToClone.PlaceOpenBraceOnNewLineForControlBlocks; - return formatCodeOptions; - }; - return FormatCodeOptions; - })(EditorOptions); - Services.FormatCodeOptions = FormatCodeOptions; - - var DefinitionInfo = (function () { - function DefinitionInfo(fileName, minChar, limChar, kind, name, containerKind, containerName) { - this.fileName = fileName; - this.minChar = minChar; - this.limChar = limChar; - this.kind = kind; - this.name = name; - this.containerKind = containerKind; - this.containerName = containerName; - } - return DefinitionInfo; - })(); - Services.DefinitionInfo = DefinitionInfo; - - var TypeInfo = (function () { - function TypeInfo(memberName, docComment, fullSymbolName, kind, minChar, limChar) { - this.memberName = memberName; - this.docComment = docComment; - this.fullSymbolName = fullSymbolName; - this.kind = kind; - this.minChar = minChar; - this.limChar = limChar; - } - return TypeInfo; - })(); - Services.TypeInfo = TypeInfo; - - var SpanInfo = (function () { - function SpanInfo(minChar, limChar, text) { - if (typeof text === "undefined") { text = null; } - this.minChar = minChar; - this.limChar = limChar; - this.text = text; + function tryParseEnumElement(inErrorRecovery) { + var node = currentNode(); + if (node !== null && node.kind() === 243 /* EnumElement */) { + consumeNode(node); + return node; + } + if (!isPropertyName(currentToken(), inErrorRecovery)) { + return null; + } + return new Parser.syntaxFactory.EnumElementSyntax(parseNodeData, eatPropertyName(), tryParseEnumElementEqualsValueClause()); } - return SpanInfo; - })(); - Services.SpanInfo = SpanInfo; - - var SignatureInfo = (function () { - function SignatureInfo() { - this.formal = []; + function isModifierKind(kind) { + switch (kind) { + case 47 /* ExportKeyword */: + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + case 63 /* DeclareKeyword */: + return true; + } + return false; } - return SignatureInfo; - })(); - Services.SignatureInfo = SignatureInfo; - - var FormalSignatureItemInfo = (function () { - function FormalSignatureItemInfo() { - this.typeParameters = []; - this.parameters = []; + function isModifier(token, index) { + if (isModifierKind(token.kind())) { + var nextToken = peekToken(index + 1); + var nextTokenKind = nextToken.kind(); + switch (nextTokenKind) { + case 11 /* IdentifierName */: + case 74 /* OpenBracketToken */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + return true; + default: + return TypeScript.SyntaxFacts.isAnyKeyword(nextTokenKind); + } + } + return false; } - return FormalSignatureItemInfo; - })(); - Services.FormalSignatureItemInfo = FormalSignatureItemInfo; - - var FormalTypeParameterInfo = (function () { - function FormalTypeParameterInfo() { + function modifierCount() { + var modifierCount = 0; + while (isModifier(peekToken(modifierCount), modifierCount)) { + modifierCount++; + } + return modifierCount; } - return FormalTypeParameterInfo; - })(); - Services.FormalTypeParameterInfo = FormalTypeParameterInfo; - - var FormalParameterInfo = (function () { - function FormalParameterInfo() { + function parseModifiers() { + var tokens = getArray(); + while (true) { + var token = currentToken(); + if (isModifier(token, 0)) { + tokens.push(consumeToken(token)); + continue; + } + break; + } + var result = TypeScript.Syntax.list(tokens); + returnZeroLengthArray(tokens); + return result; } - return FormalParameterInfo; - })(); - Services.FormalParameterInfo = FormalParameterInfo; - - var ActualSignatureInfo = (function () { - function ActualSignatureInfo() { + function parseHeritageClauses() { + var heritageClauses = TypeScript.Syntax.emptyList(); + if (isHeritageClause()) { + heritageClauses = parseSyntaxList(10 /* ClassOrInterfaceDeclaration_HeritageClauses */, null); + } + return heritageClauses; } - return ActualSignatureInfo; - })(); - Services.ActualSignatureInfo = ActualSignatureInfo; - - var CompletionInfo = (function () { - function CompletionInfo() { - this.maybeInaccurate = false; - this.isMemberCompletion = false; - this.entries = []; + function tryParseHeritageClauseTypeName() { + return isHeritageClauseTypeName() ? tryParseNameOrGenericType() : null; + } + function parseClassDeclaration() { + var modifiers = parseModifiers(); + var classKeyword = eatToken(44 /* ClassKeyword */); + var identifier = eatIdentifierToken(); + var typeParameterList = tryParseTypeParameterList(false); + var heritageClauses = parseHeritageClauses(); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var classElements = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + classElements = parseSyntaxList(1 /* ClassDeclaration_ClassElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + ; + return new Parser.syntaxFactory.ClassDeclarationSyntax(parseNodeData, modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, eatToken(71 /* CloseBraceToken */)); } - return CompletionInfo; - })(); - Services.CompletionInfo = CompletionInfo; - - var ScriptElementKind = (function () { - function ScriptElementKind() { + function isAccessor(modifierCount, inErrorRecovery) { + var tokenKind = peekToken(modifierCount).kind(); + if (tokenKind !== 64 /* GetKeyword */ && tokenKind !== 68 /* SetKeyword */) { + return false; + } + return isPropertyName(peekToken(modifierCount + 1), inErrorRecovery); } - ScriptElementKind.unknown = ""; - - ScriptElementKind.keyword = "keyword"; - - ScriptElementKind.scriptElement = "script"; - - ScriptElementKind.moduleElement = "module"; - - ScriptElementKind.classElement = "class"; - - ScriptElementKind.interfaceElement = "interface"; - - ScriptElementKind.enumElement = "enum"; - - ScriptElementKind.variableElement = "var"; - - ScriptElementKind.localVariableElement = "local var"; - - ScriptElementKind.functionElement = "function"; - - ScriptElementKind.localFunctionElement = "local function"; - - ScriptElementKind.memberFunctionElement = "method"; - - ScriptElementKind.memberGetAccessorElement = "getter"; - ScriptElementKind.memberSetAccessorElement = "setter"; - - ScriptElementKind.memberVariableElement = "property"; - - ScriptElementKind.constructorImplementationElement = "constructor"; - - ScriptElementKind.callSignatureElement = "call"; - - ScriptElementKind.indexSignatureElement = "index"; - - ScriptElementKind.constructSignatureElement = "construct"; - - ScriptElementKind.parameterElement = "parameter"; - - ScriptElementKind.typeParameterElement = "type parameter"; - - ScriptElementKind.primitiveType = "primitive type"; - return ScriptElementKind; - })(); - Services.ScriptElementKind = ScriptElementKind; - - var ScriptElementKindModifier = (function () { - function ScriptElementKindModifier() { - } - ScriptElementKindModifier.none = ""; - ScriptElementKindModifier.publicMemberModifier = "public"; - ScriptElementKindModifier.privateMemberModifier = "private"; - ScriptElementKindModifier.exportedModifier = "export"; - ScriptElementKindModifier.ambientModifier = "declare"; - ScriptElementKindModifier.staticModifier = "static"; - return ScriptElementKindModifier; - })(); - Services.ScriptElementKindModifier = ScriptElementKindModifier; - - var MatchKind = (function () { - function MatchKind() { - } - MatchKind.none = null; - MatchKind.exact = "exact"; - MatchKind.subString = "substring"; - MatchKind.prefix = "prefix"; - return MatchKind; - })(); - Services.MatchKind = MatchKind; - - var DiagnosticCategory = (function () { - function DiagnosticCategory() { - } - DiagnosticCategory.none = ""; - DiagnosticCategory.error = "error"; - DiagnosticCategory.warning = "warning"; - DiagnosticCategory.message = "message"; - return DiagnosticCategory; - })(); - Services.DiagnosticCategory = DiagnosticCategory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshot = (function () { - function TextSnapshot(snapshot) { - this.snapshot = snapshot; - this.lines = []; + function parseAccessor(checkForStrictMode) { + var modifiers = parseModifiers(); + var _currenToken = currentToken(); + var tokenKind = _currenToken.kind(); + if (tokenKind === 64 /* GetKeyword */) { + return parseGetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode); } - TextSnapshot.prototype.getText = function (span) { - return this.snapshot.substr(span.start(), span.length(), false); - }; - - TextSnapshot.prototype.getLineNumberFromPosition = function (position) { - return this.snapshot.lineMap().getLineNumberFromPosition(position); - }; - - TextSnapshot.prototype.getLineFromPosition = function (position) { - var lineNumber = this.getLineNumberFromPosition(position); - return this.getLineFromLineNumber(lineNumber); - }; - - TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) { - var line = this.lines[lineNumber]; - if (line === undefined) { - line = this.getLineFromLineNumberWorker(lineNumber); - this.lines[lineNumber] = line; - } - return line; - }; - - TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) { - var lineMap = this.snapshot.lineMap().lineStarts(); - var lineMapIndex = lineNumber; - if (lineMapIndex < 0 || lineMapIndex >= lineMap.length) - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex])); - var start = lineMap[lineMapIndex]; - - var end; - var endIncludingLineBreak; - var lineBreak = ""; - if (lineMapIndex == lineMap.length) { - end = endIncludingLineBreak = this.snapshot.length(); - } else { - endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]); - for (var p = endIncludingLineBreak - 1; p >= start; p--) { - var c = this.snapshot.substr(p, 1, false); - - if (c != "\r" && c != "\n") { - break; - } - } - end = p + 1; - lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end, false); - } - var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak); - return result; - }; - return TextSnapshot; - })(); - Formatting.TextSnapshot = TextSnapshot; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextSnapshotLine = (function () { - function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) { - this._snapshot = _snapshot; - this._lineNumber = _lineNumber; - this._start = _start; - this._end = _end; - this._lineBreak = _lineBreak; + else if (tokenKind === 68 /* SetKeyword */) { + return parseSetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode); } - TextSnapshotLine.prototype.snapshot = function () { - return this._snapshot; - }; - - TextSnapshotLine.prototype.start = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._start); - }; - - TextSnapshotLine.prototype.startPosition = function () { - return this._start; - }; - - TextSnapshotLine.prototype.end = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end); - }; - - TextSnapshotLine.prototype.endPosition = function () { - return this._end; - }; - - TextSnapshotLine.prototype.endIncludingLineBreak = function () { - return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length); - }; - - TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () { - return this._end + this._lineBreak.length; - }; - - TextSnapshotLine.prototype.length = function () { - return this._end - this._start; - }; - - TextSnapshotLine.prototype.lineNumber = function () { - return this._lineNumber; - }; - - TextSnapshotLine.prototype.getText = function () { - return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end)); - }; - return TextSnapshotLine; - })(); - Formatting.TextSnapshotLine = TextSnapshotLine; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SnapshotPoint = (function () { - function SnapshotPoint(snapshot, position) { - this.snapshot = snapshot; - this.position = position; + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function parseGetMemberAccessorDeclaration(modifiers, getKeyword, checkForStrictMode) { + return new Parser.syntaxFactory.GetAccessorSyntax(parseNodeData, modifiers, consumeToken(getKeyword), eatPropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode)); + } + function parseSetMemberAccessorDeclaration(modifiers, setKeyword, checkForStrictMode) { + return new Parser.syntaxFactory.SetAccessorSyntax(parseNodeData, modifiers, consumeToken(setKeyword), eatPropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode)); + } + function isClassElement(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isClassElement(currentNode())) { + return true; } - SnapshotPoint.prototype.getContainingLine = function () { - return this.snapshot.getLineFromPosition(this.position); - }; - SnapshotPoint.prototype.add = function (offset) { - return new SnapshotPoint(this.snapshot, this.position + offset); - }; - return SnapshotPoint; - })(); - Formatting.SnapshotPoint = SnapshotPoint; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingContext = (function () { - function FormattingContext(snapshot, formattingRequestKind) { - this.snapshot = snapshot; - this.formattingRequestKind = formattingRequestKind; - this.currentTokenSpan = null; - this.nextTokenSpan = null; - this.contextNode = null; - this.currentTokenParent = null; - this.nextTokenParent = null; - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - TypeScript.Debug.assert(this.snapshot != null, "snapshot is null"); + var _modifierCount = modifierCount(); + return isConstructorDeclaration(_modifierCount) || isMemberFunctionDeclaration(_modifierCount, inErrorRecovery) || isAccessor(_modifierCount, inErrorRecovery) || isMemberVariableDeclaration(_modifierCount, inErrorRecovery) || isIndexMemberDeclaration(_modifierCount); + } + function tryParseClassElement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isClassElement(node)) { + consumeNode(node); + return node; } - FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) { - TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null"); - TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null"); - TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null"); - TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null"); - TypeScript.Debug.assert(commonParent != null, "commonParent is null"); - - this.currentTokenSpan = currentTokenSpan; - this.currentTokenParent = currentTokenParent; - this.nextTokenSpan = nextTokenSpan; - this.nextTokenParent = nextTokenParent; - this.contextNode = commonParent; - - this.contextNodeAllOnSameLine = null; - this.nextNodeAllOnSameLine = null; - this.tokensAreOnSameLine = null; - this.contextNodeBlockIsOnOneLine = null; - this.nextNodeBlockIsOnOneLine = null; - }; - - FormattingContext.prototype.ContextNodeAllOnSameLine = function () { - if (this.contextNodeAllOnSameLine === null) { - this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); + var _modifierCount = modifierCount(); + if (isConstructorDeclaration(_modifierCount)) { + return parseConstructorDeclaration(); + } + else if (isMemberFunctionDeclaration(_modifierCount, inErrorRecovery)) { + return parseMemberFunctionDeclaration(); + } + else if (isAccessor(_modifierCount, inErrorRecovery)) { + return parseAccessor(false); + } + else if (isMemberVariableDeclaration(_modifierCount, inErrorRecovery)) { + return parseMemberVariableDeclaration(); + } + else if (isIndexMemberDeclaration(_modifierCount)) { + return parseIndexMemberDeclaration(); + } + else { + return null; + } + } + function isConstructorDeclaration(modifierCount) { + return peekToken(modifierCount).kind() === 62 /* ConstructorKeyword */; + } + function parseConstructorDeclaration() { + var modifiers = parseModifiers(); + var constructorKeyword = eatToken(62 /* ConstructorKeyword */); + var callSignature = parseCallSignature(false); + var semicolonToken = null; + var block = null; + if (isBlock()) { + block = parseBlock(false, true); + } + else { + semicolonToken = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.ConstructorDeclarationSyntax(parseNodeData, modifiers, constructorKeyword, callSignature, block, semicolonToken); + } + function isMemberFunctionDeclaration(modifierCount, inErrorRecovery) { + return isPropertyName(peekToken(modifierCount), inErrorRecovery) && isCallSignature(modifierCount + 1); + } + function parseMemberFunctionDeclaration() { + var modifiers = parseModifiers(); + var propertyName = eatPropertyName(); + var callSignature = parseCallSignature(false); + var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature); + var block = null; + var semicolon = null; + if (parseBlockEvenWithNoOpenBrace || isBlock()) { + block = parseBlock(parseBlockEvenWithNoOpenBrace, true); + } + else { + semicolon = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.MemberFunctionDeclarationSyntax(parseNodeData, modifiers, propertyName, callSignature, block, semicolon); + } + function isDefinitelyMemberVariablePropertyName(index) { + if (TypeScript.SyntaxFacts.isAnyKeyword(peekToken(index).kind())) { + var nextToken = peekToken(index + 1); + switch (nextToken.kind()) { + case 78 /* SemicolonToken */: + case 107 /* EqualsToken */: + case 106 /* ColonToken */: + case 71 /* CloseBraceToken */: + case 10 /* EndOfFileToken */: + return true; + default: + return previousTokenHasTrailingNewLine(nextToken); } - - return this.contextNodeAllOnSameLine; - }; - - FormattingContext.prototype.NextNodeAllOnSameLine = function () { - if (this.nextNodeAllOnSameLine === null) { - this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); + } + else { + return true; + } + } + function isMemberVariableDeclaration(modifierCount, inErrorRecover) { + return isPropertyName(peekToken(modifierCount), inErrorRecover) && isDefinitelyMemberVariablePropertyName(modifierCount); + } + function parseMemberVariableDeclaration() { + return new Parser.syntaxFactory.MemberVariableDeclarationSyntax(parseNodeData, parseModifiers(), tryParseVariableDeclarator(true, true), eatExplicitOrAutomaticSemicolon(false)); + } + function isIndexMemberDeclaration(modifierCount) { + return isIndexSignature(modifierCount); + } + function parseIndexMemberDeclaration() { + return new Parser.syntaxFactory.IndexMemberDeclarationSyntax(parseNodeData, parseModifiers(), parseIndexSignature(), eatExplicitOrAutomaticSemicolon(false)); + } + function tryAddUnexpectedEqualsGreaterThanToken(callSignature) { + var token0 = currentToken(); + var hasEqualsGreaterThanToken = token0.kind() === 85 /* EqualsGreaterThanToken */; + if (hasEqualsGreaterThanToken) { + var _lastToken = TypeScript.lastToken(callSignature); + if (_lastToken && _lastToken.fullWidth() > 0) { + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]); + addDiagnostic(diagnostic); + consumeToken(token0); + if (Parser.syntaxFactory.isConcrete) { + addSkippedTokenAfterNode(callSignature, token0); + } + return true; } - - return this.nextNodeAllOnSameLine; - }; - - FormattingContext.prototype.TokensAreOnSameLine = function () { - if (this.tokensAreOnSameLine === null) { - var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start()); - var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start()); - - this.tokensAreOnSameLine = (startLine == endLine); + } + return false; + } + function isFunctionDeclaration(modifierCount) { + return peekToken(modifierCount).kind() === 27 /* FunctionKeyword */; + } + function parseFunctionDeclaration() { + var modifiers = parseModifiers(); + var functionKeyword = eatToken(27 /* FunctionKeyword */); + var identifier = eatIdentifierToken(); + var callSignature = parseCallSignature(false); + var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature); + var semicolonToken = null; + var block = null; + if (parseBlockEvenWithNoOpenBrace || isBlock()) { + block = parseBlock(parseBlockEvenWithNoOpenBrace, true); + } + else { + semicolonToken = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.FunctionDeclarationSyntax(parseNodeData, modifiers, functionKeyword, identifier, callSignature, block, semicolonToken); + } + function parseModuleDeclaration() { + var modifiers = parseModifiers(); + var moduleKeyword = eatToken(65 /* ModuleKeyword */); + var moduleName = null; + var stringLiteral = null; + if (currentToken().kind() === 14 /* StringLiteral */) { + stringLiteral = eatToken(14 /* StringLiteral */); + } + else { + moduleName = parseName(false); + } + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var moduleElements = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + moduleElements = parseSyntaxList(2 /* ModuleDeclaration_ModuleElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.ModuleDeclarationSyntax(parseNodeData, modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, eatToken(71 /* CloseBraceToken */)); + } + function parseInterfaceDeclaration() { + return new Parser.syntaxFactory.InterfaceDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(52 /* InterfaceKeyword */), eatIdentifierToken(), tryParseTypeParameterList(false), parseHeritageClauses(), parseObjectType()); + } + function parseObjectType() { + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var typeMembers = TypeScript.Syntax.emptySeparatedList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + typeMembers = parseSeparatedSyntaxList(9 /* ObjectType_TypeMembers */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.ObjectTypeSyntax(parseNodeData, openBraceToken, typeMembers, eatToken(71 /* CloseBraceToken */)); + } + function isTypeMember(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isTypeMember(currentNode())) { + return true; + } + return isCallSignature(0) || isConstructSignature() || isIndexSignature(0) || isMethodSignature(inErrorRecovery) || isPropertySignature(inErrorRecovery); + } + function tryParseTypeMember(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isTypeMember(node)) { + consumeNode(node); + return node; + } + if (isCallSignature(0)) { + return parseCallSignature(false); + } + else if (isConstructSignature()) { + return parseConstructSignature(); + } + else if (isIndexSignature(0)) { + return parseIndexSignature(); + } + else if (isMethodSignature(inErrorRecovery)) { + return parseMethodSignature(); + } + else if (isPropertySignature(inErrorRecovery)) { + return parsePropertySignature(); + } + else { + return null; + } + } + function parseConstructSignature() { + return new Parser.syntaxFactory.ConstructSignatureSyntax(parseNodeData, eatToken(31 /* NewKeyword */), parseCallSignature(false)); + } + function parseIndexSignature() { + var openBracketToken = eatToken(74 /* OpenBracketToken */); + var skippedTokens = getArray(); + var parameters = parseSeparatedSyntaxList(18 /* IndexSignature_Parameters */, skippedTokens); + openBracketToken = addSkippedTokensAfterToken(openBracketToken, skippedTokens); + return new Parser.syntaxFactory.IndexSignatureSyntax(parseNodeData, openBracketToken, parameters, eatToken(75 /* CloseBracketToken */), parseOptionalTypeAnnotation(false)); + } + function parseMethodSignature() { + return new Parser.syntaxFactory.MethodSignatureSyntax(parseNodeData, eatPropertyName(), tryEatToken(105 /* QuestionToken */), parseCallSignature(false)); + } + function parsePropertySignature() { + return new Parser.syntaxFactory.PropertySignatureSyntax(parseNodeData, eatPropertyName(), tryEatToken(105 /* QuestionToken */), parseOptionalTypeAnnotation(false)); + } + function isCallSignature(peekIndex) { + var tokenKind = peekToken(peekIndex).kind(); + return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */; + } + function isConstructSignature() { + if (currentToken().kind() !== 31 /* NewKeyword */) { + return false; + } + return isCallSignature(1); + } + function isIndexSignature(peekIndex) { + return peekToken(peekIndex).kind() === 74 /* OpenBracketToken */; + } + function isMethodSignature(inErrorRecovery) { + if (isPropertyName(currentToken(), inErrorRecovery)) { + if (isCallSignature(1)) { + return true; } - - return this.tokensAreOnSameLine; - }; - - FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { - if (this.contextNodeBlockIsOnOneLine === null) { - this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); + if (peekToken(1).kind() === 105 /* QuestionToken */ && isCallSignature(2)) { + return true; } - - return this.contextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { - if (this.nextNodeBlockIsOnOneLine === null) { - this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); + } + return false; + } + function isPropertySignature(inErrorRecovery) { + var _currentToken = currentToken(); + if (isModifier(_currentToken, 0)) { + if (!TypeScript.existsNewLineBetweenTokens(_currentToken, peekToken(1), source.text) && isPropertyName(peekToken(1), inErrorRecovery)) { + return false; } - - return this.nextNodeBlockIsOnOneLine; - }; - - FormattingContext.prototype.NodeIsOnOneLine = function (node) { - var startLine = this.snapshot.getLineNumberFromPosition(node.start()); - var endLine = this.snapshot.getLineNumberFromPosition(node.end()); - - return startLine == endLine; - }; - - FormattingContext.prototype.BlockIsOnOneLine = function (node) { - var start = node.fullStart(); - var block = node.node(); - var openBracePosition = start + TypeScript.Syntax.childOffset(block, block.openBraceToken); - var closeBracePosition = start + TypeScript.Syntax.childOffset(block, block.closeBraceToken); - - var startLine = this.snapshot.getLineNumberFromPosition(openBracePosition); - var endLine = this.snapshot.getLineNumberFromPosition(closeBracePosition); - - return startLine == endLine; - }; - return FormattingContext; - })(); - Formatting.FormattingContext = FormattingContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var FormattingManager = (function () { - function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) { - this.syntaxTree = syntaxTree; - this.snapshot = snapshot; - this.rulesProvider = rulesProvider; - this.options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); } - FormattingManager.prototype.formatSelection = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 1 /* FormatSelection */); - }; - - FormattingManager.prototype.formatDocument = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 0 /* FormatDocument */); - }; - - FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { - var span = TypeScript.TextSpan.fromBounds(minChar, limChar); - return this.formatSpan(span, 5 /* FormatOnPaste */); - }; - - FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var semicolonPositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (semicolonPositionedToken.kind() === 78 /* SemicolonToken */) { - var current = semicolonPositionedToken; - while (current.parent() !== null && current.parent().end() === semicolonPositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); + return isPropertyName(_currentToken, inErrorRecovery); + } + function isHeritageClause() { + var tokenKind = currentToken().kind(); + return tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */; + } + function isNotHeritageClauseTypeName() { + var tokenKind = currentToken().kind(); + if (tokenKind === 51 /* ImplementsKeyword */ || tokenKind === 48 /* ExtendsKeyword */) { + return isIdentifier(peekToken(1)); + } + return false; + } + function isHeritageClauseTypeName() { + if (isIdentifier(currentToken())) { + return !isNotHeritageClauseTypeName(); + } + return false; + } + function tryParseHeritageClause() { + var extendsOrImplementsKeyword = currentToken(); + var tokenKind = extendsOrImplementsKeyword.kind(); + if (tokenKind !== 48 /* ExtendsKeyword */ && tokenKind !== 51 /* ImplementsKeyword */) { + return null; + } + consumeToken(extendsOrImplementsKeyword); + var skippedTokens = getArray(); + var typeNames = parseSeparatedSyntaxList(11 /* HeritageClause_TypeNameList */, skippedTokens); + extendsOrImplementsKeyword = addSkippedTokensAfterToken(extendsOrImplementsKeyword, skippedTokens); + return new Parser.syntaxFactory.HeritageClauseSyntax(parseNodeData, extendsOrImplementsKeyword, typeNames); + } + function isInterfaceEnumClassModuleImportOrExport(modifierCount) { + var _currentToken = currentToken(); + if (modifierCount) { + switch (peekToken(modifierCount).kind()) { + case 49 /* ImportKeyword */: + case 65 /* ModuleKeyword */: + case 52 /* InterfaceKeyword */: + case 44 /* ClassKeyword */: + case 46 /* EnumKeyword */: + return true; + } + } + var nextToken = peekToken(1); + switch (_currentToken.kind()) { + case 65 /* ModuleKeyword */: + if (isIdentifier(nextToken) || nextToken.kind() === 14 /* StringLiteral */) { + return true; + } + break; + case 49 /* ImportKeyword */: + case 44 /* ClassKeyword */: + case 46 /* EnumKeyword */: + case 52 /* InterfaceKeyword */: + if (isIdentifier(nextToken)) { + return true; + } + break; + case 47 /* ExportKeyword */: + if (nextToken.kind() === 107 /* EqualsToken */) { + return true; + } + break; + } + return false; + } + function isStatement(modifierCount, inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isStatement(currentNode())) { + return true; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + var token1 = peekToken(1); + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { + return false; + } + break; + case 28 /* IfKeyword */: + case 70 /* OpenBraceToken */: + case 33 /* ReturnKeyword */: + case 34 /* SwitchKeyword */: + case 36 /* ThrowKeyword */: + case 15 /* BreakKeyword */: + case 18 /* ContinueKeyword */: + case 26 /* ForKeyword */: + case 42 /* WhileKeyword */: + case 43 /* WithKeyword */: + case 22 /* DoKeyword */: + case 38 /* TryKeyword */: + case 19 /* DebuggerKeyword */: + return true; + } + if (isInterfaceEnumClassModuleImportOrExport(modifierCount)) { + return false; + } + return isLabeledStatement(_currentToken) || isVariableStatement(modifierCount) || isFunctionDeclaration(modifierCount) || isEmptyStatement(_currentToken, inErrorRecovery) || isExpressionStatement(_currentToken); + } + function parseStatement(inErrorRecovery) { + return tryParseStatement(inErrorRecovery) || parseExpressionStatement(); + } + function tryParseStatement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isStatement(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + return tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount(), inErrorRecovery); + } + function tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount, inErrorRecovery) { + switch (currentTokenKind) { + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(peekToken(1))) { + return null; } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 3 /* FormatOnSemicolon */); - } - - return []; - }; - - FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) { - var sourceUnit = this.syntaxTree.sourceUnit(); - var closeBracePositionedToken = sourceUnit.findToken(caretPosition - 1); - - if (closeBracePositionedToken.kind() === 71 /* CloseBraceToken */) { - var current = closeBracePositionedToken; - while (current.parent() !== null && current.parent().end() === closeBracePositionedToken.end() && current.parent().kind() !== 1 /* List */) { - current = current.parent(); + else { + break; } - - var span = new TypeScript.TextSpan(current.fullStart(), current.fullWidth()); - - return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */); - } - - return []; - }; - - FormattingManager.prototype.formatOnEnter = function (caretPosition) { - var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); - - if (lineNumber > 0) { - var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1); - var currentLine = this.snapshot.getLineFromLineNumber(lineNumber); - var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition()); - - return this.formatSpan(span, 2 /* FormatOnEnter */); - } - - return []; - }; - - FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) { - var startLine = this.snapshot.getLineFromPosition(span.start()); - span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end()); - - var result = []; - - var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); - - formattingEdits.forEach(function (item) { - var edit = new TypeScript.Services.TextEdit(item.position, item.position + item.length, item.replaceWith); - result.push(edit); - }); - - return result; - }; - return FormattingManager; - })(); - Formatting.FormattingManager = FormattingManager; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (FormattingRequestKind) { - FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; - FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; - FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; - FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; - FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace"; - FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste"; - })(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {})); - var FormattingRequestKind = Formatting.FormattingRequestKind; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rule = (function () { - function Rule(Descriptor, Operation, Flag) { - if (typeof Flag === "undefined") { Flag = 0 /* None */; } - this.Descriptor = Descriptor; - this.Operation = Operation; - this.Flag = Flag; + case 28 /* IfKeyword */: + return parseIfStatement(_currentToken); + case 70 /* OpenBraceToken */: + return parseBlock(false, false); + case 33 /* ReturnKeyword */: + return parseReturnStatement(_currentToken); + case 34 /* SwitchKeyword */: + return parseSwitchStatement(_currentToken); + case 36 /* ThrowKeyword */: + return parseThrowStatement(_currentToken); + case 15 /* BreakKeyword */: + return parseBreakStatement(_currentToken); + case 18 /* ContinueKeyword */: + return parseContinueStatement(_currentToken); + case 26 /* ForKeyword */: + return parseForOrForInStatement(_currentToken); + case 42 /* WhileKeyword */: + return parseWhileStatement(_currentToken); + case 43 /* WithKeyword */: + return parseWithStatement(_currentToken); + case 22 /* DoKeyword */: + return parseDoStatement(_currentToken); + case 38 /* TryKeyword */: + return parseTryStatement(_currentToken); + case 19 /* DebuggerKeyword */: + return parseDebuggerStatement(_currentToken); } - Rule.prototype.toString = function () { - return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]"; - }; - return Rule; - })(); - Formatting.Rule = Rule; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleAction) { - RuleAction[RuleAction["Ignore"] = 0] = "Ignore"; - RuleAction[RuleAction["Space"] = 1] = "Space"; - RuleAction[RuleAction["NewLine"] = 2] = "NewLine"; - RuleAction[RuleAction["Delete"] = 3] = "Delete"; - })(Formatting.RuleAction || (Formatting.RuleAction = {})); - var RuleAction = Formatting.RuleAction; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleDescriptor = (function () { - function RuleDescriptor(LeftTokenRange, RightTokenRange) { - this.LeftTokenRange = LeftTokenRange; - this.RightTokenRange = RightTokenRange; + if (isInterfaceEnumClassModuleImportOrExport(modifierCount)) { + return null; } - RuleDescriptor.prototype.toString = function () { - return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]"; - }; - - RuleDescriptor.create1 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create2 = function (left, right) { - return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right)); - }; - - RuleDescriptor.create3 = function (left, right) { - return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right); - }; - - RuleDescriptor.create4 = function (left, right) { - return new RuleDescriptor(left, right); - }; - return RuleDescriptor; - })(); - Formatting.RuleDescriptor = RuleDescriptor; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (RuleFlags) { - RuleFlags[RuleFlags["None"] = 0] = "None"; - RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; - })(Formatting.RuleFlags || (Formatting.RuleFlags = {})); - var RuleFlags = Formatting.RuleFlags; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperation = (function () { - function RuleOperation() { - this.Context = null; - this.Action = null; + else if (isVariableStatement(modifierCount)) { + return parseVariableStatement(); + } + else if (isLabeledStatement(_currentToken)) { + return parseLabeledStatement(_currentToken); + } + else if (isFunctionDeclaration(modifierCount)) { + return parseFunctionDeclaration(); + } + else if (isEmptyStatement(_currentToken, inErrorRecovery)) { + return parseEmptyStatement(_currentToken); + } + else if (isExpressionStatement(_currentToken)) { + return parseExpressionStatement(); + } + else { + return null; + } + } + function parseDebuggerStatement(debuggerKeyword) { + return new Parser.syntaxFactory.DebuggerStatementSyntax(parseNodeData, consumeToken(debuggerKeyword), eatExplicitOrAutomaticSemicolon(false)); + } + function parseDoStatement(doKeyword) { + return new Parser.syntaxFactory.DoStatementSyntax(parseNodeData, consumeToken(doKeyword), parseStatement(false), eatToken(42 /* WhileKeyword */), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), eatExplicitOrAutomaticSemicolon(true)); + } + function isLabeledStatement(currentToken) { + return isIdentifier(currentToken) && peekToken(1).kind() === 106 /* ColonToken */; + } + function parseLabeledStatement(identifierToken) { + return new Parser.syntaxFactory.LabeledStatementSyntax(parseNodeData, consumeToken(identifierToken), eatToken(106 /* ColonToken */), parseStatement(false)); + } + function parseTryStatement(tryKeyword) { + var tryKeyword = consumeToken(tryKeyword); + var savedListParsingState = listParsingState; + listParsingState |= (1 << 6 /* TryBlock_Statements */); + var block = parseBlock(false, false); + listParsingState = savedListParsingState; + var catchClause = null; + if (currentToken().kind() === 17 /* CatchKeyword */) { + catchClause = parseCatchClause(); + } + var finallyClause = null; + if (catchClause === null || currentToken().kind() === 25 /* FinallyKeyword */) { + finallyClause = parseFinallyClause(); + } + return new Parser.syntaxFactory.TryStatementSyntax(parseNodeData, tryKeyword, block, catchClause, finallyClause); + } + function parseCatchClauseBlock() { + var savedListParsingState = listParsingState; + listParsingState |= (1 << 7 /* CatchBlock_Statements */); + var block = parseBlock(false, false); + listParsingState = savedListParsingState; + return block; + } + function parseCatchClause() { + return new Parser.syntaxFactory.CatchClauseSyntax(parseNodeData, eatToken(17 /* CatchKeyword */), eatToken(72 /* OpenParenToken */), eatIdentifierToken(), parseOptionalTypeAnnotation(false), eatToken(73 /* CloseParenToken */), parseCatchClauseBlock()); + } + function parseFinallyClause() { + return new Parser.syntaxFactory.FinallyClauseSyntax(parseNodeData, eatToken(25 /* FinallyKeyword */), parseBlock(false, false)); + } + function parseWithStatement(withKeyword) { + return new Parser.syntaxFactory.WithStatementSyntax(parseNodeData, consumeToken(withKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function parseWhileStatement(whileKeyword) { + return new Parser.syntaxFactory.WhileStatementSyntax(parseNodeData, consumeToken(whileKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function isEmptyStatement(currentToken, inErrorRecovery) { + if (inErrorRecovery) { + return false; + } + return currentToken.kind() === 78 /* SemicolonToken */; + } + function parseEmptyStatement(semicolonToken) { + return new Parser.syntaxFactory.EmptyStatementSyntax(parseNodeData, consumeToken(semicolonToken)); + } + function parseForOrForInStatement(forKeyword) { + consumeToken(forKeyword); + var openParenToken = eatToken(72 /* OpenParenToken */); + var _currentToken = currentToken(); + var tokenKind = _currentToken.kind(); + if (tokenKind === 40 /* VarKeyword */) { + return parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken); + } + else if (tokenKind === 78 /* SemicolonToken */) { + return parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken); + } + else { + return parseForOrForInStatementWithInitializer(forKeyword, openParenToken); + } + } + function parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken) { + var variableDeclaration = parseVariableDeclaration(false); + return currentToken().kind() === 29 /* InKeyword */ ? parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null) : parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); + } + function parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, initializer) { + return new Parser.syntaxFactory.ForInStatementSyntax(parseNodeData, forKeyword, openParenToken, variableDeclaration, initializer, eatToken(29 /* InKeyword */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function parseForOrForInStatementWithInitializer(forKeyword, openParenToken) { + var initializer = parseExpression(false); + return currentToken().kind() === 29 /* InKeyword */ ? parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer) : parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); + } + function parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken) { + return parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null); + } + function tryParseForStatementCondition() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 78 /* SemicolonToken */ && tokenKind !== 73 /* CloseParenToken */ && tokenKind !== 10 /* EndOfFileToken */) { + return parseExpression(true); } - RuleOperation.prototype.toString = function () { - return "[context=" + this.Context + "," + "action=" + this.Action + "]"; - }; - - RuleOperation.create1 = function (action) { - return RuleOperation.create2(Formatting.RuleOperationContext.Any, action); - }; - - RuleOperation.create2 = function (context, action) { - var result = new RuleOperation(); - result.Context = context; - result.Action = action; - return result; - }; - return RuleOperation; - })(); - Formatting.RuleOperation = RuleOperation; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RuleOperationContext = (function () { - function RuleOperationContext() { - var funcs = []; - for (var _i = 0; _i < (arguments.length - 0); _i++) { - funcs[_i] = arguments[_i + 0]; - } - this.customContextChecks = funcs; + return null; + } + function tryParseForStatementIncrementor() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 73 /* CloseParenToken */ && tokenKind !== 10 /* EndOfFileToken */) { + return parseExpression(true); } - RuleOperationContext.prototype.IsAny = function () { - { - return this == RuleOperationContext.Any; - } - }; - - RuleOperationContext.prototype.InContext = function (context) { - if (this.IsAny()) { - return true; - } - - for (var i = 0, len = this.customContextChecks.length; i < len; i++) { - if (!this.customContextChecks[i](context)) { - return false; - } + return null; + } + function parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, initializer) { + return new Parser.syntaxFactory.ForStatementSyntax(parseNodeData, forKeyword, openParenToken, variableDeclaration, initializer, eatToken(78 /* SemicolonToken */), tryParseForStatementCondition(), eatToken(78 /* SemicolonToken */), tryParseForStatementIncrementor(), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function tryEatBreakOrContinueLabel() { + var identifier = null; + if (!canEatExplicitOrAutomaticSemicolon(false)) { + if (isIdentifier(currentToken())) { + return eatIdentifierToken(); } + } + return null; + } + function parseBreakStatement(breakKeyword) { + return new Parser.syntaxFactory.BreakStatementSyntax(parseNodeData, consumeToken(breakKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseContinueStatement(continueKeyword) { + return new Parser.syntaxFactory.ContinueStatementSyntax(parseNodeData, consumeToken(continueKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseSwitchStatement(switchKeyword) { + consumeToken(switchKeyword); + var openParenToken = eatToken(72 /* OpenParenToken */); + var expression = parseExpression(true); + var closeParenToken = eatToken(73 /* CloseParenToken */); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var switchClauses = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + switchClauses = parseSyntaxList(3 /* SwitchStatement_SwitchClauses */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.SwitchStatementSyntax(parseNodeData, switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, eatToken(71 /* CloseBraceToken */)); + } + function isSwitchClause() { + if (TypeScript.SyntaxUtilities.isSwitchClause(currentNode())) { return true; - }; - RuleOperationContext.Any = new RuleOperationContext(); - return RuleOperationContext; - })(); - Formatting.RuleOperationContext = RuleOperationContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Rules = (function () { - function Rules() { - this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */)); - this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(7 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */)); - - this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 106 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 105 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(106 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */)); - - this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 23 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 42 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 75 /* CloseBracketToken */, 79 /* CommaToken */, 78 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(75 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments; - this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([11 /* IdentifierName */, 6 /* MultiLineCommentTrivia */]); - this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 6 /* MultiLineCommentTrivia */, 22 /* DoKeyword */, 38 /* TryKeyword */, 25 /* FinallyKeyword */, 23 /* ElseKeyword */]); - this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); - this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */)); - - this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); - - this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(93 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(94 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(93 /* PlusPlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(94 /* MinusMinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 79 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([40 /* VarKeyword */, 36 /* ThrowKeyword */, 31 /* NewKeyword */, 21 /* DeleteKeyword */, 33 /* ReturnKeyword */, 39 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */)); - this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(27 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */)); - this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(41 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */)); - - this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(33 /* ReturnKeyword */, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 22 /* DoKeyword */, 23 /* ElseKeyword */, 16 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */)); - - this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([38 /* TryKeyword */, 25 /* FinallyKeyword */]), 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([64 /* GetKeyword */, 68 /* SetKeyword */]), 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - - this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - - this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(62 /* ConstructorKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([65 /* ModuleKeyword */, 66 /* RequireKeyword */]), 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([44 /* ClassKeyword */, 63 /* DeclareKeyword */, 46 /* EnumKeyword */, 47 /* ExportKeyword */, 48 /* ExtendsKeyword */, 64 /* GetKeyword */, 51 /* ImplementsKeyword */, 49 /* ImportKeyword */, 52 /* InterfaceKeyword */, 65 /* ModuleKeyword */, 55 /* PrivateKeyword */, 57 /* PublicKeyword */, 68 /* SetKeyword */, 58 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([48 /* ExtendsKeyword */, 51 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(14 /* StringLiteral */, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */)); - - this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(85 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - - this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(77 /* DotDotDotToken */, 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); - - this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseParenToken */, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([72 /* OpenParenToken */, 74 /* OpenBracketToken */, 81 /* GreaterThanToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); - - this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */)); - - this.HighPriorityCommonRules = [ - this.IgnoreBeforeComment, this.IgnoreAfterLineComment, - this.NoSpaceBeforeColon, this.SpaceAfterColon, this.NoSpaceBeforeQMark, this.SpaceAfterQMark, - this.NoSpaceBeforeDot, this.NoSpaceAfterDot, - this.NoSpaceAfterUnaryPrefixOperator, - this.NoSpaceAfterUnaryPreincrementOperator, this.NoSpaceAfterUnaryPredecrementOperator, - this.NoSpaceBeforeUnaryPostincrementOperator, this.NoSpaceBeforeUnaryPostdecrementOperator, - this.SpaceAfterPostincrementWhenFollowedByAdd, - this.SpaceAfterAddWhenFollowedByUnaryPlus, this.SpaceAfterAddWhenFollowedByPreincrement, - this.SpaceAfterPostdecrementWhenFollowedBySubtract, - this.SpaceAfterSubtractWhenFollowedByUnaryMinus, this.SpaceAfterSubtractWhenFollowedByPredecrement, - this.NoSpaceAfterCloseBrace, - this.SpaceAfterOpenBrace, this.SpaceBeforeCloseBrace, this.NewLineBeforeCloseBraceInBlockContext, - this.SpaceAfterCloseBrace, this.SpaceBetweenCloseBraceAndElse, this.SpaceBetweenCloseBraceAndWhile, this.NoSpaceBetweenEmptyBraceBrackets, - this.SpaceAfterFunctionInFuncDecl, this.NewLineAfterOpenBraceInBlockContext, this.SpaceAfterGetSetInMember, - this.NoSpaceBetweenReturnAndSemicolon, - this.SpaceAfterCertainKeywords, - this.NoSpaceBeforeOpenParenInFuncCall, - this.SpaceBeforeBinaryKeywordOperator, this.SpaceAfterBinaryKeywordOperator, - this.SpaceAfterVoidOperator, - this.NoSpaceAfterConstructor, this.NoSpaceAfterModuleImport, - this.SpaceAfterCertainTypeScriptKeywords, this.SpaceBeforeCertainTypeScriptKeywords, - this.SpaceAfterModuleName, - this.SpaceAfterArrow, - this.NoSpaceAfterEllipsis, - this.NoSpaceAfterOptionalParameters, - this.NoSpaceBetweenEmptyInterfaceBraceBrackets, - this.NoSpaceBeforeOpenAngularBracket, - this.NoSpaceBetweenCloseParenAndAngularBracket, - this.NoSpaceAfterOpenAngularBracket, - this.NoSpaceBeforeCloseAngularBracket, - this.NoSpaceAfterCloseAngularBracket - ]; - - this.LowPriorityCommonRules = [ - this.NoSpaceBeforeSemicolon, - this.SpaceBeforeOpenBraceInControl, this.SpaceBeforeOpenBraceInFunction, this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, - this.NoSpaceBeforeComma, - this.NoSpaceBeforeOpenBracket, this.NoSpaceAfterOpenBracket, - this.NoSpaceBeforeCloseBracket, this.NoSpaceAfterCloseBracket, - this.SpaceAfterSemicolon, - this.NoSpaceBeforeOpenParenInFuncDecl, - this.SpaceBetweenStatements, this.SpaceAfterTryFinally - ]; - - this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); - this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); - - this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */)); - this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */)); - - this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); - - this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */)); - this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */)); - - this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); - this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenParenToken */, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); - - this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); - this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */)); } - Rules.prototype.getRuleName = function (rule) { - var o = this; - for (var name in o) { - if (o[name] === rule) { - return name; + var currentTokenKind = currentToken().kind(); + return currentTokenKind === 16 /* CaseKeyword */ || currentTokenKind === 20 /* DefaultKeyword */; + } + function tryParseSwitchClause() { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isSwitchClause(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var kind = _currentToken.kind(); + if (kind === 16 /* CaseKeyword */) { + return parseCaseSwitchClause(_currentToken); + } + else if (kind === 20 /* DefaultKeyword */) { + return parseDefaultSwitchClause(_currentToken); + } + else { + return null; + } + } + function parseCaseSwitchClause(caseKeyword) { + consumeToken(caseKeyword); + var expression = parseExpression(true); + var colonToken = eatToken(106 /* ColonToken */); + var statements = TypeScript.Syntax.emptyList(); + if (colonToken.fullWidth() > 0) { + var skippedTokens = getArray(); + statements = parseSyntaxList(4 /* SwitchClause_Statements */, skippedTokens); + colonToken = addSkippedTokensAfterToken(colonToken, skippedTokens); + } + return new Parser.syntaxFactory.CaseSwitchClauseSyntax(parseNodeData, caseKeyword, expression, colonToken, statements); + } + function parseDefaultSwitchClause(defaultKeyword) { + consumeToken(defaultKeyword); + var colonToken = eatToken(106 /* ColonToken */); + var statements = TypeScript.Syntax.emptyList(); + if (colonToken.fullWidth() > 0) { + var skippedTokens = getArray(); + statements = parseSyntaxList(4 /* SwitchClause_Statements */, skippedTokens); + colonToken = addSkippedTokensAfterToken(colonToken, skippedTokens); + } + return new Parser.syntaxFactory.DefaultSwitchClauseSyntax(parseNodeData, defaultKeyword, colonToken, statements); + } + function parseThrowStatementExpression() { + return canEatExplicitOrAutomaticSemicolon(false) ? createMissingToken(11 /* IdentifierName */, null) : parseExpression(true); + } + function parseThrowStatement(throwKeyword) { + return new Parser.syntaxFactory.ThrowStatementSyntax(parseNodeData, consumeToken(throwKeyword), parseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(false)); + } + function tryParseReturnStatementExpression() { + return !canEatExplicitOrAutomaticSemicolon(false) ? parseExpression(true) : null; + } + function parseReturnStatement(returnKeyword) { + return new Parser.syntaxFactory.ReturnStatementSyntax(parseNodeData, consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(false)); + } + function isExpressionStatement(currentToken) { + var tokenKind = currentToken.kind(); + return tokenKind !== 70 /* OpenBraceToken */ && tokenKind !== 27 /* FunctionKeyword */ && isExpression(currentToken); + } + function isAssignmentOrOmittedExpression() { + var _currentToken = currentToken(); + return _currentToken.kind() === 79 /* CommaToken */ || isExpression(_currentToken); + } + function tryParseAssignmentOrOmittedExpression() { + if (currentToken().kind() === 79 /* CommaToken */) { + return new Parser.syntaxFactory.OmittedExpressionSyntax(parseNodeData); + } + return tryParseAssignmentExpressionOrHigher(false, true); + } + function isExpression(currentToken) { + switch (currentToken.kind()) { + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 12 /* RegularExpressionLiteral */: + case 74 /* OpenBracketToken */: + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + case 89 /* PlusToken */: + case 90 /* MinusToken */: + case 102 /* TildeToken */: + case 101 /* ExclamationToken */: + case 70 /* OpenBraceToken */: + case 85 /* EqualsGreaterThanToken */: + case 118 /* SlashToken */: + case 119 /* SlashEqualsToken */: + case 50 /* SuperKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 31 /* NewKeyword */: + case 21 /* DeleteKeyword */: + case 41 /* VoidKeyword */: + case 39 /* TypeOfKeyword */: + case 27 /* FunctionKeyword */: + return true; + } + return isIdentifier(currentToken); + } + function parseExpressionStatement() { + return new Parser.syntaxFactory.ExpressionStatementSyntax(parseNodeData, parseExpression(true), eatExplicitOrAutomaticSemicolon(false)); + } + function parseIfStatement(ifKeyword) { + return new Parser.syntaxFactory.IfStatementSyntax(parseNodeData, consumeToken(ifKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false), parseOptionalElseClause()); + } + function parseOptionalElseClause() { + return currentToken().kind() === 23 /* ElseKeyword */ ? parseElseClause() : null; + } + function parseElseClause() { + return new Parser.syntaxFactory.ElseClauseSyntax(parseNodeData, eatToken(23 /* ElseKeyword */), parseStatement(false)); + } + function isVariableStatement(modifierCount) { + return peekToken(modifierCount).kind() === 40 /* VarKeyword */; + } + function parseVariableStatement() { + return new Parser.syntaxFactory.VariableStatementSyntax(parseNodeData, parseModifiers(), parseVariableDeclaration(true), eatExplicitOrAutomaticSemicolon(false)); + } + function parseVariableDeclaration(allowIn) { + var varKeyword = eatToken(40 /* VarKeyword */); + var listParsingState = allowIn ? 12 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */; + var skippedTokens = getArray(); + var variableDeclarators = parseSeparatedSyntaxList(listParsingState, skippedTokens); + varKeyword = addSkippedTokensAfterToken(varKeyword, skippedTokens); + return new Parser.syntaxFactory.VariableDeclarationSyntax(parseNodeData, varKeyword, variableDeclarators); + } + function isVariableDeclarator() { + var node = currentNode(); + if (node !== null && node.kind() === 225 /* VariableDeclarator */) { + return true; + } + return isIdentifier(currentToken()); + } + function canReuseVariableDeclaratorNode(node) { + if (node === null || node.kind() !== 225 /* VariableDeclarator */) { + return false; + } + var variableDeclarator = node; + return variableDeclarator.equalsValueClause === null; + } + function tryParseVariableDeclarator(allowIn, allowPropertyName) { + var node = currentNode(); + if (canReuseVariableDeclaratorNode(node)) { + consumeNode(node); + return node; + } + if (allowPropertyName) { + } + if (!allowPropertyName && !isIdentifier(currentToken())) { + return null; + } + var propertyName = allowPropertyName ? eatPropertyName() : eatIdentifierToken(); + var equalsValueClause = null; + var typeAnnotation = null; + if (propertyName.fullWidth() > 0) { + typeAnnotation = parseOptionalTypeAnnotation(false); + if (isEqualsValueClause(false)) { + equalsValueClause = parseEqualsValueClause(allowIn); + } + } + return new Parser.syntaxFactory.VariableDeclaratorSyntax(parseNodeData, propertyName, typeAnnotation, equalsValueClause); + } + function isEqualsValueClause(inParameter) { + var token0 = currentToken(); + if (token0.kind() === 107 /* EqualsToken */) { + return true; + } + if (!previousTokenHasTrailingNewLine(token0)) { + var tokenKind = token0.kind(); + if (tokenKind === 85 /* EqualsGreaterThanToken */) { + return false; + } + if (tokenKind === 70 /* OpenBraceToken */ && inParameter) { + return false; + } + return isExpression(token0); + } + return false; + } + function parseEqualsValueClause(allowIn) { + return new Parser.syntaxFactory.EqualsValueClauseSyntax(parseNodeData, eatToken(107 /* EqualsToken */), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + function parseExpression(allowIn) { + var leftOperand = tryParseAssignmentExpressionOrHigher(true, allowIn); + while (true) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 79 /* CommaToken */) { + break; + } + leftOperand = new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + return leftOperand; + } + function tryParseAssignmentExpressionOrHigher(force, allowIn) { + var _currentToken = currentToken(); + var arrowFunction = tryParseAnyArrowFunctionExpression(_currentToken); + if (arrowFunction !== null) { + return arrowFunction; + } + var leftOperand = tryParseBinaryExpressionOrHigher(_currentToken, force, 1 /* Lowest */, allowIn); + if (leftOperand === null) { + return null; + } + if (TypeScript.SyntaxUtilities.isLeftHandSizeExpression(leftOperand)) { + var operatorToken = currentOperatorToken(); + if (TypeScript.SyntaxFacts.isAssignmentOperatorToken(operatorToken.kind())) { + return new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + } + return parseConditionalExpressionRest(allowIn, leftOperand); + } + function tryParseAnyArrowFunctionExpression(_currentToken) { + return isSimpleArrowFunctionExpression(_currentToken) ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); + } + function tryParseUnaryExpressionOrHigher(_currentToken, force) { + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 89 /* PlusToken */: + case 90 /* MinusToken */: + case 102 /* TildeToken */: + case 101 /* ExclamationToken */: + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + return new Parser.syntaxFactory.PrefixUnaryExpressionSyntax(parseNodeData, consumeToken(_currentToken), tryParseUnaryExpressionOrHigher(currentToken(), true)); + case 39 /* TypeOfKeyword */: + return parseTypeOfExpression(_currentToken); + case 41 /* VoidKeyword */: + return parseVoidExpression(_currentToken); + case 21 /* DeleteKeyword */: + return parseDeleteExpression(_currentToken); + case 80 /* LessThanToken */: + return parseCastExpression(_currentToken); + default: + return tryParsePostfixExpressionOrHigher(_currentToken, force); + } + } + function tryParseBinaryExpressionOrHigher(_currentToken, force, precedence, allowIn) { + var leftOperand = tryParseUnaryExpressionOrHigher(_currentToken, force); + if (leftOperand === null) { + return null; + } + return parseBinaryExpressionRest(precedence, allowIn, leftOperand); + } + function parseConditionalExpressionRest(allowIn, leftOperand) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 105 /* QuestionToken */) { + return leftOperand; + } + return new Parser.syntaxFactory.ConditionalExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), tryParseAssignmentExpressionOrHigher(true, true), eatToken(106 /* ColonToken */), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + function parseBinaryExpressionRest(precedence, allowIn, leftOperand) { + while (true) { + var operatorToken = currentOperatorToken(); + var tokenKind = operatorToken.kind(); + if (!TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(tokenKind) || tokenKind === 79 /* CommaToken */ || TypeScript.SyntaxFacts.isAssignmentOperatorToken(tokenKind)) { + break; + } + if (tokenKind === 29 /* InKeyword */ && !allowIn) { + break; + } + var newPrecedence = getBinaryExpressionPrecedence(tokenKind); + if (newPrecedence <= precedence) { + break; + } + leftOperand = new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseBinaryExpressionOrHigher(currentToken(), true, newPrecedence, allowIn)); + } + return leftOperand; + } + function currentOperatorToken() { + var token0 = currentToken(); + if (token0.kind() === 81 /* GreaterThanToken */) { + return currentContextualToken(); + } + return token0; + } + function tryParseMemberExpressionOrHigher(_currentToken, force, inObjectCreation) { + var expression = tryParsePrimaryExpression(_currentToken, force); + if (expression === null) { + return null; + } + return parseMemberExpressionRest(expression, inObjectCreation); + } + function parseCallExpressionRest(expression) { + while (true) { + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 72 /* OpenParenToken */: + expression = new Parser.syntaxFactory.InvocationExpressionSyntax(parseNodeData, expression, parseArgumentList(null)); + continue; + case 80 /* LessThanToken */: + var argumentList = tryParseArgumentList(); + if (argumentList === null) { + break; + } + expression = new Parser.syntaxFactory.InvocationExpressionSyntax(parseNodeData, expression, argumentList); + continue; + case 74 /* OpenBracketToken */: + expression = parseElementAccessExpression(expression, _currentToken, false); + continue; + case 76 /* DotToken */: + expression = new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + continue; + } + return expression; + } + } + function parseMemberExpressionRest(expression, inObjectCreation) { + while (true) { + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 74 /* OpenBracketToken */: + expression = parseElementAccessExpression(expression, _currentToken, inObjectCreation); + continue; + case 76 /* DotToken */: + expression = new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + continue; + } + return expression; + } + } + function tryParseLeftHandSideExpressionOrHigher(_currentToken, force) { + var expression = null; + if (_currentToken.kind() === 50 /* SuperKeyword */) { + expression = parseSuperExpression(_currentToken); + } + else { + expression = tryParseMemberExpressionOrHigher(_currentToken, force, false); + if (expression === null) { + return null; + } + } + return parseCallExpressionRest(expression); + } + function parseSuperExpression(superToken) { + var expression = consumeToken(superToken); + var currentTokenKind = currentToken().kind(); + return currentTokenKind === 72 /* OpenParenToken */ || currentTokenKind === 76 /* DotToken */ ? expression : new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, eatToken(76 /* DotToken */), eatIdentifierNameToken()); + } + function tryParsePostfixExpressionOrHigher(_currentToken, force) { + var expression = tryParseLeftHandSideExpressionOrHigher(_currentToken, force); + if (expression === null) { + return null; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + if (previousTokenHasTrailingNewLine(_currentToken)) { + break; } + return new Parser.syntaxFactory.PostfixUnaryExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken)); + } + return expression; + } + function tryParseGenericArgumentList() { + var rewindPoint = getRewindPoint(); + var typeArgumentList = tryParseTypeArgumentList(true); + var token0 = currentToken(); + var tokenKind = token0.kind(); + var isOpenParen = tokenKind === 72 /* OpenParenToken */; + var isDot = tokenKind === 76 /* DotToken */; + var isOpenParenOrDot = isOpenParen || isDot; + var argumentList = null; + if (typeArgumentList === null || !isOpenParenOrDot) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + if (isDot) { + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null); + addDiagnostic(diagnostic); + return new Parser.syntaxFactory.ArgumentListSyntax(parseNodeData, typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList(), TypeScript.Syntax.emptyToken(73 /* CloseParenToken */)); } - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null)); - }; - - Rules.IsForContext = function (context) { - return context.contextNode.kind() === 154 /* ForStatement */; - }; - - Rules.IsNotForContext = function (context) { - return !Rules.IsForContext(context); - }; - - Rules.IsBinaryOpContext = function (context) { - switch (context.contextNode.kind()) { - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 186 /* ConditionalExpression */: - case 187 /* LogicalOrExpression */: - case 188 /* LogicalAndExpression */: - case 189 /* BitwiseOrExpression */: - case 190 /* BitwiseExclusiveOrExpression */: - case 191 /* BitwiseAndExpression */: - case 192 /* EqualsWithTypeConversionExpression */: - case 193 /* NotEqualsWithTypeConversionExpression */: - case 194 /* EqualsExpression */: - case 195 /* NotEqualsExpression */: - case 196 /* LessThanExpression */: - case 197 /* GreaterThanExpression */: - case 198 /* LessThanOrEqualExpression */: - case 199 /* GreaterThanOrEqualExpression */: - case 200 /* InstanceOfExpression */: - case 201 /* InExpression */: - case 202 /* LeftShiftExpression */: - case 203 /* SignedRightShiftExpression */: - case 204 /* UnsignedRightShiftExpression */: - case 205 /* MultiplyExpression */: - case 206 /* DivideExpression */: - case 207 /* ModuloExpression */: - case 208 /* AddExpression */: - case 209 /* SubtractExpression */: - return true; - - case 133 /* ImportDeclaration */: - - case 225 /* VariableDeclarator */: - case 232 /* EqualsValueClause */: - return context.currentTokenSpan.kind() === 107 /* EqualsToken */ || context.nextTokenSpan.kind() === 107 /* EqualsToken */; - - case 155 /* ForInStatement */: - return context.currentTokenSpan.kind() === 29 /* InKeyword */ || context.nextTokenSpan.kind() === 29 /* InKeyword */; + else { + return parseArgumentList(typeArgumentList); + } + } + } + function tryParseArgumentList() { + var tokenKind = currentToken().kind(); + if (tokenKind === 80 /* LessThanToken */) { + return tryParseGenericArgumentList(); + } + if (tokenKind === 72 /* OpenParenToken */) { + return parseArgumentList(null); + } + return null; + } + function parseArgumentList(typeArgumentList) { + var openParenToken = eatToken(72 /* OpenParenToken */); + var _arguments = TypeScript.Syntax.emptySeparatedList(); + if (openParenToken.fullWidth() > 0) { + var skippedTokens = getArray(); + _arguments = parseSeparatedSyntaxList(14 /* ArgumentList_AssignmentExpressions */, skippedTokens); + openParenToken = addSkippedTokensAfterToken(openParenToken, skippedTokens); + } + return new Parser.syntaxFactory.ArgumentListSyntax(parseNodeData, typeArgumentList, openParenToken, _arguments, eatToken(73 /* CloseParenToken */)); + } + function tryParseArgumentListExpression() { + var force = currentToken().kind() === 79 /* CommaToken */; + return tryParseAssignmentExpressionOrHigher(force, true); + } + function parseElementAccessArgumentExpression(openBracketToken, inObjectCreation) { + if (inObjectCreation && currentToken().kind() === 75 /* CloseBracketToken */) { + var errorStart = TypeScript.start(openBracketToken, source.text); + var errorEnd = TypeScript.end(currentToken(), source.text); + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), errorStart, errorEnd - errorStart, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null); + addDiagnostic(diagnostic); + return TypeScript.Syntax.emptyToken(11 /* IdentifierName */); + } + else { + return parseExpression(true); + } + } + function parseElementAccessExpression(expression, openBracketToken, inObjectCreation) { + return new Parser.syntaxFactory.ElementAccessExpressionSyntax(parseNodeData, expression, consumeToken(openBracketToken), parseElementAccessArgumentExpression(openBracketToken, inObjectCreation), eatToken(75 /* CloseBracketToken */)); + } + function tryParsePrimaryExpression(_currentToken, force) { + if (isIdentifier(_currentToken)) { + return eatIdentifierToken(); + } + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 13 /* NumericLiteral */: + case 12 /* RegularExpressionLiteral */: + case 14 /* StringLiteral */: + return consumeToken(_currentToken); + case 27 /* FunctionKeyword */: + return parseFunctionExpression(_currentToken); + case 74 /* OpenBracketToken */: + return parseArrayLiteralExpression(_currentToken); + case 70 /* OpenBraceToken */: + return parseObjectLiteralExpression(_currentToken); + case 72 /* OpenParenToken */: + return parseParenthesizedExpression(_currentToken); + case 31 /* NewKeyword */: + return parseObjectCreationExpression(_currentToken); + case 118 /* SlashToken */: + case 119 /* SlashEqualsToken */: + var result = tryReparseDivideAsRegularExpression(); + return result || eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected); + } + if (!force) { + return null; + } + return eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected); + } + function tryReparseDivideAsRegularExpression() { + var currentToken = currentContextualToken(); + var tokenKind = currentToken.kind(); + if (tokenKind === 118 /* SlashToken */ || tokenKind === 119 /* SlashEqualsToken */) { + return null; + } + else if (tokenKind === 12 /* RegularExpressionLiteral */) { + return consumeToken(currentToken); + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function parseTypeOfExpression(typeOfKeyword) { + return new Parser.syntaxFactory.TypeOfExpressionSyntax(parseNodeData, consumeToken(typeOfKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseDeleteExpression(deleteKeyword) { + return new Parser.syntaxFactory.DeleteExpressionSyntax(parseNodeData, consumeToken(deleteKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseVoidExpression(voidKeyword) { + return new Parser.syntaxFactory.VoidExpressionSyntax(parseNodeData, consumeToken(voidKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseFunctionExpression(functionKeyword) { + return new Parser.syntaxFactory.FunctionExpressionSyntax(parseNodeData, consumeToken(functionKeyword), eatOptionalIdentifierToken(), parseCallSignature(false), parseBlock(false, true)); + } + function parseObjectCreationExpression(newKeyword) { + return new Parser.syntaxFactory.ObjectCreationExpressionSyntax(parseNodeData, consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), true, true), tryParseArgumentList()); + } + function parseCastExpression(lessThanToken) { + return new Parser.syntaxFactory.CastExpressionSyntax(parseNodeData, consumeToken(lessThanToken), parseType(), eatToken(81 /* GreaterThanToken */), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseParenthesizedExpression(openParenToken) { + return new Parser.syntaxFactory.ParenthesizedExpressionSyntax(parseNodeData, consumeToken(openParenToken), parseExpression(true), eatToken(73 /* CloseParenToken */)); + } + function tryParseParenthesizedArrowFunctionExpression() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) { + return null; + } + if (isDefinitelyArrowFunctionExpression()) { + return tryParseParenthesizedArrowFunctionExpressionWorker(false); + } + if (!isPossiblyArrowFunctionExpression()) { + return null; + } + var rewindPoint = getRewindPoint(); + var arrowFunction = tryParseParenthesizedArrowFunctionExpressionWorker(true); + if (arrowFunction === null) { + rewind(rewindPoint); + } + releaseRewindPoint(rewindPoint); + return arrowFunction; + } + function tryParseParenthesizedArrowFunctionExpressionWorker(requireArrow) { + var _currentToken = currentToken(); + var callSignature = parseCallSignature(true); + if (requireArrow && currentToken().kind() !== 85 /* EqualsGreaterThanToken */) { + return null; + } + var equalsGreaterThanToken = eatToken(85 /* EqualsGreaterThanToken */); + var block = tryParseArrowFunctionBlock(); + var expression = null; + if (block === null) { + expression = tryParseAssignmentExpressionOrHigher(true, true); + } + return new Parser.syntaxFactory.ParenthesizedArrowFunctionExpressionSyntax(parseNodeData, callSignature, equalsGreaterThanToken, block, expression); + } + function tryParseArrowFunctionBlock() { + if (isBlock()) { + return parseBlock(false, false); + } + else { + var _modifierCount = modifierCount(); + if (isStatement(_modifierCount, false) && !isExpressionStatement(currentToken()) && !isFunctionDeclaration(_modifierCount)) { + return parseBlock(true, false); } + else { + return null; + } + } + } + function isSimpleArrowFunctionExpression(_currentToken) { + if (_currentToken.kind() === 85 /* EqualsGreaterThanToken */) { + return true; + } + return isIdentifier(_currentToken) && peekToken(1).kind() === 85 /* EqualsGreaterThanToken */; + } + function parseSimpleArrowFunctionExpression() { + var parameter = eatSimpleParameter(); + var equalsGreaterThanToken = eatToken(85 /* EqualsGreaterThanToken */); + var block = tryParseArrowFunctionBlock(); + var expression = null; + if (block === null) { + expression = tryParseAssignmentExpressionOrHigher(true, true); + } + return new Parser.syntaxFactory.SimpleArrowFunctionExpressionSyntax(parseNodeData, parameter, equalsGreaterThanToken, block, expression); + } + function isBlock() { + return currentToken().kind() === 70 /* OpenBraceToken */; + } + function isDefinitelyArrowFunctionExpression() { + var token0 = currentToken(); + if (token0.kind() !== 72 /* OpenParenToken */) { return false; - }; - - Rules.IsNotBinaryOpContext = function (context) { - return !Rules.IsBinaryOpContext(context); - }; - - Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { - return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); - }; - - Rules.IsBeforeMultilineBlockContext = function (context) { - return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); - }; - - Rules.IsMultilineBlockContext = function (context) { - return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsSingleLineBlockContext = function (context) { - return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); - }; - - Rules.IsBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.contextNode); - }; - - Rules.IsBeforeBlockContext = function (context) { - return Rules.NodeIsBlockContext(context.nextTokenParent); - }; - - Rules.NodeIsBlockContext = function (node) { - if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { + } + var token1 = peekToken(1); + var token1Kind = token1.kind(); + var token2; + if (token1Kind === 73 /* CloseParenToken */) { + token2 = peekToken(2); + var token2Kind = token2.kind(); + return token2Kind === 106 /* ColonToken */ || token2Kind === 85 /* EqualsGreaterThanToken */ || token2Kind === 70 /* OpenBraceToken */; + } + if (token1Kind === 77 /* DotDotDotToken */) { + return true; + } + token2 = peekToken(2); + token2Kind = token2.kind(); + if (token1Kind === 57 /* PublicKeyword */ || token1Kind === 55 /* PrivateKeyword */) { + if (isIdentifier(token2)) { return true; } - - switch (node.kind()) { - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - return true; - } - + } + if (!isIdentifier(token1)) { return false; - }; - - Rules.IsFunctionDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 145 /* MethodSignature */: - case 142 /* CallSignature */: - case 222 /* FunctionExpression */: - case 137 /* ConstructorDeclaration */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 128 /* InterfaceDeclaration */: - return true; + } + if (token2Kind === 106 /* ColonToken */) { + return true; + } + var token3 = peekToken(3); + var token3Kind = token3.kind(); + if (token2Kind === 105 /* QuestionToken */) { + if (token3Kind === 106 /* ColonToken */ || token3Kind === 73 /* CloseParenToken */ || token3Kind === 79 /* CommaToken */) { + return true; } - - return false; - }; - - Rules.IsTypeScriptDeclWithBlockContext = function (context) { - return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); - }; - - Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { - switch (node.kind()) { - case 131 /* ClassDeclaration */: - case 132 /* EnumDeclaration */: - case 122 /* ObjectType */: - case 130 /* ModuleDeclaration */: - return true; + } + if (token2Kind === 73 /* CloseParenToken */) { + if (token3Kind === 85 /* EqualsGreaterThanToken */) { + return true; } - + } + return false; + } + function isPossiblyArrowFunctionExpression() { + var token0 = currentToken(); + if (token0.kind() !== 72 /* OpenParenToken */) { + return true; + } + var token1 = peekToken(1); + if (!isIdentifier(token1)) { return false; - }; - - Rules.IsAfterCodeBlockContext = function (context) { - switch (context.currentTokenParent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: + } + var token2 = peekToken(2); + var token2Kind = token2.kind(); + if (token2Kind === 107 /* EqualsToken */) { + return true; + } + if (token2Kind === 79 /* CommaToken */) { + return true; + } + if (token2Kind === 73 /* CloseParenToken */) { + var token3 = peekToken(3); + if (token3.kind() === 106 /* ColonToken */) { + return true; + } + } + return false; + } + function parseObjectLiteralExpression(openBraceToken) { + consumeToken(openBraceToken); + var skippedTokens = getArray(); + var propertyAssignments = parseSeparatedSyntaxList(15 /* ObjectLiteralExpression_PropertyAssignments */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + return new Parser.syntaxFactory.ObjectLiteralExpressionSyntax(parseNodeData, openBraceToken, propertyAssignments, eatToken(71 /* CloseBraceToken */)); + } + function tryParsePropertyAssignment(inErrorRecovery) { + if (isAccessor(modifierCount(), inErrorRecovery)) { + return parseAccessor(true); + } + else if (isFunctionPropertyAssignment(inErrorRecovery)) { + return parseFunctionPropertyAssignment(); + } + else if (isSimplePropertyAssignment(inErrorRecovery)) { + return parseSimplePropertyAssignment(); + } + else { + return null; + } + } + function isPropertyAssignment(inErrorRecovery) { + return isAccessor(modifierCount(), inErrorRecovery) || isFunctionPropertyAssignment(inErrorRecovery) || isSimplePropertyAssignment(inErrorRecovery); + } + function eatPropertyName() { + var _currentToken = currentToken(); + return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(_currentToken) ? eatIdentifierNameToken() : consumeToken(_currentToken); + } + function isFunctionPropertyAssignment(inErrorRecovery) { + return isPropertyName(currentToken(), inErrorRecovery) && isCallSignature(1); + } + function parseFunctionPropertyAssignment() { + return new Parser.syntaxFactory.FunctionPropertyAssignmentSyntax(parseNodeData, eatPropertyName(), parseCallSignature(false), parseBlock(false, true)); + } + function isSimplePropertyAssignment(inErrorRecovery) { + return isPropertyName(currentToken(), inErrorRecovery); + } + function parseSimplePropertyAssignment() { + return new Parser.syntaxFactory.SimplePropertyAssignmentSyntax(parseNodeData, eatPropertyName(), eatToken(106 /* ColonToken */), tryParseAssignmentExpressionOrHigher(true, true)); + } + function isPropertyName(token, inErrorRecovery) { + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { + if (inErrorRecovery) { + return isIdentifier(token); + } + else { + return true; + } + } + var kind = token.kind(); + return kind === 14 /* StringLiteral */ || kind === 13 /* NumericLiteral */; + } + function parseArrayLiteralExpression(openBracketToken) { + consumeToken(openBracketToken); + var skippedTokens = getArray(); + var expressions = parseSeparatedSyntaxList(16 /* ArrayLiteralExpression_AssignmentExpressions */, skippedTokens); + openBracketToken = addSkippedTokensAfterToken(openBracketToken, skippedTokens); + return new Parser.syntaxFactory.ArrayLiteralExpressionSyntax(parseNodeData, openBracketToken, expressions, eatToken(75 /* CloseBracketToken */)); + } + function parseBlock(parseBlockEvenWithNoOpenBrace, checkForStrictMode) { + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var statements = TypeScript.Syntax.emptyList(); + if (parseBlockEvenWithNoOpenBrace || openBraceToken.fullWidth() > 0) { + var savedIsInStrictMode = isInStrictMode; + var processItems = checkForStrictMode ? updateStrictModeState : null; + var skippedTokens = getArray(); + var statements = parseSyntaxList(5 /* Block_Statements */, skippedTokens, processItems); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + setStrictMode(savedIsInStrictMode); + } + return new Parser.syntaxFactory.BlockSyntax(parseNodeData, openBraceToken, statements, eatToken(71 /* CloseBraceToken */)); + } + function parseCallSignature(requireCompleteTypeParameterList) { + return new Parser.syntaxFactory.CallSignatureSyntax(parseNodeData, tryParseTypeParameterList(requireCompleteTypeParameterList), parseParameterList(), parseOptionalTypeAnnotation(false)); + } + function tryParseTypeParameterList(requireCompleteTypeParameterList) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 80 /* LessThanToken */) { + return null; + } + var rewindPoint = getRewindPoint(); + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeParameters = parseSeparatedSyntaxList(20 /* TypeParameterList_TypeParameters */, skippedTokens); + lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + var greaterThanToken = eatToken(81 /* GreaterThanToken */); + if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + return new Parser.syntaxFactory.TypeParameterListSyntax(parseNodeData, lessThanToken, typeParameters, greaterThanToken); + } + } + function isTypeParameter() { + return isIdentifier(currentToken()); + } + function tryParseTypeParameter() { + if (!isIdentifier(currentToken())) { + return null; + } + return new Parser.syntaxFactory.TypeParameterSyntax(parseNodeData, eatIdentifierToken(), tryParseConstraint()); + } + function tryParseConstraint() { + if (currentToken().kind() !== 48 /* ExtendsKeyword */) { + return null; + } + return new Parser.syntaxFactory.ConstraintSyntax(parseNodeData, eatToken(48 /* ExtendsKeyword */), parseTypeOrExpression()); + } + function tryParseParameterList() { + if (currentToken().kind() === 72 /* OpenParenToken */) { + var token1 = peekToken(1); + if (token1.kind() === 73 /* CloseParenToken */ || isParameterHelper(token1)) { + return parseParameterList(); + } + } + return null; + } + function parseParameterList() { + var openParenToken = eatToken(72 /* OpenParenToken */); + var parameters = TypeScript.Syntax.emptySeparatedList(); + if (openParenToken.fullWidth() > 0) { + var skippedTokens = getArray(); + parameters = parseSeparatedSyntaxList(17 /* ParameterList_Parameters */, skippedTokens); + openParenToken = addSkippedTokensAfterToken(openParenToken, skippedTokens); + } + return new Parser.syntaxFactory.ParameterListSyntax(parseNodeData, openParenToken, parameters, eatToken(73 /* CloseParenToken */)); + } + function parseOptionalTypeAnnotation(allowStringLiteral) { + return currentToken().kind() === 106 /* ColonToken */ ? parseTypeAnnotation(allowStringLiteral) : null; + } + function parseTypeAnnotationType(allowStringLiteral) { + if (allowStringLiteral) { + var _currentToken = currentToken(); + if (_currentToken.kind() === 14 /* StringLiteral */) { + return consumeToken(_currentToken); + } + } + return parseType(); + } + function parseTypeAnnotation(allowStringLiteral) { + return new Parser.syntaxFactory.TypeAnnotationSyntax(parseNodeData, consumeToken(currentToken()), parseTypeAnnotationType(allowStringLiteral)); + } + function isType() { + var _currentToken = currentToken(); + switch (_currentToken.kind()) { + case 39 /* TypeOfKeyword */: + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + case 41 /* VoidKeyword */: + case 70 /* OpenBraceToken */: + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + case 31 /* NewKeyword */: + return true; + default: + return isIdentifier(_currentToken); + } + } + function parseTypeOrExpression() { + var result = tryParseType(); + if (result) { + return result; + } + var _currentToken = currentToken(); + if (isExpression(_currentToken)) { + return tryParseUnaryExpressionOrHigher(_currentToken, true); + } + return eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected); + } + function parseType() { + return tryParseType() || eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected); + } + function tryParseType() { + var type = tryParseNonArrayType(); + while (type) { + var _currentToken = currentToken(); + if (previousTokenHasTrailingNewLine(_currentToken) || _currentToken.kind() !== 74 /* OpenBracketToken */) { + break; + } + type = new Parser.syntaxFactory.ArrayTypeSyntax(parseNodeData, type, consumeToken(_currentToken), eatToken(75 /* CloseBracketToken */)); + } + return type; + } + function parseTypeQuery(typeOfKeyword) { + return new Parser.syntaxFactory.TypeQuerySyntax(parseNodeData, consumeToken(typeOfKeyword), parseName(true)); + } + function tryParseNonArrayType() { + var _currentToken = currentToken(); + switch (_currentToken.kind()) { + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + if (peekToken(1).kind() === 76 /* DotToken */) { + break; + } + return consumeToken(_currentToken); + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + return tryParseFunctionType(); + case 41 /* VoidKeyword */: + return consumeToken(_currentToken); + case 70 /* OpenBraceToken */: + return parseObjectType(); + case 31 /* NewKeyword */: + return parseConstructorType(); + case 39 /* TypeOfKeyword */: + return parseTypeQuery(_currentToken); + } + return tryParseNameOrGenericType(); + } + function tryParseNameOrGenericType() { + var name = tryParseName(false); + if (name === null) { + return null; + } + if (previousTokenHasTrailingNewLine(currentToken())) { + return name; + } + var typeArgumentList = tryParseTypeArgumentList(false); + return typeArgumentList === null ? name : new Parser.syntaxFactory.GenericTypeSyntax(parseNodeData, name, typeArgumentList); + } + function tryParseFunctionType() { + var typeParameterList = tryParseTypeParameterList(false); + var parameterList = null; + if (typeParameterList === null) { + parameterList = tryParseParameterList(); + if (parameterList === null) { + return null; + } + } + else { + parameterList = parseParameterList(); + } + return new Parser.syntaxFactory.FunctionTypeSyntax(parseNodeData, typeParameterList, parameterList, eatToken(85 /* EqualsGreaterThanToken */), parseType()); + } + function parseConstructorType() { + return new Parser.syntaxFactory.ConstructorTypeSyntax(parseNodeData, eatToken(31 /* NewKeyword */), tryParseTypeParameterList(false), parseParameterList(), eatToken(85 /* EqualsGreaterThanToken */), parseType()); + } + function isParameter() { + if (currentNode() !== null && currentNode().kind() === 242 /* Parameter */) { + return true; + } + return isParameterHelper(currentToken()); + } + function isParameterHelper(token) { + var tokenKind = token.kind(); + return tokenKind === 77 /* DotDotDotToken */ || isModifierKind(tokenKind) || isIdentifier(token); + } + function eatSimpleParameter() { + return new Parser.syntaxFactory.ParameterSyntax(parseNodeData, null, TypeScript.Syntax.emptyList(), eatIdentifierToken(), null, null, null); + } + function tryParseParameter() { + var node = currentNode(); + if (node !== null && node.kind() === 242 /* Parameter */) { + consumeNode(node); + return node; + } + var dotDotDotToken = tryEatToken(77 /* DotDotDotToken */); + var modifiers = parseModifiers(); + var _currentToken = currentToken(); + if (!isIdentifier(_currentToken) && dotDotDotToken === null && modifiers.length === 0) { + if (isModifierKind(_currentToken.kind())) { + modifiers = TypeScript.Syntax.list([consumeToken(_currentToken)]); + } + else { + return null; + } + } + var identifier = eatIdentifierToken(); + var questionToken = tryEatToken(105 /* QuestionToken */); + var typeAnnotation = parseOptionalTypeAnnotation(true); + var equalsValueClause = null; + if (isEqualsValueClause(true)) { + equalsValueClause = parseEqualsValueClause(true); + } + return new Parser.syntaxFactory.ParameterSyntax(parseNodeData, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); + } + function parseSyntaxList(currentListType, skippedTokens, processItems) { + if (processItems === void 0) { processItems = null; } + var savedListParsingState = listParsingState; + listParsingState |= (1 << currentListType); + var result = parseSyntaxListWorker(currentListType, skippedTokens, processItems); + listParsingState = savedListParsingState; + return result; + } + function parseSeparatedSyntaxList(currentListType, skippedTokens) { + var savedListParsingState = listParsingState; + listParsingState |= (1 << currentListType); + var result = parseSeparatedSyntaxListWorker(currentListType, skippedTokens); + listParsingState = savedListParsingState; + return result; + } + function abortParsingListOrMoveToNextToken(currentListType, nodes, separators, skippedTokens) { + reportUnexpectedTokenDiagnostic(currentListType); + for (var state = ListParsingState.LastListParsingState; state >= ListParsingState.FirstListParsingState; state--) { + if ((listParsingState & (1 << state)) !== 0) { + if (isExpectedListTerminator(state) || isExpectedListItem(state, true)) { return true; + } + } + } + addSkippedTokenToList(nodes, separators, skippedTokens, consumeToken(currentToken())); + return false; + } + function addSkippedTokenToList(nodes, separators, skippedTokens, skippedToken) { + if (Parser.syntaxFactory.isConcrete) { + var length = nodes.length + (separators ? separators.length : 0); + for (var i = length - 1; i >= 0; i--) { + var array = separators && (i % 2 === 1) ? separators : nodes; + var arrayIndex = separators ? TypeScript.IntegerUtilities.integerDivide(i, 2) : i; + var item = array[arrayIndex]; + var _lastToken = TypeScript.lastToken(item); + if (_lastToken && _lastToken.fullWidth() > 0) { + array[arrayIndex] = addSkippedTokenAfterNodeOrToken(item, skippedToken); + return; + } } + skippedTokens.push(skippedToken); + } + } + function tryParseExpectedListItem(currentListType, inErrorRecovery, items, processItems) { + var item = tryParseExpectedListItemWorker(currentListType, inErrorRecovery); + if (item === null) { return false; - }; - - Rules.IsControlDeclContext = function (context) { - switch (context.contextNode.kind()) { - case 147 /* IfStatement */: - case 151 /* SwitchStatement */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 159 /* TryStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 235 /* ElseClause */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - return true; - - default: - return false; + } + items.push(item); + if (processItems !== null) { + processItems(items); + } + return true; + } + function listIsTerminated(currentListType) { + return isExpectedListTerminator(currentListType) || currentToken().kind() === 10 /* EndOfFileToken */; + } + function parseSyntaxListWorker(currentListType, skippedTokens, processItems) { + var items = getArray(); + while (true) { + var succeeded = tryParseExpectedListItem(currentListType, false, items, processItems); + if (!succeeded) { + if (listIsTerminated(currentListType)) { + break; + } + var abort = abortParsingListOrMoveToNextToken(currentListType, items, null, skippedTokens); + if (abort) { + break; + } } - }; - - Rules.IsObjectContext = function (context) { - return context.contextNode.kind() === 215 /* ObjectLiteralExpression */; - }; - - Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind() === 213 /* InvocationExpression */; - }; - - Rules.IsNewContext = function (context) { - return context.contextNode.kind() === 216 /* ObjectCreationExpression */; - }; - - Rules.IsFunctionCallOrNewContext = function (context) { - return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); - }; - - Rules.IsSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine(); - }; - - Rules.IsNotFormatOnEnter = function (context) { - return context.formattingRequestKind != 2 /* FormatOnEnter */; - }; - - Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind() === 130 /* ModuleDeclaration */; - }; - - Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind() === 122 /* ObjectType */ && context.contextNode.parent().kind() !== 128 /* InterfaceDeclaration */; - }; - - Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) { - return ((tokenKind === 80 /* LessThanToken */ || tokenKind === 81 /* GreaterThanToken */) && (parentKind === 229 /* TypeParameterList */ || parentKind === 228 /* TypeArgumentList */)); - }; - - Rules.IsTypeArgumentOrParameterContext = function (context) { - return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind(), context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind(), context.nextTokenParent.kind()); - }; - - Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind() === 41 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */; - }; - return Rules; - })(); - Formatting.Rules = Rules; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesMap = (function () { - function RulesMap() { - this.map = []; - this.mapRowLength = 0; } - RulesMap.create = function (rules) { - var result = new RulesMap(); - result.Initialize(rules); - return result; - }; - - RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 119 /* LastToken */ + 1; - this.map = new Array(this.mapRowLength * this.mapRowLength); - - var rulesBucketConstructionStateList = new Array(this.map.length); - - this.FillRules(rules, rulesBucketConstructionStateList); - return this.map; + var result = TypeScript.Syntax.list(items); + returnZeroLengthArray(items); + return result; + } + function parseSeparatedSyntaxListWorker(currentListType, skippedTokens) { + var nodes = getArray(); + var separators = getArray(); + var _separatorKind = currentListType === 9 /* ObjectType_TypeMembers */ ? 78 /* SemicolonToken */ : 79 /* CommaToken */; + var allowAutomaticSemicolonInsertion = _separatorKind === 78 /* SemicolonToken */; + var inErrorRecovery = false; + while (true) { + var succeeded = tryParseExpectedListItem(currentListType, inErrorRecovery, nodes, null); + if (!succeeded) { + if (listIsTerminated(currentListType)) { + break; + } + var abort = abortParsingListOrMoveToNextToken(currentListType, nodes, separators, skippedTokens); + if (abort) { + break; + } + else { + inErrorRecovery = true; + continue; + } + } + inErrorRecovery = false; + var _currentToken = currentToken(); + var tokenKind = _currentToken.kind(); + if (tokenKind === _separatorKind || tokenKind === 79 /* CommaToken */) { + separators.push(consumeToken(_currentToken)); + continue; + } + if (listIsTerminated(currentListType)) { + break; + } + if (allowAutomaticSemicolonInsertion && canEatAutomaticSemicolon(false)) { + var semicolonToken = eatExplicitOrAutomaticSemicolon(false) || TypeScript.Syntax.emptyToken(78 /* SemicolonToken */); + separators.push(semicolonToken); + continue; + } + separators.push(eatToken(_separatorKind)); + inErrorRecovery = true; + } + var result = TypeScript.Syntax.separatedList(nodes, separators); + returnZeroLengthArray(nodes); + returnZeroLengthArray(separators); + return result; + } + function reportUnexpectedTokenDiagnostic(listType) { + var token = currentToken(); + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [getExpectedListElementType(listType)]); + addDiagnostic(diagnostic); + } + function addDiagnostic(diagnostic) { + if (diagnostics.length > 0 && diagnostics[diagnostics.length - 1].start() === diagnostic.start()) { + return; + } + diagnostics.push(diagnostic); + } + function isExpectedListTerminator(currentListType) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return isExpectedSourceUnit_ModuleElementsTerminator(); + case 1 /* ClassDeclaration_ClassElements */: + return isExpectedClassDeclaration_ClassElementsTerminator(); + case 2 /* ModuleDeclaration_ModuleElements */: + return isExpectedModuleDeclaration_ModuleElementsTerminator(); + case 3 /* SwitchStatement_SwitchClauses */: + return isExpectedSwitchStatement_SwitchClausesTerminator(); + case 4 /* SwitchClause_Statements */: + return isExpectedSwitchClause_StatementsTerminator(); + case 5 /* Block_Statements */: + return isExpectedBlock_StatementsTerminator(); + case 6 /* TryBlock_Statements */: + return isExpectedTryBlock_StatementsTerminator(); + case 7 /* CatchBlock_Statements */: + return isExpectedCatchBlock_StatementsTerminator(); + case 8 /* EnumDeclaration_EnumElements */: + return isExpectedEnumDeclaration_EnumElementsTerminator(); + case 9 /* ObjectType_TypeMembers */: + return isExpectedObjectType_TypeMembersTerminator(); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); + case 11 /* HeritageClause_TypeNameList */: + return isExpectedHeritageClause_TypeNameListTerminator(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator(); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator(); + case 14 /* ArgumentList_AssignmentExpressions */: + return isExpectedArgumentList_AssignmentExpressionsTerminator(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return isExpectedLiteralExpression_AssignmentExpressionsTerminator(); + case 17 /* ParameterList_Parameters */: + return isExpectedParameterList_ParametersTerminator(); + case 18 /* IndexSignature_Parameters */: + return isExpectedIndexSignature_ParametersTerminator(); + case 19 /* TypeArgumentList_Types */: + return isExpectedTypeArgumentList_TypesTerminator(); + case 20 /* TypeParameterList_TypeParameters */: + return isExpectedTypeParameterList_TypeParametersTerminator(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function isExpectedSourceUnit_ModuleElementsTerminator() { + return currentToken().kind() === 10 /* EndOfFileToken */; + } + function isExpectedEnumDeclaration_EnumElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedModuleDeclaration_ModuleElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedObjectType_TypeMembersTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedLiteralExpression_AssignmentExpressionsTerminator() { + return currentToken().kind() === 75 /* CloseBracketToken */; + } + function isExpectedTypeArgumentList_TypesTerminator() { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 81 /* GreaterThanToken */) { + return true; + } + if (canFollowTypeArgumentListInExpression(tokenKind)) { + return true; + } + return false; + } + function isExpectedTypeParameterList_TypeParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 81 /* GreaterThanToken */) { + return true; + } + if (tokenKind === 72 /* OpenParenToken */ || tokenKind === 70 /* OpenBraceToken */ || tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */) { + return true; + } + return false; + } + function isExpectedParameterList_ParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 73 /* CloseParenToken */) { + return true; + } + if (tokenKind === 70 /* OpenBraceToken */) { + return true; + } + if (tokenKind === 85 /* EqualsGreaterThanToken */) { + return true; + } + return false; + } + function isExpectedIndexSignature_ParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 75 /* CloseBracketToken */) { + return true; + } + if (tokenKind === 70 /* OpenBraceToken */) { + return true; + } + return false; + } + function isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 78 /* SemicolonToken */ || tokenKind === 73 /* CloseParenToken */) { + return true; + } + if (tokenKind === 29 /* InKeyword */) { + return true; + } + return false; + } + function isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator() { + if (currentToken().kind() === 85 /* EqualsGreaterThanToken */) { + return true; + } + return canEatExplicitOrAutomaticSemicolon(false); + } + function isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 70 /* OpenBraceToken */ || tokenKind === 71 /* CloseBraceToken */) { + return true; + } + return false; + } + function isExpectedHeritageClause_TypeNameListTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */) { + return true; + } + if (isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) { + return true; + } + return false; + } + function isExpectedArgumentList_AssignmentExpressionsTerminator() { + var token0 = currentToken(); + var tokenKind = token0.kind(); + return tokenKind === 73 /* CloseParenToken */ || tokenKind === 78 /* SemicolonToken */; + } + function isExpectedClassDeclaration_ClassElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedSwitchStatement_SwitchClausesTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedSwitchClause_StatementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */ || isSwitchClause(); + } + function isExpectedBlock_StatementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedTryBlock_StatementsTerminator() { + var tokenKind = currentToken().kind(); + return tokenKind === 17 /* CatchKeyword */ || tokenKind === 25 /* FinallyKeyword */; + } + function isExpectedCatchBlock_StatementsTerminator() { + return currentToken().kind() === 25 /* FinallyKeyword */; + } + function isExpectedListItem(currentListType, inErrorRecovery) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return isModuleElement(inErrorRecovery); + case 1 /* ClassDeclaration_ClassElements */: + return isClassElement(inErrorRecovery); + case 2 /* ModuleDeclaration_ModuleElements */: + return isModuleElement(inErrorRecovery); + case 3 /* SwitchStatement_SwitchClauses */: + return isSwitchClause(); + case 4 /* SwitchClause_Statements */: + return isStatement(modifierCount(), inErrorRecovery); + case 5 /* Block_Statements */: + return isStatement(modifierCount(), inErrorRecovery); + case 6 /* TryBlock_Statements */: + return false; + case 7 /* CatchBlock_Statements */: + return false; + case 8 /* EnumDeclaration_EnumElements */: + return isEnumElement(inErrorRecovery); + case 9 /* ObjectType_TypeMembers */: + return isTypeMember(inErrorRecovery); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return isHeritageClause(); + case 11 /* HeritageClause_TypeNameList */: + return isHeritageClauseTypeName(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return isVariableDeclarator(); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return isVariableDeclarator(); + case 14 /* ArgumentList_AssignmentExpressions */: + return isExpectedArgumentList_AssignmentExpression(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return isPropertyAssignment(inErrorRecovery); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return isAssignmentOrOmittedExpression(); + case 17 /* ParameterList_Parameters */: + return isParameter(); + case 18 /* IndexSignature_Parameters */: + return isParameter(); + case 19 /* TypeArgumentList_Types */: + return isType(); + case 20 /* TypeParameterList_TypeParameters */: + return isTypeParameter(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function isExpectedArgumentList_AssignmentExpression() { + var _currentToken = currentToken(); + if (isExpression(_currentToken)) { + return true; + } + if (_currentToken.kind() === 79 /* CommaToken */) { + return true; + } + return false; + } + function tryParseExpectedListItemWorker(currentListType, inErrorRecovery) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return tryParseModuleElement(inErrorRecovery); + case 1 /* ClassDeclaration_ClassElements */: + return tryParseClassElement(inErrorRecovery); + case 2 /* ModuleDeclaration_ModuleElements */: + return tryParseModuleElement(inErrorRecovery); + case 3 /* SwitchStatement_SwitchClauses */: + return tryParseSwitchClause(); + case 4 /* SwitchClause_Statements */: + return tryParseStatement(inErrorRecovery); + case 5 /* Block_Statements */: + return tryParseStatement(inErrorRecovery); + case 6 /* TryBlock_Statements */: + return tryParseStatement(inErrorRecovery); + case 7 /* CatchBlock_Statements */: + return tryParseStatement(inErrorRecovery); + case 8 /* EnumDeclaration_EnumElements */: + return tryParseEnumElement(inErrorRecovery); + case 9 /* ObjectType_TypeMembers */: + return tryParseTypeMember(inErrorRecovery); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return tryParseHeritageClause(); + case 11 /* HeritageClause_TypeNameList */: + return tryParseHeritageClauseTypeName(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return tryParseVariableDeclarator(true, false); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return tryParseVariableDeclarator(false, false); + case 14 /* ArgumentList_AssignmentExpressions */: + return tryParseArgumentListExpression(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return tryParsePropertyAssignment(inErrorRecovery); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return tryParseAssignmentOrOmittedExpression(); + case 17 /* ParameterList_Parameters */: + return tryParseParameter(); + case 18 /* IndexSignature_Parameters */: + return tryParseParameter(); + case 19 /* TypeArgumentList_Types */: + return tryParseType(); + case 20 /* TypeParameterList_TypeParameters */: + return tryParseTypeParameter(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function getExpectedListElementType(currentListType) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return '{'; + case 1 /* ClassDeclaration_ClassElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null); + case 2 /* ModuleDeclaration_ModuleElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); + case 3 /* SwitchStatement_SwitchClauses */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null); + case 4 /* SwitchClause_Statements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); + case 5 /* Block_Statements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 8 /* EnumDeclaration_EnumElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 9 /* ObjectType_TypeMembers */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null); + case 14 /* ArgumentList_AssignmentExpressions */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); + case 11 /* HeritageClause_TypeNameList */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null); + case 17 /* ParameterList_Parameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); + case 18 /* IndexSignature_Parameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); + case 19 /* TypeArgumentList_Types */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null); + case 20 /* TypeParameterList_TypeParameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + return parseSyntaxTree; + } + var BinaryExpressionPrecedence; + (function (BinaryExpressionPrecedence) { + BinaryExpressionPrecedence[BinaryExpressionPrecedence["Lowest"] = 1] = "Lowest"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalOrExpressionPrecedence"] = 2] = "LogicalOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalAndExpressionPrecedence"] = 3] = "LogicalAndExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 4] = "BitwiseOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 5] = "BitwiseExclusiveOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 6] = "BitwiseAndExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["EqualityExpressionPrecedence"] = 7] = "EqualityExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["RelationalExpressionPrecedence"] = 8] = "RelationalExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["ShiftExpressionPrecdence"] = 9] = "ShiftExpressionPrecdence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["AdditiveExpressionPrecedence"] = 10] = "AdditiveExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 11] = "MultiplicativeExpressionPrecedence"; + })(BinaryExpressionPrecedence || (BinaryExpressionPrecedence = {})); + var ListParsingState; + (function (ListParsingState) { + ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 0] = "SourceUnit_ModuleElements"; + ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1] = "ClassDeclaration_ClassElements"; + ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 2] = "ModuleDeclaration_ModuleElements"; + ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 3] = "SwitchStatement_SwitchClauses"; + ListParsingState[ListParsingState["SwitchClause_Statements"] = 4] = "SwitchClause_Statements"; + ListParsingState[ListParsingState["Block_Statements"] = 5] = "Block_Statements"; + ListParsingState[ListParsingState["TryBlock_Statements"] = 6] = "TryBlock_Statements"; + ListParsingState[ListParsingState["CatchBlock_Statements"] = 7] = "CatchBlock_Statements"; + ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 8] = "EnumDeclaration_EnumElements"; + ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 9] = "ObjectType_TypeMembers"; + ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 10] = "ClassOrInterfaceDeclaration_HeritageClauses"; + ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 11] = "HeritageClause_TypeNameList"; + ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 12] = "VariableDeclaration_VariableDeclarators_AllowIn"; + ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 13] = "VariableDeclaration_VariableDeclarators_DisallowIn"; + ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 14] = "ArgumentList_AssignmentExpressions"; + ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 15] = "ObjectLiteralExpression_PropertyAssignments"; + ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 16] = "ArrayLiteralExpression_AssignmentExpressions"; + ListParsingState[ListParsingState["ParameterList_Parameters"] = 17] = "ParameterList_Parameters"; + ListParsingState[ListParsingState["IndexSignature_Parameters"] = 18] = "IndexSignature_Parameters"; + ListParsingState[ListParsingState["TypeArgumentList_Types"] = 19] = "TypeArgumentList_Types"; + ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 20] = "TypeParameterList_TypeParameters"; + ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState"; + ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState"; + })(ListParsingState || (ListParsingState = {})); + var parseSyntaxTree = createParseSyntaxTree(); + function parse(fileName, text, languageVersion, isDeclaration) { + return parseSource(TypeScript.Scanner.createParserSource(fileName, text, languageVersion), isDeclaration); + } + Parser.parse = parse; + function parseSource(source, isDeclaration) { + return parseSyntaxTree(source, isDeclaration); + } + Parser.parseSource = parseSource; + })(TypeScript.Parser || (TypeScript.Parser = {})); + var Parser = TypeScript.Parser; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + (function (Concrete) { + TypeScript.Parser.syntaxFactory = Concrete; + Concrete.isConcrete = true; + var SourceUnitSyntax = (function (_super) { + __extends(SourceUnitSyntax, _super); + function SourceUnitSyntax(data, moduleElements, endOfFileToken) { + _super.call(this, data); + this.syntaxTree = null; + this.parent = null, this.moduleElements = moduleElements, this.endOfFileToken = endOfFileToken, !TypeScript.isShared(moduleElements) && (moduleElements.parent = this), endOfFileToken.parent = this; + } + return SourceUnitSyntax; + })(TypeScript.SyntaxNode); + Concrete.SourceUnitSyntax = SourceUnitSyntax; + var QualifiedNameSyntax = (function (_super) { + __extends(QualifiedNameSyntax, _super); + function QualifiedNameSyntax(data, left, dotToken, right) { + _super.call(this, data); + this.left = left, this.dotToken = dotToken, this.right = right, left.parent = this, dotToken.parent = this, right.parent = this; + } + return QualifiedNameSyntax; + })(TypeScript.SyntaxNode); + Concrete.QualifiedNameSyntax = QualifiedNameSyntax; + var ObjectTypeSyntax = (function (_super) { + __extends(ObjectTypeSyntax, _super); + function ObjectTypeSyntax(data, openBraceToken, typeMembers, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.typeMembers = typeMembers, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(typeMembers) && (typeMembers.parent = this), closeBraceToken.parent = this; + } + return ObjectTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectTypeSyntax = ObjectTypeSyntax; + var FunctionTypeSyntax = (function (_super) { + __extends(FunctionTypeSyntax, _super); + function FunctionTypeSyntax(data, typeParameterList, parameterList, equalsGreaterThanToken, type) { + _super.call(this, data); + this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this; + } + return FunctionTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionTypeSyntax = FunctionTypeSyntax; + var ArrayTypeSyntax = (function (_super) { + __extends(ArrayTypeSyntax, _super); + function ArrayTypeSyntax(data, type, openBracketToken, closeBracketToken) { + _super.call(this, data); + this.type = type, this.openBracketToken = openBracketToken, this.closeBracketToken = closeBracketToken, type.parent = this, openBracketToken.parent = this, closeBracketToken.parent = this; + } + return ArrayTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArrayTypeSyntax = ArrayTypeSyntax; + var ConstructorTypeSyntax = (function (_super) { + __extends(ConstructorTypeSyntax, _super); + function ConstructorTypeSyntax(data, newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { + _super.call(this, data); + this.newKeyword = newKeyword, this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, newKeyword.parent = this, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this; + } + return ConstructorTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructorTypeSyntax = ConstructorTypeSyntax; + var GenericTypeSyntax = (function (_super) { + __extends(GenericTypeSyntax, _super); + function GenericTypeSyntax(data, name, typeArgumentList) { + _super.call(this, data); + this.name = name, this.typeArgumentList = typeArgumentList, name.parent = this, typeArgumentList.parent = this; + } + return GenericTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.GenericTypeSyntax = GenericTypeSyntax; + var TypeQuerySyntax = (function (_super) { + __extends(TypeQuerySyntax, _super); + function TypeQuerySyntax(data, typeOfKeyword, name) { + _super.call(this, data); + this.typeOfKeyword = typeOfKeyword, this.name = name, typeOfKeyword.parent = this, name.parent = this; + } + return TypeQuerySyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeQuerySyntax = TypeQuerySyntax; + var InterfaceDeclarationSyntax = (function (_super) { + __extends(InterfaceDeclarationSyntax, _super); + function InterfaceDeclarationSyntax(data, modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { + _super.call(this, data); + this.modifiers = modifiers, this.interfaceKeyword = interfaceKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.body = body, !TypeScript.isShared(modifiers) && (modifiers.parent = this), interfaceKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), !TypeScript.isShared(heritageClauses) && (heritageClauses.parent = this), body.parent = this; + } + return InterfaceDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax; + var FunctionDeclarationSyntax = (function (_super) { + __extends(FunctionDeclarationSyntax, _super); + function FunctionDeclarationSyntax(data, modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), functionKeyword.parent = this, identifier.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return FunctionDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionDeclarationSyntax = FunctionDeclarationSyntax; + var ModuleDeclarationSyntax = (function (_super) { + __extends(ModuleDeclarationSyntax, _super); + function ModuleDeclarationSyntax(data, modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.moduleKeyword = moduleKeyword, this.name = name, this.stringLiteral = stringLiteral, this.openBraceToken = openBraceToken, this.moduleElements = moduleElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), moduleKeyword.parent = this, name && (name.parent = this), stringLiteral && (stringLiteral.parent = this), openBraceToken.parent = this, !TypeScript.isShared(moduleElements) && (moduleElements.parent = this), closeBraceToken.parent = this; + } + return ModuleDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ModuleDeclarationSyntax = ModuleDeclarationSyntax; + var ClassDeclarationSyntax = (function (_super) { + __extends(ClassDeclarationSyntax, _super); + function ClassDeclarationSyntax(data, modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.classKeyword = classKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.openBraceToken = openBraceToken, this.classElements = classElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), classKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), !TypeScript.isShared(heritageClauses) && (heritageClauses.parent = this), openBraceToken.parent = this, !TypeScript.isShared(classElements) && (classElements.parent = this), closeBraceToken.parent = this; + } + return ClassDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ClassDeclarationSyntax = ClassDeclarationSyntax; + var EnumDeclarationSyntax = (function (_super) { + __extends(EnumDeclarationSyntax, _super); + function EnumDeclarationSyntax(data, modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.enumKeyword = enumKeyword, this.identifier = identifier, this.openBraceToken = openBraceToken, this.enumElements = enumElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), enumKeyword.parent = this, identifier.parent = this, openBraceToken.parent = this, !TypeScript.isShared(enumElements) && (enumElements.parent = this), closeBraceToken.parent = this; + } + return EnumDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.EnumDeclarationSyntax = EnumDeclarationSyntax; + var ImportDeclarationSyntax = (function (_super) { + __extends(ImportDeclarationSyntax, _super); + function ImportDeclarationSyntax(data, modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.importKeyword = importKeyword, this.identifier = identifier, this.equalsToken = equalsToken, this.moduleReference = moduleReference, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), importKeyword.parent = this, identifier.parent = this, equalsToken.parent = this, moduleReference.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ImportDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ImportDeclarationSyntax = ImportDeclarationSyntax; + var ExportAssignmentSyntax = (function (_super) { + __extends(ExportAssignmentSyntax, _super); + function ExportAssignmentSyntax(data, exportKeyword, equalsToken, identifier, semicolonToken) { + _super.call(this, data); + this.exportKeyword = exportKeyword, this.equalsToken = equalsToken, this.identifier = identifier, this.semicolonToken = semicolonToken, exportKeyword.parent = this, equalsToken.parent = this, identifier.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ExportAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExportAssignmentSyntax = ExportAssignmentSyntax; + var MemberFunctionDeclarationSyntax = (function (_super) { + __extends(MemberFunctionDeclarationSyntax, _super); + function MemberFunctionDeclarationSyntax(data, modifiers, propertyName, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), propertyName.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return MemberFunctionDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax; + var MemberVariableDeclarationSyntax = (function (_super) { + __extends(MemberVariableDeclarationSyntax, _super); + function MemberVariableDeclarationSyntax(data, modifiers, variableDeclarator, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.variableDeclarator = variableDeclarator, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), variableDeclarator.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return MemberVariableDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax; + var ConstructorDeclarationSyntax = (function (_super) { + __extends(ConstructorDeclarationSyntax, _super); + function ConstructorDeclarationSyntax(data, modifiers, constructorKeyword, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.constructorKeyword = constructorKeyword, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), constructorKeyword.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ConstructorDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax; + var IndexMemberDeclarationSyntax = (function (_super) { + __extends(IndexMemberDeclarationSyntax, _super); + function IndexMemberDeclarationSyntax(data, modifiers, indexSignature, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.indexSignature = indexSignature, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), indexSignature.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return IndexMemberDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax; + var GetAccessorSyntax = (function (_super) { + __extends(GetAccessorSyntax, _super); + function GetAccessorSyntax(data, modifiers, getKeyword, propertyName, callSignature, block) { + _super.call(this, data); + this.modifiers = modifiers, this.getKeyword = getKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, !TypeScript.isShared(modifiers) && (modifiers.parent = this), getKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return GetAccessorSyntax; + })(TypeScript.SyntaxNode); + Concrete.GetAccessorSyntax = GetAccessorSyntax; + var SetAccessorSyntax = (function (_super) { + __extends(SetAccessorSyntax, _super); + function SetAccessorSyntax(data, modifiers, setKeyword, propertyName, callSignature, block) { + _super.call(this, data); + this.modifiers = modifiers, this.setKeyword = setKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, !TypeScript.isShared(modifiers) && (modifiers.parent = this), setKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return SetAccessorSyntax; + })(TypeScript.SyntaxNode); + Concrete.SetAccessorSyntax = SetAccessorSyntax; + var PropertySignatureSyntax = (function (_super) { + __extends(PropertySignatureSyntax, _super); + function PropertySignatureSyntax(data, propertyName, questionToken, typeAnnotation) { + _super.call(this, data); + this.propertyName = propertyName, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, propertyName.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this); + } + return PropertySignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.PropertySignatureSyntax = PropertySignatureSyntax; + var CallSignatureSyntax = (function (_super) { + __extends(CallSignatureSyntax, _super); + function CallSignatureSyntax(data, typeParameterList, parameterList, typeAnnotation) { + _super.call(this, data); + this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.typeAnnotation = typeAnnotation, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, typeAnnotation && (typeAnnotation.parent = this); + } + return CallSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.CallSignatureSyntax = CallSignatureSyntax; + var ConstructSignatureSyntax = (function (_super) { + __extends(ConstructSignatureSyntax, _super); + function ConstructSignatureSyntax(data, newKeyword, callSignature) { + _super.call(this, data); + this.newKeyword = newKeyword, this.callSignature = callSignature, newKeyword.parent = this, callSignature.parent = this; + } + return ConstructSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructSignatureSyntax = ConstructSignatureSyntax; + var IndexSignatureSyntax = (function (_super) { + __extends(IndexSignatureSyntax, _super); + function IndexSignatureSyntax(data, openBracketToken, parameters, closeBracketToken, typeAnnotation) { + _super.call(this, data); + this.openBracketToken = openBracketToken, this.parameters = parameters, this.closeBracketToken = closeBracketToken, this.typeAnnotation = typeAnnotation, openBracketToken.parent = this, !TypeScript.isShared(parameters) && (parameters.parent = this), closeBracketToken.parent = this, typeAnnotation && (typeAnnotation.parent = this); + } + return IndexSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.IndexSignatureSyntax = IndexSignatureSyntax; + var MethodSignatureSyntax = (function (_super) { + __extends(MethodSignatureSyntax, _super); + function MethodSignatureSyntax(data, propertyName, questionToken, callSignature) { + _super.call(this, data); + this.propertyName = propertyName, this.questionToken = questionToken, this.callSignature = callSignature, propertyName.parent = this, questionToken && (questionToken.parent = this), callSignature.parent = this; + } + return MethodSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.MethodSignatureSyntax = MethodSignatureSyntax; + var BlockSyntax = (function (_super) { + __extends(BlockSyntax, _super); + function BlockSyntax(data, openBraceToken, statements, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.statements = statements, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this), closeBraceToken.parent = this; + } + return BlockSyntax; + })(TypeScript.SyntaxNode); + Concrete.BlockSyntax = BlockSyntax; + var IfStatementSyntax = (function (_super) { + __extends(IfStatementSyntax, _super); + function IfStatementSyntax(data, ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { + _super.call(this, data); + this.ifKeyword = ifKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, this.elseClause = elseClause, ifKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this, elseClause && (elseClause.parent = this); + } + return IfStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.IfStatementSyntax = IfStatementSyntax; + var VariableStatementSyntax = (function (_super) { + __extends(VariableStatementSyntax, _super); + function VariableStatementSyntax(data, modifiers, variableDeclaration, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.variableDeclaration = variableDeclaration, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), variableDeclaration.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return VariableStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableStatementSyntax = VariableStatementSyntax; + var ExpressionStatementSyntax = (function (_super) { + __extends(ExpressionStatementSyntax, _super); + function ExpressionStatementSyntax(data, expression, semicolonToken) { + _super.call(this, data); + this.expression = expression, this.semicolonToken = semicolonToken, expression.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ExpressionStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExpressionStatementSyntax = ExpressionStatementSyntax; + var ReturnStatementSyntax = (function (_super) { + __extends(ReturnStatementSyntax, _super); + function ReturnStatementSyntax(data, returnKeyword, expression, semicolonToken) { + _super.call(this, data); + this.returnKeyword = returnKeyword, this.expression = expression, this.semicolonToken = semicolonToken, returnKeyword.parent = this, expression && (expression.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ReturnStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ReturnStatementSyntax = ReturnStatementSyntax; + var SwitchStatementSyntax = (function (_super) { + __extends(SwitchStatementSyntax, _super); + function SwitchStatementSyntax(data, switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { + _super.call(this, data); + this.switchKeyword = switchKeyword, this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, this.openBraceToken = openBraceToken, this.switchClauses = switchClauses, this.closeBraceToken = closeBraceToken, switchKeyword.parent = this, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this, openBraceToken.parent = this, !TypeScript.isShared(switchClauses) && (switchClauses.parent = this), closeBraceToken.parent = this; + } + return SwitchStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.SwitchStatementSyntax = SwitchStatementSyntax; + var BreakStatementSyntax = (function (_super) { + __extends(BreakStatementSyntax, _super); + function BreakStatementSyntax(data, breakKeyword, identifier, semicolonToken) { + _super.call(this, data); + this.breakKeyword = breakKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, breakKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return BreakStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.BreakStatementSyntax = BreakStatementSyntax; + var ContinueStatementSyntax = (function (_super) { + __extends(ContinueStatementSyntax, _super); + function ContinueStatementSyntax(data, continueKeyword, identifier, semicolonToken) { + _super.call(this, data); + this.continueKeyword = continueKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, continueKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ContinueStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ContinueStatementSyntax = ContinueStatementSyntax; + var ForStatementSyntax = (function (_super) { + __extends(ForStatementSyntax, _super); + function ForStatementSyntax(data, forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { + _super.call(this, data); + this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.variableDeclaration = variableDeclaration, this.initializer = initializer, this.firstSemicolonToken = firstSemicolonToken, this.condition = condition, this.secondSemicolonToken = secondSemicolonToken, this.incrementor = incrementor, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, variableDeclaration && (variableDeclaration.parent = this), initializer && (initializer.parent = this), firstSemicolonToken.parent = this, condition && (condition.parent = this), secondSemicolonToken.parent = this, incrementor && (incrementor.parent = this), closeParenToken.parent = this, statement.parent = this; + } + return ForStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ForStatementSyntax = ForStatementSyntax; + var ForInStatementSyntax = (function (_super) { + __extends(ForInStatementSyntax, _super); + function ForInStatementSyntax(data, forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { + _super.call(this, data); + this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.variableDeclaration = variableDeclaration, this.left = left, this.inKeyword = inKeyword, this.expression = expression, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, variableDeclaration && (variableDeclaration.parent = this), left && (left.parent = this), inKeyword.parent = this, expression.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return ForInStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ForInStatementSyntax = ForInStatementSyntax; + var EmptyStatementSyntax = (function (_super) { + __extends(EmptyStatementSyntax, _super); + function EmptyStatementSyntax(data, semicolonToken) { + _super.call(this, data); + this.semicolonToken = semicolonToken, semicolonToken.parent = this; + } + return EmptyStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.EmptyStatementSyntax = EmptyStatementSyntax; + var ThrowStatementSyntax = (function (_super) { + __extends(ThrowStatementSyntax, _super); + function ThrowStatementSyntax(data, throwKeyword, expression, semicolonToken) { + _super.call(this, data); + this.throwKeyword = throwKeyword, this.expression = expression, this.semicolonToken = semicolonToken, throwKeyword.parent = this, expression.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ThrowStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ThrowStatementSyntax = ThrowStatementSyntax; + var WhileStatementSyntax = (function (_super) { + __extends(WhileStatementSyntax, _super); + function WhileStatementSyntax(data, whileKeyword, openParenToken, condition, closeParenToken, statement) { + _super.call(this, data); + this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return WhileStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.WhileStatementSyntax = WhileStatementSyntax; + var TryStatementSyntax = (function (_super) { + __extends(TryStatementSyntax, _super); + function TryStatementSyntax(data, tryKeyword, block, catchClause, finallyClause) { + _super.call(this, data); + this.tryKeyword = tryKeyword, this.block = block, this.catchClause = catchClause, this.finallyClause = finallyClause, tryKeyword.parent = this, block.parent = this, catchClause && (catchClause.parent = this), finallyClause && (finallyClause.parent = this); + } + return TryStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.TryStatementSyntax = TryStatementSyntax; + var LabeledStatementSyntax = (function (_super) { + __extends(LabeledStatementSyntax, _super); + function LabeledStatementSyntax(data, identifier, colonToken, statement) { + _super.call(this, data); + this.identifier = identifier, this.colonToken = colonToken, this.statement = statement, identifier.parent = this, colonToken.parent = this, statement.parent = this; + } + return LabeledStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.LabeledStatementSyntax = LabeledStatementSyntax; + var DoStatementSyntax = (function (_super) { + __extends(DoStatementSyntax, _super); + function DoStatementSyntax(data, doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { + _super.call(this, data); + this.doKeyword = doKeyword, this.statement = statement, this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.semicolonToken = semicolonToken, doKeyword.parent = this, statement.parent = this, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return DoStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.DoStatementSyntax = DoStatementSyntax; + var DebuggerStatementSyntax = (function (_super) { + __extends(DebuggerStatementSyntax, _super); + function DebuggerStatementSyntax(data, debuggerKeyword, semicolonToken) { + _super.call(this, data); + this.debuggerKeyword = debuggerKeyword, this.semicolonToken = semicolonToken, debuggerKeyword.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return DebuggerStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.DebuggerStatementSyntax = DebuggerStatementSyntax; + var WithStatementSyntax = (function (_super) { + __extends(WithStatementSyntax, _super); + function WithStatementSyntax(data, withKeyword, openParenToken, condition, closeParenToken, statement) { + _super.call(this, data); + this.withKeyword = withKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, withKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return WithStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.WithStatementSyntax = WithStatementSyntax; + var PrefixUnaryExpressionSyntax = (function (_super) { + __extends(PrefixUnaryExpressionSyntax, _super); + function PrefixUnaryExpressionSyntax(data, operatorToken, operand) { + _super.call(this, data); + this.operatorToken = operatorToken, this.operand = operand, operatorToken.parent = this, operand.parent = this; + } + PrefixUnaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(this.operatorToken.kind()); }; - - RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { - var _this = this; - rules.forEach(function (rule) { - _this.FillRule(rule, rulesBucketConstructionStateList); - }); + return PrefixUnaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax; + var DeleteExpressionSyntax = (function (_super) { + __extends(DeleteExpressionSyntax, _super); + function DeleteExpressionSyntax(data, deleteKeyword, expression) { + _super.call(this, data); + this.deleteKeyword = deleteKeyword, this.expression = expression, deleteKeyword.parent = this, expression.parent = this; + } + return DeleteExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.DeleteExpressionSyntax = DeleteExpressionSyntax; + var TypeOfExpressionSyntax = (function (_super) { + __extends(TypeOfExpressionSyntax, _super); + function TypeOfExpressionSyntax(data, typeOfKeyword, expression) { + _super.call(this, data); + this.typeOfKeyword = typeOfKeyword, this.expression = expression, typeOfKeyword.parent = this, expression.parent = this; + } + return TypeOfExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeOfExpressionSyntax = TypeOfExpressionSyntax; + var VoidExpressionSyntax = (function (_super) { + __extends(VoidExpressionSyntax, _super); + function VoidExpressionSyntax(data, voidKeyword, expression) { + _super.call(this, data); + this.voidKeyword = voidKeyword, this.expression = expression, voidKeyword.parent = this, expression.parent = this; + } + return VoidExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.VoidExpressionSyntax = VoidExpressionSyntax; + var ConditionalExpressionSyntax = (function (_super) { + __extends(ConditionalExpressionSyntax, _super); + function ConditionalExpressionSyntax(data, condition, questionToken, whenTrue, colonToken, whenFalse) { + _super.call(this, data); + this.condition = condition, this.questionToken = questionToken, this.whenTrue = whenTrue, this.colonToken = colonToken, this.whenFalse = whenFalse, condition.parent = this, questionToken.parent = this, whenTrue.parent = this, colonToken.parent = this, whenFalse.parent = this; + } + return ConditionalExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConditionalExpressionSyntax = ConditionalExpressionSyntax; + var BinaryExpressionSyntax = (function (_super) { + __extends(BinaryExpressionSyntax, _super); + function BinaryExpressionSyntax(data, left, operatorToken, right) { + _super.call(this, data); + this.left = left, this.operatorToken = operatorToken, this.right = right, left.parent = this, operatorToken.parent = this, right.parent = this; + } + BinaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(this.operatorToken.kind()); }; - - RulesMap.prototype.GetRuleBucketIndex = function (row, column) { - var rulesBucketIndex = (row * this.mapRowLength) + column; - - return rulesBucketIndex; + return BinaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.BinaryExpressionSyntax = BinaryExpressionSyntax; + var PostfixUnaryExpressionSyntax = (function (_super) { + __extends(PostfixUnaryExpressionSyntax, _super); + function PostfixUnaryExpressionSyntax(data, operand, operatorToken) { + _super.call(this, data); + this.operand = operand, this.operatorToken = operatorToken, operand.parent = this, operatorToken.parent = this; + } + PostfixUnaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(this.operatorToken.kind()); }; - - RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { - var _this = this; - var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any; - - rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { - rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { - var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); - - var rulesBucket = _this.map[rulesBucketIndex]; - if (rulesBucket == undefined) { - rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); - } - - rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); - }); - }); + return PostfixUnaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax; + var MemberAccessExpressionSyntax = (function (_super) { + __extends(MemberAccessExpressionSyntax, _super); + function MemberAccessExpressionSyntax(data, expression, dotToken, name) { + _super.call(this, data); + this.expression = expression, this.dotToken = dotToken, this.name = name, expression.parent = this, dotToken.parent = this, name.parent = this; + } + return MemberAccessExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax; + var InvocationExpressionSyntax = (function (_super) { + __extends(InvocationExpressionSyntax, _super); + function InvocationExpressionSyntax(data, expression, argumentList) { + _super.call(this, data); + this.expression = expression, this.argumentList = argumentList, expression.parent = this, argumentList.parent = this; + } + return InvocationExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.InvocationExpressionSyntax = InvocationExpressionSyntax; + var ArrayLiteralExpressionSyntax = (function (_super) { + __extends(ArrayLiteralExpressionSyntax, _super); + function ArrayLiteralExpressionSyntax(data, openBracketToken, expressions, closeBracketToken) { + _super.call(this, data); + this.openBracketToken = openBracketToken, this.expressions = expressions, this.closeBracketToken = closeBracketToken, openBracketToken.parent = this, !TypeScript.isShared(expressions) && (expressions.parent = this), closeBracketToken.parent = this; + } + return ArrayLiteralExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax; + var ObjectLiteralExpressionSyntax = (function (_super) { + __extends(ObjectLiteralExpressionSyntax, _super); + function ObjectLiteralExpressionSyntax(data, openBraceToken, propertyAssignments, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.propertyAssignments = propertyAssignments, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(propertyAssignments) && (propertyAssignments.parent = this), closeBraceToken.parent = this; + } + return ObjectLiteralExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax; + var ObjectCreationExpressionSyntax = (function (_super) { + __extends(ObjectCreationExpressionSyntax, _super); + function ObjectCreationExpressionSyntax(data, newKeyword, expression, argumentList) { + _super.call(this, data); + this.newKeyword = newKeyword, this.expression = expression, this.argumentList = argumentList, newKeyword.parent = this, expression.parent = this, argumentList && (argumentList.parent = this); + } + return ObjectCreationExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax; + var ParenthesizedExpressionSyntax = (function (_super) { + __extends(ParenthesizedExpressionSyntax, _super); + function ParenthesizedExpressionSyntax(data, openParenToken, expression, closeParenToken) { + _super.call(this, data); + this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this; + } + return ParenthesizedExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax; + var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) { + __extends(ParenthesizedArrowFunctionExpressionSyntax, _super); + function ParenthesizedArrowFunctionExpressionSyntax(data, callSignature, equalsGreaterThanToken, block, expression) { + _super.call(this, data); + this.callSignature = callSignature, this.equalsGreaterThanToken = equalsGreaterThanToken, this.block = block, this.expression = expression, callSignature.parent = this, equalsGreaterThanToken.parent = this, block && (block.parent = this), expression && (expression.parent = this); + } + return ParenthesizedArrowFunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax; + var SimpleArrowFunctionExpressionSyntax = (function (_super) { + __extends(SimpleArrowFunctionExpressionSyntax, _super); + function SimpleArrowFunctionExpressionSyntax(data, parameter, equalsGreaterThanToken, block, expression) { + _super.call(this, data); + this.parameter = parameter, this.equalsGreaterThanToken = equalsGreaterThanToken, this.block = block, this.expression = expression, parameter.parent = this, equalsGreaterThanToken.parent = this, block && (block.parent = this), expression && (expression.parent = this); + } + return SimpleArrowFunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax; + var CastExpressionSyntax = (function (_super) { + __extends(CastExpressionSyntax, _super); + function CastExpressionSyntax(data, lessThanToken, type, greaterThanToken, expression) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.type = type, this.greaterThanToken = greaterThanToken, this.expression = expression, lessThanToken.parent = this, type.parent = this, greaterThanToken.parent = this, expression.parent = this; + } + return CastExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.CastExpressionSyntax = CastExpressionSyntax; + var ElementAccessExpressionSyntax = (function (_super) { + __extends(ElementAccessExpressionSyntax, _super); + function ElementAccessExpressionSyntax(data, expression, openBracketToken, argumentExpression, closeBracketToken) { + _super.call(this, data); + this.expression = expression, this.openBracketToken = openBracketToken, this.argumentExpression = argumentExpression, this.closeBracketToken = closeBracketToken, expression.parent = this, openBracketToken.parent = this, argumentExpression.parent = this, closeBracketToken.parent = this; + } + return ElementAccessExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax; + var FunctionExpressionSyntax = (function (_super) { + __extends(FunctionExpressionSyntax, _super); + function FunctionExpressionSyntax(data, functionKeyword, identifier, callSignature, block) { + _super.call(this, data); + this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.block = block, functionKeyword.parent = this, identifier && (identifier.parent = this), callSignature.parent = this, block.parent = this; + } + return FunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionExpressionSyntax = FunctionExpressionSyntax; + var OmittedExpressionSyntax = (function (_super) { + __extends(OmittedExpressionSyntax, _super); + function OmittedExpressionSyntax(data) { + _super.call(this, data); + } + return OmittedExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.OmittedExpressionSyntax = OmittedExpressionSyntax; + var VariableDeclarationSyntax = (function (_super) { + __extends(VariableDeclarationSyntax, _super); + function VariableDeclarationSyntax(data, varKeyword, variableDeclarators) { + _super.call(this, data); + this.varKeyword = varKeyword, this.variableDeclarators = variableDeclarators, varKeyword.parent = this, !TypeScript.isShared(variableDeclarators) && (variableDeclarators.parent = this); + } + return VariableDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableDeclarationSyntax = VariableDeclarationSyntax; + var VariableDeclaratorSyntax = (function (_super) { + __extends(VariableDeclaratorSyntax, _super); + function VariableDeclaratorSyntax(data, propertyName, typeAnnotation, equalsValueClause) { + _super.call(this, data); + this.propertyName = propertyName, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, propertyName.parent = this, typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); + } + return VariableDeclaratorSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableDeclaratorSyntax = VariableDeclaratorSyntax; + var ArgumentListSyntax = (function (_super) { + __extends(ArgumentListSyntax, _super); + function ArgumentListSyntax(data, typeArgumentList, openParenToken, _arguments, closeParenToken) { + _super.call(this, data); + this.typeArgumentList = typeArgumentList, this.openParenToken = openParenToken, this.arguments = _arguments, this.closeParenToken = closeParenToken, typeArgumentList && (typeArgumentList.parent = this), openParenToken.parent = this, !TypeScript.isShared(_arguments) && (_arguments.parent = this), closeParenToken.parent = this; + } + return ArgumentListSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArgumentListSyntax = ArgumentListSyntax; + var ParameterListSyntax = (function (_super) { + __extends(ParameterListSyntax, _super); + function ParameterListSyntax(data, openParenToken, parameters, closeParenToken) { + _super.call(this, data); + this.openParenToken = openParenToken, this.parameters = parameters, this.closeParenToken = closeParenToken, openParenToken.parent = this, !TypeScript.isShared(parameters) && (parameters.parent = this), closeParenToken.parent = this; + } + return ParameterListSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParameterListSyntax = ParameterListSyntax; + var TypeArgumentListSyntax = (function (_super) { + __extends(TypeArgumentListSyntax, _super); + function TypeArgumentListSyntax(data, lessThanToken, typeArguments, greaterThanToken) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.typeArguments = typeArguments, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, !TypeScript.isShared(typeArguments) && (typeArguments.parent = this), greaterThanToken.parent = this; + } + return TypeArgumentListSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeArgumentListSyntax = TypeArgumentListSyntax; + var TypeParameterListSyntax = (function (_super) { + __extends(TypeParameterListSyntax, _super); + function TypeParameterListSyntax(data, lessThanToken, typeParameters, greaterThanToken) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.typeParameters = typeParameters, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, !TypeScript.isShared(typeParameters) && (typeParameters.parent = this), greaterThanToken.parent = this; + } + return TypeParameterListSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeParameterListSyntax = TypeParameterListSyntax; + var HeritageClauseSyntax = (function (_super) { + __extends(HeritageClauseSyntax, _super); + function HeritageClauseSyntax(data, extendsOrImplementsKeyword, typeNames) { + _super.call(this, data); + this.extendsOrImplementsKeyword = extendsOrImplementsKeyword, this.typeNames = typeNames, extendsOrImplementsKeyword.parent = this, !TypeScript.isShared(typeNames) && (typeNames.parent = this); + } + HeritageClauseSyntax.prototype.kind = function () { + return this.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */; }; - - RulesMap.prototype.GetRule = function (context) { - var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind(), context.nextTokenSpan.kind()); - var bucket = this.map[bucketIndex]; - if (bucket != null) { - for (var i = 0, len = bucket.Rules().length; i < len; i++) { - var rule = bucket.Rules()[i]; - if (rule.Operation.Context.InContext(context)) - return rule; - } + return HeritageClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.HeritageClauseSyntax = HeritageClauseSyntax; + var EqualsValueClauseSyntax = (function (_super) { + __extends(EqualsValueClauseSyntax, _super); + function EqualsValueClauseSyntax(data, equalsToken, value) { + _super.call(this, data); + this.equalsToken = equalsToken, this.value = value, equalsToken.parent = this, value.parent = this; + } + return EqualsValueClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.EqualsValueClauseSyntax = EqualsValueClauseSyntax; + var CaseSwitchClauseSyntax = (function (_super) { + __extends(CaseSwitchClauseSyntax, _super); + function CaseSwitchClauseSyntax(data, caseKeyword, expression, colonToken, statements) { + _super.call(this, data); + this.caseKeyword = caseKeyword, this.expression = expression, this.colonToken = colonToken, this.statements = statements, caseKeyword.parent = this, expression.parent = this, colonToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this); + } + return CaseSwitchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax; + var DefaultSwitchClauseSyntax = (function (_super) { + __extends(DefaultSwitchClauseSyntax, _super); + function DefaultSwitchClauseSyntax(data, defaultKeyword, colonToken, statements) { + _super.call(this, data); + this.defaultKeyword = defaultKeyword, this.colonToken = colonToken, this.statements = statements, defaultKeyword.parent = this, colonToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this); + } + return DefaultSwitchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax; + var ElseClauseSyntax = (function (_super) { + __extends(ElseClauseSyntax, _super); + function ElseClauseSyntax(data, elseKeyword, statement) { + _super.call(this, data); + this.elseKeyword = elseKeyword, this.statement = statement, elseKeyword.parent = this, statement.parent = this; + } + return ElseClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.ElseClauseSyntax = ElseClauseSyntax; + var CatchClauseSyntax = (function (_super) { + __extends(CatchClauseSyntax, _super); + function CatchClauseSyntax(data, catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { + _super.call(this, data); + this.catchKeyword = catchKeyword, this.openParenToken = openParenToken, this.identifier = identifier, this.typeAnnotation = typeAnnotation, this.closeParenToken = closeParenToken, this.block = block, catchKeyword.parent = this, openParenToken.parent = this, identifier.parent = this, typeAnnotation && (typeAnnotation.parent = this), closeParenToken.parent = this, block.parent = this; + } + return CatchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.CatchClauseSyntax = CatchClauseSyntax; + var FinallyClauseSyntax = (function (_super) { + __extends(FinallyClauseSyntax, _super); + function FinallyClauseSyntax(data, finallyKeyword, block) { + _super.call(this, data); + this.finallyKeyword = finallyKeyword, this.block = block, finallyKeyword.parent = this, block.parent = this; + } + return FinallyClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.FinallyClauseSyntax = FinallyClauseSyntax; + var TypeParameterSyntax = (function (_super) { + __extends(TypeParameterSyntax, _super); + function TypeParameterSyntax(data, identifier, constraint) { + _super.call(this, data); + this.identifier = identifier, this.constraint = constraint, identifier.parent = this, constraint && (constraint.parent = this); + } + return TypeParameterSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeParameterSyntax = TypeParameterSyntax; + var ConstraintSyntax = (function (_super) { + __extends(ConstraintSyntax, _super); + function ConstraintSyntax(data, extendsKeyword, typeOrExpression) { + _super.call(this, data); + this.extendsKeyword = extendsKeyword, this.typeOrExpression = typeOrExpression, extendsKeyword.parent = this, typeOrExpression.parent = this; + } + return ConstraintSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstraintSyntax = ConstraintSyntax; + var SimplePropertyAssignmentSyntax = (function (_super) { + __extends(SimplePropertyAssignmentSyntax, _super); + function SimplePropertyAssignmentSyntax(data, propertyName, colonToken, expression) { + _super.call(this, data); + this.propertyName = propertyName, this.colonToken = colonToken, this.expression = expression, propertyName.parent = this, colonToken.parent = this, expression.parent = this; + } + return SimplePropertyAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax; + var FunctionPropertyAssignmentSyntax = (function (_super) { + __extends(FunctionPropertyAssignmentSyntax, _super); + function FunctionPropertyAssignmentSyntax(data, propertyName, callSignature, block) { + _super.call(this, data); + this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return FunctionPropertyAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax; + var ParameterSyntax = (function (_super) { + __extends(ParameterSyntax, _super); + function ParameterSyntax(data, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { + _super.call(this, data); + this.dotDotDotToken = dotDotDotToken, this.modifiers = modifiers, this.identifier = identifier, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, dotDotDotToken && (dotDotDotToken.parent = this), !TypeScript.isShared(modifiers) && (modifiers.parent = this), identifier.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); + } + return ParameterSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParameterSyntax = ParameterSyntax; + var EnumElementSyntax = (function (_super) { + __extends(EnumElementSyntax, _super); + function EnumElementSyntax(data, propertyName, equalsValueClause) { + _super.call(this, data); + this.propertyName = propertyName, this.equalsValueClause = equalsValueClause, propertyName.parent = this, equalsValueClause && (equalsValueClause.parent = this); + } + return EnumElementSyntax; + })(TypeScript.SyntaxNode); + Concrete.EnumElementSyntax = EnumElementSyntax; + var TypeAnnotationSyntax = (function (_super) { + __extends(TypeAnnotationSyntax, _super); + function TypeAnnotationSyntax(data, colonToken, type) { + _super.call(this, data); + this.colonToken = colonToken, this.type = type, colonToken.parent = this, type.parent = this; + } + return TypeAnnotationSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeAnnotationSyntax = TypeAnnotationSyntax; + var ExternalModuleReferenceSyntax = (function (_super) { + __extends(ExternalModuleReferenceSyntax, _super); + function ExternalModuleReferenceSyntax(data, requireKeyword, openParenToken, stringLiteral, closeParenToken) { + _super.call(this, data); + this.requireKeyword = requireKeyword, this.openParenToken = openParenToken, this.stringLiteral = stringLiteral, this.closeParenToken = closeParenToken, requireKeyword.parent = this, openParenToken.parent = this, stringLiteral.parent = this, closeParenToken.parent = this; + } + return ExternalModuleReferenceSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax; + var ModuleNameModuleReferenceSyntax = (function (_super) { + __extends(ModuleNameModuleReferenceSyntax, _super); + function ModuleNameModuleReferenceSyntax(data, moduleName) { + _super.call(this, data); + this.moduleName = moduleName, moduleName.parent = this; + } + return ModuleNameModuleReferenceSyntax; + })(TypeScript.SyntaxNode); + Concrete.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax; + SourceUnitSyntax.prototype.__kind = 120 /* SourceUnit */, QualifiedNameSyntax.prototype.__kind = 121 /* QualifiedName */, ObjectTypeSyntax.prototype.__kind = 122 /* ObjectType */, FunctionTypeSyntax.prototype.__kind = 123 /* FunctionType */, ArrayTypeSyntax.prototype.__kind = 124 /* ArrayType */, ConstructorTypeSyntax.prototype.__kind = 125 /* ConstructorType */, GenericTypeSyntax.prototype.__kind = 126 /* GenericType */, TypeQuerySyntax.prototype.__kind = 127 /* TypeQuery */, InterfaceDeclarationSyntax.prototype.__kind = 128 /* InterfaceDeclaration */, FunctionDeclarationSyntax.prototype.__kind = 129 /* FunctionDeclaration */, ModuleDeclarationSyntax.prototype.__kind = 130 /* ModuleDeclaration */, ClassDeclarationSyntax.prototype.__kind = 131 /* ClassDeclaration */, EnumDeclarationSyntax.prototype.__kind = 132 /* EnumDeclaration */, ImportDeclarationSyntax.prototype.__kind = 133 /* ImportDeclaration */, ExportAssignmentSyntax.prototype.__kind = 134 /* ExportAssignment */, MemberFunctionDeclarationSyntax.prototype.__kind = 135 /* MemberFunctionDeclaration */, MemberVariableDeclarationSyntax.prototype.__kind = 136 /* MemberVariableDeclaration */, ConstructorDeclarationSyntax.prototype.__kind = 137 /* ConstructorDeclaration */, IndexMemberDeclarationSyntax.prototype.__kind = 138 /* IndexMemberDeclaration */, GetAccessorSyntax.prototype.__kind = 139 /* GetAccessor */, SetAccessorSyntax.prototype.__kind = 140 /* SetAccessor */, PropertySignatureSyntax.prototype.__kind = 141 /* PropertySignature */, CallSignatureSyntax.prototype.__kind = 142 /* CallSignature */, ConstructSignatureSyntax.prototype.__kind = 143 /* ConstructSignature */, IndexSignatureSyntax.prototype.__kind = 144 /* IndexSignature */, MethodSignatureSyntax.prototype.__kind = 145 /* MethodSignature */, BlockSyntax.prototype.__kind = 146 /* Block */, IfStatementSyntax.prototype.__kind = 147 /* IfStatement */, VariableStatementSyntax.prototype.__kind = 148 /* VariableStatement */, ExpressionStatementSyntax.prototype.__kind = 149 /* ExpressionStatement */, ReturnStatementSyntax.prototype.__kind = 150 /* ReturnStatement */, SwitchStatementSyntax.prototype.__kind = 151 /* SwitchStatement */, BreakStatementSyntax.prototype.__kind = 152 /* BreakStatement */, ContinueStatementSyntax.prototype.__kind = 153 /* ContinueStatement */, ForStatementSyntax.prototype.__kind = 154 /* ForStatement */, ForInStatementSyntax.prototype.__kind = 155 /* ForInStatement */, EmptyStatementSyntax.prototype.__kind = 156 /* EmptyStatement */, ThrowStatementSyntax.prototype.__kind = 157 /* ThrowStatement */, WhileStatementSyntax.prototype.__kind = 158 /* WhileStatement */, TryStatementSyntax.prototype.__kind = 159 /* TryStatement */, LabeledStatementSyntax.prototype.__kind = 160 /* LabeledStatement */, DoStatementSyntax.prototype.__kind = 161 /* DoStatement */, DebuggerStatementSyntax.prototype.__kind = 162 /* DebuggerStatement */, WithStatementSyntax.prototype.__kind = 163 /* WithStatement */, DeleteExpressionSyntax.prototype.__kind = 170 /* DeleteExpression */, TypeOfExpressionSyntax.prototype.__kind = 171 /* TypeOfExpression */, VoidExpressionSyntax.prototype.__kind = 172 /* VoidExpression */, ConditionalExpressionSyntax.prototype.__kind = 186 /* ConditionalExpression */, MemberAccessExpressionSyntax.prototype.__kind = 212 /* MemberAccessExpression */, InvocationExpressionSyntax.prototype.__kind = 213 /* InvocationExpression */, ArrayLiteralExpressionSyntax.prototype.__kind = 214 /* ArrayLiteralExpression */, ObjectLiteralExpressionSyntax.prototype.__kind = 215 /* ObjectLiteralExpression */, ObjectCreationExpressionSyntax.prototype.__kind = 216 /* ObjectCreationExpression */, ParenthesizedExpressionSyntax.prototype.__kind = 217 /* ParenthesizedExpression */, ParenthesizedArrowFunctionExpressionSyntax.prototype.__kind = 218 /* ParenthesizedArrowFunctionExpression */, SimpleArrowFunctionExpressionSyntax.prototype.__kind = 219 /* SimpleArrowFunctionExpression */, CastExpressionSyntax.prototype.__kind = 220 /* CastExpression */, ElementAccessExpressionSyntax.prototype.__kind = 221 /* ElementAccessExpression */, FunctionExpressionSyntax.prototype.__kind = 222 /* FunctionExpression */, OmittedExpressionSyntax.prototype.__kind = 223 /* OmittedExpression */, VariableDeclarationSyntax.prototype.__kind = 224 /* VariableDeclaration */, VariableDeclaratorSyntax.prototype.__kind = 225 /* VariableDeclarator */, ArgumentListSyntax.prototype.__kind = 226 /* ArgumentList */, ParameterListSyntax.prototype.__kind = 227 /* ParameterList */, TypeArgumentListSyntax.prototype.__kind = 228 /* TypeArgumentList */, TypeParameterListSyntax.prototype.__kind = 229 /* TypeParameterList */, EqualsValueClauseSyntax.prototype.__kind = 232 /* EqualsValueClause */, CaseSwitchClauseSyntax.prototype.__kind = 233 /* CaseSwitchClause */, DefaultSwitchClauseSyntax.prototype.__kind = 234 /* DefaultSwitchClause */, ElseClauseSyntax.prototype.__kind = 235 /* ElseClause */, CatchClauseSyntax.prototype.__kind = 236 /* CatchClause */, FinallyClauseSyntax.prototype.__kind = 237 /* FinallyClause */, TypeParameterSyntax.prototype.__kind = 238 /* TypeParameter */, ConstraintSyntax.prototype.__kind = 239 /* Constraint */, SimplePropertyAssignmentSyntax.prototype.__kind = 240 /* SimplePropertyAssignment */, FunctionPropertyAssignmentSyntax.prototype.__kind = 241 /* FunctionPropertyAssignment */, ParameterSyntax.prototype.__kind = 242 /* Parameter */, EnumElementSyntax.prototype.__kind = 243 /* EnumElement */, TypeAnnotationSyntax.prototype.__kind = 244 /* TypeAnnotation */, ExternalModuleReferenceSyntax.prototype.__kind = 245 /* ExternalModuleReference */, ModuleNameModuleReferenceSyntax.prototype.__kind = 246 /* ModuleNameModuleReference */; + })(Syntax.Concrete || (Syntax.Concrete = {})); + var Concrete = Syntax.Concrete; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.syntaxDiagnosticsTime = 0; + var SyntaxTree = (function () { + function SyntaxTree(isConcrete, sourceUnit, isDeclaration, diagnostics, fileName, text, languageVersion) { + this.text = text; + this._allDiagnostics = null; + this._isConcrete = isConcrete; + this._sourceUnit = sourceUnit; + this._isDeclaration = isDeclaration; + this._parserDiagnostics = diagnostics; + this._fileName = fileName; + this._lineMap = text.lineMap(); + this._languageVersion = languageVersion; + sourceUnit.syntaxTree = this; + } + SyntaxTree.prototype.isConcrete = function () { + return this._isConcrete; + }; + SyntaxTree.prototype.sourceUnit = function () { + return this._sourceUnit; + }; + SyntaxTree.prototype.isDeclaration = function () { + return this._isDeclaration; + }; + SyntaxTree.prototype.computeDiagnostics = function () { + if (this._parserDiagnostics.length > 0) { + return this._parserDiagnostics; + } + var diagnostics = []; + TypeScript.visitNodeOrToken(new GrammarCheckerWalker(this, diagnostics), this.sourceUnit()); + return diagnostics; + }; + SyntaxTree.prototype.diagnostics = function () { + if (this._allDiagnostics === null) { + var start = new Date().getTime(); + this._allDiagnostics = this.computeDiagnostics(); + TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start; + } + return this._allDiagnostics; + }; + SyntaxTree.prototype.fileName = function () { + return this._fileName; + }; + SyntaxTree.prototype.lineMap = function () { + return this._lineMap; + }; + SyntaxTree.prototype.languageVersion = function () { + return this._languageVersion; + }; + SyntaxTree.prototype.cacheSyntaxTreeInfo = function () { + var sourceUnit = this.sourceUnit(); + var firstToken = firstSyntaxTreeToken(this); + var leadingTrivia = firstToken.leadingTrivia(this.text); + this._isExternalModule = externalModuleIndicatorSpanWorker(this, firstToken) !== null; + var amdDependencies = []; + for (var i = 0, n = leadingTrivia.count(); i < n; i++) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.isComment()) { + var amdDependency = this.getAmdDependency(trivia.fullText()); + if (amdDependency) { + amdDependencies.push(amdDependency); } - return null; - }; - return RulesMap; - })(); - Formatting.RulesMap = RulesMap; - - var MaskBitSize = 5; - var Mask = 0x1f; - - (function (RulesPosition) { - RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; - RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; - RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; - RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; - RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; - RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; - })(Formatting.RulesPosition || (Formatting.RulesPosition = {})); - var RulesPosition = Formatting.RulesPosition; - - var RulesBucketConstructionState = (function () { - function RulesBucketConstructionState() { - this.rulesInsertionIndexBitmap = 0; } - RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { - var index = 0; - - var pos = 0; - var indexBitmap = this.rulesInsertionIndexBitmap; - - while (pos <= maskPosition) { - index += (indexBitmap & Mask); - indexBitmap >>= MaskBitSize; - pos += MaskBitSize; + } + this._amdDependencies = amdDependencies; + }; + SyntaxTree.prototype.getAmdDependency = function (comment) { + var amdDependencyRegEx = /^\/\/\/\s* 0) { + var modifiers = parameter.modifiers; + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (this.checkParameterAccessibilityModifier(parameterList, modifier, i)) { + return true; + } + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierIndex) { + if (modifier.kind() !== 57 /* PublicKeyword */ && modifier.kind() !== 55 /* PrivateKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]); + return true; + } + else { + if (modifierIndex > 0) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForTrailingComma = function (list) { + if (TypeScript.childCount(list) === 0 || TypeScript.childCount(list) % 2 === 1) { + return false; + } + var child = TypeScript.childAt(list, TypeScript.childCount(list) - 1); + this.pushDiagnostic(child, TypeScript.DiagnosticCode.Trailing_comma_not_allowed); + return true; + }; + GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, reportToken, listKind) { + if (TypeScript.childCount(list) > 0) { + return false; + } + this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode._0_list_cannot_be_empty, [listKind]); + return true; + }; + GrammarCheckerWalker.prototype.visitParameterList = function (node) { + if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingComma(node.parameters)) { + return; + } + _super.prototype.visitParameterList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitHeritageClause = function (node) { + if (this.checkForTrailingComma(node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, node.extendsOrImplementsKeyword, TypeScript.SyntaxFacts.getText(node.extendsOrImplementsKeyword.kind()))) { + return; + } + _super.prototype.visitHeritageClause.call(this, node); + }; + GrammarCheckerWalker.prototype.visitArgumentList = function (node) { + if (this.checkForTrailingComma(node.arguments)) { + return; + } + _super.prototype.visitArgumentList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) { + if (this.checkForAtLeastOneElement(node, node.variableDeclarators, node.varKeyword, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.variable_declaration, null)) || this.checkForTrailingComma(node.variableDeclarators)) { + return; + } + _super.prototype.visitVariableDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) { + if (this.checkForTrailingComma(node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_argument, null))) { + return; + } + _super.prototype.visitTypeArgumentList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) { + if (this.checkForTrailingComma(node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null))) { + return; + } + _super.prototype.visitTypeParameterList.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) { + if (node.parameters.length !== 1) { + this.pushDiagnostic(node.openBracketToken, TypeScript.DiagnosticCode.Index_signature_must_have_exactly_one_parameter); + return true; + } + var parameter = node.parameters[0]; + if (parameter.dotDotDotToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters); + return true; + } + else if (parameter.modifiers.length > 0) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers); + return true; + } + else if (parameter.questionToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark); + return true; + } + else if (parameter.equalsValueClause) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer); + return true; + } + else if (!parameter.typeAnnotation) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation); + return true; + } + else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitIndexSignature = function (node) { + if (this.checkIndexSignatureParameter(node)) { + return; + } + if (!node.typeAnnotation) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation); + return; + } + _super.prototype.visitIndexSignature.call(this, node); + }; + GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) { + var seenExtendsClause = false; + var seenImplementsClause = false; + for (var i = 0, n = node.heritageClauses.length; i < n; i++) { + TypeScript.Debug.assert(i <= 2); + var heritageClause = node.heritageClauses[i]; + if (heritageClause.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */) { + if (seenExtendsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); + return true; + } + if (seenImplementsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause); + return true; + } + if (heritageClause.typeNames.length > 1) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class); + return true; + } + seenExtendsClause = true; + } + else { + TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind() === 51 /* ImplementsKeyword */); + if (seenImplementsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen); + return true; } - - return index; - }; - - RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { - var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; - value++; - TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); - - var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); - temp |= value << maskPosition; - - this.rulesInsertionIndexBitmap = temp; - }; - return RulesBucketConstructionState; - })(); - Formatting.RulesBucketConstructionState = RulesBucketConstructionState; - - var RulesBucket = (function () { - function RulesBucket() { - this.rules = []; + seenImplementsClause = true; } - RulesBucket.prototype.Rules = function () { - return this.rules; - }; - - RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { - var position; - - if (rule.Operation.Action == 0 /* Ignore */) { - position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; - } else if (!rule.Operation.Context.IsAny()) { - position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; - } else { - position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) { + if (this.inAmbientDeclaration) { + var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); + if (declareToken) { + this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, reportToken, modifiers) { + if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) { + if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { + this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + return true; + } + } + }; + GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitClassDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) { + var seenExtendsClause = false; + for (var i = 0, n = node.heritageClauses.length; i < n; i++) { + TypeScript.Debug.assert(i <= 1); + var heritageClause = node.heritageClauses[i]; + if (heritageClause.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */) { + if (seenExtendsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); + return true; } - - var state = constructionState[rulesBucketIndex]; - if (state === undefined) { - state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); + seenExtendsClause = true; + } + else { + TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind() === 51 /* ImplementsKeyword */); + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) { + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (modifier.kind() === 63 /* DeclareKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_interface_declaration); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) { + if (this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) { + return; + } + _super.prototype.visitInterfaceDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) { + var seenAccessibilityModifier = false; + var seenStaticModifier = false; + for (var i = 0, n = list.length; i < n; i++) { + var modifier = list[i]; + if (modifier.kind() === 57 /* PublicKeyword */ || modifier.kind() === 55 /* PrivateKeyword */) { + if (seenAccessibilityModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return true; } - var index = state.GetInsertionIndex(position); - this.rules.splice(index, 0, rule); - state.IncreaseInsertionIndex(position); - }; - return RulesBucket; - })(); - Formatting.RulesBucket = RulesBucket; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var RulesProvider = (function () { - function RulesProvider(logger) { - this.logger = logger; - this.globalRules = new Formatting.Rules(); + if (seenStaticModifier) { + var previousToken = list[i - 1]; + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]); + return true; + } + seenAccessibilityModifier = true; } - RulesProvider.prototype.getRuleName = function (rule) { - return this.globalRules.getRuleName(rule); - }; - - RulesProvider.prototype.getRuleByName = function (name) { - return this.globalRules[name]; - }; - - RulesProvider.prototype.getRulesMap = function () { - return this.rulesMap; - }; - - RulesProvider.prototype.ensureUpToDate = function (options) { - var _this = this; - if (this.options == null || !TypeScript.compareDataObjects(this.options, options)) { - var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { - return _this.createActiveRules(options); - }); - var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { - return Formatting.RulesMap.create(activeRules); - }); - - this.activeRules = activeRules; - this.rulesMap = rulesMap; - this.options = TypeScript.Services.FormatCodeOptions.clone(options); + else if (modifier.kind() === 58 /* StaticKeyword */) { + if (seenStaticModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); + return true; } - }; - - RulesProvider.prototype.createActiveRules = function (options) { - var rules = this.globalRules.HighPriorityCommonRules.slice(0); - - if (options.InsertSpaceAfterCommaDelimiter) { - rules.push(this.globalRules.SpaceAfterComma); - } else { - rules.push(this.globalRules.NoSpaceAfterComma); + seenStaticModifier = true; + } + else { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitMemberVariableDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitMemberFunctionDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node) { + if (node.callSignature.parameterList.parameters.length !== 0) { + this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) { + if (this.checkIndexMemberModifiers(node)) { + return; + } + _super.prototype.visitIndexMemberDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) { + if (node.modifiers.length > 0) { + this.pushDiagnostic(TypeScript.childAt(node.modifiers, 0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, reportToken, languageVersion, diagnosticKey) { + if (this.syntaxTree.languageVersion() < languageVersion) { + this.pushDiagnostic(reportToken, diagnosticKey); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) { + var savedInObjectLiteralExpression = this.inObjectLiteralExpression; + this.inObjectLiteralExpression = true; + _super.prototype.visitObjectLiteralExpression.call(this, node); + this.inObjectLiteralExpression = savedInObjectLiteralExpression; + }; + GrammarCheckerWalker.prototype.visitGetAccessor = function (node) { + if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.propertyName, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkGetAccessorParameter(node)) { + return; + } + _super.prototype.visitGetAccessor.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForDisallowedSetAccessorTypeAnnotation = function (accessor) { + if (accessor.callSignature.typeAnnotation) { + this.pushDiagnostic(accessor.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_set_accessor); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedAccessorTypeParameters = function (callSignature) { + if (callSignature.typeParameterList !== null) { + this.pushDiagnostic(callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_an_accessor); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) { + if (this.inAmbientDeclaration) { + this.pushDiagnostic(accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node) { + var parameters = node.callSignature.parameterList.parameters; + if (TypeScript.childCount(parameters) !== 1) { + this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.set_accessor_must_have_exactly_one_parameter); + return true; + } + var parameter = parameters[0]; + if (parameter.questionToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional); + return true; + } + if (parameter.equalsValueClause) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer); + return true; + } + if (parameter.dotDotDotToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitSetAccessor = function (node) { + if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.propertyName, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkForDisallowedSetAccessorTypeAnnotation(node) || this.checkSetAccessorParameter(node)) { + return; + } + _super.prototype.visitSetAccessor.call(this, node); + }; + GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitEnumDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkEnumElements = function (node) { + var previousValueWasComputed = false; + for (var i = 0, n = TypeScript.childCount(node.enumElements); i < n; i++) { + var child = TypeScript.childAt(node.enumElements, i); + if (i % 2 === 0) { + var enumElement = child; + if (!enumElement.equalsValueClause && previousValueWasComputed) { + this.pushDiagnostic(enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer); + return true; } - - if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { - rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); - } else { - rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); + if (enumElement.equalsValueClause) { + var value = enumElement.equalsValueClause.value; + previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value); } - - if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { - rules.push(this.globalRules.SpaceAfterKeywordInControl); - } else { - rules.push(this.globalRules.NoSpaceAfterKeywordInControl); + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitEnumElement = function (node) { + if (this.inAmbientDeclaration && node.equalsValueClause) { + var expression = node.equalsValueClause.value; + if (!TypeScript.Syntax.isIntegerLiteral(expression)) { + this.pushDiagnostic(node.equalsValueClause.value, TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers); + return; + } + } + _super.prototype.visitEnumElement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) { + if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments); + } + _super.prototype.visitInvocationExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) { + var seenExportModifier = false; + var seenDeclareModifier = false; + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (modifier.kind() === 57 /* PublicKeyword */ || modifier.kind() === 55 /* PrivateKeyword */ || modifier.kind() === 58 /* StaticKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]); + return true; + } + if (modifier.kind() === 63 /* DeclareKeyword */) { + if (seenDeclareModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return; } - - if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { - rules.push(this.globalRules.SpaceAfterOpenParen); - rules.push(this.globalRules.SpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); - } else { - rules.push(this.globalRules.NoSpaceAfterOpenParen); - rules.push(this.globalRules.NoSpaceBeforeCloseParen); - rules.push(this.globalRules.NoSpaceBetweenParens); + seenDeclareModifier = true; + } + else if (modifier.kind() === 47 /* ExportKeyword */) { + if (seenExportModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); + return; } - - if (options.InsertSpaceAfterSemicolonInForStatements) { - rules.push(this.globalRules.SpaceAfterSemicolonInFor); - } else { - rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); + if (seenDeclareModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]); + return; } - - if (options.InsertSpaceBeforeAndAfterBinaryOperators) { - rules.push(this.globalRules.SpaceBeforeBinaryOperator); - rules.push(this.globalRules.SpaceAfterBinaryOperator); - } else { - rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); - rules.push(this.globalRules.NoSpaceAfterBinaryOperator); + seenExportModifier = true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) { + if (!node.stringLiteral) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var child = node.moduleElements[i]; + if (child.kind() === 133 /* ImportDeclaration */) { + var importDeclaration = child; + if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) { + this.pushDiagnostic(importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } } - - if (options.PlaceOpenBraceOnNewLineForControlBlocks) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) { + var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); + if (declareToken) { + this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_import_declaration); + return true; + } + }; + GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitImportDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.stringLiteral ? node.stringLiteral : TypeScript.firstToken(node.name), node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node)) { + return; + } + if (node.stringLiteral) { + if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { + this.pushDiagnostic(node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names); + return; + } + } + if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitModuleDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var child = node.moduleElements[i]; + if (child.kind() === 134 /* ExportAssignment */) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitBlock = function (node) { + if (this.checkForBlockInAmbientContext(node)) { + return; + } + var savedInBlock = this.inBlock; + this.inBlock = true; + _super.prototype.visitBlock.call(this, node); + this.inBlock = savedInBlock; + }; + GrammarCheckerWalker.prototype.checkForBlockInAmbientContext = function (node) { + if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { + if (node.parent.kind() === 1 /* List */) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); + } + else { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.A_function_implementation_cannot_be_declared_in_an_ambient_context); + } + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) { + if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitBreakStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkBreakStatementTarget(node)) { + return; + } + _super.prototype.visitBreakStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitContinueStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkContinueStatementTarget(node)) { + return; + } + _super.prototype.visitContinueStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkBreakStatementTarget = function (node) { + if (node.identifier) { + var breakableLabels = this.getEnclosingLabels(node, true, false); + if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + var breakableLabels = this.getEnclosingLabels(node, true, true); + if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); } - - if (options.PlaceOpenBraceOnNewLineForFunctions) { - rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); - rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found); } - - rules = rules.concat(this.globalRules.LowPriorityCommonRules); - - return rules; - }; - return RulesProvider; - })(); - Formatting.RulesProvider = RulesProvider; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TextEditInfo = (function () { - function TextEditInfo(position, length, replaceWith) { - this.position = position; - this.length = length; - this.replaceWith = replaceWith; + return true; } - TextEditInfo.prototype.toString = function () { - return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]"; - }; - return TextEditInfo; - })(); - Formatting.TextEditInfo = TextEditInfo; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - (function (Shared) { - var TokenRangeAccess = (function () { - function TokenRangeAccess(from, to, except) { - this.tokens = []; - for (var token = from; token <= to; token++) { - if (except.indexOf(token) < 0) { - this.tokens.push(token); - } - } - } - TokenRangeAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenRangeAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - - TokenRangeAccess.prototype.toString = function () { - return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]"; - }; - return TokenRangeAccess; - })(); - Shared.TokenRangeAccess = TokenRangeAccess; - - var TokenValuesAccess = (function () { - function TokenValuesAccess(tks) { - this.tokens = tks && tks.length ? tks : []; + } + else if (!this.inIterationStatement(node, false) && !this.inSwitchStatement(node)) { + if (this.inIterationStatement(node, true)) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); + } + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.inSwitchStatement = function (ast) { + while (ast) { + if (ast.kind() === 151 /* SwitchStatement */) { + return true; + } + if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(ast)) { + return false; + } + ast = ast.parent; + } + return false; + }; + GrammarCheckerWalker.prototype.isIterationStatement = function (ast) { + switch (ast.kind()) { + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.inIterationStatement = function (element, crossFunctions) { + while (element) { + if (this.isIterationStatement(element)) { + return true; + } + if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + return false; + } + element = element.parent; + } + return false; + }; + GrammarCheckerWalker.prototype.getEnclosingLabels = function (element, breakable, crossFunctions) { + var result = []; + element = element.parent; + while (element) { + if (element.kind() === 160 /* LabeledStatement */) { + var labeledStatement = element; + if (breakable) { + result.push(labeledStatement); } - TokenValuesAccess.prototype.GetTokens = function () { - return this.tokens; - }; - - TokenValuesAccess.prototype.Contains = function (token) { - return this.tokens.indexOf(token) >= 0; - }; - return TokenValuesAccess; - })(); - Shared.TokenValuesAccess = TokenValuesAccess; - - var TokenSingleValueAccess = (function () { - function TokenSingleValueAccess(token) { - this.token = token; + else { + if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) { + result.push(labeledStatement); + } } - TokenSingleValueAccess.prototype.GetTokens = function () { - return [this.token]; - }; - - TokenSingleValueAccess.prototype.Contains = function (tokenValue) { - return tokenValue == this.token; - }; - - TokenSingleValueAccess.prototype.toString = function () { - return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]"; - }; - return TokenSingleValueAccess; - })(); - Shared.TokenSingleValueAccess = TokenSingleValueAccess; - - var TokenAllAccess = (function () { - function TokenAllAccess() { + } + if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + break; + } + element = element.parent; + } + return result; + }; + GrammarCheckerWalker.prototype.labelIsOnContinuableConstruct = function (statement) { + switch (statement.kind()) { + case 160 /* LabeledStatement */: + return this.labelIsOnContinuableConstruct(statement.statement); + case 158 /* WhileStatement */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 161 /* DoStatement */: + return true; + default: + return false; + } + }; + GrammarCheckerWalker.prototype.checkContinueStatementTarget = function (node) { + if (!this.inIterationStatement(node, false)) { + if (this.inIterationStatement(node, true)) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); + } + return true; + } + else if (node.identifier) { + var continuableLabels = this.getEnclosingLabels(node, false, false); + if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + var continuableLabels = this.getEnclosingLabels(node, false, true); + if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); } - TokenAllAccess.prototype.GetTokens = function () { - var result = []; - for (var token = 9 /* FirstToken */; token <= 119 /* LastToken */; token++) { - result.push(token); - } - return result; - }; - - TokenAllAccess.prototype.Contains = function (tokenValue) { - return true; - }; - - TokenAllAccess.prototype.toString = function () { - return "[allTokens]"; - }; - return TokenAllAccess; - })(); - Shared.TokenAllAccess = TokenAllAccess; - - var TokenRange = (function () { - function TokenRange(tokenAccess) { - this.tokenAccess = tokenAccess; + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found); } - TokenRange.FromToken = function (token) { - return new TokenRange(new TokenSingleValueAccess(token)); - }; - - TokenRange.FromTokens = function (tokens) { - return new TokenRange(new TokenValuesAccess(tokens)); - }; - - TokenRange.FromRange = function (f, to, except) { - if (typeof except === "undefined") { except = []; } - return new TokenRange(new TokenRangeAccess(f, to, except)); - }; - - TokenRange.AllTokens = function () { - return new TokenRange(new TokenAllAccess()); - }; - - TokenRange.prototype.GetTokens = function () { - return this.tokenAccess.GetTokens(); - }; - - TokenRange.prototype.Contains = function (token) { - return this.tokenAccess.Contains(token); - }; - - TokenRange.prototype.toString = function () { - return this.tokenAccess.toString(); - }; - - TokenRange.Any = TokenRange.AllTokens(); - TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([6 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(15 /* FirstKeyword */, 69 /* LastKeyword */); - TokenRange.Operators = TokenRange.FromRange(78 /* SemicolonToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryOperators = TokenRange.FromRange(80 /* LessThanToken */, 119 /* SlashEqualsToken */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([29 /* InKeyword */, 30 /* InstanceOfKeyword */]); - TokenRange.ReservedKeywords = TokenRange.FromRange(51 /* FirstFutureReservedStrictKeyword */, 59 /* LastFutureReservedStrictKeyword */); - TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([93 /* PlusPlusToken */, 94 /* MinusMinusToken */, 102 /* TildeToken */, 101 /* ExclamationToken */]); - TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([13 /* NumericLiteral */, 11 /* IdentifierName */, 72 /* OpenParenToken */, 74 /* OpenBracketToken */, 70 /* OpenBraceToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); - TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); - TokenRange.Comments = TokenRange.FromTokens([7 /* SingleLineCommentTrivia */, 6 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([11 /* IdentifierName */, 67 /* NumberKeyword */, 69 /* StringKeyword */, 61 /* BooleanKeyword */, 41 /* VoidKeyword */, 60 /* AnyKeyword */]); - return TokenRange; - })(); - Shared.TokenRange = TokenRange; - })(Formatting.Shared || (Formatting.Shared = {})); - var Shared = Formatting.Shared; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var TokenSpan = (function (_super) { - __extends(TokenSpan, _super); - function TokenSpan(kind, start, length) { - _super.call(this, start, length); - this._kind = kind; + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitDebuggerStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitDoStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitDoStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitEmptyStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitExpressionStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitForInStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node) || this.checkForInLeftHandSideExpression(node)) { + return; + } + _super.prototype.visitForInStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForInLeftHandSideExpression = function (node) { + if (node.left && !TypeScript.SyntaxUtilities.isLeftHandSizeExpression(node.left)) { + this.pushDiagnostic(node.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_in_for_in_statement); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) { + if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.length > 1) { + this.pushDiagnostic(node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitForStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitForStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitIfStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitIfStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForInvalidLabelIdentifier(node)) { + return; + } + _super.prototype.visitLabeledStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForInvalidLabelIdentifier = function (node) { + var labelIdentifier = TypeScript.tokenValueText(node.identifier); + var breakableLabels = this.getEnclosingLabels(node, true, false); + var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === labelIdentifier; }); + if (matchingLabel) { + this.pushDiagnostic(node.identifier, TypeScript.DiagnosticCode.Duplicate_identifier_0, [labelIdentifier]); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitReturnStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForReturnStatementNotInFunctionBody(node)) { + return; + } + _super.prototype.visitReturnStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForReturnStatementNotInFunctionBody = function (node) { + for (var element = node; element; element = element.parent) { + if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + return false; + } + } + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.return_statement_must_be_contained_within_a_function_body); + return true; + }; + GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitSwitchStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitThrowStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitThrowStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTryStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitTryStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitWhileStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitWhileStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitWithStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForWithInStrictMode(node)) { + return; + } + _super.prototype.visitWithStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForWithInStrictMode = function (node) { + if (TypeScript.parsedInStrictMode(node)) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.with_statements_are_not_allowed_in_strict_mode); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) { + if (this.inBlock || this.inObjectLiteralExpression) { + if (modifiers.length > 0) { + this.pushDiagnostic(TypeScript.childAt(modifiers, 0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitFunctionDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitFunctionExpression = function (node) { + if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + _super.prototype.visitFunctionExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitVariableStatement = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration.varKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitVariableStatement.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) { + for (var i = 0, n = TypeScript.childCount(list); i < n; i++) { + var child = TypeScript.childAt(list, i); + if (i % 2 === 1 && child.kind() !== kind) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]); } - TokenSpan.prototype.kind = function () { - return this._kind; - }; - return TokenSpan; - })(TypeScript.TextSpan); - Formatting.TokenSpan = TokenSpan; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContext = (function () { - function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta); + } + return false; + }; + GrammarCheckerWalker.prototype.visitObjectType = function (node) { + if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitObjectType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitArrayType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitArrayType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitFunctionType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitFunctionType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitConstructorType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitConstructorType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) { + if (this.checkVariableDeclaratorInitializer(node) || this.checkVariableDeclaratorIdentifier(node)) { + return; + } + _super.prototype.visitVariableDeclarator.call(this, node); + }; + GrammarCheckerWalker.prototype.checkVariableDeclaratorIdentifier = function (node) { + if (node.parent.kind() !== 136 /* MemberVariableDeclaration */) { + if (this.checkForDisallowedEvalOrArguments(node, node.propertyName)) { + return true; } - IndentationNodeContext.prototype.parent = function () { - return this._parent; - }; - - IndentationNodeContext.prototype.node = function () { - return this._node; - }; - - IndentationNodeContext.prototype.fullStart = function () { - return this._fullStart; - }; - - IndentationNodeContext.prototype.fullWidth = function () { - return this._node.fullWidth(); - }; - - IndentationNodeContext.prototype.start = function () { - return this._fullStart + this._node.leadingTriviaWidth(); - }; - - IndentationNodeContext.prototype.end = function () { - return this._fullStart + this._node.leadingTriviaWidth() + this._node.width(); - }; - - IndentationNodeContext.prototype.indentationAmount = function () { - return this._indentationAmount; - }; - - IndentationNodeContext.prototype.childIndentationAmountDelta = function () { - return this._childIndentationAmountDelta; - }; - - IndentationNodeContext.prototype.depth = function () { - return this._depth; - }; - - IndentationNodeContext.prototype.kind = function () { - return this._node.kind(); - }; - - IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () { - if (this._hasSkippedOrMissingTokenChild === null) { - this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node); - } - return this._hasSkippedOrMissingTokenChild; - }; - - IndentationNodeContext.prototype.clone = function (pool) { - var parent = null; - if (this._parent) { - parent = this._parent.clone(pool); - } - return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta); - }; - - IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { - this._parent = parent; - this._node = node; - this._fullStart = fullStart; - this._indentationAmount = indentationAmount; - this._childIndentationAmountDelta = childIndentationAmountDelta; - this._hasSkippedOrMissingTokenChild = null; - - if (parent) { - this._depth = parent.depth() + 1; - } else { - this._depth = 0; - } - }; - return IndentationNodeContext; - })(); - Formatting.IndentationNodeContext = IndentationNodeContext; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationNodeContextPool = (function () { - function IndentationNodeContextPool() { - this.nodes = []; + } + return false; + }; + GrammarCheckerWalker.prototype.checkVariableDeclaratorInitializer = function (node) { + if (this.inAmbientDeclaration && node.equalsValueClause) { + this.pushDiagnostic(TypeScript.firstToken(node.equalsValueClause.value), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) { + return; + } + _super.prototype.visitConstructorDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) { + for (var i = 0, n = modifiers.length; i < n; i++) { + var child = modifiers[i]; + if (child.kind() !== 57 /* PublicKeyword */) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]); + return true; } - IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) { - if (this.nodes.length > 0) { - var cachedNode = this.nodes.pop(); - cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - return cachedNode; - } - - return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); - }; - - IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) { - if (typeof recursive === "undefined") { recursive = false; } - this.nodes.push(node); - - if (recursive) { - var parent = node.parent(); - if (parent) { - this.releaseNode(parent, recursive); - } - } - }; - return IndentationNodeContextPool; - })(); - Formatting.IndentationNodeContextPool = IndentationNodeContextPool; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; + } + return false; + }; + GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) { + if (node.callSignature.typeParameterList) { + this.pushDiagnostic(node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) { + if (node.callSignature.typeAnnotation) { + this.pushDiagnostic(node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitBinaryExpression = function (node) { + if (this.checkIllegalAssignment(node)) { + return; + } + _super.prototype.visitBinaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitPrefixUnaryExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && this.isPreIncrementOrDecrementExpression(node) && this.isEvalOrArguments(node.operand)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]); + } + _super.prototype.visitPrefixUnaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitPostfixUnaryExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(node.operand)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]); + } + _super.prototype.visitPostfixUnaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitParameter = function (node) { + if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + _super.prototype.visitParameter.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForDisallowedEvalOrArguments = function (node, token) { + if (token) { + if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(token)) { + this.pushDiagnostic(token, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(token)]); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.isPreIncrementOrDecrementExpression = function (node) { + switch (node.kind()) { + case 169 /* PreDecrementExpression */: + case 168 /* PreIncrementExpression */: + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitDeleteExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && node.expression.kind() === 11 /* IdentifierName */) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.delete_cannot_be_called_on_an_identifier_in_strict_mode); + return; + } + _super.prototype.visitDeleteExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIllegalAssignment = function (node) { + if (TypeScript.parsedInStrictMode(node) && TypeScript.SyntaxFacts.isAssignmentOperatorToken(node.operatorToken.kind()) && this.isEvalOrArguments(node.left)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.left)]); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.getEvalOrArguments = function (expr) { + if (expr.kind() === 11 /* IdentifierName */) { + var text = TypeScript.tokenValueText(expr); + if (text === "eval" || text === "arguments") { + return text; + } + } + return null; + }; + GrammarCheckerWalker.prototype.isEvalOrArguments = function (expr) { + return this.getEvalOrArguments(expr) !== null; + }; + GrammarCheckerWalker.prototype.visitConstraint = function (node) { + if (this.checkConstraintType(node)) { + return; + } + _super.prototype.visitConstraint.call(this, node); + }; + GrammarCheckerWalker.prototype.checkConstraintType = function (node) { + if (!TypeScript.SyntaxFacts.isType(node.typeOrExpression.kind())) { + this.pushDiagnostic(node.typeOrExpression, TypeScript.DiagnosticCode.Type_expected); + return true; + } + return false; + }; + return GrammarCheckerWalker; + })(TypeScript.SyntaxWalker); + function firstSyntaxTreeToken(syntaxTree) { + var scanner = TypeScript.Scanner.createScanner(syntaxTree.languageVersion(), syntaxTree.text, function () { + }); + return scanner.scan(false); + } + function externalModuleIndicatorSpan(syntaxTree) { + var firstToken = firstSyntaxTreeToken(syntaxTree); + return externalModuleIndicatorSpanWorker(syntaxTree, firstToken); + } + TypeScript.externalModuleIndicatorSpan = externalModuleIndicatorSpan; + function externalModuleIndicatorSpanWorker(syntaxTree, firstToken) { + var leadingTrivia = firstToken.leadingTrivia(syntaxTree.text); + return implicitImportSpan(leadingTrivia) || topLevelImportOrExportSpan(syntaxTree.sourceUnit()); + } + TypeScript.externalModuleIndicatorSpanWorker = externalModuleIndicatorSpanWorker; + function implicitImportSpan(sourceUnitLeadingTrivia) { + for (var i = 0, n = sourceUnitLeadingTrivia.count(); i < n; i++) { + var trivia = sourceUnitLeadingTrivia.syntaxTriviaAt(i); + if (trivia.isComment()) { + var span = implicitImportSpanWorker(trivia); + if (span) { + return span; + } + } + } + return null; + } + function implicitImportSpanWorker(trivia) { + var implicitImportRegEx = /^(\/\/\/\s*/gim; + var match = implicitImportRegEx.exec(trivia.fullText()); + if (match) { + return new TypeScript.TextSpan(trivia.fullStart(), trivia.fullWidth()); + } + return null; + } + function topLevelImportOrExportSpan(node) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var moduleElement = node.moduleElements[i]; + var _firstToken = TypeScript.firstToken(moduleElement); + if (_firstToken !== null && _firstToken.kind() === 47 /* ExportKeyword */) { + return new TypeScript.TextSpan(TypeScript.start(_firstToken), TypeScript.width(_firstToken)); + } + if (moduleElement.kind() === 133 /* ImportDeclaration */) { + var importDecl = moduleElement; + if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) { + var literal = importDecl.moduleReference.stringLiteral; + return new TypeScript.TextSpan(TypeScript.start(literal), TypeScript.width(literal)); + } + } + } + return null; + } })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { - (function (Services) { - (function (Formatting) { - var IndentationTrackingWalker = (function (_super) { - __extends(IndentationTrackingWalker, _super); - function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this); - this.options = options; - this._position = 0; - this._parent = null; - - this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool(); - - this._textSpan = textSpan; - this._snapshot = snapshot; - this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0); - - this._lastTriviaWasNewLine = indentFirstToken; - } - IndentationTrackingWalker.prototype.position = function () { - return this._position; - }; - - IndentationTrackingWalker.prototype.parent = function () { - return this._parent; - }; - - IndentationTrackingWalker.prototype.textSpan = function () { - return this._textSpan; - }; - - IndentationTrackingWalker.prototype.snapshot = function () { - return this._snapshot; - }; - - IndentationTrackingWalker.prototype.indentationNodeContextPool = function () { - return this._indentationNodeContextPool; - }; - - IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = true; - this.forceRecomputeIndentationOfParent(tokenStart, true); - }; - - IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) { - this._lastTriviaWasNewLine = false; - this.forceRecomputeIndentationOfParent(tokenStart, false); - }; - - IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - throw TypeScript.Errors.abstract(); - }; - - IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) { - if (this._lastTriviaWasNewLine) { - var indentationAmount = this.getTokenIndentationAmount(token); - var commentIndentationAmount = this.getCommentIndentationAmount(token); - - this.indentToken(token, indentationAmount, commentIndentationAmount); - } - }; - - IndentationTrackingWalker.prototype.visitToken = function (token) { - var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth()); - - if (tokenSpan.intersectsWithTextSpan(this._textSpan)) { - this.visitTokenInSpan(token); - - var trivia = token.trailingTrivia(); - this._lastTriviaWasNewLine = token.hasTrailingNewLine() && trivia.syntaxTriviaAt(trivia.count() - 1).kind() == 5 /* NewLineTrivia */; - } - - this._position += token.fullWidth(); - }; - - IndentationTrackingWalker.prototype.visitNode = function (node) { - var nodeSpan = new TypeScript.TextSpan(this._position, node.fullWidth()); - - if (nodeSpan.intersectsWithTextSpan(this._textSpan)) { - var indentation = this.getNodeIndentation(node); - - var currentParent = this._parent; - this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); - - node.accept(this); - - this._indentationNodeContextPool.releaseNode(this._parent); - this._parent = currentParent; - } else { - this._position += node.fullWidth(); - } - }; - - IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) { - if (this._parent.node().firstToken() === token || token.kind() === 70 /* OpenBraceToken */ || token.kind() === 71 /* CloseBraceToken */ || token.kind() === 74 /* OpenBracketToken */ || token.kind() === 75 /* CloseBracketToken */ || (token.kind() === 42 /* WhileKeyword */ && this._parent.node().kind() == 161 /* DoStatement */)) { - return this._parent.indentationAmount(); - } - - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - }; - - IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) { - if (token.kind() === 71 /* CloseBraceToken */ || token.kind() === 75 /* CloseBracketToken */) { - return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); - } - return this._parent.indentationAmount(); - }; - - IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) { - var parent = this._parent; - - var parentIndentationAmount; - if (this._textSpan.containsPosition(parent.start())) { - parentIndentationAmount = parent.indentationAmount(); - } else { - if (parent.kind() === 146 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) { - parent = this._parent.parent(); - } - - var line = this._snapshot.getLineFromPosition(parent.start()).getText(); - var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line); - parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options); - } - var parentIndentationAmountDelta = parent.childIndentationAmountDelta(); - - var indentationAmount; - - var indentationAmountDelta; - var parentNode = parent.node(); - - switch (node.kind()) { - default: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = 0; - break; - - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 122 /* ObjectType */: - case 132 /* EnumDeclaration */: - case 151 /* SwitchStatement */: - case 215 /* ObjectLiteralExpression */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 222 /* FunctionExpression */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 138 /* IndexMemberDeclaration */: - case 236 /* CatchClause */: - - case 214 /* ArrayLiteralExpression */: - case 124 /* ArrayType */: - case 221 /* ElementAccessExpression */: - case 144 /* IndexSignature */: - - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 150 /* ReturnStatement */: - case 157 /* ThrowStatement */: - case 219 /* SimpleArrowFunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 224 /* VariableDeclaration */: - case 134 /* ExportAssignment */: - - case 213 /* InvocationExpression */: - case 216 /* ObjectCreationExpression */: - case 142 /* CallSignature */: - case 143 /* ConstructSignature */: - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - indentationAmountDelta = this.options.indentSpaces; - break; - - case 147 /* IfStatement */: - if (parent.kind() === 235 /* ElseClause */ && !parentNode.elseKeyword.hasTrailingNewLine() && !node.ifKeyword.hasLeadingNewLine()) { - indentationAmount = parentIndentationAmount; - } else { - indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); - } - indentationAmountDelta = this.options.indentSpaces; - break; - - case 235 /* ElseClause */: - indentationAmount = parentIndentationAmount; - indentationAmountDelta = this.options.indentSpaces; - break; - - case 146 /* Block */: - if (this.shouldIndentBlockInParent(parent)) { - indentationAmount = parentIndentationAmount + parentIndentationAmountDelta; - } else { - indentationAmount = parentIndentationAmount; - } - - indentationAmountDelta = this.options.indentSpaces; - break; - } - - if (parentNode) { - if (!newLineInsertedByFormatting) { - var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start()); - var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + node.leadingTriviaWidth()); - if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) { - indentationAmount = parentIndentationAmount; - indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta); - } - } - } - - return { - indentationAmount: indentationAmount, - indentationAmountDelta: indentationAmountDelta - }; - }; - - IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) { - switch (parent.kind()) { - case 120 /* SourceUnit */: - case 130 /* ModuleDeclaration */: - case 146 /* Block */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - default: - return false; - } - }; - - IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) { - var parent = this._parent; - if (parent.fullStart() === tokenStart) { - this._parent = parent.parent(); - var indentation = this.getNodeIndentation(parent.node(), newLineAdded); - parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta); - this._parent = parent; - } - }; - return IndentationTrackingWalker; - })(TypeScript.SyntaxWalker); - Formatting.IndentationTrackingWalker = IndentationTrackingWalker; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; + var Unicode = (function () { + function Unicode() { + } + Unicode.lookupInUnicodeMap = function (code, map) { + if (code < map[0]) { + return false; + } + var lo = 0; + var hi = map.length; + var mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { + return true; + } + if (code < map[mid]) { + hi = mid; + } + else { + lo = mid + 2; + } + } + return false; + }; + Unicode.isIdentifierStart = function (code, languageVersion) { + if (languageVersion === 0 /* ES3 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart); + } + else if (languageVersion === 1 /* ES5 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart); + } + else { + throw TypeScript.Errors.argumentOutOfRange("languageVersion"); + } + }; + Unicode.isIdentifierPart = function (code, languageVersion) { + if (languageVersion === 0 /* ES3 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart); + } + else if (languageVersion === 1 /* ES5 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart); + } + else { + throw TypeScript.Errors.argumentOutOfRange("languageVersion"); + } + }; + Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + return Unicode; + })(); + TypeScript.Unicode = Unicode; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { - (function (Services) { - (function (Formatting) { - var MultipleTokenIndenter = (function (_super) { - __extends(MultipleTokenIndenter, _super); - function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this._edits = []; + (function (IncrementalParser) { + function createParserSource(oldSyntaxTree, textChangeRange, text) { + var fileName = oldSyntaxTree.fileName(); + var languageVersion = oldSyntaxTree.languageVersion(); + var _scannerParserSource; + var _changeRange; + var _changeRangeNewSpan; + var _changeDelta = 0; + var _oldSourceUnitCursor = getSyntaxCursor(); + var oldSourceUnit = oldSyntaxTree.sourceUnit(); + var _outstandingRewindPointCount = 0; + if (oldSourceUnit.moduleElements.length > 0) { + _oldSourceUnitCursor.pushElement(TypeScript.childAt(oldSourceUnit.moduleElements, 0), 0); + } + _changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); + _changeRangeNewSpan = _changeRange.newSpan(); + if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { + TypeScript.Debug.assert((TypeScript.fullWidth(oldSourceUnit) - _changeRange.span().length() + _changeRange.newLength()) === text.length()); + } + _scannerParserSource = TypeScript.Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); + function release() { + _scannerParserSource.release(); + _scannerParserSource = null; + _oldSourceUnitCursor = null; + _outstandingRewindPointCount = 0; + } + function extendToAffectedRange(changeRange, sourceUnit) { + var maxLookahead = 1; + var start = changeRange.span().start(); + for (var i = 0; start > 0 && i <= maxLookahead; i++) { + var token = TypeScript.findToken(sourceUnit, start); + var position = token.fullStart(); + start = Math.max(0, position - 1); } - MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0) { - return; - } - - if (this.parent().hasSkippedOrMissingTokenChild()) { - return; - } - - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (!this.textSpan().containsTextSpan(tokenSpan)) { - return; - } - - var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options); - - var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options); - - this.recordIndentationEditsForToken(token, indentationString, commentIndentationString); - }; - - MultipleTokenIndenter.prototype.edits = function () { - return this._edits; - }; - - MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) { - this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith)); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) { - var position = this.position(); - var indentNextTokenOrTrivia = true; - var leadingWhiteSpace = ""; - - var triviaList = token.leadingTrivia(); - if (triviaList) { - for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) { - continue; - } - - switch (trivia.kind()) { - case 6 /* MultiLineCommentTrivia */: - this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia); - indentNextTokenOrTrivia = false; - leadingWhiteSpace = ""; - break; - - case 7 /* SingleLineCommentTrivia */: - case 8 /* SkippedTokenTrivia */: - if (indentNextTokenOrTrivia) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString); - indentNextTokenOrTrivia = false; - } - break; - - case 4 /* WhitespaceTrivia */: - var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1); - var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString; - if (indentNextTokenOrTrivia) { - if (!(nextTrivia && nextTrivia.isNewLine())) { - this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString); - } - indentNextTokenOrTrivia = false; - } - leadingWhiteSpace += trivia.fullText(); - break; - - case 5 /* NewLineTrivia */: - indentNextTokenOrTrivia = true; - leadingWhiteSpace = ""; - break; - - default: - throw TypeScript.Errors.invalidOperation(); - } - } - } - - if (token.kind() !== 10 /* EndOfFileToken */ && indentNextTokenOrTrivia) { - if (indentationString.length > 0) { - this.recordEdit(position, 0, indentationString); - } - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) { - if (indentationString.length > 0) { - this.recordEdit(fullStart, 0, indentationString); - } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) { - var text = trivia.fullText(); - - if (indentationString === text) { - return; - } - - this.recordEdit(fullStart, text.length, indentationString); - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) { - var position = fullStart; - var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); - - if (segments.length <= 1) { - if (!firstLineAlreadyIndented) { - this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); - } - return; - } - - var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options); - - var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options); - var startIndex = 0; - if (firstLineAlreadyIndented) { - startIndex = 1; - position += segments[0].length; - } - for (var i = startIndex; i < segments.length; i++) { - var segment = segments[i]; - this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment); - position += segment.length; + var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end()); + var finalLength = changeRange.newLength() + (changeRange.span().start() - start); + return new TypeScript.TextChangeRange(finalSpan, finalLength); + } + function absolutePosition() { + return _scannerParserSource.absolutePosition(); + } + function tokenDiagnostics() { + return _scannerParserSource.tokenDiagnostics(); + } + function getRewindPoint() { + var rewindPoint = _scannerParserSource.getRewindPoint(); + var oldSourceUnitCursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); + rewindPoint.changeDelta = _changeDelta; + rewindPoint.changeRange = _changeRange; + rewindPoint.oldSourceUnitCursor = _oldSourceUnitCursor; + _oldSourceUnitCursor = oldSourceUnitCursorClone; + _outstandingRewindPointCount++; + return rewindPoint; + } + function rewind(rewindPoint) { + _changeRange = rewindPoint.changeRange; + _changeDelta = rewindPoint.changeDelta; + returnSyntaxCursor(_oldSourceUnitCursor); + _oldSourceUnitCursor = rewindPoint.oldSourceUnitCursor; + rewindPoint.oldSourceUnitCursor = null; + _scannerParserSource.rewind(rewindPoint); + } + function releaseRewindPoint(rewindPoint) { + if (rewindPoint.oldSourceUnitCursor !== null) { + returnSyntaxCursor(rewindPoint.oldSourceUnitCursor); + } + _scannerParserSource.releaseRewindPoint(rewindPoint); + _outstandingRewindPointCount--; + TypeScript.Debug.assert(_outstandingRewindPointCount >= 0); + } + function isPinned() { + return _outstandingRewindPointCount > 0; + } + function canReadFromOldSourceUnit() { + if (isPinned()) { + return false; + } + if (_changeRange !== null && _changeRangeNewSpan.intersectsWithPosition(absolutePosition())) { + return false; + } + syncCursorToNewTextIfBehind(); + return _changeDelta === 0 && !_oldSourceUnitCursor.isFinished(); + } + function updateTokens(nodeOrToken) { + var position = absolutePosition(); + var tokenWasMoved = isPastChangeRange() && TypeScript.fullStart(nodeOrToken) !== position; + if (tokenWasMoved) { + setTokenFullStartWalker.position = position; + TypeScript.visitNodeOrToken(setTokenFullStartWalker, nodeOrToken); + } + } + function currentNode() { + if (canReadFromOldSourceUnit()) { + var node = tryGetNodeFromOldSourceUnit(); + if (node !== null) { + updateTokens(node); + return node; } - }; - - MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) { - var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); - var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); - var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment; - var finalColumns = indentationColumns + deltaFromFirstSegment; - if (finalColumns < 0) { - finalColumns = 0; + } + return null; + } + function currentToken() { + if (canReadFromOldSourceUnit()) { + var token = tryGetTokenFromOldSourceUnit(); + if (token !== null) { + updateTokens(token); + return token; } - var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options); - - if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { - return; + } + return _scannerParserSource.currentToken(); + } + function currentContextualToken() { + return _scannerParserSource.currentContextualToken(); + } + function syncCursorToNewTextIfBehind() { + while (true) { + if (_oldSourceUnitCursor.isFinished()) { + break; } - - if (indentationString === segment.substring(0, firstNonWhitespacePosition)) { - return; + if (_changeDelta >= 0) { + break; } - - this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString); - }; - return MultipleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.MultipleTokenIndenter = MultipleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var SingleTokenIndenter = (function (_super) { - __extends(SingleTokenIndenter, _super); - function SingleTokenIndenter(indentationPosition, sourceUnit, snapshot, indentFirstToken, options) { - _super.call(this, new TypeScript.TextSpan(indentationPosition, 1), sourceUnit, snapshot, indentFirstToken, options); - this.indentationAmount = null; - - this.indentationPosition = indentationPosition; - } - SingleTokenIndenter.getIndentationAmount = function (position, sourceUnit, snapshot, options) { - var walker = new SingleTokenIndenter(position, sourceUnit, snapshot, true, options); - sourceUnit.accept(walker); - return walker.indentationAmount; - }; - - SingleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { - if (token.fullWidth() === 0 || (this.indentationPosition - this.position() < token.leadingTriviaWidth())) { - this.indentationAmount = commentIndentationAmount; - } else { - this.indentationAmount = indentationAmount; + var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); + if (TypeScript.isNode(currentNodeOrToken) && (TypeScript.fullWidth(currentNodeOrToken) > Math.abs(_changeDelta))) { + _oldSourceUnitCursor.moveToFirstChild(); + } + else { + _oldSourceUnitCursor.moveToNextSibling(); + _changeDelta += TypeScript.fullWidth(currentNodeOrToken); } - }; - return SingleTokenIndenter; - })(Formatting.IndentationTrackingWalker); - Formatting.SingleTokenIndenter = SingleTokenIndenter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - (function (Formatting) { - var Formatter = (function (_super) { - __extends(Formatter, _super); - function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) { - _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); - this.previousTokenSpan = null; - this.previousTokenParent = null; - this.scriptHasErrors = false; - - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - - this.rulesProvider = rulesProvider; - this.formattingRequestKind = formattingRequestKind; - this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind); } - Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) { - var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind); - sourceUnit.accept(walker); - return walker.edits(); - }; - - Formatter.prototype.visitTokenInSpan = function (token) { - if (token.fullWidth() !== 0) { - var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), token.width()); - if (this.textSpan().containsTextSpan(tokenSpan)) { - this.processToken(token); - } + } + function intersectsWithChangeRangeSpanInOriginalText(start, length) { + return !isPastChangeRange() && _changeRange.span().intersectsWith(start, length); + } + function tryGetNodeFromOldSourceUnit() { + while (true) { + var node = _oldSourceUnitCursor.currentNode(); + if (node === null) { + return null; } - - _super.prototype.visitTokenInSpan.call(this, token); - }; - - Formatter.prototype.processToken = function (token) { - var position = this.position(); - - if (token.leadingTriviaWidth() !== 0) { - this.processTrivia(token.leadingTrivia(), position); - position += token.leadingTriviaWidth(); + if (!intersectsWithChangeRangeSpanInOriginalText(absolutePosition(), TypeScript.fullWidth(node))) { + var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node); + if (!isIncrementallyUnusuable) { + return node; + } } - - var currentTokenSpan = new Formatting.TokenSpan(token.kind(), position, token.width()); - if (!this.parent().hasSkippedOrMissingTokenChild()) { - if (this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan)); + _oldSourceUnitCursor.moveToFirstChild(); + } + } + function canReuseTokenFromOldSourceUnit(position, token) { + if (token !== null) { + if (!intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { + if (!token.isIncrementallyUnusable() && !TypeScript.Scanner.isContextualToken(token)) { + return true; } } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); + } + return false; + } + function tryGetTokenFromOldSourceUnit() { + var token = _oldSourceUnitCursor.currentToken(); + return canReuseTokenFromOldSourceUnit(absolutePosition(), token) ? token : null; + } + function peekToken(n) { + if (canReadFromOldSourceUnit()) { + var token = tryPeekTokenFromOldSourceUnit(n); + if (token !== null) { + return token; } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - position += token.width(); - - if (token.trailingTriviaWidth() !== 0) { - this.processTrivia(token.trailingTrivia(), position); + } + return _scannerParserSource.peekToken(n); + } + function tryPeekTokenFromOldSourceUnit(n) { + var cursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); + var token = tryPeekTokenFromOldSourceUnitWorker(n); + returnSyntaxCursor(_oldSourceUnitCursor); + _oldSourceUnitCursor = cursorClone; + return token; + } + function tryPeekTokenFromOldSourceUnitWorker(n) { + var currentPosition = absolutePosition(); + _oldSourceUnitCursor.moveToFirstToken(); + for (var i = 0; i < n; i++) { + var interimToken = _oldSourceUnitCursor.currentToken(); + if (!canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { + return null; } - }; - - Formatter.prototype.processTrivia = function (triviaList, fullStart) { - var position = fullStart; - - for (var i = 0, n = triviaList.count(); i < n; i++) { - var trivia = triviaList.syntaxTriviaAt(i); - - if (trivia.isComment() || trivia.isSkippedToken()) { - var currentTokenSpan = new Formatting.TokenSpan(trivia.kind(), position, trivia.fullWidth()); - if (this.textSpan().containsTextSpan(currentTokenSpan)) { - if (trivia.isComment() && this.previousTokenSpan) { - this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); - } else { - var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan()); - this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan)); - } - this.previousTokenSpan = currentTokenSpan; - if (this.previousTokenParent) { - this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); - } - this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); - } + currentPosition += interimToken.fullWidth(); + _oldSourceUnitCursor.moveToNextSibling(); + } + var token = _oldSourceUnitCursor.currentToken(); + return canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null; + } + function consumeNode(node) { + _oldSourceUnitCursor.moveToNextSibling(); + var _absolutePosition = absolutePosition() + TypeScript.fullWidth(node); + _scannerParserSource.resetToPosition(_absolutePosition); + } + function consumeToken(currentToken) { + if (_oldSourceUnitCursor.currentToken() === currentToken) { + _oldSourceUnitCursor.moveToNextSibling(); + var _absolutePosition = absolutePosition() + currentToken.fullWidth(); + _scannerParserSource.resetToPosition(_absolutePosition); + } + else { + _changeDelta -= currentToken.fullWidth(); + _scannerParserSource.consumeToken(currentToken); + if (!isPastChangeRange()) { + if (absolutePosition() >= _changeRangeNewSpan.end()) { + _changeDelta += _changeRange.newLength() - _changeRange.span().length(); + _changeRange = null; } - - position += trivia.fullWidth(); } - }; - - Formatter.prototype.findCommonParents = function (parent1, parent2) { - var shallowParent; - var shallowParentDepth; - var deepParent; - var deepParentDepth; - - if (parent1.depth() < parent2.depth()) { - shallowParent = parent1; - shallowParentDepth = parent1.depth(); - deepParent = parent2; - deepParentDepth = parent2.depth(); - } else { - shallowParent = parent2; - shallowParentDepth = parent2.depth(); - deepParent = parent1; - deepParentDepth = parent1.depth(); + } + } + function isPastChangeRange() { + return _changeRange === null; + } + return { + text: text, + fileName: fileName, + languageVersion: languageVersion, + currentNode: currentNode, + currentToken: currentToken, + currentContextualToken: currentContextualToken, + peekToken: peekToken, + consumeNode: consumeNode, + consumeToken: consumeToken, + getRewindPoint: getRewindPoint, + rewind: rewind, + releaseRewindPoint: releaseRewindPoint, + tokenDiagnostics: tokenDiagnostics, + release: release + }; + } + function createSyntaxCursorPiece(element, indexInParent) { + return { element: element, indexInParent: indexInParent }; + } + var syntaxCursorPool = []; + var syntaxCursorPoolCount = 0; + function returnSyntaxCursor(cursor) { + cursor.clean(); + syntaxCursorPool[syntaxCursorPoolCount] = cursor; + syntaxCursorPoolCount++; + } + function getSyntaxCursor() { + var cursor = syntaxCursorPoolCount > 0 ? syntaxCursorPool[syntaxCursorPoolCount - 1] : createSyntaxCursor(); + if (syntaxCursorPoolCount > 0) { + syntaxCursorPoolCount--; + syntaxCursorPool[syntaxCursorPoolCount] = null; + } + return cursor; + } + function cloneSyntaxCursor(cursor) { + var newCursor = getSyntaxCursor(); + newCursor.deepCopyFrom(cursor); + return newCursor; + } + function createSyntaxCursor() { + var pieces = []; + var currentPieceIndex = -1; + function clean() { + for (var i = 0, n = pieces.length; i < n; i++) { + var piece = pieces[i]; + if (piece.element === null) { + break; } - - TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0"); - TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth"); - - while (deepParentDepth > shallowParentDepth) { - deepParent = deepParent.parent(); - deepParentDepth--; + piece.element = null; + piece.indexInParent = -1; + } + currentPieceIndex = -1; + } + function deepCopyFrom(other) { + for (var i = 0, n = other.pieces.length; i < n; i++) { + var piece = other.pieces[i]; + if (piece.element === null) { + break; } - - TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth"); - - while (deepParent.node() && shallowParent.node()) { - if (deepParent.node() === shallowParent.node()) { - return deepParent; - } - deepParent = deepParent.parent(); - shallowParent = shallowParent.parent(); + pushElement(piece.element, piece.indexInParent); + } + } + function isFinished() { + return currentPieceIndex < 0; + } + function currentNodeOrToken() { + if (isFinished()) { + return null; + } + var result = pieces[currentPieceIndex].element; + return result; + } + function currentNode() { + var element = currentNodeOrToken(); + return TypeScript.isNode(element) ? element : null; + } + function moveToFirstChild() { + var nodeOrToken = currentNodeOrToken(); + if (nodeOrToken === null) { + return; + } + if (TypeScript.isToken(nodeOrToken)) { + return; + } + for (var i = 0, n = TypeScript.childCount(nodeOrToken); i < n; i++) { + var child = TypeScript.childAt(nodeOrToken, i); + if (child !== null && !TypeScript.isShared(child)) { + pushElement(child, i); + moveToFirstChildIfList(); + return; } - - throw TypeScript.Errors.invalidOperation(); - }; - - Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) { - var token1Line = this.getLineNumber(t1); - var token2Line = this.getLineNumber(t2); - - var commonParent = this.findCommonParents(t1Parent, t2Parent); - - this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent); - - var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext); - - if (rule != null) { - this.RecordRuleEdits(rule, t1, t2); - - if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) { - this.forceSkipIndentingNextToken(t2.start()); - } - - if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) { - this.forceIndentNextToken(t2.start()); + } + moveToNextSibling(); + } + function moveToNextSibling() { + while (!isFinished()) { + var currentPiece = pieces[currentPieceIndex]; + var parent = currentPiece.element.parent; + for (var i = currentPiece.indexInParent + 1, n = TypeScript.childCount(parent); i < n; i++) { + var sibling = TypeScript.childAt(parent, i); + if (sibling !== null && !TypeScript.isShared(sibling)) { + currentPiece.element = sibling; + currentPiece.indexInParent = i; + moveToFirstChildIfList(); + return; } } - - if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) { - this.trimWhitespaceInLineRange(token1Line, token2Line, t1); + currentPiece.element = null; + currentPiece.indexInParent = -1; + currentPieceIndex--; + } + } + function moveToFirstChildIfList() { + var element = pieces[currentPieceIndex].element; + if (TypeScript.isList(element) || TypeScript.isSeparatedList(element)) { + pushElement(TypeScript.childAt(element, 0), 0); + } + } + function pushElement(element, indexInParent) { + currentPieceIndex++; + if (currentPieceIndex === pieces.length) { + pieces.push(createSyntaxCursorPiece(element, indexInParent)); + } + else { + var piece = pieces[currentPieceIndex]; + piece.element = element; + piece.indexInParent = indexInParent; + } + } + function moveToFirstToken() { + while (!isFinished()) { + var element = pieces[currentPieceIndex].element; + if (TypeScript.isNode(element)) { + moveToFirstChild(); + continue; } + return; + } + } + function currentToken() { + moveToFirstToken(); + var element = currentNodeOrToken(); + return element === null ? null : element; + } + return { + pieces: pieces, + clean: clean, + isFinished: isFinished, + moveToFirstChild: moveToFirstChild, + moveToFirstToken: moveToFirstToken, + moveToNextSibling: moveToNextSibling, + currentNodeOrToken: currentNodeOrToken, + currentNode: currentNode, + currentToken: currentToken, + pushElement: pushElement, + deepCopyFrom: deepCopyFrom + }; + } + var SetTokenFullStartWalker = (function (_super) { + __extends(SetTokenFullStartWalker, _super); + function SetTokenFullStartWalker() { + _super.apply(this, arguments); + } + SetTokenFullStartWalker.prototype.visitToken = function (token) { + var position = this.position; + token.setFullStart(position); + this.position = position + token.fullWidth(); + }; + return SetTokenFullStartWalker; + })(TypeScript.SyntaxWalker); + var setTokenFullStartWalker = new SetTokenFullStartWalker(); + function parse(oldSyntaxTree, textChangeRange, newText) { + TypeScript.Debug.assert(oldSyntaxTree.isConcrete(), "Can only incrementally parse a concrete syntax tree."); + if (textChangeRange.isUnchanged()) { + return oldSyntaxTree; + } + return TypeScript.Parser.parseSource(createParserSource(oldSyntaxTree, textChangeRange, newText), oldSyntaxTree.isDeclaration()); + } + IncrementalParser.parse = parse; + })(TypeScript.IncrementalParser || (TypeScript.IncrementalParser = {})); + var IncrementalParser = TypeScript.IncrementalParser; +})(TypeScript || (TypeScript = {})); +var ts; +(function (ts) { + (function (OutliningElementsCollector) { + function collectElements(sourceFile) { + var elements = []; + function addOutlineRange(hintSpanNode, startElement, endElement) { + if (hintSpanNode && startElement && endElement) { + var span = { + textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), + hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), + bannerText: "...", + autoCollapse: false + }; + elements.push(span); + } + } + var depth = 0; + var maxDepth = 20; + function walk(n) { + if (depth > maxDepth) { + return; + } + switch (n.kind) { + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + case 162 /* TryBlock */: + case 162 /* TryBlock */: + case 163 /* CatchBlock */: + case 164 /* FinallyBlock */: + var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 5 /* OpenBraceToken */ && c; }); + var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 6 /* CloseBraceToken */ && c; }); + addOutlineRange(n.parent, openBrace, closeBrace); + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 128 /* ObjectLiteral */: + var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 5 /* OpenBraceToken */ && c; }); + var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 6 /* CloseBraceToken */ && c; }); + addOutlineRange(n, openBrace, closeBrace); + break; + } + depth++; + ts.forEachChild(n, walk); + depth--; + } + walk(sourceFile); + return elements; + } + OutliningElementsCollector.collectElements = collectElements; + })(ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {})); + var OutliningElementsCollector = ts.OutliningElementsCollector; +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + var GetScriptLexicalStructureWalker = (function (_super) { + __extends(GetScriptLexicalStructureWalker, _super); + function GetScriptLexicalStructureWalker(fileName) { + _super.call(this); + this.fileName = fileName; + this.nameStack = []; + this.kindStack = []; + this.parentScopes = []; + this.currentScope = this.createScope(); + } + GetScriptLexicalStructureWalker.prototype.createScope = function () { + return { + items: TypeScript.createIntrinsicsObject(), + childScopes: TypeScript.createIntrinsicsObject(), + childScopeNames: [], + itemNames: [] }; - - Formatter.prototype.getLineNumber = function (span) { - return this.snapshot().getLineNumberFromPosition(span.start()); + }; + GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { + TypeScript.Debug.assert(containerName, "No scope name provided"); + var key = kind + "+" + containerName; + this.nameStack.push(containerName); + this.kindStack.push(kind); + var parentScope = this.currentScope; + this.parentScopes.push(parentScope); + var scope = ts.lookUp(parentScope.childScopes, key); + if (!scope) { + scope = this.createScope(); + parentScope.childScopes[key] = scope; + parentScope.childScopeNames.push(key); + } + this.currentScope = scope; + return parentScope; + }; + GetScriptLexicalStructureWalker.prototype.popScope = function () { + TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); + this.currentScope = this.parentScopes.pop(); + this.kindStack.pop(); + this.nameStack.pop(); + }; + GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { + var _this = this; + if (scope === void 0) { scope = this.currentScope; } + scope.itemNames.forEach(function (item) { + items.push(scope.items[item]); + }); + scope.childScopeNames.forEach(function (childScope) { + _this.collectItems(items, scope.childScopes[childScope]); + }); + }; + GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { + var visitor = new GetScriptLexicalStructureWalker(fileName); + TypeScript.visitNodeOrToken(visitor, unit); + visitor.collectItems(items); + }; + GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { + var key = kind + "+" + name; + if (ts.lookUp(this.currentScope.items, key) !== undefined) { + this.addAdditionalSpan(node, key); + return; + } + var item = { + name: name, + kind: kind, + matchKind: ts.MatchKind.exact, + fileName: this.fileName, + kindModifiers: this.getKindModifiers(modifiers), + minChar: TypeScript.start(node), + limChar: TypeScript.end(node), + containerName: this.nameStack.join("."), + containerKind: this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack) }; - - Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) { - for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) { - var line = this.snapshot().getLineFromLineNumber(lineNumber); - - this.trimWhitespace(line, token); - } + this.currentScope.items[key] = item; + this.currentScope.itemNames.push(key); + }; + GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { + var item = ts.lookUp(this.currentScope.items, key); + TypeScript.Debug.assert(item !== undefined); + var start = TypeScript.start(node); + var span = { + minChar: start, + limChar: start + TypeScript.width(node) }; - - Formatter.prototype.trimWhitespace = function (line, token) { - if (token && (token.kind() == 6 /* MultiLineCommentTrivia */ || token.kind() == 7 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition()) - return; - - var text = line.getText(); - var index = 0; - - for (index = text.length - 1; index >= 0; --index) { - if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) { - break; + if (item.additionalSpans) { + item.additionalSpans.push(span); + } + else { + item.additionalSpans = [span]; + } + }; + GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { + var result = []; + for (var i = 0, n = modifiers.length; i < n; i++) { + result.push(modifiers[i].text()); + } + return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; + }; + GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { + var names = this.getModuleNames(node); + this.visitModuleDeclarationWorker(node, names, 0); + }; + GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { + if (nameIndex === names.length) { + _super.prototype.visitModuleDeclaration.call(this, node); + } + else { + var name = names[nameIndex]; + var kind = ts.ScriptElementKind.moduleElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + this.visitModuleDeclarationWorker(node, names, nameIndex + 1); + this.popScope(); + } + }; + GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { + var result = []; + if (node.stringLiteral) { + result.push(node.stringLiteral.text()); + } + else { + this.getModuleNamesHelper(node.name, result); + } + return result; + }; + GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { + if (name.kind() === 121 /* QualifiedName */) { + var qualifiedName = name; + this.getModuleNamesHelper(qualifiedName.left, result); + result.push(qualifiedName.right.text()); + } + else { + result.push(name.text()); + } + }; + GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.classElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitClassDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.interfaceElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitInterfaceDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { + if (node.parent.kind() === 128 /* InterfaceDeclaration */) { + _super.prototype.visitObjectType.call(this, node); + } + }; + GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.enumElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitEnumDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructorImplementationElement, "constructor"); + var parameters = node.callSignature.parameterList.parameters; + if (parameters) { + for (var i = 0, n = parameters.length; i < n; i++) { + var parameter = parameters[i]; + TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); + if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { + this.createItem(node, parameter.modifiers, ts.ScriptElementKind.memberVariableElement, parameter.identifier.text()); } } - - ++index; - - if (index < text.length) { - this.recordEdit(line.startPosition() + index, line.length() - index, ""); - } - }; - - Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) { - if (rule.Operation.Action == 0 /* Ignore */) { - return; - } - - var betweenSpan; - - switch (rule.Operation.Action) { - case 3 /* Delete */: - { - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 0) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), ""); - return; - } - } - break; - - case 2 /* NewLine */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - var doEdit = false; - var betweenText = this.snapshot().getText(betweenSpan); - - var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter); - if (lineFeedLoc < 0) { - doEdit = true; - } else { - lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1); - if (lineFeedLoc >= 0) { - doEdit = true; - } - } - - if (doEdit) { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter); - return; - } - } - break; - - case 1 /* Space */: - { - if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { - return; - } - - betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); - - if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") { - this.recordEdit(betweenSpan.start(), betweenSpan.length(), " "); - return; - } - } - break; - } - }; - return Formatter; - })(Formatting.MultipleTokenIndenter); - Formatting.Formatter = Formatter; - })(Services.Formatting || (Services.Formatting = {})); - var Formatting = Services.Formatting; + } + }; + GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { + var modifiers = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? node.parent.modifiers : TypeScript.Syntax.emptyList(); + var kind = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? ts.ScriptElementKind.memberVariableElement : ts.ScriptElementKind.variableElement; + this.createItem(node, modifiers, kind, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.indexSignatureElement, "[]"); + }; + GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.callSignatureElement, "()"); + }; + GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructSignatureElement, "new()"); + }; + GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { + if (TypeScript.width(node.identifier) > 0) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.functionElement, node.identifier.text()); + } + }; + GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { + }; + return GetScriptLexicalStructureWalker; + })(TypeScript.SyntaxWalker); + Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); -var debugObjectHost = this; - var TypeScript; (function (TypeScript) { (function (Services) { - var CoreServices = (function () { - function CoreServices(host) { - this.host = host; + var BraceMatcher = (function () { + function BraceMatcher() { } - CoreServices.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - return TypeScript.preProcessFile(fileName, sourceText); + BraceMatcher.getMatchSpans = function (syntaxTree, position) { + var result = []; + var currentToken = TypeScript.findToken(syntaxTree.sourceUnit(), position); + BraceMatcher.getMatchingCloseBrace(currentToken, position, result); + BraceMatcher.getMatchingOpenBrace(currentToken, position, result); + return result; }; - - CoreServices.prototype.getDefaultCompilationSettings = function () { - var settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - return settings; + BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { + if (TypeScript.start(currentToken) === position) { + var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); + if (closingBraceKind !== null) { + var parentElement = currentToken.parent; + var currentPosition = TypeScript.fullStart(currentToken.parent); + for (var i = 0, n = TypeScript.childCount(parentElement); i < n; i++) { + var element = TypeScript.childAt(parentElement, i); + if (element !== null && TypeScript.fullWidth(element) > 0) { + if (element.kind() === closingBraceKind) { + var range1 = new TypeScript.TextSpan(position, TypeScript.width(currentToken)); + var range2 = new TypeScript.TextSpan(currentPosition + TypeScript.leadingTriviaWidth(element), TypeScript.width(element)); + result.push(range1, range2); + break; + } + currentPosition += TypeScript.fullWidth(element); + } + } + } + } }; - - CoreServices.prototype.dumpMemory = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.dumpHeap) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.dumpHeap()'])); + BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { + if (currentToken.fullStart() === position) { + currentToken = TypeScript.previousToken(currentToken); } - - var objects = debugObjectHost.Debug.dumpHeap(2); - var totalSize = 0; - for (var i = 0; i < objects.length; i++) { - totalSize += objects[i].size; + if (currentToken !== null && TypeScript.start(currentToken) === (position - 1)) { + var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); + if (openBraceKind !== null) { + var parentElement = currentToken.parent; + var currentPosition = TypeScript.fullStart(currentToken.parent) + TypeScript.fullWidth(parentElement); + for (var i = TypeScript.childCount(parentElement) - 1; i >= 0; i--) { + var element = TypeScript.childAt(parentElement, i); + if (element !== null && TypeScript.fullWidth(element) > 0) { + if (element.kind() === openBraceKind) { + var range1 = new TypeScript.TextSpan(position - 1, TypeScript.width(currentToken)); + var range2 = new TypeScript.TextSpan(currentPosition - TypeScript.lastToken(element).trailingTriviaWidth() - TypeScript.width(element), TypeScript.width(element)); + result.push(range1, range2); + break; + } + currentPosition -= TypeScript.fullWidth(element); + } + } + } } - - return "There are " + objects.length + " object(s) accessible from 'global', for a total of " + totalSize + " byte(s)."; }; - - CoreServices.prototype.getMemoryInfo = function () { - if (!debugObjectHost || !debugObjectHost.Debug || !debugObjectHost.Debug.getMemoryInfo) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['Debug.getMemoryInfo()'])); + BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { + var element = positionedElement !== null && positionedElement; + switch (element.kind()) { + case 70 /* OpenBraceToken */: + return 71 /* CloseBraceToken */; + case 72 /* OpenParenToken */: + return 73 /* CloseParenToken */; + case 74 /* OpenBracketToken */: + return 75 /* CloseBracketToken */; + case 80 /* LessThanToken */: + return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; } - - return debugObjectHost.Debug.getMemoryInfo(); + return null; }; - - CoreServices.prototype.collectGarbage = function () { - if (!debugObjectHost || !debugObjectHost.CollectGarbage) { - throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.This_version_of_the_Javascript_runtime_does_not_support_the_0_function, ['collectGarbage()'])); + BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { + var element = positionedElement !== null && positionedElement; + switch (element.kind()) { + case 71 /* CloseBraceToken */: + return 70 /* OpenBraceToken */; + case 73 /* CloseParenToken */: + return 72 /* OpenParenToken */; + case 75 /* CloseBracketToken */: + return 74 /* OpenBracketToken */; + case 81 /* GreaterThanToken */: + return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; } - - debugObjectHost.CollectGarbage(); + return null; }; - return CoreServices; + return BraceMatcher; })(); - Services.CoreServices = CoreServices; + Services.BraceMatcher = BraceMatcher; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - var HostFileInformation = (function () { - function HostFileInformation(fileName, host, version, isOpen, byteOrderMark) { - this.fileName = fileName; - this.host = host; - this.version = version; - this.isOpen = isOpen; - this.byteOrderMark = byteOrderMark; - this._sourceText = null; - } - HostFileInformation.prototype.getScriptSnapshot = function () { - if (this._sourceText === null) { - this._sourceText = this.host.getScriptSnapshot(this.fileName); - } - - return this._sourceText; - }; - return HostFileInformation; - })(); - - var HostCache = (function () { - function HostCache(host) { - this._fileNameToEntry = new TypeScript.StringHashTable(); - - var fileNames = host.getScriptFileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - this._fileNameToEntry.add(TypeScript.switchToForwardSlashes(fileName), new HostFileInformation(fileName, host, host.getScriptVersion(fileName), host.getScriptIsOpen(fileName), host.getScriptByteOrderMark(fileName))); - } - - var settings = host.getCompilationSettings(); - if (!settings) { - settings = new TypeScript.CompilationSettings(); - settings.codeGenTarget = 1 /* EcmaScript5 */; - } - - this._compilationSettings = TypeScript.ImmutableCompilationSettings.fromCompilationSettings(settings); - } - HostCache.prototype.compilationSettings = function () { - return this._compilationSettings; - }; - - HostCache.prototype.contains = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)) !== null; - }; - - HostCache.prototype.getHostFileName = function (fileName) { - var hostCacheEntry = this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)); - if (hostCacheEntry) { - return hostCacheEntry.fileName; + (function (Breakpoints) { + function createBreakpointSpanInfo(parentElement) { + var childElements = []; + for (var _i = 1; _i < arguments.length; _i++) { + childElements[_i - 1] = arguments[_i]; } - return fileName; - }; - - HostCache.prototype.getFileNames = function () { - return this._fileNameToEntry.getAllKeys(); - }; - - HostCache.prototype.getVersion = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).version; - }; - - HostCache.prototype.isOpen = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).isOpen; - }; - - HostCache.prototype.getByteOrderMark = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).byteOrderMark; - }; - - HostCache.prototype.getScriptSnapshot = function (fileName) { - return this._fileNameToEntry.lookup(TypeScript.switchToForwardSlashes(fileName)).getScriptSnapshot(); - }; - - HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (fileName, lastKnownVersion) { - var currentVersion = this.getVersion(fileName); - if (lastKnownVersion === currentVersion) { - return TypeScript.TextChangeRange.unchanged; + if (!parentElement) { + return null; } - - var scriptSnapshot = this.getScriptSnapshot(fileName); - return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); - }; - return HostCache; - })(); - - var SyntaxTreeCache = (function () { - function SyntaxTreeCache(_host) { - this._host = _host; - this._currentFileName = ""; - this._currentFileVersion = -1; - this._currentFileSyntaxTree = null; - this._currentFileScriptSnapshot = null; - this._hostCache = new HostCache(_host); - } - SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (fileName) { - this._hostCache = new HostCache(this._host); - - var version = this._hostCache.getVersion(fileName); - var syntaxTree = null; - - if (this._currentFileSyntaxTree === null || this._currentFileName !== fileName) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.createSyntaxTree(fileName, scriptSnapshot); - } else if (this._currentFileVersion !== version) { - var scriptSnapshot = this._hostCache.getScriptSnapshot(fileName); - syntaxTree = this.updateSyntaxTree(fileName, scriptSnapshot, this._currentFileSyntaxTree, this._currentFileVersion); + if (childElements.length == 0) { + return { + minChar: TypeScript.start(parentElement), + limChar: TypeScript.end(parentElement) + }; } - - if (syntaxTree !== null) { - this._currentFileScriptSnapshot = scriptSnapshot; - this._currentFileVersion = version; - this._currentFileName = fileName; - this._currentFileSyntaxTree = syntaxTree; + var start; + var end; + for (var i = 0; i < childElements.length; i++) { + var element = childElements[i]; + if (element && !TypeScript.isShared(element)) { + if (start == undefined) { + start = TypeScript.start(element); + } + end = TypeScript.end(element); + } } - - return this._currentFileSyntaxTree; - }; - - SyntaxTreeCache.prototype.createSyntaxTree = function (fileName, scriptSnapshot) { - var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - - var syntaxTree = TypeScript.Parser.parse(fileName, text, TypeScript.isDTSFile(fileName), TypeScript.getParseOptions(TypeScript.ImmutableCompilationSettings.defaultSettings())); - - return syntaxTree; - }; - - SyntaxTreeCache.prototype.updateSyntaxTree = function (fileName, scriptSnapshot, previousSyntaxTree, previousFileVersion) { - var editRange = this._hostCache.getScriptTextChangeRangeSinceVersion(fileName, previousFileVersion); - - if (editRange === null) { - return this.createSyntaxTree(fileName, scriptSnapshot); + return { + minChar: start, + limChar: end + }; + } + function createBreakpointSpanInfoWithLimChar(startElement, limChar) { + return { + minChar: TypeScript.start(startElement), + limChar: limChar + }; + } + var BreakpointResolver = (function () { + function BreakpointResolver(posLine, lineMap) { + this.posLine = posLine; + this.lineMap = lineMap; } - - var nextSyntaxTree = TypeScript.Parser.incrementalParse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - - this.ensureInvariants(fileName, editRange, nextSyntaxTree, this._currentFileScriptSnapshot, scriptSnapshot); - - return nextSyntaxTree; - }; - - SyntaxTreeCache.prototype.ensureInvariants = function (fileName, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { - var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength(); - var actualNewLength = newScriptSnapshot.getLength(); - - function provideMoreDebugInfo() { - var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"]; - - var oldSpan = editRange.span(); - - function prettyPrintString(s) { - return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"'; + BreakpointResolver.prototype.breakpointSpanOfToken = function (positionedToken) { + switch (positionedToken.kind()) { + case 70 /* OpenBraceToken */: + return this.breakpointSpanOfOpenBrace(positionedToken); + case 71 /* CloseBraceToken */: + return this.breakpointSpanOfCloseBrace(positionedToken); + case 79 /* CommaToken */: + return this.breakpointSpanOfComma(positionedToken); + case 78 /* SemicolonToken */: + case 10 /* EndOfFileToken */: + return this.breakpointSpanIfStartsOnSameLine(TypeScript.previousToken(positionedToken)); + case 73 /* CloseParenToken */: + return this.breakpointSpanOfCloseParen(positionedToken); + case 22 /* DoKeyword */: + var parentElement = positionedToken.parent; + if (parentElement && parentElement.kind() == 161 /* DoStatement */) { + return this.breakpointSpanIfStartsOnSameLine(TypeScript.nextToken(positionedToken)); + } + break; + } + return this.breakpointSpanOfContainingNode(positionedToken); + }; + BreakpointResolver.prototype.breakpointSpanOfOpenBrace = function (openBraceToken) { + var container = TypeScript.Syntax.containingNode(openBraceToken); + if (container) { + var originalContainer = container; + if (container && container.kind() == 146 /* Block */) { + container = TypeScript.Syntax.containingNode(container); + if (!container) { + container = originalContainer; + } + } + switch (container.kind()) { + case 146 /* Block */: + if (!this.canHaveBreakpointInBlock(container)) { + return null; + } + return this.breakpointSpanOfFirstStatementInBlock(container); + break; + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(container)); + } + else { + return this.breakpointSpanOf(container); + } + case 132 /* EnumDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstEnumElement(container); + } + else { + return this.breakpointSpanOf(container); + } + case 147 /* IfStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 236 /* CatchClause */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + } + else { + return this.breakpointSpanOf(container); + } + case 161 /* DoStatement */: + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + case 154 /* ForStatement */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + } + else { + return this.breakpointSpanOf(TypeScript.previousToken(openBraceToken)); + } + case 235 /* ElseClause */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 237 /* FinallyClause */: + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + case 151 /* SwitchStatement */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementOfFirstCaseClause(container); + } + else { + return this.breakpointSpanOf(container); + } + } + } + return null; + }; + BreakpointResolver.prototype.breakpointSpanOfCloseBrace = function (closeBraceToken) { + var container = TypeScript.Syntax.containingNode(closeBraceToken); + if (container) { + var originalContainer = container; + if (container.kind() == 146 /* Block */) { + container = TypeScript.Syntax.containingNode(container); + if (!container) { + container = originalContainer; + } + } + switch (container.kind()) { + case 146 /* Block */: + if (!this.canHaveBreakpointInBlock(container)) { + return null; + } + return this.breakpointSpanOfLastStatementInBlock(container); + break; + case 130 /* ModuleDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + var moduleSyntax = container; + if (moduleSyntax.moduleElements && moduleSyntax.moduleElements.length > 0) { + return createBreakpointSpanInfo(closeBraceToken); + } + else { + return null; + } + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + return createBreakpointSpanInfo(closeBraceToken); + case 132 /* EnumDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + return createBreakpointSpanInfo(closeBraceToken); + case 147 /* IfStatement */: + case 235 /* ElseClause */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + return this.breakpointSpanOfLastStatementInBlock(originalContainer); + case 151 /* SwitchStatement */: + return this.breakpointSpanOfLastStatementOfLastCaseClause(container); + } } - - debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n'); - debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end()))); - - var newSpan = editRange.newSpan(); - - debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n'); - debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end()))); - - return debugInformation.join(' '); - } - - TypeScript.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo); - - if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { - var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start()); - var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start()); - TypeScript.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!'); - - var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength()); - var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength()); - TypeScript.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!'); - - var normalTree = this.createSyntaxTree(fileName, newScriptSnapshot); - TypeScript.Debug.assert(normalTree.structuralEquals(incrementalTree), 'Expected equal incremental and normal trees'); - - var incrementalTreeText = incrementalTree.sourceUnit().fullText(); - var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength()); - TypeScript.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal'); - } - }; - return SyntaxTreeCache; - })(); - Services.SyntaxTreeCache = SyntaxTreeCache; - - var LanguageServiceCompiler = (function () { - function LanguageServiceCompiler(host) { - this.host = host; - this.compiler = null; - this.hostCache = null; - this.logger = this.host; - } - LanguageServiceCompiler.prototype.synchronizeHostData = function () { - var _this = this; - TypeScript.timeFunction(this.logger, "synchronizeHostData()", function () { - _this.synchronizeHostDataWorker(); - }); - }; - - LanguageServiceCompiler.prototype.synchronizeHostDataWorker = function () { - this.hostCache = new HostCache(this.host); - - var compilationSettings = this.hostCache.compilationSettings(); - - if (this.compiler === null) { - this.compiler = new TypeScript.TypeScriptCompiler(this.logger, compilationSettings); - } - - this.compiler.setCompilationSettings(compilationSettings); - - var compilerFileNames = this.compiler.fileNames(); - for (var i = 0, n = compilerFileNames.length; i < n; i++) { - var fileName = compilerFileNames[i]; - - if (!this.hostCache.contains(fileName)) { - this.compiler.removeFile(fileName); + return null; + }; + BreakpointResolver.prototype.breakpointSpanOfComma = function (commaToken) { + var commaParent = commaToken.parent; + if (TypeScript.isSeparatedList(commaParent)) { + var grandParent = commaParent.parent; + if (grandParent) { + switch (grandParent.kind()) { + case 224 /* VariableDeclaration */: + case 132 /* EnumDeclaration */: + case 227 /* ParameterList */: + var index = TypeScript.Syntax.childIndex(commaParent, commaToken); + if (index > 0) { + var child = TypeScript.childAt(commaParent, index - 1); + return this.breakpointSpanOf(child); + } + if (grandParent.kind() == 132 /* EnumDeclaration */) { + return null; + } + break; + } + } } - } - - var cache = this.hostCache; - var hostFileNames = cache.getFileNames(); - for (var i = 0, n = hostFileNames.length; i < n; i++) { - var fileName = hostFileNames[i]; - - if (this.compiler.getDocument(fileName)) { - this.tryUpdateFile(this.compiler, fileName); - } else { - this.compiler.addFile(fileName, cache.getScriptSnapshot(fileName), cache.getByteOrderMark(fileName), cache.getVersion(fileName), cache.isOpen(fileName)); + return this.breakpointSpanOfContainingNode(commaToken); + }; + BreakpointResolver.prototype.breakpointSpanOfCloseParen = function (closeParenToken) { + var closeParenParent = closeParenToken.parent; + if (closeParenParent) { + switch (closeParenParent.kind()) { + case 154 /* ForStatement */: + case 227 /* ParameterList */: + return this.breakpointSpanOf(TypeScript.previousToken(closeParenToken)); + } } - } - }; - - LanguageServiceCompiler.prototype.tryUpdateFile = function (compiler, fileName) { - var document = this.compiler.getDocument(fileName); - - var version = this.hostCache.getVersion(fileName); - var isOpen = this.hostCache.isOpen(fileName); - if (document.version === version && document.isOpen === isOpen) { - return; - } - - var textChangeRange = null; - if (document.isOpen && isOpen) { - textChangeRange = this.hostCache.getScriptTextChangeRangeSinceVersion(fileName, document.version); - } - - compiler.updateFile(fileName, this.hostCache.getScriptSnapshot(fileName), version, isOpen, textChangeRange); - }; - - LanguageServiceCompiler.prototype.getScriptSnapshot = function (fileName) { - this.synchronizeHostData(); - return this.hostCache.getScriptSnapshot(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedHostFileName = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.hostCache.getHostFileName(fileName); - }; - - LanguageServiceCompiler.prototype.getCachedTopLevelDeclaration = function (fileName) { - if (!this.hostCache) { - this.synchronizeHostData(); - } - - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.compilationSettings = function () { - this.synchronizeHostData(); - return this.compiler.compilationSettings(); - }; - - LanguageServiceCompiler.prototype.fileNames = function () { - this.synchronizeHostData(); - return this.compiler.fileNames(); - }; - - LanguageServiceCompiler.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageServiceCompiler.prototype.getDocument = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getDocument(fileName); - }; - - LanguageServiceCompiler.prototype.getSyntacticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getSemanticDiagnostics = function (fileName) { - this.synchronizeHostData(); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageServiceCompiler.prototype.getCompilerOptionsDiagnostics = function (resolvePath) { - this.synchronizeHostData(); - return this.compiler.getCompilerOptionsDiagnostics(resolvePath); - }; - - LanguageServiceCompiler.prototype.getSymbolInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetSymbolInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getCallInformationFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetCallInformationFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleMemberSymbolsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleMemberSymbolsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getVisibleDeclsFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetVisibleDeclsFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.getContextualMembersFromAST = function (ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetContextualMembersFromAST(ast, document); - }; - - LanguageServiceCompiler.prototype.pullGetDeclInformation = function (decl, ast, document) { - this.synchronizeHostData(); - return this.compiler.pullGetDeclInformation(decl, ast, document); - }; - - LanguageServiceCompiler.prototype.topLevelDeclaration = function (fileName) { - this.synchronizeHostData(); - return this.compiler.topLevelDeclaration(fileName); - }; - - LanguageServiceCompiler.prototype.getDeclForAST = function (ast) { - this.synchronizeHostData(); - return this.compiler.getDeclForAST(ast); - }; - - LanguageServiceCompiler.prototype.emit = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emit(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.emitDeclarations = function (fileName, resolvePath) { - this.synchronizeHostData(); - return this.compiler.emitDeclarations(fileName, resolvePath); - }; - - LanguageServiceCompiler.prototype.canEmitDeclarations = function (fileName) { - this.synchronizeHostData(); - return this.compiler.canEmitDeclarations(fileName); - }; - return LanguageServiceCompiler; - })(); - Services.LanguageServiceCompiler = LanguageServiceCompiler; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var CompletionHelpers = (function () { - function CompletionHelpers() { - } - CompletionHelpers.getSpan = function (ast) { - return new TypeScript.TextSpan(ast.start(), ast.width()); - }; - - CompletionHelpers.symbolDeclarationIntersectsPosition = function (symbol, fileName, position) { - var decl = symbol.getDeclarations()[0]; - if (decl.fileName() === fileName && this.getSpan(decl.ast()).intersectsWithPosition(position)) { - return true; - } - - return false; - }; - - CompletionHelpers.filterContextualMembersList = function (contextualMemberSymbols, existingMembers, fileName, position) { - if (!existingMembers || !existingMembers.symbols || existingMembers.symbols.length === 0) { - return contextualMemberSymbols; - } - - var existingMemberSymbols = existingMembers.symbols; - var existingMemberNames = TypeScript.createIntrinsicsObject(); - for (var i = 0, n = existingMemberSymbols.length; i < n; i++) { - if (this.symbolDeclarationIntersectsPosition(existingMemberSymbols[i], fileName, position)) { - continue; + return this.breakpointSpanOfContainingNode(closeParenToken); + }; + BreakpointResolver.prototype.canHaveBreakpointInBlock = function (blockNode) { + if (!blockNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(blockNode)) { + return false; + } + var blockSyntax = blockNode; + return blockSyntax.statements && blockSyntax.statements.length != 0; + }; + BreakpointResolver.prototype.breakpointSpanOfFirstStatementInBlock = function (blockNode) { + if (!blockNode) { + return null; + } + var blockSyntax = blockNode; + var statementsNode = blockSyntax.statements; + if (!statementsNode || statementsNode.length == 0) { + return null; + } + var firstStatement = TypeScript.childAt(statementsNode, 0); + if (firstStatement && firstStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(firstStatement)) { + return this.breakpointSpanOfFirstStatementInBlock(firstStatement); + } + return null; + } + else { + return this.breakpointSpanOf(firstStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfLastStatementInBlock = function (blockNode) { + if (!blockNode) { + return null; + } + var blockSyntax = blockNode; + var statementsNode = blockSyntax.statements; + if (!statementsNode || statementsNode.length == 0) { + return null; + } + var lastStatement = TypeScript.childAt(statementsNode, statementsNode.length - 1); + if (lastStatement && lastStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(lastStatement)) { + return this.breakpointSpanOfLastStatementInBlock(lastStatement); + } + return null; + } + else { + return this.breakpointSpanOf(lastStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfFirstChildOfSyntaxList = function (positionedList) { + if (!positionedList) { + return null; + } + var listSyntax = positionedList; + if (listSyntax.length == 0) { + return null; + } + var firstStatement = TypeScript.childAt(positionedList, 0); + if (firstStatement && firstStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(firstStatement)) { + return this.breakpointSpanOfFirstStatementInBlock(firstStatement); + } + return null; + } + else { + return this.breakpointSpanOf(firstStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfLastChildOfSyntaxList = function (positionedList) { + if (!positionedList) { + return null; + } + var listSyntax = positionedList; + if (listSyntax.length == 0) { + return null; + } + var lastStatement = TypeScript.childAt(positionedList, 0); + if (lastStatement && lastStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(lastStatement)) { + return this.breakpointSpanOfLastStatementInBlock(lastStatement); + } + return null; + } + else { + return this.breakpointSpanOf(lastStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfNode = function (positionedNode) { + var node = positionedNode; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + return this.breakpointSpanOfDeclarationWithElements(positionedNode); + case 225 /* VariableDeclarator */: + return this.breakpointSpanOfVariableDeclarator(positionedNode); + case 224 /* VariableDeclaration */: + return this.breakpointSpanOfVariableDeclaration(positionedNode); + case 148 /* VariableStatement */: + return this.breakpointSpanOfVariableStatement(positionedNode); + case 242 /* Parameter */: + return this.breakpointSpanOfParameter(positionedNode); + case 136 /* MemberVariableDeclaration */: + return this.breakpointSpanOfMemberVariableDeclaration(positionedNode); + case 133 /* ImportDeclaration */: + return this.breakpointSpanOfImportDeclaration(positionedNode); + case 132 /* EnumDeclaration */: + return this.breakpointSpanOfEnumDeclaration(positionedNode); + case 243 /* EnumElement */: + return this.breakpointSpanOfEnumElement(positionedNode); + case 147 /* IfStatement */: + return this.breakpointSpanOfIfStatement(positionedNode); + case 235 /* ElseClause */: + return this.breakpointSpanOfElseClause(positionedNode); + case 155 /* ForInStatement */: + return this.breakpointSpanOfForInStatement(positionedNode); + case 154 /* ForStatement */: + return this.breakpointSpanOfForStatement(positionedNode); + case 158 /* WhileStatement */: + return this.breakpointSpanOfWhileStatement(positionedNode); + case 161 /* DoStatement */: + return this.breakpointSpanOfDoStatement(positionedNode); + case 151 /* SwitchStatement */: + return this.breakpointSpanOfSwitchStatement(positionedNode); + case 233 /* CaseSwitchClause */: + return this.breakpointSpanOfCaseSwitchClause(positionedNode); + case 234 /* DefaultSwitchClause */: + return this.breakpointSpanOfDefaultSwitchClause(positionedNode); + case 163 /* WithStatement */: + return this.breakpointSpanOfWithStatement(positionedNode); + case 159 /* TryStatement */: + return this.breakpointSpanOfTryStatement(positionedNode); + case 236 /* CatchClause */: + return this.breakpointSpanOfCatchClause(positionedNode); + case 237 /* FinallyClause */: + return this.breakpointSpanOfFinallyClause(positionedNode); + case 218 /* ParenthesizedArrowFunctionExpression */: + return this.breakpointSpanOfParenthesizedArrowFunctionExpression(positionedNode); + case 219 /* SimpleArrowFunctionExpression */: + return this.breakpointSpanOfSimpleArrowFunctionExpression(positionedNode); + default: + if (TypeScript.SyntaxUtilities.isStatement(node)) { + return this.breakpointSpanOfStatement(positionedNode); + } + else { + return this.breakpointOfExpression(positionedNode); + } } - - existingMemberNames[TypeScript.stripStartAndEndQuotes(existingMemberSymbols[i].getDisplayName())] = true; - } - - var filteredMembers = []; - for (var j = 0, m = contextualMemberSymbols.length; j < m; j++) { - var contextualMemberSymbol = contextualMemberSymbols[j]; - if (!existingMemberNames[TypeScript.stripStartAndEndQuotes(contextualMemberSymbol.getDisplayName())]) { - if (this.symbolDeclarationIntersectsPosition(contextualMemberSymbol, fileName, position)) { - continue; + }; + BreakpointResolver.prototype.isExpressionOfArrowExpressions = function (expression) { + if (!expression) { + return false; + } + var expressionParent = expression.parent; + if (expressionParent) { + if (expressionParent.kind() == 218 /* ParenthesizedArrowFunctionExpression */) { + var parenthesizedArrowExpression = expressionParent; + var expressionOfParenthesizedArrowExpression = parenthesizedArrowExpression.expression; + return expressionOfParenthesizedArrowExpression == expression; + } + else if (expressionParent.kind() == 219 /* SimpleArrowFunctionExpression */) { + var simpleArrowExpression = expressionParent; + var expressionOfSimpleArrowExpression = simpleArrowExpression.expression; + return expressionOfSimpleArrowExpression == expression; + } + else if (expressionParent.kind() == 173 /* CommaExpression */) { + return this.isExpressionOfArrowExpressions(expressionParent); } - filteredMembers.push(contextualMemberSymbol); } - } - - return filteredMembers; - }; - - CompletionHelpers.isCompletionListBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position) || TypeScript.Syntax.isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) || CompletionHelpers.isIdentifierDefinitionLocation(sourceUnit, position) || CompletionHelpers.isRightOfIllegalDot(sourceUnit, position); - }; - - CompletionHelpers.getContainingObjectLiteralApplicableForCompletion = function (sourceUnit, position) { - var previousToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (previousToken) { - var parent = previousToken.parent(); - - switch (previousToken.kind()) { - case 70 /* OpenBraceToken */: - case 79 /* CommaToken */: - if (parent && parent.kind() === 2 /* SeparatedList */) { - parent = parent.parent(); - } - - if (parent && parent.kind() === 215 /* ObjectLiteralExpression */) { - return parent; - } - - break; + return false; + }; + BreakpointResolver.prototype.isInitializerOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; } - } - - return null; - }; - - CompletionHelpers.isIdentifierDefinitionLocation = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - var containingNodeKind = positionedToken.containingNode() && positionedToken.containingNode().kind(); - switch (positionedToken.kind()) { - case 79 /* CommaToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 224 /* VariableDeclaration */ || containingNodeKind === 132 /* EnumDeclaration */; - - case 72 /* OpenParenToken */: - return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 236 /* CatchClause */; - - case 70 /* OpenBraceToken */: - return containingNodeKind === 132 /* EnumDeclaration */; - - case 57 /* PublicKeyword */: - case 55 /* PrivateKeyword */: - case 58 /* StaticKeyword */: - case 77 /* DotDotDotToken */: - return containingNodeKind === 242 /* Parameter */; - - case 44 /* ClassKeyword */: - case 65 /* ModuleKeyword */: - case 46 /* EnumKeyword */: - case 52 /* InterfaceKeyword */: - case 27 /* FunctionKeyword */: - case 40 /* VarKeyword */: - case 64 /* GetKeyword */: - case 68 /* SetKeyword */: - return true; + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var initializer = forStatement.initializer; + return initializer === expression; } - - switch (positionedToken.token().text()) { - case "class": - case "interface": - case "enum": - case "module": - return true; + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isInitializerOfForStatement(expressionParent); } - } - - return false; - }; - - CompletionHelpers.getNonIdentifierCompleteTokenOnLeft = function (sourceUnit, position) { - var positionedToken = sourceUnit.findCompleteTokenOnLeft(position, true); - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() == 10 /* EndOfFileToken */) { - positionedToken = positionedToken.previousToken(true); - } - - if (positionedToken && position === positionedToken.end() && positionedToken.kind() === 11 /* IdentifierName */) { - positionedToken = positionedToken.previousToken(true); - } - - return positionedToken; - }; - - CompletionHelpers.isRightOfIllegalDot = function (sourceUnit, position) { - var positionedToken = CompletionHelpers.getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); - - if (positionedToken) { - switch (positionedToken.kind()) { - case 76 /* DotToken */: - var leftOfDotPositionedToken = positionedToken.previousToken(true); - return leftOfDotPositionedToken && leftOfDotPositionedToken.kind() === 13 /* NumericLiteral */; - - case 13 /* NumericLiteral */: - var text = positionedToken.token().text(); - return text.charAt(text.length - 1) === "."; + return false; + }; + BreakpointResolver.prototype.isConditionOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; } - } - - return false; - }; - - CompletionHelpers.getValidCompletionEntryDisplayName = function (displayName) { - if (displayName && displayName.length > 0) { - var firstChar = displayName.charCodeAt(0); - if (firstChar === 39 /* singleQuote */ || firstChar === 34 /* doubleQuote */) { - displayName = TypeScript.stripStartAndEndQuotes(displayName); + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var condition = forStatement.condition; + return condition === expression; } - - if (TypeScript.Scanner.isValidIdentifier(TypeScript.SimpleText.fromString(displayName), 1 /* EcmaScript5 */)) { - return displayName; + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isConditionOfForStatement(expressionParent); } - } - - return null; - }; - return CompletionHelpers; - })(); - Services.CompletionHelpers = CompletionHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var KeywordCompletions = (function () { - function KeywordCompletions() { - } - KeywordCompletions.getKeywordCompltions = function () { - if (KeywordCompletions.keywordCompletions === null) { - var completions = []; - for (var i = 0, n = KeywordCompletions.keywords.length; i < n; i++) { - var keyword = KeywordCompletions.keywords[i]; - var entry = new Services.ResolvedCompletionEntry(keyword, Services.ScriptElementKind.keyword, Services.ScriptElementKindModifier.none, null, keyword, null); - completions.push(entry); + return false; + }; + BreakpointResolver.prototype.isIncrememtorOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; + } + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var incrementor = forStatement.incrementor; + return incrementor === expression; + } + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isIncrememtorOfForStatement(expressionParent); + } + return false; + }; + BreakpointResolver.prototype.breakpointOfLeftOfCommaExpression = function (commaExpressionNode) { + var commaExpression = commaExpressionNode; + return this.breakpointSpanOf(commaExpression.left); + }; + BreakpointResolver.prototype.breakpointOfExpression = function (expressionNode) { + if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { + if (expressionNode.kind() == 173 /* CommaExpression */) { + return this.breakpointOfLeftOfCommaExpression(expressionNode); + } + return createBreakpointSpanInfo(expressionNode); + } + if (this.isExpressionOfArrowExpressions(expressionNode)) { + if (expressionNode.kind() == 173 /* CommaExpression */) { + return this.breakpointOfLeftOfCommaExpression(expressionNode); + } + return createBreakpointSpanInfo(expressionNode); + } + if (expressionNode.kind() == 134 /* ExportAssignment */) { + var exportAssignmentSyntax = expressionNode; + return createBreakpointSpanInfo(expressionNode, exportAssignmentSyntax.exportKeyword, exportAssignmentSyntax.equalsToken, exportAssignmentSyntax.identifier); + } + return this.breakpointSpanOfContainingNode(expressionNode); + }; + BreakpointResolver.prototype.breakpointSpanOfStatement = function (statementNode) { + var statement = statementNode; + if (statement.kind() == 156 /* EmptyStatement */) { + return null; + } + var containingNode = TypeScript.Syntax.containingNode(statementNode); + if (TypeScript.SyntaxUtilities.isStatement(containingNode)) { + var useNodeForBreakpoint = false; + switch (containingNode.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 235 /* ElseClause */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 151 /* SwitchStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + case 146 /* Block */: + useNodeForBreakpoint = true; + } + if (!useNodeForBreakpoint) { + return this.breakpointSpanOfContainingNode(statementNode); + } + } + switch (statement.kind()) { + case 149 /* ExpressionStatement */: + var expressionSyntax = statement; + return createBreakpointSpanInfo(expressionSyntax.expression); + case 150 /* ReturnStatement */: + var returnStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, returnStatementSyntax.returnKeyword, returnStatementSyntax.expression); + case 157 /* ThrowStatement */: + var throwStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, throwStatementSyntax.throwKeyword, throwStatementSyntax.expression); + case 152 /* BreakStatement */: + var breakStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, breakStatementSyntax.breakKeyword, breakStatementSyntax.identifier); + case 153 /* ContinueStatement */: + var continueStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, continueStatementSyntax.continueKeyword, continueStatementSyntax.identifier); + case 162 /* DebuggerStatement */: + var debuggerStatementSyntax = statement; + return createBreakpointSpanInfo(debuggerStatementSyntax.debuggerKeyword); + case 160 /* LabeledStatement */: + var labeledStatementSyntax = statement; + return this.breakpointSpanOf(labeledStatementSyntax.statement); } - - KeywordCompletions.keywordCompletions = completions; - } - - return KeywordCompletions.keywordCompletions; - }; - KeywordCompletions.keywords = [ - "break", - "case", - "catch", - "class", - "constructor", - "continue", - "debugger", - "declare", - "default", - "delete", - "do", - "else", - "enum", - "export", - "extends", - "false", - "finally", - "for", - "function", - "get", - "if", - "implements", - "import", - "in", - "instanceof", - "interface", - "module", - "new", - "null", - "private", - "public", - "require", - "return", - "set", - "static", - "super", - "switch", - "this", - "throw", - "true", - "try", - "typeof", - "var", - "while", - "with" - ]; - - KeywordCompletions.keywordCompletions = null; - return KeywordCompletions; - })(); - Services.KeywordCompletions = KeywordCompletions; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var SignatureInfoHelpers = (function () { - function SignatureInfoHelpers() { - } - SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList = function (syntaxTree, position) { - var token = syntaxTree.sourceUnit().findTokenOnLeft(position, true); - - if (token && TypeScript.Syntax.hasAncestorOfKind(token, 229 /* TypeParameterList */)) { return null; - } - - var stack = 0; - var argumentIndex = 0; - - whileLoop: - while (token) { - switch (token.kind()) { - case 80 /* LessThanToken */: - if (stack === 0) { - var lessThanToken = token; - token = token.previousToken(true); - if (!token || token.kind() !== 11 /* IdentifierName */) { - break whileLoop; - } - - return { - genericIdentifer: token, - lessThanToken: lessThanToken, - argumentIndex: argumentIndex - }; - } else if (stack < 0) { - break whileLoop; - } else { - stack--; - } - + }; + BreakpointResolver.prototype.getSyntaxListOfDeclarationWithElements = function (positionedNode) { + var node = positionedNode; + var elementsList; + var block; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + elementsList = node.moduleElements; + break; + case 131 /* ClassDeclaration */: + elementsList = node.classElements; + break; + case 129 /* FunctionDeclaration */: + block = node.block; break; - - case 97 /* GreaterThanGreaterThanGreaterThanToken */: - stack++; - - case 81 /* GreaterThanToken */: - stack++; + case 137 /* ConstructorDeclaration */: + block = node.block; break; - - case 79 /* CommaToken */: - if (stack == 0) { - argumentIndex++; - } - + case 135 /* MemberFunctionDeclaration */: + block = node.block; break; - - case 71 /* CloseBraceToken */: - var unmatchedOpenBraceTokens = 0; - - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 71 /* CloseBraceToken */, 70 /* OpenBraceToken */); - if (!token) { - break whileLoop; - } - + case 139 /* GetAccessor */: + block = node.block; break; - - case 85 /* EqualsGreaterThanToken */: - token = token.previousToken(true); - - if (token && token.kind() === 73 /* CloseParenToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 73 /* CloseParenToken */, 72 /* OpenParenToken */); - - if (token && token.kind() === 81 /* GreaterThanToken */) { - token = SignatureInfoHelpers.moveBackUpTillMatchingTokenKind(token, 81 /* GreaterThanToken */, 80 /* LessThanToken */); - } - - if (token && token.kind() === 31 /* NewKeyword */) { - token = token.previousToken(true); - } - - if (!token) { - break whileLoop; - } - } else { - break whileLoop; - } - + case 140 /* SetAccessor */: + block = node.block; break; - - case 11 /* IdentifierName */: - case 60 /* AnyKeyword */: - case 67 /* NumberKeyword */: - case 69 /* StringKeyword */: - case 41 /* VoidKeyword */: - case 61 /* BooleanKeyword */: - case 76 /* DotToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: + case 222 /* FunctionExpression */: + block = node.block; break; - - default: - break whileLoop; - } - - token = token.previousToken(true); - } - - return null; - }; - - SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol = function (symbol, signatures, enclosingScopeSymbol, compilerState) { - var signatureGroup = []; - - var hasOverloads = signatures.length > 1; - - for (var i = 0, n = signatures.length; i < n; i++) { - var signature = signatures[i]; - - if (hasOverloads && signature.isDefinition()) { - continue; - } - - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - var paramIndexInfo = []; - var functionName = signature.getScopedNameEx(enclosingScopeSymbol).toString(); - if (!functionName && (!symbol.isType() || symbol.isNamedTypeSymbol())) { - functionName = symbol.getScopedNameEx(enclosingScopeSymbol).toString(); - } - - var signatureMemberName = signature.getSignatureTypeNameEx(functionName, false, false, enclosingScopeSymbol, true, true); - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(signatureMemberName, paramIndexInfo); - signatureGroupInfo.docComment = signature.docComments(); - - var parameterMarkerIndex = 0; - - if (signature.isGeneric()) { - var typeParameters = signature.getTypeParameters(); - for (var j = 0, m = typeParameters.length; j < m; j++) { - var typeParameter = typeParameters[j]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - } - - var parameters = signature.parameters; - for (var j = 0, m = parameters.length; j < m; j++) { - var parameter = parameters[j]; - var signatureParameterInfo = new Services.FormalParameterInfo(); - signatureParameterInfo.isVariable = signature.hasVarArgs && (j === parameters.length - 1); - signatureParameterInfo.name = parameter.getDisplayName(); - signatureParameterInfo.docComment = parameter.docComments(); - signatureParameterInfo.minChar = paramIndexInfo[2 * parameterMarkerIndex]; - signatureParameterInfo.limChar = paramIndexInfo[2 * parameterMarkerIndex + 1]; - parameterMarkerIndex++; - signatureGroupInfo.parameters.push(signatureParameterInfo); - } - - signatureGroup.push(signatureGroupInfo); - } - - return signatureGroup; - }; - - SignatureInfoHelpers.getSignatureInfoFromGenericSymbol = function (symbol, enclosingScopeSymbol, compilerState) { - var signatureGroupInfo = new Services.FormalSignatureItemInfo(); - - var paramIndexInfo = []; - var symbolName = symbol.getScopedNameEx(enclosingScopeSymbol, false, true, false, true); - - signatureGroupInfo.signatureInfo = TypeScript.MemberName.memberNameToString(symbolName, paramIndexInfo); - signatureGroupInfo.docComment = symbol.docComments(); - - var parameterMarkerIndex = 0; - - var typeSymbol = symbol.type; - - var typeParameters = typeSymbol.getTypeParameters(); - for (var i = 0, n = typeParameters.length; i < n; i++) { - var typeParameter = typeParameters[i]; - var signatureTypeParameterInfo = new Services.FormalTypeParameterInfo(); - signatureTypeParameterInfo.name = typeParameter.getDisplayName(); - signatureTypeParameterInfo.docComment = typeParameter.docComments(); - signatureTypeParameterInfo.minChar = paramIndexInfo[2 * i]; - signatureTypeParameterInfo.limChar = paramIndexInfo[2 * i + 1]; - signatureGroupInfo.typeParameters.push(signatureTypeParameterInfo); - } - - return [signatureGroupInfo]; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromCallExpression = function (ast, caretPosition, typeParameterInformation) { - if (!ast) { - return null; - } - - var result = new Services.ActualSignatureInfo(); - - var parameterMinChar = caretPosition; - var parameterLimChar = caretPosition; - - if (ast.argumentList.typeArgumentList) { - parameterMinChar = Math.min(ast.argumentList.typeArgumentList.start()); - parameterLimChar = Math.max(Math.max(ast.argumentList.typeArgumentList.start(), ast.argumentList.typeArgumentList.end() + ast.argumentList.typeArgumentList.trailingTriviaWidth())); - } - - if (ast.argumentList.arguments) { - parameterMinChar = Math.min(parameterMinChar, ast.argumentList.arguments.start()); - parameterLimChar = Math.max(parameterLimChar, Math.max(ast.argumentList.arguments.start(), ast.argumentList.arguments.end() + ast.argumentList.arguments.trailingTriviaWidth())); - } - - result.parameterMinChar = parameterMinChar; - result.parameterLimChar = parameterLimChar; - result.currentParameterIsTypeParameter = false; - result.currentParameter = -1; - - if (typeParameterInformation) { - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - } else if (ast.argumentList.arguments && ast.argumentList.arguments.nonSeparatorCount() > 0) { - result.currentParameter = 0; - for (var index = 0; index < ast.argumentList.arguments.nonSeparatorCount(); index++) { - if (caretPosition > ast.argumentList.arguments.nonSeparatorAt(index).end() + ast.argumentList.arguments.nonSeparatorAt(index).trailingTriviaWidth()) { - result.currentParameter++; - } - } - } - - return result; - }; - - SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression = function (caretPosition, typeParameterInformation) { - var result = new Services.ActualSignatureInfo(); - - result.parameterMinChar = typeParameterInformation.lessThanToken.start(); - result.parameterLimChar = Math.max(typeParameterInformation.lessThanToken.fullEnd(), caretPosition); - result.currentParameterIsTypeParameter = true; - result.currentParameter = typeParameterInformation.argumentIndex; - - return result; - }; - - SignatureInfoHelpers.isSignatureHelpBlocker = function (sourceUnit, position) { - if (position < 0 || position > sourceUnit.fullWidth()) { - return true; - } - - return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position); - }; - - SignatureInfoHelpers.isTargetOfObjectCreationExpression = function (positionedToken) { - var positionedParent = TypeScript.Syntax.getAncestorOfKind(positionedToken, 216 /* ObjectCreationExpression */); - if (positionedParent) { - var objectCreationExpression = positionedParent.element(); - var expressionRelativeStart = objectCreationExpression.newKeyword.fullWidth(); - var tokenRelativeStart = positionedToken.fullStart() - positionedParent.fullStart(); - return tokenRelativeStart >= expressionRelativeStart && tokenRelativeStart <= (expressionRelativeStart + objectCreationExpression.expression.fullWidth()); - } - - return false; - }; - - SignatureInfoHelpers.moveBackUpTillMatchingTokenKind = function (token, tokenKind, matchingTokenKind) { - if (!token || token.kind() !== tokenKind) { - throw TypeScript.Errors.invalidOperation(); - } - - token = token.previousToken(true); - - var stack = 0; - - while (token) { - if (token.kind() === matchingTokenKind) { - if (stack === 0) { - return token; - } else if (stack < 0) { + case 218 /* ParenthesizedArrowFunctionExpression */: + block = node.block; break; - } else { - stack--; - } - } else if (token.kind() === tokenKind) { - stack++; + case 219 /* SimpleArrowFunctionExpression */: + block = node.block; + break; + default: + throw TypeScript.Errors.argument('positionNode', 'unknown node kind in getSyntaxListOfDeclarationWithElements'); } - - token = token.previousToken(true); - } - - return null; - }; - return SignatureInfoHelpers; - })(); - Services.SignatureInfoHelpers = SignatureInfoHelpers; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var ResolvedCompletionEntry = (function () { - function ResolvedCompletionEntry(name, kind, kindModifiers, type, fullSymbolName, docComment) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComment; - } - ResolvedCompletionEntry.prototype.isResolved = function () { - return true; - }; - return ResolvedCompletionEntry; - })(); - Services.ResolvedCompletionEntry = ResolvedCompletionEntry; - - var DeclReferenceCompletionEntry = (function () { - function DeclReferenceCompletionEntry(name, kind, kindModifiers, decl) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.decl = decl; - this.type = null; - this.fullSymbolName = null; - this.docComment = null; - this.hasBeenResolved = false; - } - DeclReferenceCompletionEntry.prototype.isResolved = function () { - return this.hasBeenResolved; - }; - - DeclReferenceCompletionEntry.prototype.resolve = function (type, fullSymbolName, docComments) { - this.type = type; - this.fullSymbolName = fullSymbolName; - this.docComment = docComments; - this.hasBeenResolved = true; - }; - return DeclReferenceCompletionEntry; - })(); - Services.DeclReferenceCompletionEntry = DeclReferenceCompletionEntry; - - var CompletionSession = (function () { - function CompletionSession(fileName, position, entries) { - this.fileName = fileName; - this.position = position; - this.entries = entries; - } - return CompletionSession; - })(); - Services.CompletionSession = CompletionSession; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var LanguageService = (function () { - function LanguageService(host) { - this.host = host; - this.activeCompletionSession = null; - this.logger = this.host; - this.compiler = new Services.LanguageServiceCompiler(this.host); - this._syntaxTreeCache = new Services.SyntaxTreeCache(this.host); - - if (!TypeScript.LocalizedDiagnosticMessages) { - TypeScript.LocalizedDiagnosticMessages = this.host.getLocalizedDiagnosticMessages(); - } - } - LanguageService.prototype.cleanupSemanticCache = function () { - this.compiler.cleanupSemanticCache(); - }; - - LanguageService.prototype.refresh = function () { - }; - - LanguageService.prototype.getSymbolInfoAtPosition = function (fileName, pos, requireName) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var topNode = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (topNode === null || (requireName && topNode.kind() !== 11 /* IdentifierName */)) { - this.logger.log("No name found at the given position"); - return null; - } - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(topNode, document); - if (symbolInfoAtPosition === null || (symbolInfoAtPosition.symbol === null && symbolInfoAtPosition.aliasSymbol)) { - this.logger.log("No symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; - } - - var symbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - var symbolName = symbol.getName(); - - if (requireName) { - var actualNameAtPosition = topNode.valueText(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - - return { symbol: null, containingASTOpt: null }; + var parentElement = positionedNode; + if (block) { + parentElement = block; + elementsList = block.statements; } - } - - var containingASTOpt = this.getSymbolScopeAST(symbol, topNode); - - return { symbol: symbol, containingASTOpt: containingASTOpt }; - }; - - LanguageService.prototype.getReferencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var result = []; - var symbol = symbolAndContainingAST.symbol; - var symbolName = symbol.getName(); - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - if (containingASTOpt && fileName != tempFileName) { - continue; + return elementsList; + }; + BreakpointResolver.prototype.canHaveBreakpointInDeclaration = function (positionedNode) { + return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); + }; + BreakpointResolver.prototype.breakpointSpanOfDeclarationWithElements = function (positionedNode) { + if (!this.canHaveBreakpointInDeclaration(positionedNode)) { + return null; } - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - if (filter.probablyContains(symbolName)) { - result = result.concat(this.getReferencesInFile(tempFileName, symbol, containingASTOpt)); + var node = positionedNode; + var moduleSyntax = positionedNode; + if ((TypeScript.SyntaxUtilities.isModuleElement(node) && TypeScript.Syntax.containingNode(positionedNode).kind() != 120 /* SourceUnit */) || TypeScript.SyntaxUtilities.isClassElement(node) || (moduleSyntax.kind() == 130 /* ModuleDeclaration */ && moduleSyntax.name && moduleSyntax.name.kind() == 121 /* QualifiedName */)) { + return createBreakpointSpanInfo(positionedNode); } - } - - return result; - }; - - LanguageService.prototype.getSymbolScopeAST = function (symbol, ast) { - if (symbol.kind === 8192 /* TypeParameter */ && symbol.getDeclarations().length > 0 && symbol.getDeclarations()[0].getParentDecl() && symbol.getDeclarations()[0].getParentDecl().kind === 65536 /* Method */) { - while (ast) { - if (ast.kind() === 129 /* FunctionDeclaration */ || ast.kind() === 135 /* MemberFunctionDeclaration */) { - return ast; - } - - ast = ast.parent; + else { + return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(positionedNode)); } - } - - return null; - }; - - LanguageService.prototype.getOccurrencesAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolAndContainingAST = this.getSymbolInfoAtPosition(fileName, pos, true); - if (symbolAndContainingAST === null) { - return []; - } - - if (symbolAndContainingAST.symbol === null) { - return this.getSingleNodeReferenceAtPosition(fileName, pos); - } - - var symbol = symbolAndContainingAST.symbol; - var containingASTOpt = symbolAndContainingAST.containingASTOpt; - - return this.getReferencesInFile(fileName, symbol, containingASTOpt); - }; - - LanguageService.prototype.getSingleNodeReferenceAtPosition = function (fileName, position) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (node === null || node.kind() !== 11 /* IdentifierName */) { - return []; - } - - var isWriteAccess = this.isWriteAccess(node); - return [new Services.ReferenceEntry(this._getHostFileName(fileName), node.start(), node.end(), isWriteAccess)]; - }; - - LanguageService.prototype.getImplementorsAtPosition = function (fileName, pos) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var result = []; - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, pos); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log("No identifier at the specified location."); - return result; - } - - var actualNameAtPosition = ast.valueText(); - - var symbolInfoAtPosition = this.compiler.getSymbolInformationFromAST(ast, document); - var symbol = symbolInfoAtPosition.symbol; - - if (symbol === null) { - this.logger.log("No symbol annotation on the identifier AST."); - return result; - } - - var symbolName = symbol.getName(); - - if ((symbol.isError() || symbol.isAny()) && actualNameAtPosition !== symbolName) { - this.logger.log("Unknown symbol found at the given position"); - return result; - } - - var typeSymbol = symbol.type; - var typesToSearch; - - if (typeSymbol.isClass() || typeSymbol.isInterface()) { - typesToSearch = typeSymbol.getTypesThatExtendThisType(); - } else if (symbol.kind == 4096 /* Property */ || symbol.kind == 16384 /* Function */ || typeSymbol.isMethod() || typeSymbol.isProperty()) { - var declaration = symbol.getDeclarations()[0]; - var classSymbol = declaration.getParentDecl().getSymbol().type; - - typesToSearch = []; - var extendingTypes = classSymbol.getTypesThatExtendThisType(); - var extendedTypes = classSymbol.getExtendedTypes(); - extendingTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - extendedTypes.forEach(function (type) { - var overrides = _this.getOverrides(type, symbol); - overrides.forEach(function (override) { - typesToSearch.push(override); - }); - }); - } - - if (typesToSearch) { - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var tempFileName = fileNames[i]; - - var tempDocument = this.compiler.getDocument(tempFileName); - var filter = tempDocument.bloomFilter(); - - typesToSearch.forEach(function (typeToSearch) { - var symbolName = typeToSearch.getName(); - if (filter.probablyContains(symbolName)) { - result = result.concat(_this.getImplementorsInFile(tempFileName, typeToSearch)); - } - }); + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableDeclarator = function (varDeclaratorNode) { + if (!varDeclaratorNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclaratorNode)) { + return false; } - } - return result; - }; - - LanguageService.prototype.getOverrides = function (container, memberSym) { - var result = []; - var members; - if (container.isClass()) { - members = container.getMembers(); - } else if (container.isInterface()) { - members = container.getMembers(); - } - - if (members == null) - return null; - - members.forEach(function (member) { - var typeMember = member; - if (typeMember.getName() === memberSym.getName()) { - result.push(typeMember); + var varDeclaratorSyntax = varDeclaratorNode; + return !!varDeclaratorSyntax.equalsValueClause; + }; + BreakpointResolver.prototype.breakpointSpanOfVariableDeclarator = function (varDeclaratorNode) { + if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { + return null; } - }); - - return result; - }; - - LanguageService.prototype.getImplementorsInFile = function (fileName, symbol) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p); - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */) { - return; - } - var searchSymbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (searchSymbolInfoAtPosition !== null) { - var normalizedSymbol; - if (symbol.kind === 8 /* Class */ || symbol.kind === 16 /* Interface */) { - normalizedSymbol = searchSymbolInfoAtPosition.symbol.type; - } else { - var declaration = searchSymbolInfoAtPosition.symbol.getDeclarations()[0]; - normalizedSymbol = declaration.getSymbol(); - } - - if (normalizedSymbol === symbol) { - var isWriteAccess = _this.isWriteAccess(nameAST); - - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } - } - }); - } - - return result; - }; - - LanguageService.prototype.getReferencesInFile = function (fileName, symbol, containingASTOpt) { - var _this = this; - var result = []; - var symbolName = symbol.getDisplayName(); - - var possiblePositions = this.getPossibleSymbolReferencePositions(fileName, symbolName); - if (possiblePositions && possiblePositions.length > 0) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - possiblePositions.forEach(function (p) { - if (containingASTOpt && (p < containingASTOpt.start() || p > containingASTOpt.end())) { - return; + var container = TypeScript.Syntax.containingNode(varDeclaratorNode); + if (container && container.kind() == 224 /* VariableDeclaration */) { + var parentDeclaratorsList = varDeclaratorNode.parent; + if (parentDeclaratorsList && TypeScript.childAt(parentDeclaratorsList, 0) == varDeclaratorNode) { + return this.breakpointSpanOfVariableDeclaration(container); } - - var nameAST = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, p, false); - - if (nameAST === null || nameAST.kind() !== 11 /* IdentifierName */ || (nameAST.end() - nameAST.start() !== symbolName.length)) { - return; + if (this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { + return createBreakpointSpanInfo(varDeclaratorNode); } - - var symbolInfoAtPosition = _this.compiler.getSymbolInformationFromAST(nameAST, document); - if (symbolInfoAtPosition !== null) { - var searchSymbol = symbolInfoAtPosition.aliasSymbol || symbolInfoAtPosition.symbol; - - if (Services.FindReferenceHelpers.compareSymbolsForLexicalIdentity(searchSymbol, symbol)) { - var isWriteAccess = _this.isWriteAccess(nameAST); - result.push(new Services.ReferenceEntry(_this._getHostFileName(fileName), nameAST.start(), nameAST.end(), isWriteAccess)); - } + else { + return null; } - }); - } - - return result; - }; - - LanguageService.prototype.isWriteAccess = function (current) { - var parent = current.parent; - if (parent !== null) { - var parentNodeType = parent.kind(); - switch (parentNodeType) { - case 131 /* ClassDeclaration */: - return parent.identifier === current; - - case 128 /* InterfaceDeclaration */: - return parent.identifier === current; - - case 130 /* ModuleDeclaration */: - return parent.name === current || parent.stringLiteral === current; - - case 129 /* FunctionDeclaration */: - return parent.identifier === current; - - case 133 /* ImportDeclaration */: - return parent.identifier === current; - - case 225 /* VariableDeclarator */: - var varDeclarator = parent; - return !!(varDeclarator.equalsValueClause && varDeclarator.propertyName === current); - - case 242 /* Parameter */: - return true; - - case 174 /* AssignmentExpression */: - case 175 /* AddAssignmentExpression */: - case 176 /* SubtractAssignmentExpression */: - case 177 /* MultiplyAssignmentExpression */: - case 178 /* DivideAssignmentExpression */: - case 179 /* ModuloAssignmentExpression */: - case 182 /* OrAssignmentExpression */: - case 180 /* AndAssignmentExpression */: - case 181 /* ExclusiveOrAssignmentExpression */: - case 183 /* LeftShiftAssignmentExpression */: - case 185 /* UnsignedRightShiftAssignmentExpression */: - case 184 /* SignedRightShiftAssignmentExpression */: - return parent.left === current; - - case 168 /* PreIncrementExpression */: - case 210 /* PostIncrementExpression */: - return true; - - case 169 /* PreDecrementExpression */: - case 211 /* PostDecrementExpression */: - return true; } - } - - return false; - }; - - LanguageService.prototype.isLetterOrDigit = function (char) { - return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */) || char === 95 /* _ */ || char === 36 /* $ */ || (char > 127 && TypeScript.Unicode.isIdentifierPart(char, 1 /* EcmaScript5 */)); - }; - - LanguageService.prototype.getPossibleSymbolReferencePositions = function (fileName, symbolName) { - var positions = []; - - if (!symbolName || !symbolName.length) { - return positions; - } - - var sourceText = this.compiler.getScriptSnapshot(fileName); - var sourceLength = sourceText.getLength(); - var text = sourceText.getText(0, sourceLength); - var symbolNameLength = symbolName.length; - - var position = text.indexOf(symbolName); - while (position >= 0) { - var endPosition = position + symbolNameLength; - - if ((position <= 0 || !this.isLetterOrDigit(text.charCodeAt(position - 1))) && (endPosition >= sourceLength || !this.isLetterOrDigit(text.charCodeAt(endPosition)))) { - positions.push(position); + else if (container) { + return this.breakpointSpanOfMemberVariableDeclaration(container); } - - position = text.indexOf(symbolName, position + symbolNameLength + 1); - } - - return positions; - }; - - LanguageService.prototype.getSignatureAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - - if (Services.SignatureInfoHelpers.isSignatureHelpBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("position is not a valid singature help location"); - return null; - } - - var genericTypeArgumentListInfo = Services.SignatureInfoHelpers.isInPartiallyWrittenTypeArgumentList(document.syntaxTree(), position); - if (genericTypeArgumentListInfo) { - return this.getTypeParameterSignatureFromPartiallyWrittenExpression(document, position, genericTypeArgumentListInfo); - } - - var sourceUnit = document.sourceUnit(); - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position); - if (!node) { return null; - } - - while (node) { - if (node.kind() === 213 /* InvocationExpression */ || node.kind() === 216 /* ObjectCreationExpression */ || (isSignatureHelpBlocker(node) && position > node.start())) { - break; + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableDeclaration = function (varDeclarationNode) { + if (!varDeclarationNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclarationNode)) { + return false; + } + var varDeclarationSyntax = varDeclarationNode; + var containerChildren = varDeclarationSyntax.variableDeclarators; + if (!containerChildren || TypeScript.childCount(containerChildren) == 0) { + return false; + } + var child = TypeScript.childAt(containerChildren, 0); + if (TypeScript.isNode(child)) { + return this.canHaveBreakpointInVariableDeclarator(child); + } + return false; + }; + BreakpointResolver.prototype.breakpointSpanOfVariableDeclaration = function (varDeclarationNode) { + if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { + return null; + } + var container = TypeScript.Syntax.containingNode(varDeclarationNode); + var varDeclarationSyntax = varDeclarationNode; + var varDeclarators = varDeclarationSyntax.variableDeclarators; + var varDeclaratorsCount = TypeScript.childCount(varDeclarators); + if (container && container.kind() == 148 /* VariableStatement */) { + return this.breakpointSpanOfVariableStatement(container); + } + if (this.canHaveBreakpointInVariableDeclaration(varDeclarationNode)) { + return createBreakpointSpanInfoWithLimChar(varDeclarationNode, TypeScript.end(TypeScript.childAt(varDeclarators, 0))); + } + else { + return null; + } + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableStatement = function (varStatementNode) { + if (!varStatementNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varStatementNode)) { + return false; + } + var variableStatement = varStatementNode; + return this.canHaveBreakpointInVariableDeclaration(variableStatement.variableDeclaration); + }; + BreakpointResolver.prototype.breakpointSpanOfVariableStatement = function (varStatementNode) { + if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { + return null; + } + var variableStatement = varStatementNode; + var variableDeclaration = variableStatement.variableDeclaration; + var varDeclarationSyntax = variableDeclaration; + var varDeclarators = varDeclarationSyntax.variableDeclarators; + return createBreakpointSpanInfoWithLimChar(varStatementNode, TypeScript.end(TypeScript.childAt(varDeclarators, 0))); + }; + BreakpointResolver.prototype.breakpointSpanOfParameter = function (parameterNode) { + if (parameterNode.parent.kind() === 219 /* SimpleArrowFunctionExpression */) { + return this.breakpointSpanOfNode(parameterNode.parent); + } + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(parameterNode)) { + return null; + } + var parameterSyntax = parameterNode; + if (parameterSyntax.dotDotDotToken || parameterSyntax.equalsValueClause || parameterSyntax.modifiers.length > 0) { + return createBreakpointSpanInfo(parameterNode); + } + else { + return null; + } + }; + BreakpointResolver.prototype.breakpointSpanOfMemberVariableDeclaration = function (memberVarDeclarationNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { + return null; + } + var memberVariableDeclaration = memberVarDeclarationNode; + if (this.canHaveBreakpointInVariableDeclarator(memberVariableDeclaration.variableDeclarator)) { + return createBreakpointSpanInfo(memberVarDeclarationNode, memberVariableDeclaration.modifiers, memberVariableDeclaration.variableDeclarator); + } + else { + return null; + } + }; + BreakpointResolver.prototype.breakpointSpanOfImportDeclaration = function (importDeclarationNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { + return null; + } + var importSyntax = importDeclarationNode; + return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); + }; + BreakpointResolver.prototype.breakpointSpanOfEnumDeclaration = function (enumDeclarationNode) { + if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { + return null; + } + return createBreakpointSpanInfo(enumDeclarationNode); + }; + BreakpointResolver.prototype.breakpointSpanOfFirstEnumElement = function (enumDeclarationNode) { + var enumDeclarationSyntax = enumDeclarationNode; + var enumElements = enumDeclarationSyntax.enumElements; + if (enumElements && TypeScript.childCount(enumElements)) { + return this.breakpointSpanOf(TypeScript.childAt(enumElements, 0)); } - - node = node.parent; - } - - if (!node) { - return null; - } - - if (node.kind() !== 213 /* InvocationExpression */ && node.kind() !== 216 /* ObjectCreationExpression */) { - this.logger.log("No call expression or generic arguments found for the given position"); - return null; - } - - var callExpression = node; - var isNew = (callExpression.kind() === 216 /* ObjectCreationExpression */); - - if (isNew && callExpression.argumentList === null) { - this.logger.log("No signature help for a object creation expression without arguments"); - return null; - } - - TypeScript.Debug.assert(callExpression.argumentList.arguments !== null, "Expected call expression to have arguments, but it did not"); - - var argumentsStart = callExpression.expression.end() + callExpression.expression.trailingTriviaWidth(); - var argumentsEnd = callExpression.argumentList.arguments.end() + callExpression.argumentList.arguments.trailingTriviaWidth(); - - if (position <= argumentsStart || position > argumentsEnd) { - this.logger.log("Outside argument list"); - return null; - } - - var callSymbolInfo = this.compiler.getCallInformationFromAST(node, document); - if (!callSymbolInfo || !callSymbolInfo.targetSymbol || !callSymbolInfo.resolvedSignatures) { - this.logger.log("Could not find symbol for call expression"); - return null; - } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(callSymbolInfo.targetSymbol, callSymbolInfo.resolvedSignatures, callSymbolInfo.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromCallExpression(callExpression, position, genericTypeArgumentListInfo); - result.activeFormal = (callSymbolInfo.resolvedSignatures && callSymbolInfo.candidateSignature) ? callSymbolInfo.resolvedSignatures.indexOf(callSymbolInfo.candidateSignature) : -1; - - if (result.actual === null || result.formal === null || result.activeFormal === null) { - this.logger.log("Can't compute actual and/or formal signature of the call expression"); - return null; - } - - return result; - }; - - LanguageService.prototype.getTypeParameterSignatureFromPartiallyWrittenExpression = function (document, position, genericTypeArgumentListInfo) { - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, genericTypeArgumentListInfo.genericIdentifer.start()); - if (ast === null || ast.kind() !== 11 /* IdentifierName */) { - this.logger.log(["getTypeParameterSignatureAtPosition: Unexpected ast found at position:", position, ast === null ? "ast was null" : "ast kind: " + TypeScript.SyntaxKind[ast.kind()]].join(' ')); - return null; - } - - var symbolInformation = this.compiler.getSymbolInformationFromAST(ast, document); - - if (!symbolInformation.symbol) { return null; - } - - var isNew = Services.SignatureInfoHelpers.isTargetOfObjectCreationExpression(genericTypeArgumentListInfo.genericIdentifer); - - var typeSymbol = symbolInformation.symbol.type; - - if (typeSymbol.kind === 16777216 /* FunctionType */ || (isNew && typeSymbol.kind === 33554432 /* ConstructorType */)) { - var signatures = isNew ? typeSymbol.getConstructSignatures() : typeSymbol.getCallSignatures(); - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromSignatureSymbol(symbolInformation.symbol, signatures, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } else if (typeSymbol.isGeneric()) { - if (typeSymbol.kind === 33554432 /* ConstructorType */) { - typeSymbol = typeSymbol.getAssociatedContainerType(); + }; + BreakpointResolver.prototype.breakpointSpanOfEnumElement = function (enumElementNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { + return null; + } + return createBreakpointSpanInfo(enumElementNode); + }; + BreakpointResolver.prototype.breakpointSpanOfIfStatement = function (ifStatementNode) { + var ifStatement = ifStatementNode; + return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfElseClause = function (elseClauseNode) { + var elseClause = elseClauseNode; + return this.breakpointSpanOf(elseClause.statement); + }; + BreakpointResolver.prototype.breakpointSpanOfForInStatement = function (forInStatementNode) { + var forInStatement = forInStatementNode; + return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfForStatement = function (forStatementNode) { + var forStatement = forStatementNode; + return this.breakpointSpanOf(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer); + }; + BreakpointResolver.prototype.breakpointSpanOfWhileStatement = function (whileStatementNode) { + var whileStatement = whileStatementNode; + return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfDoStatement = function (doStatementNode) { + var doStatement = doStatementNode; + return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfSwitchStatement = function (switchStatementNode) { + var switchStatement = switchStatementNode; + return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfFirstStatementOfFirstCaseClause = function (switchStatementNode) { + var switchStatement = switchStatementNode; + if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { + return null; + } + var switchClauses = switchStatement.switchClauses; + if (switchClauses.length == 0) { + return null; + } + var firstCaseClause = switchClauses[0]; + var statements = firstCaseClause.statements; + return this.breakpointSpanOfFirstChildOfSyntaxList(statements); + }; + BreakpointResolver.prototype.breakpointSpanOfLastStatementOfLastCaseClause = function (switchStatementNode) { + var switchStatement = switchStatementNode; + if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { + return null; + } + var switchClauses = switchStatement.switchClauses; + if (switchClauses.length == 0) { + return null; + } + var lastClauseNode = switchClauses[switchClauses.length - 1]; + var statements = lastClauseNode.statements; + return this.breakpointSpanOfLastChildOfSyntaxList(statements); + }; + BreakpointResolver.prototype.breakpointSpanOfCaseSwitchClause = function (caseClauseNode) { + var caseSwitchClause = caseClauseNode; + return this.breakpointSpanOfFirstChildOfSyntaxList(caseSwitchClause.statements); + }; + BreakpointResolver.prototype.breakpointSpanOfDefaultSwitchClause = function (defaultSwithClauseNode) { + var defaultSwitchClause = defaultSwithClauseNode; + return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwitchClause.statements); + }; + BreakpointResolver.prototype.breakpointSpanOfWithStatement = function (withStatementNode) { + var withStatement = withStatementNode; + return this.breakpointSpanOf(withStatement.statement); + }; + BreakpointResolver.prototype.breakpointSpanOfTryStatement = function (tryStatementNode) { + var tryStatement = tryStatementNode; + return this.breakpointSpanOfFirstStatementInBlock(tryStatement.block); + }; + BreakpointResolver.prototype.breakpointSpanOfCatchClause = function (catchClauseNode) { + var catchClause = catchClauseNode; + return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfFinallyClause = function (finallyClauseNode) { + var finallyClause = finallyClauseNode; + return this.breakpointSpanOfFirstStatementInBlock(finallyClause.block); + }; + BreakpointResolver.prototype.breakpointSpanOfParenthesizedArrowFunctionExpression = function (arrowFunctionExpression) { + if (arrowFunctionExpression.block) { + return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); + } + else { + return this.breakpointSpanOf(arrowFunctionExpression.expression); + } + }; + BreakpointResolver.prototype.breakpointSpanOfSimpleArrowFunctionExpression = function (arrowFunctionExpression) { + if (arrowFunctionExpression.block) { + return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); + } + else { + return this.breakpointSpanOf(arrowFunctionExpression.expression); + } + }; + BreakpointResolver.prototype.breakpointSpanOfContainingNode = function (positionedElement) { + var current = positionedElement.parent; + while (!TypeScript.isNode(current)) { + current = current.parent; + } + return this.breakpointSpanOf(current); + }; + BreakpointResolver.prototype.breakpointSpanIfStartsOnSameLine = function (positionedElement) { + if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(TypeScript.start(positionedElement))) { + return this.breakpointSpanOf(positionedElement); } - - var result = new Services.SignatureInfo(); - - result.formal = Services.SignatureInfoHelpers.getSignatureInfoFromGenericSymbol(typeSymbol, symbolInformation.enclosingScopeSymbol, this.compiler); - result.actual = Services.SignatureInfoHelpers.getActualSignatureInfoFromPartiallyWritenGenericExpression(position, genericTypeArgumentListInfo); - result.activeFormal = 0; - - return result; - } - - return null; - }; - - LanguageService.prototype.getDefinitionAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var symbolInfo = this.getSymbolInfoAtPosition(fileName, position, false); - if (symbolInfo === null || symbolInfo.symbol === null) { - return null; - } - - var symbol = symbolInfo.symbol; - - TypeScript.Debug.assert(symbol.kind !== 0 /* None */ && symbol.kind !== 0 /* Global */ && symbol.kind !== 1 /* Script */, "getDefinitionAtPosition - Invalid symbol kind"); - - if (symbol.kind === 2 /* Primitive */) { return null; - } - - var declarations = symbol.getDeclarations(); - var symbolName = symbol.getDisplayName(); - var symbolKind = this.mapPullElementKind(symbol.kind, symbol); - var container = symbol.getContainer(); - var containerName = container ? container.fullName() : ""; - var containerKind = container ? this.mapPullElementKind(container.kind, container) : ""; - - var result = []; - - if (!this.tryAddDefinition(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddSignatures(symbolKind, symbolName, containerKind, containerName, declarations, result) && !this.tryAddConstructor(symbolKind, symbolName, containerKind, containerName, declarations, result)) { - this.addDeclarations(symbolKind, symbolName, containerKind, containerName, declarations, result); - } - - return result; - }; - - LanguageService.prototype.addDeclarations = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - for (var i = 0, n = declarations.length; i < n; i++) { - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, declarations[i], result); - } - }; - - LanguageService.prototype.addDeclaration = function (symbolKind, symbolName, containerKind, containerName, declaration, result) { - var ast = declaration.ast(); - result.push(new Services.DefinitionInfo(this._getHostFileName(declaration.fileName()), ast.start(), ast.end(), symbolKind, symbolName, containerKind, containerName)); - }; - - LanguageService.prototype.tryAddDefinition = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var definitionDeclaration = TypeScript.ArrayUtilities.firstOrDefault(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && signature.isDefinition(); - }); - - if (!definitionDeclaration) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, definitionDeclaration, result); - return true; - }; - - LanguageService.prototype.tryAddSignatures = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var signatureDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - var signature = d.getSignatureSymbol(); - return signature && !signature.isDefinition(); - }); - - if (signatureDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(signatureDeclarations), result); - return true; - }; - - LanguageService.prototype.tryAddConstructor = function (symbolKind, symbolName, containerKind, containerName, declarations, result) { - var constructorDeclarations = TypeScript.ArrayUtilities.where(declarations, function (d) { - return d.kind === 32768 /* ConstructorMethod */; - }); - - if (constructorDeclarations.length === 0) { - return false; - } - - this.addDeclaration(symbolKind, symbolName, containerKind, containerName, TypeScript.ArrayUtilities.last(constructorDeclarations), result); - return true; - }; - - LanguageService.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - TypeScript.Debug.assert(searchValue !== null && searchValue !== undefined, "The searchValue argument was not supplied or null"); - - var terms = searchValue.split(" "); - - var searchTerms = terms.map(function (t) { - return ({ caseSensitive: _this.hasAnyUpperCaseCharacter(t), term: t }); - }); - - var items = []; - - var fileNames = this.compiler.fileNames(); - for (var i = 0, n = fileNames.length; i < n; i++) { - var fileName = fileNames[i]; - var declaration = this.compiler.getCachedTopLevelDeclaration(fileName); - this.findSearchValueInPullDecl(fileName, [declaration], items, searchTerms); - } - return items; - }; - - LanguageService.prototype.hasAnyUpperCaseCharacter = function (s) { - for (var i = 0; i < s.length; ++i) { - if (s.charAt(i).toLocaleLowerCase() !== s.charAt(i)) { - return true; + }; + BreakpointResolver.prototype.breakpointSpanOf = function (positionedElement) { + if (!positionedElement) { + return null; } - } - - return false; - }; - - LanguageService.prototype.findSearchValueInPullDecl = function (fileName, declarations, results, searchTerms, parentName, parentkindName) { - var item; - var declaration; - var declName; - var kindName; - var matchKind; - var fullName; - - for (var i = 0, declLength = declarations.length; i < declLength; ++i) { - declaration = declarations[i]; - declName = declaration.getDisplayName(); - kindName = this.mapPullElementKind(declaration.kind); - matchKind = null; - - for (var j = 0, termsLength = searchTerms.length; j < termsLength; ++j) { - var searchTerm = searchTerms[j]; - var declNameToSearch = searchTerm.caseSensitive ? declName : declName.toLocaleLowerCase(); - - var index = declNameToSearch.indexOf(searchTerm.term); - - if (index !== -1) { - if (index === 0) { - matchKind = declName.length === searchTerm.term.length ? Services.MatchKind.exact : Services.MatchKind.prefix; - } else { - matchKind = Services.MatchKind.subString; - } + for (var containingNode = TypeScript.Syntax.containingNode(positionedElement); containingNode != null; containingNode = TypeScript.Syntax.containingNode(containingNode)) { + if (containingNode.kind() == 244 /* TypeAnnotation */) { + return this.breakpointSpanIfStartsOnSameLine(containingNode); } } - - if (this.shouldIncludeDeclarationInNavigationItems(declaration)) { - fullName = parentName ? parentName + "." + declName : declName; - var ast = declaration.ast(); - if (matchKind) { - item = new Services.NavigateToItem(); - item.name = declName; - item.matchKind = matchKind; - item.kind = this.mapPullElementKind(declaration.kind); - item.kindModifiers = this.getScriptElementKindModifiersFromDecl(declaration); - item.fileName = this._getHostFileName(fileName); - item.minChar = ast.start(); - item.limChar = ast.end(); - item.containerName = parentName || ""; - item.containerKind = parentkindName || ""; - results.push(item); - } + var element = positionedElement; + if (TypeScript.isNode(element)) { + return this.breakpointSpanOfNode(positionedElement); } - if (this.isContainerDeclaration(declaration)) { - this.findSearchValueInPullDecl(fileName, declaration.getChildDecls(), results, searchTerms, fullName, kindName); + if (TypeScript.isToken(element)) { + return this.breakpointSpanOfToken(positionedElement); } + return this.breakpointSpanOfContainingNode(positionedElement); + }; + return BreakpointResolver; + })(); + function getBreakpointLocation(syntaxTree, askedPos) { + if (TypeScript.isDTSFile(syntaxTree.fileName())) { + return null; } - }; - - LanguageService.prototype.getScriptElementKindModifiersFromDecl = function (decl) { - var result = []; - var flags = decl.flags; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); + var sourceUnit = syntaxTree.sourceUnit(); + var positionedToken = TypeScript.findToken(sourceUnit, askedPos); + var lineMap = syntaxTree.lineMap(); + var posLine = lineMap.getLineNumberFromPosition(askedPos); + var tokenStartLine = lineMap.getLineNumberFromPosition(TypeScript.start(positionedToken)); + if (posLine < tokenStartLine) { + return null; } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); + var breakpointResolver = new BreakpointResolver(posLine, lineMap); + return breakpointResolver.breakpointSpanOf(positionedToken); + } + Breakpoints.getBreakpointLocation = getBreakpointLocation; + })(Services.Breakpoints || (Services.Breakpoints = {})); + var Breakpoints = Services.Breakpoints; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Indentation) { + function columnForEndOfTokenAtPosition(syntaxTree, position, options) { + var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); + return columnForStartOfTokenAtPosition(syntaxTree, position, options) + TypeScript.width(token); + } + Indentation.columnForEndOfTokenAtPosition = columnForEndOfTokenAtPosition; + function columnForStartOfTokenAtPosition(syntaxTree, position, options) { + var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); + var firstTokenInLine = TypeScript.Syntax.firstTokenInLineContainingPosition(syntaxTree, token.fullStart()); + var leadingTextInReverse = []; + var current = token; + while (current !== firstTokenInLine) { + current = TypeScript.previousToken(current); + if (current === firstTokenInLine) { + leadingTextInReverse.push(current.trailingTrivia().fullText()); + leadingTextInReverse.push(current.text()); } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); + else { + leadingTextInReverse.push(current.fullText()); } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); + } + collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); + return columnForLeadingTextInReverse(leadingTextInReverse, options); + } + Indentation.columnForStartOfTokenAtPosition = columnForStartOfTokenAtPosition; + function columnForStartOfFirstTokenInLineContainingPosition(syntaxTree, position, options) { + var firstTokenInLine = TypeScript.Syntax.firstTokenInLineContainingPosition(syntaxTree, position); + var leadingTextInReverse = []; + collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); + return columnForLeadingTextInReverse(leadingTextInReverse, options); + } + Indentation.columnForStartOfFirstTokenInLineContainingPosition = columnForStartOfFirstTokenInLineContainingPosition; + function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) { + var leadingTrivia = firstTokenInLine.leadingTrivia(); + for (var i = leadingTrivia.count() - 1; i >= 0; i--) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.kind() === 5 /* NewLineTrivia */) { + break; } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); + if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { + var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); + leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments)); + if (lineSegments.length > 0) { + break; + } } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.isContainerDeclaration = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - case 4 /* Container */: - case 8 /* Class */: - case 16 /* Interface */: - case 32 /* DynamicModule */: - case 64 /* Enum */: - return true; + leadingTextInReverse.push(trivia.fullText()); + } + } + function columnForLeadingTextInReverse(leadingTextInReverse, options) { + var column = 0; + for (var i = leadingTextInReverse.length - 1; i >= 0; i--) { + var text = leadingTextInReverse[i]; + column = columnForPositionInStringWorker(text, text.length, column, options); + } + return column; + } + function columnForPositionInString(input, position, options) { + return columnForPositionInStringWorker(input, position, 0, options); + } + Indentation.columnForPositionInString = columnForPositionInString; + function columnForPositionInStringWorker(input, position, startColumn, options) { + var column = startColumn; + var spacesPerTab = options.spacesPerTab; + for (var j = 0; j < position; j++) { + var ch = input.charCodeAt(j); + if (ch === 9 /* tab */) { + column += spacesPerTab - column % spacesPerTab; } - - return false; - }; - - LanguageService.prototype.shouldIncludeDeclarationInNavigationItems = function (declaration) { - switch (declaration.kind) { - case 1 /* Script */: - return false; - case 512 /* Variable */: - case 4096 /* Property */: - return (declaration.flags & (16384 /* ClassConstructorVariable */ | 32768 /* InitializedModule */ | 65536 /* InitializedDynamicModule */ | 4096 /* Enum */)) === 0; - case 67108864 /* EnumMember */: - return true; - case 131072 /* FunctionExpression */: - case 16384 /* Function */: - return declaration.name !== ""; - case 32768 /* ConstructorMethod */: - return false; + else { + column++; } - - if (this.isContainerDeclaration(declaration)) { - return true; + } + return column; + } + function indentationString(column, options) { + var numberOfTabs = 0; + var numberOfSpaces = Math.max(0, column); + if (options.useTabs) { + numberOfTabs = Math.floor(column / options.spacesPerTab); + numberOfSpaces -= numberOfTabs * options.spacesPerTab; + } + return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces); + } + Indentation.indentationString = indentationString; + function firstNonWhitespacePosition(value) { + for (var i = 0; i < value.length; i++) { + var ch = value.charCodeAt(i); + if (!TypeScript.CharacterInfo.isWhitespace(ch)) { + return i; } - - return true; - }; - - LanguageService.prototype.getSyntacticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSyntacticDiagnostics(fileName); - }; - - LanguageService.prototype.getSemanticDiagnostics = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this.compiler.getSemanticDiagnostics(fileName); - }; - - LanguageService.prototype._getHostSpecificDiagnosticWithFileName = function (diagnostic) { - return new TypeScript.Diagnostic(this._getHostFileName(diagnostic.fileName()), diagnostic.lineMap(), diagnostic.start(), diagnostic.length(), diagnostic.diagnosticKey(), diagnostic.arguments(), diagnostic.additionalLocations()); - }; - - LanguageService.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); - }; - var compilerOptionsDiagnostics = this.compiler.getCompilerOptionsDiagnostics(resolvePath); - return compilerOptionsDiagnostics.map(function (d) { - return _this._getHostSpecificDiagnosticWithFileName(d); - }); - }; - - LanguageService.prototype._getHostFileName = function (fileName) { - if (fileName) { - return this.compiler.getCachedHostFileName(fileName); + } + return value.length; + } + Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; + })(TypeScript.Indentation || (TypeScript.Indentation = {})); + var Indentation = TypeScript.Indentation; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TextSnapshot = (function () { + function TextSnapshot(snapshot) { + this.snapshot = snapshot; + this.lines = []; } - return fileName; - }; - - LanguageService.prototype.getEmitOutput = function (fileName) { - var _this = this; - fileName = TypeScript.switchToForwardSlashes(fileName); - - var resolvePath = function (fileName) { - return _this.host.resolveRelativePath(fileName, null); + TextSnapshot.prototype.getText = function (span) { + return this.snapshot.substr(span.start(), span.length()); }; - - var document = this.compiler.getDocument(fileName); - var emitToSingleFile = document.emitToOwnOutputFile(); - - var syntacticDiagnostics = emitToSingleFile ? this.getSyntacticDiagnostics(fileName) : this.getAllSyntacticDiagnostics(); - if (this.containErrors(syntacticDiagnostics)) { - return new TypeScript.EmitOutput(1 /* FailedBecauseOfSyntaxErrors */); - } - - var semanticDiagnostics = emitToSingleFile ? this.getSemanticDiagnostics(fileName) : this.getAllSemanticDiagnostics(); - - var emitResult = this.compiler.emit(fileName, resolvePath); - if (emitResult.emitOutputResult == 0 /* Succeeded */) { - if (!this.containErrors(semanticDiagnostics)) { - var declarationEmitOutput = this.compiler.emitDeclarations(fileName, resolvePath); - emitResult.outputFiles.push.apply(emitResult.outputFiles, declarationEmitOutput.outputFiles); - TypeScript.Debug.assert(declarationEmitOutput.emitOutputResult == 0 /* Succeeded */); - } else if (this.compiler.canEmitDeclarations(fileName)) { - emitResult.emitOutputResult = 3 /* FailedToGenerateDeclarationsBecauseOfSemanticErrors */; + TextSnapshot.prototype.getLineNumberFromPosition = function (position) { + return this.snapshot.lineMap().getLineNumberFromPosition(position); + }; + TextSnapshot.prototype.getLineFromPosition = function (position) { + var lineNumber = this.getLineNumberFromPosition(position); + return this.getLineFromLineNumber(lineNumber); + }; + TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) { + var line = this.lines[lineNumber]; + if (line === undefined) { + line = this.getLineFromLineNumberWorker(lineNumber); + this.lines[lineNumber] = line; } - } - - return emitResult; - }; - - LanguageService.prototype.getAllSyntacticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().forEach(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSyntacticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.getAllSemanticDiagnostics = function () { - var _this = this; - var diagnostics = []; - - this.compiler.fileNames().map(function (fileName) { - return diagnostics.push.apply(diagnostics, _this.compiler.getSemanticDiagnostics(fileName)); - }); - - return diagnostics; - }; - - LanguageService.prototype.containErrors = function (diagnostics) { - if (diagnostics && diagnostics.length > 0) { - for (var i = 0; i < diagnostics.length; i++) { - var diagnosticInfo = diagnostics[i].info(); - if (diagnosticInfo.category === 1 /* Error */) { - return true; + return line; + }; + TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) { + var lineMap = this.snapshot.lineMap().lineStarts(); + var lineMapIndex = lineNumber; + if (lineMapIndex < 0 || lineMapIndex >= lineMap.length) + throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex])); + var start = lineMap[lineMapIndex]; + var end; + var endIncludingLineBreak; + var lineBreak = ""; + if (lineMapIndex == lineMap.length) { + end = endIncludingLineBreak = this.snapshot.length(); + } + else { + endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]); + for (var p = endIncludingLineBreak - 1; p >= start; p--) { + var c = this.snapshot.substr(p, 1); + if (c != "\r" && c != "\n") { + break; + } } + end = p + 1; + lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end); } + var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak); + return result; + }; + return TextSnapshot; + })(); + Formatting.TextSnapshot = TextSnapshot; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TextSnapshotLine = (function () { + function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) { + this._snapshot = _snapshot; + this._lineNumber = _lineNumber; + this._start = _start; + this._end = _end; + this._lineBreak = _lineBreak; } - - return false; - }; - - LanguageService.prototype.getFullNameOfSymbol = function (symbol, enclosingScopeSymbol) { - var container = symbol.getContainer(); - if (TypeScript.PullHelpers.isSymbolLocal(symbol) || symbol.kind == 2048 /* Parameter */) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - var symbolKind = symbol.kind; - if (symbol.kind == 2 /* Primitive */) { - return ""; - } - - if (symbolKind == 33554432 /* ConstructorType */) { - symbol = symbol.getAssociatedContainerType(); - } - - if (symbolKind != 4096 /* Property */ && symbolKind != 67108864 /* EnumMember */ && symbolKind != 65536 /* Method */ && symbolKind != 8192 /* TypeParameter */ && !symbol.anyDeclHasFlag(1 /* Exported */)) { - return symbol.getScopedName(enclosingScopeSymbol, false, true); - } - - return symbol.fullName(enclosingScopeSymbol); - }; - - LanguageService.prototype.getTypeInfoEligiblePath = function (fileName, position, isConstructorValidPosition) { - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, false, true); - if (ast === null) { - return null; - } - - if (ast.kind() === 227 /* ParameterList */ && ast.parent.kind() === 142 /* CallSignature */ && ast.parent.parent.kind() === 137 /* ConstructorDeclaration */) { - ast = ast.parent.parent; - } - - switch (ast.kind()) { - default: - return null; - case 137 /* ConstructorDeclaration */: - var constructorAST = ast; - if (!isConstructorValidPosition || !(position >= constructorAST.start() && position <= constructorAST.start() + "constructor".length)) { - return null; - } else { - return ast; - } - - case 129 /* FunctionDeclaration */: - return null; - - case 212 /* MemberAccessExpression */: - case 121 /* QualifiedName */: - case 50 /* SuperKeyword */: - case 14 /* StringLiteral */: - case 35 /* ThisKeyword */: - case 11 /* IdentifierName */: - return ast; + TextSnapshotLine.prototype.snapshot = function () { + return this._snapshot; + }; + TextSnapshotLine.prototype.start = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._start); + }; + TextSnapshotLine.prototype.startPosition = function () { + return this._start; + }; + TextSnapshotLine.prototype.end = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._end); + }; + TextSnapshotLine.prototype.endPosition = function () { + return this._end; + }; + TextSnapshotLine.prototype.endIncludingLineBreak = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length); + }; + TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () { + return this._end + this._lineBreak.length; + }; + TextSnapshotLine.prototype.length = function () { + return this._end - this._start; + }; + TextSnapshotLine.prototype.lineNumber = function () { + return this._lineNumber; + }; + TextSnapshotLine.prototype.getText = function () { + return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end)); + }; + return TextSnapshotLine; + })(); + Formatting.TextSnapshotLine = TextSnapshotLine; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var SnapshotPoint = (function () { + function SnapshotPoint(snapshot, position) { + this.snapshot = snapshot; + this.position = position; } - }; - - LanguageService.prototype.getTypeAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, position, true); - if (!node) { - return null; + SnapshotPoint.prototype.getContainingLine = function () { + return this.snapshot.getLineFromPosition(this.position); + }; + SnapshotPoint.prototype.add = function (offset) { + return new SnapshotPoint(this.snapshot, this.position + offset); + }; + return SnapshotPoint; + })(); + Formatting.SnapshotPoint = SnapshotPoint; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var FormattingContext = (function () { + function FormattingContext(snapshot, formattingRequestKind) { + this.snapshot = snapshot; + this.formattingRequestKind = formattingRequestKind; + this.currentTokenSpan = null; + this.nextTokenSpan = null; + this.contextNode = null; + this.currentTokenParent = null; + this.nextTokenParent = null; + this.contextNodeAllOnSameLine = null; + this.nextNodeAllOnSameLine = null; + this.tokensAreOnSameLine = null; + this.contextNodeBlockIsOnOneLine = null; + this.nextNodeBlockIsOnOneLine = null; + TypeScript.Debug.assert(this.snapshot != null, "snapshot is null"); } - - var document = this.compiler.getDocument(fileName); - var ast; - var symbol; - var typeSymbol; - var enclosingScopeSymbol; - var _isCallExpression = false; - var resolvedSignatures; - var candidateSignature; - var isConstructorCall; - - if (TypeScript.ASTHelpers.isDeclarationASTOrDeclarationNameAST(node)) { - var declarationInformation = this.compiler.getSymbolInformationFromAST(node, document); - if (!declarationInformation) { - return null; - } - - ast = declarationInformation.ast; - symbol = declarationInformation.symbol; - enclosingScopeSymbol = declarationInformation.enclosingScopeSymbol; - - if (node.kind() === 137 /* ConstructorDeclaration */ || node.kind() === 129 /* FunctionDeclaration */ || node.kind() === 218 /* ParenthesizedArrowFunctionExpression */ || node.kind() === 219 /* SimpleArrowFunctionExpression */ || node.kind() === 135 /* MemberFunctionDeclaration */ || TypeScript.ASTHelpers.isNameOfFunction(node) || TypeScript.ASTHelpers.isNameOfMemberFunction(node)) { - var funcDecl = node.kind() === 11 /* IdentifierName */ ? node.parent : node; - if (symbol && symbol.kind != 4096 /* Property */) { - var signatureInfo = TypeScript.PullHelpers.getSignatureForFuncDecl(this.compiler.getDeclForAST(funcDecl)); - _isCallExpression = true; - candidateSignature = signatureInfo.signature; - resolvedSignatures = signatureInfo.allSignatures; - } + FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) { + TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null"); + TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null"); + TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null"); + TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null"); + TypeScript.Debug.assert(commonParent != null, "commonParent is null"); + this.currentTokenSpan = currentTokenSpan; + this.currentTokenParent = currentTokenParent; + this.nextTokenSpan = nextTokenSpan; + this.nextTokenParent = nextTokenParent; + this.contextNode = commonParent; + this.contextNodeAllOnSameLine = null; + this.nextNodeAllOnSameLine = null; + this.tokensAreOnSameLine = null; + this.contextNodeBlockIsOnOneLine = null; + this.nextNodeBlockIsOnOneLine = null; + }; + FormattingContext.prototype.ContextNodeAllOnSameLine = function () { + if (this.contextNodeAllOnSameLine === null) { + this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); } - } else if (TypeScript.ASTHelpers.isCallExpression(node) || TypeScript.ASTHelpers.isCallExpressionTarget(node)) { - while (!TypeScript.ASTHelpers.isCallExpression(node)) { - node = node.parent; + return this.contextNodeAllOnSameLine; + }; + FormattingContext.prototype.NextNodeAllOnSameLine = function () { + if (this.nextNodeAllOnSameLine === null) { + this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); } - - var callExpressionInformation = this.compiler.getCallInformationFromAST(node, document); - - if (!callExpressionInformation || !callExpressionInformation.targetSymbol) { - return null; + return this.nextNodeAllOnSameLine; + }; + FormattingContext.prototype.TokensAreOnSameLine = function () { + if (this.tokensAreOnSameLine === null) { + var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start()); + var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start()); + this.tokensAreOnSameLine = (startLine == endLine); } - - ast = callExpressionInformation.ast; - symbol = callExpressionInformation.targetSymbol; - enclosingScopeSymbol = callExpressionInformation.enclosingScopeSymbol; - - var isPropertyOrVar = symbol.kind == 4096 /* Property */ || symbol.kind == 512 /* Variable */; - typeSymbol = symbol.type; - if (isPropertyOrVar) { - if (typeSymbol.getName() != "") { - symbol = typeSymbol; - } - isPropertyOrVar = (typeSymbol.kind != 16 /* Interface */ && typeSymbol.kind != 8388608 /* ObjectType */) || typeSymbol.getName() == ""; + return this.tokensAreOnSameLine; + }; + FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { + if (this.contextNodeBlockIsOnOneLine === null) { + this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); } - - if (!isPropertyOrVar) { - _isCallExpression = true; - resolvedSignatures = callExpressionInformation.resolvedSignatures; - candidateSignature = callExpressionInformation.candidateSignature; - isConstructorCall = callExpressionInformation.isConstructorCall; - } - } else { - var symbolInformation = this.compiler.getSymbolInformationFromAST(node, document); - - if (!symbolInformation || !symbolInformation.symbol) { - return null; + return this.contextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { + if (this.nextNodeBlockIsOnOneLine === null) { + this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); } - - ast = symbolInformation.ast; - symbol = symbolInformation.symbol; - enclosingScopeSymbol = symbolInformation.enclosingScopeSymbol; - - if (symbol.kind === 65536 /* Method */ || symbol.kind == 16384 /* Function */) { - typeSymbol = symbol.type; - if (typeSymbol) { - _isCallExpression = true; - resolvedSignatures = typeSymbol.getCallSignatures(); + return this.nextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NodeIsOnOneLine = function (node) { + var startLine = this.snapshot.getLineNumberFromPosition(node.start()); + var endLine = this.snapshot.getLineNumberFromPosition(node.end()); + return startLine == endLine; + }; + FormattingContext.prototype.BlockIsOnOneLine = function (node) { + var block = node.node(); + return this.snapshot.getLineNumberFromPosition(TypeScript.end(block.openBraceToken)) === this.snapshot.getLineNumberFromPosition(TypeScript.start(block.closeBraceToken)); + }; + return FormattingContext; + })(); + Formatting.FormattingContext = FormattingContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var FormattingManager = (function () { + function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) { + this.syntaxTree = syntaxTree; + this.snapshot = snapshot; + this.rulesProvider = rulesProvider; + this.options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); + } + FormattingManager.prototype.formatSelection = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 1 /* FormatSelection */); + }; + FormattingManager.prototype.formatDocument = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 0 /* FormatDocument */); + }; + FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 5 /* FormatOnPaste */); + }; + FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { + var sourceUnit = this.syntaxTree.sourceUnit(); + var semicolonPositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1); + if (semicolonPositionedToken.kind() === 78 /* SemicolonToken */) { + var current = semicolonPositionedToken; + while (current.parent !== null && TypeScript.end(current.parent) === TypeScript.end(semicolonPositionedToken) && current.parent.kind() !== 1 /* List */) { + current = current.parent; } + var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current)); + return this.formatSpan(span, 3 /* FormatOnSemicolon */); } - } - - if (resolvedSignatures && (!candidateSignature || candidateSignature.isDefinition())) { - for (var i = 0, len = resolvedSignatures.length; i < len; i++) { - if (len > 1 && resolvedSignatures[i].isDefinition()) { - continue; + return []; + }; + FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) { + var sourceUnit = this.syntaxTree.sourceUnit(); + var closeBracePositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1); + if (closeBracePositionedToken.kind() === 71 /* CloseBraceToken */) { + var current = closeBracePositionedToken; + while (current.parent !== null && TypeScript.end(current.parent) === TypeScript.end(closeBracePositionedToken) && current.parent.kind() !== 1 /* List */) { + current = current.parent; } - - candidateSignature = resolvedSignatures[i]; - break; + var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current)); + return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */); } + return []; + }; + FormattingManager.prototype.formatOnEnter = function (caretPosition) { + var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); + if (lineNumber > 0) { + var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1); + var currentLine = this.snapshot.getLineFromLineNumber(lineNumber); + var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition()); + return this.formatSpan(span, 2 /* FormatOnEnter */); + } + return []; + }; + FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) { + var startLine = this.snapshot.getLineFromPosition(span.start()); + span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end()); + var result = []; + var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); + formattingEdits.forEach(function (item) { + result.push({ + minChar: item.position, + limChar: item.position + item.length, + text: item.replaceWith + }); + }); + return result; + }; + return FormattingManager; + })(); + Formatting.FormattingManager = FormattingManager; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (FormattingRequestKind) { + FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; + FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; + FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; + FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; + FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace"; + FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste"; + })(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {})); + var FormattingRequestKind = Formatting.FormattingRequestKind; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Rule = (function () { + function Rule(Descriptor, Operation, Flag) { + if (Flag === void 0) { Flag = 0 /* None */; } + this.Descriptor = Descriptor; + this.Operation = Operation; + this.Flag = Flag; } - - var memberName = _isCallExpression ? TypeScript.PullSignatureSymbol.getSignatureTypeMemberName(candidateSignature, resolvedSignatures, enclosingScopeSymbol) : symbol.getTypeNameEx(enclosingScopeSymbol, true); - var kind = this.mapPullElementKind(symbol.kind, symbol, !_isCallExpression, _isCallExpression, isConstructorCall); - - var docCommentSymbol = candidateSignature || symbol; - var docComment = docCommentSymbol.docComments(!_isCallExpression); - var symbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - var minChar = ast ? ast.start() : -1; - var limChar = ast ? ast.end() : -1; - - return new Services.TypeInfo(memberName, docComment, symbolName, kind, minChar, limChar); - }; - - LanguageService.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var document = this.compiler.getDocument(fileName); - var sourceUnit = document.sourceUnit(); - - if (Services.CompletionHelpers.isCompletionListBlocker(document.syntaxTree().sourceUnit(), position)) { - this.logger.log("Returning an empty list because completion was blocked."); - return null; - } - - var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, true, true); - - if (node && node.kind() === 11 /* IdentifierName */ && node.start() === node.end()) { - node = node.parent; + Rule.prototype.toString = function () { + return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]"; + }; + return Rule; + })(); + Formatting.Rule = Rule; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (RuleAction) { + RuleAction[RuleAction["Ignore"] = 0] = "Ignore"; + RuleAction[RuleAction["Space"] = 1] = "Space"; + RuleAction[RuleAction["NewLine"] = 2] = "NewLine"; + RuleAction[RuleAction["Delete"] = 3] = "Delete"; + })(Formatting.RuleAction || (Formatting.RuleAction = {})); + var RuleAction = Formatting.RuleAction; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleDescriptor = (function () { + function RuleDescriptor(LeftTokenRange, RightTokenRange) { + this.LeftTokenRange = LeftTokenRange; + this.RightTokenRange = RightTokenRange; } - - var isRightOfDot = false; - if (node && node.kind() === 212 /* MemberAccessExpression */ && node.expression.end() < position) { - isRightOfDot = true; - node = node.expression; - } else if (node && node.kind() === 121 /* QualifiedName */ && node.left.end() < position) { - isRightOfDot = true; - node = node.left; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 212 /* MemberAccessExpression */ && node.parent.name === node) { - isRightOfDot = true; - node = node.parent.expression; - } else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 121 /* QualifiedName */ && node.parent.right === node) { - isRightOfDot = true; - node = node.parent.left; + RuleDescriptor.prototype.toString = function () { + return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]"; + }; + RuleDescriptor.create1 = function (left, right) { + return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create2 = function (left, right) { + return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create3 = function (left, right) { + return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right); + }; + RuleDescriptor.create4 = function (left, right) { + return new RuleDescriptor(left, right); + }; + return RuleDescriptor; + })(); + Formatting.RuleDescriptor = RuleDescriptor; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (RuleFlags) { + RuleFlags[RuleFlags["None"] = 0] = "None"; + RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; + })(Formatting.RuleFlags || (Formatting.RuleFlags = {})); + var RuleFlags = Formatting.RuleFlags; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleOperation = (function () { + function RuleOperation() { + this.Context = null; + this.Action = null; } - - var entries = new TypeScript.IdentiferNameHashTable(); - - if (isRightOfDot) { - var members = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - if (!members) { - return null; - } - - isMemberCompletion = true; - this.getCompletionEntriesFromSymbols(members, entries); - } else { - var containingObjectLiteral = Services.CompletionHelpers.getContainingObjectLiteralApplicableForCompletion(document.syntaxTree().sourceUnit(), position); - - if (containingObjectLiteral) { - var searchPosition = Math.min(position, containingObjectLiteral.end()); - var path = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, searchPosition); - - while (node && node.kind() !== 215 /* ObjectLiteralExpression */) { - node = node.parent; - } - - if (!node || node.kind() !== 215 /* ObjectLiteralExpression */) { - return null; - } - - isMemberCompletion = true; - - var contextualMembers = this.compiler.getContextualMembersFromAST(node, document); - if (contextualMembers && contextualMembers.symbols && contextualMembers.symbols.length > 0) { - var existingMembers = this.compiler.getVisibleMemberSymbolsFromAST(node, document); - - this.getCompletionEntriesFromSymbols({ - symbols: Services.CompletionHelpers.filterContextualMembersList(contextualMembers.symbols, existingMembers, fileName, position), - enclosingScopeSymbol: contextualMembers.enclosingScopeSymbol - }, entries); - } - } else { - isMemberCompletion = false; - var decls = this.compiler.getVisibleDeclsFromAST(node, document); - this.getCompletionEntriesFromDecls(decls, entries); + RuleOperation.prototype.toString = function () { + return "[context=" + this.Context + "," + "action=" + this.Action + "]"; + }; + RuleOperation.create1 = function (action) { + return RuleOperation.create2(Formatting.RuleOperationContext.Any, action); + }; + RuleOperation.create2 = function (context, action) { + var result = new RuleOperation(); + result.Context = context; + result.Action = action; + return result; + }; + return RuleOperation; + })(); + Formatting.RuleOperation = RuleOperation; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleOperationContext = (function () { + function RuleOperationContext() { + var funcs = []; + for (var _i = 0; _i < arguments.length; _i++) { + funcs[_i - 0] = arguments[_i]; } + this.customContextChecks = funcs; } - - if (!isMemberCompletion) { - this.getCompletionEntriesForKeywords(Services.KeywordCompletions.getKeywordCompltions(), entries); - } - - var completions = new Services.CompletionInfo(); - completions.isMemberCompletion = isMemberCompletion; - completions.entries = []; - entries.map(function (key, value) { - completions.entries.push({ - name: value.name, - kind: value.kind, - kindModifiers: value.kindModifiers - }); - }, null); - - this.activeCompletionSession = new Services.CompletionSession(fileName, position, entries); - - return completions; - }; - - LanguageService.prototype.getCompletionEntriesFromSymbols = function (symbolInfo, result) { - for (var i = 0, n = symbolInfo.symbols.length; i < n; i++) { - var symbol = symbolInfo.symbols[i]; - - var symbolDisplayName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(symbol.getDisplayName()); - if (!symbolDisplayName) { - continue; - } - - var symbolKind = symbol.kind; - - var exitingEntry = result.lookup(symbolDisplayName); - - if (exitingEntry && (symbolKind & 68147712 /* SomeValue */)) { - continue; + RuleOperationContext.prototype.IsAny = function () { + return this == RuleOperationContext.Any; + }; + RuleOperationContext.prototype.InContext = function (context) { + if (this.IsAny()) { + return true; } - - var entry; - var kindName = this.mapPullElementKind(symbolKind, symbol, true); - var kindModifiersName = this.getScriptElementKindModifiers(symbol); - - if (symbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry = new Services.ResolvedCompletionEntry(symbolDisplayName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(symbolDisplayName, kindName, kindModifiersName, symbol.getDeclarations()[0]); + for (var i = 0, len = this.customContextChecks.length; i < len; i++) { + if (!this.customContextChecks[i](context)) { + return false; + } } - - result.addOrUpdate(symbolDisplayName, entry); + return true; + }; + RuleOperationContext.Any = new RuleOperationContext(); + return RuleOperationContext; + })(); + Formatting.RuleOperationContext = RuleOperationContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Rules = (function () { + function Rules() { + this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */)); + this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(7 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */)); + this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 106 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 105 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(106 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); + this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */)); + this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 23 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 42 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 75 /* CloseBracketToken */, 79 /* CommaToken */, 78 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(75 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments; + this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([11 /* IdentifierName */, 6 /* MultiLineCommentTrivia */]); + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 6 /* MultiLineCommentTrivia */, 22 /* DoKeyword */, 38 /* TryKeyword */, 25 /* FinallyKeyword */, 23 /* ElseKeyword */]); + this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); + this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); + this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */)); + this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); + this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); + this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(93 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(94 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(93 /* PlusPlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(94 /* MinusMinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 79 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([40 /* VarKeyword */, 36 /* ThrowKeyword */, 31 /* NewKeyword */, 21 /* DeleteKeyword */, 33 /* ReturnKeyword */, 39 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */)); + this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(27 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */)); + this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(41 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */)); + this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(33 /* ReturnKeyword */, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 22 /* DoKeyword */, 23 /* ElseKeyword */, 16 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */)); + this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([38 /* TryKeyword */, 25 /* FinallyKeyword */]), 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([64 /* GetKeyword */, 68 /* SetKeyword */]), 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(62 /* ConstructorKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([65 /* ModuleKeyword */, 66 /* RequireKeyword */]), 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([44 /* ClassKeyword */, 63 /* DeclareKeyword */, 46 /* EnumKeyword */, 47 /* ExportKeyword */, 48 /* ExtendsKeyword */, 64 /* GetKeyword */, 51 /* ImplementsKeyword */, 49 /* ImportKeyword */, 52 /* InterfaceKeyword */, 65 /* ModuleKeyword */, 55 /* PrivateKeyword */, 57 /* PublicKeyword */, 68 /* SetKeyword */, 58 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([48 /* ExtendsKeyword */, 51 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(14 /* StringLiteral */, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */)); + this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(85 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(77 /* DotDotDotToken */, 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseParenToken */, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([72 /* OpenParenToken */, 74 /* OpenBracketToken */, 81 /* GreaterThanToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */)); + this.HighPriorityCommonRules = [ + this.IgnoreBeforeComment, + this.IgnoreAfterLineComment, + this.NoSpaceBeforeColon, + this.SpaceAfterColon, + this.NoSpaceBeforeQMark, + this.SpaceAfterQMark, + this.NoSpaceBeforeDot, + this.NoSpaceAfterDot, + this.NoSpaceAfterUnaryPrefixOperator, + this.NoSpaceAfterUnaryPreincrementOperator, + this.NoSpaceAfterUnaryPredecrementOperator, + this.NoSpaceBeforeUnaryPostincrementOperator, + this.NoSpaceBeforeUnaryPostdecrementOperator, + this.SpaceAfterPostincrementWhenFollowedByAdd, + this.SpaceAfterAddWhenFollowedByUnaryPlus, + this.SpaceAfterAddWhenFollowedByPreincrement, + this.SpaceAfterPostdecrementWhenFollowedBySubtract, + this.SpaceAfterSubtractWhenFollowedByUnaryMinus, + this.SpaceAfterSubtractWhenFollowedByPredecrement, + this.NoSpaceAfterCloseBrace, + this.SpaceAfterOpenBrace, + this.SpaceBeforeCloseBrace, + this.NewLineBeforeCloseBraceInBlockContext, + this.SpaceAfterCloseBrace, + this.SpaceBetweenCloseBraceAndElse, + this.SpaceBetweenCloseBraceAndWhile, + this.NoSpaceBetweenEmptyBraceBrackets, + this.SpaceAfterFunctionInFuncDecl, + this.NewLineAfterOpenBraceInBlockContext, + this.SpaceAfterGetSetInMember, + this.NoSpaceBetweenReturnAndSemicolon, + this.SpaceAfterCertainKeywords, + this.NoSpaceBeforeOpenParenInFuncCall, + this.SpaceBeforeBinaryKeywordOperator, + this.SpaceAfterBinaryKeywordOperator, + this.SpaceAfterVoidOperator, + this.NoSpaceAfterConstructor, + this.NoSpaceAfterModuleImport, + this.SpaceAfterCertainTypeScriptKeywords, + this.SpaceBeforeCertainTypeScriptKeywords, + this.SpaceAfterModuleName, + this.SpaceAfterArrow, + this.NoSpaceAfterEllipsis, + this.NoSpaceAfterOptionalParameters, + this.NoSpaceBetweenEmptyInterfaceBraceBrackets, + this.NoSpaceBeforeOpenAngularBracket, + this.NoSpaceBetweenCloseParenAndAngularBracket, + this.NoSpaceAfterOpenAngularBracket, + this.NoSpaceBeforeCloseAngularBracket, + this.NoSpaceAfterCloseAngularBracket + ]; + this.LowPriorityCommonRules = [ + this.NoSpaceBeforeSemicolon, + this.SpaceBeforeOpenBraceInControl, + this.SpaceBeforeOpenBraceInFunction, + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, + this.NoSpaceBeforeComma, + this.NoSpaceBeforeOpenBracket, + this.NoSpaceAfterOpenBracket, + this.NoSpaceBeforeCloseBracket, + this.NoSpaceAfterCloseBracket, + this.SpaceAfterSemicolon, + this.NoSpaceBeforeOpenParenInFuncDecl, + this.SpaceBetweenStatements, + this.SpaceAfterTryFinally + ]; + this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); + this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); + this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */)); + this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */)); + this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */)); + this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */)); + this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenParenToken */, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */)); } - }; - - LanguageService.prototype.getCompletionEntriesFromDecls = function (decls, result) { - for (var i = 0, n = decls ? decls.length : 0; i < n; i++) { - var decl = decls[i]; - - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - if (!declDisplaylName) { - continue; - } - - var declKind = decl.kind; - - var exitingEntry = result.lookup(declDisplaylName); - - if (exitingEntry && (declKind & 68147712 /* SomeValue */)) { - continue; + Rules.prototype.getRuleName = function (rule) { + var o = this; + for (var name in o) { + if (o[name] === rule) { + return name; + } } - - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - var entry = null; - - var symbol = decl.hasSymbol() && decl.getSymbol(); - - var enclosingDecl = decl.getEnclosingDecl(); - var enclosingScopeSymbol = (enclosingDecl && enclosingDecl.hasSymbol()) ? enclosingDecl.getSymbol() : null; - - if (symbol && symbol.isResolved && enclosingScopeSymbol && enclosingScopeSymbol.isResolved) { - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, enclosingScopeSymbol); - entry = new Services.ResolvedCompletionEntry(declDisplaylName, kindName, kindModifiersName, completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); - } else { - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); + throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null)); + }; + Rules.IsForContext = function (context) { + return context.contextNode.kind() === 154 /* ForStatement */; + }; + Rules.IsNotForContext = function (context) { + return !Rules.IsForContext(context); + }; + Rules.IsBinaryOpContext = function (context) { + switch (context.contextNode.kind()) { + case 174 /* AssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 182 /* OrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 186 /* ConditionalExpression */: + case 187 /* LogicalOrExpression */: + case 188 /* LogicalAndExpression */: + case 189 /* BitwiseOrExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 191 /* BitwiseAndExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + return true; + case 133 /* ImportDeclaration */: + case 225 /* VariableDeclarator */: + case 232 /* EqualsValueClause */: + return context.currentTokenSpan.kind === 107 /* EqualsToken */ || context.nextTokenSpan.kind === 107 /* EqualsToken */; + case 155 /* ForInStatement */: + return context.currentTokenSpan.kind === 29 /* InKeyword */ || context.nextTokenSpan.kind === 29 /* InKeyword */; } - - result.addOrUpdate(declDisplaylName, entry); - } - }; - - LanguageService.prototype.getResolvedCompletionEntryDetailsFromSymbol = function (symbol, enclosingScopeSymbol) { - var typeName = symbol.getTypeName(enclosingScopeSymbol, true); - var fullSymbolName = this.getFullNameOfSymbol(symbol, enclosingScopeSymbol); - - var type = symbol.type; - var symbolForDocComments = symbol; - if (type && type.hasOnlyOverloadCallSignatures()) { - symbolForDocComments = type.getCallSignatures()[0]; - } - - var docComments = symbolForDocComments.docComments(true); - return { - typeName: typeName, - fullSymbolName: fullSymbolName, - docComments: docComments + return false; + }; + Rules.IsNotBinaryOpContext = function (context) { + return !Rules.IsBinaryOpContext(context); }; - }; - - LanguageService.prototype.getCompletionEntriesForKeywords = function (keywords, result) { - for (var i = 0, n = keywords.length; i < n; i++) { - var keyword = keywords[i]; - result.addOrUpdate(keyword.name, keyword); - } - }; - - LanguageService.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - if (!this.activeCompletionSession || this.activeCompletionSession.fileName !== fileName || this.activeCompletionSession.position !== position) { - return null; - } - - var entry = this.activeCompletionSession.entries.lookup(entryName); - if (!entry) { - return null; - } - - if (!entry.isResolved()) { - var decl = entry.decl; - - var document = this.compiler.getDocument(fileName); - if (decl.fileName() === TypeScript.switchToForwardSlashes(fileName)) { - decl = this.tryFindDeclFromPreviousCompilerVersion(decl); - - if (decl) { - var declDisplaylName = Services.CompletionHelpers.getValidCompletionEntryDisplayName(decl.getDisplayName()); - var declKind = decl.kind; - var kindName = this.mapPullElementKind(declKind, null, true); - var kindModifiersName = this.getScriptElementKindModifiersFromFlags(decl.flags); - - entry = new Services.DeclReferenceCompletionEntry(declDisplaylName, kindName, kindModifiersName, decl); - this.activeCompletionSession.entries.addOrUpdate(entryName, entry); - } + Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { + return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); + }; + Rules.IsBeforeMultilineBlockContext = function (context) { + return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); + }; + Rules.IsMultilineBlockContext = function (context) { + return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsSingleLineBlockContext = function (context) { + return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.contextNode); + }; + Rules.IsBeforeBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.nextTokenParent); + }; + Rules.NodeIsBlockContext = function (node) { + if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { + return true; } - - if (decl) { - var node = TypeScript.ASTHelpers.getAstAtPosition(document.sourceUnit(), position); - var symbolInfo = this.compiler.pullGetDeclInformation(decl, node, document); - - if (!symbolInfo) { - return null; - } - - var symbol = symbolInfo.symbol; - var completionInfo = this.getResolvedCompletionEntryDetailsFromSymbol(symbol, symbolInfo.enclosingScopeSymbol); - - entry.resolve(completionInfo.typeName, completionInfo.fullSymbolName, completionInfo.docComments); + switch (node.kind()) { + case 146 /* Block */: + case 151 /* SwitchStatement */: + case 215 /* ObjectLiteralExpression */: + return true; } - } - - return { - name: entry.name, - kind: entry.kind, - kindModifiers: entry.kindModifiers, - type: entry.type, - fullSymbolName: entry.fullSymbolName, - docComment: entry.docComment + return false; }; - }; - - LanguageService.prototype.tryFindDeclFromPreviousCompilerVersion = function (invalidatedDecl) { - var fileName = invalidatedDecl.fileName(); - - var declsInPath = []; - var current = invalidatedDecl; - while (current) { - if (current.kind !== 1 /* Script */) { - declsInPath.unshift(current); + Rules.IsFunctionDeclContext = function (context) { + switch (context.contextNode.kind()) { + case 129 /* FunctionDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 145 /* MethodSignature */: + case 142 /* CallSignature */: + case 222 /* FunctionExpression */: + case 137 /* ConstructorDeclaration */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 128 /* InterfaceDeclaration */: + return true; } - - current = current.getParentDecl(); - } - - var topLevelDecl = this.compiler.topLevelDeclaration(fileName); - if (!topLevelDecl) { - return null; - } - - var declsToSearch = [topLevelDecl]; - var foundDecls = []; - var keepSearching = (invalidatedDecl.kind & 4 /* Container */) || (invalidatedDecl.kind & 16 /* Interface */) || (invalidatedDecl.kind & 8 /* Class */) || (invalidatedDecl.kind & 64 /* Enum */); - - for (var i = 0; i < declsInPath.length; i++) { - var declInPath = declsInPath[i]; - var decls = []; - - for (var j = 0; j < declsToSearch.length; j++) { - foundDecls = declsToSearch[j].searchChildDecls(declInPath.name, declInPath.kind); - - decls.push.apply(decls, foundDecls); - - if (foundDecls.length && !keepSearching) { - break; - } + return false; + }; + Rules.IsTypeScriptDeclWithBlockContext = function (context) { + return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); + }; + Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { + switch (node.kind()) { + case 131 /* ClassDeclaration */: + case 132 /* EnumDeclaration */: + case 122 /* ObjectType */: + case 130 /* ModuleDeclaration */: + return true; } - - declsToSearch = decls; - - if (declsToSearch.length == 0) { - break; + return false; + }; + Rules.IsAfterCodeBlockContext = function (context) { + switch (context.currentTokenParent.kind()) { + case 131 /* ClassDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 146 /* Block */: + case 151 /* SwitchStatement */: + return true; } - } - - return declsToSearch.length === 0 ? null : declsToSearch[0]; - }; - - LanguageService.prototype.getModuleOrEnumKind = function (symbol) { - if (symbol) { - var declarations = symbol.getDeclarations(); - for (var i = 0; i < declarations.length; i++) { - var declKind = declarations[i].kind; - if (declKind == 4 /* Container */) { - return Services.ScriptElementKind.moduleElement; - } else if (declKind == 64 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } else if (declKind == 512 /* Variable */) { - var declFlags = declarations[i].flags; - if (declFlags & 32768 /* InitializedModule */) { - return Services.ScriptElementKind.moduleElement; - } else if (declFlags & 4096 /* Enum */) { - return Services.ScriptElementKind.enumElement; - } - } + return false; + }; + Rules.IsControlDeclContext = function (context) { + switch (context.contextNode.kind()) { + case 147 /* IfStatement */: + case 151 /* SwitchStatement */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 159 /* TryStatement */: + case 161 /* DoStatement */: + case 163 /* WithStatement */: + case 235 /* ElseClause */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + return true; + default: + return false; } + }; + Rules.IsObjectContext = function (context) { + return context.contextNode.kind() === 215 /* ObjectLiteralExpression */; + }; + Rules.IsFunctionCallContext = function (context) { + return context.contextNode.kind() === 213 /* InvocationExpression */; + }; + Rules.IsNewContext = function (context) { + return context.contextNode.kind() === 216 /* ObjectCreationExpression */; + }; + Rules.IsFunctionCallOrNewContext = function (context) { + return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); + }; + Rules.IsSameLineTokenContext = function (context) { + return context.TokensAreOnSameLine(); + }; + Rules.IsNotFormatOnEnter = function (context) { + return context.formattingRequestKind != 2 /* FormatOnEnter */; + }; + Rules.IsModuleDeclContext = function (context) { + return context.contextNode.kind() === 130 /* ModuleDeclaration */; + }; + Rules.IsObjectTypeContext = function (context) { + return context.contextNode.kind() === 122 /* ObjectType */ && context.contextNode.parent().kind() !== 128 /* InterfaceDeclaration */; + }; + Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) { + return ((tokenKind === 80 /* LessThanToken */ || tokenKind === 81 /* GreaterThanToken */) && (parentKind === 229 /* TypeParameterList */ || parentKind === 228 /* TypeArgumentList */)); + }; + Rules.IsTypeArgumentOrParameterContext = function (context) { + return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind, context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind, context.nextTokenParent.kind()); + }; + Rules.IsVoidOpContext = function (context) { + return context.currentTokenSpan.kind === 41 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */; + }; + return Rules; + })(); + Formatting.Rules = Rules; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RulesMap = (function () { + function RulesMap() { + this.map = []; + this.mapRowLength = 0; } - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.mapPullElementKind = function (kind, symbol, useConstructorAsClass, varIsFunction, functionIsConstructor) { - if (functionIsConstructor) { - return Services.ScriptElementKind.constructorImplementationElement; - } - - if (varIsFunction) { - switch (kind) { - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - case 16 /* Interface */: - case 8 /* Class */: - case 2048 /* Parameter */: - return Services.ScriptElementKind.functionElement; - case 512 /* Variable */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberFunctionElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } else { - switch (kind) { - case 1 /* Script */: - return Services.ScriptElementKind.scriptElement; - case 4 /* Container */: - case 32 /* DynamicModule */: - case 128 /* TypeAlias */: - return Services.ScriptElementKind.moduleElement; - case 16 /* Interface */: - return Services.ScriptElementKind.interfaceElement; - case 8 /* Class */: - return Services.ScriptElementKind.classElement; - case 64 /* Enum */: - return Services.ScriptElementKind.enumElement; - case 512 /* Variable */: - var scriptElementKind = this.getModuleOrEnumKind(symbol); - if (scriptElementKind != Services.ScriptElementKind.unknown) { - return scriptElementKind; + RulesMap.create = function (rules) { + var result = new RulesMap(); + result.Initialize(rules); + return result; + }; + RulesMap.prototype.Initialize = function (rules) { + this.mapRowLength = TypeScript.SyntaxKind.LastToken + 1; + this.map = new Array(this.mapRowLength * this.mapRowLength); + var rulesBucketConstructionStateList = new Array(this.map.length); + this.FillRules(rules, rulesBucketConstructionStateList); + return this.map; + }; + RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { + var _this = this; + rules.forEach(function (rule) { + _this.FillRule(rule, rulesBucketConstructionStateList); + }); + }; + RulesMap.prototype.GetRuleBucketIndex = function (row, column) { + var rulesBucketIndex = (row * this.mapRowLength) + column; + return rulesBucketIndex; + }; + RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { + var _this = this; + var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any; + rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { + rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { + var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); + var rulesBucket = _this.map[rulesBucketIndex]; + if (rulesBucket == undefined) { + rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); } - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localVariableElement : Services.ScriptElementKind.variableElement; - case 2048 /* Parameter */: - return Services.ScriptElementKind.parameterElement; - case 4096 /* Property */: - return Services.ScriptElementKind.memberVariableElement; - case 16384 /* Function */: - return (symbol && TypeScript.PullHelpers.isSymbolLocal(symbol)) ? Services.ScriptElementKind.localFunctionElement : Services.ScriptElementKind.functionElement; - case 32768 /* ConstructorMethod */: - return useConstructorAsClass ? Services.ScriptElementKind.classElement : Services.ScriptElementKind.constructorImplementationElement; - case 65536 /* Method */: - return Services.ScriptElementKind.memberFunctionElement; - case 131072 /* FunctionExpression */: - return Services.ScriptElementKind.localFunctionElement; - case 262144 /* GetAccessor */: - return Services.ScriptElementKind.memberGetAccessorElement; - case 524288 /* SetAccessor */: - return Services.ScriptElementKind.memberSetAccessorElement; - case 1048576 /* CallSignature */: - return Services.ScriptElementKind.callSignatureElement; - case 2097152 /* ConstructSignature */: - return Services.ScriptElementKind.constructSignatureElement; - case 4194304 /* IndexSignature */: - return Services.ScriptElementKind.indexSignatureElement; - case 67108864 /* EnumMember */: - return Services.ScriptElementKind.memberVariableElement; - case 8192 /* TypeParameter */: - return Services.ScriptElementKind.typeParameterElement; - case 2 /* Primitive */: - return Services.ScriptElementKind.primitiveType; - } - } - - return Services.ScriptElementKind.unknown; - }; - - LanguageService.prototype.getScriptElementKindModifiers = function (symbol) { - var result = []; - - if (symbol.anyDeclHasFlag(1 /* Exported */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - if (symbol.anyDeclHasFlag(8 /* Ambient */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - if (symbol.anyDeclHasFlag(4 /* Public */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - if (symbol.anyDeclHasFlag(2 /* Private */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - if (symbol.anyDeclHasFlag(16 /* Static */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getScriptElementKindModifiersFromFlags = function (flags) { - var result = []; - - if (flags & 1 /* Exported */) { - result.push(Services.ScriptElementKindModifier.exportedModifier); - } - - if (flags & 8 /* Ambient */) { - result.push(Services.ScriptElementKindModifier.ambientModifier); - } - - if (flags & 4 /* Public */) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); - } - - if (flags & 2 /* Private */) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); - } - - if (flags & 16 /* Static */) { - result.push(Services.ScriptElementKindModifier.staticModifier); - } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - LanguageService.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var node = this.getTypeInfoEligiblePath(fileName, startPos, false); - - if (!node) { + rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); + }); + }); + }; + RulesMap.prototype.GetRule = function (context) { + var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind); + var bucket = this.map[bucketIndex]; + if (bucket != null) { + for (var i = 0, len = bucket.Rules().length; i < len; i++) { + var rule = bucket.Rules()[i]; + if (rule.Operation.Context.InContext(context)) + return rule; + } + } return null; + }; + return RulesMap; + })(); + Formatting.RulesMap = RulesMap; + var MaskBitSize = 5; + var Mask = 0x1f; + (function (RulesPosition) { + RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; + RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; + RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; + RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; + RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; + RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; + })(Formatting.RulesPosition || (Formatting.RulesPosition = {})); + var RulesPosition = Formatting.RulesPosition; + var RulesBucketConstructionState = (function () { + function RulesBucketConstructionState() { + this.rulesInsertionIndexBitmap = 0; } - - while (node) { - if (TypeScript.ASTHelpers.isNameOfMemberAccessExpression(node) || TypeScript.ASTHelpers.isRightSideOfQualifiedName(node)) { - node = node.parent; - } else { - break; + RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { + var index = 0; + var pos = 0; + var indexBitmap = this.rulesInsertionIndexBitmap; + while (pos <= maskPosition) { + index += (indexBitmap & Mask); + indexBitmap >>= MaskBitSize; + pos += MaskBitSize; } + return index; + }; + RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { + var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; + value++; + TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); + var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); + temp |= value << maskPosition; + this.rulesInsertionIndexBitmap = temp; + }; + return RulesBucketConstructionState; + })(); + Formatting.RulesBucketConstructionState = RulesBucketConstructionState; + var RulesBucket = (function () { + function RulesBucket() { + this.rules = []; } - - var spanInfo = new Services.SpanInfo(node.start(), node.end()); - return spanInfo; - }; - - LanguageService.prototype.getBreakpointStatementAtPosition = function (fileName, pos) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxtree = this.getSyntaxTree(fileName); - return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, pos); - }; - - LanguageService.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatSelection(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatDocument(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - return manager.formatOnPaste(minChar, limChar); - }; - - LanguageService.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var manager = this.getFormattingManager(fileName, options); - - if (key === "}") { - return manager.formatOnClosingCurlyBrace(position); - } else if (key === ";") { - return manager.formatOnSemicolon(position); - } else if (key === "\n") { - return manager.formatOnEnter(position); - } - - return []; - }; - - LanguageService.prototype.getFormattingManager = function (fileName, options) { - if (this.formattingRulesProvider == null) { - this.formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(this.logger); - } - - this.formattingRulesProvider.ensureUpToDate(options); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - - var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, this.formattingRulesProvider, options); - - return manager; - }; - - LanguageService.prototype.getOutliningRegions = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.OutliningElementsCollector.collectElements(syntaxTree.sourceUnit()); - }; - - LanguageService.prototype.getIndentationAtPosition = function (fileName, position, editorOptions) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - - var scriptSnapshot = this.compiler.getScriptSnapshot(fileName); - var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); - var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); - var options = new FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); - - return TypeScript.Services.Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); - }; - - LanguageService.prototype.getBraceMatchingAtPosition = function (fileName, position) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - return Services.BraceMatcher.getMatchSpans(syntaxTree, position); - }; - - LanguageService.prototype.getScriptLexicalStructure = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - - var syntaxTree = this.getSyntaxTree(fileName); - var items = []; - Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, fileName, syntaxTree.sourceUnit()); - - return items; - }; - - LanguageService.prototype.getSyntaxTree = function (fileName) { - fileName = TypeScript.switchToForwardSlashes(fileName); - return this._syntaxTreeCache.getCurrentFileSyntaxTree(fileName); - }; - return LanguageService; - })(); - Services.LanguageService = LanguageService; - - function isSignatureHelpBlocker(ast) { - if (ast) { - switch (ast.kind()) { - case 131 /* ClassDeclaration */: - case 128 /* InterfaceDeclaration */: - case 130 /* ModuleDeclaration */: - case 137 /* ConstructorDeclaration */: - case 129 /* FunctionDeclaration */: - case 225 /* VariableDeclarator */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return true; - } - } - - return false; - } + RulesBucket.prototype.Rules = function () { + return this.rules; + }; + RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { + var position; + if (rule.Operation.Action == 0 /* Ignore */) { + position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; + } + else if (!rule.Operation.Context.IsAny()) { + position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; + } + else { + position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; + } + var state = constructionState[rulesBucketIndex]; + if (state === undefined) { + state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); + } + var index = state.GetInsertionIndex(position); + this.rules.splice(index, 0, rule); + state.IncreaseInsertionIndex(position); + }; + return RulesBucket; + })(); + Formatting.RulesBucket = RulesBucket; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - var FindReferenceHelpers = (function () { - function FindReferenceHelpers() { - } - FindReferenceHelpers.compareSymbolsForLexicalIdentity = function (firstSymbol, secondSymbol) { - if (!firstSymbol.isAlias() && firstSymbol.isContainer()) { - var containerForFirstSymbol = firstSymbol; - if (containerForFirstSymbol.getInstanceSymbol()) { - firstSymbol = containerForFirstSymbol.getInstanceSymbol(); - } + (function (Formatting) { + var RulesProvider = (function () { + function RulesProvider(logger) { + this.logger = logger; + this.globalRules = new Formatting.Rules(); } - - if (!secondSymbol.isAlias() && secondSymbol.isContainer()) { - var containerForSecondSymbol = secondSymbol; - if (containerForSecondSymbol.getInstanceSymbol()) { - secondSymbol = containerForSecondSymbol.getInstanceSymbol(); + RulesProvider.prototype.getRuleName = function (rule) { + return this.globalRules.getRuleName(rule); + }; + RulesProvider.prototype.getRuleByName = function (name) { + return this.globalRules[name]; + }; + RulesProvider.prototype.getRulesMap = function () { + return this.rulesMap; + }; + RulesProvider.prototype.ensureUpToDate = function (options) { + var _this = this; + if (this.options == null || !ts.compareDataObjects(this.options, options)) { + var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { + return _this.createActiveRules(options); + }); + var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { + return Formatting.RulesMap.create(activeRules); + }); + this.activeRules = activeRules; + this.rulesMap = rulesMap; + this.options = ts.clone(options); } - } - - if (firstSymbol.kind === secondSymbol.kind) { - if (firstSymbol === secondSymbol) { - return true; + }; + RulesProvider.prototype.createActiveRules = function (options) { + var rules = this.globalRules.HighPriorityCommonRules.slice(0); + if (options.InsertSpaceAfterCommaDelimiter) { + rules.push(this.globalRules.SpaceAfterComma); } - - if (firstSymbol.kind === 512 /* Variable */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - return firstSymbolDecl.getParentDecl() === secondSymbolDecl.getParentDecl(); + else { + rules.push(this.globalRules.NoSpaceAfterComma); } - - if (firstSymbol.kind === 4096 /* Property */ && firstSymbol.name === secondSymbol.name && firstSymbol.getDeclarations() && firstSymbol.getDeclarations().length >= 1 && secondSymbol.getDeclarations() && secondSymbol.getDeclarations().length >= 1) { - var firstSymbolDecl = firstSymbol.getDeclarations()[0]; - var secondSymbolDecl = secondSymbol.getDeclarations()[0]; - - var firstParentDecl = firstSymbolDecl.getParentDecl(); - var secondParentDecl = secondSymbolDecl.getParentDecl(); - - if (firstParentDecl.kind === 256 /* ObjectLiteral */ && secondParentDecl.kind === 256 /* ObjectLiteral */) { - return firstParentDecl.ast() === secondParentDecl.ast(); - } + if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { + rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); } - - return false; - } else { - switch (firstSymbol.kind) { - case 8 /* Class */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } - case 4096 /* Property */: { - if (firstSymbol.isAccessor()) { - var getterSymbol = firstSymbol.getGetter(); - var setterSymbol = firstSymbol.getSetter(); - - if (getterSymbol && getterSymbol === secondSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === secondSymbol) { - return true; - } - } - return false; - } - case 16384 /* Function */: { - if (secondSymbol.isAccessor()) { - var getterSymbol = secondSymbol.getGetter(); - var setterSymbol = secondSymbol.getSetter(); - - if (getterSymbol && getterSymbol === firstSymbol) { - return true; - } - - if (setterSymbol && setterSymbol === firstSymbol) { - return true; - } - } - return false; - } - case 32768 /* ConstructorMethod */: { - return this.checkSymbolsForDeclarationEquality(firstSymbol, secondSymbol); - } + else { + rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); } - } - - return firstSymbol === secondSymbol; - }; - - FindReferenceHelpers.checkSymbolsForDeclarationEquality = function (firstSymbol, secondSymbol) { - var firstSymbolDeclarations = firstSymbol.getDeclarations(); - var secondSymbolDeclarations = secondSymbol.getDeclarations(); - for (var i = 0, iLen = firstSymbolDeclarations.length; i < iLen; i++) { - for (var j = 0, jLen = secondSymbolDeclarations.length; j < jLen; j++) { - if (this.declarationsAreSameOrParents(firstSymbolDeclarations[i], secondSymbolDeclarations[j])) { - return true; - } + if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { + rules.push(this.globalRules.SpaceAfterKeywordInControl); } - } - return false; - }; - - FindReferenceHelpers.declarationsAreSameOrParents = function (firstDecl, secondDecl) { - var firstParent = firstDecl.getParentDecl(); - var secondParent = secondDecl.getParentDecl(); - if (firstDecl === secondDecl || firstDecl === secondParent || firstParent === secondDecl || firstParent === secondParent) { - return true; - } - return false; - }; - return FindReferenceHelpers; - })(); - Services.FindReferenceHelpers = FindReferenceHelpers; + else { + rules.push(this.globalRules.NoSpaceAfterKeywordInControl); + } + if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { + rules.push(this.globalRules.SpaceAfterOpenParen); + rules.push(this.globalRules.SpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenParen); + rules.push(this.globalRules.NoSpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + if (options.InsertSpaceAfterSemicolonInForStatements) { + rules.push(this.globalRules.SpaceAfterSemicolonInFor); + } + else { + rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); + } + if (options.InsertSpaceBeforeAndAfterBinaryOperators) { + rules.push(this.globalRules.SpaceBeforeBinaryOperator); + rules.push(this.globalRules.SpaceAfterBinaryOperator); + } + else { + rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); + rules.push(this.globalRules.NoSpaceAfterBinaryOperator); + } + if (options.PlaceOpenBraceOnNewLineForControlBlocks) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); + } + if (options.PlaceOpenBraceOnNewLineForFunctions) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); + rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); + } + rules = rules.concat(this.globalRules.LowPriorityCommonRules); + return rules; + }; + return RulesProvider; + })(); + Formatting.RulesProvider = RulesProvider; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - - - - - var ShimBase = (function () { - function ShimBase(factory) { - this.factory = factory; - factory.registerShim(this); - } - ShimBase.prototype.dispose = function (dummy) { - this.factory.unregisterShim(this); - }; - return ShimBase; - })(); - Services.ShimBase = ShimBase; - - var ScriptSnapshotShimAdapter = (function () { - function ScriptSnapshotShimAdapter(scriptSnapshotShim) { - this.scriptSnapshotShim = scriptSnapshotShim; - this.lineStartPositions = null; - } - ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { - return this.scriptSnapshotShim.getText(start, end); - }; - - ScriptSnapshotShimAdapter.prototype.getLength = function () { - return this.scriptSnapshotShim.getLength(); - }; - - ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { - if (this.lineStartPositions == null) { - this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); - } - - return this.lineStartPositions; - }; - - ScriptSnapshotShimAdapter.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { - var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); - if (encoded == null) { - return null; - } - - var decoded = JSON.parse(encoded); - return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); - }; - return ScriptSnapshotShimAdapter; - })(); - - var LanguageServiceShimHostAdapter = (function () { - function LanguageServiceShimHostAdapter(shimHost) { - this.shimHost = shimHost; - } - LanguageServiceShimHostAdapter.prototype.information = function () { - return this.shimHost.information(); - }; - - LanguageServiceShimHostAdapter.prototype.debug = function () { - return this.shimHost.debug(); - }; - - LanguageServiceShimHostAdapter.prototype.warning = function () { - return this.shimHost.warning(); - }; - - LanguageServiceShimHostAdapter.prototype.error = function () { - return this.shimHost.error(); - }; - - LanguageServiceShimHostAdapter.prototype.fatal = function () { - return this.shimHost.fatal(); - }; - - LanguageServiceShimHostAdapter.prototype.log = function (s) { - this.shimHost.log(s); - }; - - LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { - var settingsJson = this.shimHost.getCompilationSettings(); - if (settingsJson == null || settingsJson == "") { - return null; - } - var settings = JSON.parse(settingsJson); - return settings; - }; - - LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { - var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { - return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { - return this.shimHost.getScriptVersion(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { - return this.shimHost.getScriptIsOpen(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getScriptByteOrderMark = function (fileName) { - return this.shimHost.getScriptByteOrderMark(fileName); - }; - - LanguageServiceShimHostAdapter.prototype.getDiagnosticsObject = function () { - return this.shimHost.getDiagnosticsObject(); - }; - - LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { - var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); - if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { - return null; - } - try { - return JSON.parse(diagnosticMessagesJson); - } catch (e) { - this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); - return null; - } - }; - - LanguageServiceShimHostAdapter.prototype.resolveRelativePath = function (path, directory) { - return this.shimHost.resolveRelativePath(path, directory); - }; - - LanguageServiceShimHostAdapter.prototype.fileExists = function (path) { - return this.shimHost.fileExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.directoryExists = function (path) { - return this.shimHost.directoryExists(path); - }; - - LanguageServiceShimHostAdapter.prototype.getParentDirectory = function (path) { - return this.shimHost.getParentDirectory(path); - }; - return LanguageServiceShimHostAdapter; - })(); - Services.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; - - function simpleForwardCall(logger, actionDescription, action) { - logger.log(actionDescription); - var start = Date.now(); - var result = action(); - var end = Date.now(); - logger.log(actionDescription + " completed in " + (end - start) + " msec"); - if (typeof (result) === "string") { - var str = result; - if (str.length > 128) { - str = str.substring(0, 128) + "..."; - } - logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); - } - return result; - } - Services.simpleForwardCall = simpleForwardCall; - - function forwardJSONCall(logger, actionDescription, action) { - try { - var result = simpleForwardCall(logger, actionDescription, action); - return JSON.stringify({ result: result }); - } catch (err) { - TypeScript.Services.logInternalError(logger, err); - err.description = actionDescription; - return JSON.stringify({ error: err }); - } - } - Services.forwardJSONCall = forwardJSONCall; - - var LanguageServiceShim = (function (_super) { - __extends(LanguageServiceShim, _super); - function LanguageServiceShim(factory, host, languageService) { - _super.call(this, factory); - this.host = host; - this.languageService = languageService; - this.logger = this.host; - } - LanguageServiceShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - LanguageServiceShim.prototype.dispose = function (dummy) { - this.logger.log("dispose()"); - this.languageService = null; - - if (debugObjectHost && debugObjectHost.CollectGarbage) { - debugObjectHost.CollectGarbage(); - this.logger.log("CollectGarbage()"); - } - - this.logger = null; - - _super.prototype.dispose.call(this, dummy); - }; - - LanguageServiceShim.prototype.refresh = function (throwOnError) { - var _this = this; - this.forwardJSONCall("refresh(" + throwOnError + ")", function () { - _this.languageService.refresh(); - return null; - }); - }; - - LanguageServiceShim.prototype.cleanupSemanticCache = function () { - var _this = this; - this.forwardJSONCall("cleanupSemanticCache()", function () { - _this.languageService.cleanupSemanticCache(); - return null; - }); - }; - - LanguageServiceShim.realizeDiagnosticCategory = function (category) { - switch (category) { - case 1 /* Error */: - return Services.DiagnosticCategory.error; - case 0 /* Warning */: - return Services.DiagnosticCategory.warning; - case 2 /* Message */: - return Services.DiagnosticCategory.message; - default: - return Services.DiagnosticCategory.none; + (function (Formatting) { + var TextEditInfo = (function () { + function TextEditInfo(position, length, replaceWith) { + this.position = position; + this.length = length; + this.replaceWith = replaceWith; } - }; - - LanguageServiceShim.realizeDiagnostic = function (diagnostic) { - return { - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) - }; - }; - - LanguageServiceShim.prototype.realizeDiagnosticWithFileName = function (diagnostic) { - return { - fileName: diagnostic.fileName(), - message: diagnostic.text(), - start: diagnostic.start(), - length: diagnostic.length(), - category: LanguageServiceShim.realizeDiagnosticCategory(diagnostic.info().category) + TextEditInfo.prototype.toString = function () { + return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]"; }; - }; - - LanguageServiceShim.prototype.getSyntacticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSyntacticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getSemanticDiagnostics = function (fileName) { - var _this = this; - return this.forwardJSONCall("getSemanticDiagnostics(\"" + fileName + "\")", function () { - var errors = _this.languageService.getSemanticDiagnostics(fileName); - return errors.map(LanguageServiceShim.realizeDiagnostic); - }); - }; - - LanguageServiceShim.prototype.getCompilerOptionsDiagnostics = function () { - var _this = this; - return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { - var errors = _this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(function (d) { - return _this.realizeDiagnosticWithFileName(d); - }); - }); - }; - - LanguageServiceShim.prototype.getTypeAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getTypeAtPosition(\"" + fileName + "\", " + position + ")", function () { - var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); - return typeInfo; - }); - }; - - LanguageServiceShim.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { - var _this = this; - return this.forwardJSONCall("getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", function () { - var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getBreakpointStatementAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", function () { - var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position); - return spanInfo; - }); - }; - - LanguageServiceShim.prototype.getSignatureAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getSignatureAtPosition(\"" + fileName + "\", " + position + ")", function () { - var signatureInfo = _this.languageService.getSignatureAtPosition(fileName, position); - return signatureInfo; - }); - }; - - LanguageServiceShim.prototype.getDefinitionAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getDefinitionAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getBraceMatchingAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", function () { - var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position); - return textRanges; - }); - }; - - LanguageServiceShim.prototype.getIndentationAtPosition = function (fileName, position, options) { - var _this = this; - return this.forwardJSONCall("getIndentationAtPosition(\"" + fileName + "\", " + position + ")", function () { - var localOptions = JSON.parse(options); - var columnOffset = _this.languageService.getIndentationAtPosition(fileName, position, localOptions); - return { value: columnOffset }; - }); - }; - - LanguageServiceShim.prototype.getReferencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getReferencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getReferencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getOccurrencesAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getOccurrencesAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getImplementorsAtPosition = function (fileName, position) { - var _this = this; - return this.forwardJSONCall("getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", function () { - return _this.languageService.getImplementorsAtPosition(fileName, position); - }); - }; - - LanguageServiceShim.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { - var _this = this; - return this.forwardJSONCall("getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", function () { - var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); - return completion; - }); - }; - - LanguageServiceShim.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { - var _this = this; - return this.forwardJSONCall("getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", function () { - var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName); - return details; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { - var _this = this; - return this.forwardJSONCall("getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", function () { - var localOptions = JSON.parse(options); - var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); - return edits; - }); - }; - - LanguageServiceShim.prototype.getNavigateToItems = function (searchValue) { - var _this = this; - return this.forwardJSONCall("getNavigateToItems(\"" + searchValue + "\")", function () { - var items = _this.languageService.getNavigateToItems(searchValue); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getScriptLexicalStructure = function (fileName) { - var _this = this; - return this.forwardJSONCall("getScriptLexicalStructure(\"" + fileName + "\")", function () { - var items = _this.languageService.getScriptLexicalStructure(fileName); - var result = _this._navigateToItemsToString(items); - return result; - }); - }; - - LanguageServiceShim.prototype.getOutliningRegions = function (fileName) { - var _this = this; - return this.forwardJSONCall("getOutliningRegions(\"" + fileName + "\")", function () { - var items = _this.languageService.getOutliningRegions(fileName); - return items; - }); - }; - - LanguageServiceShim.prototype.getEmitOutput = function (fileName) { - var _this = this; - return this.forwardJSONCall("getEmitOutput(\"" + fileName + "\")", function () { - var output = _this.languageService.getEmitOutput(fileName); - return output; - }); - }; - - LanguageServiceShim.prototype._navigateToItemsToString = function (items) { - var result = []; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - - result.push({ - name: item.name, - kind: item.kind, - kindModifiers: item.kindModifiers, - containerName: item.containerName, - containerKind: item.containerKind, - matchKind: item.matchKind, - fileName: item.fileName, - minChar: item.minChar, - limChar: item.limChar, - additionalSpans: item.additionalSpans ? item.additionalSpans.map(function (i) { - return { start: i.minChar, end: i.limChar }; - }) : undefined - }); - } - - return result; - }; - return LanguageServiceShim; - })(ShimBase); - Services.LanguageServiceShim = LanguageServiceShim; - - var ClassifierShim = (function (_super) { - __extends(ClassifierShim, _super); - function ClassifierShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.classifier = new TypeScript.Services.Classifier(this.host); - } - ClassifierShim.prototype.getClassificationsForLine = function (text, lexState) { - var classification = this.classifier.getClassificationsForLine(text, lexState); - var items = classification.entries; - var result = ""; - for (var i = 0; i < items.length; i++) { - result += items[i].length + "\n"; - result += items[i].classification + "\n"; - } - result += classification.finalLexState; - return result; - }; - return ClassifierShim; - })(ShimBase); - Services.ClassifierShim = ClassifierShim; - - var CoreServicesShim = (function (_super) { - __extends(CoreServicesShim, _super); - function CoreServicesShim(factory, host) { - _super.call(this, factory); - this.host = host; - this.logger = this.host.logger; - this.services = new TypeScript.Services.CoreServices(this.host); - } - CoreServicesShim.prototype.forwardJSONCall = function (actionDescription, action) { - return TypeScript.Services.forwardJSONCall(this.logger, actionDescription, action); - }; - - CoreServicesShim.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { - var _this = this; - return this.forwardJSONCall("getPreProcessedFileInfo(\"" + fileName + "\")", function () { - var result = _this.services.getPreProcessedFileInfo(fileName, sourceText); - return result; - }); - }; - - CoreServicesShim.prototype.getDefaultCompilationSettings = function () { - var _this = this; - return this.forwardJSONCall("getDefaultCompilationSettings()", function () { - var result = _this.services.getDefaultCompilationSettings(); - return result; - }); - }; - - CoreServicesShim.prototype.dumpMemory = function (dummy) { - var _this = this; - return this.forwardJSONCall("dumpMemory()", function () { - return _this.services.dumpMemory(); - }); - }; - - CoreServicesShim.prototype.getMemoryInfo = function (dummy) { - var _this = this; - return this.forwardJSONCall("getMemoryInfo()", function () { - var result = _this.services.getMemoryInfo(); - return result; - }); - }; - return CoreServicesShim; - })(ShimBase); - Services.CoreServicesShim = CoreServicesShim; + return TextEditInfo; + })(); + Formatting.TextEditInfo = TextEditInfo; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (Shared) { + var TokenRangeAccess = (function () { + function TokenRangeAccess(from, to, except) { + this.tokens = []; + for (var token = from; token <= to; token++) { + if (except.indexOf(token) < 0) { + this.tokens.push(token); + } + } + } + TokenRangeAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenRangeAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + TokenRangeAccess.prototype.toString = function () { + return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]"; + }; + return TokenRangeAccess; + })(); + Shared.TokenRangeAccess = TokenRangeAccess; + var TokenValuesAccess = (function () { + function TokenValuesAccess(tks) { + this.tokens = tks && tks.length ? tks : []; + } + TokenValuesAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenValuesAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + return TokenValuesAccess; + })(); + Shared.TokenValuesAccess = TokenValuesAccess; + var TokenSingleValueAccess = (function () { + function TokenSingleValueAccess(token) { + this.token = token; + } + TokenSingleValueAccess.prototype.GetTokens = function () { + return [this.token]; + }; + TokenSingleValueAccess.prototype.Contains = function (tokenValue) { + return tokenValue == this.token; + }; + TokenSingleValueAccess.prototype.toString = function () { + return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]"; + }; + return TokenSingleValueAccess; + })(); + Shared.TokenSingleValueAccess = TokenSingleValueAccess; + var TokenAllAccess = (function () { + function TokenAllAccess() { + } + TokenAllAccess.prototype.GetTokens = function () { + var result = []; + for (var token = TypeScript.SyntaxKind.FirstToken; token <= TypeScript.SyntaxKind.LastToken; token++) { + result.push(token); + } + return result; + }; + TokenAllAccess.prototype.Contains = function (tokenValue) { + return true; + }; + TokenAllAccess.prototype.toString = function () { + return "[allTokens]"; + }; + return TokenAllAccess; + })(); + Shared.TokenAllAccess = TokenAllAccess; + var TokenRange = (function () { + function TokenRange(tokenAccess) { + this.tokenAccess = tokenAccess; + } + TokenRange.FromToken = function (token) { + return new TokenRange(new TokenSingleValueAccess(token)); + }; + TokenRange.FromTokens = function (tokens) { + return new TokenRange(new TokenValuesAccess(tokens)); + }; + TokenRange.FromRange = function (f, to, except) { + if (except === void 0) { except = []; } + return new TokenRange(new TokenRangeAccess(f, to, except)); + }; + TokenRange.AllTokens = function () { + return new TokenRange(new TokenAllAccess()); + }; + TokenRange.prototype.GetTokens = function () { + return this.tokenAccess.GetTokens(); + }; + TokenRange.prototype.Contains = function (token) { + return this.tokenAccess.Contains(token); + }; + TokenRange.prototype.toString = function () { + return this.tokenAccess.toString(); + }; + TokenRange.Any = TokenRange.AllTokens(); + TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([6 /* MultiLineCommentTrivia */])); + TokenRange.Keywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstKeyword, TypeScript.SyntaxKind.LastKeyword); + TokenRange.Operators = TokenRange.FromRange(78 /* SemicolonToken */, 119 /* SlashEqualsToken */); + TokenRange.BinaryOperators = TokenRange.FromRange(80 /* LessThanToken */, 119 /* SlashEqualsToken */); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([29 /* InKeyword */, 30 /* InstanceOfKeyword */]); + TokenRange.ReservedKeywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword, TypeScript.SyntaxKind.LastFutureReservedStrictKeyword); + TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([93 /* PlusPlusToken */, 94 /* MinusMinusToken */, 102 /* TildeToken */, 101 /* ExclamationToken */]); + TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([13 /* NumericLiteral */, 11 /* IdentifierName */, 72 /* OpenParenToken */, 74 /* OpenBracketToken */, 70 /* OpenBraceToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); + TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); + TokenRange.Comments = TokenRange.FromTokens([7 /* SingleLineCommentTrivia */, 6 /* MultiLineCommentTrivia */]); + TokenRange.TypeNames = TokenRange.FromTokens([11 /* IdentifierName */, 67 /* NumberKeyword */, 69 /* StringKeyword */, 61 /* BooleanKeyword */, 41 /* VoidKeyword */, 60 /* AnyKeyword */]); + return TokenRange; + })(); + Shared.TokenRange = TokenRange; + })(Formatting.Shared || (Formatting.Shared = {})); + var Shared = Formatting.Shared; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - var OutliningElementsCollector = (function (_super) { - __extends(OutliningElementsCollector, _super); - function OutliningElementsCollector() { - _super.call(this, OutliningElementsCollector.MaximumDepth); - this.inObjectLiteralExpression = false; - this.elements = []; - } - OutliningElementsCollector.prototype.visitClassDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitClassDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitInterfaceDeclaration = function (node) { - this.addOutlineRange(node, node.body, node.body); - _super.prototype.visitInterfaceDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitModuleDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitModuleDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitEnumDeclaration = function (node) { - this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); - _super.prototype.visitEnumDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitFunctionExpression = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitFunctionExpression.call(this, node); - }; - - OutliningElementsCollector.prototype.visitConstructorDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitConstructorDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitMemberFunctionDeclaration = function (node) { - this.addOutlineRange(node, node.block, node.block); - _super.prototype.visitMemberFunctionDeclaration.call(this, node); - }; - - OutliningElementsCollector.prototype.visitGetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitGetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitSetAccessor = function (node) { - if (!this.inObjectLiteralExpression) { - this.addOutlineRange(node, node.block, node.block); - } - _super.prototype.visitSetAccessor.call(this, node); - }; - - OutliningElementsCollector.prototype.visitObjectLiteralExpression = function (node) { - var savedInObjectLiteralExpression = this.inObjectLiteralExpression; - this.inObjectLiteralExpression = true; - _super.prototype.visitObjectLiteralExpression.call(this, node); - this.inObjectLiteralExpression = savedInObjectLiteralExpression; - }; - - OutliningElementsCollector.prototype.addOutlineRange = function (node, startElement, endElement) { - if (startElement && endElement) { - var start = this.position() + TypeScript.Syntax.childOffset(node, startElement); - var end = this.position() + TypeScript.Syntax.childOffset(node, endElement) + endElement.leadingTriviaWidth() + endElement.width(); - - this.elements.push(TypeScript.TextSpan.fromBounds(start, end)); + (function (Formatting) { + var TokenSpan = (function (_super) { + __extends(TokenSpan, _super); + function TokenSpan(kind, start, length) { + _super.call(this, start, length); + this.kind = kind; } - }; - - OutliningElementsCollector.collectElements = function (node) { - var collector = new OutliningElementsCollector(); - node.accept(collector); - return collector.elements; - }; - OutliningElementsCollector.MaximumDepth = 10; - return OutliningElementsCollector; - })(TypeScript.DepthLimitedWalker); - Services.OutliningElementsCollector = OutliningElementsCollector; + return TokenSpan; + })(TypeScript.TextSpan); + Formatting.TokenSpan = TokenSpan; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - var Indenter = (function () { - function Indenter() { - } - Indenter.getIndentation = function (node, soruceText, position, editorOptions) { - var indentation = 0; - var currentToken = node.findToken(position); - var currentNode = currentToken; - - if (currentToken.token().kind() === 10 /* EndOfFileToken */) { - currentNode = currentToken.previousToken(); - } else if (Indenter.belongsToBracket(soruceText, currentToken, position)) { - currentNode = currentToken.parent(); + (function (Formatting) { + var IndentationNodeContext = (function () { + function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { + this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta); } - - if (currentNode === null) { - return indentation; + IndentationNodeContext.prototype.parent = function () { + return this._parent; + }; + IndentationNodeContext.prototype.node = function () { + return this._node; + }; + IndentationNodeContext.prototype.fullStart = function () { + return this._fullStart; + }; + IndentationNodeContext.prototype.fullWidth = function () { + return TypeScript.fullWidth(this._node); + }; + IndentationNodeContext.prototype.start = function () { + return this._fullStart + TypeScript.leadingTriviaWidth(this._node); + }; + IndentationNodeContext.prototype.end = function () { + return this._fullStart + TypeScript.leadingTriviaWidth(this._node) + TypeScript.width(this._node); + }; + IndentationNodeContext.prototype.indentationAmount = function () { + return this._indentationAmount; + }; + IndentationNodeContext.prototype.childIndentationAmountDelta = function () { + return this._childIndentationAmountDelta; + }; + IndentationNodeContext.prototype.depth = function () { + return this._depth; + }; + IndentationNodeContext.prototype.kind = function () { + return this._node.kind(); + }; + IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () { + if (this._hasSkippedOrMissingTokenChild === null) { + this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node); + } + return this._hasSkippedOrMissingTokenChild; + }; + IndentationNodeContext.prototype.clone = function (pool) { + var parent = null; + if (this._parent) { + parent = this._parent.clone(pool); + } + return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta); + }; + IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { + this._parent = parent; + this._node = node; + this._fullStart = fullStart; + this._indentationAmount = indentationAmount; + this._childIndentationAmountDelta = childIndentationAmountDelta; + this._hasSkippedOrMissingTokenChild = null; + if (parent) { + this._depth = parent.depth() + 1; + } + else { + this._depth = 0; + } + }; + return IndentationNodeContext; + })(); + Formatting.IndentationNodeContext = IndentationNodeContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var IndentationNodeContextPool = (function () { + function IndentationNodeContextPool() { + this.nodes = []; } - - if (currentNode.kind() === 14 /* StringLiteral */ || currentNode.kind() === 12 /* RegularExpressionLiteral */) { - return indentation; + IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) { + if (this.nodes.length > 0) { + var cachedNode = this.nodes.pop(); + cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); + return cachedNode; + } + return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); + }; + IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) { + if (recursive === void 0) { recursive = false; } + this.nodes.push(node); + if (recursive) { + var parent = node.parent(); + if (parent) { + this.releaseNode(parent, recursive); + } + } + }; + return IndentationNodeContextPool; + })(); + Formatting.IndentationNodeContextPool = IndentationNodeContextPool; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var IndentationTrackingWalker = (function (_super) { + __extends(IndentationTrackingWalker, _super); + function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this); + this.options = options; + this._position = 0; + this._parent = null; + this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool(); + this._textSpan = textSpan; + this._text = sourceUnit.syntaxTree.text; + this._snapshot = snapshot; + this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0); + this._lastTriviaWasNewLine = indentFirstToken; } - - var currentElement = currentNode.element(); - var parent = currentNode.parent(); - - while (parent !== null) { - if (parent.fullStart() !== currentNode.fullStart()) { - if (Indenter.isInContainerNode(parent.element(), currentElement)) { - indentation += editorOptions.IndentSize; - } else { - var listIndentation = Indenter.getCustomListIndentation(parent.element(), currentElement); - if (listIndentation !== -1) { - return indentation + listIndentation; - } + IndentationTrackingWalker.prototype.position = function () { + return this._position; + }; + IndentationTrackingWalker.prototype.parent = function () { + return this._parent; + }; + IndentationTrackingWalker.prototype.textSpan = function () { + return this._textSpan; + }; + IndentationTrackingWalker.prototype.snapshot = function () { + return this._snapshot; + }; + IndentationTrackingWalker.prototype.indentationNodeContextPool = function () { + return this._indentationNodeContextPool; + }; + IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) { + this._lastTriviaWasNewLine = true; + this.forceRecomputeIndentationOfParent(tokenStart, true); + }; + IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) { + this._lastTriviaWasNewLine = false; + this.forceRecomputeIndentationOfParent(tokenStart, false); + }; + IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + throw TypeScript.Errors.abstract(); + }; + IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) { + if (this._lastTriviaWasNewLine) { + var indentationAmount = this.getTokenIndentationAmount(token); + var commentIndentationAmount = this.getCommentIndentationAmount(token); + this.indentToken(token, indentationAmount, commentIndentationAmount); + } + }; + IndentationTrackingWalker.prototype.visitToken = function (token) { + var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth()); + if (tokenSpan.intersectsWithTextSpan(this._textSpan)) { + this.visitTokenInSpan(token); + var trivia = token.trailingTrivia(); + this._lastTriviaWasNewLine = trivia.hasNewLine() && trivia.syntaxTriviaAt(trivia.count() - 1).kind() == 5 /* NewLineTrivia */; + } + this._position += token.fullWidth(); + }; + IndentationTrackingWalker.prototype.visitNode = function (node) { + var nodeSpan = new TypeScript.TextSpan(this._position, TypeScript.fullWidth(node)); + if (nodeSpan.intersectsWithTextSpan(this._textSpan)) { + var indentation = this.getNodeIndentation(node); + var currentParent = this._parent; + this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); + TypeScript.visitNodeOrToken(this, node); + this._indentationNodeContextPool.releaseNode(this._parent); + this._parent = currentParent; + } + else { + this._position += TypeScript.fullWidth(node); + } + }; + IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) { + if (TypeScript.firstToken(this._parent.node()) === token || token.kind() === 70 /* OpenBraceToken */ || token.kind() === 71 /* CloseBraceToken */ || token.kind() === 74 /* OpenBracketToken */ || token.kind() === 75 /* CloseBracketToken */ || (token.kind() === 42 /* WhileKeyword */ && this._parent.node().kind() == 161 /* DoStatement */)) { + return this._parent.indentationAmount(); + } + return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); + }; + IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) { + if (token.kind() === 71 /* CloseBraceToken */ || token.kind() === 75 /* CloseBracketToken */) { + return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); + } + return this._parent.indentationAmount(); + }; + IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) { + var parent = this._parent; + var parentIndentationAmount; + if (this._textSpan.containsPosition(parent.start())) { + parentIndentationAmount = parent.indentationAmount(); + } + else { + if (parent.kind() === 146 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) { + parent = this._parent.parent(); } + var line = this._snapshot.getLineFromPosition(parent.start()).getText(); + var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line); + parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options); } - currentNode = parent; - currentElement = parent.element(); - parent = parent.parent(); - } - - return indentation; - }; - - Indenter.belongsToBracket = function (sourceText, token, position) { - switch (token.token().kind()) { - case 70 /* OpenBraceToken */: - case 71 /* CloseBraceToken */: - case 72 /* OpenParenToken */: - case 73 /* CloseParenToken */: - case 74 /* OpenBracketToken */: - case 75 /* CloseBracketToken */: - if (position < token.start()) { - var text = sourceText.getText(position, token.start()); - for (var i = 0; i < text.length; i++) { - if (TypeScript.CharacterInfo.isLineTerminator(text.charCodeAt(i))) { - return false; - } + var parentIndentationAmountDelta = parent.childIndentationAmountDelta(); + var indentationAmount; + var indentationAmountDelta; + var parentNode = parent.node(); + switch (node.kind()) { + default: + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + indentationAmountDelta = 0; + break; + case 131 /* ClassDeclaration */: + case 130 /* ModuleDeclaration */: + case 122 /* ObjectType */: + case 132 /* EnumDeclaration */: + case 151 /* SwitchStatement */: + case 215 /* ObjectLiteralExpression */: + case 137 /* ConstructorDeclaration */: + case 129 /* FunctionDeclaration */: + case 222 /* FunctionExpression */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 138 /* IndexMemberDeclaration */: + case 236 /* CatchClause */: + case 214 /* ArrayLiteralExpression */: + case 124 /* ArrayType */: + case 221 /* ElementAccessExpression */: + case 144 /* IndexSignature */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 163 /* WithStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 150 /* ReturnStatement */: + case 157 /* ThrowStatement */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 224 /* VariableDeclaration */: + case 134 /* ExportAssignment */: + case 213 /* InvocationExpression */: + case 216 /* ObjectCreationExpression */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + indentationAmountDelta = this.options.indentSpaces; + break; + case 147 /* IfStatement */: + if (parent.kind() === 235 /* ElseClause */ && !TypeScript.SyntaxUtilities.isLastTokenOnLine(parentNode.elseKeyword, this._text)) { + indentationAmount = parentIndentationAmount; + } + else { + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + } + indentationAmountDelta = this.options.indentSpaces; + break; + case 235 /* ElseClause */: + indentationAmount = parentIndentationAmount; + indentationAmountDelta = this.options.indentSpaces; + break; + case 146 /* Block */: + if (this.shouldIndentBlockInParent(parent)) { + indentationAmount = parentIndentationAmount + parentIndentationAmountDelta; + } + else { + indentationAmount = parentIndentationAmount; + } + indentationAmountDelta = this.options.indentSpaces; + break; + } + if (parentNode) { + if (!newLineInsertedByFormatting) { + var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start()); + var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + TypeScript.leadingTriviaWidth(node)); + if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) { + indentationAmount = parentIndentationAmount; + indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta); } } - return true; - } - return false; - }; - - Indenter.isInContainerNode = function (parent, element) { - switch (parent.kind()) { - case 131 /* ClassDeclaration */: - case 130 /* ModuleDeclaration */: - case 132 /* EnumDeclaration */: - case 133 /* ImportDeclaration */: - case 146 /* Block */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - return true; - - case 122 /* ObjectType */: - return true; - - case 128 /* InterfaceDeclaration */: - return element.kind() !== 122 /* ObjectType */; - - case 129 /* FunctionDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 154 /* ForStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 163 /* WithStatement */: - case 147 /* IfStatement */: - case 235 /* ElseClause */: - return element.kind() !== 146 /* Block */; - - case 159 /* TryStatement */: - return false; - default: - return parent.isNode() && parent.isStatement(); - } - }; - - Indenter.getCustomListIndentation = function (list, element) { - switch (list.kind()) { - case 2 /* SeparatedList */: - for (var i = 0, n = list.childCount(); i < n; i++) { - var child = list.childAt(i); - if (child !== null && child === element) - return Indenter.getListItemIndentation(list, i - 1); - } - break; - - case 226 /* ArgumentList */: - var argumentList = list; - var _arguments = argumentList.arguments; - if (_arguments !== null && argumentList.closeParenToken === element) { - return Indenter.getListItemIndentation(_arguments, _arguments.childCount() - 1); - } - break; - - case 227 /* ParameterList */: - var parameterList = list; - var parameters = parameterList.parameters; - if (parameters !== null && parameterList.closeParenToken === element) { - return Indenter.getListItemIndentation(parameters, parameters.childCount() - 1); - } - break; - - case 228 /* TypeArgumentList */: - var typeArgumentList = list; - var typeArguments = typeArgumentList.typeArguments; - if (typeArguments !== null && typeArgumentList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeArguments, typeArguments.childCount() - 1); - } - break; - - case 229 /* TypeParameterList */: - var typeParameterList = list; - var typeParameters = typeParameterList.typeParameters; - if (typeParameters !== null && typeParameterList.greaterThanToken === element) { - return Indenter.getListItemIndentation(typeParameters, typeParameters.childCount() - 1); - } - break; - } - return -1; - }; - - Indenter.getListItemIndentation = function (list, elementIndex) { - for (var i = elementIndex; i > 0; i--) { - var child = list.childAt(i); - var previousChild = list.childAt(i - 1); - if ((child !== null && child.leadingTrivia().hasNewLine()) || (previousChild !== null && previousChild.trailingTrivia().hasNewLine())) { - return child.leadingTriviaWidth(); } - } - return -1; - }; - return Indenter; - })(); - Services.Indenter = Indenter; + return { + indentationAmount: indentationAmount, + indentationAmountDelta: indentationAmountDelta + }; + }; + IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) { + switch (parent.kind()) { + case 120 /* SourceUnit */: + case 130 /* ModuleDeclaration */: + case 146 /* Block */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + return true; + default: + return false; + } + }; + IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) { + var parent = this._parent; + if (parent.fullStart() === tokenStart) { + this._parent = parent.parent(); + var indentation = this.getNodeIndentation(parent.node(), newLineAdded); + parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta); + this._parent = parent; + } + }; + return IndentationTrackingWalker; + })(TypeScript.SyntaxWalker); + Formatting.IndentationTrackingWalker = IndentationTrackingWalker; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { (function (Services) { - (function (Breakpoints) { - function createBreakpointSpanInfo(parentElement) { - var childElements = []; - for (var _i = 0; _i < (arguments.length - 1); _i++) { - childElements[_i] = arguments[_i + 1]; - } - if (!parentElement) { - return null; - } - - if (childElements.length == 0) { - return new Services.SpanInfo(parentElement.start(), parentElement.end()); + (function (Formatting) { + var MultipleTokenIndenter = (function (_super) { + __extends(MultipleTokenIndenter, _super); + function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); + this._edits = []; } - - var start; - var end; - for (var i = 0; i < childElements.length; i++) { - var element = childElements[i]; - if (element) { - if (start == undefined) { - start = parentElement.childStart(element); - } - end = parentElement.childEnd(element); + MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + if (token.fullWidth() === 0) { + return; } - } - - return new Services.SpanInfo(start, end); - } - - function createBreakpointSpanInfoWithLimChar(startElement, limChar) { - return new Services.SpanInfo(startElement.start(), limChar); - } - - var BreakpointResolver = (function () { - function BreakpointResolver(posLine, lineMap) { - this.posLine = posLine; - this.lineMap = lineMap; - } - BreakpointResolver.prototype.breakpointSpanOfToken = function (positionedToken) { - switch (positionedToken.token().tokenKind) { - case 70 /* OpenBraceToken */: - return this.breakpointSpanOfOpenBrace(positionedToken); - - case 71 /* CloseBraceToken */: - return this.breakpointSpanOfCloseBrace(positionedToken); - - case 79 /* CommaToken */: - return this.breakpointSpanOfComma(positionedToken); - - case 78 /* SemicolonToken */: - case 10 /* EndOfFileToken */: - return this.breakpointSpanIfStartsOnSameLine(positionedToken.previousToken()); - - case 73 /* CloseParenToken */: - return this.breakpointSpanOfCloseParen(positionedToken); - - case 22 /* DoKeyword */: - var parentElement = positionedToken.parent(); - if (parentElement && parentElement.kind() == 161 /* DoStatement */) { - return this.breakpointSpanIfStartsOnSameLine(positionedToken.nextToken()); - } - break; + if (this.parent().hasSkippedOrMissingTokenChild()) { + return; } - - return this.breakpointSpanOfContainingNode(positionedToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfOpenBrace = function (openBraceToken) { - var container = openBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container && container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfFirstStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(container)); - } else { - return this.breakpointSpanOf(container); - } - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstEnumElement(container); - } else { - return this.breakpointSpanOf(container); - } - - case 147 /* IfStatement */: - case 155 /* ForInStatement */: - case 158 /* WhileStatement */: - case 236 /* CatchClause */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(container); - } - - case 161 /* DoStatement */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 154 /* ForStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - } else { - return this.breakpointSpanOf(openBraceToken.previousToken()); - } - - case 235 /* ElseClause */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 237 /* FinallyClause */: - return this.breakpointSpanOfFirstStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - if (this.posLine != this.lineMap.getLineNumberFromPosition(container.start())) { - return this.breakpointSpanOfFirstStatementOfFirstCaseClause(container); - } else { - return this.breakpointSpanOf(container); - } - } + var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token)); + if (!this.textSpan().containsTextSpan(tokenSpan)) { + return; } - - return null; + var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options); + var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options); + this.recordIndentationEditsForToken(token, indentationString, commentIndentationString); }; - - BreakpointResolver.prototype.breakpointSpanOfCloseBrace = function (closeBraceToken) { - var container = closeBraceToken.containingNode(); - if (container) { - var originalContainer = container; - if (container.kind() == 146 /* Block */) { - container = container.containingNode(); - if (!container) { - container = originalContainer; - } - } - - switch (container.kind()) { - case 146 /* Block */: - if (!this.canHaveBreakpointInBlock(container)) { - return null; - } - return this.breakpointSpanOfLastStatementInBlock(container); - break; - - case 130 /* ModuleDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - var moduleSyntax = container.node(); - if (moduleSyntax.moduleElements && moduleSyntax.moduleElements.childCount() > 0) { - return createBreakpointSpanInfo(closeBraceToken); - } else { - return null; - } - - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 132 /* EnumDeclaration */: - if (!this.canHaveBreakpointInDeclaration(container)) { - return null; - } - return createBreakpointSpanInfo(closeBraceToken); - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 218 /* ParenthesizedArrowFunctionExpression */: - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfLastStatementInBlock(originalContainer); - - case 151 /* SwitchStatement */: - return this.breakpointSpanOfLastStatementOfLastCaseClause(container); - } - } - - return null; + MultipleTokenIndenter.prototype.edits = function () { + return this._edits; }; - - BreakpointResolver.prototype.breakpointSpanOfComma = function (commaToken) { - var commaParent = commaToken.parent(); - if (commaParent && commaParent.element().isSeparatedList()) { - var grandParent = commaParent.parent(); - if (grandParent) { - switch (grandParent.kind()) { - case 224 /* VariableDeclaration */: - case 132 /* EnumDeclaration */: - case 227 /* ParameterList */: - var index = commaParent.childIndex(commaToken.token()); - - if (index > 0) { - var child = commaParent.childAt(index - 1); - return this.breakpointSpanOf(child); + MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) { + this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith)); + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) { + var position = this.position(); + var indentNextTokenOrTrivia = true; + var leadingWhiteSpace = ""; + var triviaList = token.leadingTrivia(); + if (triviaList) { + for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) { + var trivia = triviaList.syntaxTriviaAt(i); + if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) { + continue; + } + switch (trivia.kind()) { + case 6 /* MultiLineCommentTrivia */: + this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia); + indentNextTokenOrTrivia = false; + leadingWhiteSpace = ""; + break; + case 7 /* SingleLineCommentTrivia */: + case 8 /* SkippedTokenTrivia */: + if (indentNextTokenOrTrivia) { + this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString); + indentNextTokenOrTrivia = false; } - - if (grandParent.kind() == 132 /* EnumDeclaration */) { - return null; + break; + case 4 /* WhitespaceTrivia */: + var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1); + var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString; + if (indentNextTokenOrTrivia) { + if (!(nextTrivia && nextTrivia.isNewLine())) { + this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString); + } + indentNextTokenOrTrivia = false; } + leadingWhiteSpace += trivia.fullText(); + break; + case 5 /* NewLineTrivia */: + indentNextTokenOrTrivia = true; + leadingWhiteSpace = ""; break; + default: + throw TypeScript.Errors.invalidOperation(); } } } - - return this.breakpointSpanOfContainingNode(commaToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfCloseParen = function (closeParenToken) { - var closeParenParent = closeParenToken.parent(); - if (closeParenParent) { - switch (closeParenParent.kind()) { - case 154 /* ForStatement */: - case 227 /* ParameterList */: - return this.breakpointSpanOf(closeParenToken.previousToken()); + if (token.kind() !== 10 /* EndOfFileToken */ && indentNextTokenOrTrivia) { + if (indentationString.length > 0) { + this.recordEdit(position, 0, indentationString); } } - - return this.breakpointSpanOfContainingNode(closeParenToken); }; - - BreakpointResolver.prototype.canHaveBreakpointInBlock = function (blockNode) { - if (!blockNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(blockNode)) { - return false; + MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) { + if (indentationString.length > 0) { + this.recordEdit(fullStart, 0, indentationString); } - - var blockSyntax = blockNode.node(); - return blockSyntax.statements && blockSyntax.statements.childCount() != 0; }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; - } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; - } - - var firstStatement = statementsNode.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - return null; - } else { - return this.breakpointSpanOf(firstStatement); + MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) { + var text = trivia.fullText(); + if (indentationString === text) { + return; } + this.recordEdit(fullStart, text.length, indentationString); }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementInBlock = function (blockNode) { - if (!blockNode) { - return null; + MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) { + var position = fullStart; + var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); + if (segments.length <= 1) { + if (!firstLineAlreadyIndented) { + this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); + } + return; } - - var blockSyntax = blockNode.node(); - var statementsNode = blockNode.getPositionedChild(blockSyntax.statements); - if (!statementsNode || statementsNode.childCount() == 0) { - return null; + var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options); + var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options); + var startIndex = 0; + if (firstLineAlreadyIndented) { + startIndex = 1; + position += segments[0].length; } - - var lastStatement = statementsNode.childAt(statementsNode.childCount() - 1); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); + for (var i = startIndex; i < segments.length; i++) { + var segment = segments[i]; + this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment); + position += segment.length; } }; - - BreakpointResolver.prototype.breakpointSpanOfFirstChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; + MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) { + var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); + var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); + var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment; + var finalColumns = indentationColumns + deltaFromFirstSegment; + if (finalColumns < 0) { + finalColumns = 0; } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; + var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options); + if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { + return; } - - var firstStatement = positionedList.childAt(0); - if (firstStatement && firstStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(firstStatement)) { - return this.breakpointSpanOfFirstStatementInBlock(firstStatement); - } - - return null; - } else { - return this.breakpointSpanOf(firstStatement); + if (indentationString === segment.substring(0, firstNonWhitespacePosition)) { + return; } + this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString); }; - - BreakpointResolver.prototype.breakpointSpanOfLastChildOfSyntaxList = function (positionedList) { - if (!positionedList) { - return null; - } - - var listSyntax = positionedList.list(); - if (listSyntax.childCount() == 0) { - return null; + return MultipleTokenIndenter; + })(Formatting.IndentationTrackingWalker); + Formatting.MultipleTokenIndenter = MultipleTokenIndenter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var SingleTokenIndenter = (function (_super) { + __extends(SingleTokenIndenter, _super); + function SingleTokenIndenter(indentationPosition, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this, new TypeScript.TextSpan(indentationPosition, 1), sourceUnit, snapshot, indentFirstToken, options); + this.indentationAmount = null; + this.indentationPosition = indentationPosition; + } + SingleTokenIndenter.getIndentationAmount = function (position, sourceUnit, snapshot, options) { + var walker = new SingleTokenIndenter(position, sourceUnit, snapshot, true, options); + TypeScript.visitNodeOrToken(walker, sourceUnit); + return walker.indentationAmount; + }; + SingleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + if (token.fullWidth() === 0 || (this.indentationPosition - this.position() < token.leadingTriviaWidth())) { + this.indentationAmount = commentIndentationAmount; } - var lastStatement = positionedList.childAt(0); - if (lastStatement && lastStatement.kind() == 146 /* Block */) { - if (this.canHaveBreakpointInBlock(lastStatement)) { - return this.breakpointSpanOfLastStatementInBlock(lastStatement); - } - return null; - } else { - return this.breakpointSpanOf(lastStatement); + else { + this.indentationAmount = indentationAmount; } }; - - BreakpointResolver.prototype.breakpointSpanOfNode = function (positionedNode) { - var node = positionedNode.node(); - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 222 /* FunctionExpression */: - return this.breakpointSpanOfDeclarationWithElements(positionedNode); - - case 225 /* VariableDeclarator */: - return this.breakpointSpanOfVariableDeclarator(positionedNode); - - case 224 /* VariableDeclaration */: - return this.breakpointSpanOfVariableDeclaration(positionedNode); - - case 148 /* VariableStatement */: - return this.breakpointSpanOfVariableStatement(positionedNode); - - case 242 /* Parameter */: - return this.breakpointSpanOfParameter(positionedNode); - - case 136 /* MemberVariableDeclaration */: - return this.breakpointSpanOfMemberVariableDeclaration(positionedNode); - - case 133 /* ImportDeclaration */: - return this.breakpointSpanOfImportDeclaration(positionedNode); - - case 132 /* EnumDeclaration */: - return this.breakpointSpanOfEnumDeclaration(positionedNode); - - case 243 /* EnumElement */: - return this.breakpointSpanOfEnumElement(positionedNode); - - case 147 /* IfStatement */: - return this.breakpointSpanOfIfStatement(positionedNode); - case 235 /* ElseClause */: - return this.breakpointSpanOfElseClause(positionedNode); - case 155 /* ForInStatement */: - return this.breakpointSpanOfForInStatement(positionedNode); - case 154 /* ForStatement */: - return this.breakpointSpanOfForStatement(positionedNode); - case 158 /* WhileStatement */: - return this.breakpointSpanOfWhileStatement(positionedNode); - case 161 /* DoStatement */: - return this.breakpointSpanOfDoStatement(positionedNode); - case 151 /* SwitchStatement */: - return this.breakpointSpanOfSwitchStatement(positionedNode); - case 233 /* CaseSwitchClause */: - return this.breakpointSpanOfCaseSwitchClause(positionedNode); - case 234 /* DefaultSwitchClause */: - return this.breakpointSpanOfDefaultSwitchClause(positionedNode); - case 163 /* WithStatement */: - return this.breakpointSpanOfWithStatement(positionedNode); - case 159 /* TryStatement */: - return this.breakpointSpanOfTryStatement(positionedNode); - case 236 /* CatchClause */: - return this.breakpointSpanOfCatchClause(positionedNode); - case 237 /* FinallyClause */: - return this.breakpointSpanOfFinallyClause(positionedNode); - - case 218 /* ParenthesizedArrowFunctionExpression */: - return this.breakpointSpanOfParenthesizedArrowFunctionExpression(positionedNode); - - case 219 /* SimpleArrowFunctionExpression */: - return this.breakpointSpanOfSimpleArrowFunctionExpression(positionedNode); - - default: - if (node.isStatement()) { - return this.breakpointSpanOfStatement(positionedNode); - } else { - return this.breakpointOfExpression(positionedNode); - } - } + return SingleTokenIndenter; + })(Formatting.IndentationTrackingWalker); + Formatting.SingleTokenIndenter = SingleTokenIndenter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Formatter = (function (_super) { + __extends(Formatter, _super); + function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) { + _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); + this.previousTokenSpan = null; + this.previousTokenParent = null; + this.scriptHasErrors = false; + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + this.rulesProvider = rulesProvider; + this.formattingRequestKind = formattingRequestKind; + this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind); + } + Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) { + var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind); + TypeScript.visitNodeOrToken(walker, sourceUnit); + return walker.edits(); }; - - BreakpointResolver.prototype.isExpressionOfArrowExpressions = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent) { - if (expressionParent.kind() == 218 /* ParenthesizedArrowFunctionExpression */) { - var expression = expressionNode.element(); - var parenthesizedArrowExpression = expressionParent.element(); - var expressionOfParenthesizedArrowExpression = expressionParent.getPositionedChild(parenthesizedArrowExpression.expression); - return expressionOfParenthesizedArrowExpression && expressionOfParenthesizedArrowExpression.element() == expression; - } else if (expressionParent.kind() == 219 /* SimpleArrowFunctionExpression */) { - var expression = expressionNode.element(); - var simpleArrowExpression = expressionParent.element(); - var expressionOfSimpleArrowExpression = expressionParent.getPositionedChild(simpleArrowExpression.expression); - return expressionOfSimpleArrowExpression && expressionOfSimpleArrowExpression.element() == expression; - } else if (expressionParent.kind() == 173 /* CommaExpression */) { - return this.isExpressionOfArrowExpressions(expressionParent); + Formatter.prototype.visitTokenInSpan = function (token) { + if (token.fullWidth() !== 0) { + var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token)); + if (this.textSpan().containsTextSpan(tokenSpan)) { + this.processToken(token); } } - return false; - }; - - BreakpointResolver.prototype.isInitializerOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; - } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var initializer = expressionParent.getPositionedChild(forStatement.initializer); - return initializer && initializer.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isInitializerOfForStatement(expressionParent); - } - - return false; + _super.prototype.visitTokenInSpan.call(this, token); }; - - BreakpointResolver.prototype.isConditionOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; + Formatter.prototype.processToken = function (token) { + var position = this.position(); + if (token.leadingTriviaWidth() !== 0) { + this.processTrivia(token.leadingTrivia(), position); + position += token.leadingTriviaWidth(); } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var condition = expressionParent.getPositionedChild(forStatement.condition); - return condition && condition.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isConditionOfForStatement(expressionParent); + var currentTokenSpan = new Formatting.TokenSpan(token.kind(), position, TypeScript.width(token)); + if (!this.parent().hasSkippedOrMissingTokenChild()) { + if (this.previousTokenSpan) { + this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); + } + else { + this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan)); + } } - - return false; - }; - - BreakpointResolver.prototype.isIncrememtorOfForStatement = function (expressionNode) { - if (!expressionNode) { - return false; + this.previousTokenSpan = currentTokenSpan; + if (this.previousTokenParent) { + this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); } - - var expressionParent = expressionNode.parent(); - if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { - var expression = expressionNode.element(); - var forStatement = expressionParent.element(); - var incrementor = expressionParent.getPositionedChild(forStatement.incrementor); - return incrementor && incrementor.element() == expression; - } else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { - return this.isIncrememtorOfForStatement(expressionParent); + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + position += TypeScript.width(token); + if (token.trailingTriviaWidth() !== 0) { + this.processTrivia(token.trailingTrivia(), position); } - - return false; - }; - - BreakpointResolver.prototype.breakpointOfLeftOfCommaExpression = function (commaExpressionNode) { - var commaExpression = commaExpressionNode.node(); - return this.breakpointSpanOf(commaExpressionNode.getPositionedChild(commaExpression.left)); }; - - BreakpointResolver.prototype.breakpointOfExpression = function (expressionNode) { - if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); + Formatter.prototype.processTrivia = function (triviaList, fullStart) { + var position = fullStart; + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isComment() || trivia.isSkippedToken()) { + var currentTokenSpan = new Formatting.TokenSpan(trivia.kind(), position, trivia.fullWidth()); + if (this.textSpan().containsTextSpan(currentTokenSpan)) { + if (trivia.isComment() && this.previousTokenSpan) { + this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); + } + else { + var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan()); + this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan)); + } + this.previousTokenSpan = currentTokenSpan; + if (this.previousTokenParent) { + this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); + } + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + } } - return createBreakpointSpanInfo(expressionNode); + position += trivia.fullWidth(); } - - if (this.isExpressionOfArrowExpressions(expressionNode)) { - if (expressionNode.kind() == 173 /* CommaExpression */) { - return this.breakpointOfLeftOfCommaExpression(expressionNode); - } - return createBreakpointSpanInfo(expressionNode); + }; + Formatter.prototype.findCommonParents = function (parent1, parent2) { + var shallowParent; + var shallowParentDepth; + var deepParent; + var deepParentDepth; + if (parent1.depth() < parent2.depth()) { + shallowParent = parent1; + shallowParentDepth = parent1.depth(); + deepParent = parent2; + deepParentDepth = parent2.depth(); } - - if (expressionNode.kind() == 134 /* ExportAssignment */) { - var exportAssignmentSyntax = expressionNode.node(); - return createBreakpointSpanInfo(expressionNode, exportAssignmentSyntax.exportKeyword, exportAssignmentSyntax.equalsToken, exportAssignmentSyntax.identifier); + else { + shallowParent = parent2; + shallowParentDepth = parent2.depth(); + deepParent = parent1; + deepParentDepth = parent1.depth(); } - - return this.breakpointSpanOfContainingNode(expressionNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfStatement = function (statementNode) { - var statement = statementNode.node(); - if (statement.kind() == 156 /* EmptyStatement */) { - return null; + TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0"); + TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0"); + TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth"); + while (deepParentDepth > shallowParentDepth) { + deepParent = deepParent.parent(); + deepParentDepth--; } - - var containingNode = statementNode.containingNode(); - if (containingNode && containingNode.node().isStatement()) { - var useNodeForBreakpoint = false; - switch (containingNode.kind()) { - case 130 /* ModuleDeclaration */: - case 131 /* ClassDeclaration */: - case 129 /* FunctionDeclaration */: - case 137 /* ConstructorDeclaration */: - case 135 /* MemberFunctionDeclaration */: - case 139 /* GetAccessor */: - case 140 /* SetAccessor */: - case 146 /* Block */: - - case 147 /* IfStatement */: - case 235 /* ElseClause */: - case 155 /* ForInStatement */: - case 154 /* ForStatement */: - case 158 /* WhileStatement */: - case 161 /* DoStatement */: - case 151 /* SwitchStatement */: - case 233 /* CaseSwitchClause */: - case 234 /* DefaultSwitchClause */: - case 163 /* WithStatement */: - case 159 /* TryStatement */: - case 236 /* CatchClause */: - case 237 /* FinallyClause */: - case 146 /* Block */: - useNodeForBreakpoint = true; - } - - if (!useNodeForBreakpoint) { - return this.breakpointSpanOfContainingNode(statementNode); + TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth"); + while (deepParent.node() && shallowParent.node()) { + if (deepParent.node() === shallowParent.node()) { + return deepParent; } + deepParent = deepParent.parent(); + shallowParent = shallowParent.parent(); } - - switch (statement.kind()) { - case 149 /* ExpressionStatement */: - var expressionSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(expressionSyntax.expression)); - - case 150 /* ReturnStatement */: - var returnStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, returnStatementSyntax.returnKeyword, returnStatementSyntax.expression); - - case 157 /* ThrowStatement */: - var throwStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, throwStatementSyntax.throwKeyword, throwStatementSyntax.expression); - - case 152 /* BreakStatement */: - var breakStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, breakStatementSyntax.breakKeyword, breakStatementSyntax.identifier); - - case 153 /* ContinueStatement */: - var continueStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode, continueStatementSyntax.continueKeyword, continueStatementSyntax.identifier); - - case 162 /* DebuggerStatement */: - var debuggerStatementSyntax = statement; - return createBreakpointSpanInfo(statementNode.getPositionedChild(debuggerStatementSyntax.debuggerKeyword)); - - case 160 /* LabeledStatement */: - var labeledStatementSyntax = statement; - return this.breakpointSpanOf(statementNode.getPositionedChild(labeledStatementSyntax.statement)); - } - - return null; + throw TypeScript.Errors.invalidOperation(); }; - - BreakpointResolver.prototype.getSyntaxListOfDeclarationWithElements = function (positionedNode) { - var node = positionedNode.node(); - var elementsList; - var block; - switch (node.kind()) { - case 130 /* ModuleDeclaration */: - elementsList = node.moduleElements; - break; - - case 131 /* ClassDeclaration */: - elementsList = node.classElements; - break; - - case 129 /* FunctionDeclaration */: - block = node.block; - break; - - case 137 /* ConstructorDeclaration */: - block = node.block; - break; - - case 135 /* MemberFunctionDeclaration */: - block = node.block; - break; - - case 139 /* GetAccessor */: - block = node.block; - break; - - case 140 /* SetAccessor */: - block = node.block; - break; - - case 222 /* FunctionExpression */: - block = node.block; - break; - - case 218 /* ParenthesizedArrowFunctionExpression */: - block = node.block; - break; - - case 219 /* SimpleArrowFunctionExpression */: - block = node.block; - break; - - default: - throw TypeScript.Errors.argument('positionNode', 'unknown node kind in getSyntaxListOfDeclarationWithElements'); + Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) { + var token1Line = this.getLineNumber(t1); + var token2Line = this.getLineNumber(t2); + var commonParent = this.findCommonParents(t1Parent, t2Parent); + this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent); + var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext); + if (rule != null) { + this.RecordRuleEdits(rule, t1, t2); + if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) { + this.forceSkipIndentingNextToken(t2.start()); + } + if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) { + this.forceIndentNextToken(t2.start()); + } } - - var parentElement = positionedNode; - if (block) { - parentElement = positionedNode.getPositionedChild(block); - elementsList = block.statements; + if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) { + this.trimWhitespaceInLineRange(token1Line, token2Line, t1); } - - return parentElement.getPositionedChild(elementsList); }; - - BreakpointResolver.prototype.canHaveBreakpointInDeclaration = function (positionedNode) { - return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); + Formatter.prototype.getLineNumber = function (span) { + return this.snapshot().getLineNumberFromPosition(span.start()); }; - - BreakpointResolver.prototype.breakpointSpanOfDeclarationWithElements = function (positionedNode) { - if (!this.canHaveBreakpointInDeclaration(positionedNode)) { - return null; + Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) { + for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) { + var line = this.snapshot().getLineFromLineNumber(lineNumber); + this.trimWhitespace(line, token); } - - var node = positionedNode.node(); - var moduleSyntax = positionedNode.node(); - if ((node.isModuleElement() && positionedNode.containingNode().kind() != 120 /* SourceUnit */) || node.isClassElement() || (moduleSyntax.kind() == 130 /* ModuleDeclaration */ && moduleSyntax.name && moduleSyntax.name.kind() == 121 /* QualifiedName */)) { - return createBreakpointSpanInfo(positionedNode); - } else { - return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(positionedNode)); + }; + Formatter.prototype.trimWhitespace = function (line, token) { + if (token && (token.kind == 6 /* MultiLineCommentTrivia */ || token.kind == 7 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition()) + return; + var text = line.getText(); + var index = 0; + for (index = text.length - 1; index >= 0; --index) { + if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) { + break; + } + } + ++index; + if (index < text.length) { + this.recordEdit(line.startPosition() + index, line.length() - index, ""); } }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclarator = function (varDeclaratorNode) { - if (!varDeclaratorNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclaratorNode)) { - return false; + Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) { + if (rule.Operation.Action == 0 /* Ignore */) { + return; + } + var betweenSpan; + switch (rule.Operation.Action) { + case 3 /* Delete */: + { + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + if (betweenSpan.length() > 0) { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), ""); + return; + } + } + break; + case 2 /* NewLine */: + { + if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { + return; + } + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + var doEdit = false; + var betweenText = this.snapshot().getText(betweenSpan); + var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter); + if (lineFeedLoc < 0) { + doEdit = true; + } + else { + lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1); + if (lineFeedLoc >= 0) { + doEdit = true; + } + } + if (doEdit) { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter); + return; + } + } + break; + case 1 /* Space */: + { + if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { + return; + } + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), " "); + return; + } + } + break; } - - var varDeclaratorSyntax = varDeclaratorNode.node(); - return !!varDeclaratorSyntax.equalsValueClause; }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclarator = function (varDeclaratorNode) { - if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return null; + return Formatter; + })(Formatting.MultipleTokenIndenter); + Formatting.Formatter = Formatter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var BloomFilter = (function () { + function BloomFilter(expectedCount) { + var m = Math.max(1, BloomFilter.computeM(expectedCount)); + var k = Math.max(1, BloomFilter.computeK(expectedCount)); + ; + var sizeInEvenBytes = (m + 7) & ~7; + this.bitArray = []; + for (var i = 0, len = sizeInEvenBytes; i < len; i++) { + this.bitArray[i] = false; + } + this.hashFunctionCount = k; + } + BloomFilter.computeM = function (expectedCount) { + var p = BloomFilter.falsePositiveProbability; + var n = expectedCount; + var numerator = n * Math.log(p); + var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); + return Math.ceil(numerator / denominator); + }; + BloomFilter.computeK = function (expectedCount) { + var n = expectedCount; + var m = BloomFilter.computeM(expectedCount); + var temp = Math.log(2.0) * m / n; + return Math.round(temp); + }; + BloomFilter.prototype.computeHash = function (key, seed) { + return TypeScript.Hash.computeMurmur2StringHashCode(key, seed); + }; + BloomFilter.prototype.addKeys = function (keys) { + for (var name in keys) { + if (ts.lookUp(keys, name)) { + this.add(name); + } + } + }; + BloomFilter.prototype.add = function (value) { + for (var i = 0; i < this.hashFunctionCount; i++) { + var hash = this.computeHash(value, i); + hash = hash % this.bitArray.length; + this.bitArray[Math.abs(hash)] = true; + } + }; + BloomFilter.prototype.probablyContains = function (value) { + for (var i = 0; i < this.hashFunctionCount; i++) { + var hash = this.computeHash(value, i); + hash = hash % this.bitArray.length; + if (!this.bitArray[Math.abs(hash)]) { + return false; + } + } + return true; + }; + BloomFilter.prototype.isEquivalent = function (filter) { + return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount; + }; + BloomFilter.isEquivalent = function (array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + }; + BloomFilter.falsePositiveProbability = 0.0001; + return BloomFilter; + })(); + TypeScript.BloomFilter = BloomFilter; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var NullLogger = (function () { + function NullLogger() { + } + NullLogger.prototype.information = function () { + return false; + }; + NullLogger.prototype.debug = function () { + return false; + }; + NullLogger.prototype.warning = function () { + return false; + }; + NullLogger.prototype.error = function () { + return false; + }; + NullLogger.prototype.fatal = function () { + return false; + }; + NullLogger.prototype.log = function (s) { + }; + return NullLogger; + })(); + TypeScript.NullLogger = NullLogger; + function timeFunction(logger, funcDescription, func) { + var start = (new Date()).getTime(); + var result = func(); + var end = (new Date()).getTime(); + if (logger.information()) { + logger.log(funcDescription + " completed in " + (end - start) + " msec"); + } + return result; + } + TypeScript.timeFunction = timeFunction; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var proto = "__proto__"; + var BlockIntrinsics = (function () { + function BlockIntrinsics() { + this.prototype = undefined; + this.toString = undefined; + this.toLocaleString = undefined; + this.valueOf = undefined; + this.hasOwnProperty = undefined; + this.propertyIsEnumerable = undefined; + this.isPrototypeOf = undefined; + this["constructor"] = undefined; + this[proto] = null; + this[proto] = undefined; + } + return BlockIntrinsics; + })(); + function createIntrinsicsObject() { + return new BlockIntrinsics(); + } + TypeScript.createIntrinsicsObject = createIntrinsicsObject; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Comment = (function () { + function Comment(_trivia, endsLine, _start, _end) { + this._trivia = _trivia; + this.endsLine = endsLine; + this._start = _start; + this._end = _end; + } + Comment.prototype.start = function () { + return this._start; + }; + Comment.prototype.end = function () { + return this._end; + }; + Comment.prototype.fullText = function () { + return this._trivia.fullText(); + }; + Comment.prototype.kind = function () { + return this._trivia.kind(); + }; + Comment.prototype.structuralEquals = function (ast, includingPosition) { + if (includingPosition) { + if (this.start() !== ast.start() || this.end() !== ast.end()) { + return false; + } + } + return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine; + }; + return Comment; + })(); + TypeScript.Comment = Comment; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function walkListChildren(preAst, walker) { + for (var i = 0, n = preAst.length; i < n; i++) { + walker.walk(preAst[i]); + } + } + function walkThrowStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkPrefixUnaryExpressionChildren(preAst, walker) { + walker.walk(preAst.operand); + } + function walkPostfixUnaryExpressionChildren(preAst, walker) { + walker.walk(preAst.operand); + } + function walkDeleteExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkTypeArgumentListChildren(preAst, walker) { + walker.walk(preAst.typeArguments); + } + function walkTypeOfExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkVoidExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkArgumentListChildren(preAst, walker) { + walker.walk(preAst.typeArgumentList); + walker.walk(preAst.arguments); + } + function walkArrayLiteralExpressionChildren(preAst, walker) { + walker.walk(preAst.expressions); + } + function walkSimplePropertyAssignmentChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.expression); + } + function walkFunctionPropertyAssignmentChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkGetAccessorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkSeparatedListChildren(preAst, walker) { + for (var i = 0, n = preAst.length; i < n; i++) { + walker.walk(preAst[i]); + } + } + function walkSetAccessorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkObjectLiteralExpressionChildren(preAst, walker) { + walker.walk(preAst.propertyAssignments); + } + function walkCastExpressionChildren(preAst, walker) { + walker.walk(preAst.type); + walker.walk(preAst.expression); + } + function walkParenthesizedExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkElementAccessExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentExpression); + } + function walkMemberAccessExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.name); + } + function walkQualifiedNameChildren(preAst, walker) { + walker.walk(preAst.left); + walker.walk(preAst.right); + } + function walkBinaryExpressionChildren(preAst, walker) { + walker.walk(preAst.left); + walker.walk(preAst.right); + } + function walkEqualsValueClauseChildren(preAst, walker) { + walker.walk(preAst.value); + } + function walkTypeParameterChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.constraint); + } + function walkTypeParameterListChildren(preAst, walker) { + walker.walk(preAst.typeParameters); + } + function walkGenericTypeChildren(preAst, walker) { + walker.walk(preAst.name); + walker.walk(preAst.typeArgumentList); + } + function walkTypeAnnotationChildren(preAst, walker) { + walker.walk(preAst.type); + } + function walkTypeQueryChildren(preAst, walker) { + walker.walk(preAst.name); + } + function walkInvocationExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentList); + } + function walkObjectCreationExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentList); + } + function walkTrinaryExpressionChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.whenTrue); + walker.walk(preAst.whenFalse); + } + function walkFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkFunctionTypeChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.type); + } + function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + walker.walk(preAst.expression); + } + function walkSimpleArrowFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.parameter); + walker.walk(preAst.block); + walker.walk(preAst.expression); + } + function walkMemberFunctionDeclarationChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkFuncDeclChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkIndexMemberDeclarationChildren(preAst, walker) { + walker.walk(preAst.indexSignature); + } + function walkIndexSignatureChildren(preAst, walker) { + walker.walk(preAst.parameters); + walker.walk(preAst.typeAnnotation); + } + function walkCallSignatureChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.typeAnnotation); + } + function walkConstraintChildren(preAst, walker) { + walker.walk(preAst.typeOrExpression); + } + function walkConstructorDeclarationChildren(preAst, walker) { + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkConstructorTypeChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.type); + } + function walkConstructSignatureChildren(preAst, walker) { + walker.walk(preAst.callSignature); + } + function walkParameterChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.equalsValueClause); + } + function walkParameterListChildren(preAst, walker) { + walker.walk(preAst.parameters); + } + function walkPropertySignatureChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.typeAnnotation); + } + function walkVariableDeclaratorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.equalsValueClause); + } + function walkMemberVariableDeclarationChildren(preAst, walker) { + walker.walk(preAst.variableDeclarator); + } + function walkMethodSignatureChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + } + function walkReturnStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkForStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + walker.walk(preAst.initializer); + walker.walk(preAst.condition); + walker.walk(preAst.incrementor); + walker.walk(preAst.statement); + } + function walkForInStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + walker.walk(preAst.left); + walker.walk(preAst.expression); + walker.walk(preAst.statement); + } + function walkIfStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + walker.walk(preAst.elseClause); + } + function walkElseClauseChildren(preAst, walker) { + walker.walk(preAst.statement); + } + function walkWhileStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkDoStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkBlockChildren(preAst, walker) { + walker.walk(preAst.statements); + } + function walkVariableDeclarationChildren(preAst, walker) { + walker.walk(preAst.variableDeclarators); + } + function walkCaseSwitchClauseChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.statements); + } + function walkDefaultSwitchClauseChildren(preAst, walker) { + walker.walk(preAst.statements); + } + function walkSwitchStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.switchClauses); + } + function walkTryStatementChildren(preAst, walker) { + walker.walk(preAst.block); + walker.walk(preAst.catchClause); + walker.walk(preAst.finallyClause); + } + function walkCatchClauseChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.block); + } + function walkExternalModuleReferenceChildren(preAst, walker) { + walker.walk(preAst.stringLiteral); + } + function walkFinallyClauseChildren(preAst, walker) { + walker.walk(preAst.block); + } + function walkClassDeclChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeParameterList); + walker.walk(preAst.heritageClauses); + walker.walk(preAst.classElements); + } + function walkScriptChildren(preAst, walker) { + walker.walk(preAst.moduleElements); + } + function walkHeritageClauseChildren(preAst, walker) { + walker.walk(preAst.typeNames); + } + function walkInterfaceDeclerationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeParameterList); + walker.walk(preAst.heritageClauses); + walker.walk(preAst.body); + } + function walkObjectTypeChildren(preAst, walker) { + walker.walk(preAst.typeMembers); + } + function walkArrayTypeChildren(preAst, walker) { + walker.walk(preAst.type); + } + function walkModuleDeclarationChildren(preAst, walker) { + walker.walk(preAst.name); + walker.walk(preAst.stringLiteral); + walker.walk(preAst.moduleElements); + } + function walkModuleNameModuleReferenceChildren(preAst, walker) { + walker.walk(preAst.moduleName); + } + function walkEnumDeclarationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.enumElements); + } + function walkEnumElementChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.equalsValueClause); + } + function walkImportDeclarationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.moduleReference); + } + function walkExportAssignmentChildren(preAst, walker) { + walker.walk(preAst.identifier); + } + function walkWithStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkExpressionStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkLabeledStatementChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.statement); + } + function walkVariableStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + } + var childrenWalkers = new Array(TypeScript.SyntaxKind.LastNode + 1); + for (var i = TypeScript.SyntaxKind.FirstToken, n = TypeScript.SyntaxKind.LastToken; i <= n; i++) { + childrenWalkers[i] = null; + } + for (var i = TypeScript.SyntaxKind.FirstTrivia, n = TypeScript.SyntaxKind.LastTrivia; i <= n; i++) { + childrenWalkers[i] = null; + } + childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren; + childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[60 /* AnyKeyword */] = null; + childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren; + childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren; + childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren; + childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren; + childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren; + childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren; + childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[146 /* Block */] = walkBlockChildren; + childrenWalkers[61 /* BooleanKeyword */] = null; + childrenWalkers[152 /* BreakStatement */] = null; + childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren; + childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren; + childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren; + childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren; + childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren; + childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren; + childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren; + childrenWalkers[239 /* Constraint */] = walkConstraintChildren; + childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren; + childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren; + childrenWalkers[153 /* ContinueStatement */] = null; + childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren; + childrenWalkers[162 /* DebuggerStatement */] = null; + childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren; + childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren; + childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren; + childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren; + childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren; + childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren; + childrenWalkers[156 /* EmptyStatement */] = null; + childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren; + childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren; + childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren; + childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren; + childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; + childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren; + childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren; + childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren; + childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren; + childrenWalkers[24 /* FalseKeyword */] = null; + childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren; + childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren; + childrenWalkers[154 /* ForStatement */] = walkForStatementChildren; + childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren; + childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren; + childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren; + childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren; + childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren; + childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren; + childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren; + childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren; + childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren; + childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren; + childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren; + childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren; + childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren; + childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren; + childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren; + childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren; + childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren; + childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren; + childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren; + childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren; + childrenWalkers[1 /* List */] = walkListChildren; + childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren; + childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren; + childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren; + childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren; + childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren; + childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren; + childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren; + childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren; + childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren; + childrenWalkers[11 /* IdentifierName */] = null; + childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[0 /* None */] = null; + childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren; + childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; + childrenWalkers[32 /* NullKeyword */] = null; + childrenWalkers[67 /* NumberKeyword */] = null; + childrenWalkers[13 /* NumericLiteral */] = null; + childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren; + childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren; + childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren; + childrenWalkers[223 /* OmittedExpression */] = null; + childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[242 /* Parameter */] = walkParameterChildren; + childrenWalkers[227 /* ParameterList */] = walkParameterListChildren; + childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren; + childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren; + childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren; + childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren; + childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren; + childrenWalkers[12 /* RegularExpressionLiteral */] = null; + childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren; + childrenWalkers[120 /* SourceUnit */] = walkScriptChildren; + childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren; + childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren; + childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren; + childrenWalkers[14 /* StringLiteral */] = null; + childrenWalkers[69 /* StringKeyword */] = null; + childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren; + childrenWalkers[50 /* SuperKeyword */] = null; + childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren; + childrenWalkers[35 /* ThisKeyword */] = null; + childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren; + childrenWalkers[3 /* TriviaList */] = null; + childrenWalkers[37 /* TrueKeyword */] = null; + childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren; + childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren; + childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren; + childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren; + childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren; + childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren; + childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren; + childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren; + childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren; + childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren; + childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren; + childrenWalkers[41 /* VoidKeyword */] = null; + childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren; + childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren; + for (var e in TypeScript.SyntaxKind) { + if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) { + TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]); + } + } + var AstWalkOptions = (function () { + function AstWalkOptions() { + this.goChildren = true; + this.stopWalking = false; + } + return AstWalkOptions; + })(); + TypeScript.AstWalkOptions = AstWalkOptions; + var SimplePreAstWalker = (function () { + function SimplePreAstWalker(pre, state) { + this.pre = pre; + this.state = state; + this.options = new AstWalkOptions(); + } + SimplePreAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + this.pre(ast, this.state); + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + }; + return SimplePreAstWalker; + })(); + var SimplePrePostAstWalker = (function () { + function SimplePrePostAstWalker(pre, post, state) { + this.pre = pre; + this.post = post; + this.state = state; + this.options = new AstWalkOptions(); + } + SimplePrePostAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + this.pre(ast, this.state); + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + this.post(ast, this.state); + }; + return SimplePrePostAstWalker; + })(); + var NormalAstWalker = (function () { + function NormalAstWalker(pre, post, state) { + this.pre = pre; + this.post = post; + this.state = state; + this.options = new AstWalkOptions(); + } + NormalAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + if (this.options.stopWalking) { + return; + } + this.pre(ast, this); + if (this.options.stopWalking) { + return; + } + if (this.options.goChildren) { + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + } + else { + this.options.goChildren = true; + } + if (this.post) { + this.post(ast, this); + } + }; + return NormalAstWalker; + })(); + var AstWalkerFactory = (function () { + function AstWalkerFactory() { + } + AstWalkerFactory.prototype.walk = function (ast, pre, post, state) { + new NormalAstWalker(pre, post, state).walk(ast); + }; + AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) { + if (post) { + new SimplePrePostAstWalker(pre, post, state).walk(ast); + } + else { + new SimplePreAstWalker(pre, state).walk(ast); + } + }; + return AstWalkerFactory; + })(); + TypeScript.AstWalkerFactory = AstWalkerFactory; + var globalAstWalkerFactory = new AstWalkerFactory(); + function getAstWalkerFactory() { + return globalAstWalkerFactory; + } + TypeScript.getAstWalkerFactory = getAstWalkerFactory; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (ASTHelpers) { + var sentinelEmptyArray = []; + function isValidAstNode(ast) { + return ast && !TypeScript.isShared(ast) && TypeScript.start(ast) !== -1 && TypeScript.end(ast) !== -1; + } + ASTHelpers.isValidAstNode = isValidAstNode; + function isValidSpan(ast) { + if (!ast) + return false; + if (ast.start() === -1 || ast.end() === -1) + return false; + return true; + } + ASTHelpers.isValidSpan = isValidSpan; + function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) { + if (useTrailingTriviaAsLimChar === void 0) { useTrailingTriviaAsLimChar = true; } + if (forceInclusive === void 0) { forceInclusive = false; } + var top = null; + var pre = function (cur, walker) { + if (!TypeScript.isShared(cur) && isValidAstNode(cur)) { + var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && TypeScript.width(cur) === 0; + if (isInvalid1) { + walker.options.goChildren = false; } - - var container = varDeclaratorNode.containingNode(); - if (container && container.kind() == 224 /* VariableDeclaration */) { - var parentDeclaratorsList = varDeclaratorNode.parent(); - - if (parentDeclaratorsList && parentDeclaratorsList.list().childAt(0) == varDeclaratorNode.node()) { - return this.breakpointSpanOfVariableDeclaration(container); - } - - if (this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { - return createBreakpointSpanInfo(varDeclaratorNode); - } else { - return null; + else { + var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === TypeScript.end(script) + TypeScript.lastToken(script).trailingTriviaWidth(); + var minChar = TypeScript.start(cur); + var limChar = TypeScript.end(cur) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(cur) : 0) + (inclusive ? 1 : 0); + if (pos >= minChar && pos < limChar) { + if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || TypeScript.end(cur) > TypeScript.start(cur)) { + if (top === null) { + top = cur; + } + else if (TypeScript.start(cur) >= TypeScript.start(top) && (TypeScript.end(cur) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(cur) : 0)) <= (TypeScript.end(top) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(top) : 0))) { + if (TypeScript.width(top) !== 0 || TypeScript.width(cur) !== 0) { + top = cur; + } + } + } } - } else if (container) { - return this.breakpointSpanOfMemberVariableDeclaration(container); - } - - return null; - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableDeclaration = function (varDeclarationNode) { - if (!varDeclarationNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclarationNode)) { - return false; - } - - var varDeclarationSyntax = varDeclarationNode.node(); - var containerChildren = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - if (!containerChildren || containerChildren.childCount() == 0) { - return false; - } - - var child = containerChildren.childAt(0); - if (child && child.element().isNode()) { - return this.canHaveBreakpointInVariableDeclarator(containerChildren.childAt(0)); - } - - return false; - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableDeclaration = function (varDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { - return null; - } - - var container = varDeclarationNode.containingNode(); - var varDeclarationSyntax = varDeclarationNode.node(); - var varDeclarators = varDeclarationNode.getPositionedChild(varDeclarationSyntax.variableDeclarators); - var varDeclaratorsCount = varDeclarators.childCount(); - - if (container && container.kind() == 148 /* VariableStatement */) { - return this.breakpointSpanOfVariableStatement(container); - } - - if (this.canHaveBreakpointInVariableDeclaration(varDeclarationNode)) { - return createBreakpointSpanInfoWithLimChar(varDeclarationNode, varDeclarators.childEndAt(0)); - } else { - return null; - } - }; - - BreakpointResolver.prototype.canHaveBreakpointInVariableStatement = function (varStatementNode) { - if (!varStatementNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varStatementNode)) { - return false; - } - - var variableStatement = varStatementNode.node(); - return this.canHaveBreakpointInVariableDeclaration(varStatementNode.getPositionedChild(variableStatement.variableDeclaration)); - }; - - BreakpointResolver.prototype.breakpointSpanOfVariableStatement = function (varStatementNode) { - if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { - return null; - } - - var variableStatement = varStatementNode.node(); - var variableDeclaration = varStatementNode.getPositionedChild(variableStatement.variableDeclaration); - var varDeclarationSyntax = variableDeclaration.node(); - var varDeclarators = variableDeclaration.getPositionedChild(varDeclarationSyntax.variableDeclarators); - return createBreakpointSpanInfoWithLimChar(varStatementNode, varDeclarators.childEndAt(0)); - }; - - BreakpointResolver.prototype.breakpointSpanOfParameter = function (parameterNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(parameterNode)) { - return null; - } - - var parameterSyntax = parameterNode.node(); - if (parameterSyntax.dotDotDotToken || parameterSyntax.equalsValueClause || parameterSyntax.modifiers.childCount() > 0) { - return createBreakpointSpanInfo(parameterNode); - } else { - return null; - } - }; - - BreakpointResolver.prototype.breakpointSpanOfMemberVariableDeclaration = function (memberVarDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { - return null; - } - - var memberVariableDeclaration = memberVarDeclarationNode.node(); - if (this.canHaveBreakpointInVariableDeclarator(memberVarDeclarationNode.getPositionedChild(memberVariableDeclaration.variableDeclarator))) { - return createBreakpointSpanInfo(memberVarDeclarationNode, memberVariableDeclaration.modifiers, memberVariableDeclaration.variableDeclarator); - } else { - return null; + walker.options.goChildren = (minChar <= pos && pos <= limChar); } - }; - - BreakpointResolver.prototype.breakpointSpanOfImportDeclaration = function (importDeclarationNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { - return null; + } + }; + TypeScript.getAstWalkerFactory().walk(script, pre); + return top; + } + ASTHelpers.getAstAtPosition = getAstAtPosition; + function getExtendsHeritageClause(clauses) { + return getHeritageClause(clauses, 230 /* ExtendsHeritageClause */); + } + ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause; + function getImplementsHeritageClause(clauses) { + return getHeritageClause(clauses, 231 /* ImplementsHeritageClause */); + } + ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause; + function getHeritageClause(clauses, kind) { + if (clauses) { + for (var i = 0, n = clauses.length; i < n; i++) { + var child = clauses[i]; + if (child.typeNames.length > 0 && child.kind() === kind) { + return child; } - - var importSyntax = importDeclarationNode.node(); - return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumDeclaration = function (enumDeclarationNode) { - if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { + } + } + return null; + } + function isCallExpression(ast) { + return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */); + } + ASTHelpers.isCallExpression = isCallExpression; + function isCallExpressionTarget(ast) { + return !!getCallExpressionTarget(ast); + } + ASTHelpers.isCallExpressionTarget = isCallExpressionTarget; + function getCallExpressionTarget(ast) { + if (!ast) { + return null; + } + var current = ast; + while (current && current.parent) { + if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) { + current = current.parent; + continue; + } + break; + } + if (current && current.parent) { + if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) { + return current === current.parent.expression ? current : null; + } + } + return null; + } + ASTHelpers.getCallExpressionTarget = getCallExpressionTarget; + function isNameOfSomeDeclaration(ast) { + if (ast === null || ast.parent === null) { + return false; + } + if (ast.kind() !== 11 /* IdentifierName */) { + return false; + } + switch (ast.parent.kind()) { + case 131 /* ClassDeclaration */: + return ast.parent.identifier === ast; + case 128 /* InterfaceDeclaration */: + return ast.parent.identifier === ast; + case 132 /* EnumDeclaration */: + return ast.parent.identifier === ast; + case 130 /* ModuleDeclaration */: + return ast.parent.name === ast || ast.parent.stringLiteral === ast; + case 225 /* VariableDeclarator */: + return ast.parent.propertyName === ast; + case 129 /* FunctionDeclaration */: + return ast.parent.identifier === ast; + case 135 /* MemberFunctionDeclaration */: + return ast.parent.propertyName === ast; + case 242 /* Parameter */: + return ast.parent.identifier === ast; + case 238 /* TypeParameter */: + return ast.parent.identifier === ast; + case 240 /* SimplePropertyAssignment */: + return ast.parent.propertyName === ast; + case 241 /* FunctionPropertyAssignment */: + return ast.parent.propertyName === ast; + case 243 /* EnumElement */: + return ast.parent.propertyName === ast; + case 133 /* ImportDeclaration */: + return ast.parent.identifier === ast; + case 145 /* MethodSignature */: + return ast.parent.propertyName === ast; + case 141 /* PropertySignature */: + return ast.parent.propertyName === ast; + } + return false; + } + function isDeclarationASTOrDeclarationNameAST(ast) { + return isNameOfSomeDeclaration(ast) || ASTHelpers.isDeclarationAST(ast); + } + ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST; + function getEnclosingParameterForInitializer(ast) { + var current = ast; + while (current) { + switch (current.kind()) { + case 232 /* EqualsValueClause */: + if (current.parent && current.parent.kind() === 242 /* Parameter */) { + return current.parent; + } + break; + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: return null; - } - - return createBreakpointSpanInfo(enumDeclarationNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstEnumElement = function (enumDeclarationNode) { - var enumDeclarationSyntax = enumDeclarationNode.node(); - var enumElements = enumDeclarationNode.getPositionedChild(enumDeclarationSyntax.enumElements); - if (enumElements && enumElements.childCount()) { - return this.breakpointSpanOf(enumElements.childAt(0)); - } - - return null; - }; - - BreakpointResolver.prototype.breakpointSpanOfEnumElement = function (enumElementNode) { - if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { + } + current = current.parent; + } + return null; + } + ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer; + function getEnclosingMemberDeclaration(ast) { + var current = ast; + while (current) { + switch (current.kind()) { + case 136 /* MemberVariableDeclaration */: + case 145 /* MethodSignature */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + return current; + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: return null; + } + current = current.parent; + } + return null; + } + ASTHelpers.getEnclosingMemberDeclaration = getEnclosingMemberDeclaration; + function isNameOfFunction(ast) { + return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast; + } + ASTHelpers.isNameOfFunction = isNameOfFunction; + function isNameOfMemberFunction(ast) { + return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast; + } + ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction; + function isNameOfMemberAccessExpression(ast) { + if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) { + return true; + } + return false; + } + ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression; + function isRightSideOfQualifiedName(ast) { + if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) { + return true; + } + return false; + } + ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName; + function parentIsModuleDeclaration(ast) { + return ast.parent && ast.parent.kind() === 130 /* ModuleDeclaration */; + } + ASTHelpers.parentIsModuleDeclaration = parentIsModuleDeclaration; + function isDeclarationAST(ast) { + switch (ast.kind()) { + case 225 /* VariableDeclarator */: + return getVariableStatement(ast) !== null; + case 133 /* ImportDeclaration */: + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 242 /* Parameter */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 144 /* IndexSignature */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 124 /* ArrayType */: + case 122 /* ObjectType */: + case 238 /* TypeParameter */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 136 /* MemberVariableDeclaration */: + case 138 /* IndexMemberDeclaration */: + case 132 /* EnumDeclaration */: + case 243 /* EnumElement */: + case 240 /* SimplePropertyAssignment */: + case 241 /* FunctionPropertyAssignment */: + case 222 /* FunctionExpression */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 145 /* MethodSignature */: + case 141 /* PropertySignature */: + return true; + default: + return false; + } + } + ASTHelpers.isDeclarationAST = isDeclarationAST; + function preComments(element, text) { + if (element) { + switch (element.kind()) { + case 148 /* VariableStatement */: + case 149 /* ExpressionStatement */: + case 131 /* ClassDeclaration */: + case 133 /* ImportDeclaration */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 147 /* IfStatement */: + case 240 /* SimplePropertyAssignment */: + case 135 /* MemberFunctionDeclaration */: + case 128 /* InterfaceDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 150 /* ReturnStatement */: + case 137 /* ConstructorDeclaration */: + case 136 /* MemberVariableDeclaration */: + case 243 /* EnumElement */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 145 /* MethodSignature */: + case 241 /* FunctionPropertyAssignment */: + case 242 /* Parameter */: + return convertNodeLeadingComments(element, text); + } + } + return null; + } + ASTHelpers.preComments = preComments; + function postComments(element, text) { + if (element) { + switch (element.kind()) { + case 149 /* ExpressionStatement */: + return convertNodeTrailingComments(element, text, true); + case 148 /* VariableStatement */: + case 131 /* ClassDeclaration */: + case 133 /* ImportDeclaration */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 147 /* IfStatement */: + case 240 /* SimplePropertyAssignment */: + case 135 /* MemberFunctionDeclaration */: + case 128 /* InterfaceDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 150 /* ReturnStatement */: + case 137 /* ConstructorDeclaration */: + case 136 /* MemberVariableDeclaration */: + case 243 /* EnumElement */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 145 /* MethodSignature */: + case 241 /* FunctionPropertyAssignment */: + case 242 /* Parameter */: + return convertNodeTrailingComments(element, text); + } + } + return null; + } + ASTHelpers.postComments = postComments; + function convertNodeTrailingComments(node, text, allowWithNewLine) { + if (allowWithNewLine === void 0) { allowWithNewLine = false; } + var _lastToken = TypeScript.lastToken(node); + if (_lastToken === null || !_lastToken.hasTrailingTrivia()) { + return null; + } + if (!allowWithNewLine && TypeScript.SyntaxUtilities.isLastTokenOnLine(_lastToken, text)) { + return null; + } + return convertComments(_lastToken.trailingTrivia(text), TypeScript.fullStart(node) + TypeScript.fullWidth(node) - _lastToken.trailingTriviaWidth(text)); + } + function convertNodeLeadingComments(element, text) { + if (element) { + return convertTokenLeadingComments(TypeScript.firstToken(element), text); + } + return null; + } + function convertTokenLeadingComments(token, text) { + if (token === null) { + return null; + } + return token.hasLeadingTrivia() ? convertComments(token.leadingTrivia(text), token.fullStart()) : null; + } + ASTHelpers.convertTokenLeadingComments = convertTokenLeadingComments; + function convertTokenTrailingComments(token, text) { + if (token === null) { + return null; + } + return token.hasTrailingTrivia() ? convertComments(token.trailingTrivia(text), TypeScript.fullEnd(token) - token.trailingTriviaWidth(text)) : null; + } + ASTHelpers.convertTokenTrailingComments = convertTokenTrailingComments; + function convertComments(triviaList, commentStartPosition) { + var result = null; + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isComment()) { + var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine(); + result = result || []; + result.push(convertComment(trivia, commentStartPosition, hasTrailingNewLine)); + } + commentStartPosition += trivia.fullWidth(); + } + return result; + } + function convertComment(trivia, commentStartPosition, hasTrailingNewLine) { + var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth()); + return comment; + } + function docComments(ast, text) { + if (isDeclarationAST(ast)) { + var comments = null; + if (ast.kind() === 225 /* VariableDeclarator */) { + comments = TypeScript.ASTHelpers.preComments(getVariableStatement(ast), text); + } + else if (ast.kind() === 242 /* Parameter */) { + comments = TypeScript.ASTHelpers.preComments(ast, text); + if (!comments) { + var previousToken = TypeScript.findToken(TypeScript.syntaxTree(ast).sourceUnit(), TypeScript.firstToken(ast).fullStart() - 1); + if (previousToken && (previousToken.kind() === 72 /* OpenParenToken */ || previousToken.kind() === 79 /* CommaToken */)) { + comments = convertTokenTrailingComments(previousToken, text); + } } - - return createBreakpointSpanInfo(enumElementNode); - }; - - BreakpointResolver.prototype.breakpointSpanOfIfStatement = function (ifStatementNode) { - var ifStatement = ifStatementNode.node(); - return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfElseClause = function (elseClauseNode) { - var elseClause = elseClauseNode.node(); - return this.breakpointSpanOf(elseClauseNode.getPositionedChild(elseClause.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfForInStatement = function (forInStatementNode) { - var forInStatement = forInStatementNode.node(); - return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfForStatement = function (forStatementNode) { - var forStatement = forStatementNode.node(); - return this.breakpointSpanOf(forStatementNode.getPositionedChild(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWhileStatement = function (whileStatementNode) { - var whileStatement = whileStatementNode.node(); - return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfDoStatement = function (doStatementNode) { - var doStatement = doStatementNode.node(); - return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfSwitchStatement = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFirstStatementOfFirstCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { + } + else { + comments = TypeScript.ASTHelpers.preComments(ast, text); + } + if (comments && comments.length > 0) { + return comments.filter(function (c) { return isDocComment(c); }); + } + } + return sentinelEmptyArray; + } + ASTHelpers.docComments = docComments; + function isDocComment(comment) { + if (comment.kind() === 6 /* MultiLineCommentTrivia */) { + var fullText = comment.fullText(); + return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/"; + } + return false; + } + ASTHelpers.isDocComment = isDocComment; + function getParameterList(ast) { + if (ast) { + switch (ast.kind()) { + case 137 /* ConstructorDeclaration */: + return getParameterList(ast.callSignature); + case 129 /* FunctionDeclaration */: + return getParameterList(ast.callSignature); + case 218 /* ParenthesizedArrowFunctionExpression */: + return getParameterList(ast.callSignature); + case 143 /* ConstructSignature */: + return getParameterList(ast.callSignature); + case 135 /* MemberFunctionDeclaration */: + return getParameterList(ast.callSignature); + case 241 /* FunctionPropertyAssignment */: + return getParameterList(ast.callSignature); + case 222 /* FunctionExpression */: + return getParameterList(ast.callSignature); + case 145 /* MethodSignature */: + return getParameterList(ast.callSignature); + case 125 /* ConstructorType */: + return ast.parameterList; + case 123 /* FunctionType */: + return ast.parameterList; + case 142 /* CallSignature */: + return ast.parameterList; + case 139 /* GetAccessor */: + return getParameterList(ast.callSignature); + case 140 /* SetAccessor */: + return getParameterList(ast.callSignature); + } + } + return null; + } + ASTHelpers.getParameterList = getParameterList; + function getType(ast) { + if (ast) { + switch (ast.kind()) { + case 129 /* FunctionDeclaration */: + return getType(ast.callSignature); + case 218 /* ParenthesizedArrowFunctionExpression */: + return getType(ast.callSignature); + case 143 /* ConstructSignature */: + return getType(ast.callSignature); + case 135 /* MemberFunctionDeclaration */: + return getType(ast.callSignature); + case 241 /* FunctionPropertyAssignment */: + return getType(ast.callSignature); + case 222 /* FunctionExpression */: + return getType(ast.callSignature); + case 145 /* MethodSignature */: + return getType(ast.callSignature); + case 142 /* CallSignature */: + return getType(ast.typeAnnotation); + case 144 /* IndexSignature */: + return getType(ast.typeAnnotation); + case 141 /* PropertySignature */: + return getType(ast.typeAnnotation); + case 139 /* GetAccessor */: + return getType(ast.callSignature); + case 242 /* Parameter */: + return getType(ast.typeAnnotation); + case 136 /* MemberVariableDeclaration */: + return getType(ast.variableDeclarator); + case 225 /* VariableDeclarator */: + return getType(ast.typeAnnotation); + case 236 /* CatchClause */: + return getType(ast.typeAnnotation); + case 125 /* ConstructorType */: + return ast.type; + case 123 /* FunctionType */: + return ast.type; + case 244 /* TypeAnnotation */: + return ast.type; + } + } + return null; + } + ASTHelpers.getType = getType; + function getVariableStatement(variableDeclarator) { + if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) { + return variableDeclarator.parent.parent.parent; + } + return null; + } + function getVariableDeclaratorModifiers(variableDeclarator) { + var variableStatement = getVariableStatement(variableDeclarator); + return variableStatement ? variableStatement.modifiers : TypeScript.Syntax.emptyList(); + } + ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers; + function isIntegerLiteralAST(expression) { + if (expression) { + switch (expression.kind()) { + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + expression = expression.operand; + return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text()); + case 13 /* NumericLiteral */: + var text = expression.text(); + return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); + } + } + return false; + } + ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST; + function getEnclosingModuleDeclaration(ast) { + while (ast) { + if (ast.kind() === 130 /* ModuleDeclaration */) { + return ast; + } + ast = ast.parent; + } + return null; + } + ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration; + function isEntireNameOfModuleDeclaration(nameAST) { + return parentIsModuleDeclaration(nameAST) && nameAST.parent.name === nameAST; + } + function getModuleDeclarationFromNameAST(ast) { + if (ast) { + switch (ast.kind()) { + case 14 /* StringLiteral */: + if (parentIsModuleDeclaration(ast) && ast.parent.stringLiteral === ast) { + return ast.parent; + } return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { + case 11 /* IdentifierName */: + case 121 /* QualifiedName */: + if (isEntireNameOfModuleDeclaration(ast)) { + return ast.parent; + } + break; + default: return null; + } + for (ast = ast.parent; ast && ast.kind() === 121 /* QualifiedName */; ast = ast.parent) { + if (isEntireNameOfModuleDeclaration(ast)) { + return ast.parent; } - - var firstCaseClause = switchClauses.childAt(0); - var statements = null; - if (firstCaseClause && firstCaseClause.kind() == 233 /* CaseSwitchClause */) { - var caseClause = firstCaseClause.node(); - statements = caseClause.statements; - } else if (firstCaseClause && firstCaseClause.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = firstCaseClause.node(); - statements = defaultClause.statements; - } else { - return null; + } + } + return null; + } + ASTHelpers.getModuleDeclarationFromNameAST = getModuleDeclarationFromNameAST; + function isLastNameOfModule(ast, astName) { + if (ast) { + if (ast.stringLiteral) { + return astName === ast.stringLiteral; + } + else if (ast.name.kind() === 121 /* QualifiedName */) { + return astName === ast.name.right; + } + else { + return astName === ast.name; + } + } + return false; + } + ASTHelpers.isLastNameOfModule = isLastNameOfModule; + function getNameOfIdentifierOrQualifiedName(name) { + if (name.kind() === 11 /* IdentifierName */) { + return name.text(); + } + else { + TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); + var dotExpr = name; + return getNameOfIdentifierOrQualifiedName(dotExpr.left) + "." + getNameOfIdentifierOrQualifiedName(dotExpr.right); + } + } + ASTHelpers.getNameOfIdentifierOrQualifiedName = getNameOfIdentifierOrQualifiedName; + function getModuleNames(name, result) { + result = result || []; + if (name.kind() === 121 /* QualifiedName */) { + getModuleNames(name.left, result); + result.push(name.right); + } + else { + result.push(name); + } + return result; + } + ASTHelpers.getModuleNames = getModuleNames; + })(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); + var ASTHelpers = TypeScript.ASTHelpers; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var MemberName = (function () { + function MemberName() { + this.prefix = ""; + this.suffix = ""; + } + MemberName.prototype.isString = function () { + return false; + }; + MemberName.prototype.isArray = function () { + return false; + }; + MemberName.prototype.isMarker = function () { + return !this.isString() && !this.isArray(); + }; + MemberName.prototype.toString = function () { + return MemberName.memberNameToString(this); + }; + MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { + if (markerBaseLength === void 0) { markerBaseLength = 0; } + var result = memberName.prefix; + if (memberName.isString()) { + result += memberName.text; + } + else if (memberName.isArray()) { + var ar = memberName; + for (var index = 0; index < ar.entries.length; index++) { + if (ar.entries[index].isMarker()) { + if (markerInfo) { + markerInfo.push(markerBaseLength + result.length); + } + continue; } - - return this.breakpointSpanOfFirstChildOfSyntaxList(firstCaseClause.getPositionedChild(statements)); + result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); + result += ar.delim; + } + } + result += memberName.suffix; + return result; + }; + MemberName.create = function (arg1, arg2, arg3) { + if (typeof arg1 === "string") { + return new MemberNameString(arg1); + } + else { + var result = new MemberNameArray(); + if (arg2) + result.prefix = arg2; + if (arg3) + result.suffix = arg3; + result.entries.push(arg1); + return result; + } + }; + return MemberName; + })(); + TypeScript.MemberName = MemberName; + var MemberNameString = (function (_super) { + __extends(MemberNameString, _super); + function MemberNameString(text) { + _super.call(this); + this.text = text; + } + MemberNameString.prototype.isString = function () { + return true; + }; + return MemberNameString; + })(MemberName); + TypeScript.MemberNameString = MemberNameString; + var MemberNameArray = (function (_super) { + __extends(MemberNameArray, _super); + function MemberNameArray() { + _super.call(this); + this.delim = ""; + this.entries = []; + } + MemberNameArray.prototype.isArray = function () { + return true; + }; + MemberNameArray.prototype.add = function (entry) { + this.entries.push(entry); + }; + MemberNameArray.prototype.addAll = function (entries) { + for (var i = 0; i < entries.length; i++) { + this.entries.push(entries[i]); + } + }; + return MemberNameArray; + })(MemberName); + TypeScript.MemberNameArray = MemberNameArray; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function stripStartAndEndQuotes(str) { + var firstCharCode = str && str.charCodeAt(0); + if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { + return str.substring(1, str.length - 1); + } + return str; + } + TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes; + function isSingleQuoted(str) { + return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */; + } + TypeScript.isSingleQuoted = isSingleQuoted; + function isDoubleQuoted(str) { + return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */; + } + TypeScript.isDoubleQuoted = isDoubleQuoted; + function isQuoted(str) { + return isDoubleQuoted(str) || isSingleQuoted(str); + } + TypeScript.isQuoted = isQuoted; + function quoteStr(str) { + return "\"" + str + "\""; + } + TypeScript.quoteStr = quoteStr; + var switchToForwardSlashesRegEx = /\\/g; + function switchToForwardSlashes(path) { + return path.replace(switchToForwardSlashesRegEx, "/"); + } + TypeScript.switchToForwardSlashes = switchToForwardSlashes; + function trimModName(modName) { + if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") { + return modName.substring(0, modName.length - 5); + } + if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") { + return modName.substring(0, modName.length - 3); + } + if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") { + return modName.substring(0, modName.length - 3); + } + return modName; + } + TypeScript.trimModName = trimModName; + function getDeclareFilePath(fname) { + return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname); + } + TypeScript.getDeclareFilePath = getDeclareFilePath; + function isFileOfExtension(fname, ext) { + var invariantFname = fname.toLocaleUpperCase(); + var invariantExt = ext.toLocaleUpperCase(); + var extLength = invariantExt.length; + return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt; + } + function isTSFile(fname) { + return isFileOfExtension(fname, ".ts"); + } + TypeScript.isTSFile = isTSFile; + function isDTSFile(fname) { + return isFileOfExtension(fname, ".d.ts"); + } + TypeScript.isDTSFile = isDTSFile; + function getPrettyName(modPath, quote, treatAsFileName) { + if (quote === void 0) { quote = true; } + if (treatAsFileName === void 0) { treatAsFileName = false; } + var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath)); + var components = this.getPathComponents(modName); + return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath; + } + TypeScript.getPrettyName = getPrettyName; + function getPathComponents(path) { + return path.split("/"); + } + TypeScript.getPathComponents = getPathComponents; + function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) { + if (isAbsoultePathURL === void 0) { isAbsoultePathURL = true; } + absoluteModPath = switchToForwardSlashes(absoluteModPath); + var modComponents = this.getPathComponents(absoluteModPath); + var fixedModComponents = this.getPathComponents(fixedModFilePath); + var joinStartIndex = 0; + for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) { + if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) { + break; + } + } + if (joinStartIndex !== 0) { + var relativePath = ""; + var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length); + for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) { + if (fixedModComponents[joinStartIndex] !== "") { + relativePath = relativePath + "../"; + } + } + return relativePath + relativePathComponents.join("/"); + } + if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) { + absoluteModPath = "file:///" + absoluteModPath; + } + return absoluteModPath; + } + TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath; + function changePathToDTS(modPath) { + return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts"; + } + TypeScript.changePathToDTS = changePathToDTS; + function isRelative(path) { + return path.length > 0 && path.charAt(0) === "."; + } + TypeScript.isRelative = isRelative; + function isRooted(path) { + return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1)); + } + TypeScript.isRooted = isRooted; + function getRootFilePath(outFname) { + if (outFname === "") { + return outFname; + } + else { + var isPath = outFname.indexOf("/") !== -1; + return isPath ? filePath(outFname) : ""; + } + } + TypeScript.getRootFilePath = getRootFilePath; + function filePathComponents(fullPath) { + fullPath = switchToForwardSlashes(fullPath); + var components = getPathComponents(fullPath); + return components.slice(0, components.length - 1); + } + TypeScript.filePathComponents = filePathComponents; + function filePath(fullPath) { + var path = filePathComponents(fullPath); + return path.join("/") + "/"; + } + TypeScript.filePath = filePath; + function convertToDirectoryPath(dirPath) { + if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") { + dirPath += "/"; + } + return dirPath; + } + TypeScript.convertToDirectoryPath = convertToDirectoryPath; + var normalizePathRegEx = /^\\\\[^\\]/; + function normalizePath(path) { + if (normalizePathRegEx.test(path)) { + path = "file:" + path; + } + var parts = this.getPathComponents(switchToForwardSlashes(path)); + var normalizedParts = []; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + if (part === ".") { + continue; + } + if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") { + normalizedParts.pop(); + continue; + } + normalizedParts.push(part); + } + return normalizedParts.join("/"); + } + TypeScript.normalizePath = normalizePath; +})(TypeScript || (TypeScript = {})); +var ts; +(function (ts) { + var scanner = ts.createScanner(1 /* ES5 */); + var emptyArray = []; + function createNode(kind, pos, end, flags, parent) { + var node = new (ts.getNodeConstructor(kind))(); + node.pos = pos; + node.end = end; + node.flags = flags; + node.parent = parent; + return node; + } + var NodeObject = (function () { + function NodeObject() { + } + NodeObject.prototype.getSourceFile = function () { + var node = this; + while (node.kind !== 177 /* SourceFile */) + node = node.parent; + return node; + }; + NodeObject.prototype.getStart = function () { + return ts.getTokenPosOfNode(this); + }; + NodeObject.prototype.getFullStart = function () { + return this.pos; + }; + NodeObject.prototype.getEnd = function () { + return this.end; + }; + NodeObject.prototype.getWidth = function () { + return this.getEnd() - this.getStart(); + }; + NodeObject.prototype.getFullWidth = function () { + return this.end - this.getFullStart(); + }; + NodeObject.prototype.getLeadingTriviaWidth = function () { + return this.getStart() - this.pos; + }; + NodeObject.prototype.getFullText = function () { + return this.getSourceFile().text.substring(this.pos, this.end); + }; + NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) { + scanner.setTextPos(pos); + while (pos < end) { + var token = scanner.scan(); + var textPos = scanner.getTextPos(); + var node = nodes.push(createNode(token, pos, textPos, 256 /* Synthetic */, this)); + pos = textPos; + } + return pos; + }; + NodeObject.prototype.createSyntaxList = function (nodes) { + var list = createNode(179 /* SyntaxList */, nodes.pos, nodes.end, 256 /* Synthetic */, this); + list._children = []; + var pos = nodes.pos; + for (var i = 0, len = nodes.length; i < len; i++) { + var node = nodes[i]; + if (pos < node.pos) { + pos = this.addSyntheticNodes(list._children, pos, node.pos); + } + list._children.push(node); + pos = node.end; + } + if (pos < nodes.end) { + this.addSyntheticNodes(list._children, pos, nodes.end); + } + return list; + }; + NodeObject.prototype.createChildren = function () { + var _this = this; + if (this.kind > 111 /* Missing */) { + scanner.setText(this.getSourceFile().text); + var children = []; + var pos = this.pos; + var processNode = function (node) { + if (pos < node.pos) { + pos = _this.addSyntheticNodes(children, pos, node.pos); + } + children.push(node); + pos = node.end; }; - - BreakpointResolver.prototype.breakpointSpanOfLastStatementOfLastCaseClause = function (switchStatementNode) { - var switchStatement = switchStatementNode.node(); - if (switchStatement.switchClauses && switchStatement.switchClauses.childCount() == 0) { - return null; - } - - var switchClauses = switchStatementNode.getPositionedChild(switchStatement.switchClauses); - if (switchClauses.childCount() == 0) { - return null; - } - - var lastClauseNode = switchClauses.childAt(switchClauses.childCount() - 1); - var statements = null; - if (lastClauseNode && lastClauseNode.kind() == 233 /* CaseSwitchClause */) { - var caseClause = lastClauseNode.node(); - statements = caseClause.statements; - } else if (lastClauseNode && lastClauseNode.kind() == 234 /* DefaultSwitchClause */) { - var defaultClause = lastClauseNode.node(); - statements = defaultClause.statements; - } else { - return null; + var processNodes = function (nodes) { + if (pos < nodes.pos) { + pos = _this.addSyntheticNodes(children, pos, nodes.pos); } - - return this.breakpointSpanOfLastChildOfSyntaxList(lastClauseNode.getPositionedChild(statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCaseSwitchClause = function (caseClauseNode) { - var caseSwitchClause = caseClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(caseClauseNode.getPositionedChild(caseSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfDefaultSwitchClause = function (defaultSwithClauseNode) { - var defaultSwitchClause = defaultSwithClauseNode.node(); - return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwithClauseNode.getPositionedChild(defaultSwitchClause.statements)); - }; - - BreakpointResolver.prototype.breakpointSpanOfWithStatement = function (withStatementNode) { - var withStatement = withStatementNode.node(); - return this.breakpointSpanOf(withStatementNode.getPositionedChild(withStatement.statement)); - }; - - BreakpointResolver.prototype.breakpointSpanOfTryStatement = function (tryStatementNode) { - var tryStatement = tryStatementNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(tryStatementNode.getPositionedChild(tryStatement.block)); - }; - - BreakpointResolver.prototype.breakpointSpanOfCatchClause = function (catchClauseNode) { - var catchClause = catchClauseNode.node(); - return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); - }; - - BreakpointResolver.prototype.breakpointSpanOfFinallyClause = function (finallyClauseNode) { - var finallyClause = finallyClauseNode.node(); - return this.breakpointSpanOfFirstStatementInBlock(finallyClauseNode.getPositionedChild(finallyClause.block)); + children.push(_this.createSyntaxList(nodes)); + pos = nodes.end; }; - - BreakpointResolver.prototype.breakpointSpanOfParenthesizedArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); + ts.forEachChild(this, processNode, processNodes); + if (pos < this.end) { + this.addSyntheticNodes(children, pos, this.end); + } + scanner.setText(undefined); + } + this._children = children || emptyArray; + }; + NodeObject.prototype.getChildCount = function () { + if (!this._children) + this.createChildren(); + return this._children.length; + }; + NodeObject.prototype.getChildAt = function (index) { + if (!this._children) + this.createChildren(); + return this._children[index]; + }; + NodeObject.prototype.getChildren = function () { + if (!this._children) + this.createChildren(); + return this._children; + }; + NodeObject.prototype.getFirstToken = function () { + var children = this.getChildren(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.kind < 111 /* Missing */) + return child; + if (child.kind > 111 /* Missing */) + return child.getFirstToken(); + } + }; + NodeObject.prototype.getLastToken = function () { + var children = this.getChildren(); + for (var i = children.length - 1; i >= 0; i--) { + var child = children[i]; + if (child.kind < 111 /* Missing */) + return child; + if (child.kind > 111 /* Missing */) + return child.getLastToken(); + } + }; + return NodeObject; + })(); + var SymbolObject = (function () { + function SymbolObject(flags, name) { + this.flags = flags; + this.name = name; + } + SymbolObject.prototype.getFlags = function () { + return this.flags; + }; + SymbolObject.prototype.getName = function () { + return this.name; + }; + SymbolObject.prototype.getDeclarations = function () { + return this.declarations; + }; + return SymbolObject; + })(); + var TypeObject = (function () { + function TypeObject(checker, flags) { + this.checker = checker; + this.flags = flags; + } + TypeObject.prototype.getFlags = function () { + return this.flags; + }; + TypeObject.prototype.getSymbol = function () { + return this.symbol; + }; + TypeObject.prototype.getProperties = function () { + return this.checker.getPropertiesOfType(this); + }; + TypeObject.prototype.getProperty = function (propertyName) { + return this.checker.getPropertyOfType(this, propertyName); + }; + TypeObject.prototype.getApparentProperties = function () { + return this.checker.getAugmentedPropertiesOfApparentType(this); + }; + TypeObject.prototype.getCallSignatures = function () { + return this.checker.getSignaturesOfType(this, 0 /* Call */); + }; + TypeObject.prototype.getConstructSignatures = function () { + return this.checker.getSignaturesOfType(this, 1 /* Construct */); + }; + TypeObject.prototype.getStringIndexType = function () { + return this.checker.getIndexTypeOfType(this, 0 /* String */); + }; + TypeObject.prototype.getNumberIndexType = function () { + return this.checker.getIndexTypeOfType(this, 1 /* Number */); + }; + return TypeObject; + })(); + var SignatureObject = (function () { + function SignatureObject(checker) { + this.checker = checker; + } + SignatureObject.prototype.getDeclaration = function () { + return this.declaration; + }; + SignatureObject.prototype.getTypeParameters = function () { + return this.typeParameters; + }; + SignatureObject.prototype.getParameters = function () { + return this.parameters; + }; + SignatureObject.prototype.getReturnType = function () { + return this.checker.getReturnTypeOfSignature(this); + }; + return SignatureObject; + })(); + var incrementalParse = TypeScript.IncrementalParser.parse; + var SourceFileObject = (function (_super) { + __extends(SourceFileObject, _super); + function SourceFileObject() { + _super.apply(this, arguments); + } + SourceFileObject.prototype.getLineAndCharacterFromPosition = function (position) { + return null; + }; + SourceFileObject.prototype.getSourceUnit = function () { + return this.getSyntaxTree().sourceUnit(); + }; + SourceFileObject.prototype.getLineMap = function () { + return this.getSyntaxTree().lineMap(); + }; + SourceFileObject.prototype.getSyntaxTree = function () { + if (!this.syntaxTree) { + var start = new Date().getTime(); + this.syntaxTree = TypeScript.Parser.parse(this.filename, TypeScript.SimpleText.fromScriptSnapshot(this.scriptSnapshot), this.languageVersion, this.isDeclareFile()); + var time = new Date().getTime() - start; + } + return this.syntaxTree; + }; + SourceFileObject.prototype.isDeclareFile = function () { + return TypeScript.isDTSFile(this.filename); + }; + SourceFileObject.prototype.getBloomFilter = function () { + if (!this.bloomFilter) { + var identifiers = TypeScript.createIntrinsicsObject(); + var pre = function (cur) { + if (TypeScript.ASTHelpers.isValidAstNode(cur)) { + if (cur.kind() === 11 /* IdentifierName */) { + var nodeText = TypeScript.tokenValueText(cur); + identifiers[nodeText] = true; + } } }; - - BreakpointResolver.prototype.breakpointSpanOfSimpleArrowFunctionExpression = function (arrowFunctionExpressionNode) { - var arrowFunctionExpression = arrowFunctionExpressionNode.node(); - if (arrowFunctionExpression.block) { - return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.block)); - } else { - return this.breakpointSpanOf(arrowFunctionExpressionNode.getPositionedChild(arrowFunctionExpression.expression)); + TypeScript.getAstWalkerFactory().simpleWalk(this.getSourceUnit(), pre, null, identifiers); + var identifierCount = 0; + for (var name in identifiers) { + if (identifiers[name]) { + identifierCount++; } + } + this.bloomFilter = new TypeScript.BloomFilter(identifierCount); + this.bloomFilter.addKeys(identifiers); + } + return this.bloomFilter; + }; + SourceFileObject.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) { + var oldSyntaxTree = this.syntaxTree; + if (textChangeRange && ts.Debug.shouldAssert(1 /* Normal */)) { + var oldText = this.scriptSnapshot; + var newText = scriptSnapshot; + TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength()); + if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + var oldTextPrefix = oldText.getText(0, textChangeRange.span().start()); + var newTextPrefix = newText.getText(0, textChangeRange.span().start()); + TypeScript.Debug.assert(oldTextPrefix === newTextPrefix); + var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength()); + var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength()); + TypeScript.Debug.assert(oldTextSuffix === newTextSuffix); + } + } + var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var newSyntaxTree = !textChangeRange || !oldSyntaxTree ? TypeScript.Parser.parse(this.filename, text, this.languageVersion, TypeScript.isDTSFile(this.filename)) : TypeScript.IncrementalParser.parse(oldSyntaxTree, textChangeRange, text); + return SourceFileObject.createSourceFileObject(this.filename, scriptSnapshot, this.languageVersion, version, isOpen, newSyntaxTree); + }; + SourceFileObject.createSourceFileObject = function (filename, scriptSnapshot, languageVersion, version, isOpen, syntaxTree) { + var newSourceFile = ts.createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen); + newSourceFile.scriptSnapshot = scriptSnapshot; + newSourceFile.syntaxTree = syntaxTree; + return newSourceFile; + }; + return SourceFileObject; + })(NodeObject); + (function (EmitOutputResult) { + EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; + EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; + EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors"; + EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors"; + })(ts.EmitOutputResult || (ts.EmitOutputResult = {})); + var EmitOutputResult = ts.EmitOutputResult; + (function (OutputFileType) { + OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; + OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; + OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; + })(ts.OutputFileType || (ts.OutputFileType = {})); + var OutputFileType = ts.OutputFileType; + (function (EndOfLineState) { + EndOfLineState[EndOfLineState["Start"] = 0] = "Start"; + EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; + EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; + EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + EndOfLineState[EndOfLineState["EndingWithDotToken"] = 4] = "EndingWithDotToken"; + })(ts.EndOfLineState || (ts.EndOfLineState = {})); + var EndOfLineState = ts.EndOfLineState; + (function (TokenClass) { + TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; + TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; + TokenClass[TokenClass["Operator"] = 2] = "Operator"; + TokenClass[TokenClass["Comment"] = 3] = "Comment"; + TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; + TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; + TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; + TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; + TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; + })(ts.TokenClass || (ts.TokenClass = {})); + var TokenClass = ts.TokenClass; + var ScriptElementKind = (function () { + function ScriptElementKind() { + } + ScriptElementKind.unknown = ""; + ScriptElementKind.keyword = "keyword"; + ScriptElementKind.scriptElement = "script"; + ScriptElementKind.moduleElement = "module"; + ScriptElementKind.classElement = "class"; + ScriptElementKind.interfaceElement = "interface"; + ScriptElementKind.enumElement = "enum"; + ScriptElementKind.variableElement = "var"; + ScriptElementKind.localVariableElement = "local var"; + ScriptElementKind.functionElement = "function"; + ScriptElementKind.localFunctionElement = "local function"; + ScriptElementKind.memberFunctionElement = "method"; + ScriptElementKind.memberGetAccessorElement = "getter"; + ScriptElementKind.memberSetAccessorElement = "setter"; + ScriptElementKind.memberVariableElement = "property"; + ScriptElementKind.constructorImplementationElement = "constructor"; + ScriptElementKind.callSignatureElement = "call"; + ScriptElementKind.indexSignatureElement = "index"; + ScriptElementKind.constructSignatureElement = "construct"; + ScriptElementKind.parameterElement = "parameter"; + ScriptElementKind.typeParameterElement = "type parameter"; + ScriptElementKind.primitiveType = "primitive type"; + ScriptElementKind.label = "label"; + return ScriptElementKind; + })(); + ts.ScriptElementKind = ScriptElementKind; + var ScriptElementKindModifier = (function () { + function ScriptElementKindModifier() { + } + ScriptElementKindModifier.none = ""; + ScriptElementKindModifier.publicMemberModifier = "public"; + ScriptElementKindModifier.privateMemberModifier = "private"; + ScriptElementKindModifier.exportedModifier = "export"; + ScriptElementKindModifier.ambientModifier = "declare"; + ScriptElementKindModifier.staticModifier = "static"; + return ScriptElementKindModifier; + })(); + ts.ScriptElementKindModifier = ScriptElementKindModifier; + var MatchKind = (function () { + function MatchKind() { + } + MatchKind.none = null; + MatchKind.exact = "exact"; + MatchKind.subString = "substring"; + MatchKind.prefix = "prefix"; + return MatchKind; + })(); + ts.MatchKind = MatchKind; + function getDefaultCompilerOptions() { + return { + target: 1 /* ES5 */, + module: 0 /* None */ + }; + } + ts.getDefaultCompilerOptions = getDefaultCompilerOptions; + function compareDataObjects(dst, src) { + for (var e in dst) { + if (typeof dst[e] === "object") { + if (!compareDataObjects(dst[e], src[e])) + return false; + } + else if (typeof dst[e] !== "function") { + if (dst[e] !== src[e]) + return false; + } + } + return true; + } + ts.compareDataObjects = compareDataObjects; + var OperationCanceledException = (function () { + function OperationCanceledException() { + } + return OperationCanceledException; + })(); + ts.OperationCanceledException = OperationCanceledException; + var CancellationTokenObject = (function () { + function CancellationTokenObject(cancellationToken) { + this.cancellationToken = cancellationToken; + } + CancellationTokenObject.prototype.isCancellationRequested = function () { + return this.cancellationToken && this.cancellationToken.isCancellationRequested(); + }; + CancellationTokenObject.prototype.throwIfCancellationRequested = function () { + if (this.isCancellationRequested()) { + throw new OperationCanceledException(); + } + }; + CancellationTokenObject.None = new CancellationTokenObject(null); + return CancellationTokenObject; + })(); + var HostCache = (function () { + function HostCache(host) { + this.host = host; + this.filenameToEntry = {}; + var filenames = host.getScriptFileNames(); + for (var i = 0, n = filenames.length; i < n; i++) { + var filename = filenames[i]; + this.filenameToEntry[TypeScript.switchToForwardSlashes(filename)] = { + filename: filename, + version: host.getScriptVersion(filename), + isOpen: host.getScriptIsOpen(filename) }; - - BreakpointResolver.prototype.breakpointSpanOfContainingNode = function (positionedElement) { - return this.breakpointSpanOf(positionedElement.containingNode()); + } + this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions(); + } + HostCache.prototype.compilationSettings = function () { + return this._compilationSettings; + }; + HostCache.prototype.getEntry = function (filename) { + filename = TypeScript.switchToForwardSlashes(filename); + return ts.lookUp(this.filenameToEntry, filename); + }; + HostCache.prototype.contains = function (filename) { + return !!this.getEntry(filename); + }; + HostCache.prototype.getHostfilename = function (filename) { + var hostCacheEntry = this.getEntry(filename); + if (hostCacheEntry) { + return hostCacheEntry.filename; + } + return filename; + }; + HostCache.prototype.getFilenames = function () { + var _this = this; + var fileNames = []; + ts.forEachKey(this.filenameToEntry, function (key) { + if (ts.hasProperty(_this.filenameToEntry, key)) + fileNames.push(key); + }); + return fileNames; + }; + HostCache.prototype.getVersion = function (filename) { + return this.getEntry(filename).version; + }; + HostCache.prototype.isOpen = function (filename) { + return this.getEntry(filename).isOpen; + }; + HostCache.prototype.getScriptSnapshot = function (filename) { + var file = this.getEntry(filename); + if (!file.sourceText) { + file.sourceText = this.host.getScriptSnapshot(file.filename); + } + return file.sourceText; + }; + HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (filename, lastKnownVersion) { + var currentVersion = this.getVersion(filename); + if (lastKnownVersion === currentVersion) { + return TypeScript.TextChangeRange.unchanged; + } + var scriptSnapshot = this.getScriptSnapshot(filename); + return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); + }; + return HostCache; + })(); + var SyntaxTreeCache = (function () { + function SyntaxTreeCache(host) { + this.host = host; + this.currentfilename = ""; + this.currentFileVersion = -1; + this.currentSourceFile = null; + this.currentFileSyntaxTree = null; + this.currentFileScriptSnapshot = null; + this.hostCache = new HostCache(host); + } + SyntaxTreeCache.prototype.initialize = function (filename) { + ts.Debug.assert(!!this.currentFileSyntaxTree === !!this.currentSourceFile); + this.hostCache = new HostCache(this.host); + var version = this.hostCache.getVersion(filename); + var syntaxTree = null; + var sourceFile; + if (this.currentFileSyntaxTree === null || this.currentfilename !== filename) { + var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); + syntaxTree = this.createSyntaxTree(filename, scriptSnapshot); + sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true); + fixupParentReferences(sourceFile); + } + else if (this.currentFileVersion !== version) { + var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); + syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentFileSyntaxTree, this.currentFileVersion); + var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, this.currentFileVersion); + sourceFile = !editRange ? createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true) : this.currentSourceFile.update(scriptSnapshot, version, true, editRange); + fixupParentReferences(sourceFile); + } + if (syntaxTree !== null) { + ts.Debug.assert(sourceFile); + this.currentFileScriptSnapshot = scriptSnapshot; + this.currentFileVersion = version; + this.currentfilename = filename; + this.currentFileSyntaxTree = syntaxTree; + this.currentSourceFile = sourceFile; + } + function fixupParentReferences(sourceFile) { + var parent = sourceFile; + function walk(n) { + n.parent = parent; + var saveParent = parent; + parent = n; + ts.forEachChild(n, walk); + parent = saveParent; + } + ts.forEachChild(sourceFile, walk); + } + }; + SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (filename) { + this.initialize(filename); + return this.currentFileSyntaxTree; + }; + SyntaxTreeCache.prototype.getCurrentSourceFile = function (filename) { + this.initialize(filename); + return this.currentSourceFile; + }; + SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (filename) { + this.getCurrentFileSyntaxTree(filename); + return this.currentFileScriptSnapshot; + }; + SyntaxTreeCache.prototype.createSyntaxTree = function (filename, scriptSnapshot) { + var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var syntaxTree = TypeScript.Parser.parse(filename, text, getDefaultCompilerOptions().target, TypeScript.isDTSFile(filename)); + return syntaxTree; + }; + SyntaxTreeCache.prototype.updateSyntaxTree = function (filename, scriptSnapshot, previousSyntaxTree, previousFileVersion) { + var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, previousFileVersion); + if (editRange === null) { + return this.createSyntaxTree(filename, scriptSnapshot); + } + var nextSyntaxTree = TypeScript.IncrementalParser.parse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); + this.ensureInvariants(filename, editRange, nextSyntaxTree, this.currentFileScriptSnapshot, scriptSnapshot); + return nextSyntaxTree; + }; + SyntaxTreeCache.prototype.ensureInvariants = function (filename, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { + var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength(); + var actualNewLength = newScriptSnapshot.getLength(); + function provideMoreDebugInfo() { + var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"]; + var oldSpan = editRange.span(); + function prettyPrintString(s) { + return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"'; + } + debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n'); + debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end()))); + var newSpan = editRange.newSpan(); + debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n'); + debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end()))); + return debugInformation.join(' '); + } + ts.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo); + if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start()); + var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start()); + ts.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!'); + var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength()); + var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength()); + ts.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!'); + var incrementalTreeText = TypeScript.fullText(incrementalTree.sourceUnit()); + var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength()); + ts.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal'); + } + }; + return SyntaxTreeCache; + })(); + function createSourceFileFromScriptSnapshot(filename, scriptSnapshot, settings, version, isOpen) { + return SourceFileObject.createSourceFileObject(filename, scriptSnapshot, settings.target, version, isOpen); + } + function createDocumentRegistry() { + var buckets = {}; + function getKeyFromCompilationSettings(settings) { + return "_" + ts.ScriptTarget[settings.target]; + } + function getBucketForCompilationSettings(settings, createIfMissing) { + var key = getKeyFromCompilationSettings(settings); + var bucket = ts.lookUp(buckets, key); + if (!bucket && createIfMissing) { + buckets[key] = bucket = {}; + } + return bucket; + } + function reportStats() { + var bucketInfoArray = Object.keys(buckets).filter(function (name) { return name && name.charAt(0) === '_'; }).map(function (name) { + var entries = ts.lookUp(buckets, name); + var sourceFiles = []; + for (var i in entries) { + var entry = entries[i]; + sourceFiles.push({ + name: i, + refCount: entry.refCount, + references: entry.owners.slice(0) + }); + } + sourceFiles.sort(function (x, y) { return y.refCount - x.refCount; }); + return { + bucket: name, + sourceFiles: sourceFiles }; - - BreakpointResolver.prototype.breakpointSpanIfStartsOnSameLine = function (positionedElement) { - if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(positionedElement.start())) { - return this.breakpointSpanOf(positionedElement); - } - - return null; + }); + return JSON.stringify(bucketInfoArray, null, 2); + } + function acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen) { + var bucket = getBucketForCompilationSettings(compilationSettings, true); + var entry = ts.lookUp(bucket, filename); + if (!entry) { + var sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, compilationSettings, version, isOpen); + bucket[filename] = entry = { + sourceFile: sourceFile, + refCount: 0, + owners: [] }; - - BreakpointResolver.prototype.breakpointSpanOf = function (positionedElement) { - if (!positionedElement) { - return null; - } - - for (var containingNode = positionedElement.containingNode(); containingNode != null; containingNode = containingNode.containingNode()) { - if (containingNode.kind() == 244 /* TypeAnnotation */) { - return this.breakpointSpanIfStartsOnSameLine(containingNode); - } - } - - var element = positionedElement.element(); - - if (element.isNode()) { - return this.breakpointSpanOfNode(positionedElement); + } + entry.refCount++; + return entry.sourceFile; + } + function updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange) { + var bucket = getBucketForCompilationSettings(compilationSettings, false); + ts.Debug.assert(bucket); + var entry = ts.lookUp(bucket, filename); + ts.Debug.assert(entry); + if (entry.sourceFile.isOpen === isOpen && entry.sourceFile.version === version) { + return entry.sourceFile; + } + entry.sourceFile = entry.sourceFile.update(scriptSnapshot, version, isOpen, textChangeRange); + return entry.sourceFile; + } + function releaseDocument(filename, compilationSettings) { + var bucket = getBucketForCompilationSettings(compilationSettings, false); + ts.Debug.assert(bucket); + var entry = ts.lookUp(bucket, filename); + entry.refCount--; + ts.Debug.assert(entry.refCount >= 0); + if (entry.refCount === 0) { + delete bucket[filename]; + } + } + return { + acquireDocument: acquireDocument, + updateDocument: updateDocument, + releaseDocument: releaseDocument, + reportStats: reportStats + }; + } + ts.createDocumentRegistry = createDocumentRegistry; + var keywordCompletions = []; + for (var i = ts.SyntaxKind.FirstKeyword; i <= ts.SyntaxKind.LastKeyword; i++) { + keywordCompletions.push({ + name: ts.tokenToString(i), + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none + }); + } + function createLanguageService(host, documentRegistry) { + var syntaxTreeCache = new SyntaxTreeCache(host); + var formattingRulesProvider; + var hostCache; + var program; + var typeInfoResolver; + var fullTypeCheckChecker_doNotAccessDirectly; + var useCaseSensitivefilenames = false; + var sourceFilesByName = {}; + var documentRegistry = documentRegistry; + var cancellationToken = new CancellationTokenObject(host.getCancellationToken()); + var activeCompletionSession; + if (!TypeScript.LocalizedDiagnosticMessages) { + TypeScript.LocalizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + } + function getSourceFile(filename) { + return ts.lookUp(sourceFilesByName, filename); + } + function getFullTypeCheckChecker() { + return fullTypeCheckChecker_doNotAccessDirectly || (fullTypeCheckChecker_doNotAccessDirectly = program.getTypeChecker(true)); + } + function createCompilerHost() { + return { + getSourceFile: function (filename, languageVersion) { + var sourceFile = getSourceFile(filename); + ts.Debug.assert(!!sourceFile, "sourceFile can not be undefined"); + return sourceFile.getSourceFile(); + }, + getCancellationToken: function () { return cancellationToken; }, + getCanonicalFileName: function (filename) { return useCaseSensitivefilenames ? filename : filename.toLowerCase(); }, + useCaseSensitiveFileNames: function () { return useCaseSensitivefilenames; }, + getNewLine: function () { return "\r\n"; }, + getDefaultLibFilename: function () { + throw Error("TOD:: getDefaultLibfilename"); + }, + writeFile: function (filename, data, writeByteOrderMark) { + throw Error("TODO: write file"); + }, + getCurrentDirectory: function () { + throw Error("TODO: getCurrentDirectory"); + } + }; + } + function sourceFileUpToDate(sourceFile) { + return sourceFile && sourceFile.version === hostCache.getVersion(sourceFile.filename) && sourceFile.isOpen === hostCache.isOpen(sourceFile.filename); + } + function programUpToDate() { + if (!program) { + return false; + } + var hostFilenames = hostCache.getFilenames(); + if (program.getSourceFiles().length !== hostFilenames.length) { + return false; + } + for (var i = 0, n = hostFilenames.length; i < n; i++) { + if (!sourceFileUpToDate(program.getSourceFile(hostFilenames[i]))) { + return false; + } + } + return compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings()); + } + function synchronizeHostData() { + hostCache = new HostCache(host); + if (programUpToDate()) { + return; + } + var compilationSettings = hostCache.compilationSettings(); + var oldProgram = program; + if (oldProgram) { + var oldSettings = program.getCompilerOptions(); + var settingsChangeAffectsSyntax = oldSettings.target !== compilationSettings.target || oldSettings.module !== compilationSettings.module; + var changesInCompilationSettingsAffectSyntax = oldSettings && compilationSettings && !compareDataObjects(oldSettings, compilationSettings) && settingsChangeAffectsSyntax; + var oldSourceFiles = program.getSourceFiles(); + for (var i = 0, n = oldSourceFiles.length; i < n; i++) { + cancellationToken.throwIfCancellationRequested(); + var filename = oldSourceFiles[i].filename; + if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) { + documentRegistry.releaseDocument(filename, oldSettings); + delete sourceFilesByName[filename]; + } + } + } + var hostfilenames = hostCache.getFilenames(); + for (var i = 0, n = hostfilenames.length; i < n; i++) { + var filename = hostfilenames[i]; + var version = hostCache.getVersion(filename); + var isOpen = hostCache.isOpen(filename); + var scriptSnapshot = hostCache.getScriptSnapshot(filename); + var sourceFile = getSourceFile(filename); + if (sourceFile) { + if (sourceFileUpToDate(sourceFile)) { + continue; } - - if (element.isToken()) { - return this.breakpointSpanOfToken(positionedElement); + var textChangeRange = null; + if (sourceFile.isOpen && isOpen) { + textChangeRange = hostCache.getScriptTextChangeRangeSinceVersion(filename, sourceFile.version); } - - return this.breakpointSpanOfContainingNode(positionedElement); - }; - return BreakpointResolver; - })(); - - function getBreakpointLocation(syntaxTree, askedPos) { - if (TypeScript.isDTSFile(syntaxTree.fileName())) { - return null; + sourceFile = documentRegistry.updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange); } - - var sourceUnit = syntaxTree.sourceUnit(); - var positionedToken = sourceUnit.findToken(askedPos); - - var lineMap = syntaxTree.lineMap(); - var posLine = lineMap.getLineNumberFromPosition(askedPos); - var tokenStartLine = lineMap.getLineNumberFromPosition(positionedToken.start()); - if (posLine < tokenStartLine) { - return null; + else { + sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen); } - - var breakpointResolver = new BreakpointResolver(posLine, lineMap); - return breakpointResolver.breakpointSpanOf(positionedToken); + sourceFilesByName[filename] = sourceFile; } - Breakpoints.getBreakpointLocation = getBreakpointLocation; - })(Services.Breakpoints || (Services.Breakpoints = {})); - var Breakpoints = Services.Breakpoints; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - (function (Services) { - var GetScriptLexicalStructureWalker = (function (_super) { - __extends(GetScriptLexicalStructureWalker, _super); - function GetScriptLexicalStructureWalker(fileName) { - _super.call(this); - this.fileName = fileName; - this.nameStack = []; - this.kindStack = []; - this.currentMemberVariableDeclaration = null; - this.currentVariableStatement = null; - this.currentInterfaceDeclaration = null; - this.parentScopes = []; - this.currentScope = this.createScope(); + program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost()); + typeInfoResolver = program.getTypeChecker(false); + fullTypeCheckChecker_doNotAccessDirectly = undefined; + } + function cleanupSemanticCache() { + if (program) { + typeInfoResolver = program.getTypeChecker(false); + fullTypeCheckChecker_doNotAccessDirectly = undefined; } - GetScriptLexicalStructureWalker.prototype.createScope = function () { - return { - items: TypeScript.createIntrinsicsObject(), - childScopes: TypeScript.createIntrinsicsObject(), - childScopeNames: [], - itemNames: [] - }; + } + function dispose() { + if (program) { + ts.forEach(program.getSourceFiles(), function (f) { + documentRegistry.releaseDocument(f.filename, program.getCompilerOptions()); + }); + } + } + function getSyntacticDiagnostics(filename) { + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + return program.getDiagnostics(getSourceFile(filename).getSourceFile()); + } + function getSemanticDiagnostics(filename) { + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + return getFullTypeCheckChecker().getDiagnostics(getSourceFile(filename)); + } + function getCompilerOptionsDiagnostics() { + synchronizeHostData(); + return program.getGlobalDiagnostics(); + } + function getValidCompletionEntryDisplayName(displayName, target) { + if (displayName && displayName.length > 0) { + var firstChar = displayName.charCodeAt(0); + if (firstChar === 39 /* singleQuote */ || firstChar === 34 /* doubleQuote */) { + displayName = TypeScript.stripStartAndEndQuotes(displayName); + } + if (TypeScript.Scanner.isValidIdentifier(TypeScript.SimpleText.fromString(displayName), target)) { + return displayName; + } + } + return undefined; + } + function createCompletionEntry(symbol) { + var displayName = getValidCompletionEntryDisplayName(symbol.getName(), program.getCompilerOptions().target); + if (!displayName) { + return undefined; + } + var declarations = symbol.getDeclarations(); + var firstDeclaration = [0]; + return { + name: displayName, + kind: getSymbolKind(symbol), + kindModifiers: declarations ? getNodeModifiers(declarations[0]) : ScriptElementKindModifier.none }; - - GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { - TypeScript.Debug.assert(containerName, "No scope name provided"); - - var key = kind + "+" + containerName; - this.nameStack.push(containerName); - this.kindStack.push(kind); - - var parentScope = this.currentScope; - this.parentScopes.push(parentScope); - - var scope = parentScope.childScopes[key]; - if (!scope) { - scope = this.createScope(); - parentScope.childScopes[key] = scope; - parentScope.childScopeNames.push(key); + } + function getCompletionsAtPosition(filename, position, isMemberCompletion) { + function getCompletionEntriesFromSymbols(symbols, session) { + ts.forEach(symbols, function (symbol) { + var entry = createCompletionEntry(symbol); + if (entry) { + session.entries.push(entry); + session.symbols[entry.name] = symbol; + } + }); + } + function isCompletionListBlocker(sourceUnit, position) { + if (position < 0 || position > TypeScript.fullWidth(sourceUnit)) { + return true; + } + return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position) || TypeScript.Syntax.isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) || isIdentifierDefinitionLocation(sourceUnit, position) || isRightOfIllegalDot(sourceUnit, position); + } + function getContainingObjectLiteralApplicableForCompletion(sourceUnit, position) { + var previousToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (previousToken) { + var parent = previousToken.parent; + switch (previousToken.kind()) { + case 70 /* OpenBraceToken */: + case 79 /* CommaToken */: + if (parent && parent.kind() === 2 /* SeparatedList */) { + parent = parent.parent; + } + if (parent && parent.kind() === 215 /* ObjectLiteralExpression */) { + return parent; + } + break; + } + } + return undefined; + } + function isIdentifierDefinitionLocation(sourceUnit, position) { + var positionedToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (positionedToken) { + var containingNodeKind = TypeScript.Syntax.containingNode(positionedToken) && TypeScript.Syntax.containingNode(positionedToken).kind(); + switch (positionedToken.kind()) { + case 79 /* CommaToken */: + return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 224 /* VariableDeclaration */ || containingNodeKind === 132 /* EnumDeclaration */; + case 72 /* OpenParenToken */: + return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 236 /* CatchClause */; + case 70 /* OpenBraceToken */: + return containingNodeKind === 132 /* EnumDeclaration */; + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + case 77 /* DotDotDotToken */: + return containingNodeKind === 242 /* Parameter */; + case 44 /* ClassKeyword */: + case 65 /* ModuleKeyword */: + case 46 /* EnumKeyword */: + case 52 /* InterfaceKeyword */: + case 27 /* FunctionKeyword */: + case 40 /* VarKeyword */: + case 64 /* GetKeyword */: + case 68 /* SetKeyword */: + return true; + } + switch (positionedToken.text()) { + case "class": + case "interface": + case "enum": + case "module": + return true; + } } - - this.currentScope = scope; - return parentScope; - }; - - GetScriptLexicalStructureWalker.prototype.popScope = function () { - TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); - this.currentScope = this.parentScopes.pop(); - this.kindStack.pop(); - this.nameStack.pop(); - }; - - GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { - var _this = this; - if (typeof scope === "undefined") { scope = this.currentScope; } - scope.itemNames.forEach(function (item) { - items.push(scope.items[item]); - }); - - scope.childScopeNames.forEach(function (childScope) { - _this.collectItems(items, scope.childScopes[childScope]); - }); - }; - - GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { - var visitor = new GetScriptLexicalStructureWalker(fileName); - unit.accept(visitor); - visitor.collectItems(items); - }; - - GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { - var key = kind + "+" + name; - - if (this.currentScope.items[key] !== undefined) { - this.addAdditionalSpan(node, key); - return; + return false; + } + function getNonIdentifierCompleteTokenOnLeft(sourceUnit, position) { + var positionedToken = TypeScript.Syntax.findCompleteTokenOnLeft(sourceUnit, position, true); + if (positionedToken && position === TypeScript.end(positionedToken) && positionedToken.kind() == 10 /* EndOfFileToken */) { + positionedToken = TypeScript.previousToken(positionedToken, true); } - - var item = new Services.NavigateToItem(); - item.name = name; - item.kind = kind; - item.matchKind = Services.MatchKind.exact; - item.fileName = this.fileName; - item.kindModifiers = this.getKindModifiers(modifiers); - item.minChar = this.position() + node.leadingTriviaWidth(); - item.limChar = item.minChar + node.width(); - item.containerName = this.nameStack.join("."); - item.containerKind = this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack); - - this.currentScope.items[key] = item; - this.currentScope.itemNames.push(key); - }; - - GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { - var item = this.currentScope.items[key]; - TypeScript.Debug.assert(item !== undefined); - - var start = this.position() + node.leadingTriviaWidth(); - var span = new Services.SpanInfo(start, start + node.width()); - - if (item.additionalSpans) { - item.additionalSpans.push(span); - } else { - item.additionalSpans = [span]; + if (positionedToken && position === TypeScript.end(positionedToken) && positionedToken.kind() === 11 /* IdentifierName */) { + positionedToken = TypeScript.previousToken(positionedToken, true); + } + return positionedToken; + } + function isRightOfIllegalDot(sourceUnit, position) { + var positionedToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (positionedToken) { + switch (positionedToken.kind()) { + case 76 /* DotToken */: + var leftOfDotPositionedToken = TypeScript.previousToken(positionedToken, true); + return leftOfDotPositionedToken && leftOfDotPositionedToken.kind() === 13 /* NumericLiteral */; + case 13 /* NumericLiteral */: + var text = positionedToken.text(); + return text.charAt(text.length - 1) === "."; + } + } + return false; + } + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getSourceFile(filename); + var sourceUnit = sourceFile.getSourceUnit(); + if (isCompletionListBlocker(sourceFile.getSyntaxTree().sourceUnit(), position)) { + host.log("Returning an empty list because completion was blocked."); + return null; + } + var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, true, true); + if (node && node.kind() === 11 /* IdentifierName */ && TypeScript.start(node) === TypeScript.end(node)) { + node = node.parent; + } + var isRightOfDot = false; + if (node && node.kind() === 212 /* MemberAccessExpression */ && TypeScript.end(node.expression) < position) { + isRightOfDot = true; + node = node.expression; + } + else if (node && node.kind() === 121 /* QualifiedName */ && TypeScript.end(node.left) < position) { + isRightOfDot = true; + node = node.left; + } + else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 212 /* MemberAccessExpression */ && node.parent.name === node) { + isRightOfDot = true; + node = node.parent.expression; + } + else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 121 /* QualifiedName */ && node.parent.right === node) { + isRightOfDot = true; + node = node.parent.left; + } + var mappedNode = getNodeAtPosition(sourceFile.getSourceFile(), TypeScript.end(node) - 1); + ts.Debug.assert(mappedNode, "Could not map a Fidelity node to an AST node"); + activeCompletionSession = { + filename: filename, + position: position, + entries: [], + symbols: {}, + location: mappedNode, + typeChecker: typeInfoResolver + }; + if (isRightOfDot) { + var type = typeInfoResolver.getApparentType(typeInfoResolver.getTypeOfNode(mappedNode)); + if (!type) { + return undefined; + } + var symbols = type.getApparentProperties(); + isMemberCompletion = true; + getCompletionEntriesFromSymbols(symbols, activeCompletionSession); + } + else { + var containingObjectLiteral = getContainingObjectLiteralApplicableForCompletion(sourceFile.getSyntaxTree().sourceUnit(), position); + if (containingObjectLiteral) { + var searchPosition = Math.min(position, TypeScript.end(containingObjectLiteral)); + var path = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, searchPosition); + while (node && node.kind() !== 215 /* ObjectLiteralExpression */) { + node = node.parent; + } + if (!node || node.kind() !== 215 /* ObjectLiteralExpression */) { + return null; + } + isMemberCompletion = true; + } + else { + isMemberCompletion = false; + var symbolMeanings = ts.SymbolFlags.Type | ts.SymbolFlags.Value | ts.SymbolFlags.Namespace; + var symbols = typeInfoResolver.getSymbolsInScope(mappedNode, symbolMeanings); + getCompletionEntriesFromSymbols(symbols, activeCompletionSession); } + } + if (!isMemberCompletion) { + Array.prototype.push.apply(activeCompletionSession.entries, keywordCompletions); + } + return { + isMemberCompletion: isMemberCompletion, + entries: activeCompletionSession.entries }; - - GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { - var result = []; - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 47 /* ExportKeyword */)) { - result.push(Services.ScriptElementKindModifier.exportedModifier); + } + function getCompletionEntryDetails(filename, position, entryName) { + filename = TypeScript.switchToForwardSlashes(filename); + var session = activeCompletionSession; + if (!session || session.filename !== filename || session.position !== position) { + return undefined; + } + var symbol = ts.lookUp(activeCompletionSession.symbols, entryName); + if (symbol) { + var type = session.typeChecker.getTypeOfSymbol(symbol); + ts.Debug.assert(type, "Could not find type for symbol"); + var completionEntry = createCompletionEntry(symbol); + return { + name: entryName, + kind: completionEntry.kind, + kindModifiers: completionEntry.kindModifiers, + type: session.typeChecker.typeToString(type, session.location), + fullSymbolName: typeInfoResolver.symbolToString(symbol, session.location), + docComment: "" + }; + } + else { + return { + name: entryName, + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none, + type: undefined, + fullSymbolName: entryName, + docComment: undefined + }; + } + } + function getNodeAtPosition(sourceFile, position) { + var current = sourceFile; + outer: while (true) { + for (var i = 0, n = current.getChildCount(); i < n; i++) { + var child = current.getChildAt(i); + if (child.getStart() <= position && position < child.getEnd()) { + current = child; + continue outer; + } + if (child.end > position) + break; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { - result.push(Services.ScriptElementKindModifier.ambientModifier); + return current; + } + } + function getContainerNode(node) { + while (true) { + node = node.parent; + if (!node) { + return node; + } + switch (node.kind) { + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + return node; + } + } + } + function getSymbolKind(symbol) { + var flags = symbol.getFlags(); + if (flags & ts.SymbolFlags.Module) + return ScriptElementKind.moduleElement; + if (flags & 16 /* Class */) + return ScriptElementKind.classElement; + if (flags & 32 /* Interface */) + return ScriptElementKind.interfaceElement; + if (flags & 64 /* Enum */) + return ScriptElementKind.enumElement; + if (flags & 1 /* Variable */) + return ScriptElementKind.variableElement; + if (flags & 8 /* Function */) + return ScriptElementKind.functionElement; + if (flags & 8192 /* GetAccessor */) + return ScriptElementKind.memberGetAccessorElement; + if (flags & 16384 /* SetAccessor */) + return ScriptElementKind.memberSetAccessorElement; + if (flags & 2048 /* Method */) + return ScriptElementKind.memberFunctionElement; + if (flags & 2 /* Property */) + return ScriptElementKind.memberVariableElement; + if (flags & 131072 /* IndexSignature */) + return ScriptElementKind.indexSignatureElement; + if (flags & 65536 /* ConstructSignature */) + return ScriptElementKind.constructSignatureElement; + if (flags & 32768 /* CallSignature */) + return ScriptElementKind.callSignatureElement; + if (flags & 4096 /* Constructor */) + return ScriptElementKind.constructorImplementationElement; + if (flags & 262144 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + if (flags & 4 /* EnumMember */) + return ScriptElementKind.variableElement; + return ScriptElementKind.unknown; + } + function getTypeKind(type) { + var flags = type.getFlags(); + if (flags & 128 /* Enum */) + return ScriptElementKind.enumElement; + if (flags & 1024 /* Class */) + return ScriptElementKind.classElement; + if (flags & 2048 /* Interface */) + return ScriptElementKind.interfaceElement; + if (flags & 512 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + if (flags & ts.TypeFlags.Intrinsic) + return ScriptElementKind.primitiveType; + if (flags & 256 /* StringLiteral */) + return ScriptElementKind.primitiveType; + return ScriptElementKind.unknown; + } + function getNodeModifiers(node) { + var flags = node.flags; + var result = []; + if (flags & 32 /* Private */) + result.push(ScriptElementKindModifier.privateMemberModifier); + if (flags & 16 /* Public */) + result.push(ScriptElementKindModifier.publicMemberModifier); + if (flags & 64 /* Static */) + result.push(ScriptElementKindModifier.staticModifier); + if (flags & 1 /* Export */) + result.push(ScriptElementKindModifier.exportedModifier); + if (ts.isInAmbientContext(node)) + result.push(ScriptElementKindModifier.ambientModifier); + return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + } + function getTypeAtPosition(filename, position) { + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getSourceFile(filename); + var node = getNodeAtPosition(sourceFile.getSourceFile(), position); + if (!node) + return undefined; + var symbol = typeInfoResolver.getSymbolInfo(node); + var type = symbol && typeInfoResolver.getTypeOfSymbol(symbol); + if (type) { + return { + memberName: new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), + docComment: "", + fullSymbolName: typeInfoResolver.symbolToString(symbol, getContainerNode(node)), + kind: getSymbolKind(symbol), + minChar: node.pos, + limChar: node.end + }; + } + return undefined; + } + function getDefinitionAtPosition(filename, position) { + function getTargetLabel(node, labelName) { + while (node) { + if (node.kind === 159 /* LabelledStatement */ && node.label.text === labelName) { + return node.label; + } + node = node.parent; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 57 /* PublicKeyword */)) { - result.push(Services.ScriptElementKindModifier.publicMemberModifier); + return undefined; + } + function isJumpStatementTarget(node) { + return node.kind === 55 /* Identifier */ && (node.parent.kind === 153 /* BreakStatement */ || node.parent.kind === 152 /* ContinueStatement */) && node.parent.label === node; + } + function isCallExpressionTarget(node) { + if (node.parent.kind === 130 /* PropertyAccess */ && node.parent.right === node) + node = node.parent; + return node.parent.kind === 132 /* CallExpression */ && node.parent.func === node; + } + function isNewExpressionTarget(node) { + if (node.parent.kind === 130 /* PropertyAccess */ && node.parent.right === node) + node = node.parent; + return node.parent.kind === 133 /* NewExpression */ && node.parent.func === node; + } + function isFunctionDeclaration(node) { + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 116 /* Method */: + case 136 /* FunctionExpression */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 137 /* ArrowFunction */: + return true; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 55 /* PrivateKeyword */)) { - result.push(Services.ScriptElementKindModifier.privateMemberModifier); + return false; + } + function isNameOfFunctionDeclaration(node) { + return node.kind === 55 /* Identifier */ && isFunctionDeclaration(node.parent) && node.parent.name === node; + } + function getDefinitionInfo(node, symbolKind, symbolName, containerName) { + return { + fileName: node.getSourceFile().filename, + minChar: node.getStart(), + limChar: node.getEnd(), + kind: symbolKind, + name: symbolName, + containerName: containerName, + containerKind: undefined + }; + } + function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) { + var declarations = []; + var definition; + ts.forEach(signatureDeclarations, function (d) { + if ((selectConstructors && d.kind === 117 /* Constructor */) || (!selectConstructors && (d.kind === 167 /* FunctionDeclaration */ || d.kind === 116 /* Method */))) { + declarations.push(d); + if (d.body) + definition = d; + } + }); + if (definition) { + result.push(getDefinitionInfo(definition, symbolKind, symbolName, containerName)); + return true; } - - if (TypeScript.SyntaxUtilities.containsToken(modifiers, 58 /* StaticKeyword */)) { - result.push(Services.ScriptElementKindModifier.staticModifier); + else if (declarations.length) { + result.push(getDefinitionInfo(declarations[declarations.length - 1], symbolKind, symbolName, containerName)); + return true; } - - return result.length > 0 ? result.join(',') : Services.ScriptElementKindModifier.none; - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { - var names = this.getModuleNames(node); - this.visitModuleDeclarationWorker(node, names, 0); - }; - - GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { - if (nameIndex === names.length) { - _super.prototype.visitModuleDeclaration.call(this, node); - } else { - var modifiers = nameIndex === 0 ? node.modifiers : TypeScript.Syntax.list([TypeScript.Syntax.token(47 /* ExportKeyword */)]); - var name = names[nameIndex]; - if (name) { - var kind = Services.ScriptElementKind.moduleElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.visitModuleDeclarationWorker(node, names, nameIndex + 1); - - this.popScope(); + return false; + } + function tryAddConstructSignature(symbol, location, symbolKind, symbolName, containerName, result) { + if (isNewExpressionTarget(location) || location.kind === 103 /* ConstructorKeyword */) { + if (symbol.flags & 16 /* Class */) { + var classDeclaration = symbol.getDeclarations()[0]; + ts.Debug.assert(classDeclaration && classDeclaration.kind === 169 /* ClassDeclaration */); + return tryAddSignature(classDeclaration.members, true, symbolKind, symbolName, containerName, result); } } - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { - var result = []; - - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } else { - this.getModuleNamesHelper(node.name, result); + return false; + } + function tryAddCallSignature(symbol, location, symbolKind, symbolName, containerName, result) { + if (isCallExpressionTarget(location) || isNewExpressionTarget(location) || isNameOfFunctionDeclaration(location)) { + return tryAddSignature(symbol.declarations, false, symbolKind, symbolName, containerName, result); } - - return result; - }; - - GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { - if (name.kind() === 121 /* QualifiedName */) { - var qualifiedName = name; - this.getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } else { - result.push(name.text()); + return false; + } + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getSourceFile(filename); + var node = getNodeAtPosition(sourceFile.getSourceFile(), position); + if (!node) { + return undefined; + } + if (isJumpStatementTarget(node)) { + var labelName = node.text; + var label = getTargetLabel(node.parent, node.text); + return label ? [getDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined; + } + var comment = ts.forEach(sourceFile.getSourceFile().referencedFiles, function (r) { return (r.pos <= position && position < r.end) ? r : undefined; }); + if (comment) { + var targetFilename = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(filename), comment.filename)); + if (program.getSourceFile(targetFilename)) { + return [{ + fileName: targetFilename, + minChar: 0, + limChar: 0, + kind: ScriptElementKind.scriptElement, + name: comment.filename, + containerName: undefined, + containerKind: undefined + }]; + } + return undefined; + } + var symbol = typeInfoResolver.getSymbolInfo(node); + if (!symbol || !(symbol.getDeclarations())) { + return undefined; + } + var result = []; + var declarations = symbol.getDeclarations(); + var symbolName = typeInfoResolver.symbolToString(symbol, node); + var symbolKind = getSymbolKind(symbol); + var containerSymbol = symbol.parent; + var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : ""; + var containerKind = containerSymbol ? getSymbolKind(symbol) : ""; + if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) && !tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) { + ts.forEach(declarations, function (declaration) { + result.push(getDefinitionInfo(declaration, symbolKind, symbolName, containerName)); + }); + } + return result; + } + function getSyntaxTree(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + return syntaxTreeCache.getCurrentFileSyntaxTree(filename); + } + function getCurrentSourceFile(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(filename); + return currentSourceFile; + } + function getNameOrDottedNameSpan(filename, startPos, endPos) { + function getTypeInfoEligiblePath(filename, position, isConstructorValidPosition) { + var sourceUnit = syntaxTreeCache.getCurrentFileSyntaxTree(filename).sourceUnit(); + var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, false, true); + if (ast === null) { + return null; } - }; - - GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.classElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitClassDeclaration.call(this, node); - - this.popScope(); + if (ast.kind() === 227 /* ParameterList */ && ast.parent.kind() === 142 /* CallSignature */ && ast.parent.parent.kind() === 137 /* ConstructorDeclaration */) { + ast = ast.parent.parent; } - }; - - GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.interfaceElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - this.currentInterfaceDeclaration = node; - _super.prototype.visitInterfaceDeclaration.call(this, node); - this.currentInterfaceDeclaration = null; - - this.popScope(); + switch (ast.kind()) { + default: + return null; + case 137 /* ConstructorDeclaration */: + var constructorAST = ast; + if (!isConstructorValidPosition || !(position >= TypeScript.start(constructorAST) && position <= TypeScript.start(constructorAST) + "constructor".length)) { + return null; + } + else { + return ast; + } + case 129 /* FunctionDeclaration */: + return null; + case 212 /* MemberAccessExpression */: + case 121 /* QualifiedName */: + case 50 /* SuperKeyword */: + case 14 /* StringLiteral */: + case 35 /* ThisKeyword */: + case 11 /* IdentifierName */: + return ast; } - }; - - GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { - if (this.currentInterfaceDeclaration === null) { - this.skip(node); - } else { - _super.prototype.visitObjectType.call(this, node); + } + filename = TypeScript.switchToForwardSlashes(filename); + var node = getTypeInfoEligiblePath(filename, startPos, false); + if (!node) + return null; + while (node) { + if (TypeScript.ASTHelpers.isNameOfMemberAccessExpression(node) || TypeScript.ASTHelpers.isRightSideOfQualifiedName(node)) { + node = node.parent; } - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { - var name = node.identifier.text(); - if (name) { - var kind = Services.ScriptElementKind.enumElement; - - this.createItem(node, node.modifiers, kind, name); - - this.pushNewContainerScope(name, kind); - - _super.prototype.visitEnumDeclaration.call(this, node); - - this.popScope(); + else { + break; } + } + return { + minChar: TypeScript.start(node), + limChar: TypeScript.end(node) + }; + } + function getBreakpointStatementAtPosition(filename, position) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxtree = getSyntaxTree(filename); + return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, position); + } + function getScriptLexicalStructure(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + var items = []; + TypeScript.Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, filename, syntaxTree.sourceUnit()); + return items; + } + function getOutliningRegions(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var sourceFile = getCurrentSourceFile(filename); + return ts.OutliningElementsCollector.collectElements(sourceFile); + } + function getBraceMatchingAtPosition(filename, position) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + return TypeScript.Services.BraceMatcher.getMatchSpans(syntaxTree, position); + } + function getIndentationAtPosition(filename, position, editorOptions) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + var scriptSnapshot = syntaxTreeCache.getCurrentScriptSnapshot(filename); + var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); + var options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); + return TypeScript.Services.Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); + } + function getFormattingManager(filename, options) { + if (formattingRulesProvider == null) { + formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(host); + } + formattingRulesProvider.ensureUpToDate(options); + var syntaxTree = getSyntaxTree(filename); + var scriptSnapshot = syntaxTreeCache.getCurrentScriptSnapshot(filename); + var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); + var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, formattingRulesProvider, options); + return manager; + } + function getFormattingEditsForRange(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatSelection(minChar, limChar); + } + function getFormattingEditsForDocument(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatDocument(minChar, limChar); + } + function getFormattingEditsOnPaste(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatOnPaste(minChar, limChar); + } + function getFormattingEditsAfterKeystroke(filename, position, key, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + if (key === "}") + return manager.formatOnClosingCurlyBrace(position); + else if (key === ";") + return manager.formatOnSemicolon(position); + else if (key === "\n") + return manager.formatOnEnter(position); + else + return []; + } + return { + dispose: dispose, + refresh: function () { + }, + cleanupSemanticCache: cleanupSemanticCache, + getSyntacticDiagnostics: getSyntacticDiagnostics, + getSemanticDiagnostics: getSemanticDiagnostics, + getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics, + getCompletionsAtPosition: getCompletionsAtPosition, + getCompletionEntryDetails: getCompletionEntryDetails, + getTypeAtPosition: getTypeAtPosition, + getSignatureAtPosition: function (filename, position) { return undefined; }, + getDefinitionAtPosition: getDefinitionAtPosition, + getReferencesAtPosition: function (filename, position) { return []; }, + getOccurrencesAtPosition: function (filename, position) { return []; }, + getImplementorsAtPosition: function (filename, position) { return []; }, + getNameOrDottedNameSpan: getNameOrDottedNameSpan, + getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, + getNavigateToItems: function (searchValue) { return []; }, + getScriptLexicalStructure: getScriptLexicalStructure, + getOutliningRegions: getOutliningRegions, + getBraceMatchingAtPosition: getBraceMatchingAtPosition, + getIndentationAtPosition: getIndentationAtPosition, + getFormattingEditsForRange: getFormattingEditsForRange, + getFormattingEditsForDocument: getFormattingEditsForDocument, + getFormattingEditsOnPaste: getFormattingEditsOnPaste, + getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, + getEmitOutput: function (filename) { return undefined; } + }; + } + ts.createLanguageService = createLanguageService; + function createClassifier(host) { + var scanner; + var noRegexTable; + if (!noRegexTable) { + noRegexTable = []; + noRegexTable[55 /* Identifier */] = true; + noRegexTable[3 /* StringLiteral */] = true; + noRegexTable[2 /* NumericLiteral */] = true; + noRegexTable[4 /* RegularExpressionLiteral */] = true; + noRegexTable[83 /* ThisKeyword */] = true; + noRegexTable[29 /* PlusPlusToken */] = true; + noRegexTable[30 /* MinusMinusToken */] = true; + noRegexTable[8 /* CloseParenToken */] = true; + noRegexTable[10 /* CloseBracketToken */] = true; + noRegexTable[6 /* CloseBraceToken */] = true; + noRegexTable[85 /* TrueKeyword */] = true; + noRegexTable[70 /* FalseKeyword */] = true; + } + function getClassificationsForLine(text, lexState) { + var offset = 0; + var lastTokenOrCommentEnd = 0; + var lastToken = 0 /* Unknown */; + var inUnterminatedMultiLineComment = false; + switch (lexState) { + case 3 /* InDoubleQuoteStringLiteral */: + text = '"\\\n' + text; + offset = 3; + break; + case 2 /* InSingleQuoteStringLiteral */: + text = "'\\\n" + text; + offset = 3; + break; + case 1 /* InMultiLineCommentTrivia */: + text = "/*\n" + text; + offset = 3; + break; + case 4 /* EndingWithDotToken */: + lastToken = 11 /* DotToken */; + break; + } + var result = { + finalLexState: 0 /* Start */, + entries: [] }; - - GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructorImplementationElement, "constructor"); - - var parameters = node.callSignature.parameterList.parameters; - if (parameters) { - for (var i = 0, n = parameters.nonSeparatorCount(); i < n; i++) { - var parameter = parameters.nonSeparatorAt(i); - - TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); - - if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { - this.createItem(node, parameter.modifiers, Services.ScriptElementKind.memberVariableElement, parameter.identifier.text()); + scanner = ts.createScanner(1 /* ES5 */, text, onError, processComment); + var token = 0 /* Unknown */; + do { + token = scanner.scan(); + if ((token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) && !noRegexTable[lastToken]) { + if (scanner.reScanSlashToken() === 4 /* RegularExpressionLiteral */) { + token = 4 /* RegularExpressionLiteral */; + } + } + else if (lastToken === 11 /* DotToken */) { + token = 55 /* Identifier */; + } + lastToken = token; + processToken(); + } while (token !== 1 /* EndOfFileToken */); + return result; + function onError(message) { + inUnterminatedMultiLineComment = message.key === ts.Diagnostics.Asterisk_Slash_expected.key; + } + function processComment(start, end) { + addLeadingWhiteSpace(start, end); + addResult(end - start, 3 /* Comment */); + } + function processToken() { + var start = scanner.getTokenPos(); + var end = scanner.getTextPos(); + addLeadingWhiteSpace(start, end); + addResult(end - start, classFromKind(token)); + if (end >= text.length) { + if (inUnterminatedMultiLineComment) { + result.finalLexState = 1 /* InMultiLineCommentTrivia */; + } + else if (token === 3 /* StringLiteral */) { + var tokenText = scanner.getTokenText(); + if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { + var quoteChar = tokenText.charCodeAt(0); + result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; } } + else if (token === 11 /* DotToken */) { + result.finalLexState = 4 /* EndingWithDotToken */; + } } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMemberVariableDeclaration = function (node) { - this.currentMemberVariableDeclaration = node; - _super.prototype.visitMemberVariableDeclaration.call(this, node); - this.currentMemberVariableDeclaration = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableStatement = function (node) { - this.currentVariableStatement = node; - _super.prototype.visitVariableStatement.call(this, node); - this.currentVariableStatement = null; - }; - - GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { - var modifiers = this.currentMemberVariableDeclaration ? this.currentMemberVariableDeclaration.modifiers : TypeScript.Syntax.emptyList; - var kind = this.currentMemberVariableDeclaration ? Services.ScriptElementKind.memberVariableElement : Services.ScriptElementKind.variableElement; - this.createItem(node, modifiers, kind, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.indexSignatureElement, "[]"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.callSignatureElement, "()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.constructSignatureElement, "new()"); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberFunctionElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { - this.createItem(node, TypeScript.Syntax.emptyList, Services.ScriptElementKind.memberVariableElement, node.propertyName.text()); - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { - if (node.identifier.width() > 0) { - this.createItem(node, node.modifiers, Services.ScriptElementKind.functionElement, node.identifier.text()); + } + function addLeadingWhiteSpace(start, end) { + if (start > lastTokenOrCommentEnd) { + addResult(start - lastTokenOrCommentEnd, 4 /* Whitespace */); } - - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { - this.skip(node); - }; - - GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { - this.skip(node); - }; - return GetScriptLexicalStructureWalker; - })(TypeScript.PositionTrackingWalker); - Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); + lastTokenOrCommentEnd = end; + } + function addResult(length, classification) { + if (length > 0) { + if (result.entries.length === 0) { + length -= offset; + } + result.entries.push({ length: length, classification: classification }); + } + } + } + function isBinaryExpressionOperatorToken(token) { + switch (token) { + case 26 /* AsteriskToken */: + case 27 /* SlashToken */: + case 28 /* PercentToken */: + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 31 /* LessThanLessThanToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + case 77 /* InstanceOfKeyword */: + case 76 /* InKeyword */: + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + case 34 /* AmpersandToken */: + case 36 /* CaretToken */: + case 35 /* BarToken */: + case 39 /* AmpersandAmpersandToken */: + case 40 /* BarBarToken */: + case 53 /* BarEqualsToken */: + case 52 /* AmpersandEqualsToken */: + case 54 /* CaretEqualsToken */: + case 49 /* LessThanLessThanEqualsToken */: + case 50 /* GreaterThanGreaterThanEqualsToken */: + case 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 44 /* PlusEqualsToken */: + case 45 /* MinusEqualsToken */: + case 46 /* AsteriskEqualsToken */: + case 47 /* SlashEqualsToken */: + case 48 /* PercentEqualsToken */: + case 43 /* EqualsToken */: + case 14 /* CommaToken */: + return true; + default: + return false; + } + } + function isPrefixUnaryExpressionOperatorToken(token) { + switch (token) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + return true; + default: + return false; + } + } + function isKeyword(token) { + return token >= ts.SyntaxKind.FirstKeyword && token <= ts.SyntaxKind.LastKeyword; + } + function classFromKind(token) { + if (isKeyword(token)) { + return 1 /* Keyword */; + } + else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { + return 2 /* Operator */; + } + else if (token >= ts.SyntaxKind.FirstPunctuation && token <= ts.SyntaxKind.LastPunctuation) { + return 0 /* Punctuation */; + } + switch (token) { + case 2 /* NumericLiteral */: + return 6 /* NumberLiteral */; + case 3 /* StringLiteral */: + return 7 /* StringLiteral */; + case 4 /* RegularExpressionLiteral */: + return 8 /* RegExpLiteral */; + case 55 /* Identifier */: + default: + return 5 /* Identifier */; + } + } + return { + getClassificationsForLine: getClassificationsForLine + }; + } + ts.createClassifier = createClassifier; + function initializeServices() { + ts.objectAllocator = { + getNodeConstructor: function (kind) { + function Node() { + } + var proto = kind === 177 /* SourceFile */ ? new SourceFileObject() : new NodeObject(); + proto.kind = kind; + proto.pos = 0; + proto.end = 0; + proto.flags = 0; + proto.parent = undefined; + Node.prototype = proto; + return Node; + }, + getSymbolConstructor: function () { return SymbolObject; }, + getTypeConstructor: function () { return TypeObject; }, + getSignatureConstructor: function () { return SignatureObject; } + }; + } + initializeServices(); +})(ts || (ts = {})); var TypeScript; (function (TypeScript) { - (function (Services) { - function copyDataObject(dst, src) { - for (var e in dst) { - if (typeof dst[e] == "object") { - copyDataObject(dst[e], src[e]); - } else if (typeof dst[e] != "function") { - dst[e] = src[e]; + function isNoDefaultLibMatch(comment) { + var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; + return isNoDefaultLibRegex.exec(comment); + } + TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; + function getFileReferenceFromReferencePath(fileName, text, position, comment, diagnostics) { + var lineMap = text.lineMap(); + var simpleReferenceRegEx = /^\/\/\/\s*= 7 && fullReference[6] === "true"; + return { + line: 0, + character: 0, + position: 0, + length: 0, + path: TypeScript.switchToForwardSlashes(adjustedPath), + isResident: isResident + }; + } + } + } + return null; + } + var reportDiagnostic = function () { + }; + function processImports(text, scanner, token, importedFiles) { + var lineChar = { line: -1, character: -1 }; + var lineMap = text.lineMap(); + var start = new Date().getTime(); + while (token.kind() !== 10 /* EndOfFileToken */) { + if (token.kind() === 49 /* ImportKeyword */) { + var importToken = token; + token = scanner.scan(false); + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { + token = scanner.scan(false); + if (token.kind() === 107 /* EqualsToken */) { + token = scanner.scan(false); + if (token.kind() === 65 /* ModuleKeyword */ || token.kind() === 66 /* RequireKeyword */) { + token = scanner.scan(false); + if (token.kind() === 72 /* OpenParenToken */) { + token = scanner.scan(false); + lineMap.fillLineAndCharacterFromPosition(TypeScript.start(importToken, text), lineChar); + if (token.kind() === 14 /* StringLiteral */) { + var ref = { + line: lineChar.line, + character: lineChar.character, + position: TypeScript.start(token, text), + length: TypeScript.width(token), + path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())), + isResident: false + }; + importedFiles.push(ref); + } + } + } + } + } + } + token = scanner.scan(false); + } + var totalTime = new Date().getTime() - start; + } + function processTripleSlashDirectives(fileName, text, firstToken) { + var leadingTrivia = firstToken.leadingTrivia(text); + var position = 0; + var lineChar = { line: -1, character: -1 }; + var noDefaultLib = false; + var diagnostics = []; + var referencedFiles = []; + var lineMap = text.lineMap(); + for (var i = 0, n = leadingTrivia.count(); i < n; i++) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.kind() === 7 /* SingleLineCommentTrivia */) { + var triviaText = trivia.fullText(); + var referencedCode = getFileReferenceFromReferencePath(fileName, text, position, triviaText, diagnostics); + if (referencedCode) { + lineMap.fillLineAndCharacterFromPosition(position, lineChar); + referencedCode.position = position; + referencedCode.length = trivia.fullWidth(); + referencedCode.line = lineChar.line; + referencedCode.character = lineChar.character; + referencedFiles.push(referencedCode); + } + var isNoDefaultLib = isNoDefaultLibMatch(triviaText); + if (isNoDefaultLib) { + noDefaultLib = isNoDefaultLib[3] === "true"; } } - return dst; + position += trivia.fullWidth(); + } + return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles }; + } + function preProcessFile(fileName, sourceText, readImportFiles) { + if (readImportFiles === void 0) { readImportFiles = true; } + var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText); + var scanner = TypeScript.Scanner.createScanner(1 /* ES5 */, text, reportDiagnostic); + var firstToken = scanner.scan(false); + var importedFiles = []; + if (readImportFiles) { + processImports(text, scanner, firstToken, importedFiles); + } + var properties = processTripleSlashDirectives(fileName, text, firstToken); + return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics }; + } + TypeScript.preProcessFile = preProcessFile; + function getReferencedFiles(fileName, sourceText) { + return preProcessFile(fileName, sourceText, false).referencedFiles; + } + TypeScript.getReferencedFiles = getReferencedFiles; +})(TypeScript || (TypeScript = {})); +var debugObjectHost = this; +var ts; +(function (ts) { + var LanguageVersion; + (function (LanguageVersion) { + LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; + LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; + })(LanguageVersion || (LanguageVersion = {})); + var ModuleGenTarget; + (function (ModuleGenTarget) { + ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; + ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; + ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous"; + })(ModuleGenTarget || (ModuleGenTarget = {})); + function languageVersionToScriptTarget(languageVersion) { + if (typeof languageVersion === "undefined") + return undefined; + switch (languageVersion) { + case 0 /* EcmaScript3 */: + return 0 /* ES3 */; + case 1 /* EcmaScript5 */: + return 1 /* ES5 */; + default: + throw Error("unsuported LanguageVersion value: " + languageVersion); + } + } + function moduleGenTargetToModuleKind(moduleGenTarget) { + if (typeof moduleGenTarget === "undefined") + return undefined; + switch (moduleGenTarget) { + case 2 /* Asynchronous */: + return 2 /* AMD */; + case 1 /* Synchronous */: + return 1 /* CommonJS */; + case 0 /* Unspecified */: + return 0 /* None */; + default: + throw Error("unsuported ModuleGenTarget value: " + moduleGenTarget); + } + } + function scriptTargetTolanguageVersion(scriptTarget) { + if (typeof scriptTarget === "undefined") + return undefined; + switch (scriptTarget) { + case 0 /* ES3 */: + return 0 /* EcmaScript3 */; + case 1 /* ES5 */: + return 1 /* EcmaScript5 */; + default: + throw Error("unsuported ScriptTarget value: " + scriptTarget); + } + } + function moduleKindToModuleGenTarget(moduleKind) { + if (typeof moduleKind === "undefined") + return undefined; + switch (moduleKind) { + case 2 /* AMD */: + return 2 /* Asynchronous */; + case 1 /* CommonJS */: + return 1 /* Synchronous */; + case 0 /* None */: + return 0 /* Unspecified */; + default: + throw Error("unsuported ModuleKind value: " + moduleKind); + } + } + function compilationSettingsToCompilerOptions(settings) { + var options = {}; + options.removeComments = settings.removeComments; + options.noResolve = settings.noResolve; + options.noImplicitAny = settings.noImplicitAny; + options.noLib = settings.noLib; + options.target = languageVersionToScriptTarget(settings.codeGenTarget); + options.module = moduleGenTargetToModuleKind(settings.moduleGenTarget); + options.out = settings.outFileOption; + options.outDir = settings.outDirOption; + options.sourceMap = settings.mapSourceFiles; + options.mapRoot = settings.mapRoot; + options.sourceRoot = settings.sourceRoot; + options.declaration = settings.generateDeclarationFiles; + options.codepage = settings.codepage; + options.emitBOM = settings.emitBOM; + return options; + } + function compilerOptionsToCompilationSettings(options) { + var settings = {}; + settings.removeComments = options.removeComments; + settings.noResolve = options.noResolve; + settings.noImplicitAny = options.noImplicitAny; + settings.noLib = options.noLib; + settings.codeGenTarget = scriptTargetTolanguageVersion(options.target); + settings.moduleGenTarget = moduleKindToModuleGenTarget(options.module); + settings.outFileOption = options.out; + settings.outDirOption = options.outDir; + settings.mapSourceFiles = options.sourceMap; + settings.mapRoot = options.mapRoot; + settings.sourceRoot = options.sourceRoot; + settings.generateDeclarationFiles = options.declaration; + settings.codepage = options.codepage; + settings.emitBOM = options.emitBOM; + return settings; + } + function logInternalError(logger, err) { + logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); + } + var ScriptSnapshotShimAdapter = (function () { + function ScriptSnapshotShimAdapter(scriptSnapshotShim) { + this.scriptSnapshotShim = scriptSnapshotShim; + this.lineStartPositions = null; + } + ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { + return this.scriptSnapshotShim.getText(start, end); + }; + ScriptSnapshotShimAdapter.prototype.getLength = function () { + return this.scriptSnapshotShim.getLength(); + }; + ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { + if (this.lineStartPositions == null) { + this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); + } + return this.lineStartPositions; + }; + ScriptSnapshotShimAdapter.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); + if (encoded == null) { + return null; + } + var decoded = JSON.parse(encoded); + return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); + }; + return ScriptSnapshotShimAdapter; + })(); + var LanguageServiceShimHostAdapter = (function () { + function LanguageServiceShimHostAdapter(shimHost) { + this.shimHost = shimHost; + } + LanguageServiceShimHostAdapter.prototype.information = function () { + return this.shimHost.information(); + }; + LanguageServiceShimHostAdapter.prototype.debug = function () { + return this.shimHost.debug(); + }; + LanguageServiceShimHostAdapter.prototype.warning = function () { + return this.shimHost.warning(); + }; + LanguageServiceShimHostAdapter.prototype.error = function () { + return this.shimHost.error(); + }; + LanguageServiceShimHostAdapter.prototype.fatal = function () { + return this.shimHost.fatal(); + }; + LanguageServiceShimHostAdapter.prototype.log = function (s) { + this.shimHost.log(s); + }; + LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { + var settingsJson = this.shimHost.getCompilationSettings(); + if (settingsJson == null || settingsJson == "") { + throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); + return null; + } + var options = compilationSettingsToCompilerOptions(JSON.parse(settingsJson)); + options.noResolve = true; + return options; + }; + LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { + var encoded = this.shimHost.getScriptFileNames(); + return JSON.parse(encoded); + }; + LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { + return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); + }; + LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { + return this.shimHost.getScriptVersion(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { + return this.shimHost.getScriptIsOpen(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { + var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); + if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { + return null; + } + try { + return JSON.parse(diagnosticMessagesJson); + } + catch (e) { + this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); + return null; + } + }; + LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () { + return this.shimHost.getCancellationToken(); + }; + return LanguageServiceShimHostAdapter; + })(); + function simpleForwardCall(logger, actionDescription, action) { + logger.log(actionDescription); + var start = Date.now(); + var result = action(); + var end = Date.now(); + logger.log(actionDescription + " completed in " + (end - start) + " msec"); + if (typeof (result) === "string") { + var str = result; + if (str.length > 128) { + str = str.substring(0, 128) + "..."; + } + logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); } - Services.copyDataObject = copyDataObject; - - var TypeScriptServicesFactory = (function () { - function TypeScriptServicesFactory() { - this._shims = []; + return result; + } + function forwardJSONCall(logger, actionDescription, action) { + try { + var result = simpleForwardCall(logger, actionDescription, action); + return JSON.stringify({ result: result }); + } + catch (err) { + if (err instanceof ts.OperationCanceledException) { + return JSON.stringify({ canceled: true }); } - TypeScriptServicesFactory.prototype.createPullLanguageService = function (host) { - try { - return new TypeScript.Services.LanguageService(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { - try { - var hostAdapter = new Services.LanguageServiceShimHostAdapter(host); - var pullLanguageService = this.createPullLanguageService(hostAdapter); - return new Services.LanguageServiceShim(this, host, pullLanguageService); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifier = function (host) { - try { - return new TypeScript.Services.Classifier(host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createClassifierShim = function (host) { - try { - return new Services.ClassifierShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServices = function (host) { - try { - return new TypeScript.Services.CoreServices(host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { - try { - return new Services.CoreServicesShim(this, host); - } catch (err) { - TypeScript.Services.logInternalError(host.logger, err); - throw err; - } - }; - - TypeScriptServicesFactory.prototype.close = function () { - this._shims = []; + logInternalError(logger, err); + err.description = actionDescription; + return JSON.stringify({ error: err }); + } + } + var ShimBase = (function () { + function ShimBase(factory) { + this.factory = factory; + factory.registerShim(this); + } + ShimBase.prototype.dispose = function (dummy) { + this.factory.unregisterShim(this); + }; + return ShimBase; + })(); + var LanguageServiceShimObject = (function (_super) { + __extends(LanguageServiceShimObject, _super); + function LanguageServiceShimObject(factory, host, languageService) { + _super.call(this, factory); + this.host = host; + this.languageService = languageService; + this.logger = this.host; + } + LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.logger, actionDescription, action); + }; + LanguageServiceShimObject.prototype.dispose = function (dummy) { + this.logger.log("dispose()"); + this.languageService.dispose(); + this.languageService = null; + if (debugObjectHost && debugObjectHost.CollectGarbage) { + debugObjectHost.CollectGarbage(); + this.logger.log("CollectGarbage()"); + } + this.logger = null; + _super.prototype.dispose.call(this, dummy); + }; + LanguageServiceShimObject.prototype.refresh = function (throwOnError) { + var _this = this; + this.forwardJSONCall("refresh(" + throwOnError + ")", function () { + _this.languageService.refresh(); + return null; + }); + }; + LanguageServiceShimObject.prototype.cleanupSemanticCache = function () { + var _this = this; + this.forwardJSONCall("cleanupSemanticCache()", function () { + _this.languageService.cleanupSemanticCache(); + return null; + }); + }; + LanguageServiceShimObject.realizeDiagnostic = function (diagnostic) { + return { + message: diagnostic.messageText, + start: diagnostic.start, + length: diagnostic.length, + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase() }; - - TypeScriptServicesFactory.prototype.registerShim = function (shim) { - this._shims.push(shim); + }; + LanguageServiceShimObject.prototype.realizeDiagnosticWithFileName = function (diagnostic) { + return { + fileName: diagnostic.file.filename, + message: diagnostic.messageText, + start: diagnostic.start, + length: diagnostic.length, + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase() }; - - TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { - for (var i = 0, n = this._shims.length; i < n; i++) { - if (this._shims[i] === shim) { - delete this._shims[i]; - return; - } + }; + LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSyntacticDiagnostics(\"" + fileName + "\")", function () { + var errors = _this.languageService.getSyntacticDiagnostics(fileName); + return errors.map(LanguageServiceShimObject.realizeDiagnostic); + }); + }; + LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSemanticDiagnostics(\"" + fileName + "\")", function () { + var errors = _this.languageService.getSemanticDiagnostics(fileName); + return errors.map(LanguageServiceShimObject.realizeDiagnostic); + }); + }; + LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () { + var _this = this; + return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { + var errors = _this.languageService.getCompilerOptionsDiagnostics(); + return errors.map(function (d) { return _this.realizeDiagnosticWithFileName(d); }); + }); + }; + LanguageServiceShimObject.prototype.getTypeAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getTypeAtPosition(\"" + fileName + "\", " + position + ")", function () { + var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); + return typeInfo; + }); + }; + LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { + var _this = this; + return this.forwardJSONCall("getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", function () { + var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); + return spanInfo; + }); + }; + LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", function () { + var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position); + return spanInfo; + }); + }; + LanguageServiceShimObject.prototype.getSignatureAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getSignatureAtPosition(\"" + fileName + "\", " + position + ")", function () { + var signatureInfo = _this.languageService.getSignatureAtPosition(fileName, position); + return signatureInfo; + }); + }; + LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getDefinitionAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", function () { + var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position); + return textRanges; + }); + }; + LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { + var _this = this; + return this.forwardJSONCall("getIndentationAtPosition(\"" + fileName + "\", " + position + ")", function () { + var localOptions = JSON.parse(options); + var columnOffset = _this.languageService.getIndentationAtPosition(fileName, position, localOptions); + return { value: columnOffset }; + }); + }; + LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getReferencesAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getReferencesAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getOccurrencesAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getImplementorsAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getImplementorsAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { + var _this = this; + return this.forwardJSONCall("getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", function () { + var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); + return completion; + }); + }; + LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { + var _this = this; + return this.forwardJSONCall("getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", function () { + var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName); + return details; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue) { + var _this = this; + return this.forwardJSONCall("getNavigateToItems(\"" + searchValue + "\")", function () { + var items = _this.languageService.getNavigateToItems(searchValue); + var result = _this._navigateToItemsToString(items); + return result; + }); + }; + LanguageServiceShimObject.prototype.getScriptLexicalStructure = function (fileName) { + var _this = this; + return this.forwardJSONCall("getScriptLexicalStructure(\"" + fileName + "\")", function () { + var items = _this.languageService.getScriptLexicalStructure(fileName); + var result = _this._navigateToItemsToString(items); + return result; + }); + }; + LanguageServiceShimObject.prototype.getOutliningRegions = function (fileName) { + var _this = this; + return this.forwardJSONCall("getOutliningRegions(\"" + fileName + "\")", function () { + var items = _this.languageService.getOutliningRegions(fileName); + var spans = ts.map(items, function (i) { return i.textSpan; }); + return spans; + }); + }; + LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) { + var _this = this; + return this.forwardJSONCall("getEmitOutput(\"" + fileName + "\")", function () { + var output = _this.languageService.getEmitOutput(fileName); + return output; + }); + }; + LanguageServiceShimObject.prototype._navigateToItemsToString = function (items) { + var result = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + result.push({ + name: item.name, + kind: item.kind, + kindModifiers: item.kindModifiers, + containerName: item.containerName, + containerKind: item.containerKind, + matchKind: item.matchKind, + fileName: item.fileName, + minChar: item.minChar, + limChar: item.limChar, + additionalSpans: item.additionalSpans ? item.additionalSpans.map(function (i) { + return { start: i.minChar, end: i.limChar }; + }) : undefined + }); + } + return result; + }; + return LanguageServiceShimObject; + })(ShimBase); + var ClassifierShimObject = (function (_super) { + __extends(ClassifierShimObject, _super); + function ClassifierShimObject(factory, host) { + _super.call(this, factory); + this.host = host; + this.classifier = ts.createClassifier(this.host); + } + ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState) { + var classification = this.classifier.getClassificationsForLine(text, lexState); + var items = classification.entries; + var result = ""; + for (var i = 0; i < items.length; i++) { + result += items[i].length + "\n"; + result += items[i].classification + "\n"; + } + result += classification.finalLexState; + return result; + }; + return ClassifierShimObject; + })(ShimBase); + var CoreServicesShimObject = (function (_super) { + __extends(CoreServicesShimObject, _super); + function CoreServicesShimObject(factory, host) { + _super.call(this, factory); + this.host = host; + } + CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.host, actionDescription, action); + }; + CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { + return this.forwardJSONCall("getPreProcessedFileInfo(\"" + fileName + "\")", function () { + var result = TypeScript.preProcessFile(fileName, sourceText); + return result; + }); + }; + CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () { + return this.forwardJSONCall("getDefaultCompilationSettings()", function () { + return compilerOptionsToCompilationSettings(ts.getDefaultCompilerOptions()); + }); + }; + return CoreServicesShimObject; + })(ShimBase); + var TypeScriptServicesFactory = (function () { + function TypeScriptServicesFactory() { + this._shims = []; + this.documentRegistry = ts.createDocumentRegistry(); + } + TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { + try { + var hostAdapter = new LanguageServiceShimHostAdapter(host); + var languageService = ts.createLanguageService(hostAdapter, this.documentRegistry); + return new LanguageServiceShimObject(this, host, languageService); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createClassifierShim = function (host) { + try { + return new ClassifierShimObject(this, host); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { + try { + return new CoreServicesShimObject(this, host); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.close = function () { + this._shims = []; + this.documentRegistry = ts.createDocumentRegistry(); + }; + TypeScriptServicesFactory.prototype.registerShim = function (shim) { + this._shims.push(shim); + }; + TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { + for (var i = 0, n = this._shims.length; i < n; i++) { + if (this._shims[i] === shim) { + delete this._shims[i]; + return; } - - throw TypeScript.Errors.invalidOperation(); - }; - return TypeScriptServicesFactory; - })(); - Services.TypeScriptServicesFactory = TypeScriptServicesFactory; - })(TypeScript.Services || (TypeScript.Services = {})); - var Services = TypeScript.Services; -})(TypeScript || (TypeScript = {})); + } + throw TypeScript.Errors.invalidOperation(); + }; + return TypeScriptServicesFactory; + })(); + ts.TypeScriptServicesFactory = TypeScriptServicesFactory; +})(ts || (ts = {})); var TypeScript; (function (TypeScript) { (function (Services) { - var BraceMatcher = (function () { - function BraceMatcher() { - } - BraceMatcher.getMatchSpans = function (syntaxTree, position) { - var result = []; - - var currentToken = syntaxTree.sourceUnit().findToken(position); - - BraceMatcher.getMatchingCloseBrace(currentToken, position, result); - BraceMatcher.getMatchingOpenBrace(currentToken, position, result); - - return result; - }; - - BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { - if (currentToken.start() === position) { - var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); - if (closingBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart(); - for (var i = 0, n = parentElement.childCount(); i < n; i++) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === closingBraceKind) { - var range1 = new TypeScript.TextSpan(position, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition + element.leadingTriviaWidth(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition += element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { - if (currentToken.fullStart() === position) { - currentToken = currentToken.previousToken(); - } - - if (currentToken !== null && currentToken.start() === (position - 1)) { - var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); - if (openBraceKind !== null) { - var parentElement = currentToken.parentElement(); - var currentPosition = currentToken.parent().fullStart() + parentElement.fullWidth(); - for (var i = parentElement.childCount() - 1; i >= 0; i--) { - var element = parentElement.childAt(i); - if (element !== null && element.fullWidth() > 0) { - if (element.kind() === openBraceKind) { - var range1 = new TypeScript.TextSpan(position - 1, currentToken.token().width()); - var range2 = new TypeScript.TextSpan(currentPosition - element.trailingTriviaWidth() - element.width(), element.width()); - result.push(range1, range2); - break; - } - - currentPosition -= element.fullWidth(); - } - } - } - } - }; - - BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 70 /* OpenBraceToken */: - return 71 /* CloseBraceToken */; - case 72 /* OpenParenToken */: - return 73 /* CloseParenToken */; - case 74 /* OpenBracketToken */: - return 75 /* CloseBracketToken */; - case 80 /* LessThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; - } - return null; - }; - - BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { - var element = positionedElement !== null && positionedElement.element(); - switch (element.kind()) { - case 71 /* CloseBraceToken */: - return 70 /* OpenBraceToken */; - case 73 /* CloseParenToken */: - return 72 /* OpenParenToken */; - case 75 /* CloseBracketToken */: - return 74 /* OpenBracketToken */; - case 81 /* GreaterThanToken */: - return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; - } - return null; - }; - return BraceMatcher; - })(); - Services.BraceMatcher = BraceMatcher; + Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory; })(TypeScript.Services || (TypeScript.Services = {})); var Services = TypeScript.Services; })(TypeScript || (TypeScript = {}));